Thoughts

Deep Agent Integration with Herdr [2026.09.19]

I've been using herdr for day-to-day coding with my favorite agent pi. Here's its special power: I can run a herdr command to talk to any other agent running in any other terminal.

Read article

Agentic Coding Has Arrived [2026.05.10]

In March of 2025, my employer mandated that everyone use AI for coding. Agentic coding had not yet arrived. I could vibe code some slop but I couldn't get it to move TypeScript import statements from one file to another without the agent getting confused. The models evolved. People tried elaborate "prompt engineering" or Ralph loops but, still, agentic coding hadn't yet arrived.

Read article

The North Star Exercise [2020.09.21]

How do you improve bad software architecture? Introducing low risk, incremental changes is pretty straight forward but improving architecture often involves bold leaps such as complete rewrites. Where do you start? Here's a strategy I've been using: Imagine the future you want without worrying about how to get there. I'm calling this a North Star Exercise.

Read article

The Chrysalizer Pattern [2020.09.18]

When talking about legacy code, have you ever heard someone say we're gonna strangle it!? This article is for them. The strangler pattern is a powerful way to gradually rewrite a software system while still running the old system. However, words matter and language shapes the way we think. Also, let's be real, calling it the ivy pattern never really caught on. I'd like to propose the Chrysalizer Pattern. You can now say we're gonna chrysalize it.

Read article

Safer TypeScript With Generics And Linting [2020.03.07]

TypeScript makes JavaScript safer and even opens up new architectural possibilities such as better unit tests. I highly recommend it. However, the default configuration encourages unsafe patterns that developers might not be aware of. Specifically, I wanted to illustrate the dangers of any and show how you can define custom generics instead. I'll also offer some lint rules that will help your team write safer TypeScript.

Read article

If It's Not In CI It Doesn't Exist [2020.02.02]

I've been at Bluecrew for a month now and one thing I'm actively improving is their continuous integration (CI) strategy. Every team has values around their code and systems. The existential question I ask about each value is this: does CI enforce the value? If not, the value does not exist. You could think of this as an all or nothing CI strategy.

Read article

Spike, Test, Break, Fix [2019.12.29]

I first heard about test-driven development (TDD) around 2006-ish and I still hear about it often. TDD encourages you to write effective tests because you always see both states: the failing state and the passing state. This is great but it's easy to write the wrong code for a feature as you learn more about it. Duplicating that exploratory effort on tests is a waste of time. After many years of building software on small to medium sized teams, I prefer a leaner approach that accomplishes the same goal: something I call spike, test, break, fix.

Read article

Bluecrew: Connecting People To Jobs [2019.12.17]

When studying Sound and Film at art school, I spent most weekends renting as much equipment as possible, wheeling it into my dorm room, and staying up late creating work. I've been called a workaholic for this kind of behavior and maybe it's true; I really love working on meaningful projects. I also realize that it's an honor and privilege to work on projects I care about. After Mozilla, I'll be joining Bluecrew full time to help build a platform for working. Bluecrew creates apps for on-demand staffing (temp work) but with a twist: workers receive W-2 status and everything that comes with it. This includes minimum wage protection, overtime / sick pay, workers' comp., eligibility for healthcare, etc. Bluecrew connects people to jobs like light industrial work, hospitality, and logistics, providing opportunities at varying skill levels.

Read article

Thank you, Mozilla [2019.12.13]

I originally sent this as an all-company email. Below is an edited version. After 9 fantastic years I’ve decided to move on from Mozilla. Here are some reflections about what makes Mozilla such a special place to work at. My first commit was a simple right to left localization fix on addons.mozilla.org -- wow, I couldn't believe I was shipping a web app used in 40 languages! It has been an honor to make such a powerful impact in so many people’s lives all over the world. Thanks to Mozilla for inviting me to be a part of their unique and crucial mission. Since then I've had the chance to work on many different projects and technologies, most recently in UI engineering. Working in the open has been fascinating to me...

Read article

Profiling And Optimizing React Apps [2019.08.06]

At Mozilla, the Add-ons team hosts a casual show & tell each month. It's a public meeting and we invite community members to share their work. This time I demo'd some of the work I've been doing to profile and optimize our code manager, a tool that the review team uses to make sure add-ons are safe for Firefox users. It's a code viewer that looks like an IDE: a file list on the left, code in the middle, and a file overview on the right. The UX is similar to reviewing a pull request on GitHub but the main difference is we integrate our automated scanning tools to provide hints about potential problems. Watch the demo. The big challenge we ran into is how to display very large code files and diffs without lag...

Read article

The Art of UI Skeletons [2019.04.23]

A skeleton screen is a technique of rendering placeholders for text, numbers, and other parts of a UI that haven't yet loaded. As a user interacts with the UI, they immediately see the illusion of new screen states—the skeleton—and this makes the app feel very fast. The skeleton layout is typically animated in some way to convey that data is still loading. My team at Mozilla built addons.mozilla.org with skeleton screens for all loading states. This article covers some of the details about the techniques and approaches we took and some gotchas. It focuses more on the concepts rather than the implementation...

Read article

Why Server Side Rendering In React Is So Hard [2019.02.26]

React first emerged as a powerful way to build living, breathing client side web applications. When my team at Mozilla set out to build a React frontend for addons.mozilla.org in 2016 we knew we needed server side rendering (SSR) for SEO and performance but we underestimated how much of a challenge it would be. This is a deep dive into how SSR is fundamentally different from what React was designed for...

Read article

Safer Unit Testing in React with TypeScript [2019.02.11]

I hear a lot about how static typing makes JavaScript safer but what about its influence on code architecture? As someone who has worked extensively with dynamically typed languages, I was surprised to realize that type safe applications can be written in entirely new ways. I'd like to illustrate a fast and effective unit testing strategy that is only possible once you have type safety. I'll be talking about React in TypeScript but this may apply to similar realms...

