Older blog entries for oubiwann (starting at number 276)

7 Apr 2012 (updated 12 Apr 2012 at 05:02 UTC) »

New Domain Name for the Blog

JP's wonderful blog sub-domain (and clever joke sub-domain) got me to thinking about what to do for a blog name again. Especially in the event that I ever leave blogger. For a year I tried using tau.tologo.us, but I think that was far too obscure a play on words. I gave up for a few years after that, and just stuck with the original username.blogspot.com setup.

After revisiting the possibilities again, looking at everything from rephrasing Maxwell's equations as sub-domains to using a play on Hindi words (I almost went with blog.bija.li, doing the electric thing as well as going for the esoteric seed syllable/mantra reference). Also too obscure.

After too many hours on Google Translate (trying something out, getting it translated, back-translating it; that often provides humorous -- if not enlightening -- results), I managed to stumble across one I really liked. Immediately, in fact: cogitat.io.

How is it that this hasn't been taken? I was dumb-founded. And delighted :-) Check out the possible translations of the Latin goodness:
  • thought
  • cogitation
  • thinking
  • considering
  • deliberating
  • reflection
  • meditation
  • reflexion
  • thought
  • design
  • plan
  • reasoning power

Splitting words at the tld, we get the aptly wonderful cogitat i/o: "he thinks I/O." As a programmer who specializes in side effects (don't most of us?), I'm surrounded by I/O. I view it as software's analog to the ever-important physics (and life) concept of "cause and effect." Needless to say, I do love the tld.

With the domain all set up, I was off to Blogspot... only to find that Google doesn't let you use "naked" domains as your blog name.

*sigh*

So then it was back to the drawing board (Google Translate). Fortunately, after just a few minutes of playing around, technicae popped up, and I thought this might be it. technicae cogitat io can almost be translated as "meditating on technology" or "the design of technology."

But there's more: I saw that if io was typed with a capital I, it would render the translation as "John." Which has led to the ultimate, most profound, inner-most secret essence of this blog:
Technicae cogitat Io.
Videre Io currunt.
Currere, Io! Currere!
Probably not something something Cicero would have recognized, nor even something parsable in Vulgar Latin. Most of you have probably already got it, though. Regardless, here it is in naked English:
"John thinks about technology.
See John run.
Run, John! Run!"

Syndicated 2012-04-06 23:11:00 (Updated 2012-04-12 04:45:36) from Duncan McGreggor

5 Apr 2012 (updated 5 Apr 2012 at 16:02 UTC) »

Recent Stackiness

Meetup

Tomorrow is OpenStack Atlanta's second event (the first being a HackIn).  Ken Pepple is going to be talking about deploying OpenStack, something he should feel very comfortable doing, given his book as well as Internap's latest announcement :-)

There's more info about tomorrow's event at the Meetup page.

OpenStack Design Summit

In a couple weeks, a bunch of us from DreamHost are going to be heading to the OpenStack Summit and Conference in San Francisco. There's a lot of buzz about it both inside the company, in the offices of our fellow OpenStack collaborators, and in the wider open source community. With Citrix's recent announcement, Internap's deployment, Eucalyptus' approval by Amazon, there's plenty of Cloud Drama to go around. Fortunately, the focus of the Summit and Conference is on the important positives: how to improve an extraordinary piece of software and disseminating expertise. Can't wait!

GitHub Love

Last but not least, the Dev team at DreamHost has been using Github in conjunction with Launchpad in a manner similar to how the OpenStack project does it. The increased interest in open source software in our offices is starting to make its way out to our customers, and we've got a new web presence that is the first step in supporting this new direction. We're cooking up a bunch more stuff, so be sure to check in on our repos from time to time :-)


Syndicated 2012-04-05 04:55:00 (Updated 2012-04-05 15:14:10) from Duncan McGreggor

24 Mar 2012 (updated 26 Mar 2012 at 14:02 UTC) »

A Conversation with Guido about Callbacks

In a previous post, I promised to share some of my PyCon conversations from this year -- this is the first in that series :-)

As I'm sure many folks noticed, during Guido van Rossum's keynote address at PyCon 2012, he mentioned that he likes the way that gevent presents asynchronous usage to developers taking advantage of that framework.

