Friday, December 23, 2011

Who owns vacant properties in Baltimore?

I received many ideas for my free software project and ultimately settled on one suggested by Kate Bladow: a tool to help identify potential slumlords in Baltimore. It's specifically designed to help Baltimore Slumlord Watch investigations, though that anonymous blogger has nothing to do with this tool (he or she has to do complete investigations of each property before writing a post). This is more like an experiment to use all available data to identify people and companies who may own a large number of vacant properties.

The tool combines data from three sources:
  1. State of Maryland Real Property database: to get a complete list of every property in Baltimore, identified by a block and lot number (this database, unlike #2, allows wildcard searching, which is how we get the complete list). Includes a truncated field listing the owner name.
  2. Baltimore City Real Property database: to find the complete owner name and mailing address.
  3. Baltimore's Vacant Lots and Vacant Buildings open data sets. The anonymous slumlord watch blogger says that these are not very accurate or up-to-date, but hopefully they are good enough for us to identify who the main offenders are.
I applied a few cleanups and transformations to make the data more useful, and used the excellent Google Refine tool to try and reduce the noise I found in the Owner Name column. Many entities were listed under a variety of spellings, punctuations, and abbreviations, which Google Refine helped me combine. Thanks to Mark Headd for recommending Google Refine to me.

Below you will find a few lists of the top property owners in Baltimore gleaned from these tools.

Important Caveats
  1. Some properties are owned by companies using a series of one-up numbered company names (like "N# Inc." or "NB1 Business Trust", "NB2 Business Trust", etc.  I used Google Refine's clustering feature to combine similar names on the assumption that these are probably controlled by the same people. In the cases where I did this kind of grouping, I used sentence case instead of upper case or I replaced digits with the # sign.
  2. Many properties are owned by a uniquely-named LLC (like "1 E. Montgomery LLC"). One person or company could own a significant share of the vacant properties in Baltimore via shell corporations like this. One potential way to get around this is to look up the incorporation paperwork for each company (also available as a scrapeable database), but I'm assuming if you're smart enough to use shell corporations you're probably using a different company to be a registered agent. So this technique would probably only help us identify the main registered agents for the vacant property owners in Baltimore.
  3. I haven't done a great deal of authenticating or verifying. All I'm trying to do is make this data more discoverable/explorable. Obviously you should do your own homework before acting on any of this information.
  4. I was really surprised to see how much property is controlled by the city. Even if the absolute numbers below are inaccurate the relative amount is pretty amazing. I'd like to see the city take some bold leadership on doing something with all of those buildings and lots. How about a revival of the dollar home program?
  5. I only focused on properties listed as non-owner occupied by the State of Maryland.
  6. The Slumlord Watch blogger says that the city's vacant building data is inaccurate and not up-to-date, so there may be false positives and negatives in the list.
Largest Vacant Property Owners in Baltimore, Grouped by Name
Owner#  Vacants
Baltimore City1407
NB# Business Trust24
State of Maryland19
2008 DRR-ETS, LLC18
J.A.M. numbered corporations15
KGB numbered corporations10
University of Maryland10
L.A.M.B., INC.9
N-#, INC.8

You can also download the entire list of non-owner-occupied vacant building owners in Baltimore.

Largest Vacant Lot Owners in Baltimore, Grouped by Name
Baltimore City2926
State of Maryland32
Oblate Sisters of Providence27
Baptist Church18
L.A.M.B., INC.15
Benedictine Society of Baltimore12

You can also download the entire list of non-owner-occupied vacant lot owners in Baltimore.

The Raw Data
All data used to create the above table can be downloaded from Github, including the raw CSV data.

The Code

It's creative-commons licensed and posted on Github. It's pretty raw and unfactored. I ran it all from irb. It needs to be converted into a Rake task or other command-line friendly, totally-automated package.

Next Steps
  • We could get this up and running on ScraperWiki to have the data constantly updated.
  • We could run an Amazon Mechanical Turk project to create an up-to-the-minute database of vacant houses in Baltimore, using Google Street View. We could just ask each worker to use street view to make an estimate of whether the house was vacant or not. I'm sure there would be some inaccuracy but the data ought to be good enough to help further investigations.

Friday, December 16, 2011

The only social media advice you need

I keep thinking about How To Be Interesting, a 2006 blog post I read a few months ago. Russell Davies captured the essence of my social media strategy, what social media means to me, and why it's been so successful for me and others. If anyone ever asks me for advice in this arena, I am going to quote Davies:
...the core skill of any future creative business person will be 'being interesting'. People will employ and want to work with (and want to be with) interesting people.
Social media is a big deal because it helps you do the two things Davies recommends to cultivate that skill of "being interesting":

The way to be interesting is to be interested. You’ve got to find what’s interesting in everything, you’ve got to be good at noticing things, you’ve got to be good at listening. If you find people (and things) interesting, they’ll find you interesting. 
Interesting people are good at sharing. You can’t be interested in someone who won’t tell you anything. Being good at sharing is not the same as talking and talking and talking. It means you share your ideas, you let people play with them and you’re good at talking about them without having to talk about yourself.
It's not rocket science: social media helps you find more interesting things (such as when I found this article via Hacker News) and share them (like I'm doing with this post).

Monday, December 12, 2011

What is the tech community and who belongs to it?

We had some breaking news in Baltimore's tech scene last week: Sharon Webb was replaced as the head of the Greater Baltimore Technology Council (GBTC) by Jason Hardebeck. Sharon was a friend of mine, and I really bought into her plan to reinvigorate the council and make it more relevant to tech companies. As part of that effort she and GBTC board president Jason Pappas recruited me to be the Entrepreneur-in-Residence. To be clear, I'm not speaking for the GBTC in this post.

The news brought out an extraordinary amount of confusion, hurt feelings, and acrimony, expressed in social media channels. Neal Shaffer nailed it when he tweeted: "It occurs to me that the GBTC convo isn't really about GBTC at all. It's about a community with momentum coming to a crossroads."

That crossroads involves a few questions I hope to address here:

  1. What is the Baltimore tech community and who is part of it?
  2. Do we need to a group like the GBTC to further develop the tech sector in Baltimore?
  3. Are Baltimore tech events infected with an unseemly degree of enthusiasm for startups at the expense of other kinds of companies?

I want apologize to Elizabeth Eadie and everyone else I offended with a comment I made in the heat of the moment during an online chat (you can read about it here) in which I implied that service businesses are not as valuable to the economy as other kinds of businesses. That was a dumb thing to say. When this chat was taking place we were under the misapprehension that the new GBTC leadership was steering away from supporting entrepreneurs and startups in favor of more established, dues-paying large companies, which fortunately turned out to be completely untrue. I was venting my frustration that the startup sector, which I think is very undeveloped, seemed to be getting short shrift. I was actually responding to the disdain for startups I perceived in Elizabeth's earlier post on this subject, a disdain I often hear from independent technologists around Baltimore. 

Now that I've had a few days to cool down, here's how I really feel: everyone who makes technology of any kind in Baltimore is a member of the tech community. Too often we unconsciously emphasize "software companies" or "startup companies" when speaking of the "tech community", but that might be because software people and startup people are  better organized or more vocal than other technologists around town; I'm really not sure who our counterparts in the biotech world are, for example, not because they aren't valued members of the local technology scene but simply because (as far as I know) there's no one blogging about Baltimore biotech, and there aren't that many public biotech booster events.

I also think that the tech community includes companies that make heavy use of technology. Sharon Webb introduced me to a great example of this kind of company on the cutting edge of maritime logistics technology: Vane Brothers. I'd love to go to a meetup where they show off the cool stuff they are doing to disrupt the shipping industry!


The GBTC lost a lot of relevance in the past few years, and their board members know it. Some in the Baltimore Tech Facebook group and in other forums question the very existence of the GBTC, and they are right to do so: the GBTC has some impressive resources including a budget; a small full-time staff; and a large and well-connected board of directors. Have we as a society made a good investment of that social and financial capital?

I think Tom Loveland explained it best on Facebook:
"...sometimes you need an association. Like to fight a tech tax. Or to make sure DBED supports IT and startups instead of just bio and big business. (All that invisible stuff you never see.) And that City Hall remembers us, too. (In her State of the City address last year our Mayor announced I think only one bit of new spending, and it went to the ETC.) And though dozens of smaller events and get-togethers, ad hoc to organized, are fantastic, occasionally it's a very good thing to hold a giant celebration of our community. And to be all it can, a community needs to leverage its old farts and winners, those with wisdom and/or connections, who can assist the next generation. Often it's the association staff who sees a need and knows who can help and can make the connection. The up-and-comers in the throes probably don't know who to ask, and often don't even know to ask, or that awesome help is available."
So, just because GBTC has lost its edge doesn't mean that we should get rid of trade associations altogether. I have personally benefitted from GBTC as a connecting, community-building organization the whole time I've lived here: GBTC was the first sponsor of my first tech event in Baltimore and also played an instrumental role in making the first Baltimore Hackathon so successful. I met a key mentor at a GBTC Face2Face dinner, and I always make many new connections at TechNite events.


Elizabeth wrote "...I find the tech-start-up-entrepreneur-scene to be toxic and exhausting." She feels put off by the fact that "Too many people in the tech scene are trying to make a bazillion dollars overnight." Elsewhere on Elizabeth's blog Jason Rhodes echoes the sentiment when he says he "...never felt quite at home in the start-up focused Bmore tech scene. Like a lot of the people, but it seems to be focused heavily on things I’m less interested in as far as starting my own company, etc."

I have a mixed reaction to this. First of all, I now have two small kids and so I don't go to many tech events any more. Enough comments like these appeared enough on Twitter and Facebook to make me believe it must have become a common experience, which sucks.

Yet in my opinion, the primary and perhaps the only problem that our tech community suffers is a shortage of startups! Who are all of these "start-up focused" people trying to make "a bazillion dollars"? What companies have they started? There's a pretty small handful of startup companies around here, and all of the entrepreneurs I know trying to get a startup going are not the sort of craven, venal people that Elizabeth and her colleagues hold in contempt. In fact they are some of the most generous, open-minded people around, and they are motivated by a desire to change the world and make something really cool, while incidentally making money. Purely greedy assholes don't really want to live in Baltimore and we're better off for it!

Maybe it has to do with differing ideas of what a startup is. Startups are considered to be glamorous, shiny things in tech culture, and people who aren't doing them might feel jealous of the attention that startups get - especially when you read about a startup company raising tons of money or press coverage on the basis of zero revenue. If I was the owner of a small, profitable tech company in Baltimore, I'm sure I'd feel the same way! Instead of using superficialities to define what a startup is, I propose we stick to Eric Ries' excellent definition: "A startup is a human institution designed to deliver a new product or service under conditions of extreme uncertainty."

So if you're in a company and experiencing extreme uncertainty (not knowing who your customers are, exactly what problems you're going to solve, and whether you can make money solving them), congratulations, you're in a startup. It would be very wrong to say you're somehow better as a person or that your pursuit is more noble than someone else who is not experiencing that uncertainty, but it's also very wrong to dismiss such companies the way some people in the Baltimore tech scene have been doing. It's wrong to say we shouldn't be bending over backwards to help people who are considering making the leap of faith required to do a startup.

