Subscribe: Stevey's Blog Rants
Added By: Feedage Forager Feedage Grade B rated
Language: English
blog  don  game  good  google  hard  java  language  make  mdash  much  people  read  stuff  system  talk  time  years 
Rate this Feed
Rate this feedRate this feedRate this feedRate this feedRate this feed
Rate this feed 1 starRate this feed 2 starRate this feed 3 starRate this feed 4 starRate this feed 5 star

Comments (0)

Feed Details and Statistics Feed Statistics
Preview: Stevey's Blog Rants

Stevey's Blog Rants

Random whining and stuff.

Updated: 2018-04-19T23:01:55.683-07:00


Why I left Google to join Grab


I've officially switched from Blogger to Medium.  See you over there!

Why Kotlin Is Better Than Whatever Dumb Language You're Using


Ah, clickbait.  Where would the internet be without it?  The answer will shock you!But seriously, I didn't mean to insult your favorite language… much.  After all, your language of choice is probably getting better at a glacial pace.  Right?  If your language isn't dead, then it's gradually getting better as they release updates to it.How slowly, though?  Well... If the language you're using happens to be Java, then you've no doubt realized that by the time Java becomes a really good language, you'll be dead.  Loooong dead.  I know we don't like to contemplate our own mortality, but when you plot the trajectory of Java from its birth 20+ years ago to its full knee and hip replacement with Java 8, you can't help but wonder, "Am I going to be stuck with this for literally the rest of my life? What if this is as good as it gets?"Anyhoo, I ran across the old language question again because I finally tried my hand at Android development.  I have an iOS client for my old game Wyvern, and I decided somewhat recently to take the plunge and write an Android version.  I didn't realize that it would turn into a language question (as in, "What the hell am I doing with my life?")  But then, if you've done any Android programming at all, you'll know that this is in fact a burning question in Android-land.My first attempt at doing Android was last summer, and my god it sucked.  I mean, they warned me.  Everyone warned me. "The APIs are terrible", they all said.  I can't say I wasn't warned.How terrible could they be, though?  It's just Java, right?Legacy YuckUnfortunately -- for long complicated legacy reasons that nobody cares about -- some of Android's core APIs really are bad.  I mean baaaaad bad.  Shut the book, take a deep breath, and go out for coffee bad.  The warnings were spot on.It's a mixed bag, though.  A lot of their APIs are just ducky. I found plenty of things that are hard in iOS and easy in Android.  Product flavors, the Downloads service, findViewById(), the Preferences activity, etc.  There is a ton of stuff in Android that has no equivalent at all in iOS, so in iOS you wind up writing gross hacky code or building elaborate libraries to work around it.But!  There's a big "But".  When you're learning and writing for Android, everyone focuses on the bad APIs, for the same reason that when you're in traffic you focus on the red lights, not the green lights. You tend to judge your commute by how many red lights it has.And Android has some pretty big red-light APIs.  Fragments, for example, are a well-known Flagship Bad API in Android.  In fact the entire lifecycle is maddeningly awful, for both Activities and Fragments.  iOS is living proof that it didn't have to be that bad.  There's no defending it.  It's so bad that when I tried it for the first time last summer, I just gave up.  Threw in the towel.  Screw it, I said to myself -- I'll hire someone to do this port, someday.And I didn't look at Android programming again for another half a year.Rescued by RussiansI kept hearing about this new-ish programming language for the JVM and Android called Kotlin.  From Russia, of all places.  More specifically, from JetBrains, the makers of the world-famous IntelliJ IDEA IDE, whose primary claim to fame is its lovely orange, green, purple and black 'Darcula' theme.      Figure 1:  A thousand-year-old vampire expressing his excitement over Java 8.So why is it called Kotlin?  Well, there's a clear play on incrementing the 'J' in Java.  Beyond that, one can only assume that 'Kremlin', 'Khrushchev' and 'KGB' were already taken, probably by UC Berkeley.  So they did the next best thing and named it after a Russian military base.  It's not a bad name, though.  You get used to it.Last year I noticed that Kotlin had a fair amount of buzz.  Not hype, just... buzz.  People were low-k[...]

The Monkey and the Apple


It's been a while!I took a couple of years off blogging because I felt I didn't have much left in the way of interesting things to say.  So I've been just been programming, and studying, and learning this and that.  I've been doing a bit of Cloud development, and I taught myself iOS development, and after years in the Google cocoon I poked my head out and learned how people do things in the real world with open source technologies.And lo at long last, after some five years of tinkering, I finally have something kind of interesting to share.  I wrote a game!  Well, to be more precise, I took an old game that I wrote, which I've perhaps mentioned once or twice before, and I turned it into a mobile game, with a Cloud backend.It has been waaaay more work than I expected. Starting with a more-or-less working game, and tweaking it to work on Cloud and mobile -- I mean, come on, how hard can it be, really?  Turns out, yeah, yep, very hard. Stupidly hard. Especially since out of brand loyalty I chose Google's cloud platform, which 3 or 4 years ago was pretty raw.  And let's face it, iOS APIs have evolved a ton in that timeframe as well.  So even as "recently" as 2013 I was working with some pretty immature technology stacks, all of which have come leaps and bounds since then.And now I have all sorts of stuff to share.  Definitely enough for a series of blog posts.  But I also have less time than before, because it's all happening in my non-copious spare time, all late nights and weekends.  And running an MMORPG is a fearsome task in its own right.Incidentally, I've just opened the game up for beta testing.  So if you want to try it out while you read along, visit to request an invite.  (Edit, 12/13/16 -- BETA IS NOW CLOSED.) You'll need an iPhone, iPad, or iPod running iOS 10.2 (Edit: 9.2!) or later.  I'd love to do Android and PC, but there's only one of me.  For now.So where do I start?  I guess the logical thing to do would be to start at the beginning, but screw all that, I'm starting with the monkey.The MonkeyI had the following conversation with my wife the other day. It went something like:Wifey: Baby, I lost all my stuff!(A lot of our conversations have started this way since April, give or take, when she started playing the game.)Me:  What stuff baby?Wifey: (wailing) All the stuff I had in my house!!  I dropped it all there and them boom, it disappeared, right in front of my eyes.  I was watching it and then five seconds later it was gone.  This happened before, and I didn't want to tell you because I wasn't sure, but I just saw it!  It happened!Me:  OK baby I'll come look.Wifey:  See?  It was right there!  I had a lot of good stuff there and it's gone!Me:  (looking around)  I believe you baby.Me:  (looking around some more)  I think... I think the Monkey did it.Wifey:  What monkey?  What!?  That monkey took my stuff?Me:  (checking)  Yep.  It picked it all up and it's carrying it now.Sure enough, her pet monkey had picked up all her precious loot and valuables.  But while she stared in disbelief at this unexpected betrayal, I was worrying about how I was going to get her stuff back.  Because there were two problems.First, the monkey wasn't killable via combat, since I had marked pet creatures in your personal home as non-attackable.  I don't know if that was the best decision ever, but it seemed reasonable at the time.  And second, there was a chance that if I pulled out the big guns and killed it myself, for instance by invoking its kill() method directly at runtime, its inventory (her loot) would be replaced with the default monkey inventory of bananas and fur, or whatever I'd given them.I'm pretty sure that in most states, accidentally replacing your wife's hard-earned treasure with bananas and bits of fur is legal grounds for divorce. &nbs[...]

The Borderlands 2 Gun Discarders Club


