usable in any place a human can be used

20100309

100th Post Review

[caption id="attachment_792" align="alignright" width="300" caption="smile for now, soon I will devour you!"]monkey and tiger[/caption]

Here we are, my 100th Post! I'm going to give you an unprecedented look behind the scenes of ihumanable.com to see the magic that is my technology blog.


This blog started on October 2nd, 2009 (158 days ago). I have had a great time writing and have more or less kept up with my goal of blogging every weekday. I want to recap the numbers so far, talk about the best parts of the last 158 days, and talk about where I plan on taking this blog in the future.


By the numbers



  • Posts: 100

  • Comments: 440 (239 rejected as spam)

  • Subscribers: 183

  • Visits: 32,395

  • Pageviews: 46,664

  • Most viewed post: hustle


Best of the blog


It is hard to sum up what has been my best experience so far blogging. This blog has always served as a dumping ground for my day to day thoughts about developing software and exploring the fantastic world of technology all around us. One of the best outcomes of this blog is getting to know other bloggers, people who you may not always agree with but that are friendly and thought-provoking. Some of the great bloggers that I've had the pleasure of communicating with more through my blog have been:



I have had a few of my blog posts go viral mostly through the amazing community at Hacker News where I occasionally submit a post. My biggest honor by far though was having hustle featured in Lifehacker. It came as a big surprise to me, I got some pingbacks and before I knew it my server was feeling the squeeze, but thankfully (and with a little help from SuperCache) it stayed up.


If I had to pick my all time favorite post though, it would be one of my snarkiest, rantiest, and at least in my humble opinion, funniest posts to date. Making a sandwich, it's not a very funny title, but if you haven't read it, click through, it will at least make you smile.


This blog has been a great source of strength and a fantastic point of release for me over the last few months. I have used it to share my triumphs as well as my despair. It has been my megaphone, my confessional, and my soapbox. This has been the home of my baby and has sparked numerous discussions and debates that have made me a better person.


Into the future


After 100 posts, is there anything left to say? Of course there is, I plan on continuing this blog for as long as people still want to read it, and probably a good while past that as well. I recently attended codemash and the one thing I remember most was sitting at a table blathering away like normal and my good friend Jose says, "I didn't understand how you could blog everyday, but now that I've spent a few days with you I understand completely." Suffice it to say, I have a lot to say and I can't wait to start saying it. I'm not sure what I will fall in love with next, but rest assured you will be kept fully informed.


Takeaway


[caption id="attachment_795" align="alignleft" width="300" caption="the blogspot version of ihumanable.com... humble beginnings"]blogspot version of ihumanable[/caption]

Here is what I want you to take away from all of this. I started this experiment in social media with a simple free blogspot blog and a twitter account. I scaled out to this WordPress install on my own domain after I got a bit of a following. Then I just wrote, and I kept writing, and I promoted what I thought was important or particularly good, and you can too. For years I wanted to blog and just kept putting it off, one excuse or another would pop up. Then one day I decided to do it, and I made a deal with myself that I would blog every weekday, and I kept that promise (with a few extenuating exceptions).


There is no time like the present, if you have something to say, fire up a free blog and start typing. At first you may just be talking to yourself, but over time people will listen, people will comment, people will come to understand you and the things that are important to you in a way that they never could otherwise. There is no reason to hold out now, go out there and make a mark, you may be barking at the moon but it's better then staying quiet and wishing you had later.


Thank you to everyone that has taken this ride with me so far, the last 100 posts have forever changed the person that I am, and I'm excited to see where the next 100 will take me.

20100308

settling in

[caption id="attachment_787" align="alignright" width="209" caption="No, no, not you Hugh Laurie"]House surrounded by prescription bottles[/caption]

Here is a rare post, something not bitching and not about technology. Let's say that this is a meta-post, a kind of explanation for why my posting has slowed down the last week and some personal news. First to address the slow down. Last week I had the luxury of experiencing business travel for a whole week!. Now to the grizzled road warriors out there who do this all the time I will come off as a whiny little boy, but I didn't have the time (nor the internet connection thank you very much Merrillville Courtyard) to do much blogging with the 10 hours of meetings daily. Don't worry though I have some good thoughts ruminating from the experience.


Secondly I have just moved into my *fanfare goes here* new house with my lovely girlfriend Heather. Having these two events juxtaposed was a bit stressful and difficult, but we pulled through. Trying to merge all of our stuff together and get everything in order is a bit trickier than just git merge matt heather. Its very much worth it though as we now have a lovely little home to call our own and my dog has a backyard to play in instead of tearing up my apartment.


