Thursday, November 06, 2008

IE7 blows.

Sorry, just felt the need to reiterate the obvious since I've got something that works in every browser but IE again.

Yay, IE!

Tuesday, October 21, 2008

"Go dance with the angels old man!"

Ace Combat 6: Fires of Liberation is one of those classic games that make you scream "YES!" "NO!" "You motherfuckers, you'll pay for that!" at your TV. I can't help but get really into it, even after having it for almost a year now.




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.

I made my first comment on StackOverflow. It's a site for questions and answers for the developer community at large.

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?

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.

An alternative workaround that is frequently suggested is using Flash, and pushing the captured data to Silverlight.

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

I just hacked up this quick Ubiquity command because I was cuttin' and pastin' URLs all over the place, and I needed some of them url encoded...

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.

(this is a rambling rant about Jaiku and Google App Engine.)
(I'm probably totally, totally wrong.)
(but I like to hear myself talk.)
(er, type.)

If you've heard of Twitter, you've probably heard of Jaiku at some point in your life, then immediately forgot about it when you realized it was invite-only. Or maybe you did some begging for invites, then tried to invite your friends on to the service, only to realize you didn't have enough invites for them all.

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:

KUNG-FU CHOP OF DEATH!

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

Getting that error?

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.

Getting 'Host Key verification' failed when you're trying to do this? You might be trying to deploy source in a Git repo, and the Git repo is accessed via SSH.

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

This one bit me.

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!

If you've got a route like

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.

Back to working full time again. Let some bills pile up, and now it's time to ninja-fu my way out of them.

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!

Recently had to decide between Silverlight vs Flash for a project.

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 am thoroughly unimpressed with SproutCore, but this is only based on the very rough demo application they host.

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.

Google Gears: easily add offline support to WEB PAGES.

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: user is offline, using your site, and their browser crashes... as far as I understand it, there's no way for them to get back to the offline version of the website without being online. They're basically 'stuck' until they can re-establish a connection.

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

Amazon's mp3 downloader crashed.

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?

Now that there's a big kerfluffle about ExtJS, one question:

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.

** RANT ON **
(if your a client of mine, wouldn't recommend reading this -- this could be about you!)

Ugh. Heading into "bitter client" territory again. Happens a lot, mostly because I'm the "guru" -- and you only hire a guru when you don't have one. If you have a company without gurus, you tend to have problems: a company I began working with had no Subversion or source control system at all (!). That changed pretty quickly due to necessity + there was no way I was going to do the "hey stop editing files on the ftp server so I can get your changes!" dance I've read about at TheDailyWTF. Not *even* if they were willing to pay for me to sit around and twiddle my thumbs.

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.

Read this, immediately remembered why I hate the current state of 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."