He-Man and the Masters of the Universe!

No comments:
Wow. It's amazing to watch these old cartoons again. It's pretty amazing to watch them and observe one's own reaction. The childish delight is still there, but it's buried under layers of critical thought. The overall affect is nostalgic but fundamentally unsatisfying.

Hulu is now offering offsets in their embedded videos; here's the introduction of Cyclops and his gamma glasses:

A neat musical device: the TuneStudio

No comments:
TuneStudioBelkin TuneStudio combines a bunch of neat devices into one: it's a hard-drive audio recorder (using your iPod as the drive), it's a line mixer, microphone pre-amp,  a USB audio interface, and a condenser thrown in for good measure. It looks good and although it retails for $250 you can pick it up at Costco for a mere $180.

I skimmed the user manual and discovered a few shortcomings, though. It doesn't run on batteries and requires a 12v 1.25A power adapter - this thing sucks a surprising amount of juice! While it records 16 bit 44KHz stereo audio, it does not maintain a distinction between it's 4 channels - basically this is a 4 channel line mixer attached to a 2 channel (left and right) USB audio interface. (The audio gets recorded to the ipod as "Voice Memos" - which then sync to the PC via iTunes). You can't avoid doing the mixdown.

Some might say that using an iPod as the hard drive here is gimmicky - Belkin could have released the exact same device with a built-in hard drive. But I think there's a legit reason to do it this way - this is a semi-casual device, and it's pretty neat to be able to use all that storage on your iPod as musical tape. How cool would it be to record a local band and then listen to the jam on your iPod on the way home? And as for making podcasts, it makes a lot of sense to preview your podcast on the target device. And also, it makes a lot of sense to get the audio onto the PC with iPod sync rather than connect a new device to the PC - it fits people's existing workflow better. Finally, it may be possible to couple the TuneStudio with some custom iPod software, providing an extensible and very powerful mixer platform based on, say, the iPod Touch. (When will Ableton port Live to the iPod Touch anyway?)

Why Internet TV isn't mainstream yet: notes from the bleeding edge

No comments:
Using hulu for about a year, and it generally rocks. Good replacement for cable/satellite television - I've been watching House, Fringe, 30 Rock, and The Colbert Report regularly. And the occasional SNL skit. The big NBC morning and news shows are chopped up into topical pieces so you can just watch the interesting bits. Hulu provides a news feed of  videos, although this is a very active feed so it kind of dominates the "all feeds" mode in most news readers. Still not sure if it's possible to subscribe to a feed-per-show. Very good audio/visual quality. Very annoying if your network goes down or slow. Nice to link to and embed videos in the blog, facebook. It's just neat to be able to link to a completely new part of one's life: the TV one watches. Hulu (and services like it) allow you to comment on it, criticize it, share it. Unfortunately some videos expire, making those URLs useless after a time, and meanwhile your commentary does not expire which creates a problem large enough to be noteworthy. It's particularly bad with hulu because they only warn about expiration when it's approaching. YouTube does not suffer from this problem (for example, consider the music video "Ooh Yeah" - it expired on hulu but is still live on youtube. OTOH YouTube audio and video quality is generally a lot worse than hulu, although this may be changingn with youtube's recent support for HD content). Really don't mind the Hulu commercials at all - they are short (15-30s) and, at least for TV episodes, they fit the narrative somehow (I remember feeling a bit awkward watching Firefly on DVD without commercials). It's cool to watch an hour show with 5 commercial breaks of only 15s each!

Ripped DVD, and video podcasts. Ripping a DVD is actually really nice if you have the hard-drive space, and if you have the time (HandBrake takes at least 2 hours to rip a movie). The biggest benefit of this method is reliability - the movie won't skip or stop if your network becomes slow or unreliable. It's also convenient: you can use the excellent "Front Row" application on the Mac (or the lesser Windows Media Center on Windows) to watch these movies, which is currently not possible with Flash-based streaming players like Hulu or YouTube (one tip when using HandBrake with Front Row: plop your movies into the iTunes Movie folder so that they appear in the Front Row menu.) I've only watched a few video podcasts - I downloaded some iPhone SDK videos, but was actually annoyed (and continue to be annoyed!) that they appear in Front Row movie menu along side "Harry Potter and the Chamber of Secrets". The quality of these podcasts remind one that they are designed to be viewed on a video capable iPod, and not a large computer monitor. That said, there are some television shows made available in this format, such as the Rachel Maddow Show on MSNBC. A small drawback is that the iTunes store is the go-to place for this kind of content, and I still don't feel comfortable surfing the web with the iTunes store. One reason I don't like the iTunes experience, for example, is that I can't easily link to podcasts!

Gaming. Gaming is more and more a viable alternative to passive TV watching. PC gaming is limited in the living room because of akward controls - the mouse/keyboard doesn't work on the couch. Ironically these are the controls that make PC games (and applications) so compelling. Modern consoles have many of the features of PCs (like wireless internet connectivity and web browsers) but the controls and interfaces are designed to work in the living room, a huge plus. The consoles are generally capable of movie and audio playback (the PS3 is a very good blu-ray player, for example). I don't have a console in my apartment, in part because I don't have the space but also because adding another box would increase the complexity of my simple setup considerably. (Of course if everything supported HDMI it would be a different story).

Cable, Satellite, and TiVo. In some ways Hulu is like a TiVo - in both cases you can only watch stuff that's already been broadcast. In both cases you watch fewer commercials. And indeed TiVo addresses several weaknesses of Hulu: first, it doesn't depend on strong network connectivity AND it caches the entire show, which ensures smooth playback. Second, the interface and controls are designed for the living room. Of course, TiVo is very expensive (the box, the TiVo service, and the cable service all cost money - the latest TiVo costs $600), but Hulu is essentially free. Also, TiVo box is not a generally useful PC and so is limited to doing one thing only. And it's proprietary nature means you pay a lot more for storage than with a PC. There are some HTPC projects out there that are frankly rather exciting, but aren't really ready for primetime.

Apple TV. I don't own it, but I think it's an interesting idea. Apple TV is a hybrid device: it distributes the PC "signal" to the living room (photos and music), but also serves as a signal source providing Hulu-like movies and TV shows - for a price. The ability to rent movies and TV shows with immediacy is an interesting idea, but one which obviously favors Apple's balance sheet. I think it's a bad proposition to spend $230 to give a company a turnstile in your living room; call me old-fashioned. It seems to me that the cable/TiVo solution is a better value, especially for those who watch a lot of TV. (Admittedly, most cable companies also put a turnstyle in your living room with Pay-Per-View!)



[Update: what is boxee? I don't know but I've signed up for the alpha]

John Resig and what we can learn about Useful Blogging

No comments:
John Resig is an inspiration. His blog is ultra-useful. It's clear, informative, and often cutting edge in the JavaScript/jQuery/browser space. His posts are often accompanied by helpful graphs and, more often than not, usable code and workarounds. I have been a fan of jQuery since I started using it this summer, and have continued to be impressed with it's creator's output. Even when he posts an opinion piece, it is on topic and respectful. The important question arises: what makes his blog so useful and how can we emulate it?

Consider a recent post about the accuracy of JavaScript timing. Now, an ordinary blogger would have posted something like "I ran across some odd results in my Dromaeo testing. Anybody know wassup?" But John went deeper, did a lot of testing, graphed the results, and posted what he found. Heck, he even included a graphic explaining normal distributions. (Basically, JavaScript timing in Windows/IE is very coarse - results are rounded to the nearest 15ms.)

By comparison my own blog is a bit of a ramble. It's true that I'm not so single-mindedly interested in browser programming. My programming interests run the gamut from scalable software architectures, front-end architectures, programmer productivity, prototyping, web design, and data design. And of course there's a sizable amount of personal items in this blog stream. But even so I daresay the overall quality of the blog has much room to improve.

I would like to create a new blog that is more like John's - focusing purely on my core technical interests, designed to be useful and educational, rather than just an invitation to discuss. It needs a new, simpler URL - like javajosh.com/blog. Since I only have about 30 (valued) readers a month I don't think the transition would be too bad. And I can always continue to post personal and "off topic" things to this blog. (An important question is what to do with on topic posts to the old blog, but I can tackle that one later.)

A demo of jMaki: yet another unnecessary abstraction

No comments:
Doris Chen posted an screencast of jMaki in use (with Netbeans and Glassfish). It's unnecessary because a) jMaki isn't a good idea, b) the tooling looks cumbersome, and c) the end result looked really bad.

jMaki isn't a good idea because it's a taglib that tries to normalize the use of many javascript libraries by abstracting over them. In principle it reminds me of Apache's commons logging api, which is designed to abstract away the differences between Sun's logging API and log4j. This pattern of bad idea pervades the Java platform, unfortunately. Successful projects use succesful implementations, not just APIs. It's important to know Tomcat, not just the servlet APIs, and it's important to know log4j, not the commons API. And it's important to know jQuery and it's UI plugins, not jMaki. To do real work you're going to have to know the underlying JavaScript library anyway, so why bother with an abstraction that will just get in the way?