Read article

Testing Strategies for React and Redux [2018.04.24]

I wrote an article for Mozilla Hacks about testing React / Redux apps. TL;DR Setting up a test for a Redux connected component is simple: just dispatch the actions needed to enter a desired state. There's no need for mock objects or API calls. If you need to assert that the component dispatches an action in response to a UI event, you can spy on store.dispatch(). Shallow rendering lets you run fast, encapsulated unit tests. For example, breakage in an component (that might be used all across the app) would not break your entire test suite. Testing component interfaces rather than complete end to end coverage improves encapsulation and makes tests more maintainable. For example, if the component under test passes an onSubmit prop to another component, it's better to simulate the integration by calling otherComponent.prop('onSubmit')(). There's no need to fully mount the other component. I recommend using static typing with these testing strategies to ensure all components are integrated correctly.

Read article

Some Tips On Working Remotely [2014.05.06]

I've been working remotely from a home office with Mozilla since about 2010 (4 years so far) and although it has challenges I still enjoy it. It requires some discipline and most importantly a routine. Matt Gemmell's article on this has excellent pointers on routines and setting up an isolated work space at home. I wanted to add a few things to his post from the perspective of working as a software engineer (my profession)...

Read article

How To Protect Against Heartbleed And Other Vulnerabilities [2014.04.09]

The OpenSSL heartbleed bug was a heavy wake up call. This video provides a quick overview if you want the details. In summary, an attacker could craft a payload with a fake size (up to 64k) and trick openssl into sending a random chunk of server memory. WTF?! To understand how bad this was I spent a minute hacking on this script that was going around. I pointed it at login.yahoo.com (which is no longer vulnerable) and tried to see if I could catch a username and password flying by. I had one within 30 seconds. That's how bad it was; you could read random parts of the server's memory which may contain passwords, private keys, or whatever else OpenSSL was processing for current site visitors. I had stolen someone's credentials. Game over, right? How do you protect yourself against something as bad as this? ...

Read article

Ramblings [2014.04.08]

Oh, hey! I almost forgot I have a blog. I wanted to write a quick note about where you can find stuff I write. Short and frequent updates! @kumar303 On the Mozilla Hacks blog: https://hacks.mozilla.org/author/kmcmillanmozilla-com/ On the Mozilla WebDev blog: https://blog...

Read article

Shame The Thieves or Fix the Music Model [2012.06.18]

David Lowery wrote a piece on how downloading music is hurting musicians (which is a response to Emily White's piece on admitting to not buying music). Here is my response. Music is a really interesting "product," especially when distributed digitally for $0.001 cents per download (that's my snarky guess at the production costs of a download: bandwidth, storage, etc). The real production costs are for the time put in by the artist, studio fees, and creativity. Besides the creativity part, that formula sounds a little bit like the FDA drug market, right? It costs about $0.001 cents to manufacture a pill so the hefty price tag goes to recoup the money spent on drug research. Or does it? Pharmaceuticals is a messed up industry...

Read article

The Key To A Successful Startup Is Not Its Concept [2012.02.19]

In this article, a coffee shop entrepreneur laments a more "celebrity" entrepreneur who launched a similar startup but got more traction. His conclusion: "The difference between the guy in the coffeeshop and the celebrity entrepreneur isn’t just press connections, money, and experience; ultimately it is this combination of factors." I don't think this is true. A successful startup has very little to do with money and connections...

Read article

Let's Buy Lobbyists To Save The Internet [2012.01.27]

At ORD Camp last weekend Ben Huh led a discussion about how we -- a group of geeks and artists -- can save the Internet. We won the fight against SOPA and PIPA for now but those laws will just sneak in through some other bill. Will wikipedia be there to black out again in protest? The fight is nowhere near from over and we have to get organized...

Read article

What's Happening at Mozilla? [2011.09.19]

Most people at Mozilla are remote so each quarter we sync up face to face as a group for an all-hands meeting. There are over 600 employees! We of course sync up in smaller groups more frequently but this is a chance to see what's going on across the entire Mozilla horizon. So what's happening at Mozilla? We're on the cusp of a huge shift towards an open web platform. That is, something more than a web browser -- something you can run "native" apps on. There's a lot of work left to do, of course. Here is a random dump of interesting projects in the works...

Read article

How Do We Open Up The Social Web? [2011.07.03]

The release of Google Plus presents a unique opportunity to open up the social web. Why? Because it's a compelling product -- it's intuitive and fun with innovative features like circles, hangouts, sparks, etc. In many ways it's a clone of Facebook but that's just a reinforcement of what Facebook (and before that, Friendster) got right. If Plus continues to succeed then the optimist in me envisions this as a golden opportunity! ...

Read article

Music Everywhere: Amazon Cloud Player [2011.03.30]

A few services have been popping up lately that let you stream music from any computer or device (the so called "cloud"). Amazon just released theirs, uncreatively named Cloud Player. I'm pretty excited about this one because it's the first I've seen to actually offer sane, reasonable pricing ...

Read article

Firefox Goes Mobile [2011.03.29]

When I got my first Android "smart phone" it felt like a slow, hard-to-use computer on dial-up Internet. Now I use an Android G2 (HTC Vision) which I'd call a pretty snappy, easier-to-use computer. I can't say I do much on it besides calls, texting, and Twitter but I'm excited that Firefox Mobile has just been released. You'll need a newer Android phone (arm v7) to install it and it's going to eat up a whopping 14MB (plus caching) but, hey, Firefox is now mobile! ...

Read article

Firefox 4 Is Here And It's Glowing [2011.03.22]