This is basically a review of, and a pros/cons rant about, Borderlands 2. If you're not into it, just don't read it! I'll write about stuff you like some other time. Maybe. So! I'm not the kind of person to say "I told you so." Noooo. Never. Well, never, unless, of course, I get to say it loudly, within hearing of a biggish stadium full of people. Which I can. So here goes: I told you so. Toldya toldya toldya. My predictions from my previous post, "The Borderlands Gun Collectors Club", all came completely 100% true, with Hyperionesque accuracy, Jakobsian impact, Maliwaney inflammatoryness, Tedioric blasting and surprisingly, even Vladofish speed. I made out like a Bandit. I predicted, as you may recall, that (A) it'd be a great game ("duh"), (B) they'd screw up the token economy because they only partly understand it, and (C) as a direct result of B, players would gradually head back to Borderlands. Three weeks after the release, I had my dreaded first "I really don't want to throw this gun away, but I have NO GODDAMN ROOM FOR IT, THANK YOU RANDY PITCHFORK" gun-discarding experience. And my reaction was, predictably, to think seriously about either creating a mule character or going back to play BL1. I mean, I knew I'd have this reaction, but I failed to predict how amazingly fast it would happen. A week playing the game, another week on playthrough 2, a final week finishing all the optional side quests, and then boom -- the farming is fundamentally broken, so let's go play something else. But I don't waaaaant to! Why did they have to get this wrong? Why did I have to be so predictively correct? Argh! Let me make this really simple and clear. You remember that famous exchange in Dr. Strangelove or: How I Learned to Stop Worrying and Love the Bomb: Dr. Strangelove: Of course, the whole point of a Doomsday Machine is LOST if you keep it a SECRET! Why didn't you tell the world, EH?Ambassador de Sadesky: It was to be announced at the Party Congress on Monday. As you know, the Premier loves surprises. Well, if Dr. Strangelove were alive to play BL2 today, he'd have said: Dr. Strangelove: Of course, the whole point of 87 Bazillion Guns is LOST, if you don't let people keep them! Why didn't you add more bank slots, EH? I mean, at least Ambassador de Sadesky had a somewhat plausible excuse. But Gearbox has been thinking over this whole endgame-farming thing for, oh, probably eight years or more. How the hell did they arrive at the conclusion that "We should have 87 bazillion guns, and you personally should be able to keep, like, twelve of them!" There's only one possible answer: they are clueless. I mean, don't get me wrong: they're also lovable, brilliant, passionate, technically astounding, and outright visionary. But they're also and bumbling and clueless. They're the neighborhood kid who catches a lizard and thinks it's really cool, and it *is* cool, except he puts it in a box and it dies. I'll do this as a Good, Bad and Ugly post, just so you know it's, like, balanced. If I were just gushing a bunch of fanboy praise, you know as well as I do that it wouldn't be as credible. You have to hear the bad with the good. But ugh, they were so close. So close! The game is so amazing! Maybe they'll cut my second prediction in half, and release a DLC or patch within 6 months that gets the folks who drifted back to Borderlands to start collecting in BL2 again. That, or maybe I'll contribute to the BL2 player-file-editor project. Modding is stupid, stupid, stupid; it's 12 year olds advertising that they are, in fact, mentally and emotionally really twelve years old. The mindset there is so juvenile that it pains me to admit that sometime in my distant past, decades ago, I probably would have thought that way myself. (That is to say: "Hey, I'm going to mod, because it's not allowed so it must be cool, and even though a fugging gorilla could figure out how to do it, and it takes any hint of challenge out of the game and makes[...]

The Borderlands Gun Collector's Club


