wonko.com

The eclectic musings of a bitter software engineer.

Archived Posts

Displaying posts 81 - 90 of 573

I'm not sure when it happened, but it looks like Yahoo! oneSearch has been updated with a beautiful new iPhone-friendly interface. You'll see it if you visit oneSearch on an iPhone (and only on an iPhone).

Unfortunately I have no way to take screenshots and I don't have a camera with me at the moment to take photos of it running on my iPhone, but it's really very nice. The page automatically scrolls down to hide the Safari toolbar on load, and the color scheme, icons, and widgets all match the iPhone UI styles much better than the standard oneSearch design. I like!

Things that suck about the iPhone

Wednesday July 11, 2007 @ 01:02 PM (PDT)

I've had my iPhone for almost two weeks now and I absolutely love it. It's the best cell phone I've ever used and the sexiest gadget I've ever owned. But there are a few things about it that really, really suck:

  1. iTunes

    iTunes is the only way to transfer music, photos, movies, or anything else to the phone, and the Windows port of iTunes sucks donkey balls. It's slow, ridiculously unstable, and completely ignores standard Windows UI practices. If it were possible to sync my iPhone by letting Chuck Norris kick me in the crotch, I'd choose the crotch kick over iTunes any day.

  2. No native IM app

    There are a few good Ajax IM apps for the iPhone, but they're all severely limited by the fact that they can't provide audio alerts and only work when Safari is the active application. As soon as you switch to another app, lock the phone, or even look away from the screen, they become useless.

  3. There's no way to email full-resolution photos

    The 2 megapixel camera on the iPhone is decent and certainly usable for casual photoblogging via Flickr, which is something I've been doing for years now. Unfortunately, when you email a photo from the iPhone, it sends a tiny 640x480 version of the photo rather than the 1600x1200 original. There is no way to change this.

    This means that in order to get my full-res photos on Flickr, I have to dock the iPhone, copy the photos over to my computer, and upload them to Flickr manually. That's retarded. Even my ancient Nokia 6600 from a few years ago could email full-resolution photos to Flickr.

  4. The calendar won't sync with iCal feeds

    Despite the iPhone's excellent Internet capabilities, the calendar app can't be synced with iCal feeds over the 'net. Just like everything else, the only way to sync the calendar is to dock the phone and fire up iTunes, and even then it will only sync directly with iCal, Entourage, or Outlook.

    I primarily use Google Calendar and Windows Calendar (which comes with Vista and happily syncs with Google Calendar) to manage my schedule, but the iPhone won't sync with either of those, even though they're both capable of publishing iCal feeds. On Windows, it will only sync with Outlook, and I don't use Outlook. Lame.

    The fact that the calendar app is otherwise very good makes this omission suck even more.

  5. No Ogg Vorbis support

    I know, I know. iPods have never supported Ogg Vorbis, so why should the iPhone? Truth be told, I didn't buy the iPhone for its iPod functionality; I bought it for the phone and Internet functionality. But it's so damn good at playing music that I've stopped using my trusty old iRiver H120.

    The only problem is that all the music I've purchased in the last two years is in Ogg Vorbis format, which the H120 supports very well. Now I have to convert all those Oggs to MP3s if I want to listen to them on my iPhone. I'm not sure what Apple has against Ogg, but I sure wish they'd get over it.

It may sound like I hate my iPhone, but I don't. I love it. I want to have like a million of its babies. The fact that I love it in spite of these major drawbacks should tell you something about how awesome it is.

Evil rodent

Wednesday June 20, 2007 @ 10:04 PM (PDT)

This is officially the best thing that has ever happened.

Update: I have no idea what this thing is. Chipmunk? Squirrel? Gopher? Prairie dog? Zebra? I don't know and I don't care.

The JavaScript Module Pattern

Tuesday June 12, 2007 @ 03:49 PM (PDT)

Eric Miraglia has just posted an excellent tutorial on the YUI Blog demonstrating how to use Douglas Crockford's awesome Module Pattern for JavaScript.