Firefox 4 has launched! If you want to watch the whole planet upgrade in realtime head over to glow.mozilla.org (built by @potch, @jeffbalogh, and others!). If you haven't already downloaded Firefox 4 then what are you waiting for? After that, join the twitter party by using the #fx4 hashtag in your tweet...

Read article

What Happened To The Feeling Lucky Search In Firefox 4's Awesome Bar? [2011.03.21]

Firefox 4 is about to ship! And it contains a massive amount of enhancements, especially UI enhancements, blazing fast JavaScript, and more HTML5. I'll probably write more about these hot new features and how important Firefox is to the international community but first, this. In the next week millions of people will begin upgrading to Firefox 4. A large number of them will be upgrading from Firefox 3 so they'll be disappointed to learn that when you type a name or phrase into the Awesome Bar it no longer takes you directly to the website you are looking for. Technically this feature was called Browse By Name but most people probably understand it as performing a "feeling lucky" search in Google. The forums and support site are already filling up with complaints. Don't worry! The feature was just disabled, it wasn't removed entirely...

Read article

What The New Open Web Can Do: Firefox 4 Demos [2011.03.03]

Firefox 4 is near the end of its beta cycle but what is so special about this release? Why not see for yourself on the new demo site, the Web of Wonder (requires Firefox 4 beta but some demos do work in Chrome and Safari). I'll be honest, as a web developer, the new power of HTML5, CSS3, SVG, WebGL, etc totally blows my mind...

Read article

How To Achieve True Privacy On The Web: DOMCrypt [2011.03.03]

The Internet was invented so that data could be decentralized and liberated. Well, so much for that idea. With the rise of services such as Facebook and Twitter we are back to the original mainframe problem: everything is stored and controlled by a central authority. Ironically, today's "to the cloud" meme is making us depend on central authorities even more. So what about data privacy? In this centralized model we go about our online lives constantly posting data to all these different servers that we trust...

Read article

Fudge Goes 1.0 [2011.02.25]

Fudge, the python mock tool, goes 1.0! You can grab it with pip install -U fudge or directly from PyPI. This marks the end of a long incubation period where the community and I used Fudge in real world scenarios to see what worked and what didn't. I'm sure there are many more improvements to make but as of 1.0 I'm very satisfied with what we've accomplished. This is thanks to its small but vocal community of users, to all contributors and to everyone who pointed out flaws...

Read article

The Promise of the Cloud [2011.01.05]

As web developers we are faced with this problem: how do we scale up our code to handle high traffic? A lot of time and engineering goes into this problem -- time to simulate the traffic we expect and add servers to our cluster, cache heavy database access, etc, in anticipation of the load. Time is precious. This time could be spent optimizing the usefulness of our web product and creating interesting content. No one really congratulates you when a website works, they expect it to work. When Google App Engine was released their pitch was...

Read article

I've Joined the Web Dev Group at Mozilla [2010.11.30]

Whenever I'd hear about someone from the Python community getting hired by Mozilla I'd get really excited because I knew they'd continue to share and collaborate in the open source world that I was a part of. So here I am about a month into joining Mozilla myself to work with the WebDev team. Everything Mozilla does is right out in the open: ideas are posted on blogs, code is committed to public repositories--free to use, free to fork, etc. They take a firm stance that everything you do on the web should be free and open even to the point where the new Firefox 4 audio API (which is amazing) doesn't even support the patented, closed MP3 format despite its ubiquity. This transparent approach to technology is really powerful...

Read article

Compiling Python 2.5 on Mac OS X 10.6 (Snow Leopard) [2010.11.06]

The Mac dev community has outgrown Python 2.5 it seems but you might still need it if, say, you work on a Google App Engine project. I recently set up a fresh new Snow Leopard machine and really didn't want to eff it up with Macports. I like Macports but it leaks dynamic libraries here and there and this screwed me on my last machine. Instead I've had good luck with Homebrew (so far) but I couldn't find a Python 2.5 recipe anywhere. Snow Leopard ships with a version of Python 2.5 but I ran into some trouble with it as soon as I tried using virtualenv. Apple usually messes up Python in some way so I figured I'd just compile one. Since I couldn't find anything succinct while searching online here are my notes...

Read article

CHIRP Radio Is Looking For Android Developers [2010.10.17]

CHIRP Radio in Chicago is looking for someone to help us build a custom Android application so that our listeners can have a better experience on their Android phone. There are already a few Android apps for radio but they are clunky. Also, we have some plans to better engage listeners on phone apps with currently playing tracks, click-to-request-a-song, and other ideas like that. We already have a pretty slick iPhone application created by volunteer John Carlin and after only a few months it already has 1,000+ downloads...

Read article

Dark-Launching or Dark-Testing New Software Features [2010.08.09]

If you're building software that will be used by hundreds of millions of people at once it's pretty tricky to simulate that kind of load in a testing environment. And without realistic load tests, you can't be all that sure if your infrastructure will stand up to the pressure. MySpace tried to use 800 EC2 instances to simulate one million concurrent users on their new video features but before they could reach the limit of their own app they hit the physical limits of their Akamai datastore due to the geographic location of the EC2 nodes. D'oh! Instead of simulating load, why not just deploy the feature to see what happens without disrupting usability? Facebook calls this a dark launch of the feature...

Read article

Python Package Index (PyPI) Mirrors [2010.07.27]

Most deployment systems depend on PyPI, the Python Package Index, for fetching and installing dependencies. Although performance and reliability has greatly improved, there are still days when you may find PyPI down and thus are unable to deploy through the normal fashion. Fi...

Read article

PyCon 2010 - Get Your Proposals In [2009.09.29]

Proposals for talks at PyCon 2010 are due October 1st. That's in two days! PyCon is really a little more like an unconference and is an excellent place to share your ideas or showcase your work to the Python developer community. If you're having fun with something Python r...

Read article

