09 December 2014

Meet Marian

The NPR library is looking for a software developer to extend the library's in-house digital asset management apps. Maybe that person is you? LAMP is the technology stack; JavaScript and jQuery are also important. And I can attest that we do Agile here, and we do it right.

29 November 2014

Bias interrupters

James Surowiecki recaps the gender disparity in tech, touching on the observed dropoff in female CS degrees since 1980.
Promoting diversity isn’t, as many techies think, pure do-gooderism. It’s genuinely good for business, since a large body of evidence suggests that making organizations more diverse can also make them perform better.... A worldwide study, published in May, of more than four thousand R. & D. teams found that gender-diverse teams were considerably better at driving “radical innovation.”

07 November 2014

Soft tech

Paul Ford runs emulators of old PCs and ponders sitting on the porch.
The Alto was arguably the first modern general-purpose computer — a big screen, modern software, and you used a mouse to point. It was never generally available but it was the Velvet Underground of computers, in that everyone who saw it went on to make their own computer industry.
things magazine

05 November 2014


Wendy DuBow introduces the National Center for Women & Information Technology in a short piece (paywalled, alas) for IEEE Computer Society's Computer. One focus of the Center's activity is an interesting one: helping employers to retain women who otherwise would drop out of the computing work force mid-career.
It's important not to underestimate the power of simply saying... "You did well on this project."

27 October 2014

Any color is a good choice, so long as it's black

Nicolas P. Rougier et al. offer "Ten Simple Rules for Better Figures." The one that I tend to forget: Captions Are Not Optional. And the TL;DR version of the paper is captured by the first two rules: Know Your Audience and Identify Your Message.

24 October 2014

Blame Charlie Chaplin

Steve Henn makes a provocative hypothesis. He notes the time-correlation between the dropoff in women majoring in computer science, which began in about 1984, and the rise of home PCs, marketed predominantly to men and boys.
In the 1990s, researcher Jane Margolis interviewed hundreds of computer science students at Carnegie Mellon University, which had one of the top programs in the country. She found that families were much more likely to buy computers for boys than for girls — even when their girls were really interested in computers.

This was a big deal when those kids got to college. As personal computers became more common, computer science professors increasingly assumed that their students had grown up playing with computers at home.

20 October 2014


A nice interactive visualization of how basic logic gates work, and how they can be combined to make a simple computer. And now I think I understand why we call it a latch.


13 October 2014

About time

Gillian Jacobs is working on a documentary about Grace Hopper, for online release in February 2015; Selena Larson has an interview.

19 September 2014

I'm hot, what are you?

I'm not exactly sure where Matt Asay wants to go with his snarky post about COBOL. Citing various relevance rankings, including Twitter mentions (Twitter being the first place I look to for career advice), he concludes:
In sum, COBOL won't get you a date. And it probably won't get you a job, either.
He then circles back and grudgingly admits that the language still has a role to play in the marketplace, but without using the N-word. In other words, what he wants to say is, "my trendy language with arcane syntax is a niche language; your established language with arcane syntax is as useful as learning Attic Greek."

13 September 2014

The Six

Selena Larson has a piece about Kathy Kleiman's ENIAC Programmers Project, which documented the work of six hitherto unknown women programmers on this computing effort from the 1940s.

08 September 2014

A launch

From my most recent project, the new responsive microsites for Kennametal's services offerings and NOVOsphere app are live.

05 September 2014

PHP is older than JavaScript?

Lauren Orsini discusses the longevity of programming languages with Ari Rabkin, coauthor with Leo Meyerovich of a paper that looked at 200,000 Sourceforge projects. TL;DR: For a new project, a programmer chooses a project she already knows.
Through social influence and legacy code, our oldest and most popular computer languages have powerful inertia. How could Go surpass C? If the right people and companies say it ought to.

15 August 2014

Adrenaline Junkies and Template Zombies

Adrenaline Junkies and Template Zombies: Understanding Patterns of Project Behavior (2008), by Tom DeMarco et al., Principals of the Atlantic Systems Group, is not a collection of patterns in the Gang of Four sense, following a template of intent-motivation-applicability-etc. (Indeed, the authors would argue that slavishly following a template is a path to project failure.) Nor is it a collection of anti-patterns, but rather a useful collection of 86 short essays on project success and collapse, more or less evenly divided between exemplars and cautions. Each one comes with a provocative title that may mask whether the pattern is one to avoid, embrace, or just think about—a title to keep you reading, like #2: Rattle Yer Dags.

