Why be functional?

In 1984, John Hughes wrote a seminal essay called "Why Functional Programming Matters" discussing functional programming in what it brings to our field, rather than what it leaves behind. In my efforts to understand functional programming, I ended up writing my own, less academic version of a "why functional programming matters" type of essay. In my case, it's more of a persuasive essay.// read more

A year of mob programming

It's been twelve months since I started learning how to program in a mob. This post describes my experiences.// read more

Functional first development

This is an introduction to functional first development, a coding and design practice that brings some of the benefits of functional programming to any programming language.// read more

The 10x developer

This is an offshoot from my work building teams of functional programmers, and the trend toward anarchy in software engineering teams. In this short post, I discuss why 10x developers exist, how they do so much more than average, and some ideas for driving value up across the whole team.// read more

Irrational configuration system to functional data store

This is my CodeMesh.io 2015 conference talk on using a functional data store to replace an organically-grown configuration system in one of our software platforms.// read more

Where to go from here? Change the world.

Changing the people who create tech changes the people who create culture. If we can make tech more diverse, we can make culture more inclusive. This is my closing talk from Rails Girls Salt Lake City 2015.// read more

Why be functional?

I gave this talk at OC Tanner during a functional programming boot camp for our developers. It looks at complexity, the influence of language design on program design, and how pure functional programming may provide strong benefits.// read more

How to hire a software engineer

This talk is from OpenWest 2015 in Orem, Utah. In it, I discuss a recruiting, interview, and hiring process that is authentic, collaborative, and people-centered - just like we want our work environment to be. Plus we look at the process from the perspective of both the hiring side and the candidate's side.// read more

Idiomatic Erlang in 42 minutes (or less)

A quick introduction to Erlang// read more

Navigating the Bazaar

This is my presentation on Navigating the Bazaar of Open Source libraries, presented at That Conference in the Wisconsin Dells on August 14, 2013.// read more

The developers will fix it

Much of our code depends on an ecosystem of open source libraries built by third party developers. Here's my take on getting library updates into production, at least when you have a small team of developers.// read more

Managing risk and selling value

This is the transcript from my Wordcamp Milwaukee 2013 presentation on the complexity-risk-value formula. I edited and trimmed, got it down to 40 minutes or less, and made it a bit smoother. If you're interested in the C-R-V formula, this is the place to start.// read more

Civic Hacking with IPython and Pandas

IPython Notebook is a browser-based Python shell that supports rich media like graphs. Pandas is an open source data analysis library. This presentation introduces how these tools used together can be used to explore a civic data set such as parking citations or water use to ask and answer interesting questions interactively.// read more

Don't comment your code

Comments lie. Instead of writing comments, write specs and functions. This post talks about why and how to do this.// read more

Migrating from MySQL to PostgreSQL using SQLAlchemy

This is basically a guest blog post. The content was created almost entirely by Paul Morel (owner of Tartan Solutions) and Mike Bayer (author of SQLAlchemy and other fine Python libraries.) I was invited to compile and edit the conversation.// read more

Tech sexism and co-creation of the community

PyCon2013 has ended and I'm seriously depressed. It's not just the energy shift at the end of a good conference. It's also the way tech sexism has once again exploded.// read more

The tyranny of the database

Databases model our world, and to do that they necessarily distort it. This lightning talk prepared for PyCon2013 explores the impact on us as individuals and society as a whole.// read more

Managing risk and selling value

You're a skilled practitioner of web crafts. You can get Google agog. You can send customers clicking to conversions. You can refactor a repulsive code repository. But you don't know how much to charge. This presentation explores how the three prime factors for pricing your work - complexity, risk, and value - interact with each other and help make the right jobs lucrative for you and your client. This presentation is intended for freelance web craftspeople, bespoke design agencies, and boutique development firms.// read more

Development environments with Vagrant, Chef, and Git

The Milwaukee PHP User's Group invited me to present about Vagrant, Chef, and Git for quickly standing up development environments. Here's my transcript and slides.// read more

Another blog reset