.dropcap { font-weight:bold; font-size:120px; float:left; padding:0; margin:-4px 5px 0px 0px; position: relative; background-color:none; line-height:0.9; } .note { color: #4169e1; font-style: italic; } Craw is so damn frustrating!!! He and his sidekicks have killed me so many times that I think I am starting to get sore in real life....arghhh need better weapon!! He will die though, oh yes he will die and I will do the brick dance around his stupid purple corpse. --dedbydwnAt the end of it all, Borderlands is well presented, but get under the {incomprehensible mumble} polish, it's just a dull, spare, nuts-and-bolts shooter with some unnecessarily good writing bridging the slow process of watching numbers steadily increase. A game for the kind of person who takes pictures of his car's odometer whenever it clocks another thousand miles. --Zero PunctuationDiablogenarian: Someone who played Diablo as a kid, still waiting for Diablo III on his 80th birthday.Editor's Note: I totally did not write this post. My friend did. Hi-*her* name is Chaz...mina. So for all you dear people waiting on me for "stuff", whether it's Wyvern or js2-mode or Amazon War Stories or Talent42 or PVOTU or the Effective Emacs movie screenplay or whatever: you can rest easy, confident in the knowledge that I am working 24x7 on your personal needs. I would never DREAM of playing Borderlands all day long for months on end. So *please* stop stalking me. Thank you! PredictionsGearbox gets it. Well, sort of. I mean, it's kinda hard to tell. I predict that Borderlands 2 is going to be an awesome game... but that's a pretty lame prediction, isn't it?  We already know they "get it" at least that much. Gearbox knows how to make an awesome game. Afterwards, though, I predict that everyone will immediately go back to playing Borderlands 1. Now _that_ is a prediction for you. Looking back fondly at Borderlands 2And then Gearbox will sit back and scratch their heads for an uncomfortably long time. Long enough to where you start wondering in all seriousness whether it's lice or something. But then after about a year, a very scratchy year, they'll release a DLC that finally gets people to stop playing Borderlands 1, over 5 years after its initial release. Even then it will be a slow transition, because they were too damned successful with the first game. People are living there now. But I'm not convinced that Gearbox understands why. The evidence is mixed. Today's topic: the Magic Recipe for creating addiction. Hell, it doesn't even matter if it's a game or not. If you want your website or product to be addictive, the recipe is really simple. I'll even share it with you. Gearbox somehow stumbled or fumbled into the recipe. But nothing they've said publicly since then indicates that they understand all the ingredients that went into creating it -- including a few all-important rats and cockroaches that fell in while they weren't looking. Another prediction: there's going to be an MMO version of Borderlands someday. And when it happens, you will be able to find me there. I will renounce every last shred of my real-world identity and go live there until I'm finally whacked by one of my helpful stalkers. Wait, dude, hang on -- I played Borderlands. It was OK, but nothing to go cryin' to Mom aboutWell, no. No, you didn't really play Borderlands. What you played was more like a teaser demo. If you made it through the main storyline and killed the huge vaginalien (complete with Japanese-style tentacles) in the comically misnamed "Vault", but then you put the game away -- well, my friend, I'm sad to tell you that you missed out. All you got was the merest sniff of what the game had in store. And it smelled like... well, the ending was a little fishy, if you catch my drift. See, you have to play the whole thing all the way through _twice_. Not with different characters,[...]

Hacker News Fires Steve Yegge


I woke up this morning...ish... to discover that Hacker News had finally had enough of me being at Google, so they forced me into early retirement.On Monday I was honored to be able to deliver a keynote talk at OSCON Data. In the talk, I announce at the end that I am quitting a project that I had very publicly signed up for, one that I am not passionate about and don't personally think is very important to the human race. Though others clearly do, and that's a legitimate viewpoint too.But the power of suggestion can make you see and hear something entirely different. If, for instance, someone tells you that I gave the talk wearing a gorilla suit, then when you watch it, I will magically appear to be wearing a gorilla suit. It's actually a gray jacket over a black shirt, but you will perceive the jacket as the back-hair of a male silverback gorilla! And to be honest the talk could have benefited from the judicious application of a gorilla suit, so no harm there.Similarly, if someone on Hacker News posts that "Steve Yegge quits Google in the middle of his speech" and links to the video, then you will watch the video, and when I say the word "project" at the end of my speech, a magical Power of Suggestion Voice-Over will interrupt -- in a firm manly voice totally unlike my own quacking sounds -- with "Gooooooogle". And then you will promptly sink into a 15-minute trance so that the voice-over can occur in the middle of my speech where Hacker News said it happened, instead of 96.7% of the way through the talk where it actually happened.I am going to harness this amazing Power of Suggestion, right here, right now. Here goes.You are going to come work at Google! You are going to study up, apply, interview, and yes, you are going to work there! And it will be the most awesome job you've ever had or ever will have!I hope for your sake that this little experiment works, because Google is frigging awesome, and you'll love it here. And they'll be happy to have you here. It's a match made in heaven, I'm tellin' ya. It might take you a couple tries to get in the door, because Google's interview process -- what's the word I'm looking for here -- ah yes, their process sucks at letting in all the qualified people. They're trying to get better at it, but it's not really Google's fault so much as the fault of interviewers who insist that you're not qualified to work there unless you are exactly like them.Of course, there are interviewers like that wherever you go. The real problem is the classic interview process, which everyone uses and which Google hasn't innovated on, not really. It's like deciding whether to marry someone after four one-hour dates that all happen on the same day in a little room that looks kind of like a doctor's office except that the examining table is on the wall.The reason I haven't been blogging lately is that working at Google is so awesome that I just don't feel like doing anything else. My project is awesome, the people are awesome, the work environment is over-the-top-crazy-awesome, the benefits are awesome, even the corporate mission is awesome. "Organize the world's hardline goods in little brown boxes delivered straight to your doorstep" -- that's an awesome mission, yeah?Wait, sorry, that was a flashback to the Navy or something. "Organize the world's information" -- that's the one. It's a mission that is changing the course of human events. It is slowly forcing governments to be more open, forcing corporations to play more fairly, and helping all of us make better decisions and better use of our time.In that vein, the part of my brain that makes Good Decisions was apparently broken a few weeks ago, when I allowed myself to be cajoled into working on something that I wasn't passionate about. I am an eternal optimist, and I figured I could teach myself to be passionate about it. And I tried! I spent a few weeks pretending that I was passionate about[...]

eBay Patents 10-Click Checkout


San Jose, CA (Reuters) — Online auctions cartel eBay (NASDAQ: EBAY) and its collections and incarceration arm PayPal announced that on July 21, 2011, the two companies had jointly been awarded United States Patent No. 105960411 for their innovative 10-click “Buy it Now” purchasing pipeline.

The newly-patented buying system guides users through an intuitive, step-by-step process of clicking “Buy It Now”, entering your password, logging in because they signed your sorry ass out again, getting upsold shit you don’t want, continuing to your original destination, accepting the default quantity of 1 (otherwise known as “It”), committing to buy, clicking "Pay Now", entering a different password than your first one, clicking "Log In" again god dammit, declining to borrow money from eBay’s usury department, reviewing the goddamn purchase details since by now you’ve completely forgotten what the hell you were buying, and finally confirming the god damned payment already.

The 10-click checkout system, known colloquially as 10CLICKFU -- which many loyal users believe stands for “10 Clicks For You” -- was recently awarded top honors by the National Alliance of Reconstructive Hand Surgeons. 10CLICKFU incorporates a variable number of clicks ranging from eight to upwards of fifteen, but eBay’s patent stipulates that any purchasing system that lies to you at least nine times about the “Now” part of “Buy It Now” is covered by their invention.

The patent award came as a surprise to many analysts, since several of eBay’s related patent attempts had been rejected on the basis of prior art. In one well-publicized filing, eBay had tried to patent a purely decorative, non-operational “Keep me signed in” checkbox, but Sony’s PlayStation Network already had one just like it. And another eBay patent claim for excruciating page load times was rejected because the iPad App Store is still loading.

But eBay’s boldest and potentially furthest-reaching patent attempt was for “100% Inaccurate Button Text”. The invention claim was based on several of their UI elements, but rested primarily on the “Buy It Now” button, which eBay claims contains enough inaccuracies to render it "complete bullshit." Their patent was rejected by the US Patent Office review committee on the grounds that the Firefox browser’s “Do this automatically from now on” checkbox has been complete bullshit for over fifteen years. eBay says they will appeal the ruling because the checkbox is not technically a button.

eBay’s spokesperson Paula Smugworth announced that eBay will continue to innovate on ways to remind their users that monopolies can do whatever the hell they want. “Not that eBay is a monopoly,” she added. “But if we were a monopoly, then we could do whatever the hell we wanted. I’m just sayin’.”

eBay’s stock rose on the news, driven largely by anonymous shill bidders.

Haskell Researchers Announce Discovery of Industry Programmer Who Gives a Shit


The worldwide Haskell community met up over beers today to celebrate their unprecedented discovery of an industry programmer who gives a shit about Haskell.On Wednesday, researchers issued a press release revealing that 27-year-old Seth Briars of North Carolina, a Java programmer at Blackwater accounting firm Ross and Fordham, actually gives a shit about Haskell."Mr. Briars has followed every single one of our press releases for years," the press release stated. "Probably even this one."Haskell researcher Dutch Van Der Linde explained how they had stumbled on the theoretical possibility of Briars and his persistent interest in Haskell. "We knew that there are precisely 38 people who give a shit about Haskell," said Van Der Linde, "because every Haskell-related reddit post gets exactly 38 upvotes. It's a pure, deterministic function of no arguments -- that is, the result is independent of what we actually announce. But there are only 37 of us on our mailing list, so we figured there was a lurker somewhere.""That, or it was an off-by-1 error not detectable by our type system," Van Der Linde added. "But we don't, uh, like to dwell on, I mean with good unit testing practices we can, um... sorry, I need to get some water."As Van Der Linde stumbled off in a coughing fit, his fellow researcher Bonnie MacFarlane outlined their basic dilemma: "Finding a person who gives a shit about Haskell is an inherently NP-complete computer science problem. It's similar in scope and complexity to the problem of trying to find a tenured academic who didn't have the bulk of his or her work done by uncredited graduate students. So even though we suspected Briars existed, we needed a strategy to smoke him out."She explained the trap they set for Briars: "We crafted a fake satirical post lampooning Haskell as an unusable, overly complex turd -- a writing task that was emotionally difficult but conceptually trivial. Then we laced the post with deeper social subtext decrying the endemic superficiality and laziness of global industry programming culture, to make ourselves feel better. Finally, each of us upvoted the post, which was unexpectedly contentious because nobody could agree on what the reddit voting arrows actually mean.""And then we waited to see who, if anyone, would give a shit," she said.MacFarlane concluded, "Our elegant approach didn't work, so we hired a Perl hacker to go dig up the personal details on all 38 accounts that had ever upvoted a Haskell post, and the only one we didn't know was Seth Briars. So we reached out to him, and thankfully so far he hasn't threatened to sue us."Briars says he is pleased to have been recognized for his apparently unique shit-giving about Haskell. "I've been giving a shit about Haskell for a long as I can remember. I follow all their announcements and developments closely, just in case I ever get the urge to use the language for something someday.""It's a beautiful, elegant language," Briars observed as he busied himself cleaning a fingernail. "You'd be hard-pressed to find a more expressive and composable core. And they've made astounding advances over the years in performance, interoperability, extensibility, tooling and documentation.""I'm kind of surprised I'm the only person on earth who gives a shit about it," Briars continued. "I'd have thought there would be more people following the press releases closely and then not using Haskell. But they all just skip the press releases and go straight to the not using it part.""People see words like monads and category theory," Briars continued, swatting invisible flies around his head for emphasis, "and their Giving a Shit gene shuts down faster than a teabagger with a grade-school arithmetic book. I'm really disappointed that more programmers don't get actively involved in reading endless threads about how to subvert Haskell's type system to acc[...]

Wikileaks To Leak 5000 Open Source Java Projects With All That Private/Final Bullshit Removed


EYJAFJÖLL, ICELAND — Java programmers around the globe are in a panic today over a Wikileaks press release issued at 8:15am GMT. Wikileaks announced that they will re-release the source code for thousands of Open Source Java projects, making all access modifiers 'public' and all classes and members non-'final'.Agile Java Developer Johnnie Garza of Irvine, CA condemns the move. "They have no right to do this. Open Source does not mean the source is somehow 'open'. That's my code, not theirs. If I make something private, it means that no matter how desperately you need to call it, I should be able to prevent you from doing so, even long after I've gone to the grave."According to the Wikileaks press release, millions of Java source files have been run through a Perl script that removes all 'final' keywords except those required for hacking around the 15-year-old Java language's "fucking embarrassing lack of closures."Moreover, the Perl script gives every Java class at least one public constructor, and turns all fields without getters/setters into public fields. "The script yanks out all that @deprecated shit, too," claims the controversial announcement.Longtime Java programmer Ronnie Lloyd of Austin, TX is offended by the thought of people instantiating his private classes. "It's just common sense," said Lloyd, who is 37. "If I buy you a house and put the title in your name, but I mark some of the doors 'Employees Only', then you're not allowed to open those doors, even though it's your house. Because it's really my house, even though I gave it to you to live in."Pacing and frowning thoughtfully, Lloyd continued: "Even if I go away forever and you live there for 20 years and you know exactly what's behind the doors — heck, even if it's a matter of life and death — plain old common sense still dictates that you're never, ever allowed to open them for any reason.""It's for your own protection," Lloyd added.Wesley Doyle, a Java web developer in Toronto, Canada is merely puzzled by the news. "Why do they think they need to do this? Why can't users of my Open Source Java library simply shake their fists and curse my family name with their dying breaths? That approach has been working well for all the rest of us. Who cares if I have a private helper function they need? What, is their copy/paste function broken?"Wikileaks founder Julian Assange, who coined the term "Opened Source" to describe the jailbroken open-source Java code, fears he may be arrested by campus security at Oracle or possibly IBM. The Wikileaks founder said: "Today the Eclipse Foundation put out a private briefing calling me a 'non-thread-safe AbstractKeywordRemovalInitiatorFactory'. What the fuck does that even mean? I fear for my safety around these nutjobs."The removal of '@deprecated' annotations is an especially sore issue for many hardworking Java developers. "I worked hard to deprecate that code that I worked hard to create so I could deprecate some other code that I also worked hard on," said Kelly Bolton, the spokesperson for the League Of Java Programmers For Deprecating The Living Shit Out Of Everything."If people could keep using the older, more convenient APIs I made for them, then why the fuck would they use my newer, ridiculously complicated ones? It boggles the imagination," Bolton added.The Eclipse CDT team was especially hard-hit by the removal of deprecation tags. Morris Baldwin, a part-time developer for the CDT's C++ parsing libraries says: "We have a policy of releasing entire Java packages in which every single class, interface and method is deprecated right out of the box, starting at version 1.0.""We also take careful steps to ensure that it's impossible to use our pre-deprecated code without running our gigantic fugly framework," the 22-year-old Baldwin added. "Adding public constru[...]

Blogger Finger


Well! I've sure had a nice relaxing blog-free year. No worries, no haters, no Nooglers wandering by my office and staring at me through the window as if they expect me to crap in my hand and hurl it at them. Not that I wasn't tempted.Nope, it's just been peace and quiet and reading and coding and practicing my guitar and stuff. It's been awesome.And now that everyone's completely forgotten who I am, or whatever exactly I'd said that made them feel all butthurt inside -- as measured by my incoming email rate, which is finally near-zero -- I figure it's probably safe to get back in the water.I'm not really sure what my plans are going forward, other than staying employed at Google until the day comes when I need one of their comfy, brightly-colored caskets. Other than that, my plans are flexible. I'm feeling downright leisurely at the moment.I realize now that I was trying way too hard to change the world via blogging, and it made me care maybe just a little too much. This was bad for my mental and emotional health. Caring is fine. Lots of things are worth caring about. Very few of them merit sacrificing your health.Fortunately during my ad-hoc sabbatical I was able to gain some new perspectives by distancing myself a bit from the constant storm going on in the tech world.One nice perspective I gained is this: There is nothing on this earth that can make everyone happy. Reddit is a huge, living, breathing demonstration of this, since essentially no reddit post ever goes above maybe 80% approval, and a "good" post seems to hover around 65%-70% liked.That made me feel better about the haters. Haters abound. They're just a fact of life, part of the human condition. There's no need to waste energy hating haters.Another perspective I gained was that decorating your mansion with works of art you know nothing about is amazingly rewarding, as long as you can mix it up by leaping across rooftops and assassinating bad guys and hanging with your buddy Leonardo. I swear, if they ever make a movie about my life, the handsome and dashing actor who plays me, when asked on his deathbed which of life's pleasures had given him the greatest happiness, will say something cheesy that makes the audience ooh and aww with appreciation, but it'll be total Hollywood bullshit, because what I really will have said was "gaming".Yet another perspective I gained is that I now actually agree with everyone who complained that my blog posts were too long. Reddit has ruined my attention span for online material. There seems to be no such thing as too frequent, but there's definitely such thing as too long. So I'll be better about that.I used to have this pet theory that the length of my blogs is a big part of why they've been noticed at all. I mean, look at this dude. If he'd written only one or two crazy things, he'd be just another nutjob, but by dint of almost superhuman persistence he's managed to get the entire world to laugh at him.I was sort of aiming for getting people to laugh with me, but I used the same basic recipe as Time Cube Dude. And the formula seemed to be working, modulo the haters.However, Dave Barry -- my Personal Childhood Hero (66% liked!) -- always wrote his columns in chunks of 800 words, even if it necessitated inserting filler words such as "booger" and "legislative session" into his articles about wine tasting or car engines or bat guano, or whatever it was that caught his fancy that week.Overall it seems likely that post-length is less important than factors such as quality, consistency, passion, relevance, and legislative booger session.So I was originally thinking of writing up to a maximum of 800 words today, and I'm at about 500 now, but I've been really successful at my Not Caring Too Much Initiative, so... later! Nice chatting with ya. Cheerio!HAHAHA DISREGAR[...]

A programmer's view of the Universe, part 3: The Death of Richard Dawkins


We're getting close to the end of my blog. After today's entry, I only have three left to write. After that, I'll only blog anonymously or (more likely) not at all.

This is part three of five in my "Programmer's View of the Universe" series. I struggled for a while with how best to introduce the ideas in this installment, and ultimately opted for a short story.

This is a science fiction short story. It's different from many other sci-fi stories in that it is set in the "near future", but it has realistic schedule estimates. So unlike 1984, 2001, The Singularity is Near and all the other sci-fi stories that grossly underestimated their project durations, this one is set 1000 years in the future. I.e., right around the corner.

The story is disrespectful to pretty much everyone in the world. It will create a fantastic shit storm. This is probably a good time to point out that I don't speak for my employer. [Edit: Yay for fiction! Apparently marking something as fiction placates people. Nice to know.]

The story is 18 pages (PDF from Google Docs print preview). That's not unusual for my blog, but I went ahead and published it as a standalone document.

I'd encourage you to enjoy it, but I'm old and embittered enough to know better. You probably shouldn't even read it. Just wait for someone to summarize it for you.

Installments 4 and 5 will not be short stories; they will be regular old blog rants. In them I will further develop these ideas, and I will also attempt to clear up any gross misconceptions about the story, of which there are bound to be many.

My final blog-rant entry is the only one I care about anymore. I've been working on it so hard that my fingers have started to fail. It's been tons of fun, aside from the chronic pain. It's about a neat programming language, and Emacs, and lots of other stuff. I can't wait!

Oh yeah. Here's the link to the story. I've never done a read-only Google Docs link before, so it's probably broken. Or editable. I don't know. We'll see.

This week is going to suck. People are going to be mad. Maybe I should take a vacation and come back when the whining is finished. Can someone email me and let me know when it's all blown over?

Have you ever legalized marijuana?


Over the holidays I read a neat book called Predictably Irrational: The Hidden Forces That Shape Our Decisions, by Dan Ariely. The book is a fascinating glimpse into several bizarre and unfortunate bugs in our mental software. These bugs cause us to behave in weird but highly predictable ways in a bunch of everyday situations.For instance, one chapter explains why bringing an uglier version of yourself to a party is guaranteed to get you more attention than other people who are arguably better-looking than you are. I personally do this all the time, except that I'm usually the ugly one. The same principle explains a ploy used by real-estate agents to get you to buy ugly houses.Another chapter explains the bug that causes you to be a packrat, and shows why you desperately hold on to things you own, even if you know deep down that they would rate lower than pocket lint on eBay.In any case, well, good book. I'm going to harsh on it a teeny bit here, but it's only one tiny part towards the end, one that actually has little to do with the rest of the research presented in the book. I still highly recommend it. It's only about a 4- or 5-hour read: beyond the reach of most social-network commenters, perhaps, but you can probably handle it just fine.So: about that harshing. Dan Ariely, who seems like a pretty fascinating guy in his own right, independent of his nifty book, says something that's kinda naïve towards the end. It doesn't seem naïve at all when you first read it. But naïve it is.Towards the end of the book — and I apologize here, since my copy is on loan to a friend at the moment, and you can't search inside the book on no-thanks to the book's publisher, so I can't double check the exact details — but towards the end, Dan works himself into a minor frenzy over what seems like a neat idea about credit cards.Credit Card BucketsDan's idea is simple and appealing: let's partition credit limits into "buckets". People are always maxing out their credit cards, and it leads to all sorts of financial misery, since the rates are always by definition just epsilon short of legal usury, so most people can never, ever pay down the debt.Dan's idea is more or less as follows: you divide up your credit card available balance into "buckets", where each bucket represents a type of expense. You might, for instance, have a bucket for rent and utilities, a bucket for alimony, a bucket for chocolate and desserts, a bucket for sports and leisure activities, a bucket for dining out, a bucket for home improvement, a bucket for groceries, and a bucket for discretionary spending, or "misc".Each bucket would have its own credit limit, and the sum of all the individual limits would be your credit limit. Let's assume you pay off your credit card entirely every month — not typical, but it simplifies the explanation. Each month, you'd have a certain amount of money to spend on each bucket, and you would not be allowed to spend more than the limit for that purchase type.OK, so that's the way I understood the proposal. There were several pages devoted to it, as I recall, so I may have missed a few nuances here and there, but I'm hoping I've captured the essence of it.As an aside, I read a short diatribe many years ago by a working mom whose kids were always asking her why they couldn't spend more money on entertainment purchases like video games. She was having trouble getting through to them, so one month she took her paycheck, went to a bank, and got it issued to her in 1-dollar bills. She took the bills home and piled them up on the table in front of her kids, who were amazed at the giant pile of money she had made. She then went through her budget with them, stacking the bills into piles by expense type[...]

Story Time


So I've got all these fancy blog posts planned. More than planned, actually — they're well underway. But it's also been a busy couple of months, so nothing's really ready yet.To make my schedule even worse, I kind of sort of got myself a little bit addicted to the writings of this one blogger. Normally I can't frigging stand blogs, including my own. Everyone always asks me what blogs I read, and I reply: "Um... do books count?" Which of course is greeted with blank stares, since nobody seems to read books anymore these days. Such a shame.Anyway, recently I tried another fling with reddit. I'm always getting addicted to reddit for a little while, and then coming off it cold-turkey for a month or two while I reassess whether I want to be spending my life reading pun threads and upmodded lolcat pictures and conspiracy theories.Not to mention the comments, which can individually sometimes be quite cool, but in aggregate only make sense when you read them aloud with the voice of the Comic Book Guy from the Simpsons: "I upvoted you for the appropriate uses of 'its' and 'their' in the link title, but downvoted you because your link actually appeared on a little-known German social networking site several hours ago. I feel it is important that you understand that this is not a zero-vote of abstention, but rather a single upvote and a single downvote cancelling one another out." If you read the comments with CBG's voice, a lot of them make a whole lot more sense.No matter how many times I quit, in the end I always wind up sneaking a peek at the reddit home page in a moment of weakness, and before long I'm hooked again, following the adventures of memes about narwhals and how is babby formed and all this other stuff I have zero context for, but occasionally it's hysterically funny. I'm guessing this is more or less what heroin is like. Some days I don't even shower.In any case, my latest reddit flirtation ultimately led to a secondary and more severe addiction to the writings of some dude who goes by the name "davesecretary". Yeah, him. He's a fucking genius. I started reading his old re-posted stories, got hooked and basically blacked out and lost about three days where nobody knew where the hell I was. Eventually I made my way to his stories about his trip to China. At that point I became actively envious of someone for I think the second or maybe third time in my adult life. I'm just not the jealous type normally, but damn that guy can write. He has a real gift.So now I'm flat-out jealous. I'm not going to make a secret of it, either, and pretend he's started some trend and I'm just a bigger light jumping on the bandwagon or some lame shit like that. No, he writes way better than I do, and I'm just going to copy him blatantly, like Terry Brooks rewriting Lord of the Rings line-by-line badly as Shitstorm of Shannara.I had actually already been thinking of publishing some true stories. In fact before I stumbled on davesecretary's tales, I had written down the story below about my brother Dave taking out the garbage, and I had been planning more. But Dave Secretary's stories were like the Great Pyramids next to the mud pueblo of my own ambition. He's like a force of nature; stories just surround the guy like gnats, and he spews out the funniest, most interesting possible versions of them imaginable.So while I work on my more technically ambitious blogs-in-progress, I thought I'd kick off a series of light reading. It's all true stories. None of it is anywhere near as cool as trying to find a box bigger than Kyle's goddamn cereal box, and nothing in them is anywhere near as funny as the line "Iodine, Dave." But at least these are my own stories, and they're kinda fun to write do[...]

A programmer's view of the Universe, part 2: Mario Kart


This is the second installment of a little series of discussions. They're not much more than that, just discussions. And I hope I'm inviting discussion rather than quenching it. But I'll be honest — the goal of this series is to pound a stake through the heart of a certain way of thinking about the world that has become quite popular. If my series fails in that regard, I hope it may still provide some entertainment value.Part one, The fish, was about a twisty line and a fish's examination of it. Today we move to a twisty plane.Embedded SystemsThere are many kinds of computer programs, and many ways to categorize them. One of the broadest and most interesting program categories is embedded systems. These systems are the centerpiece of today's little chat.Embedded systems are a bit tricky to define because they come in so many shapes and sizes. Loosely speaking, an embedded system is a little world of its own: an ecosystem with its own rules and its own behavior. So an embedded system need not even be a computer program: a fish tank is also a kind of embedded system.We call them embedded systems because they exist within the context of a host system. The host system provides the machinery that allows the embedded system to exist, and to do whatever it is that the embedded system likes to do.For fish tanks, the host system is the tank itself, which you may purchase from a pet store. A tank has walls for holding the water in, filters and pumps for keeping the water clean, lights for keeping the fish and plants alive a little longer, and access holes for putting your hand through to clean the tank. There's not much to it, really. The embedded system is everything inside: the water, the plants, the rocks, the fish, and the little treasure chest with bubbles coming out.For computer games, another popular kind of embedded system, the host system is the computer that runs the game: a PC, a game console, a phone, anything that can make a game exist for a while so that you may play it.Programmers have been building embedded systems for many decades: a whole lifetime now. It is a well-studied, well-understood, well-engineered subject. Gamers understand many of the core principles intuitively; programmers, even more so. But in order to apply all that knowledge outside the domain of embedded systems, we will need some new names for the core ideas.The most important name is the One-Way Wall. I do not have a better name for it. It is the most important concept in embedded systems. In lieu of a good name, I will explain it to you, and then the name will stand for the thing you now understand. It's the best I could come up with.But first let's dive into an embedded system and see what this wall looks like from the inside.Mario KartI will assume you've played Mario Kart, or you've at least watched someone else play it. Mario Kart is the ultimate racing game in terms of sacrificing realism for fun. It bears so little resemblance to reality that it's a wonder it tickles our senses at all. The Karts skid around with impossible coefficients of friction, righting themselves from any wrong position, and generally making a mockery of the last four centuries of advances in physics.It's really fun.Mario Kart, like all games, has a boundary around the edge of the playing area. In Mario Kart you bump into it more often than in most other games, which is part of the reason I chose it to be our Eponymous Hero. If you want to win a race, you will need to become quite good at accelerating around corners, which means you will spend a fair amount of time bumping up against an invisible wall.You know the wall I'm talking about, right? It's invisible, so you can see right past it[...]

Fable II: Arguably Better than Getting Your Head Crapped On


I finished Fallout 3 maybe six or eight weeks ago, and it was hands-down one of the best games I've ever played. A game like that gets you in the mood for more gaming, so I thought to myself: "Hey, I should plop down $160 for Fable II!"Actually that's not exactly what I thought, but it's what happened. I bought the game for $60, fired it up, got up to the part in the intro where a bird craps on your head (yes, this is how it starts), and it locked up hard. Reset the XBox, tried again, and this time got as far as some guy selling snake oil gadgets before it locked up again. Snake oil, indeed.I tried playing for about an hour, with the game crashing every 3 to 5 minutes, and I finally went online to read about how it kills XBoxes and it's the Game of Death and blah blah blah, all interesting but not especially helpful. Eventually I stumbled across discussions of the "install to hard drive" option. Nobody actually said how to do it, so it took another hour of digging to deduce that you need to purchase a $100 wireless network adapter (or 100 feet of network cable, I guess). So I shut it down for the night, waited for the stores to open, forked over the $100, and installed the game to the hard drive. To Lionhead's credit the game never crashed again, making it significantly more stable than Oblivion or Fallout 3.I tried hard to like Fable 2. I didn't even need to like it $160. I would have settled for a $60 value. I vaguely remember liking Fable 1, although I can't remember anything about the game except for one neat scene where you had to escort two NPCs through a dark valley. One of the NPCs has been bitten by a Balverine (a werewolf), and the two argue the whole trip about whether he's going to turn. It's a funny conversation and the scene has a funny ending. Other than that, I just have vague recollections of shooting birds on the roof of some guild, and needing to get a 6-foot handlebar moustache for some side quest. The rest of it is basically a blank. But I had set some flag to the effect that "I liked it," and I wanted to like the sequel too.Unfortunately, with a few noteworthy exceptions that I'll call out in the "Highlights" below, the game is entirely forgettable. It's already fading from memory as we speak. It wasn't as bad as some people make it out to be. It's playable for a couple of days, and it has its fun moments. But it's not a very good game, and it's definitely not a very memorable game. This is sad, considering the amount of effort that went into its development.The no-spoiler synopsis of Fable 2 is that it's a bad Zelda clone. You can smell the desperation; there are dozens and dozens of direct rip-offs from the Zelda franchise. Heck, I wouldn't have minded a half-decent Zelda clone; they're some of the best games of all time. But Fable 2 misses the mark by a mile. The humor is juvenile bordering on imbecilic, the hints are hamfisted, the areas are small and cramped, the minigames are lackluster, the music is virtually nonexistent, and the story pacing is rushed and breathless. It's a cargo-cult copy of Zelda that winds up having no identifiable soul: forgettable across the board.I've given up every piece of Microsoft software and hardware I own except for the XBox, which I had been holding onto just for Fable 2. Now that it's come and gone like a bird crapping on my head, I'm giving up. No more XBox or PC games for me. Ever.Hence, Fable 2 cost me $160. I hope you got it for cheaper than that.Anyway, here's a quick rundown of the lowlights and highlights of the game, as I see them. Enjoy!Lowlights1) Humor. Fable 2 tries hard to incorporate humor into the game — too hard. The writers use the[...]

Ejacs: a JavaScript interpreter for Emacs


So! I have all these cool things I want to write about, but I broke my thumbnail. Can you tell that's a long story?See, this summer I got excited about playing guitar again. I usually switch between all-guitar and all-piano every other year or so. This summer I dusted off the guitars and learned a bunch of pieces, and even composed one. I was prepping for — among other things — a multimedia blog entry. It was going to have a YouTube video, and a detailed discussion of a wacky yet powerful music programming language you've probably heard of but never used, and generally just be really cool.And then it all came crashing down when I busted my thumbnail off. And I mean off — it broke off at least a quarter inch below where the nail and skin meet. Ick. I just accidentally jabbed my steering wheel, and that was that.I remember reading an interview with some dude who said he had punched a shark in the nose. He said it was like punching a steering wheel. So now I know more or less what it's like to punch a shark in the nose, I guess. There's always an upside!Anyway, that was going to be my magnum opus (literally: Op. 1) for the year, but it fell through for now. I'll have to revisit the idea next year. My thumbnail's back, but it's been at least 2 months since I touched my guitar, so I'll have to start over again.Work has been extraordinarily busy, what with having to collect all these Nuka-Cola Quantum bottles and so on. I'm sure you can imagine. So I haven't had much time to blog lately.But I do like to publish at least once a month, whether or not anyone actually cares. It's been about a month, or it feels that way anyway, and all I have to show for it is this box of Blamco Mac and Cheese.So I'm cheating this month.You know how on Halloween how you walk around in your costume holding your little bag and you say "trick or treat", and every once in a while some asshole does a trick instead of dumping half a pound of candy into your bag? And then he has to explain to all the dumbfounded and unhappy kids that "Trick or Treat" means that a trick is perfectly legal according to the semantics of logical-OR, and the kids remember that a-hole for the rest of their childhoods and avoid his house next year?Yeah.So I'm doing a trick this time. Hee. It's actually kind of fun when you're on the giving end.My trick is this: in lieu of saying anything meaningful or contemporarily relevant, I'm writing about something I did over a year ago. And there isn't much to say, so this really will be short.EjacsAround a year ago, I wrote a blog called Stevey's Boring Status Update, mostly in response to wild rumors that I'd been fired from Google. Not so. Not yet, anyway.In that blog I mentioned I was working nights part-time (among other things) on a JavaScript interpreter for Emacs, written entirely in Emacs Lisp. I also said I didn't have a name for it. A commenter named Andrew Barry suggested that I should not call it Ejacs, and the name stuck.Ejacs is a port of Narcissus. Narcissus is a JavaScript interpreter written in JavaScript, by Brendan Eich, who by pure unexpected coincidence is also the inventor of JavaScript. Narcissus is fairly small, so I thought it would be fun to port it to Emacs Lisp.It turns out Narcissus is fundamentally incomplete. It cheats. It's that trick guy on Halloween. Narcissus has a working parser and evaluator, but for its runtime it calls JavaScript. So it's kind of like saying you're building a car by starting from scratch, using absolutely nothing except for a working car.This meant I wound up having to write my own Ecma-262 runtime, so that the evaluator would have[...]

A programmer's view of the Universe, part 1: The fish


I write a column for computer programmers called "Stevey's Blog Rants." It's basically a magazine column — I publish to it about once a month. The average length of my articles is about 12 pages, although they can range anywhere from 4 to 40 pages, depending on how I'm feeling. But for precedent, don't think blogs: think of Reader's Digest. The blog format sets the wrong expectations.Hence, some people complain that my articles are too long. Others complain that I have not given my arguments sufficient exposition, and that my articles are in fact too short on detail to warrant any credibility. This is a lose-lose situation for me, but I keep at it nonetheless because I enjoy writing. Even if nobody were to read my blog, the act of writing things down helps me think more clearly, and it's engaging in the same way that solving a Sudoku puzzle is engaging.You should try it yourself. All it takes is a little practice.My blog topics vary widely, and sometimes I even venture outside the realm of programming. Programming is where I'm most comfortable, and it's also where people seem to ascribe to me some level of punditry: I'm not necessarily right, but even my greatest detractors grudgingly admit that I'm entitled to an opinion, by virtue of my having spent twenty years hacking day and night without any sign of wanting to give it up and turn into a pointy-haired manager.Even though I love both programming and to a lesser extent writing about it, there are also lots of non-programming topics I'd like to write about. Being a career programmer gives you an interesting perspective on issues not directly related to programming. You start to see parallels. So maybe I'll branch out some more and see how it goes.The programmer's viewThe first thing you notice as a programmer is that it trains you — forces you, really — to think in a disciplined way about complex logic problems. It also gives you a big booster shot of confidence around problem-solving in general. Junior programmers tend to have very high opinions of themselves; I was no exception.In time, though, programming eventually humbles you, because it shows you the limits of your reasoning ability in ways that few other activities can match. Eventually every programmer becomes entangled in a system that is overwhelming in its complexity. As we grow in our abilities as programmers we learn to tackle increasingly complex systems. But every human programmer has limits, and some systems are just too hard to grapple with.When this happens, we usually don't blame ourselves, nor think any less of ourselves. Instead we claim that it's someone else's fault, and it just needs a rewrite to help manage the complexity. In many cases this is even true.Over time, our worldwide computer-programming community has discovered or invented better and better ways ways to organize programs and systems. We've managed to increase their functionality while keeping the complexity under control.But even with such controls in place, systems can occasionally get out of hand. And sometimes they even need to be abandoned altogether, like a dog that's gone rabid. No matter how much time and love you've put into such systems, there's no fixing them.Abandoning a system is a time of grieving for the folks who've worked on it. Such systems are like family.And there's a disturbing lesson at the tail end of such experiences. The scary thing is that it's very easy, as a programmer standing at the precipice of complexity, to envision systems that are orders of magnitude more complex, millions of times more complex, even unimaginably more complex.I[...]

The Universal Design Pattern


  This idea that there is generality in the specific is of far-reaching importance. — Douglas Hofstadter, Gödel, Escher, Bach Note: Today's entry is a technical article: it isn't funny. At least not intentionally.Update, Oct 20th 2008: I've added an Updates section, where I'll try to track significant responses, at least for a week or so. There are three entries so far.Contents Introduction Three Great Schools of Software Modeling Class Modeling Relational Modeling XML Modeling Other schools Finding the sweet spot Property Modeling Brains and Thoughts Who uses the Properties Pattern? Eclipse JavaScript Pushing it even further The pattern takes shape... Wyvern Lisp XML revisited Bigtable Properties Pattern high-level overview Representations Keys Quoting Missing keys Data structures Inheritance The deletion problem Read/write asymmetry Read-only plists Performance Interning strings Perfect hashing Copy-on-read caching Refactoring to fields Refrigerator REDACTED Rolling your own Transient properties The deletion problem (remix) Persistence Query strategies Backfills Type systems Toolkits Problems Further reading New UpdatesFinal thoughts IntroductionToday I thought I'd talk about a neat design pattern that doesn't seem to get much love: the Properties Pattern. In its fullest form it's also sometimes called the Prototype Pattern.People use this pattern all over the place, and I'll give you a nice set of real-life examples in a little bit. It's a design pattern that's useful in every programming language, and as we'll see shortly, it's also pretty darn useful as a general-purpose persistence strategy.But even though this pattern is near-universal, people don't talk about it very often. I think this is because while it's remarkably flexible and adaptable, the Properties Pattern has a reputation for not being "real" design or "real" modeling. In fact it's often viewed as a something of a shameful cheat, particularly by overly-zealous proponents of object-oriented design (in language domains) or relational design (in database domains.) These well-meaning folks tend to write off the Properties Pattern as "just name/value pairs" – a quick hack that will just get you into trouble down the road.I hope to offer a different and richer perspective here. With luck, this article might even help begin the process making the Properties Pattern somewhat fashionable again. Time will tell.Three Great Schools of Software ModelingBefore I tell you anything else about the Properties Pattern, let's review some of the most popular techniques we programmers have for modeling problems.I should point out that none of these techniques is tied to "static typing" or "dynamic typing" per se. Each of these modeling techniques can be used with or without static checking. The modeling problem is orthogonal to static typing, so regardless of your feelings about static checking, you should recognize the intrinsic value in each of these techniques.Class ModelingYou know all about this one. Class-based OO design is the 800-pound gorilla of domain modeling these days. Its a[...]

The Bellic School of Management Training


I haven't been blogging much this summer. Mostly it's because all my free time has been spent engaged in an important research project called "What Would Niko Bellic Do?" I've been enrolled in a high-quality Management Scenario Simulator with the unconventional name "Grand Theft Auto IV", probably some sort of inside joke, and I've been going through all its Developer Management training courses.You know how these corporate training videos go, right? They set up some contrived scenario with actors you're supposed to identify with, and the actors have inane discussions about sexual harrassment or bribing government officials or stealing company equipment, and then you're asked to answer questions about whether it was OK for Bob to grab Sue's ass in that particular edge-case scenario.Seriously, I just took one of these courses at work. You'd think they're a joke, but no, they're considered Important Employee Training.Well, this Niko Bellic course isn't much different, just more fun. I finished the final management training session a couple weeks ago. And by truly amazing coincidence, right after I finished the final training mission, my blog made it into the Top 100 Blogs for Development Managers (Q3 2008).I personally thought that was a little weird, seeing as I've never written explicitly about software development management. Unless of course you count that one time where I wrote about how you don't need them.BUT, now that I've finished all the Niko Bellic Advanced Management Training courses, I'm officially a Certified Expert Dev Manager, capable of not only handling unforseen tricky management situations, but also teaching others about them! So now I think my blog being in that list is totally justified.All the training in the simulator was top-notch. A lot of it was ground I'd covered before in my days as an actual dev manager. I already knew how to react, for example, when my mafia boss told me he'd been betrayed by my previous manager, and I had to take him out. I'd already gone through stuff like that at Amazon dozens of times, so I breezed through those missions.But even though a lot of the training was pretty obvious stuff, which you come to expect from these corporate training courses, I was pretty impressed by the final Management Training Mission, in which I had to make an Important Management Decision about an employee in my care. I'm sure many of you have also completed this course.In the missions leading up to the finale mission, the "Grand Theft Auto" training software gradually unfolds a background story in which you and this other employee used to work together but had a disagreement that never fully reached closure. You have some trouble arranging a meeting with the employee to discuss it. But as luck would have it, after doing some especially fine work for one of your internal customers, they manage to convince the employee to meet with you, by gagging and handcuffing him and stuffing him on a plane in St. Petersburg and dropping him off at the docks in Liberty City. I had to admit, the simulator really nailed the value of building strong relationships with internal customers.You can imagine how hard it is to write an online corporate training seminar — I mean, you have to get all this material across but keep it entertaining so people actually remember the lessons. The fine folks at the consulting firm "Rockstar" have done an admirable job of presenting the content. They cover all of the HR-sensitive topics an aspiring manager needs to know about: conflicts of interest, employee drug abuse, bri[...]

Programming's Dirtiest Little Secret


 "And as for this non-college bullshit I got two words for that: learn to fuckin' type"— Mr. PinkThis is another one I've wanted to write forever. Man, I've tried a bunch of times. No ruck. Not Rucky. Once again I'm stuck feeling so strongly about something that I'm tripping over myself trying to get my point across.So! Only one thing left to try: bust open a bottle of wine and see if that gets the ol' creative juices flowing all over my keyboard. Rather than top-down, which is boring, let's go bottoms-up.Once upon a, uh, let's see... it was about 1982. Yeah. A looooong time ago. This is practically a fairy tale.Once upon a time in '82, there was this completely hypothetical fictitious made-up dorky 12-year-old kid named Yeev Staigey, who was enduring his sophomore year at Paradise High School in Paradise, California. Yeev had skipped 3rd, 7th and 8th grades and entered high school at age 11, in a heroic and largely successful effort to become socially inept for the rest of his life.Boy, I could tell you all sorts of stories about little Yeev at that age. He was even lamer and more pathetic than you're probably already imagining.However, our story today concerns Yeev's need to take a, um, an... elective of some sort. I'm not sure what they called it, but at Yeev's school, you couldn't just take math and science and languages and history and all that boring stuff. No! Yeev was being educated in the United States of America, so he had to take "electives", which were loosely defined as "Classes Taught by the Football Coach because Some Law Said that Football Coaches Had to Teach A Course Other Than Football."These "electives" (which you could "elect" not to take, in which case they would "elect" not to graduate you) were the kinds of courses that put the "Red" in Red-Blooded American. These were courses like Wood Shop, Metal Shop, Auto Shop, and of course that perennial favorite, Just Chop Your Hand Off For Five Credits Shop.At the time our story begins, our pathetic hero Yeev is peering through his giant scratched bifocal goggles at the electives list, trying to find one that doesn't involve grease and sparks and teachers screaming for a medic, can anyone here make a tourniquet, help help help oh god my pension, and all that manly American stuff you find in Shop class.Yeev noticed that one of the electives, surely placed there by mistake, was Typing. Like, on a typewriter. Yeev thought this seemed, in the grand scheme of things, relatively harmless. The worst that could happen was maybe getting your fingers jammed in an electric typewriter just as lightning hit the building, causing you to jerk wildly in such a way that your pants accidentally fall down around your ankles and everyone laughs loudly at the Mervyn's white briefs your mom bought you. That would be mildly embarrassing, yes, but in a few years almost nobody would remember, except when they saw you.Despite this potential pitfall, Typing definitely sounded more appealing than Tourniquet Shop.Yeev checked, and sure enough, the school's football coach was actually teaching the class. For real. Seeing as this was going to be the closest Yeev would ever get to a football field during his educational career, Yeev decided to go for it.Yeev didn't know it at the time, but they say coaches make the best teachers. You know. "Them." "They" say it. It's got some truth to it, actually. Coaches have to get a bunch of complicated information through to people with the attention spans of hungry billy goats. That takes [...]

Business Requirements are Bullshit


Some CEO emailed me the other day. I don't remember who it was; people mail me all the time about their blah blah yawn product service thingy, and on the rare occasions I bother to read mail from strangers, I don't usually remember anything about the email, even if I respond to it. I can remember broad categories of questions I get, but everything else is just a blur. That's senility for ya.But this dude, or possibly dudette, asked me a really good question. One that made an impression. And by "really good", I mean it was one of the flat-out wrong-est business questions you could possibly ask. It was like asking: "How can I get the most out of my overseas child laborer pool?"There's no right answer to a question that's just wrong.But his question, well, people ask it a lot. In fact there are whole books that give answers to this inherently-wrong question.His question was: "Hello, blah blah, I'm the CEO or C-something-O or whatever of a company that blah blah BLAH, and I read your blog about Agile from almost 2 years ago, which kinda resonated with me in a scary way, inasmuch as I realized perhaps belatedly that I was being duped, BUT I was sort of wondering: How do you go about gathering business requirements, so you know what to deliver to the customer? Signed, blah blah blaaaaaaaaaah." (Note: not a verbatim transcript. But close enough.)And my answer was: Business requirements are bullshit!Well... actually it was: "gathering business requirements is bullshit", plus a bunch of accompanying explanation. But the shorter version sure is catchy, isn't it?The rest of this little diatribe expands a bit on my reply to this guy. (I actually sent him an email with much of this material in it. When I do reply to strangers, I still try do a thorough job of it.)Before we dig into the meat and potatoes of today's meal, let's talk about my credentials, and how it is that I am qualified to offer an opinion on this topic.My CredentialsIf you're a business person stumbling on my blog for the first time, welcome! Allow me to introduce myself: I don't matter. Not one teeny bit. You shouldn't care about my credentials! All that matters is the message, which is hopefully so self-evident that if you hadn't already realized it, you'll be kicking yourself.It's OK, though. Kick away! In fact, give yourself an extra kick for me. Kicking yourself is a great way to remember a new lesson down in your bones. When you get actual bones involved, the painful throbbing for the next few days provides just enough of a reminder that you'll never forget again.In any case, I make no claim to any credentials whatsoever, and this advice is all straight from my butt. Do what you like with it. The advice, that is.With my credentials out of the way, let's see about this guy's question.By the way, I'm specifically addressing this rant towards you only if you (or your team, or company) are building your own product or service offering, or at least defining it. If you're asking consultants to define the product for you, well, you're on your own. Good luck. And if you're a consultant, well, you don't get much choice about what to build, so you're also (mostly) on your own. Although I'd advise you to try to find work that fits the strategy I outline here, as you'll have more fun with it and do a better job overall.Gathering Requirements 101It's the first thing everyone wants to do! It's the first thing they teach you in Project Management Kindergarten: the very first thing you should do on a new project is[...]

Done, and Gets Things Smart


Disclaimer: I do not speak for Google! These are my own views and opinions, and are not endorsed in any way by my employer, nor anyone else, for that matter.Everyone knows and quotes Joel's old chestnut, "Smart, and Gets Things Done." It was a blog, then a book, and now it's an aphorism.People quote Joel's Proverb all the time because it gives us all such a nice snuggly feeling. Why? Because to be in this industry at all, even a bottom-feeder, you have to be smart. You were probably the top kid in your elementary school class. People probably picked on you. You were the geek back when geeks weren't popular. But now "smart" is fashionable.That's right! All those loser kneebiter jocks in high school who played varsity and got all the girls and sported their big, winning, shark-white smiles as they barely jee-parlor-fran-saysed their way through the classes you coasted through: where are they now? A bunch of sorry-ass bank managers and failed insurance salesmen and suit-wearing stiffs at big law firms working for billion-dollar conglomerates where their daddies got them VP jobs where they just have to show up and putt against the other VPs on little astroturf greens in the hallways!That's right, los... er, well, some of them are doing OK, I guess. "But they're not as rich as Bill Gates!" That's the other big tautology-cum-aphorism we geeks like to pull out when we're feeling insecure. Notwithstanding that Bill had a rich daddy and made his money through exactly the kind of corporate shenanigans that Big Meat is using on us today, with those selfsame jocks. We like to think the more important point is that Bill, Jobs, Bezos and the other tech billionaires (all fierce, business-savvy people) were geeks, and are thus evidence of the revenge of the nerds. And hey, tech did make a lot of money in the 80s and 90s. So "smart" is sort of in fashion now.Unfortunately, "smart" is a generic enough concept that pretty much everyone in the world thinks they're smart. This is due to the Nobel-prize-winning Dunning-Kruger Effect, which says, in effect, that people don't know when they're not smart. (Note: people have pointed out that it was an Ig-Nobel. Me == Dumbass. Fortunately, "me == dumbass" was more or less the point of the article, so I'll let it stand.)So looking for Smart is a bit problematic, since we aren't smart enough to distinguish it from B.S. The best we can do is find people who we think are smart because they're a bit like us.Er, what about Gets Stuff Done, then? Well, the other qualification you need to be in this industry is that you have to have produced something. Anything at all. As soon as you write your first working program, you've gotten something done. And at that point you probably think of yourself as being a pretty hot market commodity, again because of the Dunning-Kruger Effect.So, like, what kind of people is this Smart, and Gets Things Done adage actually hiring?I've said it before: I thought I was a top-5% (or so) programmer for the first fifteen years I was coding. (1987-2002). Every time I learned something new, I thought "Gosh, I was really dumb for not knowing that, but now I'm definitely a superstar." It took me fifteen frigging years before I realized that there might in fact still be "one or two things" left to learn, at which point I started looking outward and finally discovered how absolutely bambi-esquely thumperly incompetently clueless I really am. Fifteen years!But hell, let's be honest here: I s[...]

