<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
<channel>
	<title>bytex64.net blog</title>
	<link>http://bytex64.net/blog/</link>
	<description>Encapsulated thoughts, mostly meaningless</description>
	<webMaster>webmaster@bytex64.net</webMaster>
	<item>
		<title>A Cheer for the Juicemakers</title>
		<link>http://bytex64.net/blog/e2359</link>
		<guid>http://bytex64.net/blog/e2359</guid>
		<pubDate>Wed, 11 Jan 2012 05:29:12 -0600</pubDate>
		<description>Most people, when they go shopping, arrive at the juice aisle and think, &quot;Wow, there sure are a lot of kinds of juice to choose from!&quot; They ponder the available selections, pick one, and go on their way.

&lt;p&gt;Other people, perhaps stranger or more adventurous folks, arrive at the juice aisle and think, &quot;Wow, look at all the juice that &lt;i&gt;isn&#39;t&lt;/i&gt; here!&quot; They ponder combinations of juices yet undreamt. They ponder the fruits of far away places, and what their juices would be like. They ponder fruits unimagined by man, lying in wait on distant worlds and in the minds of similarly curious botanists. They might grab a few bottles and maybe head back to the produce section, wild-eyed and curious.

&lt;p&gt;So here&#39;s to the artists, the explorers, the creators, and the dreamers. Here&#39;s to everyone who makes the world a more interesting place to live (and drink juice) in. :)</description>
		<slash:comments>3</slash:comments>
	</item>
	<item>
		<title>Nokia E6: Day 2</title>
		<link>http://bytex64.net/blog/e2354</link>
		<guid>http://bytex64.net/blog/e2354</guid>
		<pubDate>Mon, 14 Nov 2011 12:03:01 -0600</pubDate>
		<description>Nope, fuck it. I don&#39;t like this. Back to the Pixi.

&lt;p&gt;It&#39;s not that the E6 is a bad phone. It&#39;s really not. It&#39;s plenty capable, it just doesn&#39;t fit the way I do things. Over the past few days, I&#39;ve realized I have two distinct use cases for a phone:

&lt;p&gt;&lt;ol&gt;
&lt;li&gt;When in my home area, I rely heavily on messaging and searching websites like Wikipedia and IMDB.&lt;/li&gt;
&lt;li&gt;When traveling, I rely heavily on mapping, phone calls, and some messaging/web searching.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Pixi is really good at case 1, and the E6 is really good at case 2. But I don&#39;t spend the same amount of time in each case. I&#39;m in case 1 waaaaay more often than case 2. So if we&#39;re optimizing for the common case (and as a computer scientist, I&#39;m duty bound to), it just doesn&#39;t make sense to keep the E6. WebOS is just waaaay more streamlined for those everyday communication and search tasks. Even with the performance penalty, it&#39;s probably still faster at getting things done.

&lt;p&gt;The E6 is also not as fast or as battery efficient as I&#39;d hoped. Symbian is a much lighter system than webOS, and yet the E6 sat and chugged on some simple tasks. There was a noticeable redraw delay for some things like the mail widget or the conversation display, and Qt apps took their sweet time loading. The Pixi and the E6 were nearly matched in performance (806MHz vs 680MHz ARM11 and 256MB of RAM), but the E6 still seemed like it was struggling. I even ran out of RAM once. Either Palm really did some magic getting Linux down to Pixi size, or Nokia really doesn&#39;t know what they&#39;re doing with Symbian. It&#39;s hard to say which is less likely.

&lt;p&gt;And the way Symbian multitasks is just awkward compared to the fluidity with which webOS manages applications. Symbian^3 is a good example of how UX decisions are made based on the inertia of past successes. Palm moved past their 90&#39;s success and made webOS. Nokia is only just now doing the same by licensing Windows Phone.

&lt;p&gt;I&#39;m furthermore coming to realize that the sins of Android &amp;mdash; inconsistent UI, platform fragmentation, and unintuitive multitasking &amp;mdash; were invented by Symbian S60. And while both platforms are moving forward, they are still living up to the expectations set by smartphones a decade ago. That&#39;s not a world I want to live in.

&lt;p&gt;So I&#39;m sticking with Palm for now, even though they are now twice dead. I&#39;m holding out hope that someone will make a worthy successor someday. Right now, there isn&#39;t one.</description>
		<slash:comments>3</slash:comments>
	</item>
	<item>
		<title>Nokia E6: Day 1</title>
		<link>http://bytex64.net/blog/e2353</link>
		<guid>http://bytex64.net/blog/e2353</guid>
		<pubDate>Sat, 12 Nov 2011 02:41:22 -0600</pubDate>
		<description>My shiny new E6 arrived yesterday, and I&#39;ve been having a lot of fun getting used to it. Wait, did I say fun? That&#39;s not the right word. What&#39;s the word I&#39;m thinking of... hmm. Oh, yes. That&#39;s it. &quot;Trouble&quot;. I&#39;ve been having a lot of &lt;i&gt;trouble&lt;/i&gt; getting used to it. You know those dreams where you wake up in an unfamiliar place and you&#39;re trying to leave, but none of the doors lead to the outside and you can&#39;t find anything to break the windows? It&#39;s kind of like that. (The psychoanalyst line forms to the right...) Which is not to say that it&#39;s all bad, but &lt;i&gt;whew&lt;/i&gt;, is it different.

&lt;p&gt;First off, the obvious: The hardware is brilliant and the call quality is excellent. The glass and stainless steel case feels solid and weighty. It&#39;s likely that if I hurled it at someone, it would actually hurt them. That&#39;s important to me. The 8MP camera is good for a phone camera &amp;mdash; it does the cool stuff like face tracking and 720p video. A plethora of buttons means that functions are always at your fingertips. In addition to the qwerty keyboard, you have call, end, home, mail, calendar, contacts, volume, record, directional, select, and power buttons. One really cool innovation is the sliding lock key. To unlock the phone, just slide it down. Slide again to lock. And here&#39;s a really neat trick: hold the slider down to light up the flash LEDs as a flashlight. Stuff like this shows that Nokia put a lot of thought into how people use their phone.

&lt;p&gt;There are a few more cool party tricks, as well. The phone comes with an app called &lt;a href=&quot;http://www.vlingo.com/&quot;&gt;Vlingo&lt;/a&gt; that does speech recognition to do basic tasks like sending messages and searching the web. Just hold down the record button, talk, and it does its thing. The phone will also do AV-out throught the headphone jack and USB-OTG so you can plug USB devices into the phone.

&lt;p&gt;Symbian Anna adds some modern features on top of the classic Symbian experience. You get several homescreens with widgets, which feels a lot like Android. There&#39;s an app switcher that shows thumbnails that feels a bit like webOS. The interface is better laid out for touch, and the apps integrate with social networking services like Facebook and Twitter. It&#39;s still Symbian, though, which means the smartphone experience is pretty damn oldschool.

