A rambling blog from Arron, a scrawny little dork who likes to code. ;)
Monday, January 04, 2010
Ubuntu makes you a software snob.
Saturday, December 05, 2009
Rails source control: to check in db/schema.rb or not? ... Don't do it.
Ignore everything below. A lot has changed since this blog post was written, and there are better / easier ways to sync up your schema.rb now than their were in 2009. And when in doubt, just run `rake db:schema:dump` when you get merge conflicts.
ORIGINAL:
The only argument for checking in schema.rb is that it's "faster."
Friday, October 09, 2009
How to hose a Rubygems in one simple step.
Saturday, August 29, 2009
jQuery.Form and its AJAX file upload gotchas.
- If you return an HTTP error, don't return any text (such as error details) -- it'll be interpreted as a successful call and won't handle your error callback.
- If you return an HTTP error, don't reply on xhr.status from the error callback -- it'll be an unhelpful 0 for some reason.
Alternatives suck: returning an error code and checking to see what kind of data got returned from the call (is it an 'error' object or a model object?).
Wednesday, June 10, 2009
Argh, ShareThis!
Thursday, April 23, 2009
Arron on...
Friday, April 03, 2009
Busy busy!
Wednesday, April 01, 2009
How much did I make from oDesk in 2008?
So, thanks to oDesk I can continue to spend time making kick-ass web stuff for clients, and use the rest to pull out my hair out over my insecurities about my writing or smashing my head against the wall because of writer's block or whatever weird thing it is that week that makes me think that every word spilled from my fingertips is crap.
Thursday, March 26, 2009
Legal retainers: you never know how valuable they are until you have to use them.
Tuesday, March 24, 2009
Slow going in the fjord of his mind.
Thursday, March 19, 2009
Hotmail login doesn't do HTTPS by default. ^.^?!
Sunday, March 15, 2009
Games I've been playing.
Friday, February 20, 2009
Oooh, Discover pisses me off.
Monday, February 16, 2009
When will Mobile Browsers be the new Mobile API?
The Palm Pre is heralded by some as the second coming of Palm. What makes this phone stand out the most is the fact that its operating system is essentially a web-browser that talks to the hardware underneath. It's user interface is HTML/CSS/JavaScript, built on standards blah blah blah. The thrust of it means that writing a Palm Pre app is as simple (or complex) as writing a webpage. For regular end users, this is probably meaningless; all that matters is that the phone looks good and moves quickly. For developers, however, it opens up a new realm of app-developing whup-ass. By making web-apps easier to create, the Palm Pre is enabling developers to make more apps with better quality for less investment.
Pretty much every developer, and several people who have no idea what they're doing, has a good grasp of HTML/CSS/JavaScript. This means that anyone can immediately dip their feet into Palm Pre and start developing. Ease of development is what made the Web explode, and the same potential is lying in wait for the Palm Pre.
So, when will Mobile Browsers be the new Mobile API?
The Palm Pre is very much a step in that direction: you talk to the Palm Pre OS using its JavaScript libraries, and you markup the application's user interface using HTML/CSS. There's only one catch: the application has to be installed first.
Why?
Why can't I, Arron Washington, Destroyer of Worlds and Small Celestial Bodies, visit http://maps.example.com, be prompted by the phone ("Hey Mr. World Smasher, this website would like to access your phone's GPS!"), and then have all the tight integration you would come to expect with an application on any website the Web cares to offer?
Imagine the potential awesomeness of that, being able to access a phone's features via JavaScript in a regular web page. You go to Google Maps Mobile, it asks for GPS access, you grant it, and voila': a whole new subset of features are available just for you, without having to download the app and update it every time a new release comes out.
With this kind of available integration, anyone can make their website "mobile enhanced" just by calling the phone's custom JavaScript libraries. With simple (DEAD SIMPLE) JavaScript integration, something as simple as a coupon site could deliver location-aware opportunities (sales in progress, 30% off!, etc) without having to make an application for every popular phone. Just point your browser at the site, authorize and it's there, all magically delicious 'n' shiznit.
Now, some privacy nuts will tell you, "Hey man, what happens if I enable a site to use my GPS to find my location? That's an invasion of my privacy!" I'll tell those folks, don't get in a boat with cannibals.
I think with the Palm Pre we're inching just a little bit closer to that. The whole awesome website-phone integration thing, not the boat full of cannibals thing.
Saturday, January 31, 2009
can_has_assets? A new Rails plugin for requiring stylesheets and javascript in views.
<%= title "hello world" %>
CanHasAssets
============
can_has_assets is a super-simple way of requiring stylesheets and javascript files
from within views. It also supports inserting snippets of CSS and Javascript into
a page only once. Snippet support should really only be used for rapid prototyping,
though. :)
Installation
------------
script/plugin install git://github.com/radicaled/can_has_assets.git
Notes
-----
can_has_* will include a file or snippet only once -- it is safe to call these
methods multiple times, where-ever required.
Alternatives
------------
If you're looking for more control, consider Needy Controllers by Michael Bleigh:
http://github.com/mbleigh/needy-controllers/tree
Example
=======
In your layout:
<%= stylesheet_link_tag :can_has_assets %>
<%= javascript_include_tag :can_has_assets %>
In your views:
CSS
---
<% can_has_css 'css_file' %>
<% can_has_css :sample_snippet do %>
.item {
/* some fake example css here */
}
Javascript
----------
<% can_has_js 'js_file' %>
<% can_has_js :sample_snippet do %>
function helloWorld() {
alert("Hello, world!");
}
<% end %>
Thursday, January 29, 2009
Discipline + Git = good awesome funtime!
Tuesday, January 27, 2009
Tag Aliases: get them, people.
#rails vs #rubyonrails -- AKA, "Why Tag Aliases are needed in every tagging system."
Mozilla Ubiquity: Metacritic Script
Yes, Mozilla Ubiquity does rock. However, having no API to your site does not rock. It is the exact opposite of rock, in fact!
function __searchMetaCritic(pblock, searchText) {
jQuery.get("http://www.metacritic.com/search/process?sb=0&tfs=all&ty=3&x=0&y=0&ts=" + escape(searchText),
function(response) {
var resultsREGXP = /\[0-9]\.(.*)\<\/p\>/gmi;
var results = response.match(resultsREGXP);
found = true;
if (results == null) {
var msg = 'No results for "${what}"';
var subs = {what: searchText};
pblock.innerHTML = CmdUtils.renderTemplate( msg, subs );
return;
}
var tempElement = CmdUtils.getHiddenWindow().document.createElementNS("http://www.w3.org/1999/xhtml", "div");
tempElement.innerHtml = '<link href="http://www.metacritic.com/general.css" rel="stylesheet" type="text/css">';
tempElement.innerHtml = tempElement.innerHtml + results.join('');
var msg = 'Searching for "${what}"
${results}';
var subs = {what: searchText, results: tempElement.innerHtml};
pblock.innerHTML = CmdUtils.renderTemplate( msg, subs );
});
}
CmdUtils.CreateCommand({
name: "metacritic",
takes: {"what": noun_arb_text},
preview: function(pblock, what) {
__searchMetaCritic(pblock, what.text);
var msg = 'Searching for "${what}"';
var subs = {what: what.text};
pblock.innerHTML = CmdUtils.renderTemplate( msg, subs );
},
execute: function(what) { __searchMetaCritic(what); }
});
Saturday, January 24, 2009
My moment of revenge against L4D exploiters. :)
Monday, January 19, 2009
I don't want to talk to you if I need to sign up for something new to do it.
Like, take this post from the OpenMicroBlogging mailing list. It's about OMB Spec 0.2. When I read it, I instantly had questions about #3, HTML-rendered notice content. A: what the hell does that mean, and B: won't that lock-in OMB consumers to a particular implementation of @ replies and # tags?
Yet, I just can't bring myself to sign up for the mailing list to ask. I don't want to mess with another account on another site for something so trivial. I just don't have it in me anymore. I've even started designing my own small sites to accept OpenID or whatever else I can get my hands on to avoid making a unique account for myself.
I guess I'm all username/password'd out.
As for OMB -- no link, can't find a portal site for it -- my interest is easy integration of microblogging into client sites. In my mind, if a client breeds a community site, integrate microblogging as a communication stream, and expose it via OMB so they can "reach out" as a community into the Web. It's still a big foggy in my mental about it. For now I've just been watching its progress in case a relevant scenario pops up.
Friday, January 16, 2009
Monetizing Yahoo! BOSS.
Excerpted from this post about third-party monetization with Yahoo! BOSS:
Our current policy is, while we do not prevent you from implementing a third party monetization method in conjunction with your use of BOSS, we may at any time require you, for example, to implement and display Yahoo!'s Sponsored Search (or similar) advertising offering instead of a third party's. Alternatively, we are considering the option to pay a fee based on your use of the service; in this case, we would anticipate permitting the continued use of monetization methods from third parties.Basically, Yahoo! reserves the right to fuck you up: any time, any place.
For small niche-like sites this is probably OK; they wouldn't bother trying to get any cheddar from you. If you run something moderately successful powered by BOSS you might have problems in the future.
I don't have a problem with having to display YPN ads or whatever. The real problem is not being able to support third-party monetization efforts. For instance, if you're running a site that makes good bread with CPA ads / Amazon affiliate links, removing those and replacing them with lesser YPN ads is a kick in your junk. What do you do then? Try to manage direct sales?
Something to think about.
Friday, January 09, 2009
The Microsoft Tag site...
Even though it's powered by Silverlight, which means it should function identically in anything that runs Silverlight.
Seriously.
Visit http://www.microsoft.com/tag/ and try to click on 'Get it for your phone' or 'Make a tag' -- it Just Doesn't Work.
That is such a cold, cold burn.
Tuesday, January 06, 2009
Need design ideas? Surf Wordpress blogs.
One of the best resources I've found so far are Wordpress blogs. Some Wordpress blogs have the most ridiculously beautiful themes you will ever find. For instance, following a link from Hacker News got me to some dude's post about "Encouraged Commentary." Excellent ideas aside, the first thing that struck me was that his blog was freakin' beautiful. I mean, look at it. It is aesthetically pleasing and functional, to boot. Hell, look at what he does to images -- they're faded out until you roll over one, at which point the image becomes crisp and the caption pops up.
Another resource is the official Wordpress Themes site. Some gems hidden away in there.
I'm not saying steal these themes or anything -- far from it. But they can provide a jumping off point for the uncreative types to work with. For a certain site, I started with a pretty nice Wordpress theme and then modified it so much it looked nothing like the original... but without the original, I wouldn't have gotten even half as far as I did. It helps that most of the themes on the Wordpress site are liscensed liberally, even though I don't actually look at the underlying CSS. I actually cherry pick certain parts of the designs and incorporate them into one OK-looking site.
It provides enough momentum to get me going, at least.
Sinatra made me go ROOOOAARRRR.
So, sudo gem install sinatra and we're off to the races, right? Wrong. After about 10 minutes of debugging I realize that the Sinatra gem, a) doesn't work with the latest Rack (0.9), and b) seems to be updated infrequently judging by some blog posts I've read. They recommend grabbing Sinatra from github, but there's no stable Git branch available. I don't know if they're using the master branch as the stable branch or what. Doesn't matter, because I don't know what revision of Sinatra works with what copy of Rack. >:(
So I do the next best thing, which is to downgrade Rack to 0.4, which is what the Sinatra gem requires.
Which works. For a bit, until I need to serve up a static html file. I guess that functionality isn't in the Sinatra gem. Some blogs mention how to use the 'public/' directory, which I tried, and failed miserably at; I'm assuming that functionality is somewhere in the github version of Sinatra and not in the gem.
Right around that point I gave up and just cracked out a full-blown Rails project. I copied the logic over, had it up and running in about 7 minutes, which was a stark contrast to the ~2/hrs I spent trying to get Sinatra working.
Lesson?
Next time, just use the latest edge version of Sinatra and hope there are no bugs in it.
This time, I'll just waste two minutes watching the '...'s go by.
Friday, January 02, 2009
My Dirty Programming Secret #424
...using Ubuntu...
...inside of a virtual machine.
Wednesday, December 31, 2008
Preoptimization in real life.
No sweat, even though I picked out what I wanted in about 10 seconds.
I spent the rest of the time thinking about how to phrase the sentence,
"I want a foot-long Subway Club on wheat."
But then I thought to myself, "If I say I want a foot long wheat Subway Club," she'll be able to get the sub bread before I finish speaking. Then I realized that, although that sentence is understandable, it is not very "correct." Would she understand immediately, or would it introduce a further delay in my sub making adventure? On the other hand, even if she did understand it immediately, would she even be able to react in time before I finished the sentence? Was the optimization even worth it?
I totally wasn't paying attention by then, so when she said "What do you want?" I kinda jerked in place and replied,
"Uh, a subway club. On wheat. Foot long wheat."
Tuesday, December 30, 2008
Importing OpenOffice files into Google Documents: Don't.

Saturday, December 27, 2008
Flex file uploads: no custom HTTP headers for you!
For some reason (unexplained, and it seems unlikely that this is an actual security issue) you can't have custom HTTP headers for file uploads in Flex 3.2 (possibly Flash as a whole). They state it in the documentation, to their credit, but it's more of an aside, tucked away at the end of an irrelevant paragraph, than a big red "HEY WE JUST CHOPPED OUT SOME FUNCTIONALITY YOU'D NORMALLY EXPECT TO BE THERE" warning.
For half a minute I thought I was in ruby and said to myself, "I'll just override this and inject the custom headers myself," then I realized where I was and went "D'oh!"
Monday, December 22, 2008
Aptana: Changing Ruby Interpreter on a per-project basis?
"The Chrome."
Thursday, December 18, 2008
ThoughtBot Shoulda -- It Whups the RSpec's ass.
Heh, heh. Yeah, back when people used WinAMP... I guess they still might. I switched to WMP (gawd, I know), but then to Songbird when it finally stopped sucking (still sucks a little, to be honest).
Anyway, for newer Rails projects, I've completely replaced RSpec with Shoulda. It's nice, clean, readable, doesn't add anything extra to the Rails folder hierarchy, and best of all, it is filled with sweet-as-hell macros that take a lot of pressure off'a my tired fingers.
For non-Rails projects (I do those too!), they offer a gem, but I haven't used it yet.
It seems like every day that something exciting and awesome happens in the Ruby / Rails area, and everyone moves up to the next big thing... but I think that's because the next big thing is better than the thing you happen to be using at the moment.
Wednesday, December 17, 2008
SaaS RailsKit: I've hit my first WTF, and I don't think it will be my last.
Tuesday, December 16, 2008
"She's dead, Jim."
Lately, though, I'm not so sure.
Check out the Heroku Google Group. There are a lot of complaints there, and no one from Heroku is talking. Seeing "my website has been down for 4 days," and then seeing another say "mine too" without any response from the Heroku team is enough to put you on edge. But, maybe these issues are getting handled, and they back-and-forth just isn't taking place on the group. If so, maybe Heroku should think about having their own ticket system or something in place, because as it stands now, all the unaswered complaints are casting a bad light on the service as a whole.
All that considered, if you're looking for an extremely easy way to deploy a trivial little app, Heroku might be for you. I've got my own VPS, but lord knows using Heroku would be a lot easier... but I'll wait until they come out of beta for that.
Monday, December 15, 2008
Using jQuery with Dojo?
Because the way I see it, jquery + jquery-ui is pretty fantastic, so throwing in dojo when I need something a bit more powerful (dojox.gfx anyone?) seems like it could be a good fit.
Dojo seems to keep their stuff locked tight in the "dojo" namespace, so I don't see any collisions happening, but I've given it just a glance.
Saturday, December 13, 2008
Rails Plugin developers: *PLEASE* don't use Prototype's $() syntax in your plugins!
Not cool, man.
Anyway, the thrust of this post is about not using Prototype's shorthand syntax when developing plugins that include UI elements. I name no names, but a few plugins take for granted that you'll be using Prototype throughout your project, and so use $() with reckless abandon. That's fine and all except when you're not using Prototype everywhere, and are trying to use jQuery's sweet ass $() shorthand instead.
I realize that jQuery comes with a no-conflict mode for situations like this, but it'd be cooler if plugins kept themselves as abstract as possible, or just stuck to Rails Javascript generating code instead.
Thursday, December 11, 2008
Feeling stuck? Self-loathing? Shoe-gazing?
Have a good read through the Black Hat SEO forum.
If you're in a REALLY bad mood, time-travel back to the last time Google nuked a swatch of spammers from their index and read through the complete hysterical narrative.
I mean, I was feeling pretty crappy earlier, but when you read about some guy about to go homeless because Dreamhost busted their account for spamming, well, you know, it puts things in perspective.
I guess if you're a sadist you'll enjoy the fact that most of these people spend 2-3x the effort making 1/3rd the money most people make doing a regular job, but whatever.
Wednesday, December 10, 2008
Flex / Adobe AIR == Ninja / Pirate
Browsing through the sample demos, I realized you could really build a regular desktop application using these technologies. I mean, I've hammered-out plenty of C# applications that could have easily been Flex + Adobe AIR applications if they had been around back then.
And the install badges for AIR applications? It is, literally, out of this world. I haven't seen an install system look and feel so fluid since 3-4 years ago when I was looking at mockups of web-based Linux package installers (Autopackage?).
The big "killer" is the lack of a freely available IDE. Since Flex's MXML can be done by hand, and ActionScript is basically Javascript with a few nice add-ons, you don't really need anything advanced -- a nice text editor can do wonders. But since Flex has to be combiled into a SWF, it makes web-style development harder: kiss the iterative "code, refresh page, repeat" process goodbye.
Still, all in all, it looks like a pretty solid set of technologies, and the development process is fairly similar to web design / programming. Could be an extremely valuable asset to pick up in the future.
Tuesday, December 09, 2008
zomg, are you sure?
Thursday, December 04, 2008
Fun experiences with JavaFX.
Had a peek at some JavaFX demos earlier -- have been evaluating XUL, Flash, and Silverlight lately, looking for a good, free, easy to target platform for enriching some sites. You know, giving them some *umph*. You know, a richer experience for those who can afford it (someone cue rimshot!).
Here's how JavaFX played out:
- Crashed the browser when I visited a JavaFX applet running an older version of Java (1.6 update 7). The *WHOLE* browser. All of it. Thanks, Sun.
- Viewing the demos on javafx.com, they all repeatedly bitched about needing to use an "older" version of Java. Hit cancel, dialog pops up again -- FOREVER.
- Jarring, incredibly annoying browser-wide freeze for about 6 seconds while Java sloughed itself into memory.
After I got the JavaFX demos up-and-running, they looked OK, but the demos aren't really reassuring.
XUL's a good'un, but that's only for Firefox browsers. However, for an intranet setting, XUL would win out completely. Some Firefox plugins are freaking *awesome* -- and they're all pure XUL + Javascript.
The whole javascript + svg + css + etc combo is in theory great but in reality minor browser differences are a big 'go fuck yourself.'
Silverlight actually looks really good in the respect that it can be driven by JS and written with plain XML, but it's a downer, same as XUL, for people not running Windows and IE7. Yeah, they say there's Mac and Firefox support, but I haven't found a good sample that works aside from Netflix's Instant Viewing (that only ran in Firefox, by the way).
Wednesday, December 03, 2008
Google Friend Connect vs Facebook Connect
This is the solution you want if you're looking to add a "no touch" social networking angle to your site: you just drop in the widget code where you want it to appear, and off you go. The sites using Google Friend Connect right now are pretty lackluster looking; the best integration you'll find is Billboard for The People. This is programming-free social networking at its laziest.
Facebook Connect on the other hand, is for people who really want to dig in deep and have a much more fluid integration story. TechCrunch (see this story) is doing it right -- you can connect your Facebook account to TechCrunch, and never have to enter your name / email / website ever again. You even get the option of publishing your comment to your profile, if you feel it's good enough. There's probably oodles more they could do, but I'm not much of a man for oodles, so I'll pretend I never said that.
Since TechCrunch can perform deep integration using Facebook Connect, when you leave a comment as a Facebook user, the end result is fluid: the only difference anonymous comments and authenticated comments is the Facebook profile picture that shows up. It's got a funny blue 'F' in the lower right corner. Can't miss it.
Use Google Friend Connect if you've got a blog or regular static website and just want to slap on some pretty regular social networking features.
Use Facebook Connect if you need or want much better integration with your current site flow.
C'mon, Firefox, what's the deal?
Thursday, November 20, 2008
Testing file uploads in Rails.
Automatically does the multipart stuff, so you can add in extra normal parameters (:user_id => 1, etc).# fixture_file_upload uses /fixtures as its base directorypost :foo_bar, :file => fixture_file_upload('/files/test_file.txt', 'text/plain', :binary)
Wednesday, November 19, 2008
Damn, sometimes I hate software.
Wednesday, November 12, 2008
Left 4 Dead: Get It Now.
Do you remember, a long time ago, playing games that were fun even when you were losing?
Imagine playing a game like that with 3 other people, with randomized levels so nobody can memorize the pattern and just blow through them without a struggle.
Grab the demo if you still need to be convinced. It's only got one chapter, but I played it for like 6 hours straight. There were enough changes each play through to make it an incredible experience.
Left 4 Dead -- xbox 360
Left 4 Dead -- PC
Sorry ps3 people, ain't no party for you.
Also, it's like 6 bucks off right now, so I'd pull the trigger and use the left-over cash to buy yourself a happy meal or something.
Monday, November 10, 2008
"odesk test answers?" Are you serious?
What the hell, man? If you can't pass any of those tests without cheating, I think you need a bit of work to do.
Friday, November 07, 2008
Fable 2 vs Fallout 3: it's all about the choices, baby.
Today I just finished Fable II (Fable 2). It's a fantasy adventure where you mold your Hero; good or evil, pure or corrupt -- your morality affects your standing, while your purity affects your physical appearance. At first it seems exciting, the concept of being able to mold your Hero, and through them, the world around you. The game is about choice: do good, do evil, the world shaped through your selfless sacrifices or diabolical deeds.
You're given a lot of choices to make -- some of them drastically alter the world of Albion. If you've played Fable I (Fable 1), you've probably gathered by now that there's an event in the game where a lot of time passes. This time-lapse let's you really get the breadth and weight of your actions. There's only one small problem: you don't really seem to care.
First, the changes that come about from your choices aren't really all that surprising: good intentions, good results. There's no subtly here, and maybe that's intentional, in the sense that Fable II is trying to weave a "traditional" fairy tale where good is good and evil is evil. That's OK.
The second problem is more grievous: you just don't care. For the life of me, I just wasn't able to care about the choices I was forced to make during the game. At first, I played the game as a noble hero, because I was fresh and inspired. Then there came a point where I was simply playing the good guy so that if I played through the game again, as the most dastardly villain the world has ever known, there would at least be fresh results.
In the end, I felt as if I was just sloughing through the game to finish it: I rushed through all good/evil quests, skipping from town-to-town rather than walking there, all so that I could get to the last main event. I'm a completionist in the sense that I wanted to see all the "good" choices, even though most of them were pretty obvious.
Adding insult to injury, after I started the last main event, something happened that immediately made me care, for the first time, about what was going on, and I began to anticipate the next time I would be able to make a "choice." ... Except you're not able to make a choice. You have absolutely no control, and it is maddening, because at that moment, it was all I could think about. It was incredibly frustrating. You'll know what I'm talking about if you've just beaten the game, and if you haven't, you'll know it when you see it.
Anyway, shortly after that, the short fight that followed, and the very anti-climatic ending that was the finale', I was done. I recall reading about new quests that can only be completed once you're done with the main plot, but I just don't care enough about the experience any more to bother. I'll play through it again, of course, 6 months from now or maybe more, for the achievements if nothing else, but it's not something I'm feeling excited about, so I set it aside the minute I was done with it and popped in Fallout 3.
And God, what a difference.
Fallout 3 is a post-apocalyptic RPG by the makers of Oblivion, which was a generic medieval RPG. Unlike Oblivion, however, Fallout 3 is fun. =D
There are choices to be made in Fallout 3, just like Fable II; this game too revolves around the concept of influencing the world around you by your actions, but the choices you make here are more immediate, meaningful, and by no stretch of the word, fun as hell.
During the first hour, the game's introduction, you're introduced to a few characters: the love interest, the leader, the crazy bastard, the friend, the mysterious main plot... you know, the typical stuff. The characters are recognizable and easily related to, you may even get attached if you take your time.
Anyway, as they're setting up the plot, The Friend gets murdered by The Crazy Bastard, by the order of The Leader. You're told this, confidentially, by The Love Interest, who is the daughter of The Leader. She of course says there's nothing you can do, you gotta escape now, before it's too late!
So you're on the move, creeping through the underground vault trying to avoid The Leader and his goons, and you come across The Friend's corpse. And, shortly after, you also come across The Crazy Bastard and The Leader interrogating a frightened young lady. And here, the game gives you a choice: go inside the room, ignoring the fact that there are guards nearby looking for you and will hear any commotion, and make a mess.
So, being me and no one else, I charged into the room, and put two shots in the back of The Crazy Bastard's head before he could do anything. Then I aimed at The Leader, and... paused. Because, for a moment, I wasn't sure what to do. The game was actually going to let me kill him; I knew it the moment the targeting reticule went red. But I knew if I killed him I'd upset The Love Interest.
I realized at that moment the game gave me a very interesting, very personal choice: ruin my relationship with The Love Interest to avenge The Friend, or spare The Leader to spare The Love Interest. I had already killed The Crazy Bastard, but The Leader was complicit in his death. But I asked myself, "Do I really want to risk it? She might never forgive me if I do it."
So I let his old crazy ass run away.
There was no "good" or "evil" choice here. Picking one over the other had no apparent tangible benefits. It was all about how you felt about the situation. Did I want to satisfy the thirst for vengeance and turn The Leader inside out? Did I want to spare him, if only for the sake of The Love Interest, his daughter? Hell, I could've just smacked him around until he was unconcious, but could I resist not finishing him off?
I think, in my opinion, that's where Fable 2 failed and Fallout 3, so far, succeeds: the nature of the choice.
In Fable 2, there's a good choice, and an evil choice, and no matter which you pick, you get a reward of some kind: morality points, purity points, gold or weapons or loot up to your eyebrows.
But in Fallout 3, sometimes the choice has no benefit other than how it makes you feel.
And it makes you feel good.
Thursday, November 06, 2008
IE7 blows.
Yay, IE!
Tuesday, October 21, 2008
"Go dance with the angels old man!"
The story is cliche and the dialogue classically RPG-like in the way it is delivered.
But it's effin' GREAT, man.
Don't bother getting the flight stick, though. No other game uses it. Too expensive.
Saturday, October 18, 2008
Is your site OpenID enabled? If so, don't make me register.
The only thing that compelled me to try (and succeed!) leaving a comment was their OpenID support: I am so done with creating a new user/pass for sites that I only bother with it if I feel I'll be using it a lot. Not so good for drive-by comments and contributions.
However, some OpenID enabled sites demand you register and create a user/pass for that site in addition. I understand why -- account recovery if your OpenID provider vanishes -- but in my mind that negates the the value add-in for OpenID. I wouldn't be using OpenID if I thought my provider was just going to ninja-vanish on me. If stackoverflow.com had done that to me, I probably would have left without bothering. It's just one comment after all, and I only visit the site once every few weeks, max.
Still, nice to know someone gets it.
Friday, October 17, 2008
Does Steve Gilmor come with subtitles?
http://www.techcrunchit.com/author/steve/
Seriously. Homeboy needs to take a deep, deep breather and burn his little black book of euphemisms 'cuz they just ain't working.
I think he's going for some kinda high-brow thing, but, uh, what comes out is generally unreadable.
Does he talk like that in real life?
Tuesday, October 14, 2008
Silverlight 2: still no webcam + mic support.
In my mind, a better alternative: just use Flash.
Update:
Added bonus -- most Silverlight 2 demos don't work in Firefox, even though the plugin installs fine.
Update 2:
Fantastic -- one of the demos crashed the entire browser. Think I will be avoiding Silverlight for a few versions.
Tuesday, September 23, 2008
Ubiquity Command: urlencode
Ubiquity, by the way, is totally sweet.
Run "command editor" and paste the block of Javascript below somewhere in the text field.
That's all you need to do. It auto-saves.
CmdUtils.CreateCommand({
name: "urlencode",
takes: {"what": noun_arb_text},
preview: function(pblock, what) { pblock.innerHTML = CmdUtils.renderTemplate(escape(what.text)) },
execute: function(what) { CmdUtils.setSelection(escape(what.text)); }
Wednesday, September 17, 2008
Jaiku: still in beta. I blame GAE.
(I'm probably totally, totally wrong.)
(but I like to hear myself talk.)
(er, type.)
Or maybe you were like me and just said, "fuck it, I'm not begging for invites."
Whatever.
Anyway, something -- I'm not sure what it was -- brought Jaiku to my attention again. This is the fourth time it's caught my eye: the first time was when it was announced as a serious, but closed, competitor to Twitter. The second time was when Google bought it, and the world was a twitter with sugary dreams of sweet sweet integration. That, of course, failed to happen, which was a major disappointment. The third time was... fuck, months ago, I think, when they announced their move over to Google App Engine. I'm sure your first thought on hearing that was, "finally, in a few months we'll see how Jaiku does in The Real World."
That, much to your overwhelming surprise I'm sure, also failed to happen.
Jaiku's development team just finished up the port to Google App Engine a month or two ago, according to an official blog post. Well, team? Maybe it's just one guy working really long hours: the public perception of Jaiku's slow development + lack of blog updates makes me wonder if any one person is at the helm of that bad boy, much less a team.
Anyway.
To celebrate this momentous occasion, they... uncapped invites.
Yes.
They uncapped invites. So now you can invite all your friends!
But you can't sign up for an account by your lonesome.
So, I'm going to hit you with a big WTF now: is GAE not scalable?
They did about 6-8 months of development porting Jaiku over to Google App Engine, and yet they're clearly not quite ready to unleash this thing on The Public At Large. Why not? What's the missing piece of the puzzle? Scalability? Wasn't Google App engine built for scalability?
I won't say that Compete is the Definitive Source for information, but take a look at this:

The numbers (you'll see'em if you click through the image) are:
jaiku.com: 98,106
appspot.com: 182,747
I'm going to move with the assumption that Jaiku is the single biggest GAE user. It's convienent for me to do so. (Am I wrong? Man, who knows. I think it's a safe assumption to make, but if you know otherwise let me know.)
So, looking at those paltry numbers (I'd have put Twitter on there, but it TOTALLY fucks up the graph) I have to ask, can GAE scale? I'm really grasping for a reason as to why Jaiku hasn't finally opened its doors for one and all yet. If you mention Jaiku you will inevitably be hit with a deluge of comments in the form of: "goddamn it, it's been X-months/years and they haven't added a single feature / fixed this outstanding bug / stopped sucking!" I think it's reasonable to extrapulate from that either they're "done" with the user experience, for now, or that it's hit the point of "good enough" and at the moment they're not really interested in fucking with it. I mean, it's not really reasonable, but I'm saying it is because I don't want to have to add a bunch of conditionals to every fucking sentance I make here.
They've been bought by Google. They've moved to Google technologies. They're ready, right? Why aren't they opening their doors and screaming "COME GET SOME!" to the Internet at large? Getting ready for a marketing push, maybe? Preparing some ninja-style corporate espionage against Twitter?
Or is the ultimate answer something much simpler? Maybe moving Jaiku over to Google App Engine -- the database-like bits of it, specifically -- has surfaced some critical flaws. Knowing this, they can't just throw open the doors, because the moment they do there will be the usual flood of users going, "Google product? Must have!" It'd be total embarrassment for Google to have the same kind of uptime problems Twitter suffered, you know, what with them being the mighty infallible Google and all.
Saying that GAE can't scale for Jaiku seems like a bit of a stretch, but the architecture of a messaging system (Twitter-like microblogging, etc) is very different from the architecture of a standard website; if you've been following the finally resolved up-and-down saga of Twitter then you're sure to know that by now. Different strokes, different folks, or something punny like that.
Now, we all know that Google's BigTable database (the same database that powers GAE sites) can scale, otherwise Google wouldn't exist as we know it. It scales quite nicely, actually, for it's problem domain. But does it scale well for Jaiku's problem domain: messaging?
Short version: Did Google try to shove the square peg into the round circle and leverage BigTable in a way that can't scale gracefully for Jaiku's messaging needs?
Well, I just got bored writing this, so now's a good time to kill this post:
Sidenote: Blogger's rich editor totally blows. Someone replace this thing, STAT.
Friday, September 12, 2008
Capistrano + Git: fatal: 'origin': unable to chdir or not a git archive
Short answer: you fucked up, then Capistrano fucked up right behind you.
SSH into your deploy target, go into shared, and then frag the shared_cache directory.
Then, cap deploy:cold.
Why?
It normally happens when you try to set your repository as a local filesystem path. Capistrano populates shared_cache with an empty Git repo, and then tries to pull in your repository, which it can't reach... but it doesn't frag shared_cache, so the next time Capistrano looks, it's there, and goes, "Hey, we've already built the repository cache, let's just call git fetch and update it!"
Good luck.
Capistrano + Git: Host key verification failed.
cap deploy:cold
Do this: ssh into your target machine (the one codes getting deployed on), and then ssh into the Git repo machine -- or just do a 'git clone' if that's not possible. Accept the key, and then you're golden.
Deploying Git over SSH (username, password) with Capistrano
Hard.
If your Git repo is accessed via SSH using a username and password instead of a public key, you're probably having problems getting it to work. Notably, the password prompt isn't prompting you for your goddamn password.
Do this in your deploy file:
default_run_options[:pty] = true
set :scm_password, Proc.new { Capistrano::CLI.password_prompt "SCM Password: "}
Using Capistrano 2.5.
default_run_topions[:pty] will fuck up your output, but it's necessary for reasons I don't fully grasp and after about 3 hours don't care to.
Friday, August 22, 2008
map.resources + has_one + form_for = surprise, mofo!
map.resources :cars, :has_one => :driver
You're probably expecting to use form_for like this:
form_for([@car, @driver])
That won't work. It'll complain about not being able to find the function, 'car_drivers_path' instead of 'car_driver_path'
Fix:
form_for(@driver, :url => car_driver_path(@car))
Hopefully in Rails 2.1.1 this will be fixed using a different, less crazy syntax:
http://rails.lighthouseapp.com/projects/8994/tickets/461-fixed-polymorphic_url-to-be-able-to-handle-singleton-resources
That is all.
Friday, August 08, 2008
The Grind.
I'm angling for some more Rails-based jobs than ASP.NET jobs, which means a slight pay-hit until I can amass a treasure-trove of my RoR proficiencies.
Not that I don't have plenty already that many, but they're mostly firewalled / intranet style. Need some public, grade-A consumer-facing sites to make this happen.
Thursday, July 24, 2008
Winner!
Silverlight pros:
* Fast.
* 2.0 would support IronRuby
* Easy
* Already have development tools
Flash & Flex pros:
* Installed everywhere.
* Tons of resources
* Lots of preexisting stuff I can look at.
* Similar to JavaScript
Since I already had the MS tools and Flex builder would have cost me some extra change, I was leaning to Silverlight -- until I found out it doesn't support Webcam / Audio!
When deciding on which major technology to use, always determine that all prospective contenders support your required features!
Wednesday, June 25, 2008
SproutCore?
I tend to judge a platform's ceiling by the farthest someone has taken it... so, any real life examples of SproutCore out there in the wild that don't suck?
Sunday, May 25, 2008
Google Gears vs Adobe AIR: the way I see it.
Good scenario: user browsing your site, internet connection drops, Google Gears can be used to save all the data until the connection is re-established and can be uploaded to the server. The website mostly functions as the user expects it to, with only minimal degradation of functionality.
Bad scenario:
UPDATE: Google Gear's LocalServer works at a lower level than I thought, so you can actually hit the offline version of a website without actually having to visit the online version first.
Adobe AIR: easily add value to existing web-sites with desktop application + integration.
Good scenario: user is browsing a site that lets him chat with other users. However, he has to restart his browser for some reason (FireFox 2 is being a memory-pig again, or he just installed a cool new add-in). He launches the Adobe AIR application that lets him continue chatting with his friends even as the browser is closed. He can also leave the application open to chat with his friends so he has one less browser window / tab to keep an eye on, get updates to his friend's statuses on his desktop, etc.
Bad scenario: user sees some exciting new features on your chat website, enjoys using them, but they haven't been added to the Adobe AIR application yet, since an Adobe AIR application is an application that requires updates, bug fixes, and new feature integration separate from your website.
That's how I see it, anyway.
Wednesday, May 21, 2008
Ugh. Amazon's POS MP3 downloader
Again.
So far it's crashed every time I've bought an album.
And, every time, I have to email customer service, get them to reactivate the download, and then hope the Amazon MP3 player doesn't crash this time.
I think this is pretty much my last purchase from the Amazon MP3 store for a long, long time.
Thursday, May 08, 2008
undefined method 'time_zone=' error?
undefined method 'time_zone='
Got that error?
Run this in your console:
gem sources -r http://gems.rubyonrails.org/That's for bleeding edge developer gems. It was probably put in your gem repository list when you upgraded to Rails 2.0 and then forgot about until now.
Saturday, May 03, 2008
ExtJS alternatives?
What are people using now? I've heard some people mention Dojo but also mention that it has really bad documentation.
Suggestions?
Wednesday, April 16, 2008
The opposite of sweet.
(if your a client of mine, wouldn't recommend reading this -- this could be about you!)
Another more serious problem I just noticed was that they don't have any kind of QA system in place. Oooh, yeah, I had a cloud full of "?!?!" Metal Gear Solid-style over my head when I realized one of the designers was testing a product. Bug reports were sporadic, didn't include steps to reproduce, and some bugs were missed entirely (but I fixed those anyway). All the bugs tend to be pretty minor (formatting issues, form validations) because I've got a keen eye and typically kill the "big" bugs as I'm writing the code. But, nobody writes bug-free code. That's why you need QA -- a bunch of motherfuckers that try to wreck your shit, and when they do, can give you a very detailed process on how they did it.
You ever get told there's an "error?"
Yeah.
"Error."

(I've always wanted to use this image!)
Anyway, I can't blame them too much. It's the typical growing pains of a software company -- one that has been working on small projects for most of its lifetime, then deciding to branch out into mid-sized projects.
But.
One thing that seriously annoys me is how clients are handled. For awhile (I don't know if they still are) they were pretty hands off with clients, meaning they weren't pushed for solid answers, or made to walk through the entirety of the site, or whatever causes a client to, the day before the site goes into production, go, "hey, this is all wrong, what were you doing?!"
This only affects me because that shit rolls downhill, so all of the sudden it's "hey man SUPER EMERGENCY #24241, we have stuff to do that should have been done a week ago but the client never bothered t o peek at the site until just now and we didn't really want to press the issue but anyone now you have to GO GO GO GADGET RANGERS."
Man. I never dreamed I'd be making that many relatively untested changes to a system that was due to go into production the next day.
I should have introduced them to weekly cycles and feature freezes. If you make any significant changes, deployment to production is pushed back a cycle -- that's enough time for QA, and for the client to make more outrageous demands in the meantime. Make sure the customers know about it, so you can finger them as the delay when it happens (and it will).
Anyway, RANT / OVER.
Tuesday, April 01, 2008
Just remembered why I hate CSS.
CSS Swag: Multi Column Lists
What's funny about that article is that the solutions get progressively worse the farther down you go, instead of better.
Sometimes I just want to grab Web browsers by the neck and scream, "PUT THE ELEMENT HERE, RIGHT HERE AND NO WHERE ELSE YOU JACKASS."