Rhinos and Tigers


I will once again plagiarize myself by transcribing a talk I gave.First: be warned! I offer this gesture of respect to you — yes, you! — when I say that this is at least 20 minutes of reading. This is long even for me. If you're surfing reddit, gobbling up little information snacks, then it's best to think of this entry as being more like a big downer cow. Unless you're really hungry, you should wait for it to be sliced into little bite-sized prion patties before consuming it.If you do read it, you'll see the CJD analogy is surprisingly apt. I ramble even more than usual, and lose my train of thought, and the slides might as well be scenes from a David Lynch movie for all the relation they have to my actual talk.But once again I find myself astonished at how much I agree with myself, by and large. Funny how that works. And I made a few decent jokes here and there. So I'm transcribing it.If you're impatient, and I wouldn't blame you a bit, the best part is probably "Static Typing's Paper Tigers". That might be worth reading. As for the rest... *shrug* If you're really starved for content, you might find some of it entertaining.The SettingI gave this talk at the Google I/O Conference in San Francisco a few weeks ago. My talk was boringly titled "Server-Side JavaScript on the Java Virtual Machine", and there were initially only about 40 or 50 people in the room (out of a 2500-person conference) when I started the talk.Even though I personally thought the talk was pretty boring, people kept trickling in, and I estimate there were about 400 people stuffed in the room by the end. It was standing-room only, and people were spilling out into the hall. The conclusion? The other talks must have been really boring.After my talk it became pretty clear to me that it should have been titled "Rhinos and Tigers", so that's its new name. I've tried to make it flow well by splitting it into arbitrary sub-sections, whose titles aren't really part of the talk. But otherwise it's pretty much a word-for-word transcription, except with most of the umms and aaaahs elided. I've included the subset of the slides that seemed relevant; you can find the rest at the Google I/O site.So enjoy! Or not. I've given you plenty of warnings. You'll see!Rhinos and TigersHello! I'm Steve Yegge. I work at Google. I've been there about three years, and it's real nice.I'm going to be talking about server-side scripting in general, and talking a lot about Mozilla Rhino and the technology behind it. I'm going to try to get through it in maybe 20-25 minutes, maybe 30 if I start ranting, at which point I'll open it up for questions. I kind of want you guys to help drive how this goes.Make sense? (Ed: Well, it made sense at the time. Sigh.)All right, cool. Let's get started.Sooo... I'm going to be talking about Server-Side JavaScript on the Java Virtual Machine.Yes. We've got this big animal. Rhino.So let's see... who here has used a JVM language before? Oooh! My god, lots of you, almost all of you. Great!Well I'm going to be talking about Rhino in particular. I'll be making reference to other JVM languages. I want to kind of help you see how this fits into the landscape, why you might use it, why you might not use it.But for those of you who haven't used a JVM language, the Java Virtual Machine is sort of like .NET: you can run multiple languages on it. You can write an interpreter in Java, or you can compile your language down to Java [...]