&lt;p&gt;This becomes painfully clear at times because the E6 has a brilliant 640x480 LCD screen (that&#39;s half of an iPhone 4 screen). A lot of software (even some of the stuff that&#39;s built-in) still assumes more modest resolutions, so reading things often becomes a squint-fest. And using S60 or J2ME apps can be an exercise in frustration because they were designed for older phones with a 12-key keypad. It&#39;s a little absurd when I have to hit an options soft-key to pop up a list of actions and then select Send when I have a perfectly good Enter key.

&lt;p&gt;And then there&#39;s Symbian itself. I really expected it to be a little snappier coming from webOS, but it is at times pretty slow. Sometimes it&#39;ll just stop responding for a bit (typically after installing a new application). The messaging app has a threaded view, but it&#39;s a bit awkward to use &amp;mdash; Enter inserts a newline, and the send button is way up at the top of the screen. Starting a conversation is three clicks at best. The applications menu isn&#39;t searchable, unless you use the Search app or widget, which works but isn&#39;t configurable. There are a hundred tiny little annoyances, but the worst part is that I can&#39;t really tinker with the insides and fix them.

&lt;p&gt;Some of the software is really good, though. Opera Mobile is probably the best mobile browser out there. The video player is the only one I&#39;ve seen that supports MKVs with subtitles. And Ovi Maps is probably the best mapping application ever made. But those are a few gems in an otherwise barren landscape. If the webOS App Catalog seems small, the Ovi Store is kind of a ghost town. Angry Birds, Snake, a handful of apps, and several hundred themes. Of course, there&#39;s a large library of old S60 apps, but I&#39;ve already explained the problem with that idea. :-/

&lt;p&gt;And then there&#39;s mail. I set up my IMAP account the first time unsecured because I hadn&#39;t yet installed the &lt;a href=&quot;http://wiki.dreamhost.com/NDN_Certificate&quot;&gt;Dreamhost NDN CA certificate&lt;/a&gt;. I set the fetch frequency to &quot;soonest&quot;, which ironically failed to fetch anything at all. After converting the NDN CA cert from PEM format to DER, I got it installed and set up my email account again with encryption. Mysteriously, &quot;soonest&quot; was gone and my best option was &quot;every 5 minutes&quot;. I guess Nokia doesn&#39;t believe in IMAP IDLE. At least I&#39;m getting mail now. I&#39;ve also tried to get Windows Live synced via Exchange ActiveSync, but all I managed to do was nuke my address book (restored from VCF with no issues, thankfully).

&lt;p&gt;Battery life is also not quite as good as I had expected. After a typical day&#39;s use I&#39;m down to 42%. I&#39;m beginning to realize now how well optimized the Pixi is; similar use would see the Pixi at about 20-30% by now. Considering that the E6 has 15% more battery capacity, it&#39;s not doing a whole lot better. I guess smartphones are still smartphones. &quot;If you use it, you lose it.&quot;

&lt;p&gt;So... not looking so good right now. Amazon gives me 30 days to return it, and right now, I&#39;m feeling like that&#39;s a likely outcome. We&#39;ll see how I feel about it after a week or so.</description>
		<slash:comments>0</slash:comments>
	</item>
	<item>
		<title>Mobile-Go-Round</title>
		<link>http://bytex64.net/blog/e2352</link>
		<guid>http://bytex64.net/blog/e2352</guid>
		<pubDate>Wed, 09 Nov 2011 03:11:22 -0600</pubDate>
		<description>Lately I&#39;ve been through a lot of phones. Well, only three, really, but that&#39;s more than anyone should go through in a month. Let&#39;s rewind.

&lt;p&gt;I was doing some remote terminal work on my Palm Pixi, and a long string of output bogged it down. I sat it aside, and had dinner. I came back to it later completely locked up, and after a reboot, I got a deluge of messages from a failed machine at work. &quot;No,&quot; I thought, &quot;This cannot stand. I need a dependable phone for work.&quot;

&lt;p&gt;So I thought deeply about that for a while, then disregarded those thoughts and bought an HP Veer.

&lt;p&gt;The Veer was a spiritual successor to the Pixi, but it didn&#39;t quite fill the same square. Where the Pixi was a fully featured but slow candybar, the Veer was a tiny hobbled slider. Most of the reviews for the Veer kept saying &quot;It&#39;s too small!&quot; but that wasn&#39;t really the problem. A small smartphone is a great idea (as evidenced by the Pixi), but the Veer was a victim of excessive compromise to achieve that ideal.

&lt;p&gt;For some reason, Palm decided that a slider was superior to the candybar. The slider, unfortunately, adds weight and bulk inside the case. Folded up, the Veer is shorter than the Pixi, but it&#39;s thicker and heavier. Unfolded, it&#39;s practically the same size. WebOS devices are power hungry, so they wedged as much battery as they could in the rest of the case &amp;mdash; and this meant it was non-removable. Because of the lack of space inside the case, they ditched the headphone jack and USB port, instead connecting it through a magnetic jack reminiscent of the Nokia pop-port. And that port was really the misfeature that killed it. In order to listen to music, you had to keep around a dongle. Ditto for USB and wired charging. And that means you have two more things to lose. What do you think the odds are of finding a Veer USB cable if you forget yours at home? Slim-to-fucking-nil. So that just wasn&#39;t going to work for me.

&lt;p&gt;(As an aside, I gave the Veer to my brother, and he loves it.)

&lt;p&gt;At this point, Alex scrounged up the old Pre 2 that we had worked with on a mobile game for EOH. And that worked pretty well for a while even though the keyboard was frustratingly cramped. And then I dropped it on cobblestones and fried the LCD display. So I bought a replacement on eBay. And that one worked pretty well for a couple of days until I realized it was failing to notify me of new messages. :-/

&lt;p&gt;So we&#39;re back at the beginning now. I&#39;ve switched back to the Pixi, which is actually quite a relief after all of that. I really do like the Pixi. It&#39;s a brilliant little phone whose only flaw is that it&#39;s slower than Congress passing a bill to raise taxes on the rich. I&#39;d still like something a little more reliable, too.

&lt;p&gt;So I&#39;m looking at Nokia again, because if anyone can make a phone that never fails, it&#39;s Nokia. Not that they always do, mind you, but they have. My first phone was a Nokia 6010. It never needed to be rebooted, lasted a week on a charge, and had excellent sound and signal quality. I&#39;ve ordered an &lt;a href=&quot;http://www.nokiausa.com/us-en/products/phone/e6-00/&quot;&gt;E6-00&lt;/a&gt; to try out, and I&#39;m hopeful that it&#39;ll be not terrible enough to work for me. Flawed though it is, webOS has unparalleled (and often imitated) UX design. It&#39;s going to be hard to give that up. On the other hand, not having to charge the phone every day is nice, too. And Symbian^3 is going to get updates until 2016. The latest release, Symbian Belle, is coming soon for the E6, and adds a proper notification system. So maybe it won&#39;t be that bad.

&lt;p&gt;We&#39;ll see in a couple of days when it arrives. :)</description>
		<slash:comments>0</slash:comments>
	</item>
	<item>
		<title>The Garfleburgers of Spalagnatz IV</title>
		<link>http://bytex64.net/blog/e2350</link>
		<guid>http://bytex64.net/blog/e2350</guid>
		<pubDate>Thu, 25 Aug 2011 20:21:13 -0500</pubDate>
		<description>&quot;Do you remember the garfleburgers of Spalagnatz IV? No, I guess you probably don&#39;t. Even nowadays putting a brain in a tin can is a tricky procedure, and it was downright dangerous when you were transcribed. I&#39;m sure a lot of good memories got lost then, but it&#39;s not like we had much of a choice. But don&#39;t worry, I&#39;m here to help recover some of those memories.

&lt;p&gt;&quot;Anyway, the garfleburgers... You begged mom to let you go to Spalagnatz IV for spring break, and she would only let you go if I came along. I wasn&#39;t too happy about having to play chaperone, but I was glad to get out of the house. So that July you and I hopped a spaceliner to Spalagnatz IV where we found the garfleburgers... Well, I should back up a bit.

&lt;p&gt;&quot;Spalagnatz IV was a natural paradise planet in the Hyperion cluster. It orbits a yellow star much like the sun, but it burned a little brighter, so the native plants were blue-green. Humans immediately saw its large tropical zone as an opportunity and turned it into the biggest beach party in the universe.

&lt;p&gt;&quot;After checking in at the hotel, you met this guy, his name was Venutias. Half Beloran, I think. He was also on spring break, and had been to Spalagnatz IV a couple of times before, so he offered to show you around. I, of course, didn&#39;t trust him one bit, so I made a point of it by tagging along.

&lt;p&gt;&quot;We went to the beach which was completely crowded despite there being several thousand miles of it. Their sand is pink... something to do with extra iron in the soil or something. We swam and had a good time. Turns out Venutias was an alright guy. Some stellahead jock tripped over our towel and then started giving you crap for it. Venutias told him in no uncertain terms to get lost, and the jock left without a fight.

&lt;p&gt;&quot;Anyway, we had dinner at this little burger shack he knew about which had the &#39;best garfleburgers on the planet.&#39; A garfle was apparently a native animal. Seemed kind of touristy. Their idea of a hamburger was pretty strange, too. Burger, chili sauce, onion, green pepper, marshmallow creme, and cream cheese in a small pie shell. Frickin&#39; weird. It was alright, though. You could barely taste the garfle over all the toppings, but I guess that was the point. I looked it up the other day. A garfle is a small scavenger animal, like a squirrel. Apparently they run rampant all over Spalagnatz IV, and selling garfleburgers to tourists is just one of the ways they keep the population under control.

&lt;p&gt;&quot;By the time we left, you definitely had a crush on Venutias. But like most interstellar romances, it was just not meant to happen. We went back to Earth and he went home to Balora, and we never saw him again. I suppose it was for the best. After you died and they translated your mind to digital, there wasn&#39;t much left for you in the physical world. Maybe some day I&#39;ll get to see what it&#39;s like in there.

&lt;p&gt;&quot;Anyway, I have to get back to work. I&#39;ll see you later, sis. I love you.&quot;</description>
		<slash:comments>1</slash:comments>
	</item>
	<item>
		<title>Like rats boarding a sinking ship</title>
		<link>http://bytex64.net/blog/e2349</link>
		<guid>http://bytex64.net/blog/e2349</guid>
		<pubDate>Wed, 24 Aug 2011 03:09:27 -0500</pubDate>
		<description>After HP gave up on webOS devices, they incited a bit of a panic. The announcement was so abrupt that webOS users everywhere have been recovering from whiplash and wondering where to go next. HP says &lt;a href=&quot;http://www.precentral.net/hp-not-walking-away-webos-say-execs-all-hands-webos-gbu-meeting&quot;&gt;they&#39;re not abandoning the platform&lt;/a&gt;, but at this point, I don&#39;t think anyone&#39;s willing to believe them. Even the faithful are helpfully &lt;a href=&quot;http://www.precentral.net/switching-away-webos-spe-has-you-covered-1&quot;&gt;providing exit options&lt;/a&gt; for their flock. By all accounts, webOS is a sinking ship.

&lt;p&gt;But it is the strangest sinking ship you&#39;ve ever seen.

&lt;p&gt;HP slashed the prices on the Touchpad to $100/$150 to clear out inventory, resulting in it completely selling out last Sunday. Best Buy&#39;s 250K units they couldn&#39;t sell? Gone. My good friend Alex said he was one of only a couple of people returning his, while there was a line out the door for people showing up to buy. Overnight, the webOS community grew by likely 300,000 users, with &lt;a href=&quot;http://www.precentral.net/coming-soon-touchpad-fire-sale-part-2&quot;&gt;more on the way&lt;/a&gt;. And the old guard is &lt;a href=&quot;http://www.precentral.net/new-touchpad-tips-apps-accessories&quot;&gt;welcoming them with open arms&lt;/a&gt;.

&lt;p&gt;This &quot;&lt;a href=&quot;http://www.precentral.net/accidental-userbase&quot;&gt;accidental userbase&lt;/a&gt;&quot; has caused a sharp spike in webOS interest. PreCentral was having trouble staying up under the load, and apparently app sales are &quot;Way up.&quot; HP wanted to be #2 after the iPad, and it looks like they might succeed at this rate. And all they had to do was kill the brand and lose $200 on every unit sold. This enthusiasm will wane, of course, since the Touchpad has no future. But where HP has given up, homebrewers and hackers are likely to keep the platform going for some time.

&lt;p&gt;The software of webOS has always been a little... quirky, and the hardware hasn&#39;t always been up to snuff. But the community behind webOS has always been the most solid part of the platform. Emboldened by the fire sale gains, some are &lt;a href=&quot;http://www.precentral.net/webos-o-s-campaign-save-our-platform&quot;&gt;banding together to help save webOS&lt;/a&gt; (for whatever that&#39;s worth). I mentioned PreCentral&#39;s welcome above, and webOSroundup has a &lt;a href=&quot;http://www.webosroundup.com/2011/08/the-webos-community-its-personal/&quot;&gt;pretty good introduction to where to look for help from the community&lt;/a&gt;. WebOS fans have been through hell and just got shot in the back for their trouble, so they&#39;re more than willing to help someone out if they&#39;re struggling. As long as those die-hards are still there, then webOS isn&#39;t truly dead.

&lt;p&gt;So here&#39;s to webOS&#39;s meteoric rise to the bottom!</description>
		<slash:comments>0</slash:comments>
	</item>
	<item>
		<title>Oh, look, just what I always wanted!</title>
		<link>http://bytex64.net/blog/e2348</link>
		<guid>http://bytex64.net/blog/e2348</guid>
		<pubDate>Sat, 20 Aug 2011 03:26:35 -0500</pubDate>
		<description>I&#39;m sure by now you&#39;ve heard the &lt;a href=&quot;http://www.precentral.net/breaking-hp-shutting-down-webos-device-operations-will-continue-explore-options&quot;&gt;death knell&lt;/a&gt; &amp;mdash; HP is quitting the webOS device business. Where that leaves the software business is anyone&#39;s guess right now. In fact, nearly everyone has been guessing about what&#39;s going to happen. Apparently not AT&amp;T or even the webOS GBU (nee Palm) knew that this decision was being made. We do know one thing from this, though: this whole thing is being handled &lt;i&gt;extremely poorly&lt;/i&gt;.

&lt;p&gt;So I&#39;m sitting here, typing this on a now defunct device, reflecting on the whole thing. Yesterday was mostly going through the six stages of grief:

&lt;ol&gt;
&lt;li&gt;&lt;b&gt;Denial&lt;/b&gt; - Nigga what?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Anger&lt;/b&gt; - Why the fuck would they do this a month and a half after the launch!?&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Bargaining&lt;/b&gt; - It&#39;s OK, the homebrew community will pick up the slack.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Depression&lt;/b&gt; - Now I&#39;ll never get to sell the apps I&#39;ve been working on...&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Acceptance&lt;/b&gt; - You know what? My Touchpad still works just as well as it did yesterday. Everything will be fine.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Wry humor&lt;/b&gt; - Hmm, I&#39;ve lost nearly $500 in virtual money playing Vegas Klondike solitaire. That&#39;s sort of like if I&#39;d bought a Touchpad when it was new. Oh wait. I did.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So it may be the end of the webOS world, but you know what? I feel fine. I took a step back and looked at my technological life and realized that nearly everything I use is obsolete or discontinued. I absolutely &lt;i&gt;thrive&lt;/I&gt; in the deadpools of consumer progress. I am like a &lt;a href=&quot;http://en.wikipedia.org/wiki/Plecostomus&quot;&gt;Plecostomus&lt;/a&gt;, sucking up the detritus of yesterday&#39;s products and turning it into something I can use and grow with. To wit:

&lt;ul&gt;
&lt;li&gt;My work laptop is a ten year old IBM ThinkPad T23. Next to it sits a homebrew AM2 Athlon PC, hooked up to a VGA-only 1280x1024 LCD screen that I keep around because I like its 5:4 aspect ratio. My keyboard is a Model M that&#39;s older than both of my brothers (which, for those of you not counting, is 23 years).&lt;/li&gt;
&lt;li&gt;My newest game console is a PS2, hooked up to a CRT TV through a mechanical switchbox that shares the TV with a Sony SMP-N100 media player.&lt;/li&gt;
&lt;li&gt;My media server is a dual Socket 940 Opteron server, which displays its console via a 20 year old DEC VT420 (for which I fabricated my own MMJ-DB9 adapter). The drives are hooked up via a PCI SATA adapter because the motherboard has neither PCIe nor SATA onboard.&lt;/li&gt;
&lt;li&gt;My car is a 1988 Honda CRX with 206,000 miles on it that starts every time and runs like clockwork.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So really, I just got what I always wanted: A tablet that works with me, is powerful and hackable, and is now obsolete. All is right with the world. :)</description>
		<slash:comments>0</slash:comments>
	</item>
	<item>
		<title>Web Workers: Not quite ready for prime-time</title>
		<link>http://bytex64.net/blog/e2347</link>
		<guid>http://bytex64.net/blog/e2347</guid>
		<pubDate>Thu, 11 Aug 2011 15:43:01 -0500</pubDate>
		<description>One of the near-future browser enhancements I&#39;m pretty excited about is &lt;a href=&quot;http://www.w3.org/TR/workers/&quot;&gt;Web Workers&lt;/a&gt;. Web Workers are a kind of heavyweight concurrency system, where you create separate worker threads and then pass messages between them. It&#39;s not the cleanest or most transparent concurrency model, but it works pretty well in the JavaScript world, where multithreading doesn&#39;t exist.