The book doesn't go in for the bleeding-edge wisdom of Silicon Valley's approach to software development—the whole "move fast and break things" scheme. On the other hand, there is measured approval for some of the innovations promoted by the Agile movement. #31: Rhythm, for instance, is a good explanation of why Scrum methodologies are successful, and #75: Fridge Door introduces information radiators. Rather, the Group's audience skews more toward teams and their managers in larger, more risk-averse organizations: governments, enterprise IT shops. These are the outfits that need to be told that project documents that no one reads (#61: Orphaned Deliverables) are valueless.

There are surprises, even for a reader like me, someone who has seen project wins and busts, employing nearly everything in the palette of project management techniques, from two-week sprints to WBS-driven slogs. For instance, #58: Cool Hand Luke is frank about the positive role that conflict has to play in organizations, which the authors more than once call "messy" by nature. And #57: "There's no crying in baseball!" is a little gem, neither pattern nor anti-pattern, that reminds us that strong negative emotions are a side-effect of that "passion for your work" that my boss keeps racketing on about:

In deciding whether or not to tolerate unruly emotions, it's worth remembering that feelings intrude on work only to the extent that people care about their work. The easy way to make the feelings go away is to hire people who don't give a damn.

The book is chocked with memorable coined phrases: "reality deodorant" to cover up the bad smells of a project in trouble (p. 12), "schedule chicken" (p. 129). Do I see some of these patterns at my own job? Oh, yes, I have attended my share of #4: Happy Clappy Meetings, and I have seen #16: Dashboards used effectively, but fortunately it's been a while since I encountered #19: Film Critics.

Each essay is short and to the point, as #62: Hidden Beauty advises on design:

... no design is made better in any way by piling on added features or glitz. Rather, what enhances a design's aesthetic is what is taken away. The best designs are typically spare and precisely functional, easy to test and difficult to mess up when changes are required. Moreover, they make you feel that there could be no better way to achieve the product's assigned functionality.

07 August 2014

Succulently bad

Today's post at The Daily WTF is in the CodeSOD category, but it's so gloriously bad that it's a candidate for CodeSOM, probably CodeSOY. The method in the snippet is attempting to detect whether a string contains a vowel, something that could be done with a regex in a line or two. Instead, after 73 lines of flailing about (including gormless multiline comments), HasAVowel() looks at only the first character of the string and returns the answers "yes," "no," or (!) "maybe."

Just one of the priceless comments:

    //because visual studio has put a red zigzag underneath the name of my procedure 
    //I need to return something always

We're in Leonard Pinth-Garnell territory here. Or, as my theater colleague Tim would say, "bad, bad, bad, and ghastly."

08 July 2014

Compare and contrast

Luke Vnenchak gives us an update on Scoop, the in-house CMS in place at the New York Times. It's really interesting to see how (or even whether) a CMS solves certain problems. Among them:
  • Scoop provides for multiple versions of draft/published stories: this blows the doors off CQ5's simple (but effective) author instance/publish instance model.
  • Automatic smart cropping of images, given a master and a thumbnail. I've had clients that would love a feature like that.
  • Locking body copy independently of assets like images and multimedia. Yep, that's also something that my guys demand.
  • Tagging to an open standard: I haven't built any production code to support this, but it's something we have explored. Generally the stumbling block is the question of who owns the tags.

01 July 2014


Product owner Patrick Cooper considers, then puts aside, a Wilderesque spin on an end-of-sprint demo for last year's project.
Serri wakes up all the stories… or something.

10 June 2014

Nothing without Googlé

Michael Kleiman and Michael Pertnoy, in an Op-Doc for the Times, document the ups and downs of getting communications connectivity to a remote village in Peru.

Students in the school at the hamlet of Palestina had been issued OLPC XO laptops, but securing internet and wireless connectivity was difficult.

Palestina is a 10-hour boat ride on the Purus River from the nearest airstrip. A local carpenter says that the village needs a road more than it needs cellphone coverage. He's probably right.

05 June 2014

No ideas but in things