Dynamic Languages Strike Back


Some guys at Stanford invited me to speak at their EE Computer Systems Colloquium last week. Pretty cool, eh? It was quite an honor. I wound up giving a talk on dynamic languages: the tools, the performance, the history, the religion, everything. It was a lot of fun, and it went over surprisingly well, all things considered.They've uploaded the video of my talk, but since it's a full hour, I figured I'd transcribe it for those of you who want to just skim it.This is the first time I've transcribed a talk. It's tricky to decide how faithful to be to my spoken wording and phrasing. I've opted to try to make it very faithful, with only minor smoothing.Unfortunately I wound up using continuation-passing style for many of my arguments: I'd occasionally get started on some train of thought, get sidetracked, and return to it two or three times in the talk before I finally completed it. However, I've left my rambling as-is, modulo a few editor's notes, additions and corrections in [brackets].I didn't transcribe Andy's introduction, as it seems immodest to do so. It was funny, though.Technical corrections are welcome. I'm sure I misspoke, oversimplified, over-generalized and even got a few things flat-out wrong. I think the overall message will survive any technical errors on my part.The talk...Thank you everybody! So the sound guys told me that because of a sound glitch in the recording, my normally deep and manly voice, that you can all hear, is going to come through the recording as this sort of whiny, high-pitched geek, but I assure you that's not what I actually sound like.So I'm going to be talking about dynamic languages. I assume that you're all dynamic language interest... that you've got an interest, because there's a dude down the hall talking about Scala, which is you know, this very strongly typed JVM language (a bunch of you get up and walk over there – exactly.) So you know, presumably all the people who are like really fanatical about strong typing, who would potentially maybe get a little offended about some of the sort of colorful comments I might inadvertently make during this talk — which, by the way, are my own opinions and not Google's — well, we'll assume they're all over there.All right. I assume you all looked through the slides already, so I don't need to spend a whole lot of time with them. I'll go into major rant-mode here at the end. My goal is... for you guys to come away with, sort of a couple of new pictures in your mind, thinking about how languages have evolved over the last 20 years, where they're going, what we can do to fix them, that kind of thing.Does anyone here know how to use a Mac? It's showing me this weird, uh... thing... OK. All right. Here goes.So!Popular opinion of dynamic languages: slooooow! They're always talking about how Python is really slow, right? Python is, what, like 10x to 100x slower? And they have bad tools.And also there's this sort of, kind of difficult-to-refute one, that says at millions of lines of code, they're maintenance nightmares, right? Because they don't have static types. That one, uh, unfortunately we're not going to be able to talk much about, because not many people have millions-of-lines code bases for us to look at — because dynamic languages wind up with small code bases. But I'll talk a little bit about it.So first of all, one of my compatriots here, who's an actual smart person, like probably e[...]

