usable in any place a human can be used

20091217

bing and what?

[caption id="attachment_432" align="alignright" width="300" caption="look a bird, now I\'m deciding I guess"]look a bird, now I'm deciding I guess[/caption]

I keep seeing commercials on TV, I'm sure you have to, where there is one person and another person asks them a question, the commercial then goes something like this:



  • Normal Person: Hey want to get lunch

  • Freakazoid: Lunch from the latin luncha for eating during the daytime

  • Normal Person: Huh?

  • Freakazoid: Oklahoma abbreviation OK, OOOOOOklahoma where the wind goes...

  • Normal Person: I said "huh?" not "ok?" you stupid fuck


These terrible abortions have been shoved onto the world by Microsoft to promote bing. The idea here is that using Google / Yahoo / etc. causes such a delude of useless results that querying a normal search engine is like talking to the freak from our vignette. The alternative bing is a decision engine and by using that you can "stop searching, start deciding".


First off for full disclosure, I'm not the biggest fan of Microsoft, I think they make expensive sub-par software. On the other hand though, I program in .Net and work in XP and Vista everyday, I also own a Mac and have ubuntu installed at home. I use Microsoft products, there are some that I even like, but their corporate culture and quality control bugs me. If you want to write a snarky comment about me being a linux-head or a mac-fanboy or a windoze-m$-hater, feel free to.


The whole "Decision Engine" thing is what pisses in my Corn Flakes, its such nothing market-speak. They synergized outside the box with a shifted paradigm to come up with Decision Engine. Here is the thing though, what the fuck does it mean? Does it mean that it will make decisions for me, is it a big step forward in finding stuff on the internet? So I decided to do a completely scientific comparison of bing and google.


The first step in this was searching the term "ok" as this is the most annoying example from the bing commercial. Here are my completely scientific results.










bing [caption id="attachment_434" align="alignnone" width="300" caption="bing search of ok"]bing search of ok[/caption]
google [caption id="attachment_435" align="alignnone" width="300" caption="google search of ok"]google search of ok[/caption]

Bing's first result is for Oklahoma! Think about that for a second, and now here it is again because it bears repeating, BING'S FIRST FUCKING RESULT IS THAT OK IS AN ABBREVIATION FOR FUCKING OKLAHOMA! You'd think after the commercial they would have thrown something into their indexing algorithm. Google correctly points me to a wiki article about the term "okay" before suggesting Oklahoma. But let's move past the obvious and focus on the fact that besides bing fulfilling their own prophecy, what about bing helps me decide? Nothing, they are the same page layout, they are the same thing, they do the same fucking thing.


But what is there to decide, maybe this is user error, maybe I should ask it something it could actually answer. I want chinese food for dinner, let's see what happens when I search bing and google for "chinese food near me" (note: I made sure to sign out of each so that neither would have an advantage knowing my location from an account).











bing [caption id="attachment_438" align="alignnone" width="300" caption="bing search for \"chinese food near me\""]bing search for "chinese food near me"[/caption]
google [caption id="attachment_439" align="alignnone" width="300" caption="google search for \"chinese food near me\""]google search for "chinese food near me"[/caption]

Here Google clearly wins, Bing thinks I want to know about chinese food in Maine (ME) and proceeds to tell me all about it. Google makes the same mistake but then also uses some google magic to determine that I live in Columbus, OH and provides some chinese food that is actually in this state.


I don't want this to turn into a who's better at this query or that query type thing. Let's take a step back and look at the bigger picture, bing doesn't help you decide, it is a search engine. And that's the whole point of this post, fuck your market-speak Microsoft. Don't obfuscate, innovate. If you want to take down Google go spend some of your money to design something that is actually better. Bing as it stands today is a moderately effective search engine with pretty pictures, nothing more.


There is plenty of room to innovate, there are things people could do to help me make decisions, but Bing doesn't do any of this. Search engines could start leveraging social networking information to understand the person that I am and tailor my results, they could allow the end-user to vote results up and down for a query so that the group prunes the result set, they could do some research and development and come up with something that would blow my mind.


The problem with Bing isn't that its not a good search engine, its that its not a good decision engine, its not any kind of decision engine, its a fucking search engine. Microsoft is famous for and probably makes a ton of money off of sprinkling marketing fairy dust on their shitty shitty products, so they won't stop, it just pisses me the fuck off. Stop with your dumb commercials with annoying fucks rambling like idiots because you've completely revolutionized searching and you no longer present results in a big list sorted by your concept of relevance, until you actually revolutionize searching, like Google did with their pagerank algorithm.