Redesign isn't the right word. It seems when I want to freshen my blog, I get down to the nuts and bolts.// read more

Ramada Plaza Milwaukee kicks my 70 year old mother out at midnight

Dear Ramada Worldwide, your Wisconsin Ramada Plaza Hotel on 13th at College Ave in Milwaukee just kicked my 70 year old mother out of her hotel room at midnight, because I complained about accessibility. // read more

MODX can beat up your content management system

Tonight's Milwaukee Web Design Meetup featured a CMS MegaPanel - eight pros in eight content management systems, head to head on development, features, ecosystems, costs. I represented for MODX.// read more

A quick note on MongoDB replica sets

MongoDB is replying to a replica-set add command with "Need most members up to reconfigure, not ok". The problem is with my configuration.// read more

Drupal, on GlusterFS, on Rackspace Cloud

I ran Drupal on GlusterFS for a few days. I didn't like it. Here's why.// read more

Elavon Phishing Scam

A customer received 40,000 mailer-daemon messages yesterday. I bet that was fun.// read full article

Tryton as an e-commerce back-end - Web Framework

This is part three in a series exploring how Tryton might fare as the heavy-lifting portion of an e-commerce package. This third part explores what it means to do e-commerce.// read more

DjangoCon, part four

Here's the recap of day three, the last day of the talks. Apparently I took good notes on day three, since this is by far the longest post, and the one it took me longest to produce. It was, indubitably, an excellent day.// read more

DjangoCon, part three

Day two is done, and I'm trying to do better at this. I definitely have better notes than yesterday. I have slightly fewer of them too, since the South session was absolutely worthless to me, and I blew off Tilting at Windmills to go up to the room with a stomach ache and a customer who needed help.// read more

DjangoCon, part two

Oh my, I'm not good at this. There are people around live-blogging (and live-noting) the conference, and I'm scraping the sleepiness off my face enough to see the screen, only to realize I don't actually remember yesterday very well. I may be exagerating a little, but I did not take adequate notes (sorry, PyDanny - I heard you on this, really I did.)// read more

DjangoCon, part one

It's two days before DjangoCon, I'm on a plane to Portland, and I've mostly been spending my time reading the Django Book. That has me thinking about what I expect from the conference.// read more

jQuery.multiup plugin for multiple files

I'm a progressive. By this I mean I like things to get progressively more complicated. Don't you? Of course, I don't mean that things should be more complicated than they are — in fact, I think they should be *at most* only as complicated as they are. But they don't have to start off that complicated; they can get complicated *progressively*.// read more

Blog reset

My blog had been hosted on a legacy shared server account that I don't manage, running Wordpress. I was frankly embarrased to tweet links to it - often it wouldn't come up at all. Now that's all changed. Now my blog is on Django. (But only kinda.)// read more

High Availability Linode Pairs

Something like a recipe for creating database and application servers that failover on each other. This recipe is for Lighttpd and MySQL, but it can be extended easily for other applications. Later, I'll do one for Tryton and PostgreSQL. I use Ubuntu 11.04 64-bit on two Linode virtual private servers.// read more

A new OpenERP product and license

Last Friday (June 24, 2011) under an unassuming headline 'Improved OpenERP Website', OpenERP announced the new Enterprise edition of the OpenERP software. The response among community members was swift. Two topics attracted most of the conversation - the new OpenERP AGPL + Private Use license available only to Enterprise edition customers, and apparent policy changes regarding security alerts.// read more

Tryton as an e-commerce back-end - Stalking the Tryton community

This is part two in a series exploring how Tryton might fair as the heavy-lifting portion of an e-commerce package. This part discusses some of my experiences with members of the Tryton community.// read more

Freaky shadow

The webserver logs showed I was being followed on my path through a website by a computer at an IP address in Texas. It trailed two seconds behind me, on every page.// read full article

Tryton as an e-commerce back-end - About Tryton

This is part one in a series exploring how Tryton might fair as the heavy-lifting portion of an e-commerce package. This first part describes Tryton - architecture, features, community, license.// read more

Instantiate Blog

The story of how and why I ended up blogging. Again.// read full article