Fixture 1.3, Now With That Tangy Django Flavor [2009.09.24]

The fixture Python module is a utility for managing data needed for automated tests. Its new version, 1.3, adds support for the Django backend. This was a champion effort by Ben Ford who wanted an alternative to Django's own JSON / YAML based data loading mechanism. Thanks...

Read article

Using Dropbox As A Worm Hole To All My Computer Worlds [2009.08.20]

Dropbox has nailed a use case that I've struggled with for a long time. I have a computer at work. I have a computer at home. Generally I keep files in sync via version control (Subversion, Mercurial, etc) but this is cumbersome for large files, specifically mp3 files. I consume a lot of music, digital and otherwise. How do I keep my music in sync between computers? ...

Read article

Why you should NOT license your code as GPL [2009.07.16]

Zed Shaw recently wrote a clear and concise defense for why he used the GPL on Lamson. I've seen a few mentions on twitter that alarmed me because people seemed to think now is the time to release all software as GPL. Here's what you need to ask yourself before you license your code as GPL. First, do you have a business plan that involves selling your software? Most people do not, most business plans have to do with actually using custom software. If that's you then your software and your business become better as more developers work on your software. I.E. when your software is applied to more real world situations, more bugs are fixed and more patches for features are received. GPL does not help you gain users because it shuts out most commercial enterprises ...

Read article

Unit Testing JavaScript With JsTestDriver [2009.06.08]

I've been experimenting with a new tool that was released open source recently called JsTestDriver It's a tool that makes unit testing JavaScript simultaneously on many browsers from the command line very easy for the developer. Actually, there aren't many other tools like it that I know of. It also provides hooks for continuous integration (e.g. Xunit output) and is designed to help you run all unit tests when you click the save button in your code editor. Here are some features it provides that I thought were nice ...

Read article

Nose 0.11 released (nifty new features) [2009.05.07]

Nose 0.11 has just been released. Woo! This has been a long time in the making and got a nice boost from many devs sprinting during PyCon. Here are its nifty new features: Vastly more readable documentation with a ton of new documentation added. Parallelize your test run...

Read article

Degradable Ajax by Sharing Mako Templates With Dojo [2009.05.05]

For a Pylons site I have been working on I wanted to provide Ajax functionality for the users but also allow the content to be crawled by search engines. Let me point out that not all of the Ajax content needs to degrade to static HTML, only the content that a user might search for on a search engine. Some people might decide that none of their site needs to be crawled by search engines, say, if it was Gmail or something similar. Since the site is using Pylons it also uses Mako for templating and on the JavaScript side it uses the Dojo toolkit. The easiest way to render content dynamically (via altering the DOM in JavaScript) and render static HTML seemed to be by sharing my templates between Pylons and Dojo. While probably not the most elegant solution, here's how I did it ...

Read article

The Python Packaging Problem [2009.03.30]

At PyCon 2009 the fact that Python needs to solve the "packaging problem" came up a few times. This is not a new discussion. However, the problem is still not completely solved so here I'll point out the details of the problem, the unsolved parts, the solved parts, and how the solved parts could be solved better ...

Read article

PyCon Happenings [2009.03.26]

I really like PyCon. It's been said many times but is worth repeating: the hallway track is what makes PyCon such a fun unconference. With that said, here are some happenings: I'll be talking Friday after lunch about some fun I've been having trying to test Ajax web appli...

Read article

Fudge 0.9.2 Released [2009.03.20]

Just a quick note that there is a new version of Fudge, a mock and stub library for Python. This fixes a lot of bugs in the old release and adds some nice new features: You can now declare method expectations more expressively using argument inspectors. Declaring an expected...

Read article

A new version of Fudge, mock object library for Python [2009.03.10]

I just released 0.9.1 of the Fudge module which is a tool for working with fake objects while testing Python code. Some call these mocks, stubs, or actors, but I just call them all fakes because that way you don't have to change the names in code if you update your tests. Yo...

Read article

What Makes Pylons Stand Out As a Web Framework [2009.02.23]

After 6 release candidates, Pylons 0.9.7 final has been released. Big congrats to all developers. Although it's just a point release, I think this is a huge milestone for Pylons for one reason: It has proper documentation! I've been using both Pylons and Django for several web applications and Pylons' old docs were sparse and hard to navigate. This didn't stop me from digging in and playing around with the framework but for a project to really reach a wide audience it needs well-organized, readable documentation. I can think of many well designed, solid programming tools that have failed because, simply, their docs were not readable. There is a difference between having comprehensive documentation and having documentation that is readable. Django got this right from day one. As a Pylons user, I'd like to point out a few reasons why I like it and some reasons I don't. It's not meant as a fair comparison to Django, but Django is the only other web framework I know pretty well so it is my point of reference ...

Read article

Googlebot's Fatal Flaw And How You Can Fix It (or Get Rich Trying) [2009.02.12]

I came across this article today on Coding Horror about how Google has a monopoly on search engines and how something must be done about it. I'm not one who falls into the "Google Is Evil" camp; I actually think they are a benevolent force in the world :) However, as with any monopoly, the lack of competition stifles progress. And when I think about the state of today's technology, I can't help but wonder why Google has not fixed the most fatal flaw in their Googlebot : It does not behave like a web browser. Search engines are made for people and the majority of people browse the Internet with a web browser. The first comment on the article is a cry for help: "What can we do?" I have an answer to that question. And you can take my answer and turn it into a business plan and climb the golden staircase to success. Any smart investor would be begging you to take their money. Google generated $5.37 billion dollars in Q2 of 2008 and their flagship product doesn't even work! In fact, I'm going to give this to you all for free; all I ask is that you visit me one day and say thanks. Are you ready?

Read article

Fudge: Another Python Mock Framework [2009.02.03]