20091216

making a sandwich

[caption id="attachment_418" align="alignright" width="237" caption="sam waterston is getting ready to rip your still beating heart from your chest, then he's going to go do some lawyer stuff"]sam waterston is getting ready to rip your still beating heart from your chest, then he's going to go do some lawyer stuff[/caption]

Disclaimer: I am not a lawyer, I don't even pretend to be one, except after watching law & order marathons where I shout "I object!!" at people and that one time I asked my girlfriend if I could treat my dog Harvey as a hostile witness in the case of me vs. whoever pooped on the floor.


I want you to close your eyes (but don't actually because then you can't read this). Imagine a world, a terrible world much like the one we live in, but lacking a certain invention, the sandwich. A time-traveling goat went back in time to the 18th Century and decided to kick John Montagu straight in the temple before he could ever ask for "meat tucked between two pieces of bread." The world never got the grand invention of the sandwich, humanity's suffering was unbearable.


Then one day as I'm eating a large pile of cold cuts while blogging and I notice that my fingers, slick with deli meat residue, keep slipping off the keys and the hilarious and witty things I wish to share are being turned into unreadable drivel. Spying the bread I keep handy to fend off attack from a flock of pigeons, the feathered rats of the sky, I have a sudden moment of inspiration. I place some bologna between two pieces of white bread and invent, the sandwich!


Being an enterprising young man I decide that this "sandwich" I've invented is quite the big deal, I decide that I should patent it and live the rest of my days fat and happy off the profit. I write up the vaguely named "Methodology for encasement of edible substances within grain derived substrate" and submit it to the US Patent Office. Then I show family and friends alike the delicious culinary brilliance that is me and my new "sandwich" to hearty congratulations and spontaneous ticker tape parades.


Then the darkness comes, swift in the night like a badger attempting to steal your young. An evil so despised that merely typing his name brings a cold sweat to my brow and a burning desire to my punch-him-in-the-face-center of my brain. Jared Fogle.


[caption id="attachment_420" align="alignleft" width="238" caption="his evil can not be contained"]his evil can not be contained[/caption]

Mr. Fogle decides that this sandwich is big money and so takes my idea and open up a sandwich shop where people can buy a foot long sub sandwhich for $5. He begins pulling in big bucks, soon others join in on the fun and profit, Wendy's starts putting their signature square patties between buns, McDonald's hamburg style hand-steaks become "hamburgers" with the addition of a bun, even chipotle starts packing their rice and meat piles in a wrap they call a tortilla. The last straw though is one day, walking down the street, I encounter a young child skipping off to school, after roughing him up and taking his lunch, what do I find?!? A Peanut Butter & Jelly sandwich!?!?! Where is my royalty check you freckled bastard?!


"I invented the sandwich!!" I scream in my head, and then out-loud to the young lad's startled mother. With a "harumph" I head back to my home, stewing with anger. When I arrive I find a letter from the US Patent Office, after 4 long years of waiting, my patent, "Methodology for encasement of edible substances within grain derived substrate" has been approved. A low rumble of laughter begins deep in my belly and it becomes a diabolical cackle emanating with an other-worldly resonance from my maniacal grin, as I pull out my cell phone and begin to dial my lawyer.


[caption id="attachment_422" align="alignright" width="199" caption="PB & Patent Infrigement"]PB & Patent Infrigement[/caption]

The lawsuit with Mr. Fogle's Subway sandwich shop is long and arduous, but thanks to East Texas' interesting take on justice and patents, I'm awarded a $500 million settlement. Arguments abound about how there is prior work and talk of inevitable discovery. These are swept aside in a tidal wave of lawsuits, Wendy's, McDonald's, Chipotle, even that freckled young lad. I begin handing out subpoenas like Tiger Woods picks up women, anytime, anyplace (zing!). My team of high powered lawyers are figuring out ways to sue people I hadn't even dreamed of, I guess a pizza is just an open faced sandwich, sue away my pretties!