&lt;p&gt;A web worker is basically a separate JS context with a few helper functions and a message passing interface to your main browser thread. A Worker can proceed without interrupting the UI thread, enabling all kinds of things you&#39;d normally do in a timer loop. Typically this speeds things up significantly because you&#39;re not stuck waiting for UI to render or the timer to re-fire. I recently modified &lt;a href=&quot;http://dominionofawesome.com/cryptobox/&quot;&gt;Cryptobox&lt;/a&gt; to use web workers, and the speedup is pretty enormous.

&lt;p&gt;But...

&lt;p&gt;The Web Workers standard is currently a draft, and browser support is spotty. In particular, IE9 doesn&#39;t support it (not that I can blame them). In Opera, workers run in the same thread as the browser, meaning you won&#39;t get any speedup on multi-core systems. Chrome has the best support right now, followed shortly by Safari with Firefox somewhat further behind. Most mobile browsers don&#39;t support it, with the Blackberry Playbook being the notable exception (their browser is probably the most complete mobile browser out there).

&lt;p&gt;Workers come in the standalone variety or a shared version. The shared version allows you to share a worker across multiple windows/tabs, which could allow you to make a single database backend worker with caching, and share that cache across any number of windows that need it. It&#39;s a slick idea, but it&#39;s less supported than the regular Worker. Firefox doesn&#39;t have it, for example.

&lt;p&gt;Debugging support is practically nonexistent. Chrome has a Debug checkbox in its inspector, but it doesn&#39;t seem to do anything. Mostly, if any error happens in a Worker that stops its execution, you have to guess at what happened, make changes, and hope it worked. It&#39;s rather stone-age. Without proper debugging support, Web Workers are just a cool browser hack that will be used mostly by people who understand the spec (which is probably like three or four people right now).

&lt;p&gt;I look forward to it being finished, but for now, don&#39;t bother.</description>
		<slash:comments>0</slash:comments>
	</item>
	<item>
		<title>The post-PC world</title>
		<link>http://bytex64.net/blog/e2346</link>
		<guid>http://bytex64.net/blog/e2346</guid>
		<pubDate>Sun, 17 Jul 2011 03:57:07 -0500</pubDate>
		<description>Two weeks ago I went out and bought a Touchpad. I had been struggling with justification for the purchase, but when it came right down to it, it was really just a &quot;for fun&quot; purchase. The upcoming post-PC world is exciting, and I wanted to play around. So I got one.

&lt;p&gt;The device itself is great. WebOS 3.0 is fast and responsive. Improvements to Just Type allow me to add any search engine I come across. It searches applications, contacts, emails, browser history, calendar appointments, plus applications can add their own plugins to search their content, too. Also, I can start an email, message, facebook post, and more, directly from the card view. It&#39;s a system designed to feed information addiction, and it does it extremely well.

&lt;p&gt;Of course it also has the best multitasking and notifications of any mobile system, and it has a small but growing library of games ported from iOS and Android. It is a competent little system. Oh, and it does Flash.

&lt;p&gt;Of course, it does have its share of bugs and disappointments. After you install or remove an app, searching for apps with Just Type breaks. You have to restart before it&#39;ll work again. The browser crashes on some sites. The promised Kindle app is missing, as well HP Play and document editing. All of this tells me that the launch was rushed. All of it will be fixed in time.

&lt;p&gt;Some of the things on the horizon are really interesting to me. My prediction about the Touchpad running X has already come true &amp;mdash; I have a little debian chroot system set up so I have my Linux workstation inside my ultraportable tablet. I even got a bluetooth keyboard with the expectation of having something that could truly replace my laptop. But that&#39;s where PC and post-PC crashed headlong into each other at 75 MPH.

&lt;p&gt;The problem is that the keyboard mappings for webOS are designed strictly for webOS. In any application, I have no control over the Control, Escape, Tab, or any of the function keys. As you can imagine, that makes a Linux workstation pretty unusable. I&#39;m sure the webOS Internals folks are working on that, but it&#39;s pretty frustrating to be so close yet so far.

&lt;p&gt;And the keyboard integration in webOS itself is surprisingly poor. The Esc key is now a key that pops up the notifications area. Handy, but once you have that open, the keyboard does nothing to actually delete or activate the notifications. The windows key works like the center button, throwing you back into card view. But once you&#39;re there, you can&#39;t navigate the cards or activate an application. And Just Type is really handy when you can type quickly, but you can&#39;t explore any of the options it gives you without reaching up for the touchscreen. You&#39;d further expect to be able to scroll using the arrow keys in the browser. Nope. I don&#39;t even get Ctrl-C/Ctrl-V for copy/paste.

&lt;p&gt;Not that the keyboard is useless, mind you. I&#39;m typing this up on the Touchpad, but that&#39;s pretty much all the keyboard is expected to do on this system &amp;mdash; type up documents.

&lt;p&gt;So far, it seems like post-PC has taken away more than it&#39;s given. But these are all solvable problems, and there are enough nerds out there that they&#39;ll get solved one way or another. Probably by Microsoft. Mobile computing is really still in the pre-pubescent &quot;gee whiz&quot; stage where a lot of new ideas are coming out, but very few of them are actually improving our digital lives. Mostly, it&#39;s just a lot of exercises in design that would never get accepted in mainstream computing (like hiding apps that are running in the background &amp;mdash; didn&#39;t we get rid of that in the 80&#39;s?). It&#39;s a new and fun and exciting time where we get to reinvent the wheel in the name of progress.

&lt;p&gt;But if you&#39;re looking to get stuff done, you should probably come back in a few years.</description>
		<slash:comments>0</slash:comments>
	</item>
	<item>
		<title>Google+</title>
		<link>http://bytex64.net/blog/e2345</link>
		<guid>http://bytex64.net/blog/e2345</guid>
		<pubDate>Wed, 13 Jul 2011 03:36:30 -0500</pubDate>
		<description>Most of you know I&#39;m not a fan of social network software. I&#39;m especially disturbed by Google+. Maybe I haven&#39;t done a good job of explaining why, though, so I&#39;ll explain the problem.