I learned about this pattern when I randomly stumbled across a page about it on Yahoo!'s internal wiki shortly after joining the company, and I immediately fell in love with it. I was amazed that I couldn't find any mention of it outside Yahoo! aside from a few hints on Doug Crockford's website, so I'd been meaning to write a tutorial, but never got around to it.

Luckily, Eric did the hard work for me, so now all I have to do is link to his article. Hooray!

One thing Eric's article doesn't mention, though, is how to extend a base module in such a way that the inheriting module still has access to members of the base module's private scope. It's a little tricky, and there are caveats, but luckily Douglas Crockford has gifted the world with the solution to that problem too. I'll try to find the time to write about it soon (if the YUI blog doesn't beat me to it).

The death of privacy

Sunday June 10, 2007 @ 10:00 PM (PDT)

If there's one goal driving the continued and unprecedented expansion of the Internet into every aspect of our lives, it's the idea that people should be able to connect to one another and to the collective knowledge of the entire world with as little effort and as much convenience as possible.

With the rise of social networks, blogs, and forums, all of which are almost instantly indexed and searchable, the Internet is much like a massive neural network and we are all neurons, adding our individual bits of information into the mix. And like a brain, the Internet has a capacity for memory that is both vast and imperfect.

In a biological brain, memories that are rarely recalled or that are insignificant tend to fade away. In much the same way, information on the Internet that is interesting and widespread is far more likely to be discovered (or "remembered") than information that is uninteresting or unimportant.

Social networking helps to ensure that interesting information is propagated and uninteresting information is not by aggregating this information in front of millions of eyes and thus encouraging its spread. The more people see a site that interests them, the more people link to that site and the more likely that site is to appear prominently in search results; thus the site is cemented in the Internet's memory.

This is all wonderful if we assume that the spread of information is inherently a Good Thing™, but what happens when those millions of eyes latch onto something that would otherwise have faded into obscurity? In an instant, a piece of information that was harmless when seen by a handful of people can become incredibly damaging when seen by millions.

Consider, for example, the recent hoopla over Google Street View. People in public places have no reasonable expectation of privacy and normally wouldn't be concerned if a photographer inadvertently included them in a picture of a building or landmark. You might not care if a few visitors to a gallery or readers of a photography magazine saw a picture of you—an anonymous person they don't know and will likely never meet—standing on a street picking your nose; but when the entire world can see you standing on a street picking your nose, and when they can email it to their friends, who can email it to their friends, who can email it to your friends, you've suddenly got a huge problem.

Consider also the recent case of high school pole vaulter Allison Stokke, who gained the unwanted attention of millions after a photo from a track meet was posted on a local website reporting on the event. Normally, the photo would have been seen by only a handful of people and would have been quickly forgotten, but one of those people thought she was attractive and linked to the photo. Other people saw it and were similarly interested, so they propagated the photo, along with other information they managed to dig up about Stokke. Within a matter of days, millions of people from all around the world knew who Allison Stokke was and were sharing information about her. Stokke, who neither expected nor wanted the attention, was understandably horrified.

There are countless other examples like these, some of them lighthearted, like the Star Wars kid or the Numa Numa guy, and others downright creepy. Once the Internet decides a piece of information is notable, it's unlikely to forget it. If that piece of information happens to be about a person, that person has no choice but to try and deal with the consequences—consequences that have been thrust upon them largely by the actions of anonymous strangers.

Short of dismantling the Internet and returning the world to the way it was pre-Information Age, there is no solution to this problem. There may be ways to mitigate it to some extent in the short term, but in the long term, it's only going to get worse.

It may be that our only choice is to accept that privacy is dying and may one day become extinct. In accepting this, perhaps we can learn to cope with it. Or perhaps there isn't any way to cope with it. Perhaps all you can do is hope that you don't wake up one morning and find your life suddenly exposed to the entire world.