My madness grows as I become obsessed with everyone that has ever eaten a sandwich, couldn't they see my brilliance, where are my residuals!? The populace rightly decides that I am a douche bag and I'm roundly mocked on the late night circuit. This darkens my cold heart into a black pit of vengeance, sandwich vengeance. People are wary of making sandwiches at home, what liability have they opened themselves up to? No one can rightly answer, "experts" abound on the internets claiming this or that, but the murky waters are indecipherable. The Patent Office is challenged, people roundly criticize them for allowing someone to patent such a vague and wide reaching concept. They review the patent and decide that it is in fact a fine and upstanding patent, one worthy of their seal of approval.


The nightmare of a world without sandwiches has been replaced by the new nightmare of a world where I control sandwiches.




Thank goodness though that this is not the world we live in, that such insanity would never happen in this day. Oh, fuck

20091215

plain stupid

[caption id="attachment_409" align="alignright" width="136" caption="typical dumbass"]typical dumbass[/caption]

Are you a dumbass? It's an important question to ask yourself every once and a while, especially if you want people to put their trust in you. This has been brought up because of a service called RockYou that recently exposed 32,603,388 plaintext passwords. Then it got even worse when it was confirmed that RockYou was also storing 3rd party passwords, again in plaintext.


Passwords are a tricky thing to store, RockYou clearly never got the memo. I've been at this whole "writing software thing" for a while and I've gone through my own personal journey of discovery about vulnerabilities and best practices. Let's walk through that now



  • Plaintext - This is the first stage, the one that RockYou never left apparently. It is the simplest to implement, take the password, shove it in the DB. Need to check against the password, if(input == password) and done! If you don't see the problem with storing your passwords plaintext, go to the nearest hard surface and slam your head into it over and over again, you no longer need cognitive functions.

  • MD5 Hashes - This is generally the second stage of password discovery. Many languages have a nice built-in function, php does. Store that MD5 hash and you get that warm fuzzy feeling in your tummy that you aren't storing things in plaintext. The problem now is that MD5 has well known weaknesses that can be exploited. Rainbow tables provide an attack vector and reverse look-up tools opens up a ton of exposure.

  • Salty passwords.... delicious - Your users are probably going to pick awful passwords, even if you have a password policy its probably going to end up "password1" You can't rely on them to provide strong passwords, so you can do the next best thing, make it strong for them. Static salting is the act of adding predictable data to a password before hashing. Maybe you append the string "Matt~is~the~best~programmer~7829" before hashing the string. This will defeat most reverse lookup tools (as very few people have bothered hashing "Matt~is~the~best~programmer~7829password1" and putting it into a database of reverse lookups) The problem is you are still open to dictionary and rainbow table attacks. If your database is compromised there is a chance that your source could be compromised as well, and then that string sitting in some configuration file is the key that unlocks everyone's password.

  • Dynamic Salt... deliciously nerdy - Instead of having a static string you can create some dynamic salt. When a user want to store a password, generate some dynamic salt, combine it with the password, hash, mangle, and store. Now every hash is a puzzle, security in layers.

  • Non-trivial calculation times - The problem with MD5 is that its too quick. Use a more complex hashing algorithm like SHA-1 or SHA-256, perform data mangling and multiple encryption sweeps so that turning a plaintext password into a hash you store takes some non-trivial amount of computation time. What's the point of this? It may add 1 second to saving and comparing hashes for you which is normally negligible in terms of user experience. The advantage comes from defending against a brute-force attack where the attacker has to generate millions of hashes. Will Bond does an excellent job outlining this in the rational of the fCryptography class in Flourish.

  • Timeouts - The normal user will have to enter a password once maybe twice if they fat-finger it. Using a quadratic-growth timeout system can help prevent brute-force attacks, or at least slow them way down. A brute-force attack relies on the ability to quickly cycle through thousands if not millions of passwords in an attempt to find the correct one. Let's take a look at how quadratic-growth timeouts defeat this system. Each attempt has a timeout twice as much as the timeout that preceded it, we will start with a timeout value of 1 second.

    • 1st Brute-Force attempt fails server let's the person retry, but they must wait 1 second.

    • 2nd attempt fails, retry in 2 seconds.

    • 3rd attempt fails, retry in 4 seconds.

    • 4th attempt fails, retry in 8 seconds.

    • 5th attempt fails, retry in 16 seconds.

    • ...

    • 10th attempt fails, retry in 512 seconds. (8 and a halfish minutes).

    • ...

    • 20th attempt fails, retry in 524288 seconds (8738 minutes or 145 hours or 6 days)


    Most users will never experience more that 3 seconds of timeout, a cracker would have to wait 35,702,051 years to attempt 50 passwords.