XEmacs is Dead. Long Live XEmacs!


 "We're going to get lynched, aren't we?" — PhouchgAnd you thought I'd given up on controversial blogs. Hah!PreambleThis must be said: Jamie Zawinski is a hero. A living legend. A major powerhouse programmer who, among his many other accomplishments, wrote the original Netscape Navigator and the original XEmacs. A guy who can use the term "downward funargs" and then glare at you just daring you to ask him to explain it, you cretin. A dude with arguably the best cat-picture blog ever created.I've never met him, but I've been in awe of his work since 1993-ish, a time when I was still wearing programming diapers and needing them changed about every 3 hours.Let's see... that would be 15 years ago. I've been slaving away to become a better programmer for fifteen years, and I'm still not as good — nowhere near as good, mind you — as he was then. I still marvel at his work, and his shocking writing style, when I'm grubbing around in the guts of the Emacs-Lisp byte-compiler.It makes you wonder how many of him there are out there. You know, programmers at that level. He can't be the only one. What do you suppose they're all working on? Or do they all eventually make 25th level and opt for divine ascension?In any case, I'm sad that I have to write the obit on one of his greater achievements. Sorry, man. Keep up the cat blog.Forking XEmacsI have to include a teeny history lesson. Bear with me. It's short.XEmacs was a fork of the GNU Emacs codebase, created about 17 years ago by a famous-ish startup called Lucid Inc., which, alas, went Tango Uniform circa 1994. As far as I know, their two big software legacies still extant are a Lisp environment now sold by LispWorks, and XEmacs.I'd also count among their legacies an absolutely outstanding collection of software essays called Patterns of Software, by Lucid's founder, Richard P. Gabriel. I go back and re-read them every year or so. They're that good.Back when XEmacs was forked, there were some fireworks. Nothing we haven't seen many times before or since. Software as usual. But there was a Great Schism. Nowadays it's more like competing football teams. Tempers have cooled. At least, I think they have.As for the whole sordid history of the FSF-Emacs/XEmacs schism, you can read about it online. I'm sure it was a difficult decision to make. There are pros and cons to forking a huge open-source project. But I think it was the right decision at the time, just as decomissioning it is the right decision today, seventeen years later.XEmacs dragged Emacs kicking and screaming into the modern era. Among many other things, XEmacs introduced GUI widgets, inline images, colors in terminal sessions, variable-size fonts, and internationalization. It also brought a host of technical innovations under the hood. And XEmacs has always shipped with a great many more packages than GNU Emacs, making it more of a turnkey solution for new users.XEmacs was clearly an important force helping to motivate the evolution of GNU Emacs during the mid- to late-1990s. GNU Emacs was always playing catch-up, and the dev team led by RMS (an even more legendary hacker-hero) complained that XEmacs wasn't really playing on a level field. The observation was correct, since XEmacs was using a Bazaar-style development model, and could move faster as a direct consequence.A lot of people were switching over to XEmacs by the mid-19[...]