Somehow I thought the future would be less scary than this.

JyteKeys adds hotkeys to Jyte

Saturday June 09, 2007 @ 08:41 PM (PDT)

screenshot This afternoon I whipped up JyteKeys, a Greasemonkey script that adds hotkeys for common operations on Jyte.

As you can see in the screenshot, there are hotkeys for pretty much every common navigation action, including browsing paginated lists of claims. There's also a hotkey for an advanced search I use pretty frequently which displays all claims you've commented on that have had new comments since you last looked.

Different hotkeys are available depending on what page you're on and whether or not you're signed in, but you can always press L to see the legend, which displays all currently available hotkeys.

Share and enjoy!

My boring-ass commute

Friday June 08, 2007 @ 09:59 AM (PDT)

Google Code doesn't want me anymore

Thursday May 31, 2007 @ 10:18 PM (PDT)

Apparently Google Code limits you to having 10 hosted projects unless you beg for a higher allowance.

I sent an email to the support address (as directed in the error message) asking for help two days ago and have received nothing but an automated response telling me to go whine in the forum.

Lame.

Update: One email, three forum posts, and nearly a week later, they've finally upped my limit. Sweet.

Painless JavaScript lazy loading with LazyLoad

Tuesday May 29, 2007 @ 11:09 PM (PDT)

With all the fancy JavaScript libraries to choose from these days, it can be hard to keep your website’s page weight down. Even if you’re using a small, sleek library like YUI or MooTools, there are often times when it would be nice to be able to load certain scripts only when they’re needed.

For example, if you load a bunch of fancy animation libraries to do something spiffy when the user clicks a button, but then the user does something else instead of clicking the button, then you’ve wasted precious time loading scripts you didn’t even need.

Lazy loading is when you wait to load something until you actually need it. It’s not a new concept, and the techniques for implementing lazy loading in JavaScript have been around for a while, but it can be a real pain in the ass to roll your own lazy loading solution, especially if you want it to be compatible with all the major browsers.

Luckily, I’ve done the hard work for you. All you need to do is include LazyLoad in any web page like so:

<script src="http://cdn.wonko.com/lazyload/1.0.4/lazyload-min.js"></script>

Then, when you need to load a script, call LazyLoad.load() or LazyLoad.loadOnce() and pass in the URL of the script you want to load (or an array of URLs if you need to load multiple scripts). You can also specify a callback function that will be executed when the scripts are finished loading.

The only difference between LazyLoad.load() and LazyLoad.loadOnce() is that loadOnce() checks to see if the scripts have already been loaded and makes sure nothing gets loaded twice.

// Called when all scripts have finished loading.
function loadComplete() {
  alert('Hooray for LazyLoad!');
}

// Load the YUI Dom, Event, and Animation libraries if they haven't already
// been loaded.
LazyLoad.loadOnce([
  'http://yui.yahooapis.com/2.5.2/build/yahoo-dom-event/yahoo-dom-event.js',
  'http://yui.yahooapis.com/2.5.2/build/animation/animation-min.js'
], loadComplete);

If necessary, you can also have LazyLoad pass an argument to the callback function or execute the callback in a specific scope:

// Pass an argument to the callback function.
LazyLoad.load('http://example.com/foo.js', loadComplete, 'custom argument');

// Execute the callback function in the specified scope.
LazyLoad.load('http://example.com/bar.js', loadComplete, this, true);

For more usage details, see the source documentation or the unminified source code.

If you’d like to use LazyLoad, you can either include it directly from my server as demonstrated above, or you can download it and host it yourself:

LazyLoad works in Firefox 2.x, Firefox 3.x, IE6, IE7, Safari 3.x (including iPhone) and Opera 9.x. If you run into any problems, please let me know.

recharge plz

Saturday May 26, 2007 @ 10:41 PM (PDT)

low bateries. recharge plz.

Copyright © 2002-2008 Ryan Grove. All rights reserved.
Powered by Thoth.