The Netbeans tooling looks rather cumbersome. I've been (re)reading Donald Norman's "The Design of Everyday Things" and was struck with how unruly Netbeans looked in the screancast. It's all the little things Doris has to do - find an obscure menu item to check that a plugin is installed, center the dialog box on her screen, search through a list of completely unrelated plugins to enable the one she wants, etc. Or when she drags a widget into the JSP and has to right-click and "format" the badly formatted text every time. Since when does dragging stuff create text? And why can't it format itself?

The final blow was that the end result looked (and sounded) like crap. The fish eye widget was layed out wrong, and the google map was too large and also layed out wrong. Putting sound in the page was just a bad idea - that's like adding blinking text. (Just because you can doesn't mean you should!)

Apologists would say (at least) that I'm nitpicking. At least the tools worked; and none of those things I mention are show stoppers, and any programmer who can't deal with a few tool quirks doesn't deserve his salary. And as for the end result looking bad, this was a programmer's demo, not a designer demo - it can all be fixed with some CSS edits later, done by a web designer.

My response is this: the tools work, but encourage errors. They encourage small errors of setup and use. But they encourage a much larger error: the tooling's "map" of the system is not that of the programmer's (or at least not this programmers). I fail to see what a JavaScript abstraction has to do with SVN, and yet these things are presented together in a dialog. I fail to see how a collection of text is a "widget" or why dragging would create text. And yes, I fail to see why I need a JavaScript abstraction in the first place that appears to do little more than substantially increase the complexity of my system.

I feel that IDE's are little more than glorified text-editors, and begin to fail when they themselves introduce abstractions. In a subtle way, the tooling begins to dictate the programmer's mental model of the design- and runtime of his system. In this case, it's nice that Netbeans can easily add a taglib to your web project. But it's not nice that this capability is expressed as a "plugin". It should be expressed as a macro or script: a macro that adds a jar or two there, a line of code to web.xml there, and adds some new JSP specific snippets (particularly taglib declaration and taglib instances). It may even remind you that you'll have to redeploy to get the effect. One concrete difference between a plugin and a script abstraction is that the Netbeans plugin method requires that you select the "plugin" on project creation.

The end result should look good because this kind of programming is all about the front-end. Widget positioning and sizing is not a trivial problem to be swept under the rug! Either jMaki or Netbeans needs to take better care to provide better defaults. And too, programmers are (hopefully) wary of these "slap it together" demos - everyone knows (or should know) that slapping stuff together is the easiest part of programming. It's fitting it all together professionally and solidly which takes time, effort and skill.

Illustrator Ninja

No comments:
Here is 40 hours of illustration condensed into 7 minutes by the remarkable Chad Pugh:


iPhone Invisible Shield Review

1 comment:
invisible shieldI scratched the screen of my iPhone a bit on my keys, and resolved to get a screen protector. I purchased the Invisible Shield from amazon.com for about $12. I followed the directions closely, and almost immediately noticed a reddish discoloration, and some subtle mottling - not bubbles but subtle irregularities in texture. I also noticed that the touch sensitivity of the screen was reduced. On two occasions keys that I did not intend to press were pressed and held - and it was the backspace key (which resulted in the loss of two fairly long text messages). Last night I removed the Invisible Shield. The difference was remarkable - my iPhone screen was brighter than it had been in 3 months, and the touch screen deliciously responsive. It was like getting a new iPhone.

I estimate that the cost to produce what is essentially a sticker has got to be very small - less than $1, which makes the asking price of $12 very high. (products of this nature are generally marked up by a factor of 5 or 6 - 12 is very high).

Given all of this, I cannot recommend the Invisible Shield. Given the pace of technological progress, it is better to endure the occasional scratch and eventually replace the device, especially if the usability of the device is reduced by that protection. I think that my iPhone's screen can last 4-5 years if I can manage to avoid putting my keys in the same pocket as the phone!

This is a photo of the removed Invisible Shield, clearly showing the reddish discoloration. Frankly, against the white napkin it looks much more dramatic than on an iPhone.



Having fun in Silverlake

No comments:

_MG_1334small
Originally uploaded by Christian Garrido
I love the composition of this shot I found on flickr. A great moment.

The limits of human art

No comments:
It is remarkable that a human can create anything larger than what can be contained in a canvas, or on a single sheet of paper. Novels, cars, software...these are monumentally complex objects, and if their true complexity were ever to be appreciated, I doubt anyone would have the heart to attempt their creation.

Despite the inherent difficulty, people still create large works, and sometimes successfully. That success is rare and precious, and should not be taken for granted.

Whole Foods mixed message

No comments:

Pink salt from the Himalayas. Millions of years old and harvested for
Whole Foods customers to the tune of about $16 per pound.

This is an example of a dilemma faced by Eco-tourists - they love
nature and want to preserve it, but they also want to hike in it and
enjoy it. But sometimes it's not possible to do both.

It's interesting to me that the same person who insists on organic
foods, recycled toilet paper and fuel efficient cars would buy
something so incredibly unsustainable as salt taken from the tallest
oldest mountains in the world.

Movie: How to Loose a Guy in 10 Days

No comments:
This is an old RomCom, and I'm only reviewing it because it was, like so many recent movies, both entertaining and troubling. Entertaining because it is in part a comedy of modern manners. Troubling because of it's rampant misogyny. And because it was recommended by a female friend I find it even more troubling.

The women in this picture are portrayed almost universally in a negative light. No, I get the premise - I understand that Kate Hudson's character "Andy" is trying to act like a crazy woman in order to push her love interest "Ben" away for the sake of a magazine article. I'm not really talking about those antics. I'm talking about her "real" behavior as a vapid, image-obsessed, vain, self-serving and manipulative woman. The other women who surround her are equally ethics-challenged and quite weak. "Mrs. Lauer", wife to the De Laur diamond magnate, is the classic cougar, in all her tasteless glory. In truth her over-the-top performance worked comedically.

The only positive role-models for women would be Ben's compeition. Two women given only cameos who seemed cool, collected, and focusedl. Of course, they still get beat out by the man though.

It troubles me that "reproductive fitness" for a woman in this movie (and in so many others) has been reduced down to having the right weight, clothing, and make-up, and avoiding certain behavioral faux paus. What happened to intelligence, compassion, energy, and kindness? Indeed, in this regard men hardly fair better in the movie - "reproductive fitness" for a man is reduced to six pack abs, a full head of hair, and a well appointed New York apartment, and the ability to put up with an excess amount of abusive female drama.

As an added little kick in the ribs, the movie portrays vegetarians and vegetarianism in a harsh light: vegetarian food is apparently tasteless and unsatisfying, and those who serve it are ugly, judgmental, and rude.

Idea: Annotated music streams

No comments:
The KCRW Music Stream is a wonderful resource - it's a free, commercial free, internet resource for a constant stream of thoughtfully selected, interesting music. My only gripe with it is that it can be hard to identify a song that you like. It's true that the DJ announces the artist/track/album on occasion, however this is not terribly convenient. It would be nice if the player (iTunes in my case) could display this information automatically.

Note that KCRW provides track information on the web, but it's not very easy to get to. It would be better to annotate the stream such that the information is already available in the player.

One workaround is Shazam - indeed it's a strange day when one holds their iPhone up to the computer speaker to identify a song! (This reminds me of another idea I had that would use OCR to make a bitmap brochure site SEO friendly...)

Anyway, the economics would seem to make this workable. After all, if I like a song enough to click somewhere, I'm probably willing to buy the song. (Indeed, this is Shazam's business model, from what I can tell).

The value of greed, fear, and vanity.

No comments:
Mortgages create fear, which in turn creates productive people, which is in the end good for everyone.

It seems that the most common motivations for success are fear and greed. Vanity and simple obsession follow a close second. Sheer joy in the work is perhaps the least common. In the west most people are motivated by fear - that is the true value of the mortgage culture. Instinctively people know that they need fear to function, to survive. While all people are motivated in the short term by greed, long term greed (usually mixed with vanity) is rewarded by the investor culture.

I make these comments without prejudice. In many ways I think any wealthy society owe fear and greed a debt of gratitude - without them, individuals and organizations could very well grind to a halt, too content for their own good. Indeed, there have been times in my life where I could have used a larger dose of fear to get me over a particularly difficult hurdle.

Consistent joyful motivation to excellence is quite rare. It is probably not possible without being an abstract thinker, and so able to derive pleasure and direction from an abstract ideal. The joyful motivation in its pure form seems more consistent with religious striving than with economic striving but n truth, I think that this motivation is shared by all at certain points in time. For example, the movie mogul (who is normally motivated by greed and vanity) may step back once in a while and appreciate the movie for the work of art that it is.


The Man is hosting a music festival!

No comments:
The Man is hosting this years misnamed "West Beach Music & Arts Festival". Check out their rules:
buzzkill

