Love letter to WebOS

When I pick up my Palm Pre, flick it on, and consider it I realize that this is the most amazing device I have ever owned. Sure, the hardware has some problems (why the hell won’t the damned “H” key trigger every time?!), but overall I have made a downright emotional connection to the Pre that I was never able to create with the iPhone.

Part of the reason for this is that, unlike the iPhone, with the Pre and WebOS I was able to develop solutions for my phone that exactly filled my own needs. Where the iPhone and iOS forced me into the limited box of just another credit card hooked up to Apple, WebOS empowered me to create something new.

Yet as much as I love my current phone and the operating system it runs, yesterday HP drastically recolored my perceptions of WebOS to the point where I found myself glancing down at my Pre in disgust before I turned to my iPad for solace.

Developers complain about Apple all the time, but never has Apple shown the stunning disregard for their app developers that HP exhibited yesterday at their “Think Beyond” event and afterward, a disregard that is even more disturbing because most people will never notice it behind the glitter and sparkle of the prophesied TouchPad and Pre3.

The two faces of HP/Palm

Although I joined the WebOS bandwagon relatively late in the game, so far as I can tell there has always been a disconnect between the people on the ground and the people making strategy decisions. The Palm developer relations team is out of this world. They read and respond to developer problems in the forums. They answer emails personally, professionally, and above all, promptly. They are excited about the platform—often tweeting or blogging about it in their own time—and they share the desire of the developers to use WebOS in interesting and awesome ways.

These people are working their butts off to make WebOS an even more attractive place for developers to settle and build something amazing. They probably deserve a raise.

Sadly, as best I can tell these people have little decision making power when it comes to broader policies. That lies with the people who do not give a rat’s ass for developers one way or another, and we are reminded of this at events like yesterday’s TouchPad, et al announcement.

Oh, let me count the ways

At first pale, the announcement of the TouchPad, awesome new Pre hardware, and the tantalizing promise that WebOS may expand its reach onto PCs in the future would seem like nothing but good news for current WebOS developers. Here we are with a shrinking userbase and the resultant dwindling prospects for making anything more than pocket change off of an app, but new exciting hardware is on the horizon! The second coming of WebOS is here! Huzzah!

Except that this is not the case. With the exception of the Veer, which may or may not actually have a market, none of the exciting new hardware they announced will be out before “summer” (which could mean as late as September), and no prices were announced. This is a whole lot of hype and excitement being built around products that likely have six months before they’ll see the light of day—six months during which HPs competitors are free to find any number of ways to make the TouchPad and associated devices irrelevant. John Gruber thinks we might see not one, but two iPad releases, both of which could come out before the TouchPad ships. And Android is not standing still, either.

HP can crow about the unlimited mobile market all they want, but the fact is that they have very little foothold in it right now, and this is actively hurting their developers. TapNote has had fewer than 200 sales since I released it eight months ago. That’s very different from the projected multi-billion dollar market HP execs were drooling over on stage. If I ported TapNote to iOS (where it would have loads of competitors and be drowned anyway in the sea of crap) and did nothing to promote it but mention it on Twitter a few times, I could still probably get more sales than that.

All of this is why it is particularly infuriating that at the same event they announced exciting new hardware, HP announced that no existing devices (save the non-starter Pre 2) will receive updates to WebOS 2.

Oh, and the Mojo framework that every SDK app in the catalog is programmed using is deprecated in favor of a completely new framework that is currently alpha-level quality.

Let us stop for a moment and review that again:

  1. The existing userbase is tiny and dwindling fast
  2. The existing userbase will never be upgraded to WebOS 2.0
  3. To properly take advantage of new users, hardware, and WebOS updates, developers will need to rewrite their apps from scratch
  4. The new Enyo framework that is replacing Mojo is not yet finalized

We WebOS developers are basically offered the choice of abandoning our current users and past work and starting fresh in the hopes that six months from now when the TouchPad makes its way out the door it won’t have been preemptively hamstrung by the iPad 2 or whatever other interesting devices will likely precede it, or else we can continue slogging away at our Mojo apps which, although they will doubtlessly run at least on this first bunch of hardware, will be woefully unable to take advantage of the options provided by varying screen resolutions.

Oh, and if we do decide to go the rewrite route, the framework we will be developing against will likely change under our feet as we go.

To understate the issue, this sucks. It sucks particularly badly for the many developers like myself who are one-person shops, trying to make fantastic WebOS software in their free time.