Why is it wrong? Because with this risk comes the potential for great reward, both for the entrepreneur and for the entire city. Startups can become large, wealth-creating entities in a way that few other kinds of businesses can. Startups make their founders and early employees rich, and those people can then turn around and reinvest in the city as philanthropists, entrepreneurs, or angel investors. We are missing this "virtuous cycle" in Baltimore (but keep your eye on Greg Cangialosi who is starting a new revolution of the cycle). The only way to get it moving is to get more people doing startups. I don't apologize for encouraging people to consider startups because I find it a rewarding lifestyle, quite apart from the potential to make lots of money (which is nice also!), and because a crop of awesome startups would become a rising tide lifting all of our boats. I want small web businesses in Baltimore to have more local clients with deep pockets! Baltimore with a few more companies like LivingSocial or Zappos or Millenial Media or or BillMeLater would be an incredible place to live no matter what your occupation!

I take this charge fairly personally since I don't think anyone is waving the flag for startups in Baltimore harder than I am. If I'm doing something that makes you feel excluded or unwanted please let me know and I will fix it. I'm wondering if there's maybe a small crop of "wantrepreneurs" who make a lot of noise about startups but who aren't "for real"; please don't count them as emblematic of startup life in Baltimore or emblematic for how I feel.


I've written a lot about Baltimore's potential to become more of a prominent technology hub than it already is. It would be crazy to diminish any part of it; we need everyone here being productive doing what they love and not wasting time squabbling like we've been doing. Like Tom Loveland, I see an important role for a trade group like the GBTC, and that's why I volunteer there. I liked Sharon Webb and was sad to see her go but I'm willing to give Jason Hardebeck the benefit of the doubt. Ever forward!

Sunday, December 4, 2011

Writing a short horror story with Amazon Mechanical Turk

I've been wanting to experiment with Amazon Mechanical Turk ("Artificial Artificial Intelligence") and recently came up with an idea for a fun project from my days as an improv theater teacher and actor. There's an exercise improvisors use, and sometimes perform before an audience, called "word at a time story" where each actor takes a turn advancing a story with one word. If you commit fully to it with no self-censoring, you can often get a pretty coherent story.

