Ignored By Dinosaurs 🦕

random

So years ago, in the early days of my HN acct, I bought a book called “Founders at work” that happened to be authored by PG's wife Jessica Livingstone. Great book with a bunch of interviews with various founder/hero types – Woz, Evan Williams, etc.

One of the interviews with with DHH – the Rails guy. I remember him talking about how he used to write PHP and it was just too hard, and that's how he found ruby and started building stuff with it.

So, I've been going through these Laravel screencasts lately. They're very helpful, especially if I were a total noob as far as most of thes concepts go, and the architecture of Laravel is so heavily based on Rails that I pretty much know what's coming next.

The thing about it though, is the amount of Laravel code that you have to write to do the same thing in Rails. And it's just uglier. And it just seems like more work.

So yeah, that's my 1 week assessment of Laravel.

#random

And here we are, but first – a story...


Yesterday was my 4 year old's 5th birthday. Michelle and I go back and forth about who's going to take video and who's going to take stills for singing “Happy Birthday”, and decide I'll take the video.

We get up to the part where she's lighting the candle and my phone stops recording – “Your phone is full, please manage storage under blah blah blah...”. This is an iPhone 6+, bought it two months ago. Obviously I bought the 16GB model, but this was never a problem with my 5c so why would it be a problem with the 6+?

It has been a problem with my 6+. I just deleted all my music and podcasts off of the phone less than a week ago, and as you can tell from the screenshot, whatever is on here does not add up to 11.something GB of stuff. Not to mention, why is there only 11.something GB of available storage in the first place. The OS is taking up over a quarter of the disk space??

So I'm googling last night, trying to figure out what's taking up the space on my phone. Obviously something is cached it would seem to me, but I have no control over what this is or how to free up that space. Some random post advises me to backup and restore the phone, which seems really janky to me, but the poster says this will wipe the cached stuff and only leave “your stuff”. I decide to try it, even though I'm respecting myself a little less at this point (I'm a developer for pete's sake, not some non-technical moron who has to search the internet for how to free up storage on his phone. Or am i??).

I'm told by iTunes that I don't have enough free space on the phone to restore from the backup I've just made. I'm wasting my life being frustrated at a phone at this point, rather than spending time with my wife on our son's birthday.

I have a moment and I remember why I jumped to Apple gear in the first place...


After years of loyalty as a Windows user, after years of hating Justin Long's smug pre-hipster persona as the cool kid in the commercial opposite John Hodges, I bought a new HP laptop with Windows Vista on it. I felt betrayed. It was such a poor, clunky experience that I immediately regretted buying the laptop. Two weeks later I bought an iPhone, as chronicalled in part 1 of this series. It was, I can honestly say, life changing. It just worked. It didn't nag me, it didn't crash, it didn't hide useful features behind 3 submenus, it just worked. It catalyzed the entire career path I've been on for the 7 years since I bought it.

You can guess where this is going. My iPhone 6+ is no longer a device that “just works”. It does the exact opposite and costs me video of my 5 year old's birthday. I guess Marco Arment wrote about this a month ago, but I'm officially done paying this much money to be frustrated by technology.


I'll go ahead and say it – if Jobs were still alive, he would've fired the motherfucker who even suggested shipping their top-of-the-line phone with only 16GB of storage, not only because it makes for an obviously crappy user experience but because he had an apparently much clearer long view – that happy customers keep coming back and unhappy customers flee at the first opportunity.

My first opportunity is in 10 months when my T Mobile jump plan comes back around. I'll probably go retro, since I have less than a home screen's worth of apps installed on this thing anyway. The only ones I actually really use are Email, Twitter, and Reddit, and arguably all of those on a phone are just ways to kill time when I could be enjoying the life around me.

Life moves on.

#life #random #iphone

This is currently in regards to the Atom editor that I dutifully filled out an “invite” request for. It could be about anything, though. I get this same feeling every time.

It takes me right back to high school gym class and waiting to get picked for a team. And waiting. And waiting. And God this is embarrassing, will somebody please fucking pick me already?


This is a piece of software that you install on your computer. Not a Saas thing that'll buckle under the weight of too many users. I thought Mailbox actually did a pretty cool thing by providing that countdown that gave you all the visibility you really needed into the process, and removed that feeling from the waiting.

And waiting.

And waiting.

#random #memories

v0 – Blogger.

I think I got 3 or 4 posts in before realizing I wanted to try actually throwing up a website of my own.

v1 – Wordpress

One click installer at GoDaddy, my webhost for the first three months.

v2 – Drupal

I wanted to get more involved in the development side of it and was really loving the opportunities in the Drupal job market. Migrating a Wordpress blog was so predictable that there was a Drupal module to do so, and it brought all of my old posts, categories, everything. The setup of the categories was a little weird – it dumped everything into a Drupal Taxonomy called “Wordpress Categories”. I guess whomever wrote the module was tired of writing the module by the time they got to that point.