I am not against Enyo (although I have some reservations when I hear that it’s entirely Javascript; no more HTML); rather, I am a developer who wants to be able to provide new, interesting things to people right now, not at some future date. And HP is dead set against allowing me that. Instead, their actions are winnowing the existing userbase even more quickly, to judge by the irate “I’m switching to Android!” posts littering the popular WebOS forums right now.

Losing the long odds bet

When I switched to the Palm Pre and downloaded the SDK in preparation to start work on what would become TapNote, I knew I was making a bet against long odds. At the time, Palm was rumored to be diving head-first towards the grave, and despite some developers making fairly good money with promotions like Hot Apps, it was clear the number of WebOS users was minuscule compared to iOS or Android.

However, I had fallen in love with WebOS, and I was hopeful that given a chance Palm would be able to be the Apple competitor that I keep hoping for.

Now I find myself in the uncomfortable position of wondering if I have at long last lost the bet. HP has finally unveiled its grand plan for WebOS, and it is a plan that apparently does not involve announcing things that are actually ready to ship, or keeping promises about maintaining your existing userbase, or working to make developer’s lives easier beyond the efforts of your developer relations team. Is this going to be the pattern going forward? I am extremely leery of devoting a bunch of time and effort to a platform that abandons its existing users and developers at the first hint of a shiny new form factor. Best I can tell, what doomed Palm was the executives mismanaging what the talented engineers and developers below them created, and it is worrisome to me that this pattern appears to be repeating now that Palm has been folded into HP.

Should HP care?

Of course, when you do the math it is entirely possible that HP doesn’t need to care. I suspect that HP is cutting its ties to the past deliberately. Its existing users and developers are Palm’s early mistake, and not a terribly costly one to ignore (after all, even bad press is good press, and we’re such a small group that even if we never bought an HP product again it wouldn’t hurt their bottom line). Going forward, HP wants to do things right, get a slice of that multi-billion dollar mobile pie, and if that requires attracting all-new app developers over the next six months, so be it. Their excellent developer relations team will mitigate the damage somewhat, and if the TouchPad and Pre3 are indeed able to ship in a timely fashion and beat the odds they stand to not reinvigorate their userbase but completely reinvent it.

None of this changes the fact that screwing over your early adopters is not a great idea (and may bode poorly for HP’s behavior in the future), but if the money flows, those early adopters will just be a vocal minority drowned out in a sea of praise. Life’s unfair. Deal with it.

As personally unhappy as it makes me, when I woke up this morning I once again loved my phone (even if my opinion of HP/Palm is permanently tempered for the worse), so I suspect I will, in fact, find a way to deal with it.

However, I also hope that HP hears the outraged cries of its developers and takes them to heart. Perhaps forcing code rewrites and so forth on us right now is indeed the best of the bad routes forward. But if they continue to make sweeping decisions with complete disregard for their promises and established APIs, they are going to find themselves right back where they started: few developers, a paucity of quality apps, and a dwindling, disgruntled userbase.

Where to from here

Time will tell if HP’s bet on TouchPad and the Pre3 pans out. For myself, I am planning to continue development on the upcoming TapNote version 1.2, because I want to be able to synchronize my notes between my phone and other devices, regardless of what happens next. However, I am not sure if I will implement any major features after 1.2. I will certainly address any issues that come up, but with the development environment so badly in flux I will probably wait to see how things settle out before I decide if I should start rewriting for the new devices or regretfully bid WebOS adieu.

NSString format specifier cheat sheet

I’ve been working in Objective-C a lot more often recently, and one of the things that I most often find myself needing to lookup are the format specifiers for NSStrings (usually when I need to output something to the console for debugging purposes using NSLog). Apple’s documentation is alright, but there’s a lot of junk I’ll never need there, and it isn’t organized in a particularly useful fashion for quick reference.

So I took a little time and whipped up a cheat sheet with the basic format specifiers that I am most likely to need. This is by no means a complete list, and there are lots of synonyms, advanced modifiers, and other tidbits the cheat sheet ignores, but it covers the vast majority of my logging needs when it comes to outputting variable values so hopefully it will be useful to others, as well.

The cheat sheet is available both on the web and as a PDF download.

Personally applicable

What makes a story something you want to experience over and over, something you think about or re-experience until you’ve internalized it? This is one of the things that I find myself pondering as I read more books, watch more movies, and attempt to craft lasting stories of my own. I don’t think there is any easy or straightforward answer to apply in all cases, but recently I discovered at least one aspect that makes a difference thanks to the juxtaposition of two movies I watched and enjoyed last year: Avatar and How To Train Your Dragon.