Storing passwords correctly and defending against brute-force attacks is non-trivial. It's one of those things that people a lot smarter than you or I have spent a lot of time thinking about. In a former life I was a mathematician (sometimes I fancy that I still am), I have had the pleasure of picking up a book on formal cryptography, getting about 2 chapters in, and setting it down with a headache. There are a lot of great libraries out there to do this stuff for you if you are too lazy to take the time to do it right yourself.


For php there is Will Bond's fCryptography, for perl there is Crypt (I'm not a perl person so anyone is more than welcome to provide a better alternative), for any language there is normally a high quality cryptography library. If you are not using them, then you are simply being lazy.


Of course you could side-step the whole issue and let someone else do your dirty work. Its all a symptom of a problem that Mozilla Labs is trying to solve, the concept of identity on the web. I think the future will be the browser being the trusted agent instead of third-party websites, but until then we have to be responsible software developers.

20091214

web development today

[caption id="attachment_402" align="alignright" width="128" caption="the internet is so shiny these days"]the internet is so shiny these days[/caption]

I've been playing with my new iMac all weekend and am getting it set-up to start doing development. I'm a web developer by trade, but a systems developer by education. First let me give you some quick background



  • I went to BGSU where we were taught mainly C++

  • At University I worked for ResTech developing and maintaining an Intranet written in PHP

  • My current side-project is prosper a database abstraction layer written in PHP

  • After graduation I went to work for HMB


    • I've worked on 2 projects that were ASP.net

    • I slung Java for Abercrombie & Fitch for just over a year, doing some web frontend and middleware

    • Current project is doing some Java middleware



So my experiences are mostly C-style languages, but I have dabbled from time to time in other languages, ruby, python, haskell, erlang, sql (much more than I would like to with prosper), etc. Being on a new platform though makes you wonder about what makes it tick, I don't particularly have to wonder though as I read Apple's excellent documentation (PDF warning) a few years ago. My subconscious has been mulling over Objective-C development, which looks somewhat interesting, but it has brought up an old friend I was interested in a while ago Objective-J.


A while back I had heard about Cappuccino and the language that powers it, Objective-J. I remember thinking at first how crazy the whole thing was, someone didn't want to bother learning JavaScript so they found a way to make Objective-C compile down to JavaScript. This concern was assuaged some when I read this arstechnica article and realized that anyone skilled enough to write a compiler in JavaScript had to have some vague understanding of its workings. The design decisions behind making Objective-J were sound, they didn't just think my love was ugly.


I've been giving a new look at some of these new web development toolkits, platforms, libraries, etc. They promise to bring desktop quality applications to the web leveraging existing technology. And there are a few I would like to bring to everyone's attention.




    [caption id="attachment_396" align="alignright" width="150" caption="Cappuccino"]Cappuccino[/caption]

  • Cappuccino and Objective-J - Its hard to talk about one with the other. Objective-J is a brand new language for client-side scripting in the web. It compiles down to cross platform JavaScript on the client-side and is used to power cool stuff like 280slides and EnStore. One of the best things about Cappuccino and Objective-J is that they remove the burden of implementation. Is the display made up of input elements, divs, one big canvas? Don't worry about it, that's Objective-J's job to figure out the best way to display things in a given browser. Cappuccino provides a great framework to write web applications in, anyone familiar with Cocoa will feel at home. The biggest downside I can find for Objective-J is its verbosity, but maybe Atlas will help with that


  • [caption id="attachment_395" align="alignright" width="150" caption="SproutCore"]SproutCore[/caption]

  • SproutCore - SproutCore got a ton of press when Apple's MobileMe decided to use it as a foundation for their relaunch. A nod from a big player like Apple can help set aside fears that it isn't ready for primetime. Right now SproutCore is gearing up for their 1.0 release, its still in beta but they've been making great strides as of late. SproutCore is maturing quickly and has some core goals I can get behind: Be easy. Be consistent. Be opinionated. Stay small(ish). When working with SproutCore you will write code in JavaScript and also use a host of command-line tools (à la Rails).


  • [caption id="attachment_397" align="alignright" width="100" caption="GWT 2.0"]GWT 2.0[/caption]

  • Google Web Toolkit - GWT has a lot of good stuff going for it. It's made by Google (they might know a thing or two about the web), it just hit version 2.0, its the juice powering stuff like GMail and the new Google Wave. With GWT you write your code in Java which then get compiled into fast and cross-browser JavaScript. Ray Cromwell has an amazing write-up of all the new cool stuff in the 2.0 release.