v3 – Back to Wordpress

Not really sure why. I have a vague recollection of blogging in Drupal just not feeling as fun, so I didn't do it as much. I'd moved into MarsEdit because it felt more “hacker-y”, but it didn't provide as fertile-seeming an environment as good ole Wordpress.

v4 – Back to Drupal

I was serious about Drupal now. I was starting to “get” Views and needed to put a portfolio together since I'd quit RRE by that point.

v5 – Jekyll

I was starting to get braver, even though this is the dead simplest tool out there. Some other soul put together a Ruby script that'd pull all my posts out of the Drupal DB and turn them into Markdown, the format that Jekyll required. Still, blogging just didn't seem quite as fun. I guess I didn't realize how much time I had in that tour bus after all.

v6 – Back to Drupal

I was pretty much a full time Drupalist by this point and put together a pretty decent portfolio site with it in a day or so. I was working on my Sass library and put together a “responsive” grid in a few hours. Good times. Lasted me a while but then the itch came again.

v7 – Rails

Finally came back to Rails about two months ago and rewrote this entire blog in about 6 hours from scratch. Not the trickiest of endeavors, but it took me 4 years to do that 6 hour rewrite. Wrote a Ruby script with Sequel to pull the posts out of the Drupal DB and put them into my Rails DB, URL aliases and all. The migration script took way longer than the actual build. Drupal likes to “normalize the fuck out of your data”, which means it scatters things all over the place in an attempt to store them in only one place. Did you know that the name of the column in the URL alias table is “src”, whereas everywhere else in the Drupal DB it's “source”. Shit like that, Drupal... I was able to put together with 4 MySQL tables what took Drupal something like 75 tables to do. Of course, the vast majority of those DB tables were never touched, which is a whole other thing about Drupal.

v7.1 – current – Rails and Mongo

I've been playing with Mongo for the last couple weeks and figured “fuck it” and did it yesterday. Took me 20 minutes to migrate the posts out of MySQL and into Mongo and replace ActiveRecord with MongoMapper. 20 minutes. It took me the rest of the night to get sessions and login working again since I dumped my entire user row into Mongo, so I had keys for :_id and :id in the same document. Once I realized that and played nicely with Mongo's idea of id (same for posts), everything worked out nicely.

Of course, for all that fun with cutting edge technology, there's going to be some sysadmin pain. And there was. I followed the wrong instruction to get Mongo going on this Debian server (followed the Ubuntu instructions. Whoops!) and spent the better part of this morning trying to untangle the mess. Never did, but typed mongo and it magically came up somehow. then spent the rest of the day migrating data and trying to figure why the hell ActiveRecord is still looking for a DB even though I ripped out every vestige of AR. Anyway, it's working now, and this will be the first post committed to a non-relational (aka NoSQL) database in my programming career.

Happy times. The amazing thing is that I've kept all of these posts with me through 8 or 9 different databases so far. Yay IBD.

#random

So long story short – I've been doing this thing a few years, I've learned a few tricks and it seems like every single new developer trick I learn about is already set up in the Mac for me.

I just learned about Apache Benchmark. If you don't know, Google it. It lets you ding your webserver with 100 or 100,000 requests to see how it responds under pressure. It's really cool and really simple.

Please don't do this (more than once).

ab -n 100 -c 5 http://www.johnnygrubb.com/

That means, hit my server 100 times, 5 connections at a time on the front page. Running this from the same server that the site is hosted on skips the network, which means you really are just testing the response time of the application.

This is ApacheBench, Version 2.3 <$Revision: 655654 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.johnnygrubb.com (be patient).....done


Server Software:        nginx/1.2.1
Server Hostname:        www.johnnygrubb.com
Server Port:            80

Document Path:          /
Document Length:        15489 bytes