&lt;p&gt;Do you remember back in the 90&#39;s when Microsoft got raked over the coals by the Justice Department for bundling Internet Explorer with Windows, giving them an unfair competitive advantage over Netscape? At the time, everyone thought they were the most evil company in the world for that because they feared that Microsoft would use their monopoly to pervert the web to their own ends. Nobody noticed a decade later when Google achieved largely the same goals by dominating the search engine market. I don&#39;t mean to imply that Google employed anticompetitive tactics &amp;mdash; Google was a superior search engine that really did succeed on its own merit. But Google has turned that success into a privacy strip-mining operation that would make Microsoft blush with shame.

&lt;p&gt;The curious thing about Google is that they&#39;re well-known for search, but they make the bulk of their money in a much more traditional avenue: advertising. Web ads have forever been a crapshoot. Smart ad agencies target their ads at websites that cater to similar demographics as the things they&#39;re advertising. Even smarter ad agencies get their demographic information by tracking users as they move from site to site. Google is the smartest ad agency of all. They can track your behavior not only through the little Google Ads boxes, but they can also learn more about your preferences through their search engine, Gmail, Google Talk, Picasa, Youtube, Google Docs, Google Reader, or anything else in Google&#39;s wide constellation of services. &lt;a href=&quot;http://www.google.com/ads/preferences/&quot;&gt;Google knows you pretty well&lt;/a&gt;.

&lt;p&gt;The disturbing part about all of this data collection is the complete lack of oversight. Google has pledged to not be evil with this data, but that&#39;s not really a guarantee. Even a privacy policy isn&#39;t a legally binding document. You cannot use the FOIA on Google. You cannot vote out Google&#39;s executives when they misuse your information. You have no recourse except what you can sue for. If Google is going to be responsible for personal and sensitive information, I need some solid assurance that they won&#39;t abuse it. And let&#39;s be honest, Google&#39;s track record on not abusing their position hasn&#39;t been great.

&lt;p&gt;So that&#39;s pretty much it, then. Google&#39;s reach into my personal life has gone far enough.</description>
		<slash:comments>0</slash:comments>
	</item>
	<item>
		<title>Programming is hard, you idiot</title>
		<link>http://bytex64.net/blog/e2342</link>
		<guid>http://bytex64.net/blog/e2342</guid>
		<pubDate>Wed, 15 Jun 2011 03:59:04 -0500</pubDate>
		<description>From the epic-not-understanding-the-problem department comes &lt;a href=&quot;http://www.leavesofcode.com/2011/06/we-need-programming-language-for-rest.html&quot;&gt;Chris Tompkins, who thinks programming is too hard&lt;/a&gt;. The tl;dr is that he learns Objective C, decides it&#39;s too difficult, and then says &quot;hey guys, this is too hard, we should make it easier.&quot; This sort of whine rolls around every so often, always accompanied by eye rolling and mean-spirited laughter from the programming crowd. What makes this one particularly interesting is that he actually attempts to justify his position. There&#39;s so much wrong with his argument, I felt compelled to take it apart piece by piece.

&lt;p&gt;He begins by attacking C &amp;mdash; not exactly a good start for understanding the current state of programming &amp;mdash; and then complains that the syntax is obtuse. He thinks C was &lt;i&gt;intentionally&lt;/i&gt; designed this way in order to provide a kind of &quot;you must be this intelligent to ride&quot; barrier to entry. I&#39;m sure it had &lt;i&gt;nothing&lt;/i&gt; to do with the fact that it was designed to be easily processed by computers back when computers were barely powerful enough to search text in a large document without having to go take a coffee break. Sure, blame the industry for not standardizing on something newer than C. But don&#39;t blame C for being machine-centric.

&lt;p&gt;He then starts making really strange analogies between cooking and programming. He compares C to programming the genetic code for a tomato, then wishes programming were like picking out ingredients at the supermarket. Not even the procedural cooking part, mind you, just the throwing ingredients in a bag part. Yeah, programming should be like throwing some objects together. Don&#39;t worry about structure, flow, or logic. The computer will understand what you mean, right? And then he wishes that when programming, you didn&#39;t have to understand the structure of a tomato to use it. Actually, we solved that one in the 80&#39;s. It&#39;s called Object Oriented Programming.

&lt;p&gt;Next comes the really hilarious part. He believes that programming shouldn&#39;t require advanced mathematics or &quot;non-natural linguistics&quot; like asterisks or periods to denote pointers or structure members. Seriously. He thinks programming should look like English.

&lt;p&gt;I&#39;ll wait here a moment while you process the sputtering disbelief at that statement.

&lt;p&gt;Welcome back. First, programming doesn&#39;t require advanced mathematics, unless you consider multiplication and addition to be advanced. The only places I&#39;ve used advanced math with computing was in getting my Computer Science degree &amp;mdash; definitely not a requirement for programming. Besides, if you&#39;re doing any math yourself, you&#39;re doing it wrong. You should be making the computer do it.

&lt;p&gt;Furthermore, English will never be a suitable programming language because programming languages need to be &lt;i&gt;precise&lt;/i&gt;. Saying &quot;Make the cat green&quot; to your computer just isn&#39;t going to cut it. Programming languages look weird because they&#39;re &lt;i&gt;completely unambiguous&lt;/i&gt; (or in the case of some languages like Perl, &lt;i&gt;mostly&lt;/i&gt; unambiguous). They have developed over the past six decades as ways of concisely and unambiguously describing to a computer what you want it to do. If you want to take a look at unambiguous English, go take a look at a legal document. It&#39;s about as understandable as computer code, and requires a similar amount of training (or arguably more) to decipher.

&lt;p&gt;He goes on to assert that it is not realistic to expect people to understand C, and that it is keeping children from learning it, and that everything would just be roses and sunshine if we could just make programming accessible to &lt;i&gt;everyone&lt;/i&gt;. I&#39;m sorry, Mr. Tompkins, this just doesn&#39;t wash. Curious children pick up on programming every day and learn despite the difficulty. When I was a child, they sold magazines aimed at kids and teens that contained programs in BASIC. That&#39;s what got me started on programming. And the complexity of programming isn&#39;t an impediment to many of my peers who do not possess degrees in engineering or mathematics.

&lt;p&gt;Certainly, programming requires understanding some difficult ideas. There&#39;s no way around it without simplifying its expressive power. But you can&#39;t just assert that people are &lt;i&gt;incapable&lt;/i&gt; of learning. That&#39;s just insulting.

&lt;p&gt;I would really like to insult Mr. Tompkins&#39; intelligence, especially since he wrote &quot;yes its possible&quot; in the same paragraph where he argued in favor of natural linguistics. I honestly don&#39;t believe he&#39;s too stupid to be a programmer. I think he&#39;s lazy, idealistic, and inexperienced, certainly, but not stupid. If he would just take a little time to learn about the history of computing and the advances we&#39;ve made since the 70&#39;s, I&#39;m sure he&#39;d see that there isn&#39;t some vast conspiracy to deny him his rightful place as a programmer. The only one who is denying him that is him.</description>
		<slash:comments>2</slash:comments>
	</item>
	<item>
		<title>Seattle: The Return pt 5: Microsoft and Music</title>
		<link>http://bytex64.net/blog/e2340</link>
		<guid>http://bytex64.net/blog/e2340</guid>
		<pubDate>Tue, 14 Jun 2011 15:05:32 -0500</pubDate>
		<description>The final day was short &amp;mdash; I was getting on a plane at 6 &amp;mdash; but it started early because checkout was at 11. After pinging Nancy a couple of times to wake up, she picked me up and we ate at bagel place whose name I forget. They weren&#39;t that good, anyway.

&lt;p&gt;We drove over to Redmond, where I got a brief tour of a small part of Microsoft. She took me around some of the newer buildings, Studios A through D. They apparently have a little mall where you can eat, bank, shop, and even get an eye exam. We also stopped by one of their libraries, where I played with a Microsoft Surface. The Surface detects input solely through a camera that looks at the touch surface &amp;mdash; it&#39;s actually a pretty impressive application of computer vision. Unfortunately, it still needs work. I had one app crash on me, and another refused to start. There was a fun music app that tried to email me the results, but I never got anything. And the input wasn&#39;t always responsive or accurate. Still, it was kind of fun.

&lt;p&gt;We then took a trip through the Microsoft Store, where you can get all the Microsoft, Bing, or Xbox branded swag you can stand. They even had a shirt with Clippy on it. The rest of the world is trying to forget, you insensitive clods!

&lt;p&gt;After that, we roved through a self-guided tour (read: advertisement) where I got to play with Kinect for the first time. Like the Eyetoy, it is a cleverly designed peripheral whose sole purpose is to make you look retarded. I played the game where you&#39;re sitting inside a fishtank and a bunch of asshole marine creatures are poking holes in your glass. You have to stretch and move to plug the holes. And then once you&#39;re done, it reveals that it&#39;s been taking pictures of you the whole time. If it were the home version, it would probably automatically upload those pictures to Facebook to complete the humiliation, probably adding some caption like &quot;LOL WHAT A DORK.&quot;

&lt;p&gt;There was another Kinect game on a projector in the corner &amp;mdash; some kind of soccer game. I tried it, but it ignored me. Nancy figured out that it was a two player game, and stepped into the field to play against me. She wound up for a kick... and launched her shoe at the screen. After the ensuing fit of laughter subsided, we fled before anyone could call us out on our shenanigans.

&lt;p&gt;We then headed into the city to go to the &lt;a href=&quot;http://www.empmuseum.org/&quot;&gt;EMP Museum&lt;/a&gt; &amp;mdash; a museum full of music memorabilia and science-fiction exhibits. Before we entered, though, we sat in the unusually perfect summer weather and watched a Peruvian band play. Or at least, Nancy said it was Peruvian &amp;mdash; they were playing guitars and pan flutes. I wouldn&#39;t really know. They were good, though.