I ended up acquiring both when I received a Blu-ray player this Christmas, but no Blu-ray movies. Both were movies that I had seen in theaters and enjoyed enough to see again, and both were ones that I was holding off purchasing on iTunes or elsewhere because I wanted them in HD.

A couple days ago, the discs happened to arrive while a friend was over, and when I popped them out of the box he commented that he enjoyed seeing Avatar in 3D, but thanks to its utter lack of substance didn’t see much use in owning it. We joked about some of its more laughable moments, and I laid it aside. He then revealed that he had never seen How To Train Your Dragon, and never felt the need.

This would not do. I originally thought How To Train Your Dragon looked stupid (the awkward title and a lackluster preview being the main deterrents for me), but when I went to see it on a whim at the local theater I discovered a contender for the best animated film I saw in 2010. Since the options for my friend were to go get stuck in rush hour traffic or kill a bit of time, we ended up watching it on my assurances that he would not regret it.

At the end of the movie, he said it was very enjoyable, but that it was basically the same movie as Avatar. I misunderstood, and after joking about the flight sequence similarities we dropped the subject.

I have been thinking about that off-handed comment, though, and he’s right. How To Train Your Dragon and Avatar are essentially the same movie:

  • Both center on a main character whose physical differences result in his ostracism and inability to gain acceptance to society
  • In both the main character discovers a connection with the natural world that he did not expect, and that is in fact completely at odds with his society’s way of life
  • In both the main character pursues his connection with the natural world, inevitably leading to conflict with his society and the world he has grown to love
  • Both offer sideline romantic interests that initially despise the main character, but grow to respect his intelligence/capability and eventually ally with him
  • Both movies culminate in the main character using his connection with the natural world to overcome a greater threat

The main differences are in the details.

Yet although I bought them both at the same time, I do not hold both movies in equal regard. For me, Avatar is candy. It is bright and enjoyable, yet ultimately lacks depth. I will consume it form time to time, but I don’t love it. It’s just something to eat when you feel like dessert.

How To Train Your Dragon, on the other hand, is berry pie. Like Avatar, it is not particularly subtle, yet offers more substance and complexity; the root ingredient is good for you, even if it has been sweetened up to appeal to a larger audience. I will not only consume it multiple times, I will eagerly look forward to eating it and share it with my friends.

The difference between the two that redeems How To Train Your Dragon’s sillier and more stereotypical moments while leaving Avatar in the “beautiful, yet ultimately falling short” category is that How To Train Your Dragon is based around a simple insight:

“I wouldn’t kill him … I looked at him, and I saw myself.”

This is not a normal offering for an American movie. Avatar hammers home tired messages about the importance of the environment and evils of the military complex, while still ultimately relying on violence based in white/Western supremacy as the one true method for resolving problems; much more standard fare for American cinema. It additionally focuses solely on a setting that is completely inapplicable to its viewers; however much Jake may like to emote about how we’ve “killed our mother”, our planet is not a giant brain. Avatar’s pretense at a liberal, eco-friendly standpoint is little more than that: a pretense. The movie’s true message is more along the lines of “the military industrial complex can only be countered with violence”, a message that eco-terrorists will likely find liberating but that should be deeply troubling to anyone who really cares about these issues.

Of course, at first pale How To Train Your Dragon is not personally applicable, either. Not many of us are locked into a bitter struggle for existence with mythical creatures. Yet within its fantastical setting, How To Train Your Dragon offers a way for individuals to change despite facing what seem to be diametrically opposed ways of life.

And that personally applicable insight is what makes How To Train Your Dragon an excellent story while Avatar remains merely enjoyable, despite the two telling the same story different ways. Personal epiphanies on the part of the main character are not required; what makes the story more powerful and lasting in How To Train Your Dragon is that the story is based on an insight that can offer change not only to the characters, but also those experiencing the story from the outside.

One of the greatest challenges I have been facing since I started trying to revise my NaNoWriMo entry penned more than a year ago is trying to figure out what makes the story matter. “Why does this story need to be told?” I asked myself. “What about this story will make people want to read it again and again?” I could not find an answer.

Thanks to Avatar and How To Train Your Dragon, I recently tried asking a different question: “What causes the main character to change that applies to me as well?” And there I very quickly discovered an answer, one that offers a way to tell the same story but shift the focus slightly to make the core conflict for the main character applicable to my own life. Suddenly the story became more interesting, and my revisions jumped from simple grammar and sentence structure changes to changes that affect the story as a whole.