Jordan Ellenberg is perhaps the only mathematician to quote William Carlos Williams in order to make a (debatable) point about mathematics: that it is all about assertions that refer to the world.

I agree with him completely about the value of doing your homework:

Getting these rules in muscle memory is what you need if you want to get fluent in algebraic computations.

There’s just one thing missing, but it’s a big thing: the fact that algebra is made of sentences, that it means something, that it refers to something outside itself. An algebraic statement isn’t just a string of symbols with an x stuck in there somewhere. It’s an assertion about a relationship between quantities (or, when you get to more advanced algebra, between functions, or operations, or even other assertions.) Without that animating idea, algebra is a dead and empty exercise....

Computation is important! We lose just as badly if we generate students who have some wispy sense of mathematical meaning but who can’t work examples swiftly and correctly. A math teacher’s least favorite thing to hear from a student is “I get the concept, but I couldn’t do the problems.” Though the student doesn’t know it, this is shorthand for “I don’t get the concept.”

17 May 2014


A charming series of videos that visualize various simple sorting algorithms via Eastern European folk dance. Perhaps the Székely folk dance shellsort is the most lively, as well as the optimal algorithm. But using 4-1/2 minutes to sort 10 elements is still somewhat poky.


06 May 2014

Tiling, literally

Ramsey Nasser explains his Arabic programming language/artwork قلب, a recursive acronym which we could transliterate as 'ALB.
At every single step of the way, every software tool you would use to build a language breaks horribly when encountering non-Latin text. They all expect text encoded as ASCII, which is the standard that includes lowercase and capital Latin characters, numbers, punctuation, and that’s about it. Anything else needs considerably more effort to support consistently. The preceding screenshot shows a version of my interpreter choking on Arabic text and vomiting it out as percent-delimited code points.


11 March 2014

No news

Sometimes a project is just slow, steady, grind-it-out work, without frequent milestones to mark progress. Work's like that sometimes.

17 January 2014

Start 'em young

As Eleanor Barkhorn reports, the time to get more women in computer science (any STEM field, for that matter), is when girls are in middle school and high school. The low participation rate in the AP computer science test by women high schoolers is shocking: in some rural states, in the past year, no girls took the exam.

Barbara Ericson, of Georgia Tech's Institute for Computing Education, is working to change that. Ericson and her colleagues, in partnership with the Girl Scouts and other organizations, are experimenting with new strategies to get young women interested in computing. One radical idea: allowing high school students to use CS courses to count toward math or science curriculum requirements.

As much as I think everyone should have a solid grounding in logic (usually introduced by proving theorems in geometry) and problem solving by manipulating equations (algebra, Nicholson Baker's bugbear), I'm inclined to support this idea. Designing, coding, and debugging a program in a procedural language calls for similar skills: working at multiple levels of abstraction, systematically eliminating explanations until the correct one is found, finding the simplest solution.

02 January 2014

Fail better

As product owner Patrick Cooper explains in an unusually frank post, our launch a couple of weeks ago was actually our second try.

So, it’s healthy every once in while to have an out-and-out fail.

The code deployment was never an issue; the procedural code was solid, and it always built and deployed successfully to production and staging environments. What burned us was the database migration: the new release entailed a major refactoring of an important subset of the schema.

The root cause of the fail was a database version incompatibility that we should have prepared for, but didn't. Even so, there were steps we could have taken that would have told us the migration was in trouble an hour or two sooner.

The migration was a series of SQL scripts. For most small updates (the app is usually updated on a 2-week scrum cycle), the dev team drops one or two short scripts (to create a new table, add some codes to to a dictionary table, that sort of thing) into a canonically-named folder, and migration is a short 5-minute process that takes no more time than the code deployment. But in this case, we had haphazardly put together a series of about a dozen scripts, two of which ran resource-devouring stored procedures.

What I would have done, in hindsight: organize the scripts so that all of the DML is executed first, then the dictionary tables are populated, and then finally the heavy lifting of moving data from one table to another happens. Add monitoring steps so that we can track the progress of the migration (we did do this for the second try). Seriously rethink the choice of stored procedures, and instead use a scripting language like Perl or Python or a compiled program. To the extent possible, provide a log or audit trail of migrated entities (the team did this very successfully in a smaller-scale migration a couple of years ago).