After reading Solving Instagram’s Unshredder with Mechanical Turk and $0.50 I wondered if I could ask mechanical turk workers to write a story using one sentence at a time. I setup a manual Human Intelligence Task (HIT) for workers to write the first sentence of a story, just to get a feeling for how the system worked. I got 20 opening lines, paying about $0.20 each. I rejected three of the responses for not being complete sentences or for being plagiarized. I threw away three others for being overly creepy, leaving 14 interesting openers:
  • Jim approached the open door cautiously, unsure of the source of noise he had heard just moments prior.
  • It was midnight, she was driving back home after a long day at work still thinking of the stranger that had spoken to her in the street.
  • Yesterday was the best day of my whole life.
  • Today would be the third day Sarah and her younger brother had been on the road alone after running away from the orphanage.
  • Once upon a time, lived a little elf named snowball, who worked for Santa at the North Pole.
  • Hurriedly, she pushed the email icon on her phone to read the message from Sandy, the drug counselor.
  • There was something off about the way he watched her, his eyes never broke away - even after she had crossed the street.
  • "Well, everything went better than expected", Andy thought as he left the building with the business card still in his hand.
  • A lump rose in Andy's throat and he brushed away tears as he reread the chilling message taped to his dorm room door.
  • There was a funny little house in the town, that had stood vacant for many years.
  • It was a dark rainy night in November as Marcus felt a cold wind blow down Hanging Dog Creek.
  • It was the height of summer, it was warm and sunny and beautiful outside but Cooper didn't feel in any way excited as he sat at his kitchen table, sipping his by now luke warm morning coffee, trying to make sense of what had happened the night before.
  • I was a big, fast, tailback with a nasty streak and a taste for blood.
  • The old woman turned and smiled.
I chose "lump rose in Andy's throat" for the rest of the experiment because I thought it would be good to start with a strong genre. I then wrote a script based on sample code I found in the ruby-aws gem. The script posts one HIT to Amazon displaying the story so far and asking the worker to add one sentence. Here's what each HIT looked like on the worker side:

I reviewed each sentence before creating a new HIT to make sure bad results didn't corrupt the story. Usually you would just upload a whole batch of HITs to be worked on in parallel; if you need to do serial processing with Mechanical Turk my code may help you.

I didn't need to reject any sentences, and in the spirit of the original improv exercise I did no editing. The workers were also in charge of starting new paragraphs. Below is what they came up with. I cut off the story arbitrarily as it seemed we were descending into minutiae and, hey, this was costing me money ($0.10 per sentence).
A lump rose in Andy's throat and he brushed away tears as he reread the chilling message taped to his dorm room door. This can't be happening he thought, How could someone do this to me? Andy carefully took the note off of the door, and entered his room. He sat at the edge of his bed, thoughts racing through his head as he stared at the paper in his hand. He tore it furiously. 
His girlfriend left him. She was never happy in the relationship and decided against continuing it. He was at a loss at what to think or say or do.  She was his first girlfriend, his first love. Andy decided to talk to his girlfriend and see if there was anything that could be done to save their relationship. He ran as fast as he could, almost tripping down the stairs, as he held back tears, to her dorm room three flights below his. When he got there, he stopped for a while and took a deep breath. He entered without knocking the door. Something was amiss - his girlfriend's dorm room looked like it had been ransacked, and she was nowhere to be found. As he backed slowly out of the room, he bumped into his girlfriends roommate Ella, who shoved him and said stearnly "Why are you in here?  Don't you know, Alexis broke up with you!" Andy looked at her with empty eyes, pushed her aside and run away. He was starting to suspect that someone had kidnapped his girlfriend and left him a fake break-up note so that he would stay away and not become suspicious - and maybe her friend Ella knew something. He had to go back. But before that he needed to take a closer look at the note to make sure that it was not Ella's handwriting. He entered his room and took carefully the pieces of the note from the floor. He put them together. He was really confused, it was her handwriting. He felt so devastated that he couldn't even cry. 
A sense of calm came over Andy as he reached for the phone to call the police. "Someone is bleeding to death in the basement" he stated. "Are they still conscious?" Asked the officer. "Barely so.", he replied, "Her breathing is faltering." "What is your address?" the voice asked, calm and collected. Andy, aware of the address belonging to a large dormitory, calmly stated the address, spelling out the street name with perfect enunciation. He was completely numb, unaware of the true circumstances that laid before him. He had finally done it.
Other notes:
  • Some of the workers wrote two sentences instead of the required one.
  • ProPublica has a wonderful guide explaining more practical uses for Mechanical Turk as a way to help their reporting. 

Thursday, December 1, 2011

Are we all riding a hedonic treadmill?

Update 28 Aug 2014: Kulraj Singh wrote a nice article further explaining where the term hedonic treadmill comes from.

I heard about the concept of the "hedonic treadmill" a few years ago and find myself frequently using it as a metaphor in conversation, but never being able to explain it adequately. I just read a good explanation in the excellent book NutureShock:

Back in 1971, two scholars…described the human condition as a "hedonic treadmill". Essentially, we have to keep working hard just to stay in the same relative place in society. Even when our situation improves, the sense of achievement is only temporary, because our hedonistic desires and expectations rise at the same rate as our circumstances. Brickman and Campbell noted that lottery winners are not any happier, long-term, than non-winners, and paraplegics are not less happy than those us with all our limbs. They argued that this plight was inescapable, due to our neural wiring. Our brains are designed to notice novel stimuli, and tune out everyday, predictable stimuli. What we really notice, and are affected by, are relative and recent changes. As soon as those become static, we return to a baseline level of well-being.
That we are so adaptive can be a good thing. When life falls apart, we'll soon get used to it - such changes in circumstance don't have to become incapacitating. But when our lives are blessed, and things are going well, there seems something morally decrepit in how we so easily overlook how good we have it.
The authors go on to point out subsequent research which has revealed flaws and subtleties in this theory, so I wouldn't think of this as established science: it's more like an interesting way to think about what really makes you fundamentally happy vs. what is mere novelty. For guidance on that front I recommend Man's Search for Meaning.

Tuesday, November 29, 2011

Free software project update

Update 12/27/11: here's what I ended up building

I received over 20 ideas for my free software hackathon project, and also a lot of encouragement. Here's a quick note to update everyone who has expressed interested in the project.

About half of those ideas were from people who want to start businesses. I'd love to help them out but I can't go into business with someone I've never met, especially if they don't live in Baltimore. If you are in that situation I recommend you hire someone to build a prototype as that vastly increases your credibility. Better yet, you should try teaching yourself how to code so you can build it yourself.

About two-thirds of the ideas were far too ambitious for me to tackle in one week. I'm exploring those for future endeavors, though.

About three or four of them look specific enough for me to create a basic solution in a week and I'm investigating each right now. The ones I ultimately pick will be based on how responsive the original customer is and what I think my chances will be to deliver the product within one week.

People are definitely fed up with crappy software. Many of my correspondents talked about existing solutions that are too expensive, buggy, or simply too bloated. They end up hacking things together with Excel or a web calendar. Based on this simple market research I definitely can confirm the "many competitors, little competition" thesis and it's something I hope to attack with this project.

Wednesday, November 23, 2011

Two of the smartest computer security precautions you can take

  1. Turn on 2-factor authentication for any cloud services you use that offer it, especially email (or switch to a provider that has 2-factor authentication). I've been using this with Gmail for a few months and it's pretty great. The extra hassle is totally worth it: email is at the center of your online identity and is really the "keys to the castle".

  2. Sign up for Cloak or a similar service that secures your wi-fi communications when using an unencrypted network (like a coffee shop or library). Cloak is by far the easiest one to setup that I've seen.

Friday, November 18, 2011

I want to build software for you for free

If you need someone to build a web or mobile software project to solve a business, institutional, or personal problem, today I'm volunteering to build it for you for free.