This is going to be a short one today, I've been keeping busy working my 9 to 5, my side projects, traveling and blogging and releasing point-releases of Prosper. Tomorrow I will post my 100th POST!!!. I hope to make it a good one, it will be full of numbers and analytics, lessons learned, people met, and the story of how my inability to shut up has turned into a somewhat successful blog. I hope you will all enjoy it, but you'll have to wait for tomorrow.

20100302

macgyver

[caption id="attachment_781" align="alignright" width="216" caption="All I need are these everyday objects — a toothpick, some liquor, a gun with no bullets, bullets, and three of my MacGyver writers. "]McGyver[/caption]

So it's come to this, a blog meme post. Every so often in the hallowed world of writing content for free to be distributed to people that you don't know for no particular reason other than hearing your fingers clickity-clack, you meet someone else doing the same thing and they challenge you. Considering that this is a hobby built upon the sturdy foundation of honor, glory, and red bull, you must rise to meet this challenge, and write a themed blog post. David Stein started this and it continued to Brent Ozar who has called out my name in the darkness, to answer the call to write about: My MacGyver Moment.


Now I've written about my favorite MacGyver Moment before in a previous post toolmaker, the time that I wrote an automated PL/SQL to T-SQL translation program. In that post though the MacGyver moment played a small roll and didn't get the attention it deserved, so I will go into its history and explain it in greater detail.


The seed is planted


[caption id="attachment_782" align="alignleft" width="300" caption="This is how MacGyver would solve most of his problems in the future."]jack o'neill shooting a p90[/caption]

It was my last semester in college, I had finished up all the required course work and just needed to take some 400-level electives to finish off my degree. I looked through the catalog and found a course that looked interesting, "Language Design and Implementation." The course seemed exciting for a few reasons, the professor had worked as a professional compiler writer for years and was a decided brilliant and fun teacher, the course work included building a compiler, and compiling source code was a part of the development chain that I had a theoretical understanding of but was still somewhat of a blackbox. I signed up for the course, it was fun, it was hard, I built a compiler (for a made up language called LITTLE targeting the JVM), and I learned a lot. I learned about parsers, tokenizers, compiler optimizations, bootstrapping, and a hundred other interesting concepts. The value that I took away from the course was a litany of problem solving techniques and an appreciation for what runs under the gcc hood.


The problem


My company sold some software. Doesn't seem like a problem at first, in fact, it's how the company does all those little things like pay my salary, so it's actually a good thing. The problem was that the software was written to run on an Oracle backend and we sold it to an organization that only had a SQL Server backend. There we sit looking at a mountain of PL/SQL code that does everything from execute a simple search to closing out and actualizing a fiscal year. 60,000 LoC representing tens of man-years of effort. Take this and put it in an extremely aggressive timeframe for porting and limited resources... suddenly the problem is easy to understand.


Bubblegum, paperclips, and string functions


60,000 lines of PL/SQL needed to become T-SQL, looks like compiling code to me. I knew my source language and my target language, time to write up a parser, tokenizer, emitter, etc. Then I noticed something while scanning through the PL/SQL, the problem domain was constrained, although PL/SQL can be constructed in a number of permutations all syntactically different, this was not the case. This PL/SQL was very uniform in construction, I didn't need all the pieces parts of an actual compiler. I didn't need to tokenizer and parse into abstract syntax trees for emission into the target language, I could just cheat, there were only 3-4 syntactic structures present in the source file.


I began writing the translator, after quieting that part of my brain that was telling me I was wasting time, just trying to avoid the unpleasant task of translating this by hand. Hackity hack hack, code is complete, hack up some nifty progress bars, run run run... translation complete! I looked at it, not quite perfect but I would estimate that the success rate on translation was around 99%.


The lesson


Sometimes hacking up a kludge to transmogrify data is the best course of action. Shutting up the part of your brain that doubts your ability, or the part telling you to do something the "right way" is the best way forward. Learning something for no other reason than that it seems interesting can provide you with the tools necessary to solve thorny problems down the road. Sometimes you really can defuse the bomb with a rubber band, #2 pencil, and thumbtack.

20100301

prosper 0.8

[caption id="attachment_248" align="alignright" width="128" caption="prosper"]prosper logo[/caption]

As the "pay the bills" work has gotten more fast and furious these last couple of months, Prosper development has started getting less and less priority. Today though I would like to announce that Propser v0.8 is officially ready for consumption. This is still a pre-1.0 release so its use in your multi-million dollar project should wait a while still.


Prosper is currently very stable and its stability is increasing as Unit Tests are being written, ferreting out many tiny bugs. Right now the MySQL and SQL Server adapters are the most heavily tested adapters, but full test coverage is a priority before the 1.0 release.