I mean, really? You're going to host a 3 day music event and do not allow blankets or chairs? "No outside food or drinks" has a rather obvious economic incentive - but I fail to see the case against blankets. And what about the ban on "Professional Cameras"?

I wonder how many artists would play this "festival" if they knew the rules?

Nice phishing attempt!

No comments:
What gets you is the implication that someone has charged something to your paypal account - something that is all too possible, alas.

Sweet! Another request to use a photo

No comments:
I realize it's not much, but this is the 4th time someone has asked to use a photo from my flickr stream. As an amatuer with very little experiene, I think that's just great. (I've no doubt that the really good photographers get that many requests per day - but I'm happy). Here's the image they like:



(For a book called "Superbikes", being produced in Japan.)

[Update: okay, I have to mention the irony here: this GS500 is in really really bad condition! If you look closely you can see the rust, and the tires are completely bald. There was a persistent oil leak that made riding it dangerous. I think it had something like 100k miles on it when I snapped this photo. It qualifies as a superbike only in the sense that it was super durable!]

Why templates are just a special case of AJAX

No comments:
I've been writing webapps with template languages for some time. Templates are a nice way to stay as close as possible to the original, static HTML. I've noticed that with Ajax in general, and jQuery in particular, one can get even closer to not modifying static HTML. I've also noticed that templating can and should be done on both the client and server.

There's a very nice Ajax architecture that basically dictates that you make a request against the server, retrieve meaningful data (rather than data embedded in presentation) as XML and then insert that data into the DOM. This is precisely how server-side templates work! The only difference is that the data is not serialized, and is generally some architecture specific form. For example, in Java the template data may be object graphs embedded in a HashMap.

A server-side template, then, could theoretically be replaced by an Ajax call, if the template worked on the client. For some years now, there's been XSLT support in all modern web clients, and XSLT can indeed be used as a templating language of sorts. However, XSLT is verbose, unwieldy, and therefore fails miserably in the only criterion that matters: does the architecture minimize the mutations you have to make to static HTML?

Actually, I think it would be a nifty thing to do client-side only templates, but for practical reasons I don't think such an architecture would fly (first, because some clients don't support meaningful programmatic execution of any sort, and second, because you'd have to take special care to avoid that initial loadind performance hit). Therefore one needs a solution that can execute in both places. XSLT can indeed work both server and client side, but as we've seen it's a less than optimal solution.

The approach I like is to use JavaScript for the templating language. Indeed, one codes the software as if it was client-side only Ajax, and then rely on runtime parameters to tell the server to exec that initial XHR on the server. This is made possible in a Java server by two pieces of technology, Rhino, and John Resig's env.js. It works, it's nice, and I'll write about it in more detail if there is interest.

A pretty sweet band: Lowen and Navarro

No comments:
This band was introduced to my by a neighbor - who is the niece of Navarro. They have a mature, soulful vibe with some pretty tight song writing ability. They sound like they'd be a good live show.

Idea: Recover my stolen stuff (dot com)

No comments:
Ok, so I just had a camera with lenses stolen, and I'm determined to find it. How can I do that? One thing is to register the SN with the national stolen goods registry (whatever that is - I could find no reference on the Internet).

Another thing I was going to try is to see if the combination of items was for sale in the usual places: craigslist, ebay, the recycler, and the local used photography places. But that's a lot of work, and I think that at least some of it could be automated.

So why not "recovermystolenstuff.com"?

My fetch

No comments:
My supernatural animal companion would almost certainly be a camel. Ill-tempered, intelligent, and totally adorable, just like me!


What bands are appropriate for live music?

No comments:
  1. Sigur Ros. NO!
  2. Yeah Yeah Yeahs. YES!
  3. Postal Service. Probably not.
  4. Tom Petty. YES!
  5. Jesca Hoop. Yes.

The girl at Native Foods

No comments:
She is beautiful. Very short blond hair, lovely big, sad eyes, and full lips. But I realized today that I can't put her into a story. I can't describe her well enough to even put her into a song. It's as if the singularity of her wowing appearance has prevented my creative faculties from functioning. And I don't know enough about her to go on reality. Is she a princess? A damsel? A fighter? A gentle healer? Or perhaps a barwench? Or an office worker, or a stay-at-home mom? Or perhaps an academic? Introvert? Extrovert? Does she challenge the world intelligently and with heartfelt energy? Does she succumb to the listless malaise that sometimes afflicts youth when no clear path presents itself? Is she doomed to an ordinary existence? Is she cursed to live in interesting times? Is she a student? Is she a lesbian? A drug addict? A philosopher?

Here is what I think.

I think she is an artist. I think she stays up late at night, singing folk songs around a campfire with friends. I think she only takes one hit of the joint that gets passed around. She doesn't say much, she is in fact very quiet, but she keeps a journal and tries to releive her constant worry of the world through writing about it, but it doesn't really help. She is bored by her job, but likes the people she works with. She loves dogs, but is ambivalent about babies. She likes boys with tatoos and long, matted hair. She doesn't like boys approaching her unless invited, which she does with her eyes, which everyone tells her are beautiful. She talks with her mom on the phone when she's lonely. She thinks with nostalgia of her childhood and worries that they were the best days of her life. She was the youngest child and has already rebeled in the usual ways and found it dull. She has an older brother, who moved to Chicago. She missed him a little bit, and wonders what the future holds for her.

Through the looking glass: the wonderful world of widgets

1 comment:
I was playing around with Sproutbuilder which is a really cool TTW WYSIWYG widget authoring tool. Now that's pretty cool, but it opened my eyes to a bunch of other synergistic tools, like gigya, which is something called a "widget network". Presumably this means "widget distribution network". Anyway, it appears that this is the tip of the iceberg.

You may wonder, what is so interesting about widgets? Constrained space design! Being efficient with the pixels you get is a kinda cool problem.

What does it mean for a company to issue new stock?

No comments:
Meryll Lynch will sell $8.5B in new stock. What does this mean for the existing ML shareholders? It means that new investors will be getting a piece of the company, but they'll be paying for it, which means old investors really are getting something in return for the stock dilution - cash. As an investor you only want this deal if your company needs a liquid cash shot in the arm, such that if it can't get it then your (undiluted) stock becomes worthless anyway.

The best deal for existing owners involves issuing the lowest number of shares at the highest price such that it's enough to save them. How do you determine these numbers? Seems to me that these numbers are largely a function of the current share price, outstanding stock count, and the estimated cash needed to solve the problem. And I have no idea what that function is.

The buyer wants the most shares at the lowest price, because in the event of a recovery the upside is much larger.

Another way to analyze the correct price for a new stock issue is to look at a hypothetical buyout. If the company recovers successfully, how much would ML be worth to a buyer (assuming 100% of sellers would be willing to sell at approx market rate)? (I believe this number is called "market capitalization".) Let's say that ML is worth $20B now but has every reason to believe it should be worth $100B, which it was 6mo ago (I'm totally making these numbers up). If there are 1B outstanding shares, should an investor think about buying at $20 or $100, or something else? Well, $100 makes no sense as there's no profit in it, even in the best case. $20 is a good number because their shares will be worth the same as everyone elses when they "hop on board" and stand to lose (or gain) exactly the same. However, $28.5 may make more sense: that's because if ML's value is $20B then gets $8.5B in cash, the company is, strictly speaking, worth $28.5B. So perhaps the new investors should spend $28.5/share!

So I guess assuming the sale goes well, it's actually a really really good thing for ML owners to get that cash - they see an immediate increase in stock value, and have the jet fuel needed to get past a rough spot and toward that $100B mark.

Earthquake

No comments:
Just had an earthquake. Felt pretty big - initial jolt, then an extended period of gentle swaying (over a minute - indeed we may still be swaying).

How to Server-side Google Analytics

4 comments:
There are many users who surf the web without a JavaScript enabled client - particularly users of the mobile web, and some portal users. The question arises: how do you track visitors with Google Analytics (hereafter "GA") that don't have a JavaScript enabled client? I recently took a stab at this problem by reverse-engineering urchin.js and re-writing it in Java. But it didn't work. This is my attempt to rectify the situation.

A bit of background: GA is normally installed on a site via a piece of JavaScript that executes onload. The script (which used to be called urchin.js and now is ga.js) examines the page and generates an HTTP request for a GIF from GA with lots of URL parameters. Based on those parameters (and probably the request headers) GA recieves all of its data. So our problem is in correctly constructing that URL.

But figuring out how to correctly construct that URL is tricky, and it's mostly undocumented. Google has taken pains to wrap the API in object-oriented JavaScript - but this is little help if you need to call that API from another language. Plus, the script is "minified" - and therefore unreadable.

After a little research I found a troubleshooting page that describes the HTTP request URL in more detail.

This is very helpful, but not sufficient for creating server-side verstion of the ga.js script. In particular the following questions are begged by the documentation:
  1. Most of the fields have to do with e-commerce, and can be ignored for basic analytics. Are they really optional?
  2. The fields that describe client capability are more problematic - can they be omitted?
  3. What use GA makes of the request headers, especially when the information is duplicated in URL parms?
  4. Why are encoded cookies sent at all? Can they be omitted?
  5. What is the "X10 data parameter"?