What's more, though, is that he said he's not a fan of anything that requires him to write a callback (at which point, I shed a tear). He continued with: "Whenever I see I callback, I know that I'm going to get it wrong. So I like other approaches."

As a great lover of the callback approach, I didn't quite know how to take this, even after pondering it for a while. But it really intrigued me that he didn't have the confidence in being able to get it right. This is Guido we're talking about, so there was definitely more to this than met the eye.

As such, when I saw Guido in the hall at the sprints, I took that opportunity to ask him about this. He was quite generous with his time and experiences, and was very patient as I scribbled some notes. His perspective is a valuable one, and gave me lots of food for thought throughout the sprints and well into this week. I've spent that intervening time reflecting on callbacks, why I like them, how I use them, as well as the in-line style of eventlet and gevent [1].


The Conversation

I only asked a few initial questions, and Guido was off to the races. I wanted to listen more than write, so what I'm sharing is a condensed (and hopefully correct!) version of what he said.

The essence is this: Guido developed an aesthetic for reading a series of if statements that represented async operations, as this helped him see -- at a glance -- what the overall logical flow was for that block of code. When he used the callback style, logic was distributed across a series of callback functions -- not something that one can see at a glance.

However, more than the ability to perceive the intent of what was written with a glance is something even more pragmatic: the ability to avoid bugs, and when they arise, debug them clearly. A common place for bugs is in the edge cases, and for Guido those are harder to detect in callbacks than a series of if statements. His logic is pretty sound, and probably generally true for most programmers out there.

He then proceded to give more details, using a memcache-like database as an example. With such a database, there are some basic operations possible:

  • check the cache for a value
  • get the value if present
  • add a value if not present
  • delete a value
At first approach, this is pretty straight-forward for both approaches, with in-line yielding code being more concise. However, what about the following conditions? What will the code look like in these circumstances?
  • an attempt to connect to the database failed, and we have to implement reconnecting logic
  • an attempt to get a lock, but a key is already locked
  • in the case of a failed lock, do re-trys/backoff, eventually raise an exception
  • storing to multiple database servers, but one or more might not contain updated data
  • this leaves the system in an inconsistent state and requires a all sorts of checking, etc.
I couldn't remember all of Guido's excellent points, so I made some up in that last set of bullets, but the intent should be clear: each of those cases requires code branching (if statements or callbacks). In the case of callbacks, you end up with quite a jungle [2]... a veritable net of interlacing callbacks, and the logic can be hard to follow.

One final point that Guido made was that batching/pooling is much simpler with the in-line style, a point I conceded readily.

A Tangent: Thinking Styles

As mentioned already, this caused me to evaluate closely my use of and preference for callbacks. Should I use them? Do I really like them that much? Okay, it looks like I really do -- but why?

Meditating on that question revealed some interesting insights, yet it might be difficult to convey -- please leave comments if I fail to describe this effectively!

There are many ways to describe how one thinks, stores information in memory, retrieves data and thoughts from memory, and applies these to the solutions of problems. I'm a visual thinker with a keen  spacial sense, so my metaphors tend follow those lines, and when reflecting on this in the context of using and creating callbacks, I saw why I liked them:

The code that I read is just a placeholder for me. It happens to be the same thing that the Python interpreter reads, but that's a happy accident [3]; it references the real code... the constructs that live in my brain. The chains of callbacks that conditionally execute portions of the total-possible-callbacks net are like the interconnected deer paths through a forest, like the reticulating sherpa trails tracing a high mountain side, like the twisty mazes of an underground adventure (though not all alike...). 

As I read the code, my eyes scan the green curves and lines on a black background and these trigger a highly associative memory, which then assembles a landscape before me, and it's there where I walk through the possibilities, explore new pathways, plan new architectures, and attempt to debug unexpected culs-de-sac. 

Even stranger is this: when I attempt to write "clean" in-line async code, I get stuck. My mental processes don't fire correctly. My creative juices don't flow. The "inner eye" that looks into problem spaces can't focus, or can't get binocular vision. 

The first thing I do in such a situation? Figure out how I can I turn silly in-line control structures into callback functions :-)  (see footnote [1]),