There are many ways to think about a given narrative, of course, but at least one rubric for story quality for me is now the question: does the core conflict, and the ways the characters have to change to overcome that conflict, apply to me or offer insight for change in my own life?

I can only hope that I am not so much of an outlier on the bell curve of society that what I find personally applicable will also appeal to others, but I suppose that is the nature of a story: you tell it, and how people react to it tells you something about how they think differently than you.

Beckism.com, version 4

It is a truth universally acknowledged, that a web developer in possession of a blog must be in want of a redesign. And so I give you the fourth major version of Beckism.com, this time offered in minimalist monochrome.

For those familiar with my design tastes, this update will come as no surprise. Large text, Gill Sans running rampant, and very few images are all standard for me. What is more interesting about this version of the blog is that I have vastly simplified the blog archives and navigation.

The last time I redesigned, I did away with my numerous categories in favor of two main sections (one for longer non-fiction, and another for one-off short pieces). However, in practice, the distinction was pointless. I doubt anyone bothered to click through to the category archives from the main archive page unless they were curious about the names that I used.

Instead, the Archive now sports a single page list of every article published on the site, with links to filter based on tags. Hopefully visitors will find this more useful than the previous categories + pointless pagination model. I have additionally removed full text for articles everywhere except the homepage, making the search and so forth actually useful for the first time in years.

I hope you enjoy the redesign! Let me know if there is anything in particular you like or dislike about it either in the comments or through the One Crayon contact form; I love to hear how useful (or beautiful or hideous or whatever) other people find my designs.

Lastly, please note that the site is likely utterly broken in IE. It should work beautifully in Firefox and Safari, but I opted to use HTML5 which is not supported in IE, so things are probably hideously broken over there and will be until I work up the gumption to care.

LEGO Universe: the good, the bad, the unfulfilling

Hey kids! You’re on the internet now, where LEGO Universe’s restrictive chat filters are not in place. This review uses some words most deem inappropriate for young ears, so if your parents are reading over your shoulder, you might want to wait until they’re out of the room. Or preserve your innocence and go read a watered-down LEGO Universe review at one of the big gaming sites where they’ll gush about it in hopes of securing that sweet advertising deal with LEGO.

I was super excited when I heard that LEGO Universe was coming out this October, to the point that I pre-ordered the game in order to get early access and started playing it literally the minute it was made public. I loved LEGOs growing up and the LEGO Star Wars and other TellTale LEGO franchises offered me many hours of enjoyment, so it sounded like LEGO Universe would be right up my alley. Happily, I was right to be excited: LEGO Universe is a very fun game with obvious potential for growth. Less happily, the game is deeply flawed in enough aspects that I will likely not be paying a subscription fee for ongoing access.

Holy crap, LEGOs are awesome!

My initial impression of LEGO Universe was that it was just as amazing as I had anticipated. After customizing your minifigure (for which there are loads of options, although the only one that really matters is what facial features you choose; you’ll likely be swapping out your pants, arms, and hair for equipment that gives you stat boosts pretty quick), you get tossed straight onto a damaged space ship learning the basics of the gameplay interactions and searching for rocket parts to build your personal escape rocket and get the heck out of dodge.

The gameplay is very similar to the TellTale LEGO games; you have an over-the-shoulder perspective for your minifigure, and you spend a lot of time walking up to stuff and whacking the heck out of it, as well as engaging in quick builds, talking to people, and interacting with various items in the environment. The limited number of possible interactions works really well; you only have to worry about keys for movement, jumping, attacking, and interacting with objects, making the game easy to pick up and play for just about anyone. The control scheme gradually adds a bit of complexity as your gear opens up special moves (like a defensive shield that you activate by hitting a number key and then using the attack key), providing a little more depth and strategy down the road, as well.

The environments are rife with personality and lots of LEGO constructed items (and enemies) you can destroy. When you destroy an enemy or an item, you get a random assortment of coins, LEGO bricks, hearts, armor, and so forth. This ensures that you’ll want to smash just about everything you come across, both to keep your health and armor up and to collect enough bricks and coins to be able to build items on your personal property (no one is allowed to build arbitrary items in public for fear of giant penises and so forth showing up unexpectedly; instead, everything you build that you want to share stays on your property to be more easily approved by the moderators).

In the initial release there are four areas to explore (not counting the ship you first arrive on, which is small enough to be little more than a tutorial), but it’s obvious that NetDevil has a plans for a bunch more themed areas to explore. I imagine that as time progresses, increasingly difficult or hard to get to places will be “discovered” and opened to the public. The profile pages also have some achievements relating to the “world builder’s club” which offers an intriguing glimpse into the possibility of larger, user-developed areas to explore and develop.