Concurrency Level:      5
Time taken for tests:   0.454 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      1623300 bytes
HTML transferred:       1548900 bytes
Requests per second:    220.29 [#/sec] (mean)
Time per request:       22.697 [ms] (mean)
Time per request:       4.539 [ms] (mean, across all concurrent requests)
Transfer rate:          3492.19 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       0
Processing:     8   21  31.5     12     209
Waiting:        8   21  31.5     12     208
Total:          8   21  31.5     12     209

Percentage of the requests served within a certain time (ms)
  50%     12
  66%     14
  75%     16
  80%     17
  90%     41
  95%     54
  98%    190
  99%    209
 100%    209 (longest request)

I'll let you decipher what all this means, but that's no caching – DB calls and page builds for every request. Nginx is barely opened up, I have one worker process up. You should see it when I turn page caching on, but I'm leaving it off for now. Running this from here at home gives me

Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking www.johnnygrubb.com (be patient).....done


Server Software:        nginx/1.2.1
Server Hostname:        www.johnnygrubb.com
Server Port:            80

Document Path:          /
Document Length:        15489 bytes

Concurrency Level:      5
Time taken for tests:   70.142 seconds
Complete requests:      100
Failed requests:        0
Write errors:           0
Total transferred:      1629080 bytes
HTML transferred:       1553936 bytes
Requests per second:    1.43 [#/sec] (mean)
Time per request:       3507.124 [ms] (mean)
Time per request:       701.425 [ms] (mean, across all concurrent requests)
Transfer rate:          22.68 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       28 2923 1651.5   2810   12004
Processing:     0  535 658.8    320    2739
Waiting:        0    5  21.9      0     153
Total:        375 3457 1638.2   3309   12005

Percentage of the requests served within a certain time (ms)
  50%   3309
  66%   3836
  75%   3990
  80%   4326
  90%   4884
  95%   6387
  98%   9240
  99%  12005
 100%  12005 (longest request)

That's how long my internet connection takes to move 100 connections. Anyway, the point is – I had to install that on my server but only knew about it in the first place because it was already installed on this Mac laptop that I bought in 2008.

I bought this 2GB laptop 4 years ago. It was the last big thing I ever will buy with a credit card. I just put a SSD in it over the weekend, and it's gone from being almost unbearably slow to the fastest damn computer I've ever used in my life. I haven't installed anything except the tools I need to do my job. No iTunes. Not importing my mail. I need Spotify to work, so I installed that. Honestly, unless Apple's new commitment to yearly major OS updates screws me or it just melts from use, I don't see myself buying another laptop for at least another few years.

By the way, I'm sure you could melt my server if you really wanted to. Please don't.

#random

My first post on my new blog! I wrote this one all by myself, with the help of hundreds and hundreds of open source collaborators, Stack Overflow commenters, IRC, Google Groups, and sheer force of WILL!!!

This is my first running, production Ruby on Rails app. It took me about two days/6 hours to write, and about 4 days/30 hours to deploy. Deploy means “make work on the web so people can see it” and it was every bit the pain in the ass that I'd heard it was supposed to be. But by god, here it is! Nginx/Passenger/MySql/Rails. I'll make it look prettier later, and hopefully also have something to say.

Guess I also need to set it to something other than Greenwich mean time. It begins! Some more!

#rails #random

I was listening to RadioLab the other evening during the WNYC pledge drive. During the part of the show in which they were actually driving pledges they announced one of those perks for donors of a certain level, I think they called them “lab partners”. It entitles you to some stuff, some interactivity with RadioLab producers, and the obligatory “exclusive content”. The very first thing that popped in my head was -

I'm tired of content

I got to thinking. Commerce and economics. Supply and demand. Scarcity.

Take music – music was once a thing that could only be experienced live. The recording era ended all of that and ushered in a successful business model that had a good run of 80 years or so by not only increasing the supply of music to people, but by exponentially increasing the demand. Previously if you wanted to hear Beethoven's music you needed to go to the symphony to hear it, but now you could put on a record and listen to it. Not only that, but after the performance had ended you could put on some Pink Floyd, and after that whatever else. You weren't confined to listening to music once a day (or once a month), you could basically listen to it all the time.

But, the commerce of the business was still driven by scarcity since after all, you still needed a record and a record player. You still had to go down to the store to buy the record, if it was even available yet. Records could be released on a date, remember that? Now what?

Records are routinely leaked on the internet and unlike a physical resource that leaks out of something, the instant something digital “leaks” onto the internet the supply will forevermore outweigh demand. How do you build a business around that?

I've been pondering this for as long as anyone and I now think that “exclusive content” completely misses the point. I don't give a rip about exclusive content because there's no such thing. Trying to create this impression of scarcity to stoke demand is pointless because there's an endless wealth of other content that's free right now. Don't even demean your customers or fans with it, because it only means that they will have to jump through a hoop to engage with it. Everybody else will be casually engaging with the free stuff at their convenience. If you're lucky.

If you're lucky you will have patrons, not customers. Customers barely exist in the creative world now.

#random #business

It has been a week. I've been working lately on a site for a non-prof out in California. Their mission is the spread of invasive plant species in California. I built them a system to allow the crowdsourcing of their Spring Nursery Survey, which is where they send folks out to various botanical nurseries around the state and make sure that they aren't selling any plants that they shouldn't be selling.

It's not illegal to sell invasive plant species, most of them are quite pretty. It's only when they jump the garden fence and escape into the wild that they become a problem. Being invasive means basically that they grow totally out of control, a big problem in a wildfire prone state like CA.

Anyhoo, what I've done is build them a system that allows them to work a base of volunteers across the state to go out to nurseries and send back information about those nurseries and whether or not they're selling some of this stuff that maybe they shouldn't be. It's an almost perfect use case for Drupal, so that kept me busy much of last month.

This month is two brand new clients from Austin, TX. One was already built and launched in a big old Wordpress sprint, and the other is my first legit “enterprise” client – a large Drupal setup on which I am now the sole developer.

I'm ready to play some music, but it's kind of a good thing for the bottom line that I can't this month. The end of this month ushers in festival season for me. To say I'm excited is nowhere near enough.

I really need to work up a new design. Later...

#random

My vet just recently joined the 21st century and moved all of their records from big, brown paper files to a computer system. Her husband is an IT guy so he did the research and picked out all the computers, networked them together and set up this software system for the office. It looked like a pretty big job to migrate all of their client records to a computer system, but hey, the avoided it long enough, right?

I don't know why I just thought of this, but about a web app that manages all of that stuff? Clients, their pets, their pets' histories, etc. Then I thought, well, that's kinda ballsy for a vet's office to let a web service store data like that, and what if you want to move, etc. Well, okay, how about some kind of export API etc. Then I thought, well what about hosting the database at the client end...

Would this be a case for something like CouchDB or MongoDB? A local datastore, and I would provide the processing and the upkeep? I dunno. I'm gonna sleep on it. Sounds like a fun little project in any case...

#random

note: Parts one and two.

Phase Four – Complacence

It happens to the best of us. We sometimes take our loved ones for granted. We don't remember the thrill of exploring the new relationship, and start to get annoyed when we're forcibly reminded that those days are over. We see others walking around arm in arm with their new love and you think to ourselves “enjoy it while it lasts” or “I bet you just play games on that thing, don't you, chump?” Soon, it seems like everyone has an iPhone. The 12 year old brothers across the aisle from you on the plane – why the hell do they need an iPhone? Your entire crew gets them and you just know they're gonna be borrowing your charger. Yes, I've got my charger with me. Jesus...

You've since moved away from actually programming the thing, since object oriented programming is one giant blob of convoluted shit for a 30 year old bass player with a kid to try and pick up in his spare time. Besides, web development really seems like more bang for the buck. Might not pay as well, but this whole iPhone gold rush is pretty much over anyway. You read all the tech blogs by this point – you've turned your manager onto NetNewsWire before abandoning it yourself to try Google Reader but you'll ditch that soon, too – so you know how annoying it would be to try and get your app through the Apple process were you even capable of coding such a thing. You don't even check out the App Store that much anymore, since there's nothing but a bunch of stupid games over there anyway.

Phase Five – Resentment

This began in earnest for me about three weeks ago. In fairness, it's not completely the fault of the iPhone. A good bit of the aggravation is due to AT&T's service. It's just not that good. It was really good (or so I thought) when I first got the thing, but I swear since however many millions of people have bought iPhones the network has gotten noticeably slower and spottier. There was a voicemail outage this past weekend that affected nearly everyone on the network whether they knew it or not. I was in St Cloud MN last night with “full bars” and 3G service, but couldn't get a page to load all night.

This is pretty inexcusable to me. AT&T's one and only job – for which they are well paid – is to deliver the services that they promise. At Rothbury and Wakarusa the service was unusable and the 10,000 or so iPhoners that were at Rothbury (not an exaggeration, they were the only phone I saw all weekend, at least half the phones there it seemed) were reduced to communicating via text. Whaa, whaa you might say, and ordinarily I might agree with you, but you know what Verizon did at both of those festivals? They brought in a mobile antenna to provide service to the festival site for their customers. Does AT&T even have such a truck? Could they be bothered to bring it to the festival site in the middle of nowhere where 10,000 of their customers were going to be savaging their shitty network all weekend? Apparently, no, on both counts. Inexcusable. (The upside is that someone had the good sense to put together a Rothbury App which worked great for me all weekend. The schedule was imbedded so I wasn't reliant on the no-cell coverage and I always knew what band I was watching at the time. Very cool.)

The other thing that I've noticed in the last weeks is that the new OS 3.0 is a good bit slower than the previous version. Boot up time and app launch time, both slower. This is ostensibly because there are new features loaded into the new OS, but many of those features aren't even available to 3G and OG iPhoners. So all we get is copy and paste and a dog of a phone. I'll be getting the new one, whatever version it is whenever I get it, but in the meantime I'm left avariciously playing with Stacy's new 3GS.

In closing

The iPhone is awesome, but if you don't have one – wait. It will most likely be coming to Verizon sometime in the next year. I will be jumping ship when it does. My advice for the meantime – get an iPod touch and stick with your cell phone that works. There will be a new phase for me after the resolution of this current dark period while AT&T gets their act together (I hope), or it goes over to Verizon, but in the meantime it's #attfail for me.

#random #iphone