Now What?

Is Guido's astute assessment the death of callbacks? Well, of course not. Does it indicate the future of the predominant style for writing async Python code? Most likely, yes.

However, there are lots of frameworks that use callbacks and there are lots of people that still prefer that approach (including myself!). What's more, I'd bet that the callbacks vs. in-line async style comes down to a matter of 1) what one is used to, and possibly, 2) the manner in which one thinks about code and uses that code to solve problems in a concurrent, event-driven world.

But what, as Guido asked, am I going to do with this information?

Share it! And then chat with fellow members of the Twisted community. How can we better educate newcomers to Twisted? What best practices can we establish for creating APIs that use callbacks? What patterns result in the most readable code? What patterns are easiest to debug? What is the best way to debug code comprised of layers of callbacks?

What's more, we're pushing the frontiers of Twisted code right now, exploring reactors implemented on software transaction memory, digging through both early and recent research on concurrency and actor models, exploring coroutines, etc. (but don't use inlineCallbacks! Sorry, radix...). In other words, there's so much more to Twisted than what's been created; there's much more that lies ahead of us.

Regardless, Guido's perspective has highlighted the following needs within the Twisted community around the callback approach to writing asynchronous code: 
  • education
  • establishing clear best practices
  • recording and publicizing definitive design patterns
  • continued research
These provide exciting opportunities for big-picture thinkers for both those new to Twisted, as well as the more jaded old-timers. Twisted has always pushed the edge of the envelope (in more ways than one...), and I see no signs of that stopping anytime soon :-)


Footnotes

[1] In a rather comical twist of fate, I actually have a drafted blog post on how to write gevent code using its support for callbacks :-) The intent of that post will be to give folks who have been soaked in the callback style of Twisted a way of accepting gevent into their lives, in the event that they have such a need (we've started experimenting with gevent at DreamHost, so that need has arisen for me).

[2] There's actually a pretty well-done example of this in txzookeeper by Kapil Thangavelu. Kapil defined a series of callbacks within the scope of a method, organizing his code locally and cleanly. As much as I like this code, it is probably a better argument for Guido's point ;-)

[3] Oh, happy accident, let me count the hours, days, and weeks thy radiant presence has saved me ...


Syndicated 2012-03-24 16:03:00 (Updated 2012-03-26 13:49:35) from Duncan McGreggor

Python for iOS

I do a lot of traveling, and I don't always like to lug my laptop around with me. Even when I do, I'd rather leave it in the bag unless I absolutely need to get it out (or if I'm setting up my mobile workspace). As such, I tend to use my iPhone for just about everything: reading, emails, calendar, etc.

So, imagine my delight, when I found out (just after PyCon this year) that I can now run Python 2.7.2 on my iPhone (and, when I get it, my iPad 3 ;-) ). This is just too cool for words... and given what pictures are worth, I'll use those instead :-)

I've put together a small Flickr set that highlights some of the functionality offered in this app, and each image in the set describes a nifty feature. For the image-challenged, here's a quick list:

  • an interactive Python prompt for entering code directly using the iPhone keyboard
  • a secondary, linear "keyboard" that one can use in conjunction with the main keyboard, extending one's ability to type faster
  • multiple options for working with/preserving one's code (email, saving to a file, viewing command history)
I can't even begin to count the number of times such an awesome Python scratchpad would have come in handy. And now we have it :-) At $2.99, this is a total steal.

Thanks Jonathan Hosmer!

(And thanks to David Mertz for pointing it out to folks on a Python mail list.)



Syndicated 2012-03-17 20:50:00 (Updated 2012-03-17 20:50:44) from Duncan McGreggor

PyCon 2012: To Be Continued

PyCon was just fabulous this year.

It's been a couple years since I was able to go, and I was quite surprised by how much I had been missing it. The Python community is not only one of the most technically astute and interesting ones to which I belong, but also the kindest. That last point is so incredibly important, and it ends up fostering a very strong familiar sense amongst its members.

There were so many good conversations with such great people: Anna, Alex, Guido, David (Mertz), Donovan, JP, Maciej, Allen, Glyph, Paul, Sean... the list goes on and on! Fortunately, I took notes and (and even have some book recommendations to share!) so there are many blog posts to come :-)