All of these frameworks allow you to create a fully functioning web application without mucking with the guts of the web (HTML, CSS, JavaScript). This is a double-edged sword though.

The up side is that if you already know Objective-C or Java then your learning curve is drastically reduced. As technology changes the library can output the latest and greatest HTML without you having to change any code (hopefully). The Google Wave team has said, you can create much more complex applications leveraging the power of these frameworks.


The down side is that you are spending time and energy learning a framework and not web development. If you learn SproutCore backwards and forwards that doesn't transfer to Objective-J or GWT. The other downside of this is it introduces some magic, if you don't understand the foundations of HTML and JavaScript it can be far more difficult or impossible to fix errors. A corollary of that last point is that applications look similar, Objective-J apps look like Objective-J apps, GWT looks like GWT, it doesn't have to but when the default styling is sufficient or, as is the case with many of these frameworks, actually looks nice, its easy to just keep the default.


Web development keeps moving forward, this internet thing is going to be big. As we move more data to the cloud, as Operating Systems become more Web Centric, and as more and more of our lives our spent looking at the web, these development frameworks will become more and more important. It's an interesting time to take a look at some new takes on web development

20091211

shiny new toy

[caption id="attachment_389" align="alignright" width="214" caption="it cuts the roof of your mouth so the chemicals can get into your bloodstream faster"]it cuts the roof of your mouth so the chemicals can get into your bloodstream faster[/caption]

I took a half-day today, got to sit at home this morning waiting for the Fedex man (who turned out to be a woman). A few weeks ago I got the go ahead from my company to buy an iMac for home (HMB has a program where they will pay for half of your hardware purchase, because they are an amazing company). I got the news yesterday via fedex that my package had arrived overnight from Shanghai in beautiful Anchorage. I was told that the delivery would arrive this morning, asked for a half-day off, and this morning leisurely enjoyed a bowl of Peanut Butter Crunch.


Then I heard the thump thump thump of someone climbing the stairs outside of my apartment and a knock on my door. After subduing my dog Harvey I opened the door, signed the Fedex pad, and took a giant heavy package inside my house. The size of the box blew me away at first, here are the specs of my new iMac.



  • 27in Aluminum iMac

  • 2.8GHz Quad Core Intel Core i7

  • 8GB 1066MHz DDR3 SDRAM

  • 1TB Serial ATA Drive

  • ATI Radeon HD 4850 512MB Video Card

  • 8x double-layer SuperDrive

  • Magic Mouse

  • Wireless Keyboard


Now I have played with Macs before, I've spent countless minutes over the last month or two at BestBuy goofing around with the 27in iMac there. I thought I was prepared for how large this beast is, but I was not. It's a heavy machine and it is ginormous. The packaging was simple, effective, and beautiful. I had it up and running in about 10 minutes, and most of that time was moving stuff off my desk to make room. A little while back I had purchased a cheap opened-item (although very nice) 22in Velocity Micro Monitor (similar to this one but not identical). When I brought it home I thought it was huge, it looks Lilliputian next to this hulking behemoth.


There have been some reports of the i7 showing up DOA. I'm lucky enough to have not had this happen, my iMac is pretty and working. I turned on the power, answered some questions, and watching "Welcome" fly at my face in multiple languages for a few minutes, and it was up and running.