Given the diversity of mix-and-match options for minifigures and building offered by a mere four LEGO themes (city, space, pirate, and ninja), it is quite likely that LEGO Universe has a diverse future ahead for its geography and gameplay.

Building your dream-mobile

Running around and smashing things has a lot of appeal, I admit, but as any kid can tell you the true brilliance of LEGOs lies in construction. Before the game was made public, I did a fair amount of thinking (okay, fine, obsessing) over what I should try to build in the game. I didn’t want to start with anything too ambitious, but neither was I interested in building something boring like a house. I finally settled on recreating in the game my favorite LEGO model spaceship, and after a quick trip to my Mom’s attic I discovered that I still had the instruction booklet to help me along.

Of course, finding the right bricks was a problem (I’m still in the process of collecting them all, and it doesn’t look good for a couple of the specialty ones; I will likely need to make substitutions), but after claiming a property of my own by clearing out the Maelstrom-infected denizens I was able to jump into brick mode and start working.

There are two methods for constructing custom items in LEGO Universe. The obvious one, brick mode, is actually the one you’ll use the least early on. To help people get into the spirit of things, the developers provide you with a fair amount of pre-constructed models up front that you can deploy around your property. For instance, the first run of quests provides a choice between House models and Castle models.

When models become boring, though, you can enter brick mode, and construct whatever you like the classic way: brick by brick. This mode is a pretty good time-waster, both because it takes a long time to find the brick you’re looking for and because it’s so open-ended. If you were the type of kid who discarded the instructions and just built whatever came to mind, you’re going to love brick mode. Although nothing particularly impressive has been constructed yet that I’ve found, I anticipate that in the coming months we will see some very interesting custom-built items. (And thanks to the “LEGO owns everything you build in our game” clause in the EULA, maybe we’ll even see some of them end up in the game or—which would be even more awesome—real life.)

Brick mode offers a few really nice aids in building larger creations: first, you can group segments of bricks together, allowing you to construct small pieces and then fit them together without worrying about bricks getting stuck to the wrong areas if you aren’t precise the first try. Second, you can jump in and out of brick mode to construct custom models, allowing you to construct more complex items modularly without worrying about the more fiddly navigation of brick mode. You can even toss these models into your backpack to deal with later, although at the moment it doesn’t appear to be possible to use them in the main game. Perhaps this will be an option down the road; it certainly seems likely given the range of behaviors you can assign to models (including movement, smashing, rebuilding, and more).

The dark side of build mode

If you are anything like me, TellTale-style gameplay plus custom building sounds like LEGO perfection, but it is not without its problems. First and foremost, there is the issue of interacting with built models. One of the first things I did when I claimed my own property was toss out a few castle pieces that I’d acquired from quests. One of these pieces was a gate, and when I decided to head back outside, I walked up to it and hit the interact button. Nothing. Hit the attack button. Nothing. In point of fact, it was impossible to open the hinged gate at all. Since then I’ve acquired all but one level of behaviors (as best I can tell) and none of them offer any capability to do a simple adjustment of a hinged or otherwise mobile model element, either.

The cleverest solution I’ve seen so far was a property where the user had attached a “smash” action to their gate, which then rebuilds itself a moment later. At least there you can get in and out of the castle.

Then there are the custom models. I had created one half of the beginnings of my favorite space ship, saved it as a model, and tossed it in my backpack for safe-keeping. Later, I’d discovered a new brick vendor with some of the bricks I needed, so I went back to my property, dropped the model out, and worked on it a little more. When I tried to exit brick mode, however, I got an error “You don’t have the bricks for this.” What the hell? First off, I’ve never sold or otherwise gotten rid of a brick, so the idea that a model I built a few days ago can’t be completed with the bricks in my collection is ludicrous. Secondly, what am I supposed to do? There was no way to exit build mode without trashing all of my work and returning all the bricks to my backpack.

Now imagine you were working on a much larger project, and suddenly this becomes an excellent reason not to use build mode at all. Hopefully, it is the result of a bug that LEGO will fix in the game engine soon, but in the meantime I am leery of spending time on custom models that I may never be able to complete.

An additional downside to build mode is that it is very difficult to find the bricks you need. The backpack interface is far from ideal for managing bricks, and although there are some filtering options, they are extremely simplistic. Since I am beginning to learn the names of the pieces, it would be very handy if there were a quick search bar where you could filter by name or dimensions. Sadly, the developer evidently didn’t feel this was necessary, making trolling through your collection both when building and when looking through shop-keeper inventories a major pain in the butt.