But this has brought something into focus quite strongly for me: the interaction at PyCon is one of the most fertile grounds for me all year -- and going without it since Chicago has been a genuine drought! There were some folks at DreamHost that couldn't make it, and we've already started looking around at various local, mini Python conferences that we can attend. This was initially so that those who couldn't make PyCon could receive similar benefits. But now there's something equally important that's contributing to the importance of this search: attending local conferences will mean not as much time has to pass between those fertile interactions and that recharging that we give each other at such events.

Until next time, I hope all Pythonistas everywhere are getting ready for a great weekend :-) Those who have been traveling, I hope you get lots of rest and share with everyone the treasures gathered at this year's PyCon :-)


Syndicated 2012-03-16 18:43:00 (Updated 2012-03-16 18:43:47) from Duncan McGreggor

12 Mar 2012 (updated 26 Mar 2012 at 15:02 UTC) »

OpenStack at PyCon 2012 Sprints!

This is just a short post to give a shout out to some folks who are sprinting for OpenStack this year at PyCon. It's a small group, since the Folsom Design Summit and Conference is coming up in a few weeks.

One big surprise came last night when I got an email about Cisco's recent work with Layer 3 (blueprint) support in Quantum, and there were two Cisco folks here this morning to chat about that. Mark McClain (DreamHost) is digging deep into their work right now.

Yahoo! is remote-sprinting today, and they hope to be in the house tomorrow, to continue working on current improvements in DevstackPy. Mike Pittaro (La Honda Research), Jonathan LaCour and Doug Hellmann (DreamHost) are working with Yahoo! on that.

Mike Perez (DreamHost) is hacking on some additional improvements in Horizon for different storage backend representations. We've also chatted a bit about the latest efforts in Horizon for Quantum support (Michael Fork's work). Perez is also helping out tracking some bugs down in DevstackPy.

Special thanks to Mike Pittaro for improving the sprinting pages on the OpenStack wiki with links to previous work and discussions!

If you're keen on OpenStack and would like to dive in with some fellow hackers into the deep ends of Nova, Quantum, or Horizon, be sure to come by or pop in at #openstack-pycon on Freenode :-)


Syndicated 2012-03-12 21:07:00 (Updated 2012-03-26 14:26:53) from Duncan McGreggor

Successful Hack-In, 01 Mar 2012!

DreamHost has a new core set of cloud developers now based in Atlanta, and a new Meetup group to go with that :-) Today there was a global OpenStack Hack-In, and I just posted a summary to our Meetup discussion page, but since I desperately need to do some blogging, I'm republishing here :-) (with some minor tweaks...)

We had fun in person, there was good chatter on IRC with the Colorado and San Francisco teams, and we had a great time digging into OpenStack some more.

Technical highlights include:

  • testing out development deployments of OpenStack using Vagrant (some successes, some blockers)
  • testing out dev deployments of OpenStack using VirtualBox directly
  • filed some bugs for issues in horizon regarding error feedback to users and how the documentation is generated
  • dug into issues with logging and inconsistencies in datestamps
  • uncovered some weirdness with the usage of gnu screen and hanging services/partial devstack installs due to sudo assumptions (devstack assumes a passwordless sudo, and will label an install as failed if it gets hung up on the apache log tail, waiting for a password, even if the install was successful and all the services started correctly)
  • Doug Hellmann made his first commit upstream to OpenStack
On the non-technical, fun side:
  • Thanks for Zenoss for the fun swag today smile (the Zebras are still staring at me... I think they're going to be making an appearance in ToyStory 5)
  • Even more thanks to Zenoss for the offer to become an OpenStack Atlanta Sponsor (food, drinks, and swag)!
  • Thanks to DreamHost for the AMAZING coffee and danishes from The Village Corner Restaurant/Basket Bakery. Seriously. That was the best coffee I have ever had. In. My. Life.
  • Also, thanks DreamHost for the pizza and the sweet potato pies!


We took a couple snapshots of the event, and I'll be posting those soon on the Meetup page, but for the super-impatient, they're up on Flickr right now smile

http://www.flickr.com...


Syndicated 2012-03-02 01:51:00 (Updated 2012-03-02 01:53:03) from Duncan McGreggor

7 Dec 2011 (updated 26 Mar 2012 at 15:02 UTC) »

OpenStack at DreamHost

So I guess this is old news now, but DreamHost is really into OpenStack :-)

