My (new?) Development Rig, Time Machine Quirks, and the Apple Store Experience
The Consumer Experience
So I’m in Charlotte, NC, wrapping up this Observer Interactive gig. I came to CLT a little early to replace my old MacBook which was ripped from my heart (through the window of my rental vehicle) outside of the Heroku offices in SF. Getting in late the previous night due to a rockslide that made I40 impassable, I had to wait until Wed to pick up the hardware.
I went in with the intention of buying a 15” pro somewhat tricked out, but since I’ve been using the netbook for the past couple of weeks, the 15” pro looked like some kind of wooly lumbering behemoth with tusks. Okay, the 13”. I’d read the specs, and asked one of the techs there what the real difference was between the MB and the Pro at that level, assuming processor and memory were the same.
His response? The Pro is a little slower. Buh? Apparently, since the base MB loadout is somewhat more recent in design, the MB actually outperforms the Pro in benchmarks. I haven’t compared this myself, so grain of salt, ymmv are in effect.
I grabbed the base MB and had the shop install a 4GB ram upgrade, bringing the machine back to the specs of my old one, if several hundred dollars cheaper. (Just under $900, including the memory upgrade—as a McClatchy employee, however temporarily, I get a discount of sorts.) If you let the shop do the work right there, they give you $100 back for your existing 2GB memory module, effectively cutting the price of the 4GB ‘upgrade’ in half; if I’d picked up the memory myself, I’d have paid $60 for the chip then spent a little time installing it, instead of eating lunch and shopping for a jacket. Cost-effectve.
I can work efficiently again, and this makes me happy.
Quibbles
- The new MagSafe adapter irritates me; its orientation makes cord management hard.
- The micro-dvi port rendered all my dongles (...ladies?) useless, so now I’ll have to spend a few dollars replacing the cornucopia of adapters.
- I haven’t gotten a feel for the new solid full-button trackpad. A Magic Mouse is in my future though, presumably.
Time Machine Is Your Friend
At least, mostly. Time Machine will certainly save you some hassle if your computer gets stolen (or blown up, or dropped from a two story porch, or in the strange case of Peter Fairfield, some kind of accident with a dryer). If you had xCode though, you’ll need to reinstall that. Almost all my settings made it through fine—I wish I’d done a backup immediately before I got on the plane however, as I lost some graphics work.
Plugging the backup drive in and booting up for the first time, it asked if I’d like to restore. Unrelated: the standard MacBook keyboard needs a ‘Hell Yes’ button. 27 minutes later: “Aah, all my stuff. I’ve missed you stuff. It’s good to see you.”
Unintended consequence: since the new MB has 3.5 times the hard drive space of my last MB, I don’t need the WD Passport I’ve been using as a sidecar for graphics, video, pr0n and music.
Whither Capistrano/CLI?
For whatever reason, Capistrano decided to stop working after the backup. Still not sure why.
Advice: Get Renter’s Insurance
My rental insurance company covered the computer, the camera, the laptop sleeve, and would’ve covered the bag if i could find a picture of me holding it (i couldn’t, but hey, they tried.) I got a call from my claims rep (Soraya Thomas) as I was getting back to the office, and she walked me through the difference between covering the value of a loss and covering the replacement cost.
It breaks down like this:
They immediately paid me the value of the stuff less its depreciation - she called to give me the numbers and tell me she was about to cut that check. The value was quite a bit less than it’s original cost. However, she says, if I could provide proof that I’d replaced the lost gear, she’d replace everything back up to its original value. (“How would you feel about a photo of the receipt sent via email?” “That’d work - and if you send it in the next 20, I’ll just cut you a bigger check, rather than two smaller ones and save us a stamp.” “Really?” “Sure, saves us a stamp.”)
There is still the issue of a $250 deductible, however that’s mostly accounted for because of the price differences between my original purchase ($1300) and my most recent ($900). Did they pay for the tax? Yes they did. (Assurant, in case you were curious.)
Back In Action
So, how’s this guy set up after the Fall?
It’s hard for me to do a side-by-side comparison, as my original poor lappy is hanging off some dude’s wheelchair in SF, but I can say this has been a change for the better. All the response feels snappier, the keyboard has a better feel to it, and the display seems to have been much improved (the graphics card got an update, as did the screen comp).
All in all, no harm no foul. But if God is very kind, my little laptop will commit explosive seppuku in the hands of its abductors. Ima miss you little guy: The MacBook is Dead, Long Live the MacBook.
in a somewhat reduced capacity
in the wake of san francisco, the yc interview, and the robbery (all of which i will address when i've had time to calm down), i'm staring down the barrel of a eee netbook, and using ubuntu's netbook remix os.
i will get a new macbook eventually, but i think i want to take a walk on the lite side, maybe get back to my roots a little bit. so here's what i'm going to do:
install: git, ruby-ee, sqlite3, and rubygems as i need them. vim, which will be my primary text editor, unless i want to try and learn emacs, which seems unlikely. i'll use rails or sinatra, but primarily i'll use rack to run things, using the webrick default. my documents will live in google docs. i haven't figured out photo importing yet, but i will.
essentially, i want to see, in the next 14 days, how light a footprint i can run and still be productive.
charlotte was an experiment for me in how light i can live. it turns out i can live pretty lightly--and now it's time to take this insight to my development life. wish me luck.
yank twitter links to delicious, in ruby
delighter is a simple class/script, using httparty and feedzirra to parse a twitter rss feed and import all the link tags into a delicious account.
a tweet: "linking twitter and delicious http://gist.github.com/238082 #ruby #delicious #twitter" would be saved as a new bookmark with the description 'linking twitter and delicious' and the tags 'ruby', 'delicious', and 'twitter'.
enjoy.
testing SyntaxHighlighter
sudo gem install redis sudo gem install redis-namespace # be sure gemcutter.org is added to your sourcesruby:
class Handler
def call(env, options = {})
#FIXME yeah, this is secure.
send(env['REQUEST_METHOD'].downcase)
rescue NoMethodError => nme
[ 404, {}, ["Unsupported request method."]]
end
end
Yeah, this'll do.
SyntaxHighlighter is good enough, and i'm lazy enough. win-win.
articles will be imported from http://neovore.com as time allows.
Beginning ..
LightBox2 within an IFrame, Quick and Dirty
having been challenged by one of my cofounders at FlowMingle, I took the javascript library for LightBox2 by lokesh dhakar, and modified it such that it would work from within an iframe.
this requires breaking the library into two copies, with functionality added and removed from each. i called these parent_lb.js and child_lb.js for clarity, as well as parent.html and child.html.
the parent lb code isn’t much modified, however the child requires replacing all of the $() shortcut prototype calls with calls to the parent document, wrapped in an Element.extend() call from Prototype.js.
you can download the example here if you like. It’s very q/d, so feel free to improve on it. i’ll keep updating the archive as it gets cleaner. mail me any results that’re interesting.
dirt simple retweeter with twibot
build a simple retweeter with twibot.
this requires twibot 0.1.4.
in ./config/bot.yml:
login: your_user_name
password: your_password
include_friends: true
in retweeter.rb:
require 'twibot'
# add people who request it via direct
message do |message, params|
twitter.friend(:add, message.sender.screen_name) if message.text =~ /^followme/
end
# retweet keyworded phrases from friends
tweet do |message, params|
if message.text =~ /#some_phrase_or_keyword/
post_tweet "RT:@#{message.user.screen_name} "+
"#{message.text.gsub(/#some_phrase_or_keyword/, '')}"
end
end
run with:
$ nohup ruby retweeter.rb &
the toothbrush dilemma.
have you ever been faced with so many choices that your brain seized up? this happens to me when i shop for a toothbrush. the local kroger stocks over a hundred kinds of toothbrush, in varying sizes, textures, colors, and with a dizzying array of features. some of them include a pick at the end for ‘flossing’, some massage your gums. some are electronic, with a vibrating head and a timer. there are wide heads, long, short, and narrow heads, soft or stiff bristles, different grips—some with padding, some without. folding models for travel.
it’s like someone shuts my brain off. this is the toothbrush dilemma.
it’s like this: what if you pick the wrong one? what if the one you pick doesn’t have the features you want? what if you don’t use the features it has? did you waste that $0.30?
there are a lot of situations wherein the toothbrush dilemma plays a factor. living in a town with every variety of food imaginable within three minutes of my house, i often have a tough time deciding where to eat. i fall back on defaults. you probably do too. you tend to go to a handful of restaurants, or a few bars. you stick to known quantities. and this is the way out of the toothbrush dilemma generally—setting good defaults. try them all, or at least a handful, settle on a good one, and use that one every time.
there are situations where this doesn’t apply, and in that case you try to go in with an idea of what you want ahead of time, based on good intelligence. pick the first thing that meets your criteria until you find out it doesn’t. move on to the next thing.
the toothbrush dilemma applies most strongly when you are under a time pressure. you have to decide quickly, you have no real information, and you have more options than you thought possible. in this situation, i usually just pick something quickly, based on some arbitrary criteria like ‘color’. when i’m at the supermarket, i am usually short on time. actually, i’m nearly always short on time.
the flip side of this? if you just hit your defaults all the time, you might be missing out on something worthwhile. after a certain point, most people tend to stick to the familiar, and that’s a shame. could be food, toothbrushes, parks, sports, or anything else—if you’re not exploring even a little bit, there’s probably something you’re missing. don’t do that. go out on a limb. take a break from the familiar occasionally.
so next time you’re faced with this dilemma, choose something different. but do it fast. if you have no default, ask someone who does.
happy shopping.
Google AdWords onclick Conversion Tracking 1
function trackConv(conv_label) {
var gc_conv_id = 999999999;
image = new Image(1,1);
image.src = "http://www.googleadservices.com/pagead/conversion/"+
gc_conv_id+
"/?label="+
conv_label+
"&script=0";
}
to put this on, say, a link:
<a href="#" onclick="javascript:trackConv('wooga');"></a>