Hello? Will you be my friend?

I have long had a tortured relationship with MMOGs (massively multiplayer online games, for those not in the know). I want to love them (particularly the RPGs, since I love the idea of a persistent RPG), but I inevitably end up disillusioned with them after just a few days of play. This is because MMOGs are largely balanced with the assumption that you will group up with your fellow gamers after you start to specialize which will relieve the boredom of grinding away through the same old quests and gameplay over and over again, and I never am able to do so. I honestly have no idea how people make lasting friendships in these games. I’ve never been able to get anyone to cooperate with me, much less engage them in conversation.

I was hopeful that LEGO Universe would not be quite as bad, but turns out I was wrong. Not only does no one talk, ever, but even if you want to try and chat you usually cannot without loads of frustration. This is because the LEGO Universe chat filter is based on a whitelist instead of a blacklist.

This means that the only words you can use in chat (or in naming your models, or your property description, or basically anywhere you can enter text public or not) you can only use words that the moderators have approved beforehand.

Excuse me for using a word that would be blocked in the LEGO chat filters, but this is bullshit. LEGO’s whitelist dictionary appears to have been constructed by hand, and is horrifically limiting, particularly when you get words with more than, say, five letters. In trying to describe my peaceful garden property, I discovered that the words “zen”, “peaceful”, “contemplation”, and a slough of other happy, non-negative words were blocked. There is no easy way to appeal this other than taking the time to jump over to the in-game feedback and sending a message to the moderators/support staff.

Later in the main game, I was getting frustrated that I couldn’t find a particular item for a quest, so I decided to try and ask the other players nearby for help. After more than six tries to compose the message, I finally gave up and quit the game in frustration. Even the name of the quest giver was blocked by the onerous chat filter, preventing me from getting to my question even in a roundabout manner.

Another great example is that I wanted to name my triceratops pet “Spike” (because, come on, that’s a great name for a triceratops). I’ve tried this five or six times across the span of several days, and it is always automatically discarded by the chat filter. I’ve written the moderators to request they add “Spike” to their allowed word list, but to no avail. I am trapped instead in a weird world of extreme censorship where rather than disproving a small pool of inappropriate words they have to approve every single word I type.

I hate this, and judging by the fact that absolutely no one has ever said anything more complicated than “hello” or “thanks” in my presence (except for one jack-off who jumped up and down in the middle of the map repeating how he was first to do something or other until I left the area in disgust), I suspect that I am not the only one who finds trying to communicate via chat too onerous to pursue.

I understand that this is a game targeted at kids. But Christ, LEGO. Nervous as it made me, I sent you my god damned driver’s license so you could verify my identity. Could you maybe assume that I (1) am not out to prey on innocent young kids over the internet, and (2) have a decent-sized vocabulary that I’d like to make use of? Crazy thing: kids don’t expand their vocabularies because people only use words they know. They learn new words them because they see them in context.

Don’t help me. Please.

Aside from the impossibility of saying anything not totally inane and simplistic within LEGO Universe, the game is strangely setup to encourage cooperation, even while it squashes any possibility of cooperating with your fellow minifigures flat.

Very soon after exiting the first area of the game, you are prompted to choose a Nexus Force faction to join. Each faction is focused on something different: Sentinels on hand-to-hand combat, Assembly on building things, Venture League on exploring, and Paradox on ranged attacks. Personally, I joined the Paradox because they have the most awesome-looking gear.

However, when I equipped my starting set of gear I discovered that the Paradox is a support class. Their weapon is a ranged weapon, and their special ability is that they can sacrifice some of their own health to provide imagination for the people around them.

That’s fine; I tend to prefer support classes (I’ve always had a soft spot in my heart for wizards and priests in role playing games), but it does make traveling around solo a bit difficult, particularly with the larger, nastier enemies who deal a lot of damage. Sacrificing my health for imagination doesn’t do me a lot of good when I’ve got half a dozen dark samurai wailing on my ass, and ranged weapons in LEGO Universe are a major bitch to aim. (I swapped out my ranged wand for a sword pretty quick, but that still leaves me with wimpy armor ill equipped for hand-to-hand combat.)

However, the game is setup to actively discourage working together with anyone. I already mentioned that when you destroy something, you get a bunch of coins, bricks for your collection, and so forth. What I did not mention is that unless you strike the killing blow, you get nothing.