(In fact, during recess, DreamHost asked if I would pass a note to OpenStack. I didn't look inside the note, but we can all guess what it said...)

I was hired specifically to work on cloud stuff here at DreamHost, and we've got a new team that's super-excited about this -- they're starting to gear up for increased contributions and community engagement, gettin' themselves some cloud. We've now got our own Launchpad team, we're working on a handful of blueprints, chatting it up on mail lists and IRC meetings -- you get the picture :-) Exciting times.

For official blog posts and other news items that highlight DreamHost's interest and involvement in OpenStack, check these out:
I'll be writing more about our OpenStack work later, but wanted to get a quick cloud-shout-out done before too much time passed...

P.S. We're hiring Python rock-stars!

P.P.S. Did I mention that DH is an AWESOME place to work? We got an award for that, two years in a row :-)


21 Nov 2011 (updated 21 Nov 2011 at 23:01 UTC) »

Occupy's Declaration of Independence

Illustration by Peter Whitley
There's one thing I would really, really love to see under the tree this year -- under everyone's tree: Occupy the World.

For the first time in history, it seems that there might be enough momentum, enough communication, enough strength of individual convictions, and enough mass support to be able to have a world-wide, non-violent, revolution.

Taking the US as an example in this beautiful hope: imagine 2 or 3 million people showing up on the lawns of the US law-making machinery in Washington, D.C., issuing their declaration of independence and simply stating a fact: "Things are now going to change, we will not leave until we have the government that we want."

Far from mob rule, the 99 is intelligent, lucid, and a collection of THE overwhelming majority... regardless of old political parties. An enormous amount of discussion, insightful inspection, exploration of alternatives has been researched, written about, and promoted over the past 5 to 10 years, co-culminating in what we see around us today as the Occupy movement. I have the utmost faith in these thinkers (by which I mean everyone from Gar Alperovitz to my second cousins working in Detroit, MI automotive plants) and their (our!) ability to produce a new constitution that provides for the 99 fairly. Such a new system would stand in stark contrast to that of today's system: one that caters to policies driven by enormous, "legal" bribes or banking systems that continuously steal from the customers and shareholders, running off with the loot.

The 99 is saying it, and has been saying it for a while: "It's time for a change."

They've taken things further by showing an undeniable presence at the scenes of crimes (financial and governmental institutions). I say let's take the last logical step, and fix the problem: let's put a new system of government in place. Let's have radical, peaceful change. Let's do it with poise, grace, and while keeping the benefit of the entire planet foremost in our minds. Let's do it world-wide, and not stop until the job is done. Let's have a revolution.

Let's have the revolution.


Syndicated 2011-11-21 20:37:00 (Updated 2011-11-21 22:08:49) from Duncan McGreggor

4 Oct 2011 (updated 4 Oct 2011 at 20:02 UTC) »

Two Months at BlueLibris

Back for a Quick Write

Well, I've been at BlueLibris for two months and a day, now... and each one of those days I've wanted to blog about something that's happened. On occasion, I've G+'ed about something, but in general I've just been too busy to take a breath, much less use that breath to write some informal prose.

I've taken a few photos during this time, and put them up on flickr in this set; smaller versions are peppered throughout this post :-)

The First Day

Half Moon Bay, about 30 minutes from work.
I was born in California, but left when I was 8 years old. I returned after high school and lived for 2 years (1990-1992) in Northern California to attend language school. As a consultant and later an employee of various companies, I made regular trips out to the Valley and Bay Area, so was no stranger when I arrived in August this year. However, it was quite a shock to be actually working and living here!