&lt;p&gt;Inside the EMP, we first went through their new Avatar exhibit had just opened, which had a lot of really cool background-information on the technology and art that built the movie. I also watched a few great video talks from Ray Harryhausen, Harlan Ellison, and Nichelle Nichols. Last, I wandered through part of the Nirvana exhibit, where I could have spent all day listening to music and watching videos about that era of music that I was too young to appreciate at the time. Sadly, we had to go because I had to catch a plane.

&lt;p&gt;Nancy dropped me off at Sea-Tac, where I again missed out on any invasive gropings or scannings. The flight back was a bit rough, but I arrived on time at O&#39;Hare, where I was greeted by an oppressive wall of heat and humidity. It&#39;s good to be back. :-/</description>
		<slash:comments>1</slash:comments>
	</item>
	<item>
		<title>Seattle: The Return pt 4: History and Tragedy</title>
		<link>http://bytex64.net/blog/e2339</link>
		<guid>http://bytex64.net/blog/e2339</guid>
		<pubDate>Sun, 12 Jun 2011 03:07:41 -0500</pubDate>
		<description>For the final day of movies, we thought we had two movies&#39; worth of tickets left. Actually, it turns out Nancy miscounted, and we had one movie&#39;s worth of tickets left. Nancy bought more tickets to cover the last movie anyway. We&#39;d spend the day in Kirkland, popping up to Everett to visit my co-worker David for dinner, then back down for the final movie. Nancy had yuppified to the point of refusing to eat at a greasy spoon (or even understanding the term), so we had breakfast/lunch at the &lt;a href=&quot;http://brownbagcafes.com/&quot;&gt;Brown Bag Cafe&lt;/a&gt;, a local little family restaurant where the portions are big. Really big. $12 for breakfast may sound excessive, but it&#39;s actually more like two breakfasts.

&lt;p&gt;I learned two things about Kirkland. One, it&#39;s one of Google&#39;s Seattle area headquarters (the other is in Fremont). Two, it&#39;s apparently where old Seattle-ites go to die. There&#39;s plenty of &quot;senior living&quot; places, and the crosswalks have little flags you can carry so people don&#39;t run you over as you trundle across the street. The theater, the Kirkland Performance Center, was in fact next door to a seniors center.

&lt;p&gt;The first movie was a documentary about Russian/Georgian filmmaker &lt;a href=&quot;http://en.wikipedia.org/wiki/Mikhail_Kalatozov&quot;&gt;Mikhail Kalatozov&lt;/a&gt; called &lt;a href=&quot;http://www.siff.net/festival/film/detail.aspx?id=44347&amp;fid=206&quot;&gt;Hurricane Kalatozov&lt;/a&gt;. Kalatozov was a great filmmaker in the 30&#39;s until he ran afoul of the Stalinist censors. Later in his career, he returned to filmmaking with several films which are considered classics of Soviet cinema. I found it incredibly interesting as a look into the culture of Soviet Russia, a complete blind spot in my historical education thus far. Nancy was bored to tears (Sorry, Nancy :/).

&lt;p&gt;After the movie, we met up with Blake and set out for dinner. David was grilling, so we went to Trader Joe&#39;s and picked up some grillables. We made it to David&#39;s house almost accidentally after Blake&#39;s GPS took us through a parking lot. Dinner was good, but we had to run back to Kirkland for the last film: &lt;a href=&quot;http://www.siff.net/festival/film/detail.aspx?id=44318&amp;fid=206&quot;&gt;71 - Into The Fire&lt;/a&gt;.

&lt;p&gt;71 is a historical war film, set at the beginning of the Korean War. It follows a group of student soldiers who are assigned to defend a school from the advancing North Korean army. The movie is beautifully shot &amp;mdash; Blake drew apt parallels between it and 300. It&#39;s one of those manly tragic movies, the kind where it&#39;s OK to shed a few manly tears at the end. I recommend it highly for anyone who likes war films.

&lt;p&gt;That was pretty much it for Sunday. I got back to the hotel, wrote a little, and prepared for heading back to Chicago the next day.</description>
		<slash:comments>0</slash:comments>
	</item>
	<item>
		<title>Seattle: The Return pt. 3: Comedy Trio</title>
		<link>http://bytex64.net/blog/e2338</link>
		<guid>http://bytex64.net/blog/e2338</guid>
		<pubDate>Sun, 12 Jun 2011 02:18:16 -0500</pubDate>
		<description>For our Saturday viewing, we decided to see three comedies in two different locations. We were also joined by Nancy&#39;s boyfriend Blake, who is a pretty cool guy. We ate in downtown Bellevue at &lt;a href=&quot;http://www.dintaifungusa.com/&quot;&gt;Din Tai Fung&lt;/a&gt;, which Nancy says is where you take Chinese visitors when you want to impress them with a good dumpling. After a delicious and filling lunch, we headed into downtown Seattle to watch &lt;a href=&quot;http://www.wildbunch-distribution.com/site/lebruitdesglacons/&quot;&gt;Clink of Ice&lt;/a&gt;.

&lt;p&gt;Clink of Ice is a French comedy about a man who meets the personification of his cancer. The main character is an author, continually drunk on champagne, whose wife left him and now lives a depressing life in his mansion with his maid and Russian replacement girlfriend. His cancer is a stubborn and rude man who comes to visit one day &quot;for about three months maximum.&quot; The movie actually turns into an unlikely love story with a twist ending that was both clever and satisfyingly happy.

&lt;p&gt;Actually, let&#39;s rewind a bit. I had originally intended to take a train out to Seattle. That didn&#39;t pan out, so I wanted to take a train back. On the way into the city, I was notified that that was also not an option, so I booked a flight on my phone in about six minutes between movies. It took almost exactly as long as a game of DDR as played by Nancy and Blake.

&lt;p&gt;Very shortly after that, we watched &lt;a href=&quot;http://www.siff.net/festival/film/detail.aspx?id=44438&amp;fid=206&quot;&gt;Terri&lt;/a&gt;, an American film about an overweight kid in high school. It had a sort of &quot;Napoleon Dynamite&quot; feel to it. The story was largely unstructured, and ended without much adventure or resolution. It was frequently funny and satisfying in a strange way.

&lt;p&gt;With just an hour between the last two films, we quickly scarfed down some &lt;a href=&quot;http://www.pikeplacechowder.com/&quot;&gt;Pike Place Chowder&lt;/a&gt; in the mall, then trudged ten blocks or so uphill to the Egyptian Theater to see &lt;a href=&quot;http://www.siff.net/festival/film/detail.aspx?id=44379&amp;fid=206&quot;&gt;Burke &amp;amp; Hare&lt;/a&gt;.

&lt;p&gt;Burke &amp;amp; Hare was the standout film of the weekend for me; easily the funniest of the ones I saw. It&#39;s about a couple of &quot;businessmen&quot; in 19th century Edinburgh who see an opportunity to make some money by selling corpses to the local medical colleges. Demand outstrips supply, and they get in a bit over their head. Naturally, hijinks ensue. If you&#39;re into gallows humor, gross-out physical comedy, or just a fan of Simon Pegg, you&#39;ll love this movie.

&lt;p&gt;After another long day of sitting, staring, running, and laughing, I went back to the hotel and crashed.</description>
		<slash:comments>0</slash:comments>
	</item>
	<item>
		<title>Seattle: The Return pt. 2: Egyptian Theater Foursome</title>
		<link>http://bytex64.net/blog/e2337</link>
		<guid>http://bytex64.net/blog/e2337</guid>
		<pubDate>Mon, 06 Jun 2011 02:03:13 -0500</pubDate>
		<description>Against all better judgement, Nancy and I decided that we would see four movies in a row on Friday, from 4pm to 2am. We returned to the Capitol Hill neighborhood to see these at the &lt;a href=&quot;http://www.landmarktheatres.com/market/Seattle/EgyptianTheatre.htm&quot;&gt;Egyptian Theater&lt;/a&gt;. When we got there, we found that the computerized parking meter system was broken. We weren&#39;t sure what to do at that point, so we just left it, intending to pay at another kiosk. Since we had some time to kill, we stopped at a &lt;a href=&quot;http://www.stumptowncoffee.com/&quot;&gt;Stumptown&lt;/a&gt; coffee shop, where I had an iced chai.

&lt;p&gt;The first movie was &lt;a href=&quot;http://www.siff.net/festival/film/detail.aspx?id=44238&amp;fid=206&quot;&gt;The Hunter&lt;/a&gt;, which was probably the most depressing thing I&#39;ve ever watched (and I&#39;ve seen both Requiem for a Dream and The Road). It revolves around an Iranian man who is trying to eke out a living for him and his small family. His wife is killed by crossfire between the police and insurgents, and his daughter is missing after the incident. He searches desperately for his daughter, who later turns up dead, as well. I won&#39;t spoil the rest, but it doesn&#39;t get any less terrible. The movie takes place against the backdrop of the 2009 Iranian elections, and is beautifully shot. Much of the story is told without dialog, through the continually pained expression of the mostly silent protagonist.

&lt;p&gt;After that, we had about an hour and a half to wander around Capitol Hill feeling terrible about life. We walked down Broadway, where Nancy pointed out some of the many interesting things in the area. I have never seen so many goddamn hipsters in my entire life. I apprehensively entered an Urban Outfitters at Nancy&#39;s request (the last time I made the mistake of entering a clothes store with Nancy, she tried to dress me in drag). Thankfully, my silent (and not so silent) judgment made her uncomfortable, and we left before my head could explode from meta-meta-meta-ironic apoplexy.

&lt;p&gt;We wandered around a bit more after that. I got some toiletries that the TSA wouldn&#39;t allow me to carry on, and we stopped at &lt;a href=&quot;http://www.dilettante.com/&quot;&gt;Dilettante&lt;/a&gt;, where I had a dark chocolate truffle while Nancy used their restroom. After that, we headed back to the theater to watch movie number two: &lt;a href=&quot;http://www.siff.net/festival/film/detail.aspx?id=44241&amp;fid=206&quot;&gt;Mammuth&lt;/a&gt;.