Update #1: here's the response to this offer.
Update #2: here's what I ended up building

Why am I doing this? 

I'm looking for awesome ideas for my next startup. I'm hoping that by solving your problem I'll learn enough about your industry/your life that I'll stumble onto something that a lot of other people also need, something I could build a business around. You can only get good ideas by working on real problems.

I also just really enjoying making things that people will use, and I'd really like to spend time delighting people with code. I was really inspired by Derek Siver's co-op business model post.

  1. This will be a win-win transaction. You'll get your problem solved (or you'll find out how hard it is to solve if I fail) and I will learn about a potential software niche in your world.
  2. I will build a prototype-quality application that solves your fundamental problem without a lot of bells and whistles. I'll probably use an HTML template to make things look OK, but it won't have the same polish as a full-blown application that had a designer working on it from the start.
  3. I will own the source code but will grant you an unrestricted license to use it or modify it as you wish as long as you don't resell it to others. If you want me to build a prototype for a product you can sell on your own then you would need to hire me as a contractor. Or you could hire Chris Granger to build it, who also inspired me. I'm looking for people who don't want to start a software company, who just want their problem solved so they can get on with life.
  4. You will always have free use of the prototype. If it becomes a business and I spend a lot of time improving the prototype I may need to charge you to use the new awesome version (much like what Derek Sivers described).
  5. I will be documenting the whole process on this blog and on GitHub so if your idea is a big secret then this is not for you - but I can keep any details of your involvement confidential.
  6. My primary tools are Ruby and JavaScript. If there's a mobile component I'll probably build an HTML5 app which could later be wrapped with Phonegap to make a native app for Android, iOS, etc. I will likely host the app on Heroku but I can host it on any *nix-based system you have.
  7. I'd really like to hear from people who currently have to struggle with crappy, expensive software that I can disrupt.
  8. Nonprofits and government entities also encouraged to apply: I could see making something free for a smaller entity and later commercializing it for larger institutions.
How to Get In Touch

If this sounds cool just email me!

Monday, November 14, 2011

Conclusion of my Ruby credit card processing post

Just a quick note here to say I finished updating the How to Setup Credit Card Payments for Your Web Application post, where I ultimately decided to use Braintree as the payment gateway coupled with my bank's merchant account. So far everything's going well. If I end up writing more code or switching something around I'll start a new post.

Thursday, November 10, 2011

Ruby Concurrency Realities

At B'more On Rails I recently presented a new talk I've been refining called "Ruby Concurrency Realities". The slides and research links are below (I also drew heavily on the Ruby docs and the Pickaxe book):

Sunday, November 6, 2011

Looking to meet some early customers

I'm looking to meet some potential early adopters for two awesome software products I've been working on this year. If you know someone who fits into either category and could make an introduction (my email is I would be very grateful:
  1. People who spend money on online and offline marketing and would like to measure it more precisely than they do now (to figure out the best way to use their marketing budget).
  2. People who own or manage retail stores. I'm looking for stores that have electronic records and would like to get reports from that data that help make the business more profitable (e.g. who are the most reliable suppliers, what are the optimal levels of stock of various items, what is the seasonal demand for each item in my inventory). I'm particularly interested in small retail networks of around ten stores (big enough to have a lot of data, small enough to not have nice software that makes sense of it).


Friday, November 4, 2011

Preparing audio files for Apple's HTTP Streaming protocol and uploading them to S3

I've been getting inquiries about how I prepare MP3 files for Apple's HTTP Streaming protocol and uploading them to S3 which I mentioned while discussing my PhoneGap example. I thought I would post a gist of the rake task I use to help people get started. The whole process is explained on Apple's site.

You'll need to install mediafilesegmenter and mediastreamvalidator from Apple (which I weirdly can't find now but may be part of Lion at this point). If you need to downsample the audio quality like I do, you'll also need ffmpeg and libmp3lame.

Thursday, October 20, 2011

How to setup credit card payments for your web application

Implementing credit card payment systems has been one of my least favorite coding projects, but things have gotten much nicer since I first started. I'm just starting again with my new company, and I will be continuously updating this post with my progress. I'm hoping to capture every single decision I've made to help other people get going and also as a reference for myself the next time I need to do this.

10/20/11: Choosing a Merchant Account and Gateway

After looking at a few different payment gateways, I've decided to try Braintree, mostly because of their awesome-looking, well-documented Ruby gem, but also because I've seen them at various Ruby/Rails events (speaking and sponsoring), and because I've heard good things about them from Figure53 and friends at LivingSocial. I also really like their "transparent redirect" feature, where credit card numbers never enter our system at all.

We also need a merchant account to go with the gateway. Since we're doing all of our banking with BB&T so we've decided to get a merchant account with them as well. Their rates seem competitive (much cheaper than Braintree's merchant account, probably because they have to partner with a bank and are charging a markup over the bank's fees). We also want to deepen our business relationship with the bank vs. shopping around for the absolute cheapest rates (something that can be done with FeeFighters).

We're doing the paperwork with BB&T right now. Next step will be to start integrating the braintree gem into our codebase, creating the payment screens in our system, etc.

10/25/11: Considering a Switching to Stripe

After posting the above, Gabriel Weinberg and other friends on Twitter suggested I check out a Braintree competitor, Stripe. Stripe seems to offer even more of a "one-stop shop" for payment systems than Braintree, and it has similar Ruby bindings and "transparent signup" features. So for me it comes down to pricing. A commenter from FeeFighters also suggested their Samurai gateway.

Both Stripe and Samurai look great when your volume is relatively small: their lack of monthly fees means your processing costs are lower. I'm building a subscription-based app, so I removed Samurai from consideration; not having to write a bunch of proration code, not having to worry about accidentally billing someone twice, etc., is a huge benefit of Braintree and Stripe. I'm sure Samurai will add it soon.

Once you get up to higher volumes, Stripe and Samurai become more expensive than Braintree plus a merchant account. I did some spreadsheet modeling and determined that using Braintree plus our BB&T merchant account becomes cost effective once we have 50 customers, which is about as many as we would need to really have traction.

I'm tempted to use the cheaper short-term solution now, but since I don't want to have to switch this around later once we get to 50 customers, I've decided to stick with Braintree and our own merchant account.

I also considered using, which seems slightly cheaper than Braintree, but the overall look and feel of their website is not developer friendly. Whereas all of the other sites I've mentioned look like they've put a big priority on making the developer happy.

11/4/11: Finished Initial Integration
I had a fairly easy time integrating the code with Braintree's sandbox. I was greatly helped by this testing technique that uses the wonderful VCR gem, so I could run my integration tests against real Braintree responses without having to hit their API every time. I also found inspiration from Braintree's example Ruby applications.

I'm using the Transparent-Redirect customer creation method to create a customer and store their credit card in the vault (so the credit card number never touches my systems at all; the only thing we store is a payment token referring to the credit card stored by Braintree).  In a separate step I use the subscription creation API to create the monthly recurring charge.

My biggest struggle was in figuring out how to wrap the transparent-redirect response from Braintree in an ActiveModel-compliant object, so that when the user entered invalid data I could render the form like any other Rails form, with inline errors and so forth. I came up with a hack which I'm a little too embarrassed to post here but if you want it email me. In hindsight I should have just used this custom form builder.