I'm excited to announce the release of Fudge, a Python module for replacing real objects with fakes (mocks, stubs, etc) while testing. Fudge started when a co-worker introduced me to Mocha, a mocking framework for Ruby and a simpler version of jMock (Java). Up to that point I had been building mocks "by hand" in Python with a post mortem approach; I'd set up some fakes then inspect their call stacks at the end of the test. I like the jMock approach better—you declare a fake object that expects methods and arguments, you replace the real object with the fake one, run your code, and you're done. If your code doesn't live up to the expectations then your test fails.

Read article

Debugging doctests interactively [2009.02.02]

Jens W. Klein has just released a pretty cool doctest debugger tool called interlude. It's designed for a situation where you are writing doctests (perhaps in the comments of your code) and you think to yourself, hmm, what happens when I run this test? Instead of the back and forth run-test-edit cycle, well, why not just drop into a doctest session from your test suite, interact with the shell until you got it right, then copy / paste the session back into your comments? This little tool is genius. And surprisingly simple: 11 lines long (3 of those are for the shell startup message). Jens describes an installation process that involves invoking a custom doctest runner. This can introduce a bootstrapping problem, especially if you are using a doctest runner like Nose because it's hard to customize the doctest runner. Well, actually, this bootstrapping step isn't even necessary. Here's an example ...

Read article

Chicago JavaScript Meetup: JS.Chi() [2009.01.24]