The Good



  • This screen is huge and beautiful, plenty of real estate to take on the job of 2 (maybe even 3) physical monitors

  • The wireless keyboard and mighty mouse were pre-synced with the computer and worked right off the bat

  • The Apple Remote synced nicely (after I reread the syncing part of the manual and saw the phrase "menu and right button" instead of just "right button")

  • I can now retire my Acer tower to be a HTPC (It's a little big but I have a cabinet it will fit nicely in)

  • The wireless keyboard is a joy to type on

  • Opened a terminal and typed ruby --version, it replied with 1.8.7 instead of " 'ruby' is not recognized as an internal or external command, operable program or batch file."

The Bad



  • After syncing my remote I couldn't get it to do anything, I tried controlling a DVD with it to no avail.

  • I only took a half day instead of the whole day off so I can't play with its beauty right now

  • I took some great pictures with my phone, but foolishly left behind my usb cable, a gallery will be posted tonight or sometime over the weekend

  • I don't know what I'm doing. This is the first Mac I've owned and so far things seem simple enough, but I'm not at home yet.


There you have it, about 2 years of thinking about buying a new iMac, a few weeks of waiting, and 4 hours off of work later I have my new shiny toy. It is a work of beauty and really a testament to the skill and care the engineers and designers at Apple put into their products. I'm hoping to avoid fanboyism though, I will be running a Vista / Ubuntu powered HTPC and working on an XP Pro laptop everyday for work.


This weekend I will get better introduced to the new member of my tech family, for now though I have to get back to work. Check in Monday for shiny pictures. I hope to do a bunch of how-to's and screencasts in the future about development on macs and setting things up if you are a developer, so stay tuned.




PS. I have changed the RSS Feed to use FeedBurner, if you experience any problems please let me know at ihumanable [at] gmail [dot] com

20091210

weakness

[caption id="attachment_375" align="alignright" width="250" caption="..who drank a soup primarily made up of Zug the Viscous..."]..who drank a soup primarily made up of Zug the Viscous...[/caption]

As I promised yesterday, today's post will be all about the question 'What is Your Biggest Weakness?' Jeremiah Peschka threw down the challenge at me, the challenge coming to him by way of Brent Ozar who himself was tagged by David Stein. This is starting to remind me a bit of the episode of Futurama where Fry becomes King by drinking the previous King, which has my all time favorite quote, "It's just like the story of the grasshopper and the octopus. All year long the grasshopper kept burying acorns for winter while the octopus mooched off his girlfriend and watched TV. Then the winter came, and the grasshopper died, and the octopus ate all his acorns and also he got a race car. Is any of this getting through to you?"


The question being posed though is What is Your Biggest Weakness? now before I answer I would like to examine this question and its prominence in hiring people. Frankly this question is bullshit, you may as well ask someone any of the following because they are about the same.



  • How well can you lie to me?

  • Are you ready to debase yourself for the promise of money?

  • I think you are fucking stupid!*


*Not technically a question

The question is a social contract we have all entered to for reasons unknown, it is like the dance we do when someone sneezes.



  1. Sneezer: *sneezes*

  2. Sneezee: Bless you

  3. Sneezer: Thank you

  4. Sneezee: You're welcome


Four steps to every sneeze, why, because we are afraid our souls are going to shoot out of our nose. No, now it has just become ingrained in the culture as the polite thing to do, even though the reason for its existence long ago stopped being relevant. I'm sure at some point in history the "What's your Biggest Weakness?" question was original and clever and useful. There were people in the world who hadn't heard it and prepared a canned answer. It was a probably a great way to see how someone thought on their feet and could wiggle out of a tough spot. That is no longer the case.


[caption id="attachment_377" align="alignleft" width="300" caption="Sometimes when I fart it smells like cinnamon rolls, that can be distracting for others"]Sometimes when I fart it smells like cinnamon rolls, that can be distracting for others[/caption]

Now this question is an insult to both the person asking and the person being asked. The person being asked knows this question exists and if they have a snowball's chance in hell of ever being employed they have an answer all cued up and ready to go. Some clever little spin on how they work too darn hard, are too much of a perfectionist, or are just too damn likeable for their own good. In that fake answer is the insult to the person asking the question, but really, they deserve it.


If you've ever answered that question with one of these fake answers, don't bother, I have your greatest weakness, you are a whore for money. And guess what people, that's my greatest weakness. When I was interviewing for my current job I recall clearly being asked that question and giving some cock-and-bull "I work too hard and am a perfectionist" line. The truth of the matter is that I'm a bit obsessive compulsive about my code, I am a bit of a perfectionist, but is that my greatest weakness, no. My greatest weakness was that I was too gutless to refuse to answer that stupid question, or too timid to respond with an actual weakness instead of some shrink-wrapped bullshit about working too hard. My greatest weakness that day was letting my fear of living on the streets eating catfood overcome the voice in my head calling out this faux question for what it is, a slap in the face to any prospective employee. I could have answered with any of a wide range of actual professional weaknesses that I have:



  • I get bored easily

  • I don't test simple fixes as thoroughly as I should

  • I don't work at consistent output, I have times when I'm incredibly productive and times when I just want to nap

  • I don't agree with most corporate culture, telling me what to wear, when to show up, how to act, is understandable, but it shows a lack of respect that I find insulting, its a rigid structure in which I am less productive not more.

  • I value my free time more than I value money which makes me a less than ideal candidate when the idea is trading time for money.

  • I like people, sometimes I'm more interested in talking to someone about code (or monkey or robots or zombies) than writing code


Those would have all been great things to say, but I didn't. I sat there with a phony smile and a phony answer, I lied and it worked. I'm hired, I've worked on several projects and they have all been successful, on-time and on-budget. I'm cognizant of these failings that I have and I think that that is my greatest strength.


If I had it to do over again I would have answered with my actual weaknesses, and then I could have spun it a bit. I know that these are the things that can derail me and potentially derail a project. I don't overlook my failings anymore, I remain conscious of them and actively work to counteract my natural tendencies. I'm aware of the fact that I don't test thoroughly the small stuff, so now when I'm pushing a small change that fact pops up and I have to ask myself, did I test this thoroughly or did I cut corners and just run it in the compiler in my brain (which is full of all kinds of bugs and edge cases). The first step to dealing with any weakness is admitting it and being aware of it, the second step is doing something about it.




I'm going to continue this game of blog tag by asking Mark Essel to respond to this question next.

20091209

pushing

[caption id="attachment_368" align="alignright" width="300" caption="cupcake dispensing button"]cupcake dispensing button[/caption]

I have been working on prosper for the last few months, I started thinking about it in early October and according to GitHub my first commit was October 22nd. This project has been great fun so far and I'm not even close to a 1.0 release yet (right now prosper is at 0.6 well on its way to 0.7). I have learned a ton on this project that I would have never guessed before I started.



I completely underestimated the amount of work prosper would be, and I don't mean coding (although coding has eaten up a large chunk of the time I normally fill with playing Borderlands). I didn't realize the amount of work it takes to manage even a small project like this. GitHub has been an amazing resource, but at the end of the day it is a tool, and you need to spend time learning how to use it and populating it with data. Writing up documentation, reading documentation, creating examples, running tests, working with collaborators, discussing technical problems, it has been a mountain of unexpected stuff. Now I'm not complaining, this was the challenge I wanted, I'm learning a ton of new stuff, making great new connections, and pushing myself in ways I never have before. One of the most important new hats I'm learning to wear is promoter


Let's say you have a great idea (like a standardized php database abstraction layer), and you decide to invest your time and energy into it. Great, you start coding like a madman and you have something working, you are working out the kinks, enjoying it, really making something worthwhile. After a while you have this project to the point where you think others might be able to use it, what do you do?



  1. It's too much work to do anything, just let the bits sit on your harddrive

  2. I need to share this with people, I'll toss it on GitHub / BitBucket / SourceForge / etc

  3. I want to promote it

  4. I'm going to get others involved


Those are the steps that I went through, and I would imagine a lot of people do, really I'm at step 2.5-ish, I created some pages within WordPress for prosper, but I plan on spinning out a standalone website for prosper at some point. The list looks easy but the problem is that you have to push yourself, because each step is costly.


To go from step 1 to step 2 you need to push past that voice in your head telling you to apply more polish. You need to push past any indecision or fear of criticism and get your code out there. The next step is to promote the crap out of your project. This step is difficult because how do you even go about it. Here are some ideas.



  • Create a sample application using your project

  • Give your project a home and shamelessly link to it

  • Promote on reddit, Hacker News, etc.

  • Get friends more famous than you to push it, if you don't have famous friends, start sending out emails, the people that I've talked to have been really great

  • Submit your project for review in any pertinent technical website (like PHP5 Magazine, which may actually be defunct)


For step 3 you have to push others, push friends, and push yourself to get your project on people's radar. Now for the next step, getting others involved. You should have created some connections and hopefully some users, enlist them to make your project the best it can be. User's can submit bugs, feature requests, and patches. Other developers can polish up bits they are interested in, as my good friend Jeremiah did. Getting more eyes and ears and noses in your project let's you refine and build, spreading complexity around.


The point of everything is that you have to push. Even great ideas, great code, great projects can fall to the wayside if no one pushes. Promoting the work you do is nearly as important as the work itself, if no one ever uses your code, no one will care about the months of effort you put into making it beautiful. Get out there and be passionate, genuine, and don't stop pushing.




Tomorrow I will be picking up the gauntlet that Jeremiah Peschka threw down today in What is Your Biggest Weakness? Tune in tomorrow to see what my biggest weakness is, and see who I challenge next.