This means that if I am working on taking down a dark spiderling, I’m sitting at two health, and have finally got him where I want him, and some jackass Sentinel comes running by and knocks him once on the head, I get nothing and the second dark spiderling that was creeping up on me kills me in one shot. Or, conversely, if I see a poor Assembly engineer getting taken apart by a dark samurai, I better than to try and help him kill it unless I’m comfortable with stealing his loot (actually, it’s in my interest to let him get killed, because then I can finish off the low-health samurai and take the loot more fairly; the thing would have its health regenerated by the time he got back from rebuilding).

Thanks to this all-or-nothing approach to item drops, the only way that cooperating with another character would work would be if we could somehow coordinate who strikes the killing blow, or if we were working on different goals (say, if my friend needed to construct something in an area with a lot of enemies, I could keep the enemies off his back while he worked, for mutually beneficial results). However, thanks to the godawful chat filters (and the complete lack of voice chat), such coordination would be really hard to pull off without practice and a good sense of shared timing. Otherwise, the support character most of the time gets nothing for his trouble aside from possibly appreciation. Which is worth diddly when it comes time to buy the next level of awesome-looking yet strangely useless Paradox armor.

The stifling of cooperative gameplay wouldn’t matter so much, except for the fact that people who choose support classes (like myself) start to have a really difficult time holding their own later in the game. I am currently at a place where I simply cannot progress because I do not have enough imagination, but none of the armor or weapons that I have access to would help me. My only option, essentially, is to team up and lose out on all the items (assuming I could find someone willing to listen long enough to team up in the first place), or else go on a mad grind fighting low-level enemies and searching for random faction token drops so that I can purchase the next level of class-based equipment. (Which is possibly the most boring waste of my time I can think of.)

Aaaah, bugs!

To top LEGO Universe’s other problems off, there’s a lovely suite of bugs. I don’t know if they are general or specific to the Mac version (which is not really a Mac version, but the Windows version running using TransGaming Cider; I’ve played numerous Cider-based games, and can say pretty definitively that it’s about the shittiest excuse for a port I’ve ever used in all cases). I regularly have to drop out of the game world (by switching minifigures) or quit the client completely to clear up some graphical glitch or other, which is not very conducive to getting into a game.

Odds are the bugs will improve with time, but in the face of the game’s baked-in limitations it’s very discouraging in the short term.

I’m all aloooone, there’s no here besiiiiide meeeee

In the end, though I want to love LEGO Universe and think there’s a huge amount of potential in the game, I am unlikely to use it beyond the free month granted by the initial purchase. After all, what motivation does the game provide me? It borks my custom built models, forcing me to restart from scratch. It actively discourages me from forming any sort of cooperative bonds with other players. The chat filters make it impossible to communicate without endlessly rewritten messages, so I can’t connect to other players outside of the gameplay. I am instead left with the grind of trying to get enough item drops to continue to explore new areas, which gets very old very quickly when you’re on your own.

For people who love LEGOs, I recommend LEGO Universe with reservations. It is certainly worth a month or two of play, although how much enjoyment you will get out of it in the long term will likely depend on how many of your real-world friends are playing it (and thus willing to cooperate out of friendship instead of material in-game motivation).

I’ll be keeping an eye on LEGO Universe in the hopes that they improve the game with future patches, but for the short term it looks like if I want to get my building itch scratched I’d be better off trying Minecraft, which I have been intentionally avoiding in the hopes that LEGO Universe would provide a more polished playfield for creative constructions.

Splitting a string into lines in Javascript

I recently ran into the question of how to split a string into its component lines using Javascript without knowing beforehand what type of linebreaks were being used. After experimenting with the problem for a while, I finally arrived at the following solution (please note that I haven’t tested this cross-browser, but it works great in Safari/WebKit):

var lines = text.match(/^.*([\n\r]+|$)/gm);

Or the alternate version if you want to ensure that each line ends with a single linebreak rather than potentially have lines with multiple line breaks at their end (for my purposes this didn’t matter, but it might for yours):

var lines = text.match(/^.*((\r\n|\n|\r)|$)/gm);

The code assumes that text is a multiline string, and it utilizes the built-in Javascript String.match() method, which when performed with a regex with the global flag enabled will return an array of matches. The multiline flag makes sure that the regex matches at the beginning of every line, and the alternatives at the end of the regex match one or more linebreaks or the end of the line (if we are on the last line). The ultimate result of which is you split the string into a Javascript array with one line per index with the linebreaks preserved.

Houses and hedgehogs and job changes, oh my!