After I left Canonical, I headed out from Colorado and took a few weeks off to go on a meditation retreat up in the Siskiyou Mountains of Oregon. This area was deeply reminiscent of the Colorado mountains, of which I am so fond. Such environs are my natural habitat... so imagine my shock when I was hurled 50 years into the future, deposited in something like a night scene from Bladerunner. 'Cause that's exactly how it felt :-) Not bad... just very, very different. Even though I'd been to the Valley a bunch of times in the past 10 years or so, it never really hit home... until it was my home.

Note the executive dress: shorts and flip-flops.
In the morning, the bright sun washed away visions of flying cars and robots. I was greeted by palm trees and traffic. After an hour commute from the East Bay to Menlo Park, what I had only seen in Google Maps was now staring me in the face: my new office building :-)

I had arrived early at 9:00am, so the place was locked up tight. I took that opportunity to meet some of the neighbors, walk around a bit, and then read up on the interesting facilities we were renting for our offices.

The text describes the facility's power.
I'd seen the solar panels of the building in the Google Maps satellite view, and had just assumed that this was a common accoutrement of California architecture. Turns out, our entire complex is soloar powered -- 100%! Our laptops, servers, monitors, microwave, fridge, and air condition all run on the Sun :-) This info was covered in great detail by one of the boards posted out in front of our small office complex.

Eventually, Soroush showed up, I introduced myself, and we made our way inside. The interior was even cooler than the exterior :-) There's a large open space where most people sit, a dark cave for the software engineers, an unused loft upstairs that looks down over the open space, and a cute little kitchen area adjacent to (and part of) the loft.

The Intervening Weeks

Within a day or two, I'd purchased some bean bags, nerf guns, nerf balls, action figures, and die cast cars. It was starting to feel like a start-up :-) (And the nerf gun fights reamain a regular brain-break for many of us!). A few days after that, Tim Hyland bought some sling-shot monkeys... I think we use these even more than the nerf products!

Playtime aside, the work has been very grueling. We all work late hours (but have a good time hanging out while we do so), wear many hats, and have more responsibilities than we care to enumerate. Equally, however, we're all deeply invested in the company, believe in the services we're providing to the health and other industries, and most of all are committed to the success of the company.

On that note, most of us were involved in ventures during the dot boom/bomb, and accrued wisdom from that area on how to conduct ourselves responsibly, even in the midst of all the excitement our innovations are generating.

I look forward to the time (soon!) when I'll be able to post more about these :-) For now, though, I can be very general and give a brief overview of our tech.

Our Technology

Matt playing along with a thumbs-up :-)
I worked on several device projects for Canonical, but never were we actually building our own hardware like we do at BlueLibris. This has been a fascinating introduction to a part of the tech world with which I am starting to gain some familiarity: circuitry design, component integration, plastics work -- the list goes on and on. Soroush Salehian and Matt Maibach lead these efforts, with Ram Fish weighing in regularly with his extensive EE background. These are the guys iterating on the hardware for our real-time, 3G health monitoring device.

As events are generated on the device, they get pushed up to "the cloud" where additional processing and heuristics are performed. We're working with lots of maths, machine learning, custom algorithms, etc., all in a distributed computing environment. We're using nosql solutions for long-term storage, and a Python-based framework for web management tools. We're in the process of converting the original application into a JavaScript-driven suite of applications. We're also giving the Python an overhaul in anticipation of significantly increased load and general usage over the next year (we've got some exciting partnerships and customers -- both existing and forth-coming). Henry Messenger and myself are working on these bits right now. To get the device talking to the cloud and collecting all the right data, we have the talented Kent Ryhorchuk hacking like a madman and consuming the APIs we're providing him.

There are other software development efforts in the works that I can't really talk about... but given the space, I'm sure you can imagine the possibilities :-)

Future Posts

I've run out of time for now, but I do want to mention that with BlueLibris, there is a tantalizing connection to where I see technology going in the next 10-20 years (ultra large-scale systems), and I'd like to say more about that soon. Furthermore, we should have some nice news-worthy items that will get their own press releases, but I'll be making community-friendly updates here on that as well. I'm also taking steps to make sure that we contribute back to the open source community, and will have posts relating to those efforts as well.

So watch this space, and look for more developments soon... :-)


Syndicated 2011-10-04 18:41:00 (Updated 2011-10-04 19:58:53) from Duncan McGreggor

267 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!