I went to my first Chicago JavaScript meetup on Thursday (the 4th meetup they've had so far) and it looks like a promising group. The topics were pretty basic but the speakers seemed very deep into JavaScript so I'm looking forward to future meetings. By raise of hands we decided to split into two groups, an advanced and a beginner, which was an excellent idea. The turnout was incredible — about 60 (or more?) people showed up. The original venue that got canceled only held 40 so some of those people were actually on a waiting list ...

Read article

Glögg, Swedish mulled wine, the Chicago recipe [2008.12.21]

Now that it's -5 F in Chicago with a windchill of -25 F I thought it was an appropriate time to share one of the secrets to surviving a Chicago winter: Glögg! If you live in the old Swedish neighborhood (Andersonville) like I do then you can sip Glögg at most local bars but with weather like this, why even leave your house? Here's my recipe...

Read article

Python 3.0 On Mac OS X (alongside 2.6, 2.5, etc) [2008.12.05]

Python 3.0 is out. Woo! Some people have been saying that they'd like to be able to run it alongside 2.6, 2.5, etc to test it out. Well, Python is actually designed for this. All you have to do is build it with make altinstall and that will give you a python3.0 binary without touching your default python binary. But on Mac OS X it's a little different ...

Read article

Are you hiring web developers? [2008.12.03]

As the US economy spins into a death spiral I unfortunately now know some highly skilled web developers (Python, Ruby, JavaScript, etc) in the Chicago area who are looking for work. And I mean highly skilled people whose ninja like qualities will be sorely missed. Most hiri...

Read article

Try out the Mercurial Subversion extension (hg svn) on Mac OS X [2008.11.03]

As a Subversion user, I am hesitant to get excited about distributed version control systems (DVCS). What I like about Subversion is that there is a central line of development. This is great for teams because it forces them to integrate their code often. This is great for open source projects because the users have one place to go to get the source; there is one version of the truth. However, I usually hack on code during my train commute to work and one thing Subversion does not [yet] do is let you commit offline. This is all I want and this is what a DVCS can provide. Everything else is nice to have. It's nice to have an experimental work space where I can create private branches all day and all night but you can do this in Subversion too. Experimental work branches are dangerous if they do not get integrated with mainline development often. Using a DVCS makes it easier to be lazy about integration. DCVS lets you maintain mirrors of projects, potentially with your own patches to the project. While this is convenient, I also put this in the dangerous category because the last thing I want is for someone to say, yeah my Django patch wasn't accepted and probably never will be, so just use my clone of the repository! This is an integration nightmare. Anyway, Subversion is a long way from supporting offline commits so I've been experimenting with Mercurial ...

Read article

Automated Model Based Testing of Web Applications (GTAC 2008) [2008.10.27]

Last year at the Google Test Automation Conference (GTAC) 2007, the talk by Atif was one of my favorites. He had been working on a system of model based testing for desktop GUI applications (affectionately called GUITAR) and hinted that he will be applying the work to web applications next. Now, at GTAC 2008, here is a taste of what his dept. has been up to. The talk is by Oluwaseun Akinmade and Prof. Atif M. Memon. Both are at University of Maryland. The idea of automated model based testing hints at a future where software can be used to figure out how to test itself. That is, when software is modeled in a way that exposes inputs, outputs, event handlers, and end-points, then introspection can be done to find all possible interactions within an application and test them. Yes, it is one step away from artificial intelligence. This is fascinating to me but I think it still needs a lot of work. Atif is asking for as much feedback as possible from industry professionals to find out how this can best be used in the real world. Here are my notes from the talk ...

Read article

Taming The Beast: How To Test an AJAX Application (GTAC 2008) [2008.10.25]

This was one of the talks at GTAC 2008 that I was most looking forward to before the conference. It was excellent, I was not let down. The talk was given by Markus Clermont and John Thomas who work at Google. Since the talk was right after lunch they decided to take a Q & A approach. It sort of went off in tangents at points but overall the format seemed to work. In my own work I've been struggling at maintaining a now bloated test suite for an AJAX website but their approach made something click in my head. I'm already working on a refactoring plan. Here is my abbreviated interpretation of the talk ...

Read article

The Future of Testing (GTAC 2008) [2008.10.24]

Google Test Automation Conference (GTAC) is my all-time favorite conference. It's free. It's on a single track — this means you don't miss any talks and everyone experiences the same journey of thought. Also, since you have to apply for admittance with a short essay, everyone who attends is really passionate about testing. It's still sort of "underground" which keeps it small and very social. Last year, I made some kind of attempt to live blog summaries of the GTAC talks but I never made it past part 1. We'll see how far I get this year, stay tuned. The videos for 2008 aren't online yet but check youtube often because last year they were up in less than a day. The Future of Testing was the first talk of the GTAC 2008 conference on Thursday Oct 23rd given by James A. Whittaker, a very entertaining speaker who works for Microsoft. His talk was excellent and I highly recommend keeping a lookout for the video. Here are my notes...

Read article

When Online Advertising Actually Works [2008.10.13]

Telemarketing is one of the most ineffective forms of advertising. Hello? Yes? I'm cooking dinner, why would I want to buy something? How do you know I'm even remotely interested in your product? Online advertisements like text ads and banner ads are slightly different. I usually buy things online out of convenience so the venue is good for advertising. There is also a lot of information about me online ...

Read article

Presenting a Solid Tutorial at PyCon [2008.09.26]

Proposals for tutorials at PyCon 2009 are now being accepted through October 31st. Due to many projects I have going on right now I probably won't be able to propose a tutorial myself but I thought I'd share some thoughts from last year...

Read article

Adrenallin For The Brain [2008.09.20]

Someone passed me a link to this really nice article, Annals of Science: The Eureka Hunt, which talks about how neuroscientists have been studying what goes on in the brain when we get those amazing ideas that seem to come from nowhere. In my own life I can think of several times where I've experienced a sudden "burst" of thought like this. Sometimes it seems like...

Read article

T'is be'a Fixture 1.1.1 fer ya! [2008.09.19]

Y'aharrr me seabound mateys! Thar be'a fine gully of'a wind shakin' ye jigger today as m'announce a new release of Fixture, a python module fer loadin' and referencing test data. O'er yonder ye find a cap'n's Changelog fer ye royal subjects. Riches abound! Booty abaft! ...

Read article

Web Frameworks Do Not Make DBAs Happy [2008.09.16]

A colleague of mine, Shaun Thomas, is one of a few database administrators who manage all our company's databases by monitoring, optimizing, partitioning, building star schemas, etc. The DBAs also maintain standard operating procedures for how to name a column or how to refe...

Read article

Real Test Engineers Love Dots [2008.09.10]

"The world's largest particle collider passed its first major tests by firing two beams of protons in opposite directions around a 17-mile underground ring ... After a series of trial runs, two white dots flashed on a computer screen at 10:26 a.m. indicating that the pro...

Read article

It's Time to USE The Web : Mozilla Labs Releases Ubiquity [2008.08.27]

Mozilla Labs releases the Ubiquity add-on for Firefox. In a nutshell: With search, users type what they want to find. With Ubiquity, they type what they want to do. Big congrats to Aza and everyone else who worked on this! As innovative as Humanized was, building somethi...

Read article

aintjustsoul.net: A portable record player for the Internet [2008.08.18]

I'm very pleased to announce a website I just launched: http://aintjustsoul.net/ I'm calling it "a portable record player for the Internet" because I'm a record collector myself and listening to as much music as possible has been the best way to expand my collection. Yep...

Read article

Chicago's Google App Engine Hack-A-Thon Recap [2008.07.31]

Today was Chicago's Google App Engine Hack-A-Thon and I managed to get some good work done. Well, I had planned to make packages more ephemeral on the PyPi mirror since it quickly hit the 500MB limit as is. But instead I decided to add Datastore support to the fixture m...

Read article

Fixture Goes 1.0 (Testing With Data In Python) [2008.07.18]

I've just pushed 1.0 — the I Heart Data release — of fixture, a Python module for loading and referencing test data. It is used heavily at my work in two test suites: one for the functional tests of an ETL framework and another for a Pylons + Elixir (SQLAlchemy) ...

Read article

An In-Process, Headless Web Browser for Python? [2008.06.12]

Yesterday, Atul Varma announced he had resurrected python-spidermonkey, John J. Lee's project to run JavaScript in Python. Woo! Spider Monkey is the JavaScript runtime that Mozilla (i.e. Firefox) uses internally. However, it's just an engine and doesn't deal with the DOM o...

Read article

After the release of Google App Engine, the Rubyists ... [2008.05.05]

... learn Python? No. They try compiling Ruby to Python bytecode, naturally. One has to admire their pride, I guess. The funny part is this might actually work. As the article points out, Ruby's opcode structure was inspired by Python's (I had no idea it was so similar, ...

Read article

Making Erlang indentation-sensitive [2008.04.28]

Ulf Wiger has been experimenting with making Erlang indentation-senstive. He followed up with a Part 2 after comments. For most people who start working in the Erlang language, the most annoying new concept is all the various line-terminators you have to know. Damien Kat...

Read article

The Python Make tool [2008.04.22]

A while back there was a lot of talk about needing a Make tool for Python, one like Ruby Rake. There are a few packages now: SCONS A software construction tool zc.buildout System for managing development buildouts ... and more recently: Vellum Vel...

Read article

Testing Google App Engine sites [2008.04.17]

The Google App Engine SDK sets up a fairly restrictive Python environment on your local machine to simulate their runtime restrictions. Roughly this consists of no access to sockets and thus barely working httplib, urllib, etc (replaced by urlfetch.fetch()), inability to...

Read article

PyPi (Cheeseshop) on Google App Engine [2008.04.15]

Like many of you, I've had my jaw on the floor since the release of Google App Engine. Although there are skeptics out there, a careful read of their terms will show you that it's for real — Google has released GOOGLE to the world and it's not for scary marketing purpos...

Read article

Unicode In Python, Completely Demystified (slides available) [2008.03.15]

Big thanks to everyone who attended my talk at PyCon today, Unicode In Python, Completely Demystified. It was an ambitious title; I highly doubt I "demystified" everything, but I was happy with how it went. There were a ton of great questions — even some I c...

Read article

Data mining in Python and beyond? [2008.03.12]

Dear Lazy Web, I am a software engineer who hasn't done any college level math (gasp!). Recently, I've been having a lot of fun transforming data into more meaningful data. This, I believe, is more commonly known as data mining and I'd like to learn more about it. Spec...

Read article

The Monty Hall Problem (win a goat or a car) [2008.02.13]

There is a puzzle used in game shows known as The Monty Hall Problem. It's been around for a while but over lunch yesterday someone explained it to me for the first time and 3 out of 4 of us argued convincingly the same answer. And it was wrong. Here's the problem: Suppo...

Read article

Building Flash/ActionScript sites entirely in code and using FireBug for debugging [2008.01.28]

Way back in the olden days I used to dabble in Flash for building dynamic websites. This was incredibly painful, as I recall, because I couldn't stand the Flash IDE. It was clunky and hard to navigate, there weren't enough key commands, and the code editor was a sad version...

Read article

Converting ReStructuredText to Wiki syntax [2007.12.21]

I just released a little package called wikir that attempts to convert reStructuredText to Wiki syntax. Why? Mostly because I have a lot of projects hosted on Google Code and reStructuredText is my documentation weapon of choice. It's also widely supported in the Python w...

Read article

Software is written by hand [2007.12.21]

...that's right, it's not molded or prefabbed, it's not made on a production line or in a lab. Are we insane??! Here is a hilarious probe into the darker side of this art we call programming.

Read article

Leapfrog Online is looking for some Django developers (Chicago area) [2007.12.13]

Leapfrog Online is looking to hire several Python developers to work on a Django site. If you know Python but not Django, this is an excellent opportunity to learn. If you know Django but want to learn how to use Python in other contexts, you'll get to do that, too. You'll...

Read article

WSGI Intercept Has A New Home [2007.12.03]

A while ago I started using Titus Brown's wsgi_intercept module to test some XML services I had been working on. It was a great way to set up a stub response so that the tests never hit our real services. We even created a nifty little decorator that would look for an envir...

Read article

Datejs - A JavaScript Date Library [2007.12.03]

Found out about this nifty date package for JavaScript today: Datejs. Its chainable interface makes the code read very naturally: // What date is next thursday? Date.today().next().thursday(); // Add 3 days to Today Date.today().add(3).days(); // Is today Friday? Date.today...

Read article

importing modules from setup.py (chicken vs. egg!) [2007.11.20]

There's a chicken vs. egg problem when you want to import 3rd party packages in a setup.py file. I often want to import my main module so that I can use inspect.getdoc(my_module) for the description in my setup function (avoids duplication). But if a user is running python ...

Read article

How To Get Started Writing Open Social Applications [2007.11.18]

I started learning about Google's Open Social API and gave a lightning talk on it at the last Chicago Python User Group meeting. It wasn't much more than a brief overview and fodder for "diving in" to the Open Social platform. Here it is again, in more of a tutorial fo...

Read article

Pycon in Chicago, Excited Yet? [2007.11.14]

I freaking love this town. Who's up for a sprint at the Billy Goat Tavern?? Pycon 2008 site

Read article

GTAC Highlights Part 1 - Selenium is Alive and Well, Model Based Testing Is Smart, And... [2007.08.25]

I just got back from the GTAC (Google Test Automation Conference) in New York and had a great time. It spanned 2 days and had a single track — this made it very laid back (no headaches trying to decide what talk to attend) and the timing was perfect. Especially since my travel...

Read article

Python on TextMate demo (Chicago area) [2007.08.08]

If you are in or around the Chicago area, I will be demo-ing some techniques for coding Python in TextMate, an editor for Mac OS X. It's part of the Snakes On Apples themed Chipy (Chicago Python Users) meeting. It's at 7pm, Thursday August 9th; click the link for more info ...

Read article

Hacking python frames [2007.07.18]

At the last ChiPy meeting, Ian Bicking showed a fun little hack to install a doctest output checker from within a running doctest. The hack goes so far as to backtrack through the internal frame stack, locate the doctest frame, change some of its local vars, then switch out...

Read article

fileinput : nice module for file processing [2007.07.03]

Of late I've been writing scripts that scrape logs to fix data. groan. Well, at least this was a nice discovery: the fileinput module in stdlib (since 2.3? not sure). Some code ... import fileinput outf = None def add_woot(line): global outf if outf is None: outf = open(...

Read article

context_tools, bridging the gap between test methods and test classes? [2007.06.26]

Collin Winter just released context_tools, which strikes me as a step towards bridging the gap between test methods in nose and test classes in unittest/py.test/nose/etc. Currently, it can be hard to refactor tests that start as simple test methods when later you decide to u...

Read article

Going to the GTAC (Google Test Automation Conference) [2007.06.21]

UPDATE: Here were my highlights (part 1) I just like saying GTAC "G-TACK," it rolls off the tongue nicely. It's funny when you hear techie things said out loud that you've only see on the screen. At work, I just interviewed a Software Engineer candidate who has used scotc...

Read article

What does the def-star-variable (or def-asterisk-parameter) syntax do in Python? [2007.06.20]

Inspired by Titus' blog post about Python's elusive at sign I thought I'd drop a little google egg for anyone who is learning Python and hasn't read the manual cover to cover yet (like I did ... yeah, right). If you see a def in python with asterisks (or stars), like so: ...

Read article

undefined reference to `__stack_chk_fail' (compiling subversion 1.4.3 on Ubuntu) [2007.04.24]

Trying to compile subversion 1.4.3 on Ubuntu since there's no package? Here goes some more google-mentation on the subject... ;) I followed these helpful notes on getting the initial set of dev packages installed using apt-get (the deb didn't work). However, I don't kn...

Read article

documentation for fixture module [2007.04.17]

In a mad sea of too-busy-to-blink I've managed to write documentation on the fixture module for python. If this interests anyone could he/she please let me know how the docs read? Too much? Too little? Hard to navigate? Examples too complicated? Thanks. For reference,...

Read article

Humans are here to stay! [2007.04.04]

Slashdotters are getting bummed out that Amazon is trying to patent its Hybrid Machine/Human Computing Arrangement. The bitterness seems to be in the gist of "computers are taking over the world, oh no!" or something. As some comments note, this is a logical fo...

Read article

multiple inheritance woes [2007.03.29]

multiple inheritance in python starts to fall apart when you want to mash together two very similar objects. I haven't found a clean way to get this example to work (without hardcoding the super calls to self.rollback_db() or doubling up implementations of rollback_db, both ...

Read article

testing just got easier (a few nose plugins) [2007.03.22]

While procrastinating on writing documentation for fixture I managed to code up a few nose plugins. (Seriously though, the fixture docs are nearing a stage of completion, I swear it!) If you're not familiar with nose and its nosetests command for running test files, then i...

Read article

unicode and unicorns [2007.03.12]

Feihong Hsu gave an excellent talk on handling unicode in python at the last ChiPy meeting. The slides are there on his blog and if you missed the talk, they are still a logical read. He also posted his demos which contain much useful code for working out common problems. H...

Read article

Live doctest in TextMate (IPython + Twisted?) [2007.03.01]

I use TextMate for all python dev and I've had this idea to make typing doctests yield live results. In other words, when you are editing a module, if you were in a doctest you would type a line of code and the next line of your module would contain the result. Just imagin...

Read article

PyCon: A Star Schema in pure python code? Is this guy INSANE? [2007.02.24]

Steven Lott gave a talk roughly about implementing the star schema in Python (slides) suggesting that ETL operations—that is, the process of extracting, transforming, and loading data into a dimensional model (the Star Schema)—then analyzing that data can be done ...

Read article

You vs. The Real World: Writing Tests With Fixtures (Sunday at Pycon!) [2007.02.19]

I've been having some trouble trying to edit my proposal summary (maybe it's not possible anymore?) so I wanted to point out that the talk will cover the fixture module, not the testtools.fixtures module. This is actually a new module, a rewrite of the testtools one from scra...

Read article

Why People Don't Use Hand Dryers [2007.02.14]

It's because they don't know that you have to 1) wring out or shake off extra water then 2) rub your hands vigorously under the dryer. If you don't do that, it doesn't work (unless it's some turbo dryer I've seen in restaurants recently). Most dryers do not have these instr...

Read article

Industry of the Ordinary [2007.02.13]

I'm picky about art because most of it is boring (the nature of experimentation, I guess) but someone showed me this site for an art group in Chicago, The Industry of the Ordinary, and their projects are great. The site itself looks really nice too (I like the smokiness). ...

Read article

2 stupid things I coded this week [2007.02.09]

#1 try: do_stuff() except: etype, val, tb = sys.exc_info() raise etype, "%s (%s)" % (val, "happened in the context of X"), tb #2 class UsedToBeADict(object): foobar = make_foobar('with sugar'), bazbar = 1 fezbar = 2 If you don't see the mistakes al...

Read article

Coffee! ... and python [2007.01.31]

I'm going to try my first Tech Coffee—early morning coder's meetup—this Thursday to work on the fixture module somewhere other than the purple line to and from work. When Tech Coffee first started it was on Mondays. That was the worst idea, ever. The last thing ...

Read article

Housecall from the pydoctor (finally, a doc generator that works!) [2007.01.24]

On a fair day in a far away land there was once pydoc, a cunning warrior indeed. Generating docs for distribution wasn't too hard, just a few lines like ... os.chdir(build_dir) src_dir = os.path.basename(mymod.__file___) pydoc.writedocs(src_dir, '%s.' % mymod.__name__) ...

Read article

Generating python with python [2007.01.17]

I've been working on this generate command that creates fixture code from an existing database and, I just have to say, I really like that I can do: template.add_import("from %s import %s" % (cls.__module__, cls.__name__)) It just feels so ... right ;)

Read article

New Chicago City Sticker [2006.12.02]

It's that time again to vote on the new Chicago City Sticker. Well, voting is now over unfortunately but I am really impressed by the contestants this year (each done by high school students interested in design). I can't decide which one I like best. Wow. And ...

Read article

Python gets true closures in 3000 - do I care? [2006.12.02]

Really the only thing stopping python 2.x from having closures like how Martin Fowler defines them is that, aside from the global module space, you can't re-bind names in enclosed scopes; you can only have a local reference. An *ahem* unnamed coworker of mine who mainly uses ...

Read article

You vs. The Real World: Testing With Fixtures (Coming Soon) [2006.11.30]

I'm very pleased to announce that my proposal for a talk at pycon 2007 was accepted (#83). I'm pretty new to pycon but, wow, what a tough time this year the reviewers had! 104 submissions, only 50-60 could be accepted; ouch. The talk is titled You vs. The Real Wor...

Read article

Creating a subversion checkout/ dev target for easy_install [2006.11.29]

I was a little confused by setuptool's explanation of how to make an egg installable as easy_install yourproject==dev How do you tell it where your repository is? You actually have to put a URL somewhere for setuptools to find. I.E. In the long_description, the body of t...

Read article

Blogging, Blogosphere, or something [2006.11.28]

So ... I have a blog now. Dunno about Bonde but I always kinda told myself I'd never have a blog because I don't read them much and think the whole phenomenon is a little weird and self-indulgent. On the flipside, I find myself googling a lot for things like "make...

Read article