To answer these questions I will be constructing URLs with a text editor, sending them with curl, and seeing what impact it has on the GA reports. (Hopefully there won't be much latency or testing will be slow!)

[It occured to me while writing this that other mobile web developers must run into the same issue, so I search for "mobile analytics". Some interesting hits. But remarkably it seems like other folks concentrate on doing things like log file analysis. I personally think that's a bad idea. It also occured to me that we could use another analytics software, like the open source piwik, that has a more open tracking API. However switching analytics providers is only a last resort.]

[Google is probably wise to not provide server-side access to their analytics - they'd have to support a few more languages, and integration is a lot more difficult making the support load higher.]

The stuff that got stolen this weekend.

1 comment:
Well, it appears that there's been a theft this weekend. All told, I'd estimate I lost about $9k worth of stuff:
  1. Photography equipment. Canon 20D + 5 lenses (two of them L lenses), flash, photo backpack, memory cards. Worth about $5k.
  2. Cash. $2k. I feel particularly stupid about this. I had this much cash because I'd returned a computer to Costco, and sold another via craigslist, and was meaning to deposit it in the bank.
  3. Perhaps worst of all, my father's Rolex. It was a rather beat up Submariner, I've worn it perhaps twice, but it was an heirloom. Worth $2k possibly.
  4. An unopened iPod Touch that I'd been meaning to sell on craigslist. $300.
Oddly, they didn't take my laptop (an older Thinkpad) or my Bose Waveradio, or my CDs or even my 21" monitor. I know everything was in place Saturday, but I suspect that they hit me on Sunday when I was out because they didn't take my (brand new) MacBook which was here all day Saturday, but not Sunday. It's telling that they took only stuff that was highly portable (the camera and lenses were in a backpack).

Goodbye camera!



I filed a police report, registered serial numbers and the police have promised to dust for prints, but frankly I doubt they'll find anything - I have very little hope that my stuff will be returned, or the thief caught.

How do I feel? Pissed, mainly. I'm pissed at the loss, and pissed at myself for my stupidity - I left the door unlocked, thinking that my 2nd floor position would protect me, and believing in the basic decency of human beings. The camera and cash are replaceable - the watch is not.

Life kinda sucks right now.

Questions about Newport Backbay

No comments:
Went kayaking in the Newport back bay today, and noticed a few things:
  1. There is grass growing in the saltwater. It doesn't look that healthy, but it's green and living. How does it live?
  2. The soil underneath is very dark and oily. Why?
  3. There's a lot of trash in unusual places. Why?
  4. There was a bird that flew close to the surface of the water, with it's mouth open, the lower half in the water. It had orange coloration around it's beak. What kind of bird was that?
  5. There was another bird eating a fish. It was white with dark coloring around your head?

Jing: A SnagIt alternative for Mac OS X

No comments:
Wow! One of the big things I've been missing in the switch to OS X is an alternative to the excellent SnagIt, by TechSmith. And I have found it in Jing - a free (SnagIt costs $50) utility that is actually much better than SnagIt. Sweet! (Interestingly TechSmith makes both products.)

There are a couple of features that I rather like above and beyond SnagIt:
  1. A nifty sun on the upper left of the screen that invokes it.
  2. In-place editing of the image
  3. Coordination with IM, web, blog, and email. (capturing and sharing video is particularly slick)
  4. History! (This is an incredibly useful feature that shows all the captures you've recently done, whether to disk or to clipboard.)
Alas, there are two important features missing.
  1. Crop.
  2. Capture window contents.
There are some other SnagIt features that I barely used, like funky capture profiles (capture to printer), scrolling capture, and no doubt a few other things.

But overall I'm pleased.

[I would use Jing to show you how it works, but unfortunately it doesn't capture itself! ]
[I found jing by googling "screen shot osx" and reading a macrumors.com page.]

Top 10 concepts every programmer should know - a response

No comments:
Alex Iskold of RWW blogged about what programmers should know. (Alex was a software architect with IBM). Here was my comment:

Know a craftsman by his tools. A programmer (text editor) cannot create a whole system - he requires at least a graphic designer (Photoshop), a business person (Phone), and an admin (bash & vi). They make it pretty, sell it, and keep it running respectively.

Furthermore, there is a useful distinction between front-end and backend programmers. The front end guy must know HTML CSS JavaScript regex XML JSON HTTP TCP/IP plus a handful of JavaScript libraries, coding conventions, browser quirks, and a few specific JavaScript libraries, and some human interface guidlines. A good design sense doesn't hurt, either. He'll be using a text editor + firebug + http proxy + a small set of command line tools like curl. (This could also be a Flash or GWT specialist).

The back-end guy must know Java (or Perl or Ruby or whatever) plus a variety of core libraries (like Collections, JDBC) and a variety of application frameworks (SpringMVC, Rails, etc), and of course be a SQL expert. He knows about REST, caching, and scaling. The more he knows about the OS (process overhead, security, etc) and network architecture, the better. This is the guy you seem to be describing in this article. He'll be using Eclipse and a database client, like SQLyog, and the build system.

The admin's primary goal is to keep the application running, but he has a lot of programmer-like qualities, mainly for doing ad hoc scripts. He should know everything about the db, the os, and the network. He lives in SSH, the command line and in configuration files. This is the cloud computing specialist (although certainly the backend programmer should know something about it, too).


In the end I think that a laundry list like this isn't very useful: there's too much genuine specialization in programming these days (and quite a lot of fake specialization).

I left out some important roles though. Here they are.

There are other roles, like QA, support, product manager, project manager, team lead, and IT. Of these four product managers are rather an interesting role because a lot of people don't really understand why they are needed. What need do they fill? They are the distillation of "focus". They don't necessarily come up with the product, but whatever the definition turns out to be they work to make sure everyone understands the product, and makes sure that feedback gets to the right ears as development progresses, and after the product is released. They may also be tasked with tracking the performance of the product. If the team is focused (and small), and the performance of the product is obvious enough, a product manager isn't needed. The focus of the product manager is "functional clarity" and should be a great communicator, detail-oriented and understand the domain well.

The project manager serves a similar purpose as the product manager, but instead of answering "what?" they answer "when?", and takes action when things slip. Usually the team gives the PM a schedule they are comfortable with, and inform the PM about their progress as needed (usually at fixed checkpoints). Again if the team doesn't have a problem keeping schedules, a project manager isn't needed. The focus of the project manager is "the schedule" and might use a tool like MS Project. Ideally they've presided over similar projects so that they can spot missing or risky elements in the schedule.

Another role that is sometimes a bit confusing, is the team lead, or development manager. It's a confusing role because, at first glance, it seems like a conflict with the PM roles. This person hires, fires, mentors, grows, gives kudos and criticism, and assigns responsibilities, and chooses architecture. They are an experienced technical person with lots of skill and ability, and good communication skill. If a programmer has a technical problem, or if they make a technical mistake, the lead should help out. The lead also sets the tone for the culture, and has authority to define coding conventions and process. Setting policy, representing the team elsewhere in the company, and conflict resolution are key qualities. If the team has consensus on policy, and is always willing and able to help each other out, and no-one is ever hired or fired, no team lead is needed. Sometimes the technical aspects of this role are seperated into a high level technical role and delegated to a title like an architect.

You will notice that there is no mention of who defines the product in any of these roles. The prod manager clarifies. The proj manager babysits and worries. The team lead gets it done. Who is the product definer? The answer is: the guy with the money. They may choose to delegate that authority, and it often gets redelegated. Typically the investor picks a board who picks a CEO who might in turn delegate product definition to the product manager (for example). Or he may put a more complex policy in place for product definition. But in the end, the investor has some idea as to what they are investing in, and will generally be happy if they get what they paid for. (Of course they might also be happy if they get something they didn't pay for but which turns out to be wildly successful.)

Everyone wants to define the product. QA does, support does, even the sysadmin has a few ideas and pet peeves. The users sure as heck do. The product manager role exists to protect the development team (and everyone else) from constantly changing priorities, features, and demands. The risk for the prod man is that the CEO (or the board) will set a product definition policy and then repeatedly break it, undermining the prod man's authority and effectively making their role worthless. It often happens that product managers devolve into fall guys for inefficient and indecisive management. Basically, the people with the money have to have discipline.

Who should define the product? That's the million dollar question! At least in the software business, it's should be the person with the best grasp of the market (what's needed) and of the technology (what's possible). If you add to that the ability to get it done, and some money, you have a business. The definer has to understand the users and filter through their feedback. They have to understand what can be done. They have to understand the psychology of consumerism, and the entire gestalt of the product and it's position in the market, and in the mind of the user. And they have to be able to delegate! A completely specified product is the product itself, so it's impossible for a person to define everything for a complex product. In particular, the development team will need to make lots of little decisions, and possibly a few big ones, as they flesh the product out. (I commonly see two points of failure here: dev is not given authority to define product details, or dev is not being willing to define product details.)

How are products defined? If products were cheap enough, and the market large enough, we could create every possible product, release them all and go with the one that 'sticks'. We can make the product cheaper, and subsitute an expert opinion for the market, and approximate this approach using mockups and prototypes. So, the money champions an idea, requests a prototype, they give and get feedback on it, iterate, then finalize it with the product manager and authorize development. The users then get the "final" product and a similar, if slower, iteration occurs.

(This means there's a highly desirable pressure to minimize the distance between a mockup and production code - a great opportunity for architectural innovation!)

OMG what was Adam Sandler thinking?

No comments:
Adam Sandlers comedy album Stan and Judy's Kid is the worst thing I've ever had the misfortune to hear. Not only is it slow, it is incredibly profane (expected) and incredibly unfunny (not expected). I'm a huge fan of Sandler's, and just love "What the Hell Happened to Me?" and a few of his other works - but this was just terrible. What's funny about a drunk Bostonian murdering his friends? Or a peeper getting caught by the police (really, that's it)? Or a smooth talking black man who seems to be successful with women - right until he refers to his penis with a stupid (usually disgusting) euphemism?

I literally threw this CD in the trash - I'm not even going to sell it back to a used CD store. The fewer of these things in the world, the better!

Micro Templating from John Resig: a code review

5 comments:
John Resig (author of jQuery) wrote a little script that implements client-side templating in JavaScript. This is of particular interest to me because I had to write something similar a few weeks ago. This code has a bunch of interesting idioms and features in it. It's unreadably short (IMHO) but here's a breakdown, statement by statment (generally going from outside in):
  1. (function(){})(); This is a new idiom to me; it's just a terse way to define a function then execute it. Contrast this with the YUI idiom that is YAHOO.namespace = function(){}; which usually attaches to a browser event at some point to start things off.
  2. var cache = {}; A private data area. It's a hash because you have to index the cache on the input string. This is an example of memoization.
  3. this.tmpl = function tmpl(str, data){...}; A somewhat verbose way to declare a function, but it combines with #1 to install a function on the global object. Generally, this isn't a very good idea, as there can be namespace collisions there.
  4. return data ? fn(data):fn; This is currying, I guess. (Return the transformed data, or the transformation if there is no data).
  5. var fn = expr0 ? [expr1] || [expr2] : [expr3]; This is idomatic JavaScript. Well, the expr1 || expr2 is idiomatic - it's a common way to say "if expr1 doesn't work, try expr2", very similar usage in perl. The nesting inside a ternary operator, and with complex multi-line expressions, just adds to the fun.
  6. !/\W/.test(str) - \W matches non-word characters. This is a handy way to say "if str only has word characters". Knowing what this means requires both regex and RegEx knowledge, if you know what I mean. (I personally hadn't run across the RegExp.test() method before). [Thanks for the correction!]
  7. new Function("obj", [method body]); I didn't know this, but JavaScript allows an alternate method of doing meta programming, the Function constructor, which doesn't require eval(). The Function() constructor takes arbitrary numbers of string arguments, the first of which are interpreted as names of declared parameters, the last being the function body. In this script, you call it by assigning to a var then calling the var as a normal function. Neat.
  8. var p=[],print=function(){p.push.apply(p,arguments);}; No idea what this does. push() is an array function that returns a number, so I'm not sure how "apply" is even defined here!
  9. with(obj){p.push(' - I know what this does, but not sure why it's here. Seems like p will have only element at this point. Yes, I realize this is the "outer push". Egads!
  10. split().join() is a fast way to do static replacement (according to John).
  11. with(obj){}; Flanagan's book (JavaScript: The Definitive Guide) warns against using "the with statement". However Resig uses it here so that the template expressions are evaluated relative to the data object. (Anyone who's coded in VB knows the with statement - I personally really liked it and wish it was in Java and was usable in JavaScript)
So, there are some moving parts here that I don't completely understand, especially the use of push() inside the with() expression. I mean, why bother with that? I'm pretty sure the answer will come eventually, but for now I find myself puzzled, just like when the post-doc TAs would skip like 10 steps doing that line integral. I'm pretty sure it has something to do with that wierd print assignment.

Of Linux Haters and the GUI problem

No comments:
Just ran across this rather unusual blog, that purports to hate Linux. But it really reads like a series of letters from a jilted lover who would probably be taken back in a heartbeat. (Cue Joan Jett's "I hate myself for loving you"). Of course, this end of the relationship is a human, the other is the rather nebulous cloud of "FOSS" - or free open source software, so a reconciliation may be fundamentally doomed.

That said, these 'letters' are profane, funny, technical, and insightful. Nothing on the internet highlights as clearly the irrational attachment to FOSS in general and Linux in particular that some people have. (Indeed, one could spend a lifetime making fun of people's irrational attachments. And some do.) The key theme, at least for me, is that there is a jolt of rightousness that comes with using FOSS that can render one's perspective dangerously opaque to weaknesses. (I see the same thing with the iPhone.)

What's really interesting to me, though, is that his posts focus heavily on UI issues. For example, in a post of about Samba he complains that he's had to learn smb.conf 20 times over the years, but then quickly forgot it. I know exactly what he means. He then talks about his options for a GUI, Fedora and Webmin. But wouldn't it be cool if you could create your own GUI for this kind of stuff? Or even better some record of what you did?

I ask because I think the poster is wrong - the problem is not silos. Breaking down silos can be a good thing, but there's no reason why file sharing ought to be coupled to a GUI toolkit (as he seems to be advocating).

You may be thinking, well, even if there was such a thing it would be a mess - so many GUIs, it's the whole "there are too many choices" thing all over again. However, I'm pretty sure that would sort itself out, as great GUI creators would rise to the top, and thanks to decoupling, could be tried without fuss.

The piano problem

No comments:
Too many people own pianos. The piano sits there, a worse than useless piece of furniture. I say "worse than useless" because it is an unusually heavy item so it is difficult to move, and also because it implies that there may be some skill in playing it, even when there is not.

This state of affairs is great for piano manufacturers, and not so great for those wealthy enough to purchase a piano. So why do people buy pianos even when they can't play them? Two reasons: vanity and hope. Vanity because the piano is a status symbol, a traditional sign of success and an ostentatious display of wealth. Hope because people might believe that one day they might learn to play.

The piano problem isn't limited to pianos - it is just the poster child for "consumption as a substitute for self-improvement". The health industry is filled with exercise equipment manufacturers and gym memberships and diet plans and athletic shoes that all feed off of a similar psychology. I suppose that cars are also a good example (e.g. the SUV that has never seen a dirt road, let alone a true off-roading experience).

Alas, I feel the piano problem all too acutely because I wish I had a piano, and I actually play. I have a particular fondness for the Yamaha GC-1 baby grand - I like it even more than some much more expensive pianos. It's feel, it's sound...so wonderful. It's truly a work of art. And the thought of all the pianos in the world sitting there unplayed just breaks my heart.


Hellboy II: Disappointing

No comments:
Hellboy 2 is getting good reviews, and I don't know why. I went into the theater completely prepared to enjoy it, wanting to like it, and excited to see it. But in the end it was a series of beautifully rendered but disjoint fantasy vignettes that happen to be set in the Hellboy universe.

This movie was, at least in part, ruined by the excellence of it's trailers. I found myself anticipating pieces of the trailer at several points of the movie. This was a problem. Each scene was kinda ruined because rather than just watching the scene, I found myself waiting for a particular moment. It's the difference between listening to a lecture, and listening to a lecture with your hand raised. For example, when Red & Co. got their special eye pieces to see trolls, I knew they'd find that old lady troll who says "how do you see me?". When they get to North Ireland, I knew there would be a stone giant popping out of the ground. When they got to that creature with wings I knew it would have a face without eyes, but the wings would have eyes. And when Hellboy fights with that one creature, I knew at some point they would punch each other's fists.

Anyway, I really like John Hurt in basically anything, even a bit role (although he looked like he was having more fun in the last Indiana Jones flick, they wasted him I feel). Good to seem him back (in a flashback) here. Selma Blaire was looking unusually attractive. I prefered the previous movies voicing of Abe. Ron Perlman does a fine job as the title character - although I fear for the health of his skin. Does that poor guy ever get a job that doesn't involve hours of makeup before every shoot?

The script at times veered into obnoxious predictability that may delight a 12-year old, but bored me. The "romantic" scenes were particularly bad here. I've no doubt this style is consistent with the comic book, but some concession should be made to adult sensibility for a major motion picture, I feel.

There were some hints of interesting theme here regarding man vs "the natural order", but this is addressed far too briefly to actually be interesting. The plot, such as it was, revolves around an elvish plot to retake the earth from the irresponsible human caretakers using the implacable Golden Army as a tool. This offered some pleasant ambiguity about the "bad guy" - was the elven prince really that bad for wanting to take the earth back from it's irresponsible caretakers? Apart from a single, brief moment of doubt, it turns out that the prince really is that bad because freeing the earth means killing all humans. The ambiguity was resolved too quickly with without enough effort to be interesting. (The "moment of doubt" was realized when Prince Nuar unleashed a "forest elemental" to kill Hellboy, but before Red can blow the creature away, the prince makes a case for not killing it - he whispers into HB's ear that it is "the last of it's kind, like us." Of course, the Prince is really offering HB the choice between pulling the trigger and blowing a big baddie away and becoming Buddhist, and HB really likes pulling triggers, so it wasn't a smart move on Nuar's part to put HB in that situation. Of course, it might have helped if Nuar really had given Red a way out - for example, told the elemental that it no longer needed to kill Hellboy.)

It's a fun film suibtable for replay at a house part, perhaps, but I lament that it didn't hang together better and explore the nature theme in more depth.

iPhones observation at Jury Duty

No comments:
The iPhone seems to be everywhere. At jury duty yesterday I noticed a fair percentage (10% perhaps) with iPhones. Lots of people were playing with their cell phones, but the iPhone seemed the most prominent smart phone. On TV was Oprah - talking about the new iPhone. It's a perfect consumer-frenzy storm.

The jury duty "poll" seems particularly relevant as it's a very broad cross-section of society. After all, all we have in common is "being a citizen".

(Laptops were also interesting: most people had commodity PC laptops running Windows 2000 or XP. There were two MacBooks, my own and one other.)

Jury Duty

No comments:
Well I have to say that so far jury duty is actually pretty slick. There's top notch wifi access, bad coffee, and public-library level quality seating. It's like a coffee shop where no-one talks to each other. (Which is a pity because where else do you get to connect with people on a purely "citizen" level?)

The only thing is - I forgot the little detachable thing to my power supply (missing thingy pictured)! I really ought to keep one of those things in my bag. I'm sure there's one available not too far from here. Not sure if they'll let me leave though.

More thoughts about Mac usability: Dock versus Taskbar

No comments:
So far, my experience with the Mac has been quite nice. However, I
continue to struggle with the lack of keyboard shortcuts and keyboard
customizability. I also am trying to get my head around the Dock (Mac)
versus Taskbar (Windows), and Apple-Tab (CTRL-Tab for windows)
switching between windows/applications.

Ok, so there's a HUGE difference between PC and Mac which takes a
while to sink in: the Mac Dock (and the accompanying keyboard
shortcuts) are designed to switch between applications. The Windows
Taskbar (which is actually a persistant Explorer.exe process) is
designed to switch between windows.

Unlike Windows Vista which seems to want to do away with menus
entirely (which is a bad idea), the Mac puts menus front and center.
In fact, menus are such a strong inter-application convention that the
menu bar on the Mac is always on top and is always in the same place
and follows the current application. This is rather odd for a Windows
user, who is used to each application maintaining it's own title and
menu bar. It turns out in the Mac that the menu bar is often the best
place to quickly check which application you're in - this is opposed
to Windows where each Window identifies itself. A subtle issue arises
on a Mac when looking at an open, but inactive window - how do you
figure out what it is? You can go off of clues based on it's content,
however that's a relatively time consuming task.

Which menu and title management system is better? I'd have to give the
edge to Windows here, because the eye has to travel less distance in
Windows to identify the application. Also, the mouse and eye travels
less to activate and peruse menus. The pity is that the OSX method
saves no real-estate - Mac apps still require title and menu
equivalents: Mail, for example, has a title (the subject of your
message) and a command bar (which has menu-like qualities).

Windows has a slight edge, too, in that you can install an OSX
Dock-like utility if that's what you like. I'm not familiar with a
Taskbar addition for OSX. It's only a slight edge because I've found
those kinds of utilities to be either unstable, or more likely, not
terribly well integrated into the OS. Whether or not the Dock is the
perfect way to manage many running applications, it is implemented
well and is very consistent with the rest of OSX.

I'm also rather surprised that OSX doesn't have a feature that's been
available in Windows for a very long time, which is document preview
when alt-tabbing (it's available for XP as a TweakUI addon, and
natively in Vista). This is especially surprising since OSX features
document preview in the Dock!

Closely related to these issues is the matter of long-running
applications and their representation. In Windows, such applications
are conventionally given an icon next to the "clock", which is called
the "system tray"), and do not have any window associated, and do not
appear during an alt-tab switch. On the Mac, such applications (like
Skype, iChat, Mail, Cisco's VPN client) appear in the Dock as any
other application, and also appear in the Apple-Tab list. I believe
that Windows has a clear advantage here, even if it means making an
arbitrary distinction between "Background" and "Foreground"
applications.

One final way in which I feel the Dock is inferior to the Taskbar is
the lack of minimize/maximize repeatability. On the Mac, windows can
be minimized to the Dock (by default with the "Genie" animation). They
can be restored by clicking on them. But when restored, a Mac window
has no representation on the dock, unlike in Windows. So if I want to
maximize a window, take a look, then minimize it again, I have to
click the title bar, click the dock, then click the title bar again -
my mouse has to move. In Windows, I can click on the Taskbar
representation to achieve the same affect. Basically, the Taskbar
maintains a representation for all windows, whereas the Dock maintains
representations for only minimized windows. The Dock gives me no easy
way to "peak" at a non-visible window.

I think that the Dock could be improved in a few simple ways. The
easiest would be to designate a section of it for "background"
applications - this would have the effect of taking many apps out of
apple-tab switch order, and perhaps also making them less prominent on
the dock. (What's wierd is that there already is a section of the
screen like that, on the upper right, however this is mostly for OSX
usage, but certain apps like Skype and Adium use it too). But the key
weakness to the Dock, lack of per-window access and control, is tied
up with the universal menu bar, and the lack of per-window application
identification. That would need to change for a solid Taskbar
implementation on the Mac, and I suspect (but don't know) that this
assumption is baked into every Mac application at a very deep level.
That said, it might be enough just to enumerate open windows and forgo
per-window identification - even that would be useful.

The bottom line is that while I can live with the Dock (and I'll try
to post workarounds as I find them), I much prefer the Taskbar. I'm
kind of interested in seeing how hard it would be to write one. (It's
kind of interesting that there are so many 3rd party apps for
launching applications on OSX, like Butler and Quicksilver, but none
for managing already opened apps.)

[Update: there is another work-around for the per-Window control
problem: ensure that your applications only have one window! Terminal
with it's tabs, Firefox with it's Tabs, Photoshop and it's MDI
interface all do the trick.]

Posting from Email

No comments:
One thing that blogger doesn't tell you is that you must email from the exact email address associated with the blog in order for it to post!

I have a crush on Grace Kelly

No comments:
Of all the classic movie stars, Grace Kelly is by far my favorite: beautiful, intelligent, sophisticated - and possessing of that rare femininity that isn't displaced by a strong personality. A kind soul has collected a bunch of Grace Kelly and placed it online. Her voice sounds amazing! Oh, to have known her as a young woman, or at all.

People are Strange

No comments:
I'm working at my favorite coffee shop, near the beach, and once again wonder at the strangeness of people. A group of young people on my side of the street see a friend, a young girl, on the other side of the street. They yell joyfully, incoherently. The girl sees them, and responds with that wordless, surprisingly high-pitched sound that either means "I'm in severe danger" or "hi", depending on context. I have to wonder, what ever happened to using words?

Another observation sitting here: it's remarkable how few people seem to know how to parallel park. Yesterday I watched a guy try to park for about 10 minutes. That may not sound like a long time, but it's an eternity when parking. I found the dramatic triangle between him, his girlfriend, and the parking spot strangely compelling.

Dashcode for iPhone web development

No comments:
Interestingly Apple is applying the Dashcode IDE to iPhone web development. Although Dashcode was designed for makeing Dashboard widgets, this makes a lot of sense - I've written before how similar mobile and widget development is.

The nice thing about Dashcode is that you can get a working prototype going quickly. And it has lots of juicy iPhonish assets right out of the box - saving considerable Photoshop time.

The naughty thing about Dashcode is that it's just not a very good IDE, and the code it generates is rather awful, especially for mobile deployment. I mean, if you want to write a mobile app that degrades to a non-Javascript version, you are essentially out of luck. Additionally, the pages it creates are really heavy, and feature lots of inline JavaScript (which can't be cached.)

Granted, I just discovered Dashcode yesterday, but so far it looks like I'll just be pulling assets out of it and using my old stand by tools.

(Sorry about the lack of hyperlinks - feeling a bit lazy. Use Google!)

More MacBook goodies

No comments:
I'm not too thrilled with the Dock. But to make up for it, at least I have Quicksilver and Fink. Roughly, these are (significantly better) versions of Google Desktop and Cygwin, respectively.

What continues to astound me is the dearth of window management options on the Mac - everyone seems to think that the only problem with the Dock is it's launching functionality!

FreshBooks - looks like a nice invoicing solution for freelancers

1 comment:
Invoicing clients is not my idea of a good time - I'm a programmer, not an accountant. FreshBooks is a service that allows me to create and send invoices with relative lack of pain. (Looks like a Rails app, too). I'm going to try it out and see how it works.

As nice as FreshBooks looks, I'm actually looking for a more comprehensive solution that includes planning and time tracking. However, my needs are quite specific and it's something I'll probably end up writing myself.

MetaBlog: making the case for blog-through-the-mail

No comments:
ScribeFire has turned out to be quite unreliable, at least for long term storage of notes. At work I left my computer on for about 10 days, with Firefox (and Scribefire) open. When I came back, a memory leak (I think) had rendered the computer unstable and I had to force quite Firefox, and reboot the machine. When it came back up, Scribefire informed me that my notes file had become "corrupted".

Not good. I had a lot of work stored in those notes - mainly research, links, and a rather large idea bin.

There are other problems with Scribefire, such as it's inability to consume the Tab key for increasing indent (a problem which just recently arose). This is a critical problem for someone like me that uses nested lists alot.

I've come to a few realizations, in no particular order: Blogging through email is the key. This allows you to store 3 copies of your work, even in draft: a local copy, a draft copy on the email server, and a draft copy on your blog. Now that's a backup strategy. In addition, if you have multiple blogs, keeping track of where you're blogging to can be tricky - Scribefire was never very good at keeping all that straight. Finally, a single source of posts is easily searchable, and that's quite nice. Some difficulties that arise include tagging (some blogs are better than others - I still haven't found a way to indicate categories or tags in a blogger email). But of course a huge benefit is that the data remains in easily re-published form - you could publish your work to a different location if need be.)

On occasion you may want to post through the web or even with a tool like Ecto or Scribefire. The solution here is to funnel the post back into your email, with email notifications.

Now, this is all well and good, but Scribefire has a few really compelling features worth emulating - browser embedding foremost among them. An email client with strong composition tools embedded in the browser? What exists? A search reveals "not much".

Another feature that I would like to see in Scribefire is a "post to multiple blogs". This feature would either publish a copy to many blogs (not optimal) or publish to one, then publish a link to the others. This would be handy for those "globally interesting" entries that also have more specific applicability.

Tonight, I won

No comments:
Tonight, I won, and yet there is little joy in the victory. For some reason on this night of all nights, it hit me that poker is a game that rewards aggression, and is indeed not a wholesome game. This particular reason for decrying the game are substantially different from the other reasons that I've heard - that it is a sin against God, etc. No, I object to the game for the simple reason that it rewards and reinforces bullying and dominating behavior. In essence it reenforces the opposite behaivors that are generally desirable in a human being.

Now, there is something to be said for differentiating between a "game" and "real life", and some poker apologists might very well claim that I am failing to make the distinction here. But I wonder, if real money is on the line (hundreds, thousands of dollars), and if money is only obtained through the expenditure of effort in real life, then is not the game leveraged against "real life" and so becomes a part of it? I'd argue yes: once non-trivial sums are involved, one is risking (sizable) chunks of a real life.

This is different than other games in which one might be quite cut-throat (for example, Monopoly or Chess), but because there is no money riding on the match there is no moral difficulty. There is only a pleasant sort of competition and a match of intellect, and perhaps a somewhat frivolous waste of time, but there is no true conflict.

To be more specific, poker rewards aggression in that, once you have the "big stack" it is the "correct" play to become very aggressive and attempt to "steal" blinds and such. The theory is sound: the big stack is risking the same amount on an absolute scale, but much less on a relative scale than his opponents. On average it is better for the big stack to overbet his hand (under certain conditions) knowing that, on average, his opponents will not be able to take the proportionally greater risk.

And this is all find and dandy, until real money is on the line. Then all of a sudden the big stack is simply using his greater sum of money to make even more money, a concept which seems, on it's face, quite abhorrent. (I can't help but wonder where in real life does this financial dynamic exist? Are there places where simply having lots of cash allows you to make a lot of cash? I'm absolutely positive that there are.)

Anyway, I won a bunch of money based on these principles, and I don't feel very good about it. I played "correctly", having a big stack and generally being very agressive. I was caught once or twice, but on average I continued to build my lead, and finally won the game.

And the victory is as ash in my mouth.

The MacBook Keyboard

2 comments:
There are, alas, some keys missing from this keyboard. There is only one delete key, but no backspace. There are no page up page down keys. There is no home or end key (very handy in a text editor). It's funny how you aren't aware of the shortcuts you use until you lose them, such as CTRL+Arrow (move word), or even CTRL+Backspace (delete word) - yes, you can do these with the Option key, but it's funny how off putting the change is. I'm used to doing sequences like "CTRL+X CTRL+V CTRL+Left Arrow".

Home and End are actually very handy ways to get to the beggining and end of a text field - or a document. They are also missing. Sigh. Hopefully I will find a keyboard remapper and map some of the function keys to these badly needed additions. And in the meantime, there is a guide that tells you what shortcuts exist.

Client-side image compositing using background images

No comments:
I long for a day when such hacks will be unnecessary, hopefully when IE (particular lt 7) goes into obscurity. Anyway, that's an interesting hack because it uses background images rather than z-order. The basic idea is the same, though - you make an image appear rounded by placing a "frame" over it which is transparent, only letting a circular bit show through.

Vista vs. OS X Leopard

No comments:
I've had a bit of a wild ride this last week on my quest to find a good computer with 4G (or more) of usable RAM, and a better CPU, primarily for software/web development. (Eclipse + FF + MySQL + everything else is a bit of a hog.)

My first thought was to go with Vista 64-bit running on a quad-core speedy machine. The first machine was very fast, but very big and noisy, so it went back almost immediately. The second machine was a very nicely made Gateway machine running Vista Home Ultimate 64 bit edition. The machine was good enough that I was able to keep it long enough to realize how bad Vista really is.

The key problems with Vista were very poor driver support, very poor application support, and file manager and system preferences that are impossible to navigate and butt ugly. And then the sheer sum of minor niggles was very long - UI elements were moved apparently at random, and most menu bars were removed. Many of my utilities from XP wouldn't run. I spent some time trying to address these issues individually, but in the end I gave up, mainly because I knew it didn't have to be this hard.

It's true that I could have installed Linux (probably Ubuntu) on this machine and been happy. But then I realized how crazy the whole idea of moving to a desktop was (I like to move around too much), and how important usability was, and how there's a little company in Cupertino who makes products for people like me called Apple Computer.

And you know what? I bought one (white MacBook 2.1GHz 1G 120G Penryn, home-upgraded to 4G, 200G 7200RPM). And I'm quite happy so far. The system is pretty and quiet and unobtrusive (very different than most PCs! Even the Thinkpad, by far my favorite PC, has a rather muscular, angular look in comparison). But what is really a breath of fresh air is the OS, OS X Leopard. I've come to understand why we pay people to improve the usability of software products - they earn their money, many times over, both literally and, I would like to think, spiritually. I mean, after all, isn't it nice to create things that leave people feeling happier, or, at the very least, no worse off than when they started using the product?

I think the key ingredient to Apple's success is simply this: they got the drivers right. To have a relatively stable platform to develop for has got to be wonderful. As any web developer knows, it is a sheer delight to write an app that only has to run on a single, modern browser (that isn't IE). I am sure that the same holds true for operating system programmers. One can really optimize the experience when you know approximately what hardware the user has to work with. And this frees programmers and UI people to do what they do best: a strange combination of "thinking outside the box" and obsessing over details that yields beautiful, functional software.

There are several simple things that Apple gets right with OS X. For example, the whole "disk image" thing, or dmg, for installing software is really sweet. The Windows notion of treating zip files as psuedo folders (introduced in XP SP1, I think) is brain dead in comparison. Having a real command line is huge for programmers (and end users benefit too because a happy programmer makes happy programs). I can't tell you how glad I am to get past Cygwin - not that Cygwin itself was bad (it's been too useful for me to call it that), but that terrible terminal and the file system skew drove me batty.

What's really interesting (and wonderful) is the sheer lack of things I have to install. For example, I no longer have to install ctrl2caps because you can remap the caps lock key using built-in and easy to use system preference dialogues. I've not had to install a firewall, anti virus (although I may install that), spyware blocker, or any of those sysinternals utilities designed to help make up for and recover from Window's deficiencies (although I have to add that a process explorer equivalent would go nicely). I don't have to install any "helper" software for multi-display or network setup (e.g. the Thinkvantage utilities that come with the Thinkpad) - the built in stuff works about 10x better anyway.

Then there are the pile of peripherals I don't need to buy or configure. Wifi is built in of course, but so is bluetooth and a webcam - and the last two are far from common on PCs. I won't need a firewire adapter if I get into video. And there are a bunch of utilities I don't need, like CD burning software because the Mac software just works. I don't need to install a better Explorer because Finder works. I may not install Thunderbird because Mail works (well, a lot better than Outlook anyway). I don't need DVD playing software because the Mac utility just works. (And I can't say the same for the Windows equivalents).

That is not to say the Mac is not without it's issues. Some sort of media reader would make a lot of sense (particularly an SD card slot). But more seriously, the way the mouse moves needs to be more adjustable. I'm used to a very linear mouse response curve, and the Mac seems to demand that you use a lot of acceleration - I do hope to find a solution for this as my hand is already aching. It would be nice to have some sort of docking port for the Mac, so that the tangle of cords (well, the power and external monitor cord, anyway) would be both hidden and easy to (re)connect. A second mouse button on the laptop itself would be greatly appreciated. I would like an easier way to move windows around, along the lines of the (sadly buggy) NiftyWindows for Windows. And there are some Windows things, like the excellent Fiddler debugging proxy and SQLyog, that I know I'll have to run in a VM (I hear Parallels is good), if at all.


jQuery on a CDN - finally

No comments:
Google was kind enough to host jQuery on a CDN (they also have prototype, mootools, dojo and a few others). While they have a fancy loader script that offers conveniences like optional minification, you can also get the script the "old fashioned way", with something like this:

http://ajax.googleapis.com/ajax/libs/jquery/1.2.6/jquery.min.js

In truth jQuery just isn't that big (about 15kb) so this isn't really useful for saving bandwidth - it's more useful for improving first-time user usability by reducing their wait time by maximizing simultaneous downloads. Most modern browsers are limited to two connections to a given server, and so spreading the load across many servers is a Good Thing. I'm not sure if this limit has a name, or even an RFC. I do know that the limitation is designed to prevent unintentional DOS attacks.

While I don't see anything particularly nefarious about this, I would like to point out that Google and the Mozilla Foundation (who employ John Resig, author of jQuery) are extraordinarily friendly, and I'm glad Google is performing this service.

TechCrunch Pwns VentureBeat

2 comments:


That's some scoopage right there...

Instructables *almost* has it right

No comments:
Instructables almost has it right. They are so close. The problem is that they are treating instruction as static - that it's like content that you create, post, and walk away from. That's not how it is though. Instruction changes over time, people offer alternatives, and variants, but instructables doesn't capture any of that information!

"A quiet but impressive group of big-gun, for-hire developers."

No comments:
This just in: RWW reports that Pivotal Labs (which VentureBeat describes as a "quiet but impressive group of big-gun, for-hire developers.") has been hired to "fix twitter". Curious about Pivotal, I went to their site. Turns out they are a Ruby/Rails oriented group with background in Java and Smalltalk. They also have the "Pivotal Social Media Platform" socialicious which is what they are using to power most of their consulting gigs, apparently. Now that's interesting - a consulting firm that apparently retains their IP to resusable code they wrote? Weird.

Two petty injustices.

2 comments:
I believe that the sum total of petty injustice in the world far outwieghs the large ones that get all the attention. For every tragedy that ends lives or oppresses freedom, there are milions of smaller indignities born by millions of people every day. These injustices don't get a lot of attention, although they should. Here are two:
  1. Credit Card companies defrauding card holders who traveled overseas by increasing the base exchange rate and tacking on a few points over that as well. I would not have known except for a settlement packet in the mail. There are several points of injustice here:
    1. I didn't know about it until the case was over.
    2. The case settled for $313m. That seems like a very small amount because this case covered 10 years of fraud.
    3. THey make it hard to get your money.
      1. Most people will get the easy pay option $25
      2. However, you only get 30 days to make your claim
      3. Where does the excess go?
    4. The lawyers get 27.5% of the settlement. That's $86m. Oh, and that doesn't include expenses (which tacks on another $5m). Not a bad payout for 2 people for 6 years of work - it works out to $7.2m/year. Who are these hardworking individuals, you ask?
      1. Bonney Sweeney, 665 West Broadway #1900, San Diego CA 92101
      2. Merrill Davidoff, 1622 Locust St., Philidelphia PA 19103
    5. The injustice here is that this kind of case should strike fear in the hearts of lenders, as in "You know Bob it's a great idea to tack on those fees, but remember the legal firestorm of 2008 when we did it last time?" ; but all that's happened is that the lenders got of very cheaply and the lawyers got a super fat payday.
  2. Local law enforcement and their petty abuse of power. I've run into cops (OC Sherriffs) with bad attitudes before, who've told me off and grabbed cameras out of my hands, and generally acted like thugs. But the OC Weekly writes about an outrageous incident that happened 4 years ago. It is truly disgusting. No one got killed or seriously wounded, which is why only the OC Weekly is covering the story, and 4 years later at that. It's no less wrong just because no-one got killed. (There are a variety of letters from readers, that point out how common this kind of misbehavior is). The only remarkable thing about the incident is that the family is seeking legal recourse, and that it's getting any news coverage at all.
    1. The injustice here is that police are not held to a higher standard of conduct, but rather to a lower one. Who doesn't have sympathy for police? The work is hard, the pay is crap, and you are constantly dealing with miserable people. The terminus of this trend is the kind of widespread corruption you find in Mexico, which paralyzes the entire country and keeps the people in crushing poverty. (Indeed, the oppressor in Mexico is just these myriad of petty injustices.)
    2. What
      Omar Patel (the officer who's angry and confrontational attitude escalated and created the problem) fails to realize is that you don't get respect with anger and posturing. You get respect by helping people to solve their problems. An officer's mission is to serve and protect - and that doesn't mean your own ego, it means the very public you chose to assault.

Kung Fu Panda: Great Movie

No comments:
What a great movie. It's entertaining and offers a wide variety of positive messages. Technically stunning (especially on IMAX) and a good soundtrack to boot.

Flavors of Entanglement Review

No comments:
Alanis Morissette
Release: June 10, 2008

Alanis and I go way back, and I was very curious about her latest when I heard that she was going to try more electronic arrangements. She's never been afraid of technology - word was that she recorded "Jagged Little Pill" on home-studio ADAT recorders, state-of-the art for the time. Regardless, it was a revelation to the music world - here was a singer/songwriter who was bold, sexual, and angry. Her second album, "Supposed Former Infatuation Junkie" filled with interesting music and the insightful, if self-absorbed, lyrics of a young woman finding herself through repeated glotteral stops. My respect for her only went up when she released a hilarious Fergie/Humps parody, and when she revealed in an interview a fondness for Triumph motorcycles. Alanis' music is often about herself, or close observations of others, but is a record of her growing up.

"Flavors of Entanglement" is the 3rd album of hers that I own - it's the first album I've ever pre-ordered off of the iTunes store. I got a few bonus track and a special pre-order track (and those tracks are very important, as they eclipse the quality of the rest of the album!). But I also only get 128kb tracks, and no art. Not too sure about this iTunes business yet.

The first two tracks, "Citizen of the Planet" and "Underneath", are forgettable. They simply did not hold my interest. The third tack, Straitjacket, made me raise my eyebrows. A dance track? Dropping the f-bomb? The instrumentation is all saw-lead synthesizer, run through a limiter. The vocal track is heavily harmonized. Very strange. "Versions of Violence" is more of the same, although less dancable.

"Not as we", the 5th track, is more Alanis back in the "Joni Mitchell" confessional mode.

"In Praise of the Vulnerable Man" is Alanis back in "singing a letter" mode, similar to "Unsent" or "Head over Feet". But then a minute into it a saccharin backing synth that puts it more into Donna Lewis territory. I couldn't finish listening to this one.

"Moratorium" has the lyric which contains the albums name, and is a kind of eerie-sounding self-excoriation. Not bad. "I declare a moratorium on things relationship. I declare a respite from the toils of liaison." I know the feeling!

(OK, honestly I'm listening to this album as I write the review, and I'm on "Torch" and growing impatient. "Torch" is a down-tempo melancoly break-up song. I find myself wishing she would stop moaning about "missing his warmth" and start taunting him about whether or not she'd go down on him in a theater.)

"Giggling again for no reason" is a song about getting away from your life, driving down PCH without telling anyone where you're going, or even that you've gone. The content resonates with me deeply, but the music is not engaging. It's a great subject for a song, though.

I quickly skipped to the "Bonus Tracks". I'm glad I did! The 5 tracks here are uniformly better than the rest of the album. I was concerned for a bit that I'd wasted my money, but these tracks save the day! I really like "Orchid", "Madness", and "Limb No More". I could do without "On the Tequila" but it's a fun song!

Because I pre-ordered, I got a "Bonus Bonus Track", called "It's a Bitch to Grow Up". Musically, it's a good track, and the lyrics particularly resonate with me, so I'll wrap up this review with some of those lyrics:

...
It's been 33 years of restraining,
of trying to control this tumult.
...

[chorus]
I feel done.
I feel raked over coals.
All that remains is the case: that it's a bitch to grow up.

I've repeated this dance
There's still something to learn that I've not
I'm told to see that this is divine perfection
But my bones don't feel this perfection

...
I've known through the kicking and screaming
that there was no other direction to go
[chorus]