&lt;p&gt;Mammuth is a movie about a man who has just retired from a meat packing job in France. With nothing left to do but sort out his retirement, he embarks on a road trip on his &lt;a href=&quot;http://en.wikipedia.org/wiki/Münch_(motorcycles)&quot;&gt;Münch&lt;/a&gt; Mammut motorcycle to acquire the necessary retirement paperwork from his former employers. His trip gets derailed and instead of finding his retirement, he regains his love of life and returns home a new man. It was a good movie that was touchingly (and occasionally cringingly) funny.

&lt;p&gt;After that, we had only about half an hour between movies, so we ate at &lt;a href=&quot;http://www.genkisushiusa.com/&quot;&gt;Genki Sushi&lt;/a&gt;, a conveyor belt sushi restaurant just around the corner. This is perfect when you&#39;re in a rush &amp;mdash; conveyor belt sushi is a native Japanese form of fast food. You simply pick what you want, then your total is added up from color coded plates. In, out, and back in the theater, we met up with Mehal, a friend of Nancy&#39;s and a cinema buff.

&lt;p&gt;The third film was a rather large budget film, &lt;a href=&quot;http://www.imdb.com/title/tt1251743/&quot;&gt;Salvation Boulevard&lt;/a&gt;. It had a cast filled will well known actors, from a charismatic megachurch preacher played by Pierce Brosnan, to the born-again former Deadhead played by Greg Kinnear, and his cheerful wife-in-denial played by Jennifer Connelly. When a friendly discussion turns into an accidental near-murder, preacher Dan Day attempts to cover it up, leaving the innocent Carl Vanderveer in the lurch. Hijinks ensue, taking a number of swings at the nature of faith along the way. Fun for the whole (probably atheist) family.

&lt;p&gt;After that, we had about an hour to go find second dinner. Mehal had to run, and we ran out of time, so I grabbed a &lt;a href=&quot;http://www.dicksdrivein.com/&quot;&gt;Dick&#39;s&lt;/a&gt; Deluxe and a root beer. Dick&#39;s is apparently the burger joint of choice of none other than Bill Gates, and I have to agree, it was a pretty good burger for $2.50. We rushed onward to the final showing of the day at midnight: &lt;a href=&quot;http://www.whisperermovie.com/&quot;&gt;The Whisperer in Darkness&lt;/a&gt;.

&lt;p&gt;H.P. Lovecraft fans will no doubt recognize this as an adaptation of one of his stories. The movie was done in the style of a 1930&#39;s horror film, which looked great even though it obviously used modern techniques. I think they did justice to the suspenseful horror style of Lovecraft even though an honest 1930&#39;s style film wouldn&#39;t have used so many special effects. I enjoyed it immensely even though I was tired after all the other films. I recommend it highly for any Lovecraft or classic horror fans.

&lt;p&gt;After that, we were quite exhausted, so it was straight back to the hotel and into bed. Oh, and the broken parking meters? We never found one that worked, and Nancy&#39;s car wasn&#39;t ticketed. A whole day of parking in Capitol Hill for free. :)</description>
		<slash:comments>0</slash:comments>
	</item>
	<item>
		<title>Seattle: The Return pt. 1: Train Travel Trouble</title>
		<link>http://bytex64.net/blog/e2336</link>
		<guid>http://bytex64.net/blog/e2336</guid>
		<pubDate>Sun, 05 Jun 2011 03:32:57 -0500</pubDate>
		<description>It had been far too long since I&#39;d visited my friend Nancy in Seattle, and I needed a vacation besides. I found a good time to visit, prepared to foist my work off on my co-workers, and made plans to travel west via the great American railroad system.

&lt;p&gt;Those plans rather quickly went awry.

&lt;p&gt;I got an email from Amtrak two days before my departure, saying that the train was canceled. By that point, I&#39;d made plans to drive up, give the car to my sister, stay at Erickson&#39;s, and hop on the train. But now, there was no train, so I had to find alternate plans.

&lt;p&gt;As an aside, you may think it&#39;s strange to want to spend two days traveling to the other side of the country by train when I can quickly and conveniently fly. When I was little, I wanted to be an Engineer. No, not &lt;a href=&quot;http://en.wikipedia.org/wiki/Engineer&quot;&gt;the kind of Engineer I am&lt;/a&gt;, but a &lt;a href=&quot;http://en.wikipedia.org/wiki/Railroad_engineer&quot;&gt;Railroad Engineer&lt;/a&gt;. I&#39;ve been wanting to take a long train ride ever since I was little. Oh, and the TSA gives me the heebly jeeblies.

&lt;p&gt;So I wound up booking a flight and rescheduling everything. I think the reason I don&#39;t go on vacation very often is because vacation planning is so fucking stressful. It&#39;s a little bit counter-productive.

&lt;p&gt;The flight was about as good as it possibly could have been. Getting through O&#39;Hare was surprisingly easy, and Alaska Airlines was pleasant to fly with. The flight was smooth &amp;mdash; no worse than a four hour bus ride. And I got a beautiful view of Puget Sound in the evening sun as we descended into Sea-Tac.

&lt;p&gt;I made my way through Sea-Tac and finally wandered to the exit. I got to take the &lt;a href=&quot;http://pix.bytex64.net/pixography/small/CIMG0066.jpg&quot;&gt;underground train&lt;/a&gt;, which you cannot tell me is not the inspiration for the introductory tram ride in Half-Life. I found Nancy&#39;s car after some more wandering outside, and we drove into Bellevue for dinner.

&lt;p&gt;We ate at a little Korean fast food place called &lt;a href=&quot;http://www.omabap.com/&quot;&gt;Oma Bap&lt;/a&gt;. I had a &lt;a href=&quot;http://en.wikipedia.org/wiki/Bibimbap&quot;&gt;bibimbap&lt;/a&gt; with a &lt;a href=&quot;http://en.wikipedia.org/wiki/Ramune&quot;&gt;Ramune&lt;/a&gt;. We then wandered into the Capitol Hill neighborhood to eat some frozen yogurt at a place called &lt;a href=&quot;http://www.yogurt-land.com/&quot;&gt;Yogurtland&lt;/a&gt;. Nancy was excited because it was apparently the first branch outside of California. I informed her that we&#39;ve had a nearly identical place, &lt;a href=&quot;http://www.yelp.com/biz/cocomero-champaign&quot;&gt;Cocomero&lt;/a&gt;, in Champaign for several years now.