Tuesday, October 18, 2011

Why I Won't Sign Your NDA

I'm mostly writing this so I can forward this link to the next person who has a cool startup idea but wants me to sign an NDA.

Here are excellent summaries of why programmers do not want to sign NDAs under normal circumstances when talking about a startup:

Speaking personally, asking for an NDA makes you appear as if your startup is more obsessed with secrecy and official process than with going out and kicking ass. It makes me think that your company is probably led by a person who does not understand hacker culture, and is not in a position to have read any of the above articles.

Also, any programmer who has a blog gets emailed all the time about startup opportunities from people who don't ask for NDAs. Why should I bother with yours? I realize some ideas are valuable and worth protecting, but given the nature of the web it's very unlikely that you alone have stumbled onto something that valuable. (It's more likely that you'll be turning a mediocre but promising idea into something super valuable after you spend some time building something cool)

Wednesday, September 21, 2011

Is making software a craft and/or an art form?

I'm leading a Betascape panel this Saturday called "Art & Code", described as "a panel of smart software creators discussing their careers and to what extent modern making software has become a craft and an art form."

This topic has been much on my mind as I contemplate how we should be training future software makers (vs. future computer scientists and software engineers). Below are the questions I will be posing to the panelists: I'd love to hear your answers in the comments! I'll incorporate anything I learn in this post into the panel, so if you think of other questions I should ask, please tack them on as well.
  • There are many metaphors out there for what we do (crafts person, artisan, engineer, scientist, etc). How do you think of yourself?
    • What aspects of making software feel like an art form to you?
    • What aspects of making software do not feel like an art form to you?
    • When you are designing or writing code, what does it feel like? Is there a performance aspect to your work?
    • What is the most valuable training you received that helps you as a designer or coder today?
    • What is the most valuable training you've experienced on your own? What's been the best self-teaching experience you've had?
    By the way, the Betascape schedule looks really awesome. You should totally plan to come to Baltimore for this, and here's how to buy a ticket!

    Saturday, September 10, 2011

    Using Goliath as an API Proxy

    I recently set up a proxy server using Goliath, a new asynchronous web server from Postrank Labs. I'm building an app that allows users to provision phone numbers from Twilio. To find numbers, I was making calls on the user's behalf to Twilio's AvailablePhoneNumber API. Since our server wasn't doing anything with the data except passing it back to the client, I wondered if it might be easier to setup a web proxy which rewrites the browser's request for data by adding private API credentials to each request, and passes the data through without doing any sort of processing.

    Then I read Gabe Weinberg's post on cool Nginx hacks where he describes this exact technique under the heading "Proxy external JSON calls". Unfortunately this app is hosted on Heroku so my solution is a little more involved than changing an Nginx config. Goliath turned out to be perfect for it, though:

    That code takes requests for Local or TollFree numbers, signs them with my Twilio credentials, and proxies the connection. I have it running on an isolated Heroku app on a separate domain from the rest of my app (since the original app is not running on Goliath) which is why I'm using the JSONP middleware (so the browser can make JSONP requests for this data, avoiding cross-site security restrictions). Twilio gives pretty good error messages in the body of its response which is why I'm returning 200 for all requests. The client can inspect the returned data to see if there were problems with the request.

    By the way the Procfile that run this code on Heroku is simply:

    web: bundle exec ruby lib/twilio.rb -sv -p $PORT -e prod

    Tuesday, August 30, 2011

    How I Would Learn Rails in 2011

    An entrepreneur friend just asked me to recommend good resources for learning how to program using Ruby on Rails. Here's what I suggested, in descending order of helpfulness:

    Tuesday, August 23, 2011

    Towards a New Paradigm for Software Education

    I posted a new essay to the OSI-Baltimore blog called Baltimore should become a software education leader:
    The term “programming” connotes an analytical discipline, something derived from mathematics or engineering, and that’s how most schools teach it: as the domain of computer science. But computer science is only a part of what software makers do. Advances in computer power have made computer science less applicable in the day-to-day work of programmers because there’s less need to keep track of “ones and zeroes.” Making software has simply become a lot more fun than you might remember if you were ever forced to study it. 
    These advances open the door for many different kinds of people to get involved in the software industry. Newcomers have launched a software craftsmanship movement addressing issues such as: how do we make something truly useful? How do we make it a joy to use? What can we learn from the worlds of art, design, psychology, typography, and architecture? Where you once had programmers thinking of themselves as scientists or engineers, you now have programmers who think of themselves as artisans.
    Poet and computer scientist Richard P. Gabriel describes a vision of how we might train programmers as craftspeople in his essay “Master of Fine Arts in Software,” in which he suggests we emphasize the creation of software as a performance instead of as a body of knowledge to master. 
    I'm very hopeful for this approach (which I also discussed a few weeks ago on WYPR's Maryland Morning) because I think it's a straightforward, exciting way to boost the number people able to compete for good jobs in the current economy. Read Marc Andreessen's recent op-ed essay "Why Software Is Eating the World" for more details on why this is going to be extremely important not just for Baltimore but for every city that wants to be economically competitive.

    Tuesday, August 9, 2011

    Open source experiment: Ignite Baltimore home page

    It's time to update and refresh the Ignite Baltimore website. As Ignite is a not-for-profit labor of love, we've tried a few different approaches over the years to having a website that looks nice and can be easily maintained (e.g. we need quality work but don't have the funds to pay for it, so we try to barter).

    I've concluded that the best way to do this, something I would recommend to anyone else running a project like this, is to make a super simple site with a few pages, with a design I can execute myself, and then link to external sites when we need specialty content. In Ignite's case, we'll be using EventBrite, Flickr, and YouTube to host all of our dynamic material. This means the site itself can focus on being a resource for things that don't change as much, like "About" and "Contact Us" and "Speaker Guidelines".

    The current prototype is here:

    I'm developing the new site out in the open on GitHub. This means anyone can contribute to the new site. If you have an improvement, please fork the project, make your changes, then send me a pull request. The repository is here:

    A note on self-reliance: I know this site doesn't look as beautiful as it could, or as it should (given the high-touch feel of the event), but I also have decided that I'm not going to let my lack of design talent stop me from building nice things. On pretty much every software project I've worked on, I've felt hamstrung by a lack of design help. I mentioned this to Gabe Weinberg who advised me to treat design like just another facet of programming to hack around, over, and through. I've decided to take him on that and focus on making things that look "good enough", and that's what I've done here.

    Thursday, July 28, 2011

    Getting SSL, Capybara, Rails 3, and Devise to work together

    I've noticed a lot of Rails blog posts recommending that you only turn SSL on in production and don't try to use it in the test or development environments. This is a monumental mistake, a lesson I learned hard in the early days of OtherInbox: SSL enforcement has a lot of subtleties and corner cases that need to be exercised and tested on a routine basis. As a quick slightly embarrasing example, we had a bug at OIB where flash messages would get swallowed during redirects. It turned out we were accidentally redirecting people to an http:// page, where the flash would be available, but our SSL enforcement code redirected them quickly to https://, and that second redirect ate the flash message. Since we couldn't reproduce the bug on our own machines it was much harder to track down than you would think.

    But I know why the bloggers recommend the naive approach though: getting SSL to work offline is a major pain! Right now I'm building a Rails app that enforces SSL on every page. It's all private data (the public-facing site is managed by a separate CMS) so I don't want any page to be accessible over http://. Below is a summary of the code changes I had to make to get this to work. I was mainly guided by this great Collective Idea blog post about Rails 3 SSL that I'd recommend you start with.

    It's not hard to get SSL working in development mode if you use an app container like Phusion Passenger. I explained how to do that a few years ago with an Apache-Mongrel setup, but the basic ideas apply.

    Update 1/31/2012: I wrote up an easy way to get SSL working with Unicorn and Pound instead of Passenger which is my new preferred way of working. Also check out the Devise wiki for more useful SSL info.

    Tuesday, July 19, 2011

    My New Gig at the Greater Baltimore Technology Council

    The Greater Baltimore Technology Council (GBTC) recently announced that I've started working with them as a volunteer "Entrepreneur-in-Residence". I've been good-naturedly teased about it a bit and had a few people ask me, "so what does that mean"? Many of my friends don't know what the GBTC is or why it's here. Here's my quick explanation.

    The GBTC is a nonprofit with a mission to help grow the technology sector here in Maryland. If you've been reading my blog for a while you know what a big deal that is to me. I love living here and I love building software, so anything that helps grow the tech sector is near and dear to my heart. The GBTC was the first organization to sponsor Ignite Baltimore, helping to get the word out for that first event, and they have been a sponsor ever since.

    Since the group was founded in the late 90's the tech sector has changed. Today almost every company is a tech company, and many technology practitioners no longer work for companies at all. More people are in business for themselves. More projects get accomplished via the "Hollywood model" of federated teams of independent contractors coming together for a fixed amount of time. Infrastructure costs have dropped rapidly, making information technology in particular far more affordable - practically free in some cases.

    The GBTC leadership is making bold plans to modernize the organization to keep pace with these changes; in fact they are poised to put the GBTC on the cutting edge of these changes, making it a dynamic organization relevant to everyone in the tech game: freelancers, entrepreneurs, small companies, big companies, local governments, education institutions, even other nonprofits.

    It's early days for this transformation, but they've already taken a very bold step: they are hiring an Innovation Community Manager, an idea I've been advocating for awhile. That person's main job will be to support the grass-roots tech organization efforts that many of us have been pursuing for years. I can't think of a more effective way for the GBTC to advance its mission.

    My job as EIR at GBTC is to help craft this transformation plan in a way that helps my fellow-entrepreneurs. My fellows include many more constituencies than simply other Internet startup people: we want the new GBTC to help everyone in the area who's trying to start something innovative. You might be working in a big company or at a struggling nonprofit, or in an established small business and looking to grow. Whatever the key ingredients for your continued success are, we want to help provide them. My role to that end will include advocacy and writing (like this blog post), attending staff meetings, giving feedback to different ideas, and generally just lending a hand to all of the GBTC's activities.

    I don't want to steal any more thunder from the cool stuff they're working on, but I do want to say as an entrepreneur it's a great learning experience for me as I watch the GBTC board and CEO Sharon Webb make a big transformation in an institution like this. It's like they are founding the group all over again while it's still operating. There are lots of stakeholders, a heritage to preserve, and uncertainty about which choices to make to ensure future success. Very similar to the sort of environment I'm in with my own venture!

    Wednesday, July 13, 2011

    Notes on Generating Good Ideas

    I'm giving a talk today at Think Big Baltimore called "Generating Good Ideas". Here are the links I refer to in the talk:

    Below are the slides I'll be using. My main point is that I've never had luck sitting down trying to have ideas. They always occur to me incidentally while doing something else. I recommend some specific things that have worked for me or that I've read have worked for others to help that process occur more regularly. The most effective technique for me personally has been to write every little idea down, no matter how frivolous or unlikely it is that I'll ever do it. I feel like when I do that I'm "honoring my muse" and taking my creative impulses seriously. I can't prove it but I think doing this has helped me increase the number of ideas I get.

    Wednesday, July 6, 2011

    Should we all move to Silicon Valley?

    I keep thinking about this exit interview that Brian Sierakowski did with Paul Capestany, who is leaving Baltimore to move to San Francisco (joining the likes of other smart former Baltimore/Maryland transplants Patti Chan, Clarence Wooten, Paul Singh, Jared Goralnick, and others). He wants to start a high-risk/high-reward consumer Internet company.

    I respect Paul and count him a friend. He's done a lot for the cause of entrepreneurship in the city and we all owe him our thanks! I wish him luck. And I can really understand where he's coming from. San Francisco is a cool place for web entrepreneurs to be.

    All things being equal, if Paul's dream is to start a big, risky consumer Internet company, he may have an edge by starting it in San Francisco. If you're in a smaller, less-connected city like Baltimore competing head to head with a company based there, you may be at a serious disadvantage (Paul Graham makes the point in an essay about startup hubs).

    But are all things equal? Let's break it down.

    People in San Francisco Are More Risk-Tolerant

    Paul says he can't find enough risk-takers here, but is the talent hunt any easier out there? I assume the main types of people he needs are technical cofounders and designers willing to work for equity in lieu of cash. Those are in short supply across the world, no more so than in San Francisco. Here are two anecdotes:
    1. I recently had a vivid conversation with someone starting a company in San Francisco with every advantage you can think of: prominent name-brand angel investors, a beautiful downtown office space, cutting-edge technology, early traction, etc. But this person had interviewed over and a hundred people so far and could not find anyone skilled willing to work for part equity and part salary. Pretty much every day you can find an article on tech blogs about the crazy salaries that startups and established companies are throwing at web practitioners. Competition for talent is fierce. And since all you really need for most ideas is one smart, hard-working coder,  I wonder what the real odds are for finding such a person out there vs. somewhere in Maryland where the community is more close-knit.
    2. I've worked with well-respected, experienced entrepreneurs who have sold multiple companies here in Baltimore and in Austin. Despite their track records, rich network of connections, and geographic advantages, they've still had to work hard to secure investment and find talented developers. My point is that all of the problems outlined in Paul's interview are going to exist in any city, even for proven entrepreneurs. If being in Silicon Valley makes those problems 5% more tractable, maybe that's a worthwhile edge to have. But is it really 5%? Who knows? 
    Also, no matter where you live you can still get people to build your prototype for not much cash. There's a lot you can do absent a cofounder to develop and test your ideas in the marketplace. See Sivers and Freedman.

    It's also worth pointing out that successful Internet companies get built all the time that are based elsewhere. 37signals, LivingSocial, BillMeLater, OtherInbox, Etsy,, OpenDNS,, and Millenial Media are a few that jump out at me without thought.
    Investors in San Francisco Are More Risk Tolerant

    I'm sure this is true, if only because they have more experience with startups and risk. Yet I wonder if it's really relevant. Starting a web company and getting it to the point where your business model is proven, is practically free. Growing a company from that point ("scaling it" in startup parlance) is what costs real money, and it seems vastly easier to raise money for growth than for starting from scratch, especially in the era of AngelList. And mid-Atlantic companies with traction and have real growth prospects can definitely raise money: in our own backyard, LivingSocial, AwayFind, and Shortmail have raised plenty of money from around the country. Locally, I got to meet a lot of angel investors while I was helping fundraise for Startup City, and I found some of them were quite risk-tolerant and ready to commit to funding us on the spot.

    Believe me, I've been there

    I hope it doesn't seem like I'm picking on Paul or others who have made that choice. I've never felt the urge to move to San Francisco but I was oft-tempted to move to Austin when I was working full-time on OtherInbox. Paul is right that there's something extremely stimulating about being around people who care about the same things you do and have the same imagination you do. It's just not mainstream (yet) for people to be starting companies and (especially as a man) it can be difficult to make friends with people lacking the same obsessive dream. It's just a really nice thing to have in common with your friends.

    This may be the most decisive factor making people want to move. We imagine that every coffeeshop we walk into over there will be like the hallway track at SXSW. I know I've dreamed that dream! I once sent Dave Troy a distressed email while sitting in my office in Austin, in a moment of particular geographic jealousy, whose contents were pretty close to Paul's exit interview. I wish I could find Dave's response but it was basically what he later wrote in this post: "Being in 'a' place is more important than being in 'the' place". I take great comfort from that thought. I sometimes fear I've become an apologist for Baltimore, a storied, troubled city to be sure but a place which needs no apology. It's a place in a way that Silicon Valley never can be (have you ever met anyone who grew up there or lived there for their whole lives?). Baltimore has changed me in a million ways, becoming a part of me and I part of it; I'm supported by wonderful friends and family, as well as professional colleagues who form a great (albeit small) community of innovators. That's a huge asset, a massive competitive advantage, one that I was undervaluing until I wrote this essay.

    What is your actual goal?

    If your goal is to build and own a thriving business producing an awesome, innovative software product that helps helps the world, while building wealth for your family, your employees, your investors, and your community, then I think you absolutely do not need to move from wherever you're living. You just need to think about what sorts of businesses are going to work in your town. There are many, many niches out there that you can dominate without being in California. I would look for unsexy, comfortable industries in your area where there are many competitors but little competition.

    I wish everyone thinking about moving to the Valley could spend some time with my friend Chris Ashworth here in Baltimore. In terms of personal happiness, self-actualization, and all-around awesome lifestyle, he's by far the most successful entrepreneur I know. He started Figure53, a wonderful company that makes software for sound designers used in theaters around the world, including Broadway and the Olympics. He makes a good living at it, employs six people, and is very obviously having a great time.

    If you absolutely are committed to starting a consumer Internet company I can see the argument for moving to San Francisco, but I would carefully examine your assumptions about what's going to be easier and harder for you when you get there. I personally would try and launch the company right where I am, because when you demonstrate traction you'll have a much easier time solving the "talent + investment" problem in whatever city you're in. People will start seeking you out!

    I do think there's a lot to be said for living in a city, any city, because of the intangible benefits that accrue from density (well explored in the book "Where Good Ideas Come From"). You get better ideas if you're mixing with smart people regularly. Here in Baltimore there are a ton of meetups; tons of people with web and mobile and design skills; and tons of companies that make great money using Internet technology. I'm sure most cities are like that.

    Good luck!

    Paul is a super smart, charismatic guy who is going to be a big success wherever he goes. This essay wasn't meant to try and talk him out of it; I only meant to explore his very understandable motives in light of my own decision to stay put.  I'm sorry to see him go, and I hope someday he and I are sitting on the boards of each other's companies! In the meantime if anyone in San Francisco reads this blog, you better get in touch with this guy now before he gets too connected to have time for you!

    Friday, July 1, 2011

    Update On the New Company I'm Starting

    Back in January I announced my plans to start a new company. I had a lot of nice people contact me to wish me luck or to propose collaborations, so in case anyone is interested, here's how things have been going!

    I spent a lot of time brainstorming various business ideas. One of the best things I did was take a train up to Pennsylvania to meet with one of my role models, angel investor and renaissance hacker Gabriel Weinberg. He strongly encouraged me to pursue the solo founder route and also helped me narrow down my list of ideas to 3-4 stronger candidates. He also really encouraged me to start building things, one after another, and keep learning: this process would very likely lead me to an interesting business (vs. trying to create an elaborate business plan and sink years into just one product). I also had several people pitch me on their own cool ideas.

    By the end of this process I was overwhelmed! I was really surprised by what helped: I made a mind map of all the things I was considering working on. Forcing myself to create a visual taxonomy of ideas made something very clear which I had not been conscious of. I learned that I'm only interested in building products where:
    • I can charge money up front (vs. things that depend on advertising at scale) 
    • There's a chance to learn about new technology, or challenge my technical skills in some way
    • The problem I'm solving is something I can be passionate about
    Those are super obvious criteria but I had not laid them out ahead of time, and I had put too much emphasis on the first one at the expense of the last one. Now I think all three are of equal importance.

    I spent a couple of months working seriously on two of my ideas. One of them I bailed out on after realizing I didn't care enough about the problem. The second one I have postponed for awhile, because it's a video game, something very cool that I haven't seen elsewhere in the market, but I'm not sure how interested I am in the games industry. The game was very exciting to work on because of the technology involved (I used all kinds of awesome HTML5 goodness like the ImpactJS engine and websockets, and created a RailsConf tutorial based on what I learned, which someone translated into Russian!). But I was less enthusiastic about the product as a full-fledged business.

    A couple of months ago I met Tom Ainsley, an entrepreneur based out of Baltimore's Emerging Technology Center (ETC). We became friendly through various tech networking events like Ignite Baltimore, and also because we're both members of the ETC's ambassador council. He had a great idea for a product that hit all three of my criteria. I don't want to say what it is yet, not because I believe in keeping ideas secret or staying in stealth mode, but because I want to have the business fully up and running for awhile before we publicly launch it. Whatever minimal "social media juice" I have I want to save for that day! Check out "Don't Launch" for an explanation of this strategy.

    Besides thinking it was a good idea, Tom brought something to the table that almost nobody in his position does: he had already had a contractor build a prototype, and he already had paying customers for that prototype. Most people who pitch new web business ideas to potential cofounders or to angel investors have not put any capital into their idea (like Tom did when he hired that contractor) and as such they don't seem very "for real". Also, many have a lot of unexamined assumptions about how the idea will make money (something that's very obvious for Tom's product).

    You can create the "Tom effect" for yourself without spending a lot of money, by the way. I recommend you outsource development of your prototype idea using Derek Siver's excellent guide. You might also consider teaching yourself to code something. Either one of these things is a way to prove you are "for real". Here's more advice about how to "earn a cofounder".

    Tom and I spent some time discussing the idea and getting to know one another over beers at the Charles Village Pub, and eventually we decided to go into business together! I'm rebuilding his prototype as a minimum-viable product now, using Rails and running everything on Heroku's awesome new Celadon Cedar stack. I don't want to say more about the product right now publicly, but if you meet me in person I'd be glad to give you more details!

    I'd still like to try being a solo founder some day, but in this process I've learned something very important: as passionate as I am about all facets of entrepreneurship, I'm most interested in technology development. What gets me most excited and engaged is using technology to build things that solve real problems. So for now I'd like to specialize in being a CTO/technical co-founder. That seems to be a sweet spot for me. I'm grateful to have teamed up with a talented businessperson like Tom so I can focus on the most personally meaningful work.

    I will be posting more regular updates as things progress, so stay tuned!

    Wednesday, June 29, 2011

    Ideas for making cities more innovative and fun

    A few weeks ago I spoke about ideas for making Baltimore a more innovative and fun place. My thesis was that we should be placing a whole lot of "small bets" that would benefit residents of the city instead of investing in mega one-off projects intended to attract itinerant visitors.

    Tuesday, June 21, 2011

    Computing Broadcast Calendar Dates in Ruby

    While building a new product I discovered that broadcast advertisers use a special broadcast calendar to normalize advertising schedules. Each month starts on a Monday. I made an tiny open source Ruby gem called broadcast_calendar to compute the Gregorian/civil dates for broadcast months:

    gem install broadcast_calendar
    > BroadcastCalendar.dates_for(5,2011)
    => Mon, 25 Apr 2011..Sun, 29 May 2011

    I also found a list of pre-printed broadcast calendar dates.

    Wednesday, June 8, 2011

    Gemfile for Rails 3.x Greenfield

    I just started building a new product, and wanted to document my tools of choice in the Gemfile below. I also like to use use Rails Wizard to generate some of the configuration stuff (like making sure generators use Rspec instead of Test::Unit). Normally I would also lock the Rails gems to specific versions but I've been trying this app out with Rails 3.1rc1 so it's easier to let those dependencies float for now.

    I'm using 'thin' here because I'm running this on Heroku's new Celadon Cedar stack where you need to bring your own app container (unless you want to use WEBrick).

    # gems needed by Rails
    gem 'rails', '3.0.8'
    gem 'pg'
    gem 'sass'
    gem 'coffee-script'
    gem 'uglifier'
    gem 'jquery-rails'
    # application gems
    gem 'thin', '1.2.11'
    gem "haml", "3.1.1"
    gem "haml-rails", "0.3.4"
    gem 'formtastic', "1.2.4"
    gem "foreigner", "1.0.3"
    gem "dim", "1.0.0"
    gem "authlogic", "3.0.3"
    group :development do
      gem "annotate"
    group :test do
      gem "rb-fsevent", "0.4.0"
      gem "growl", "1.0.3"
      gem "guard-spork", "0.2.0"
      gem "guard-rspec", "0.4.0"
      gem "shoulda-matchers", "1.0.0.beta2"
      gem "capybara", "1.0.0.rc1"
      gem "launchy", "0.4.0"
      gem "timecop", "0.3.5"
    group :development, :test do
      gem "rspec-rails", "2.6.1"
      gem "silent-postgres", "0.0.8"
      gem "factory_girl_rails", "1.0.1"

    Friday, June 3, 2011

    The Ontology of Unknowability

    I just started reading a great book called The Cybernetic Brain with this great passage from the opening chapters:
    One could say that the modern sciences stage for us a modern ontology of the world as a knowable and representable place. And, at the same time, the product of the modern sciences, scientific knowledge itself, enforces this vision. Theoretical physics tells us about the unvarying properties of hidden entities like quarks or strings and is silent about the performances of scientists, instruments, and nature from which such representations emerge...the performative aspects of our being are unrepresentable in the idiom of the modern sciences...
    Cybernetics...was the science of exceedingly complex systems that modern science can never quite grasp...This is the aspect of cybernetics that interests me most: the aspect that assumes an ontology of unknowability, as one might call it, and tries to address the problematic of getting along performatively with systems that can always surprise us...
    I keep running into ideas about the limits on human knowledge in much of my reading. It's become my favorite topic to think about, and I'm always delighted to see it crop up somewhere new. I love the notion that something I grew up thinking unconsciously, a totally unexamined assumption, has been so upended: the notion that science can in theory provide all the answers. I guess I used to think that if we had enough resources to do a "Manhattan Project" on every human problem, we could solve them all. I'm perceiving there's another way to view the world, one that is hopeful and capable, but one that is more realistic about what we can figure out for ourselves. It sounds like cybernetics is or was the science of people trying to work with these limits instead of against them, to get things done in the real world; it has a dark reputation for its contributions to things like cruise missile technology, but the science has many nonmilitary applications and in fact grew out of psychiatry!

    Here's a quick reading list of where I've confronted ideas about unknowability and fallibility, in case this interests you, too:

    • Godel, Escher, Bach: this is an amazing, complicated book treating a number of subjects, but it explains Godel's Theorems, and generalizes from the mathematical results to suggest that certain truths in the universe probably are unprovable (even though they are true).
    • Thinking in Systems: complex systems cause their own behavior. No one is really in charge of anything and seemingly common-sense simple solutions can have disastrous outcomes because of the essential nature of systems. Feedback loops are much more important than we'd like to think.
    • The Black Swan: we think unusual events are predictable, or avoidable, and we think that human history is driven by measurable, understandable processes that can be rendered into narratives. This author argues that in reality extreme events (black swans) are responsible for much of why things are the way they are.
    • Omnivore's Dilemma and Primal Blueprint: nutrition as a science has failed us because it reduces a complex entity, food, to the most base macronutrients. As a result we treat proteins, carbs, and fats as holy quantities that need to be measured and controlled, simply because we CAN measure and control them, without much concern for the context in which they are consumed. Both of those books point to alternative, less stressful ways of consuming food to be more healthy and less obsessed. Come to think of it, I'd say the latter book, with its discussion of food epigenetics, is a very cybernetic book!
    • Tyler Cowen's TEDxMidAtlantic talk: the human need to package everything as a story (particularly as a good vs evil story) can be extremely limiting in imagining real solutions to problems.
    • Path Dependence in Rocketry: rocketry is stuck on a path laid out in World War II. We would never build space technology from scratch the way we are doing it now, but it's pretty much impossible for us to ever modernize how we launch rockets due to the phenomenon of path dependence. e.g. rocket science is not really evolving even if we all would like it to. We're stuck.
    • The Selfish Gene: Natural selection does not operate the way you think it does (at the species or the population level); instead it operates at the level of individual genes or groups of genes.
    • The Annotated Turing: explains the halting problem which limits what we can ever hope to compute.
    • Antikythera mechanism: this ancient clock reveals that early civilizations had much better technology and achieved much greater knowledge, including rudimentary calculus, than we had assumed. Read this to make sure you don't get overarrogant about Western or 20th century achievements. Everything old is new. Humans had calculus way back when, and lost it for many centuries: what could we lose today? 
    • The Elegant Universe: quantum mechanics has disturbing implications for what the true nature of reality is. String theory makes pretty wild predictions that seem like they might be accurate, but we'll probably never be able to prove them because the task would involve massive, impossible amounts of energy. The archetypal example of human cognition exceeding human know-how.