There are a lot of new things to be excited about, a new AREL inspired way to handle result sets by making the query object itself iterable. This new semantic way of working separates processing from execution and provides a nice new way to interact with the data backend. Support has been added for the GROUP BY and HAVING SQL clauses.


Prosper has a new home http://prosper-lib.com which will be getting a snazzy new design just as soon as I free up a couple of hours to make one. I have worked with the incredibly talented Ashley Kruso to get a new logo designed for Prosper.


Big thanks to Ian Potter who provided bug reports and even some nifty patches that have been incorporated into this release. It's your turn to go forth, play with Prosper, and submit to me feedback. Happy PHPing.

20100225

road trip

[caption id="attachment_772" align="alignright" width="300" caption="sitting... check. staring... check. boredom... check. Looks like we\'ve got ourselves a good old fashioned road trip!"]road trip sign[/caption]

I have a road trip coming up, one of those magical adventures where you sit quietly staring at the vast cornfields of the rust belt trying to keep from falling asleep and crashing into a cow or something. I've been preparing for this road trip and decided that instead of trying to find 5 hours worth of music to listen to that I could multitask and read while driving!


No I'm not some sort of superhero that can both read a book and drive, I am of course talking about audiobooks. Being a nerd I already have some audiobooks, I have Jon Stewart's America and Steven Colbert's I Am America (And So Can You!) but I thought that I could get some sweet programming knowledge in my brain while on the road. And so I have set out to find the best programming audiobooks / podcasts around, and I need your help!


So here is the challenge, if you so choose to accept it. Help me assemble a sweet list of programming audiobooks / podcasts, then I will subject them to my brain for 10 hours and come back and write a review of the good, bad, and ugly. Together we can produce the go to list for programmer road trip aural stimulation. Leave a comment with any audiobook / podcast related to programming, software development, or any other sufficiently nerdy subject. Let the miracle of crowdsourcing begin!!!

20100224

blackbox revisited

[caption id="attachment_767" align="alignright" width="275" caption="Oh shit they\'ve miniaturized HAL "]blackbox[/caption]

The other day I wrote about the concept of the blackbox. I focused specifically on the idea of a blackbox as us programmers think about it. I've been thinking about it more and more though and realized that there are blackboxes all around us. There are processes that our often complicated, confusing, manual messes that our non-programming friends and family have to suffer through. If they knew a little bit of ruby or maybe some batch programming they would be able to save mountains of time and effort, but they don't, so that's where programmers can shine. The problem is that to help our friends and family we have to shine some light into their blackbox tasks and figure out what they do, that's not the easiest task for a programmer to take on.


Recently at work they announced a change to the timecard system that we use, all timecards MUST be submitted by 10:00am Monday morning. The old system was, they should be in sometime on Monday and if not then our very nice receptionist will send out a sternly worded email shaming you into submitting you timecard. Being curious (and being that the explanation was just a few more lines down in the email) I wondered what change had occurred to the system to require this 10:00am deadline. Ends up that our receptionist used to enter this data by hand from the system we enter it in into the accounting software. This was a tedious and error-prone task, once someone bothered to look at it they realized that with a little bit of code they could automate this all and get these programs chatting back and forth like old bridge partners. A couple hours of programmer effort later and now our receptionist is able to answer calls and do all the other receptionisty things that she is great at instead of spending time copying numbers from one program to another.


The blackbox, timecards turning into accounting information, was illuminated and the process was horrible, a little bit of code applied and BAM new productivity abounds. It gets me to wondering, how many other blackboxes are all around me, waiting for someone to shine some light in, see the inefficiencies, and offer up some soothing code. I've given myself a new little game to play when talking to my friends and loved ones, when they start complaining about something that they have to do in their day to day, instead of just offering a sympathetic, "Sucks to be you loser" I start digging deeper. "These reticulated splines are giving you a lot of trouble, how exactly do you make them?" Normally they will reply with a bit of hesitation, maybe even a polite, "Oh, its boring, you don't need to know about that." But if you keep on gently nudging, you can find out enough of the process to help.


It doesn't always have to be by providing code, sometimes just the general nerdy computer knowledge that we have can be incredibly beneficial. It's easy to forget that not everyone knows the little tricks to make the computer easier and more fun to use. I was able to save my mother hours a day by explaining to her that despite what her boss told her, she does not have to shut down Photoshop between opening every file. Until then she had been instructed and believed that she had to wait a good minute for Photoshop to boot up in between every file, opening hundreds of files a day, you do the math. By asking my girlfriend some questions about something she does at work I was able to throw together an Excel spreadsheet to save her a ton of time. The magic of VLOOKUP and some well placed formulas was all that was needed to take a boring repetitive task and make it much simpler and less error-prone.