&lt;p&gt;Somewhat to my horror, we took our frozen yogurt into the nearby &lt;a href=&quot;http://www.elliottbaybook.com/&quot;&gt;Elliot Bay Book Company&lt;/a&gt; (if I owned a book store, I wouldn&#39;t let sticky-fingered goons like us go wandering around in it). They have little customer and employee-written reviews hung on the shelves, which is a really good idea. After they kicked us out, we drove back to Bellevue where I checked in to my hotel and crashed after an exhausting day.</description>
		<slash:comments>0</slash:comments>
	</item>
	<item>
		<title>Random bits</title>
		<link>http://bytex64.net/blog/e2334</link>
		<guid>http://bytex64.net/blog/e2334</guid>
		<pubDate>Wed, 06 Jul 2011 23:50:39 -0500</pubDate>
		<description>If you like Portal 2 (and of course you do &amp;mdash; you&#39;re not some godless heathen commie, are you?), you&#39;ll be pleased to know that Valve has released &lt;a href=&quot;http://www.thinkwithportals.com/music.php&quot;&gt;volume 1 of the soundtrack&lt;/a&gt; FOR FREE. It fleshes out a lot of the little themes you only heard a few seconds of in the game, creating an ambient electro-fantasy wonderland of sound. I recommend taking a listen even if you haven&#39;t played the game (but shame on you for avoiding what will almost certainly be the best game of 2011).

&lt;p&gt;A while back, I got a &lt;a href=&quot;http://www.buffalo-technology.com/products/wireless/wireless-n-nfiniti/wzr-hp-g300nh-airstation-nfiniti-wireless-n-high-power-router/&quot;&gt;Buffalo N-Finiti High Power&lt;/a&gt; router to replace my aging WRT54G. It&#39;s pretty slick. It comes with a customized version of DD-WRT, but since I like OpenWRT better, I spent several hours installing that instead. It should have been pretty straightforward, but I discovered that I actually have a specific submodel with subtly different hardware. The only supported build was a nightly, but it&#39;s been working spectacularly.

&lt;p&gt;One of the fun features of its Atheros chipset is that I can set up multiple APs. I have an AP set up with the old AP&#39;s config (40-bit WEP) so I don&#39;t have to reconfigure my roommates&#39; PCs, and a new AP of my own using WPA2. This also means I can throttle that interface so my roommates can&#39;t hog the internet connection. Luser tested, BOFH-approved. :D

&lt;p&gt;There&#39;s also a rumor going around that Mazda&#39;s working on a next-generation rotary sports car &amp;mdash; and not another compromise like the RX-8. Dubbed the RX-9, it will use Mazda&#39;s new &lt;a href=&quot;http://www.mazda.com/mazdaspirit/rotary/16x/&quot;&gt;1.6 liter 16X engine&lt;/a&gt;. Besides the increase in displacement, the 16X also has a longer stroke and thinner rotors compared to the 13B. This increases thermal efficiency and torque. With an electric supercharger, it&#39;s expected to produce upwards of 300HP while getting better mileage than the RX-8. Oh, and due to the replacement of the cast-iron side housings with aluminum, the engine is lighter than the 13B, too (for reference, a 13B Renesis weighs 247lbs dry for about 250HP; A Honda K20A weighs about 275lbs and puts out similar power). This will be one to watch.</description>
		<slash:comments>1</slash:comments>
	</item>
	<item>
		<title>Toucha Toucha Toucha TouchPad...</title>
		<link>http://bytex64.net/blog/e2329</link>
		<guid>http://bytex64.net/blog/e2329</guid>
		<pubDate>Thu, 24 Mar 2011 15:07:51 -0500</pubDate>
		<description>Nope, I&#39;m not apologizing for that title, you&#39;re just going to have to live with it.

&lt;p&gt;I&#39;ve been pretty mum on my blog about the iPad and the (rep)rise of tablet computing. That&#39;s partly because work keeps me busy nowadays, and partly because I find tablet computing uninteresting to the point of not needing any mention. I think a lot of geeks came around to the iPad after a bit, but I still look at it and think, &quot;You mean it&#39;s a $500 device whose primary claim to fame is that it allows me to read books, play video games, and watch movies &lt;i&gt;while I&#39;m sitting on my couch&lt;/i&gt;? That&#39;s fucking ridiculous.&quot; The inevitable Android &quot;me too!&quot; tablets were doubly ridiculous because they were either cheaper and wholly underpowered, or adequately powered but wholly too expensive. The Blackberry PlayBook looks like a nice device, but since they seem to be focusing on business integration with their phones, I&#39;m sure it will be &lt;i&gt;way&lt;/i&gt; too expensive.

&lt;p&gt;But then HP announced the &lt;a href=&quot;http://www.palm.com/us/products/pads/touchpad/&quot;&gt;TouchPad&lt;/a&gt;.  I&#39;ll let you in on a little secret &amp;mdash; &lt;i&gt;I kind of want one&lt;/i&gt;. It&#39;s a little difficult to explain, so let&#39;s see if I can break it down.

&lt;p&gt;I&#39;m really not sold on the tablet as an everyday computing device because so far, they&#39;ve been gigantified smartphones without phone capability. There is no shortage of laptops sold for less than $500 that will flat out smoke a tablet in power. I want a device that&#39;s more capable, not just more portable.

&lt;p&gt;There&#39;s also a definite trend following from smartphones that they are just smart terminals meant to access remote services via your PC or the Internet. Even though they&#39;re as powerful as laptops from ten years ago, you&#39;re not supposed to do any &quot;real&quot; computing on a tablet. As someone who uses a laptop from ten years ago to get real work done every day, that&#39;s somewhere between a letdown and an insult.

&lt;p&gt;But since I&#39;ve gotten to know webOS so well, maybe the TouchPad will be different. In a completely unforeseen twist, HP seems to really believe in webOS as an essential piece of their future. Even though Palm was consumed by HP, it really looks like Palm has kept control. They&#39;re pushing unparalleled integration not only between the TouchPad and their phones, but also into &lt;a href=&quot;http://www.precentral.net/hp-ceo-touchpad-launches-june-webos-pc-beta-end-year&quot;&gt;PCs&lt;/a&gt;. With things like messaging integration between phones and tablets, they&#39;re pushing into a kind of distributed computing that&#39;s not in vogue right now: peer-to-peer. That&#39;s kind of cool. (And I even know what they&#39;ll call it if it catches on: The Personal Cloud [&lt;i&gt;vomit&lt;/i&gt;])

&lt;p&gt;Hardware-wise, the TouchPad will probably be the most powerful tablet around when it&#39;s released. A dual 1.2GHz Snapdragon CPU and a gig of RAM (Probably? HP doesn&#39;t admit to this) make it squarely more powerful than my laptop. So with adequate software, it&#39;ll be a killer machine.

&lt;p&gt;And software-wise, I already know it&#39;s practically a Linux desktop machine. It&#39;s built on &lt;a href=&quot;http://opensource.palm.com/2.1.0/&quot;&gt;tons of open source software&lt;/a&gt;, and has way more in common with Ubuntu than Android or ChromeOS. That&#39;s probably the most exciting thing about the TouchPad &amp;mdash; it&#39;s the long-awaited realization of a commercially viable Linux desktop system. And with the dedicated team of hackers at WebOS Internals, the line between tablet and PC will blur heavily. For better or worse, the TouchPad will probably be the first tablet on which you can run both an X server and X clients. :)

&lt;p&gt;That said, I don&#39;t know if I&#39;ll be spending $500 on one when it comes out &amp;mdash; especially since inevitable accessories like the Touchstone dock and Bluetooth keyboard will probably put it well above $600. For that kind of money, I could buy a used Thinkpad T60, a more useful machine by almost any measure, and still have $300 left. But, I really do like what Palm is doing with Linux, so I might buy one anyway.</description>
		<slash:comments>4</slash:comments>
	</item>
	<item>
		<title>OpenGL ES 2.0: The Bare Necessities</title>
		<link>http://bytex64.net/blog/e2328</link>
		<guid>http://bytex64.net/blog/e2328</guid>
		<pubDate>Tue, 15 Mar 2011 03:15:59 -0500</pubDate>
		<description>I had the pleasure of helping out my friend Alex with a game of his for &lt;acronym title=&quot;Engineering Open House&quot;&gt;EOH&lt;/acronym&gt;. His platform of choice was webOS &amp;mdash; Palm gave his team a couple of Pre 2&#39;s, and with spit and violence, they made it work. One of the big hurdles was learning OpenGL ES 2.0. To Alex&#39;s credit, he kept his team motivated even when things appeared inexplicably and irreparably broken. What I learned over the past week was that OpenGL ES 2.0 was special not because of what it added, but rather what it removed.

&lt;p&gt;OpenGL has been a continual evolution of new graphics programming methods since the early 90&#39;s. Drawing a triangle in OpenGL 1.0 is a rather simple affair; it looks something like this:

&lt;p&gt;&lt;pre&gt;
glColor3f(0.0, 0.0, 1.0);
glBegin(GL_TRIANGLES);
glVertex3f(0.0, 0.0, 0.0);
glVertex3f(1.0, 1.0, 0.0);
glVertex3f(2.0, 0.0, 0.0);
glEnd();
&lt;/pre&gt;

&lt;p&gt;You set your color, tell the graphics system about your triangle, and then it&#39;s drawn. It&#39;s simple. Problem is, it&#39;s kind of slow. Look how many function calls it takes just to draw a triangle. Add another two if you want per-vertex coloring, another three if you want normal maps for lighting, and another three for texturing. That&#39;s a lot of overhead for just one triangle!

&lt;p&gt;So OpenGL1.1 added Vertex Arrays that allowed you to set large arrays of vertex information (position, color, and normals) in one pass. Now you&#39;ve greatly reduced the number of calls you&#39;re making, but you still have a lot of data to transmit to the graphics card on each frame.

&lt;p&gt;Well, for most things, the vertices of your model don&#39;t change frame-to-frame. Mostly, you&#39;re simply changing their position using transformation functions. In OpenGL 1.5, they added Vertex Buffer Objects, which allow you to put all the vertex data into video memory so that it can be quickly accessed when it needs to be drawn. This yields pretty huge performance improvements.

&lt;p&gt;This brings us up to 2003, and things were really heating up in the video game world. More and more powerful graphcis hardware led game studios to push visuals as far as they could go. More realism was king, and studios wanted to stand out. So in OpenGL 2.0, they added shaders. Shaders were the first time a user could actually execute code on the video card. With shaders, you can interpret vertex data in nearly any way you please. Programmers were free to stand out with their custom shaders, and it took some of the burden off of the CPU, to boot.

&lt;p&gt;And all of this development was layered on top of each other like a giant cake. If you want, you can write a program that uses programmable shaders and vertex buffer objects for some elements, then use simple OpenGL 1.0 rendering for something else. It&#39;s handy because it provides a very nice ramp up in difficulty as the programmer learns. To borrow a page from &lt;i&gt;Programming Perl&lt;/i&gt;, it makes the easy things easy, and the hard things possible.

&lt;p&gt;But that&#39;s an awful lot of stuff to fit in embedded hardware, so when OpenGL ES 1.0 was developed (the ES stands for Embedded Systems), they started giving it the Black Knight treatment. They started with OpenGL 1.3, then chopped off the glBegin/glEnd methods, leaving you with naught but vertex arrays to describe your primitives. Not a big deal, you still have your normal coloring and matrix transformations. Then came OpenGL ES 1.1, based on OpenGL 1.5, which added vertex buffer objects and a few other nifty features.

&lt;p&gt;Then, following the success of shaders on the desktop, OpenGL ES 2.0 was created based on OpenGL 2.0, which added programmable shaders... and removed pretty much everything else. Yes, you still have vertex arrays and VBOs, but they&#39;re merely generic arrays of data for the shaders. No stock shaders, no built-in transformation matrices, nothing but what you write yourself.

&lt;p&gt;On the plus side, it is very &quot;pure&quot; &amp;mdash; it really is pared down to just a programmable graphics pipeline. But it&#39;s obviously a huge headache for the beginner. It&#39;s like OpenGL is a car that&#39;s been getting better and better, adding new features over time to make something truly nice. Then OpenGL ES 2.0 is a frame, a few tires, and a couple thousand pounds of steel, aluminum, and plastic. Surely you can create any kind of car you want, but if you&#39;re in a hurry to get somewhere, you&#39;re kind of screwed. There is no learning curve, just a discontinuous jump right there at the start.

&lt;p&gt;So if you&#39;re interested in making a graphically complex mobile game, steel yourself &amp;mdash; it&#39;s going to be rough. The best thing I can recommend is learning about vertex arrays and shaders individually with OpenGL 2.0, then you can make the transition more easily. It&#39;s not a walk in the park even then. Good luck. :)</description>
		<slash:comments>0</slash:comments>
	</item>
	<item>
		<title>JavaScript Prototype Inheritance</title>
		<link>http://bytex64.net/blog/e2324</link>
		<guid>http://bytex64.net/blog/e2324</guid>
		<pubDate>Sun, 06 Mar 2011 05:24:06 -0600</pubDate>
		<description>Even though JavaScript is one of my favorite languages, I have to admit that I find it a bit mystifying at times. Why must I put object methods in &lt;code&gt;object.prototype&lt;/code&gt;? How do I properly inherit from an object? What&#39;s up with the &lt;code&gt;this&lt;/code&gt; object? A few days ago, I found &lt;a href=&quot;http://javascript.infogami.com/Javascript_in_Ten_Minutes&quot;&gt;Javascript in Ten Minutes&lt;/a&gt; on reddit, which is a good start on explaining the more sticky bits for new JS programmers.

&lt;p&gt;The first major realization any JavaScript programmer must come to is that JS isn&#39;t an object oriented language in the same way Java or C# is. The confusion stems largely from the name, which borrows from Java, and the from presence of the &lt;code&gt;new&lt;/code&gt; operator. Most programmers would assume then, that JS gives you traditional class-based inheritance. But it doesn&#39;t &amp;mdash; JavaScript is a &lt;i&gt;prototype&lt;/i&gt;-based language. &quot;Well what the fuck does that mean? I never learned anything about prototype-based languages in my five and a half years of college!&quot; Don&#39;t worry, it&#39;s simple.

&lt;p&gt;Class-based object oriented languages like Java are what they call &lt;i&gt;design by contract&lt;/i&gt;, which means an object has a very clear definition of what it will and won&#39;t do. Creating an object is then an application of this definition, much like creating a mold and then stamping thousands of little plastic toys. JavaScript doesn&#39;t have class definitions. It doesn&#39;t even have classes. JavaScript only has objects.

&lt;p&gt;[Aside: Some other languages with classes like Python and Perl do follow the traditional definition/instantiation model even though they don&#39;t provide any contractual safety guarantees at compile time. I&#39;m still including them in the traditional class-based OO set.]

&lt;p&gt;This is why JavaScript doesn&#39;t have a &lt;code&gt;class&lt;/code&gt; keyword. A JavaScript &quot;class&quot; definition looks something like this:

&lt;pre&gt;
function FooObject(bar) {
    this.bar = bar;
}
&lt;/pre&gt;

&lt;p&gt;Which seems like an awfully funny way of writing it (for reference, this kind of function is called a &quot;constructor&quot;). The trick is in the &lt;code&gt;new&lt;/code&gt; operator. When you write &lt;code&gt;new FooObject(1)&lt;/code&gt;, what JavaScript is really doing is creating a new empty object, then running &lt;code&gt;FooObject(1)&lt;/code&gt; with this new empty object tied to the &lt;code&gt;this&lt;/code&gt; object. This has some interesting implications I&#39;ll get to later.

&lt;p&gt;Now if your mind isn&#39;t sufficiently bent from that, let me introduce the &lt;code&gt;prototype&lt;/code&gt; property. &lt;code&gt;prototype&lt;/code&gt; is a somewhat magical beast &amp;mdash; If we define a &lt;code&gt;prototype&lt;/code&gt; property on the function object above, any objects instantiated from that function object will also be able to access the properties found in the constructor&#39;s prototype. There&#39;s a layer of indirection in there that probably made that explanation a little confusing, so I&#39;ll explain again by way of example:

&lt;pre&gt;
// Let&#39;s define a foo object
var foo = { x: 3 };

// And a constructor for Bar objects that inherit foo&#39;s properties.
function Bar() {
    this.y = 4;
}
Bar.prototype = foo;

// When we create a new Bar object, we can now access foo&#39;s properties too
var b = new Bar();
alert(b.x); // Should be 3;
&lt;/pre&gt;

&lt;p&gt;There are a couple of interesting points to note here. First, foo isn&#39;t copied into the newly instantiated object. It remains a reference, so changing anything in foo will also change that property in bar.

&lt;pre&gt;
foo.x = &quot;green&quot;;

alert(b.x); // Should say &quot;green&quot;
&lt;/pre&gt;

&lt;p&gt;Secondly, the reverse is not true. If you set any inherited properties in an object, they will be set in that object only and will not propagate up to the prototype.

&lt;pre&gt;
b.x = 45;

alert(foo.x); // Should still be &quot;green&quot;
&lt;/pre&gt;

&lt;p&gt;The object then &quot;owns&quot; that property. There is actually a way to tell if a property is owned or inherited: the &lt;code&gt;hasOwnProperty(memberName)&lt;/code&gt; method. This method is, of course, inherited from &lt;code&gt;Object.prototype&lt;/code&gt;.

&lt;pre&gt;
alert(b.hasOwnProperty(&#39;x&#39;)); // Should be true

// Create a new Bar object
var c = new Bar();
alert(c.hasOwnProperty(&#39;x&#39;)); // Should be false
&lt;/pre&gt;

&lt;p&gt;Somewhat frustratingly, you can&#39;t actually mangle the prototype of an instantiated object to mutate its inheritance. While prototype members can be changed after instantiation, the reference to the prototype object itself cannot be changed. Unless you don&#39;t want to be portable. }:-&amp;gt; The following should work on Opera, WebKit, and Mozilla JS engines.

&lt;pre&gt;
c.__proto__ = {x: 3.4};
alert(c.x); // Should be 3.4
alert(c.hasOwnProperty(&#39;x&#39;)); // Should still be false
&lt;/pre&gt;

&lt;p&gt;But don&#39;t do that. It&#39;s not specified by the ECMAScript standard, and it&#39;s kind of dirty.

&lt;p&gt;So what about &lt;code&gt;this&lt;/code&gt; in constructors? Well, since &lt;code&gt;this&lt;/code&gt; is a reference to your new object, you should use this to create any instance-specific data. You shouldn&#39;t use it for any data that is shared between instances &amp;mdash; like your object methods. As a JavaScript neophyte, I used to write stuff like this:

&lt;pre&gt;
function Foo() {
    this.x = 3;
    this.blargh = function() {
        alert(this.x);
    }
}
&lt;/pre&gt;

&lt;p&gt;Which is perfectly functional, but what it means is that each instance created from Foo() has a separate instance of the &lt;code&gt;blargh&lt;/code&gt; function, which is wasteful on memory. What you should do is this:

&lt;pre&gt;
function Foo() {
    this.x = 3;
}
Foo.prototype.blargh = function() {
    alert(this.x);
}
&lt;/pre&gt;

&lt;p&gt;Which, due to prototype inheritance, means every instance created from Foo() shares the same function. The &lt;code&gt;prototype&lt;/code&gt; property of any function object is initially an empty object, so you don&#39;t have to create it yourself.

&lt;p&gt;What happens when we want to extend an object that&#39;s already inheriting properties from its prototype? There are lots of JS libraries that smooth over the details and present a more traditional class-based interface. But let&#39;s not bother with another layer of abstraction &amp;mdash; how does it &lt;i&gt;really&lt;/i&gt; work in JavaScript? There are actually a few ways we can mangle the prototype.

&lt;ol&gt;
&lt;li&gt;You can manually copy all the properties from the base object constructor&#39;s prototype into the derived constructor&#39;s prototype. I&#39;m just doing a first-level copy, but if you have data structures in the prototype you want to copy, you should do a deep copy (which, sadly, JavaScript doesn&#39;t provide a method for).

&lt;pre&gt;
for (i in Foo.prototype) {
    Bar.prototype[i] = Foo.prototype[i];
}
&lt;/pre&gt;

This works, but it&#39;s kind of awkward and a waste of memory if your prototype only contains functions.
&lt;/li&gt;

&lt;li&gt;&lt;p&gt;You can set the prototype of your derived constructor to an instance of the base object.

&lt;pre&gt;
Bar.prototype = new Foo();
&lt;/pre&gt;

&lt;p&gt;But this could cause problems if Foo&#39;s constructor has any side effects.
&lt;/li&gt;

&lt;li&gt;&lt;p&gt;To avoid the side effects of the parent&#39;s constructor, we can create a proxy object to stand in for an instance of Foo, using Foo&#39;s prototype.

&lt;pre&gt;
var anonymous = function() {};
anonymous.prototype = Foo.prototype;
Bar.prototype = new anonymous();
&lt;/pre&gt;

Which is also kind of ugly, but works without copying or side-effects. Some libraries have encapsulated this behavior in a &quot;spawn&quot; or &quot;derive&quot; method for objects.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So it&#39;s not quite as clean or simple as class-based inheritance, but it is more flexible. The above methods are just a few ways of doing it, &lt;a href=&quot;http://ajaxpatterns.org/Javascript_Inheritance&quot;&gt;here are a few more&lt;/a&gt;. After setting your prototype, you&#39;ll also want to reset the &lt;code&gt;prototype.constructor&lt;/code&gt; property. This is a property that points to the object&#39;s constructor function, which is normally set automatically when you create a function.

&lt;pre&gt;
Bar.prototype.constructor = Bar;
&lt;/pre&gt;

&lt;p&gt;If we don&#39;t do that, it&#39;ll point to the constructor of our ancestor, which could cause trouble for anyone who depends on that property. I&#39;m not actually aware of anything that uses it, but someone else&#39;s code might.

&lt;p&gt;Generally, you&#39;ll also want to call the ancestor&#39;s constructor when you create an object, but there&#39;s no magical &lt;code&gt;super&lt;/code&gt; keyword to help you. But we do know who our ancestor is, and we have its constructor function. So we just need to call it in a special way to apply its effects to our new object.

&lt;pre&gt;
function Bar() {
    Foo.call(this);
    // The rest of your initialization goes here
}
&lt;/pre&gt;

&lt;p&gt;&lt;code&gt;call&lt;/code&gt; is a function object method that executes the function with the &lt;code&gt;this&lt;/code&gt; object reassigned to the object you want. What &lt;code&gt;this&lt;/code&gt; points to can vary based on context, and is probably a good subject for another article. In this case, if we had simply called &lt;code&gt;Foo()&lt;/code&gt;, &lt;code&gt;this&lt;/code&gt; would point to the global scope. If we had called &lt;code&gt;new Foo()&lt;/code&gt;, it would have created a new object and &lt;code&gt;this&lt;/code&gt; would point to that object. But &lt;code&gt;Foo.call(this)&lt;/code&gt; makes Foo&#39;s constructor run in the context of our new Bar object, which is exactly what we want.

&lt;p&gt;So our complete &quot;subclass&quot; operation looks like this:

&lt;pre&gt;
function Bar() {
    Foo.call(this);
    // The rest of your initialization goes here
}
var anonymous = function() {};
anonymous.prototype = Foo.prototype;
Bar.prototype = new anonymous();
Bar.prototype.constructor = Bar;
&lt;/pre&gt;

&lt;p&gt;And it&#39;s no wonder this functionality is usually wrapped up in a function. :)

&lt;p&gt;That should be confusing enough, so I&#39;ll stop here. Maybe in another article I&#39;ll explain more about &lt;code&gt;this&lt;/code&gt;, and maybe get a little dirty with JavaScript&#39;s event model.</description>
		<slash:comments>3</slash:comments>
	</item>
</channel>
</rss>