Yesterday I attended a wedding reception for one of my high school friends who reminded me that although he follows this blog, I have been extremely lax in updating it with much beyond descriptions of technical problems and how to surmount them. Whoops. Sometimes I forget that many of my old friends are not into Twitter, which is where I post most of my day-to-day ramblings.

So for those viewers interested in the Life and Times of Ian Beck, here’s an update on what’s been happening with me lately.

Probably my biggest news is that my girlfriend Valerie and I bought a townhouse together about 4-5 months ago. This caused no end of consternation amongst our more traditionally-minded relatives (“You bought a house? You didn’t get married on the sly did you? WTF, mate?”), most of whom are still not able to wrap their heads around the concept of a stable long-term relationship that hasn’t terminated in marriage, kids, and a 50% chance of a messy divorce. Most of these doubters are now waiting for the other shoe to drop; that is, for Valerie to announce that she’s pregnant, and for me to run off like the cad that I am and join the Foreign Legion to escape my responsibilities as a father. Sadly for them, despite growing up in Sumner I developed a working knowledge of contraceptives prior to becoming sexually active. This is thanks to my junior high P.E. teacher who, in direct defiance of district policy, took us into a classroom one day, closed the blinds, and taught us the mantra “latex, latex, latex”. Thanks, Mrs. B. You’re a life-saver. Or new life preventer. Whatever.

In any case, we are now happily situated in Columbia City, which is a great neighborhood in South Seattle. We’re a block away from the light rail station (which Valerie uses to get to work) and a block away in the other direction is the Columbia City downtown area, including an independent movie theater (which shows blockbusters the week they come out; fantastic place), numerous delicious restaurants, a to-die-for bakery, and other fun things.

A couple months prior to buying the house, expanded our little family unit slightly with the addition of Nal, who is a delightful African pygmy hedgehog:

Nal cooks

Before you have time to wonder, yes, hedgehogs are covered with quills. Nal in particular likes to show us just how sharp her quills are (she hates being picked up, and occasionally will ball up completely just to try and prove who is boss), but she also has a powerful curiosity and loves to explore. We have since discovered that Nal’s dislike of initial interactions is a personality quirk; one of Valerie’s friends recently got a hedgehog from the same breeder (and very similar lineage) who is delightfully friendly, if not so interested in exploring his surroundings as Nal.

On a more individual note, I recently changed employers from Tierra Technology, where I was primarily working on front-end web development, to MacRabbit, where I am doing a mixture of customer support, plugin development, and assorted other tasks as needed.

As you may or may not have picked up from other blog posts, I have been doing plugin development for MacRabbit’s text editor, Espresso (or Sugars, as they’re called in MacRabbit parlance) since shortly after the original Espresso beta releases. I also was spending a fair amount of time in the forums, to the point that I was playing unofficial support personnel. Jan (owner of MacRabbit) decided eventually that he needed help reducing distractions from coding, and asked me to come on full time as a part of the company. I happily accepted, since I love Espresso and the other MacRabbit products and looked forward to helping make the software I was using every day even better.

I’ve been a lot happier since making the switch; in my previous job I was getting frustrated because it seemed like I had learned all I was likely to learn. My coworkers generally knew less than I about the tasks were doing, so although I had learned quite a lot initially (and gained invaluable experience with web development), I’d hit the point where it felt like I was just doing the same things day in and day out without ever growing as a programmer. Working for MacRabbit has not only widened the range of tasks that I do on a day-to-day basis, but has also provided new challenges (and the opportunity to work with someone who knows far more about development than I do).

Speaking of programming, I also recently released my first standalone software offering. TapNote is an app for Palm WebOS phones that offers elegant note taking. Working on it is an ongoing learning experience, and although it has not been quite as eagerly adopted by WebOS users as I’d hoped, it is providing a (very slight) amount of additional income, which is nice. The reason I started development on TapNote was that I finally switched away from the iPhone (loved the device, hated the network) and since WebOS did not have any note taking apps that made me happy and the core languages are the web languages I’m already familiar with, it seemed a no-brainer to try my hand at app development.

Other than the house, hedgehog, and job changes life moves on apace. I’m still working from home (MacRabbit is located in Belgium, and although it would be awesome to visit the commute is a bit long otherwise), and Valerie is still dressing and undressing people at the Seattle Children’s Theater.

Now that you know absolutely everything about recent big events in my life, I’ll see about returning to the usual theme of solutions to development problems, occasional opinions about software, books, and movies, and other such boringly normal Beckism.com posts. At least until the next friend gets married and reminds me that people are sometimes interested in my personal exploits rather than my thoughts on WebOS databases and such.