For those in the computer-know it's easy to look at the computer as a simple tool, something to be mastered and leveraged to make our lives easier. For many people though, computers are blackboxes, confusing little machines that spit out weird error messages and are constantly fighting them to get things done. And there is the other edge of this sword, by shining light into a process blackbox and making life easier you do the double duty of helping illuminate the blackbox for a computer novice. You help show by example that the computer is not mean or frustrating (well sometimes they are frustrating) but just a tool that with careful skill, some essential knowledge, and most importantly a lack of fear, you can make bend to your will.


Go find the blackboxes around you, help someone save 15-20 minutes a day, show someone that computers are not just useful in general but can be made personally useful. You will be a technology hero to them, you will find an interesting puzzle to play with for yourself, and at the end of the day everyone will be better off. Find the blackboxes and start pouring in light, you will be pleasantly surprised at what you find.

20100223

to tweet or not to tweet

[caption id="attachment_758" align="alignright" width="300" caption="web 2.0 kids these days with their tweeters and facespaces, I used to have to text on a 12-button phone and I liked it!"]twitter bird[/caption]

Ever since I started writing ihumanable.com so many many years ago (actually it was the beginning of October) I have tweeted the birth of every new blog post. For those who follow me (see the button at the top of the page to join the elite group of @ihumanable followers) I expect that you spend most of your day with bated breath waiting for the singular moment of glory that a new ihumanable blog post is ready for your consumption. I was pointed to an article today by Shawn Blanc about how to handle the tweeting of blog posts. The logic boils down to the following




  1. Some folks don’t care a dime about my nerdy posts, but have great concern about what I eat for lunch.

  2. Some folks are already subscribed to my RSS feed and would prefer to keep it there and nowhere else.



The solution Shawn Blanc comes up with is to have two separate twitter accounts @shawnblanc for personal "what I ate for lunch" tweets and @shawnblancnet for stuff about his blog. So the question that leaps to your mind is, should you immediately start following @ihumanablecom for all the updates about the great free content / ranting with oddly captioned pictures that I produce? No, no you should not, and I'm about to tell you why.


I have an RSS feed and twitter, some people would argue that I shouldn't tweet about blog posts because what if someone is both subscribing to my feed and following me (thanks to anyone who is so devoted). This poor unlucky bastard will get the grand news of a new post in gasp 2 different places.


This argument doesn't make much sense to me. Twitter is passive, it is the un-email. You follow people you like, you see their tweets, there is no "unread count" or really anything expected at all by the tweeter from the tweetee. This is why people love to tweet, its the best part of any conversation, the part where you are talking. Look at some of the recent important tweets.


Faught an old man for a parking spot at ihopp - AmandaSollenne

A man is a man when he can offer his hand. The Who - wealthmoneynow

Straight up doing nothing. Have a dentist appointment after school. then have to go to court for 5:30. Then have a bunch of homework. Great. - JamieBaskett

Now I'm not picking on these people (I don't even know them) I just went to the public timeline to see what was currently running through the tweet stream. The point is that these are low-value easily ignored communications. If something shows up in your tweet stream that you don't care about, at most its going to waste 140 characters of mental processing power.


The second argument is that somehow people could care more about what I had for lunch than my blog. What I have for lunch is some meaningless data point about my day it means nothing to me (although today's Grinders Chicken Parmesan Stromboli was amazing). This blog which I spend all kinds of free time and energy on actually means a great deal to me. I want to be out there promoting it and if you are following me on twitter I would imagine you would want to see the things that are important to me. If not then why are you following me.


I have people following this site on RSS and people following me on Twitter and I would imagine its not a perfect overlap. When I first started this blog I had no RSS subscribers because it was fresh and new, so I promoted it with a simple (usually less than 140 characters) tweet, one per day. Now I have people following me on twitter solely because of this website, and it would be a disservice to them to stop tweeting about the blog posts now, changing the rules all up midstream.


This blog is important to me, me @ihumanable. The things I write here are an expression of the frustrations, lessons, and victories that make up my life. I could easily start an @ihumanablecom (if its not taken) twitter account and tweet new posts out through that. But that doesn't make sense to me, @ihumanable is where I tweet things about me, ihumanable.com is about me, and so tweets about ihumanable.com will continue to be broadcast through @ihumanable.


The argument against blog post tweets fails to understand the very nature of twitter, it is a passive, non-blocking, stream of information. If someone is spamming hundreds of tweets a day about pointless blather (well then they are probably using twitter) then stop following them. If someone is trying to share something that they have worked hard on and care about once a day, then I would hardly think we need to erect walls of netiquette around it.