Laptop buyer's remorse
A couple weeks ago I bought a
Hewlett-Packard TouchSmart tm2-1070us Notebook. This is a laptop with a touch-sensitive screen, that can swivel around and fold down over the keyboard to turn the laptop into a tablet.
I thought it would be a cool thing to help with drawing comics, since I could draw right on the screen. Also, I haven't bought myself a computer since 2002 (every computer I've used since then has been one lent to me by whoever I was working for at the time). I thought maybe it was time to have a computer of my own, to separate my work stuff from the rest of my life. Finally, I also wanted to get away from Mac, as Apple has been turning evil lately and I don't want to support them any more.
I started regretting the purchase almost immediately. I brought it back to Fry's (return policy: full refund minus 15% restocking fee within 14 days) less than a week later. Should really have done more research first.
Here's a list of what was wrong with this computer.
The hardware sucks
There's no optical drive. I didn't realize this until I got home. I guess I should have read the box more carefully or asked the salesman, but it didn't even cross my mind that you could sell a computer without a CD-ROM drive these days. So yeah, it needs an external CD-ROM drive to install software or play a music CD or anything.
Even with an external CD-ROM drive hooked up, I couldn't get it to boot from a CD. I went into the BIOS and made that drive first in the boot order, but it didn't seem to make any difference. This meant I couldn't install Ubuntu.
The trackpad is a nightmare. It's the kind where the bottom part of the trackpad is meant to double as the mouse buttons, but the whole surface is touch-sensitive and pressure sensitive. This means it's extremely easy to
click when you wanted to move, or move when you wanted to click. (The Macbook Pro gets this right: it has the button separate from the trackpad, so you push the button with your thumb while moving the pointer with your fingers. You can drag two fingers to scroll. It works great.)
On the HP, supposedly I can drag two fingers to scroll, but sometimes it works and other times it doesn't, and I can't figure out why. Sometimes when I drag with two fingers the mouse pointer stays put and turns into a four-directional arrow symbol. I don't understand what this means. Supposedly I can move two fingers apart or together to zoom in or out, but that is also extremely flaky, sometimes working and other times not.
But it's not just the advanced features that don't work. When I go to click on a close button, half the time I miss because the act of pressing down on the mouse button part of the pad moves the pointer off of the button, so I do something else instead. When I try to put an insertion point in text, the point randomly jumps around, sometimes selecting big chunks of the text. Sometimes it brings up the context menu as if I had right-clicked. Dragging a scroll bar is fraught with perils. If I try to hold the button down with my thumb and move the pointer with my index finger at the same time, that means I'm touching the pad in two places, which means unpredictable behavior. The pointer might randomly jump halfway across the screen, or it might not move at all.
I have no idea what to expect when I touch this track pad. All my habits are dangerous now. It's at the point where I'd rather pick up the stylus and poke the screen with it than use the track pad, even if I'm in laptop mode and just trying to click a link.
Actually drawing with the stylus on the screen is pretty good, but using it to click links or select from menus or otherwise interact with a standard GUI is very annoying because the part of the interface I'm looking at is covered up by my hand and the pen, and because the standard GUI rendered on a laptop screen has targets that are physically very small, and sometimes the stylus is registered as a couple pixels off from where I think it is due to my viewing angle. I miss targets a lot. But in tablet mode, that's the only way to click things. (It's still better, slightly, than using the trackpad.)
There's a toggle button on the right edge of the laptop between the power button and the SD card port, which turns the wireless connection on and off. I discovered this by accident, because this button is in the perfect place to be hit by accident when you with the thumb when you're just trying to hold the computer in tablet mode. And then the next time you go to load a web page it suddenly doesn't work, and you don't know why. Now that I've figured out this button, I have to carefully avoid hitting it, forever. Why does this button even exist? Why would you put an "accidentally turn off my wireless internet" button on the hardware? (There's actually TWO such buttons, since the f12 key ALSO does the same thing). The cases when you need to turn off wireless internet on a laptop are exceedingly rare, and can easily be handled through software controls.
The back of the screen and the area below the keyboard both have this stupid spirally abstract cloud pattern etched into them. It's not printed, it's not a sticker that you can peel off, it's actually permanently etched in, like with a laser or something. Who asked for this nonsense?
Probably due to the weight of the touch-screen hardware, the machine is very top-heavy when in laptop mode. It's hard to balance on my lap because it keeps wanting to fall over backward.
The software sucks
I remember when you'd buy a new computer and it would boot to a BIOS screen, waiting for you to configure the drives and install the operating system. It was a little more work to set up, but it gave you a pleasantly minimalistic setup at first. You started with the bare minimum and added things as you needed them.
These days you have to spend the first couple of days just de-gunking a computer from all the ad-ware and useless crap that's pre-loaded at the factory before you can use it. Bahhh. Everything is popping up dialog boxes at you, begging for your attention,trying to get you to buy Norton Antivirus or whatever other crap software paid Hewlett-Packard for advertising space. You configure your network settings once in the Windows wizard that pops up, and then as soon as that's gone a Hewlett-Packard wizard takes over and asks you the same questions all over again, except it's also trying to get you to buy stuff.
HP has started using this horribly inappropriate "Nightmare before Christmas" font on all their stuff, with the slogan "The computer is personal again!" Whatever, guys.
There's a button on the edge of the screen that rotates the screen orientation 90 degrees each time you press it, so that you can use the tablet in portrait mode or landscape mode. That's fine. But for a while, every time I touched this button, a program called "BumpTop" would take over my screen for no reason I could understand. It would launch into some kind of stupid tutorial and I would close it. By the fourth or so time that BumpTop came up and took over my screen, it said "You are now done with the tutorial". Which of course I wasn't, but it had apparently been advancing through the tutorial each time I closed it. I finally uninstalled BumpTop (actually Sushu uninstalled it for me to get me to stop bitching about it).
BumpTop is an amazingly useless piece of showing-off-ware. I wrotea separate rantabout BumpTop and why it's useless and fundamentally misguided.
Besides BumpTop, other useless software that showed up to beg for my attention included two wretched things called "HP Advisor" and "HP TouchSmart" which are installed and taking up space in the windows taskbar by default. Hp Advisor appears to be a combination of adware and redundant interface to things you can do through the Windows control panel. HP Touchsmart is an overblown and redundant full-screen touch interface for browsing multimedia files. Whatever. It also has a 'browser' button which launches IE full-screen, and - this is the weird part - Hulu, Netflix, and Twitter buttons. Those are websites; I don't need a special button to launch them, though I'm sure they paid HP nicely for the privilege. The weirdest one is Twitter; when I think of things that would benefit from a full-screen touch-enabled interface, Twitter isn't anywhere on the list. What possible purpose does this serve?
Windows 7 (which, amusingly, has an internal verison number of 6.1) appears to be, at least, no worse than Windows XP; it just sucks more memory and randomly changes parts of the interface around so you have to relearn everything for no real benefit. The hourglass is now a blue ring exactly like the ones the moai heads spit at you in Gradius. Every icon in Windows Explorer now gets a little check box when you select it, which is just confusing; it turns out that this is an alternate way to select multiple files at once, if you
don't want to shift-click, control-click, or drag a box around the files. That would have been a great innovation for, say, 1990, when the conventions of selecting icons were still being established, but it seems like a weird thing to start messing with now.
I do appreciate that Windows 7 didn't blue-screen-of-death on me five times in the first day like Vista did. That's a definite improvement.
I actually like the Windows 7 feature where you can drag a window to the top of the screen to full-screen it or to one side of the screen to half-screen it. The latter makes it easy to compare two windows side by side, which
is the only real use case for non-fullscreen windows anyway.
My plan was to wipe Windows 7 and install Ubuntu, but since I could never get the laptop to boot from a CD-ROM (see above), I couldn't do this.
Manga Studio really, really sucks
I'm splitting this part into a separate blog post because there are so many reasons that Manga Studio sucks.
Suffice to say here that the unreliable trackpad input, the clunkiness of Windows 7, and the horrible UI failure that is Manga Studio all combined to make an absolutely miserable, frustrating, hair-pulling out experience that had me doing more swearing and nerd-raging than drawing.
The only way to make it usable would have been to hook it up with an external CD-ROM drive and an external mouse (thus defeating the purpose of a tablet computer), wipe Windows 7 in favor of Ubuntu (providing I could figure out how to make Ubuntu compatible with the touchscreen and pressure-sensitive stylus input), and replace Manga Studio with some other software. But GIMP is equally horrible interface-wise and Photoshop doesn't run on Linux, so I don't even know what software that would be.
That's why I declared the whole thing a failed experiment and brought the laptop back to the store.
Manga Studio: The Epic List of UI Failures
I've heard people defend Manga Studio as "power-user software", like "It's for experts, and it's super powerful, so of course it has a learning curve".
No. I know all about making tradeoffs between learnability for beginners and efficiency for experts. I know what software looks like when it takes the path of "hard to learn but very efficient and powerful once you learn it" (like, say, Emacs) , and this ain't it. The Manga Studio interface just gets stuff wrong. It's egregiously bad for no reason. Most of these usability problems would harm experts just as bad as they harm beginners.
Here's my ever-expanding list of UI mistakes and bugs in this wretched application, organized by sub-categories.
- Can't open a file that's not the right file type; you have to import it. Can't import a file if you don't have a page open. Why not just create a page for the user in this case?
- (Windows version only): That horible window-inside-of-window interface is back and ready to party like it's 1995!
- Every time you open the damn thing it makes a new blank document, and when you go to close it, it pops a dialog to say the blank document has been changed. No it hasn't, you liar.
- It asks me if I want to save every time I change pages. (THE ANSWER IS YES. DON'T ASK ME, JUST DO IT). Oh, maybe it's a good thing to not save changes, because you throw away my undo history whenever changing pages, which means I can't go back to a page and undo something. The right behavior would be to always keep undo history while continuously auto-saving.
- Many layer options, such as the color depth and raster/vectorness of the layer, can only be set when creating it. If you mess up, you have to delete the layer and do it again! (not actually true, I found how to change this).
- I've got layers called "Layer" and "Layer" automatically included underneath the bottom layer of my drawing and I don't know why.
- If you make a layer tones instaed of grayscale by mistake, there's no way to change it back afterwards. You'd have to redo it all. This is extra annoying since tone is the default, it's not displayed anywhere once you get past the 'create layer' dialog box, and it's never what I want.
- To make panels, you go into the general tab of the tool options window for the shape tool and click a tiny cryptic icon to turn on a special mode and then drag the rectangle tool to create a folder of layers. (Why are panels not a top-level tool of their own, given that this is called manga studio? And given that some of the top-level tools are much more specialized and useless?)
- The "panel ruler cutter tool" which exists to chop one panel into two panels along a straight line (cuz you do that all the time, right?) deserves a slot in the main tool pallete. (While the panel tool isn't even a tool, it's a suboption of Rectangle.)
- When you drag a corner of a panel, it moves JUST THAT CORNER, turning your panel into an ugly trapezoid. It doesn't resize while keeping it a rectangle like you would expect. I still don't know how to resize a panel while keeping it rectangular, which you would assume would be the default.
- When you have a panel selected, it's got a red border around it that looks just like the red border for resizing selections, so you think it's to resize the panel, but no. Dragging it does nothing to the original panel -- but sometimes randomly creates new tiny panels elsewhere on the page! I'm still not sure what it's for, but hey! Why not use the same visual to represent two completely different concepts! That's not confusing or anything.
- Giving me tones when I want gray. Making it impossible to eyedrop up a
tone (unless you turn on a checkbox in the eyedropper tool options window, and sometimes that even doesn't work. I still don't know why).
- Two different types of color picker in the same window, which disagree with each other. When you eyedropper a shade of grey, it changes the bottom scale but leaves the selection in the top color picker alone. When you click a shade of grey, it changes in the top color picker but not in the bottom scale. This means that the actual color is dependent on which interface you used last, and you can't tell by looking at the window what color you're going to get when you paint something.
- Sometimes the paint bucket turns into a "No" symbol and won't paint. Why's that? Oh, somehow my text layer got selected.
- There's a copy of my colorz layer called "Colors Copy" that I didn't create.
- To eyedrop a color, I have to know what layer the color is in and have that layer selected. Sometimes that still doesn't work; the eyedropper
can fail for a lot of reasons I still don't understand.
- Paint bucketing in a secondary layer with "browse all layers" turned on, i can very easily dump paint through all my lines without anything visible happening - I only find out later when it's to late to undo that I now have a duplicate of the lines layer in the color layer, so when I try to erase something in the lines layer it doesn't seem to erase and I think I'm going crazy.
- Not obeying my choice of font, because the "Use Style" checkbox is checked by default and it apparently means "Ignore whatever else I say". This is an amazing interface innovation: Having the obvious parts of the interface disabled by default until you dig through dialog boxes to find the magic check box that's overriding them.
- No way to search fonts or type the name of the font you want; you have to scroll through the menu one by one. Oh, but there are "up" and "down" buttons next to the font selection that let you blindly go through the alphabetical list one at a time. How would those ever be useful?
- When I try to change the font size of text that's already typed and selected (as opposed to setting the font size first and then typing), sometimes it works and sometimes it doesn't. I can always resize text by dragging the border around it, but then I don't know how much I'm resizing it by and so I can't match it with the size of the other text. I really want to enter a point size.
- Also, when I type into the "text size" field to set the size, that field keeps focus (with the modal "text properties" dialog box still up) so now when I try to type my actual text nothing happens because it's trying to put the ltters into the text size field and it's rejecting them. You have to notice that the text size field has focus and then de-focus it by clicking other random parts of the dialog box. And no, if you dismiss the dialog box you go out of text edit mode.)
- Double clicking to select a word in a line of text selects the whole line and not just the word, unlike every other application in the world.
- Having a way to make thought clouds, but no way to make the "bubble trail" from the thought cloud to a character's head! I know this isn't used that much in Japanese comics but there are so many other obscure and useless options that I'm surprised this basic one isn't included. You have to draw each circle manually if you want the bubble trail.
- Yes, thank you for making my speech bubble transparent, randomly. Transparent speech bubbles that let the grey background show through are just so useful. Thanks for having no controls for me to change this and no clue to why it happened. (Sushu figured it out: the text layer I created got inserted under the color layer, for some reason, so the colors were being drawn (translucently) over the top of the text).
- The edit menu has both "copy" and "Copy to another applications" (sic). Aside from the grammar, why are these separate options? Why can't you make one copy command and have it work right no matter where I'm copying to?
- You're in a hidden mode whenever a properties dialog box is open. It looks like a floating modeless dialog box, but it prevents you from doing anything to your picture. Also you're in a hidden mode when you're importing a picture or editing text - you won't understand why nothing sems to work until you click "OK".
- The scroll bars stretch way out into a grey void outside your picture. What posible reason is there to scroll out there?
- I try to copy an image on one page to another page. I select it and make sure to have all the layers hilighted, then do a copy, and... whaat? now I got duplicate text layers on this page? Which are rotated relative to the visible ones? What did I do? I can't undo it! (Solution: close file and reopen without saving).
- When you try to draw and nothing happens, it could be because there's an
offscreen selection somewhere. Or it could be because you have the wrong layer selected. Or it could be any number of other reasons I haven't figured out. Anyway, I'm constantly having to stop and figure out why my drawing tools aren't drawing. It's a never-ending adventure with Manga Studio!
Things I DO like about manga studio (a much shorter list)
- Single key shortcuts for switching tools and increasing/decreasing pen size
- "coloring inside the lines": When you have a selection up, you draw only inside the selection. This is very powerful combined with the magic wand to select an area of color and the fact that you can select on one layer and then draw (still bound to selection) on another layer. You can also polyline select and invert selections. There's a bit of a learning curve to figuring out how to use all these tools together, but they are a powerful combination.
- Infinite levels of undo (unfortunately these go away as soon as you switch pages, bah)
- Being able to use multiple translucent layers, and vary the opacity of each layer individually, lets you get some powerful effects (like the rain streaks, the reflection outside the window, and the pool of light from the window all in my most recent comic)
- I like that I can set a panel boundary, then pull in an image from elsewhere into the panel, and it's clipped at the panel edge, but the rest of the image is still there, just hidden, so I can easily resize and position it until it's clipped the way I want. (And I can also pull out individual layers such as dialog balloons and put them above the panel layer so they spill out the edge).
- You can enter some text and then hit "generate dialog balloon". It creates an object that can be resized, and you can add straight or curved tails and reposition them wherever. It's got some weird quirks but the underlying idea is exactly how you want a dialog balloon to behave and is a lot better than any of the ways I tried to do them before.
Remove background image
WTF is this crap? People liked Google in the first place because it was the first search engine to not cover its home page with random crap; it was just nice and clean and minimalistic. Why did they decide to copy Bing now? Why would you want to skin a page which you only spend a few seconds looking at on your way to your search results? How can Google do cute holiday logos anymore if they're against a random image background? Why doesn't the "remove background image" link actually remove the background image -- instead, it puts you back to the ugly, ugly default.
There's so much wrong with this, and it's all summed up in the message you get when you click on the customize button: "Select a background image for your Google homepage"
No. This is not "my Google homepage". Stop trying to make yourself into "my Google homepage". Stop trying to jump on the stupid, stupid Silicon Valley investor bandwagon of every web site wanting to be your Bestest Friend Forever and your matching pillowcase/comforter set too. You're just Google. We use you because you rank pages well and you return results fast. Stick with that.
I got an email from my mom complaining that Firefox 4 wouldn't work with TurboTax. I decided to investigate.
If you go to turbotax.intuit.com with Firefox 4 and try to use it, you get this screen:
First of all, "System Requirements"? For a website? Something is fishy here.
It seems that TurboTax has built a completely pointless and arbitrary wall based on user-agent sniffing, in order to block users running browser versions or operating system versions that they don't approve of.
User-agent string sniffing is poor programming practice and should not be done at all. Not only is TurboTax doing it, they're doing it wrong. Most sites that look at the user-agent string do so as a way of compensating for differing browser features or differing CSS implementations. It's not the best way of doing that, but whatever. What really bothers me is that TurboTax is using this bad coding practice to exclude people from their website, which is contrary to the whole point of the World Wide Web.
Let me be clear: A website has no business telling me what browser I can or can't use to view it. That's like, I walk into a store, and somebody there looks at what brand of shoes I'm wearing and says "Sorry, you can only come in here with Nikes, Reeboks, or Adidas. We don't support Keens." My choice of shoes is none of their business and my choice of browser is none of TurboTax's business.
It gets even more ridiculous, because TurboTax is blocking the most recent version and demanding you use an obsolete version instead. This is backwards. I could see maybe imposing a minimum version, but who's ever heard of a maximum version? And not just Firefox either:Firefox: They require Firefox 3.0, or Internet Explorer 8.0 (IE 7 on some OS versions). They don't list a version number for Google Chrome but you'll get the same page if you try to use the latest version of Chrome, too.
So the browsers they require are all at least a version out of date, and if you try to use a more recent version of either browser (Firefox 4 or Internet Explorer 9) the site will block you claiming it doesn't support "beta" versions. Neither Firefox 4 or IE 9 is a "beta" anymore, and TurboTax bloody well knows this - both have been in the tech press for months! TurboTax has had plenty of time to fix their stupid wall.
Asking users to downgrade is not just insulting, it's dangerous. Firefox 3.0 is almost two years old at this point and we wouldn't recommend anyone using it anymore as it's out of date and does not have the security fixes in more recent versions; using it makes you more vulnerable. Same goes for IE 7.
Now for the cherry of stupidity on top of this failure sundae: See those buttons that TurboTax provides to download "supported browsers"? Guess where those take you? To the download pages for the latest versions, Firefox 4 and IE 9, of course! Which they don't support! Those buttons are completely meaningless. Not only are they asking people to downgrade their browser version, they're giving them incorrect instructions for doing so.
All this is completely unnecessary. There's no reason their page needs to care about your browser version at all. If you fake the useragent string (make Firefox 4 report itself as Firefox 3) then the page lets you through, and it works just fine. There's no actual problem with using an up-to-date browser, if they would just let you in. They just decided to block some people out for no reason. It makes me furious that they actually paid a programmer to add this check which serves no purpose except to block out people who could otherwise use the website; if they had just left it out, everything would have been fine. It's web development malpractice is what it is.
I tried to figure out how to get ahold of somebody there so I could point out that their site is broken, but the "contact us" link doesn't actually tell you how to contact anyone. Typical big-company attitude; the last thing they want is to have to talk to customers or fix anything. They're hoping that they can fool users into thinking the problem is with the user's computer instead of with TurboTax's broken-on-purpose website.
I would not trust TurboTax to handle my taxes correctly after seeing how badly they screwed up their website. Just sayin'.
The biggest obstacle to learning programming
You know, the whole "integration" thing. Getting almost anything useful to happen on the internet beyond static web pages requires knowing how to at least get a web server talking to a database, or how to call operating-system APIs and/or browser APIs, for networking, graphics, etc. And most practical projects these days will involve stuff happening in several different languages on several different computers. Calling other people's code is the difference between a toy program you write for a class assignment, and an actual software product.
I spent a lot of time explaining the basics of APIs and how to call them, libraries and how to install them, how programs communicate across the network using HTTP or whatever, and so on.
There are lots of tutorials for explaining for loops, if-then, and functions -- but not tutorials for this kind of stuff.
And it's a huge oversight! After all, like half of learning a new language is learning how to use the library (module/package/framework/etc) system for that language - how to find other people's code that does what you need, how to install it on your computer, how to call their functions from your code. Learning th syntax of the new language is the easy part compared to that!
And APIs, man, what the hell. Sushu's looked at API documentation before, but didn't really know what an API is, and found the documentation cryptic and inscrutable.
I explained that API documentation sucks because it's written by programmers only under duress from their managers - programmers who would rather be doing almost anything else. It's usually out of date because the API gets updated but the docs don't. And worse, API documentation is always written for an audience of expert programmers - we assume that anybody reading API docs is already an expert, so nobody ever writes "My First API" for an audience of new programmers.
Meanwhile, we professionals put up with terribly written API docs because we have to - that's why we get paid the big bucks, because we can't give up and say it's too hard; we have to make it work somehow when it's integrated with other people's crappy and poorly-documented code. Writing code is actually a very small part of professional software development. It's the easy part! The harder and much more time-consuming part is figuring out how to interoperate with other people's code - looking up API documentation, installing libraries, resolving dependencies, deciphering error messages, etc.
I think most non-programmers would be fairly amazed to realize how much of a programmer's day is spent Googling stuff. Googling to find answers to questions like "Is there a Java library to parse JSON?" "How do I talk to a SQL database from Node.js?" and "Why is the Twitter API rejecting my OAuth credentials?".
We don't even teach this stuff in college computer science courses, not really. People either figure it out on their own, in the course of doing some other project, or they drop out.
Fellow computer programmers: We are failing really badly at teaching people how to program. Knowldege is power. By failing to teach, we're hoarding the power of computers for ourselves and failing to share it with all the people who could take advantage of it to improve their lives. Maybe some programmers like to think that what they do is really hard and really special and that most people couldn't do their job, but I disagree. Programming well requires learning some new habits of logical thought, but it's not fundamentally that difficult. We've been making better and better programming and debugging tools for ourselves over the years, we've shrunk the modify-run-test loop from hours down to seconds, the internet has made it easier to read sample code and to get help, and as we've gone from assembly to C++ to Python we've eliminated most of the non-essential complexity from our programming languages.
But people who want to learn are getting stuck. Not stuck on functions and variables and loops, because those are pretty easy, and there are actually a lot of good tutorials for them these days. No, people are getting stuck on APIs and libraries and all the other difficulties of talking to existing code, which are needlessly opaque and obscured by jargon. There are really good tutorials for learning programming but I can't think of any decent tutorial for learning APIs or libraries; there isn't even a good tutorial for learning what APIs and libraries are, let alone how to find, install, decipher, and use the right ones. There's a whole bunch of context that beginners are missing, habits of thought that they don't have, which they need in order to ask the right questions to find and use existing code that does what they need.
We're currently not offering any way for beginners to get past that wall. If somebody could solve that problem it would be a huge step towards making programming more accessible.
Crowdfunding vs. DRM as the future of publishing
None of the songs I bought from the iTunes store will play any more because Apple thinks I've authorized them on too many computers; and I can't remember my Battle.net password so as far as Blizzard's concerned I no longer own that copy of Starcraft 2 I paid $60 for.
It used to be I only had to worry about losing my digital "posessions" when a magnet got near my disk drive or when an OS upgrade made my old data formats obsolete, but now... well, let's say I'm very reluctant to pay real money for an intangible electronic "product" when it can be taken away from me any time at the whim of an overzealous and glitchy DRM scheme.
This is why I'm not real keen on the idea of e-books; I like books that I can trust to stay on my shelf and continue existing even if the publisher changes their mind. Sushu's got several Kindles and was telling me about how you can now "loan" e-books to other people - the book is gone from your own Kindle for two weeks, then it comes back. (She likes this because books that she loans out the old-fashioned way pretty much never come back to her, she says.)
It's weird to think that some programmer had to write code whose sole function is to take a file that's still there on your Kindle and lock you out of it for two weeks. I imagine him at a Starbucks, swapping tips with the programmer from Blizzard who prevents users from playing Diablo 3 single-player without a connection to Blizzard's servers.
On a computer, every "move file" operation on a computer is actually a "copy file" followed by a "delete original". The "delete original" step is optional. The default state is for everybody to have as many copies of a file as they want; to reproduce the scarcity of the physical world takes work. Companies are paying workers to make there be less of their products.
Yeah, yeah, yeah, I know. If we let everybody have copies of all the books they wanted for free, then writers couldn't get paid, and we wouldn't have any new books at all. I get that. It's just that, as people have been saying since at least the 90s, the publishing industry should really be coming up with new business models instead of trying to fight technological progress.
For a while we thought that new business model would be advertising. But web advertising has mutated into a creepy track-you-everywhere commercial panopticon, even as advertising fails to sustain print media. The value of web advertising is dropping as well. Advertisers can now see exactly how few people are clicking on their ads, and offer prices accordingly. Besides, I think relying on advertising too much puts the creators into an unhealthy relationship with readers: if the advertiser, rather than the reader, is the one paying your rent, then you have the incentive to do what the advertiser wants, even if the reader doesn't want it.
Lots of creative people on the web have moved to merchandise-supported model. That's great if it works for them, but many types of work (say, non-fiction books) that don't lend themselves to merchandise at all. And besides, there's only so many T-shirts the average comic-reading nerd can fit in their closet. Mechandise seems very limiting.
I donated to my first project thinking "huh, one of those ransom model things? OK, well, they won't take my money unless funding succeeds, so there's not much to lose; let's try it". I didn't think much more about it at the time. But as I've watched Kickstarters get more and more attention over the past few months I'm starting to think Kickstarter, or something like it, might be the answer.
(Obviously Kickstarter did not invent the ransom model of publishing; I know Stephen King did a book that way over ten years ago.)
But here's the thing: Kickstarter-style crowd-funding is one of the very few ways where the creator is actually getting paid for doing the work of creation. With advertising you get paid for delivering customer eyeballs to advertising, and that indirectly funds the creation of the work. Even with traditional publishing, the money comes from rectangular masses of dead tree pulp being shipped around to stores, and the sales of these objects refund the publisher for the advance they gave the author for work already completed.
The work of a creator is to make a thing exist which never existed before. Kickstarter relates this to money in a very direct way: if enough fans say "Yes, I am a potential audience member, and it's worth $X to me for this thing to exist", then they pool their money and the creator gets it. And the successful Kickstarters generally seem to be the ones where the creator explains why they need that amount of money, and what exactly it will be put towards -- the ones where the costs are transparent and justifiable, in other words.
I could even see somebody in the future making a living off of one crowd-funded project after another, setting the funding targets of the projects to cover all their living costs, and not even having to care about piracy or DRM or artificial scarcity. Who cares if some people get a pirate copy, if you've already been paid the value of your time and labor for making the thing exist?
Maybe the bigger risk is that a "creator" will take everybody's money and then never deliver the work. There has been at least one high-profile attempted Kickstarter scam already, but people got wise to it before it was funded and it got taken down. Sooner or later somebody will do a scam competent enough to succeed. It will be interesting to see what happens to Kickstarter then.
I read this interesting article today about how the Kickstarter website doesn't show you the 56% of projects that fail to meet their funding target. He says 56% like it's a bad thing. A 44% success rate is amazing, far higher than I imagined. And it's good that some projects don't get funded. The funding process is a way of gauging interest. If the interest isn't there, won't you be glad to find that out up front? You don't waste time making the thing and you don't go into debt financing it.
So yeah, projects fail. There are still no guarantees of success. Getting publicity for your kickstarter is still hard. There is only a finite amount of donor money out there, and a finite amount of donor attention. (Attention may be even scarcer than money). People who are already famous from other projects have a huge advantage getting attention for their Kickstarter campaign.
But none of those problems are new. It's always been hard for first-time creators to get attention for their work. There's always been competition for a limited number of audience dollars. That's part of the service that publishers provide - they know how to generate publicity. In fact, generating publicity may soon be the only function of publishers that technology does not render obsolete. (Well, that and editing. Editing is a valuable service and most stuff published on the internet would be a lot better if it had some!)
Maybe in the future, a "publisher" will be somebody you hire to manage your crowd-funding campaign for you? And the trustworthiness of the publisher's brand will be part of what convinces potential donors that you're not a scam -- that they can trust you to actually finish making the thing. It's also a reassurance that you meet somebody's standard of quality.
After all, there may be no limits on file duplication, but there are still limits on audience attention span, so that's the resource we need to pay attention to. The future will be interesting!
Everybody hates Firefox updates
It pains me to write this article, but I've got to get this off my chest at some point.
On Saturday I was waiting around a classroom at 上海外国语大学 (Shanghai International Language University) with a bunch of other prospective students, waiting for our numbers to be called for oral placement exams.
I was chatting with a random Canadian woman. She found out I worked for Mozilla and I got that sinking feeling, like "here we go again" because I knew exactly what was coming up. She proceeded to tell me the story of how she switched to Chrome because Firefox kept breaking her extensions and asking her to restart.
I've heard this story a lot in the last year.
I used to be proud to say I worked (or had worked) for Mozilla, but a careful listener might detect a certain sheepish quality that has crept into my voice lately when I name-check my former employer. And this is why. Even on the opposite side of the world, it's always the same story: "I used to love Firefox", but "I switched to Chrome because my extensions stopped working" or "I switched to chrome because Firefox kept asking me to restart".
I've had this conversation with dozens of people across three continents. Not one person has had anything good to say about the rapid release process. Nearly 100% of my highly unscientific survey volunteered the information -- unasked, unprompted -- that the rapid release process had ruined Firefox for them.
Of course nobody says "rapid release process" because people don't know that's what it was called. They might start out complaining about version numbers, or some plugin that doesn't work right, but when I ask enough questions to get to the root of the problem, it's always the rapid release process.
It's not like we weren't warned. Lots of people in the community tried to tell us that this was a bad idea. But somehow, despite being an ostensibly community-driven organization, somewhere along the line we learned to tune out naysayers from the community. The decision to go rapid-release came from the top down. The official party line was that rapid releases were going to be awesome, because new features and bug fixes would always be delivered to end users within a few weeks. (As opposed to the 14-month wait between Firefox 3.6 and Firefox 4.) Users who pointed out flaws in this plan were dismissed as being just a loud minority, or just irrationally afraid of change, or just focused on some marginal edge-cases which would be easy to fix once we got the hang of the new release cycle.
(I wish I could say that I spoke out against the groupthink, but to be completely honest, my thoughts at the time were "Release every 6 weeks? There's no way that's ever going to happen." I thought the problem would be implementing the strategy, not that the strategy itself was flawed.)
I've been thinking a lot about the fundamental disconnect between the developers and the users. I think it comes down to: Software developers have a perverse habit of thinking of updates/new releases as a good thing.
It's hard to convince a software developer otherwise: their salary depends on outputting a constant stream of updates, so of course they think updates are good.I used to believe it. Only after I heard from dozens of different users that the rapid release process had ruined Firefox did I finally get it through my thick skull: releasing an update is practically an act of aggression against your users. The developer perspective is "You guys are going to love this new update we've been working on!" The user perspective is "Oh god here comes another update, is there any way I can postpone the agony for a few more days?"
Updates suck for three reasons:
- The download/restart takes forever and interrupts your work with a bunch of intrusive dialog boxes.
- The update may break stuff that you counted on, either by removing features you were using, or by breaking compatibility with other software you use. Maybe the developers never tested your use case, or worse - they tested for it but decdided it didn't matter because only 2% of users used it. Tough luck to you if you're one of those 2%.
- If they changed the interface, your productivity will be lower than usual until you've spent a bunch of time learning a new interface. Even if the new interface is "better", in some theoretical way, to some hypothetical average user, re-training yourself to use it is nothing but a time sink.
This doesn't mean "never release an update". Sometimes you have to fix a critical bug or add a critical feature. What it means is that you should make sure the benefit to the users outweighs the pain -- either by making the benefit greater, or by making the pain smaller. Of course this is a very hard thing to get right. There's no hard rule for telling how big an improvement something has to be in order to be worth the pain of an update. Every software company gets this wrong sometimes.
So many companies release updates which radically change the interface for no significant gain -- they seem to be moving sideways rather than forward, changing things around for the sake of change. Maybe their UI designers are bored and need to do something to justify their jobs, I don't know. After years of aspiring to improve software usability, I've come to the extremely humbling realization athat the single best thing most companies could do to improve usability is to stop changing the UI so often! Let it remain stable long enough for us to learn it and get good at it. There's no UI better than one you already know, and no UI worse than one you thought you knew but now have to relearn.
I have another theory, too: When software companies get to a certain size, they start taking their users for granted. They start treating their users as pawns in a battle against some other company. Faceless millions. Gotta copy everything the other company does, or risk falling behind. So they end up doing everything the other company does whether the users want it or not, and probably doing a crappy job to boot.
In our case, we started thinking of everything in terms of the battle against Google Chrome. Oh no, Chrome is doing such-and-such; we'd better do something equivalent or we'll fall behind! We thought we needed a rapid update process like Chrome. We were jealous of their rapid update capability, which let them deploy improvements to users continuously. We had to "catch up" with Chrome's updating capability.
Credit where it's due: the way Google handled Chrome updates was very, very smart. They recognized that updates are one of the hardest things to get right, so they solved that problem first, before releasing version 1. The first release of Chrome was little more than an empty box of a browser, but it was wrapped around an excellent updating system. This let them gradually transform that empty box into a full-featured browser, without the users ever realizing they were getting updates.
Firefox did not do such a good job with rapid releases. I've written before about the specific mistakes we made, so I won't go into detail again. To summarize: we did the updates in a very intrusive way, requiring lots of user attention, which made people annoyed because it happened so often. When people restarted after an update to find no visible difference, they wondered what was so important about that update. (Remember the rule that the benefit of the update needs to outweigh the pain? We broke that rule.) Worse yet, we didn't do enough to preserve add-on compatibility, making the updates extremely disruptive to people who depended on certain add-ons; and we kept going with our old version-numbering scheme even though the meaning of the numbers had changed completely, leading to mass confusion.
We had plenty of time after Firefox 4; we should have used that time to perfect an unintrusive, add-on-preserving update system, and then unrolled it along with a brand-new version numbering system to clearly convey a break from the past. (Easy for me to say now; hindsight is 20-20.)
Ironically, by doing rapid releases poorly, we just made Firefox look like an inferior version of Chrome. And by pushing a never-ending stream of updates on people who didn't want them, we drove a lot of those people to Chrome; exactly what we were trying to prevent.
We assumed our users loved Firefox enough that they would put up with the irritation of updates in order to have a better product.
Software companies would do well to learn this lesson: anything with the phrase "users love our product" in it isn't a strategy, it's wishful thinking. Your users do not "love" your software. Your users are temporarily tolerating your software because it's the least horrible option they have -- for now -- to meet some need. Developers have an emotional connection to the project; users don't.
All software sucks. Users would be a lot happier if they had to use a lot less of it. They may be putting up with yours for now, but assume they will ditch you the moment something 1% better comes along -- or the moment you make your product 1% worse.
Marketers always say that "a brand is a promise to customers". What did the Firefox brand used to stand for? What does it stand for now?
I've sat through a lot of internal discussions about what sets Firefox apart and what qualities we wanted people to associate with it. Our favorite was something like "Firefox answers to nobody but you". We wanted people to think of Firefox as the browser that puts them in full control -- whether by having the best customizability, the best selection of add-ons, the best privacy controls, or just generally giving the user complete control of their data (i.e. not locking it up in a proprietary database or using it to sell advertising.)
A lovely promise! But then we did the opposite of putting users in control: we pushed out a seemingly endless series of updats that nobody was asking for, and provided no way to opt-out: there was no "I'm happy with Firefox 4" button, no "Switch to the long-term support version" button, no "I need my add-ons to keep working" button. The best you could do was ignore the update until later. Eventually you'd have to restart your computer, and the update would sneak in.
This isn't "Firefox answers to nobody but you", it's "Firefox answers to nothing but Mozilla's arbitrary six-week update schedule". Whatever we wanted the brand to mean, Firefox is now firmly associated in people's minds with "that browser that kept breaking all my add-ons with unwanted upates".
It's gotten much better now -- the updates require much less manual intervention and add-ons break much less frequently -- but it's too late. People who got fed up and ditched Firefox are going to be hard to win back.
Rapid releases killed Firefox's reputation.
Update: This post has been linked from Hacker News. The traffic from HN brought the site down temporarily. There's some interesting disucssion over there if you want to check it out.
Update 2: I responded to some of the comments in a new follow-up post.
Follow-up to the Firefox updates post
Further thoughts in response to comments on my previous post about rapid Firefox releases.
1. "But Chrome does automatic updates too! If people hate automatic updates they shouldn't be switching to Chrome". A lot of people have said something to this effect.
Look, it might not make perfect logical sense, but I'm reporting what actual users have been telling me about their reasons for switching. They may not be aware that Chrome has automatic updates (since they're mostly invisible). Or they may think automatic updates are fine as long as they're implemented unobtrusively.
2. "People like Chrome's automatic updates fine; therefore it's not the fact of automatic changes but the obtrusiveness of the implementation that matters".
Another frequent argument. It's certainly the prevailing opinion in the software industry right now -- that everything should auto-update, and the only difference that matters is between auto-updating well and auto-updating poorly.
I'm just not so sure this is really a good idea. I realize that my position might be unusual, even controversial. But I think users ought to have the ability to say "no thanks" to an update that makes UI or compatibility-related changes. These changes can have downsides. Since only the user is in a good position to judge how significant those downsides will be for them, the user should be in control of accepting or rejecting those changes.
Chrome hasn't yet made any large changes of this type so far. They're still too new for people to have built up a lot of dependence on obscure add-ons or UI edge-cases, and they've been mostly leaving the UI alone and making changes under the hood. So they haven't yet faced backlash for an unpopular change.
But take a look at the outcry over recent UI changes to another Google product -- GMail. Since GMail is a webapp, there's nothing users can do to about the changes. There's no such thing as running an "older version" of a webapp -- automatic updating is unavoidable. There seemed to be a lot of people who agreed with my assessment that the changes were a net negative.
I suspect that sooner or later, Chrome will make a UI change that users don't like, they'll push it out automatically, people will have no way to go back to the old version, and then there will be similar backlash.
3. Separating types of updates. I'm going to quote Gervase's comment in full, because I think he gets to the crux of the matter:
Updates are a good thing for all users when they are security updates. One of the things about the rapid release process, and one of the reasons for picking "six weeks", was the idea that security releases and new releases would be the same thing, and we'd have to maintain fewer branches. When a security update comes with significant UI changes, though, that's not good. So perhaps the idea of combining the two was our mistake?
Yes! It's best for everybody if as many people as possible are on the most secure possible version of their chosen browser, and the best way to make that happen is with automatic security updates. I would add performance updates and certain types of bug-fixes to this category, too -- if a change does nothing but speed things up, with no UI changes, then I think it's OK to push that out automatically and unobtrusively. Who doesn't want speed enhancements?
Maybe software projects ought to design their architecture so they can do security/performance updates in separate development branches from UI-relevant updates? Then the security/performance updates can be automatic and invisible, while the UI/compatibility changes can be optional. (Yes, separating these two kinds of updates can be hard. Yes, supporting multiple versions with different UI is hard. Nobody said making good software was easy!)
4. Mozilla actually did this, sort of. Firefox Extended Support Release exists. It's a version that gets security fixes but no UI changes for a year at a time. It's designed for large deployments at schools, businesses, etc. It would be an ideal solution for users who don't want change, but for some reason Mozilla has chosen to hide it away and actively discourage individual non-enterprise end-users from trying it out.
5. I said "No UI is better than the one you already know". I was exaggerating for hyperbole -- I don't really believe that no UI is ever better than the one you know.
So let me revise my statement: Rarely is a UI change such a big improvement that the efficiency gain from adopting it outweighs the efficiency loss from relearning. Designers tend to overestimate the benefit of a change and underestimate the importance of habituation. That's what I was trying to say.
Look down at your hands. Are you using a DVORAK keyboard? Why not? It's theoretically more efficient, right?
6. The Firefox update mechanism is a lot better now, as is the add-on compatibility situation. If you've left Firefox, I hope you'll consider giving it another try.
Apologies to people hurt by my post
It was never my intention to cause harm to Mozilla. I intended my post about upgrade hate to be constructive criticism.
But I found out yesterday that Mozilla had to make a press release to deal with all the flak that my post has generated. I never imagined it would go that far. I felt absolutely terrible about my post getting out of control to the point where they had to make a press release. I have a lot of friends in Mozilla who I care very much about. I'm deeply sorry if the result of my careless speech has been to make their jobs harder. I spent a lot of yesterday sending out apologies.
Firefox manager Johnathan Nightengale and my good friend Atul (now the only one of the Humanoids still at Moz) both wrote thoughtful posts in response to mine, which you should read.
I stand by my main point, that software developers tend to underestimate how much updates (even good upates) suck for users, and that the industry needs to think more about that fact. I wish I had made that point more diplomatically. I wish I had written the post so that it was more obvious that that was my main point, and so that it was less of an invitation for browser flame wars. I should have called the post "Updates Are Painful For Users" or something like that.
In 8 years of writing this website I don't think I've ever had a post viewed by more than about a hundred people or so. So the reaction to this one took me by surprise. I severely underestimated the potential for my post to go viral and the potential for my words to be twisted by people with an axe to grind.
As one of my friends told me: "Looks like you forgot how the internet works".
For the record, I'm still a Firefox user and I'm quite happy with it. The updates have been much less obtrusive, and since about version 13 or so they haven't broken anything that I use. It's not perfect but for me it's better than any of the alternatives. Chrome doesn't respect my privacy, IE is typically a step or two behind in support for cutting-edge features, and Safari is made by a company that thinks it should get to decide what software we can and can't run on our devices. Opera seems pretty respectable, but
it comes with advertisements and it's not open-source.
When I complain about Firefox it's not because I want to switch browsers. Firefox is the only browser that suits my values. I don't want to switch; I want Firefox to be better.
Adventures in Data Recovery
The Friday before APE, I biked home from the coffee shop that serves as my pseudo-office and opened my laptop only to get a black screen and a high-pitched whining sound coming from the hard drive area.
Uh-oh. That sounds bad.
Restarted, and it booted into some kind of Ubuntu command-line-only safe-mode/diagnostic mode I had never seen before. Couldn't mount the hard drive so I don't even know where this OS was loaded from. Maybe it got written into firmware when I installed Ubuntu?
Most of my important work is on the evilbrainjono.net servers or on GitHub. I have backups from a couple months ago, at the start of my China trip. If I can't recover the data, the most I've lost is some blog post drafts, some Yuki script drafts, bookmarks, a few email contacts, the Humble Indie Music Bundle, and the China photos I had not yet blogged. That would be the photos from Shanghai comic-con and our trip to Xi'an. I was especially looking forward to sharing the Xi'an pics so those are the saddest thing to lose.
Anyway I decided to get some professionals on the case. Fry's had successfully gotten data off a crashed hard drive for me before, so I took the laptop to them. I specifically told them I was running Ubuntu in case that was important.
Two days later, they called me back and said they couldn't do anything because their recovery software can't read Linux-formatted drives. Gee guys, that would have been a nice thing to tell me before I paid you. So I got everything back from them, bought a new hard drive, and began my attempts to recover the data myself.
I burned Ubuntu Rescue Remix onto a CD-ROM, booted from that, and started trying to ddrescue /dev/sda onto an external USB drive. This is a utility which will copy the raw data from the disk over to one gigantic file, ignoring bad blocks. Then I can hopefully mount the giant file as a virtual filesystem and read my photos off of it.
Well, if it's even the right partition. There's several virtual files in /dev that look like disk partitions, but they're unlabeled so I don't know how to tell which one is the partition I care about. I guess I'll try them all until I find something useful.
I left ddrescue running overnight, but this morning I discovered that it had stopped at 4 gigabytes. Of course! The external USB drive is formatted as a FAT filesystem, which has a maximum size of 4GB for any one file. (FAT was designed in the late 70s so they probably couldn't have imagined we would routinely have disks that large, let alone individual files.)
So next step is to format an external drive to ext3 or some other more modern standard and then try again. Even if I can't get the pictures back, this is kind of fun.
Adventures in Data Recovery, part 2
(Part 1 is here)
When last we left this adventure, I had just run up against the hard 4GB limit of maximum file size on a FAT filesystem.
I have several external hard drives, but none that I was willing to reformat, since each of them already contained my only copy of something. So I went and bought a new drive, and after reading a lot of fdisk and makefs documentation, I was able to format it as ext3.
Still running from the burned Ubuntu rescue CD, I started ddrescue copying from the dead hard drive to the new ext3 drive. The dead drive couldn't boot or even mount but it was luckily still functional enough to output a raw data stream at the hardware level. I left ddrescue running for several hours...
..the rest of the day...
...and all night...
...and all the next day...
Four days later, it finally finished copying all 200 gigabytes off the drive. At this stage there was no way to tell the difference between my files and the "empty" space on the drive, so it just had to copy every bit from the hard drive.
I then had a single 200 GB file. Using the "mount -o loop" command I was able to load that file as a virtual filesystem and cd inside it to inspect the contents.
I was afraid it would be too damaged to mount at this stage, so I got excited when I could see the directory structure of my dead hard drive appearing before me like a summoned ghost. But then when I cd'd into /home/jono, there was nothing inside but a README.txt file that I couldn't open!
Noooooo! What the hell is this! Did disk gremlins steal all my data and replace it with an insincere apology note?
Calm down, Jono. Think. This isn't your home directory. But then where is it?
After a lot of spelunking around the virtual filesystem I thought to try:
ls -a /home/
in order to see if there were any hidden home directories. That came back with one called:
What in the world is that? Ecryptfs? That sounds like some sort of encrypted...
I suddenly remembered Past Jono saying "Sure, why not?" as he clicked the "Encrypt home directory" option during Ubuntu install back in June.
Even if my data was in there, I wouldn't be able to decrypt it without either a crypto key or a passphrase, and I had absolutely no recollection of Past Jono picking a home-directory-encryption passphrase.
WHY, PAST JONO? WHY? You've screwed us all!
Wait, no, think. I never had to type a decryption passphrase into my laptop to get my files before; only my login password. That means that there must have been a private decryption key stored on the laptop hard drive outside of the encrypted region. This flagrant oversight would have made the encryption completely pointless as a security measure anyway! Great job, Past Jono. You set up encryption in a way that would have done nothing to protect your data from whatever oppressive government goons you were fantasizing about foiling, but still manages to stop your future self from getting the stuff you worked so hard on.
Unless! There must be a way to find that decryption key inside the virtual filesystem and use it to crack open the home directory.
The next step was to spend a few hours reading up on ecryptfs documentation, which mostly says things like this:
Q. I forgot my password/lost my key! What can I do to recover my data?
Nothing; you're screwed.
I discovered there's a command called "ecrypt-recover-private" that might help me find the key (if it existed), but it wasn't on the Ubuntu rescue disc. Normally I could install it with apt-get, but (duh) I was running off a read-only CD-ROM so there was nowhere to install anything.
I needed a full Linux install on a proper hard drive to proceed. Ubuntu 12.10 came out in October (i.e. 12/10. Fun fact: Ubuntu version numbers are actually release dates, just like we should have done with Firefox version numbers.) So I started downloading the 12.10 ISO file while I found a tiny screwdriver to begin the hard drive swap on the laptop.
Unfortunately the 12.10 ISO is just a few megabytes too large to burn to a standard CD-ROM. Unless there's some trick I don't know about, you apparently have to burn it to a DVD-ROM instead. Why, Canonical? Why? I grudgingly re-downloaded 12.04, knowing that I'll have to do a manual OS upgrade soon (assuming there's anything good in 12.10.)
Meanwhile, after a lot of frustrated twisting at stuck screws I got the old hard drive out and the new one plugged into the laptop. At least I get an upgrade to a 500GB drive out of this whole schlep.
That brings us to this morning, when I logged into the new Ubuntu install on my new hard drive, plugged in the external drive, and mounted the virtual filesystem once again.
Moment of truth! Drum roll!
> sudo ecryptfs-recover-private
discovered an encrypted filesystem at /mount/virtual-fs/home/.ecryptfs/jono, attempt recovery? (Y/n)
Mounted at /tmp/blah
> sudo cp -R /tmp/blah ~/recovered
YESSSSS!!!!!! (Fist pump!)
It's all here! Everything! My Yuki Hoshigawa script drafts! My photos from Xian! My Thunderbird email archives!
FUCK YEAH!!!! In your face, guy at Fry's who said it couldn't be done!
Of course, I could have avoided all this work if I had just made backups more often, but still. I feel really good right now.
Lesson to all of you: Don't go through this. Make yourself a backup plan today!
How to run Minecraft on Ubuntu
Minecraft used to just work out of the box on Ubuntu, but a recent update (could have been a Minecraft update, Ubuntu update, or Java update) broke it. When I tried to launch I got an error message like this:
Exception in thread "Minecraft main thread" java.lang.UnsatisfiedLinkError:
cannot open shared object file: No such file or directory
I tried reinstalling liblwjgl (a Java graphics library that Minecraft depends on) but it was already installed. Followed advice about making sure I had the Oracle version of Java (not the OpenJDK version). Tried a bunch of other stuff and nothing worked.
The solution I found, which I post here just in case anybody else is having the same problem, was to write a small shell script that sets the environment variable LD_LIBRARY_PATH. Apparently the problem is that the Java virtual machine by default looks for shared library files in the wrong place on the Linux filesystem. Setting this variable to the place where the shared libraries actually live before launching Java fixes the problem.
Here's my shell script, which you're welcome to copy and use - you may have to modify the path to match the actual location of the Java installation on your computer.
java -Xmx1024M -Xms512M -cp minecraft.jar net.minecraft.LauncherFrame
Just copy paste this text into a file and save it as minecraft.sh in the same directory as your minecraft.jar, then make it executable. Type minecraft.sh when you want to start Minecraft.
I'm happy I can now play my favorite game on my favorite OS, but dang this was way harder than it should have been. Computers! They still kind of suck!
Lovebird is ready for beta testing
The short version: I wrote a Thunderbird add-on to make the email interface I've always wanted -- one that helps me remember to stay in touch with people I really care about, instead of always distracting me with the newest incoming trivia.
The add-on is called Lovebird and you can download it here.
The rest of this post is about the philosophy behind Lovebird and why I designed it the way I did.
About a year ago, I wrote a post about how much I hate email
. I was frustrated that the few relevant messages from people I care about quickly get buried under a flood of distractions and nonsense. Not spam, even; just trivia.
There's a saying that "Life consists of what you choose to pay attention to."
Software encodes values, biases, assumptions, often unconscious, of the people who create it. The more that software becomes our filter on the world, the more that the unconscious biases of the software determine what we pay attention to.
There's one bias that's so prevalent it's invisible - noticing it is like a fish noticing the water. It's the assumption that the newest thing goes on top.
Twitter! Newest thing on top. News website! Newest thing on top. Blogs! Newest thing on top. Email! Newest thing on top. RSS feeds! Aggregators! What's new! what just happened now? I don't care about that thing it's so 20 minutes ago, get that off the front page.
The newest thing usually isn't the most important. It's usually a distraction from what's most important. Obsessive focus on the newest thing is a sickness in our culture. Not just the culture of software developers, but modern 21st century culture as a whole. Software didn't create distraction, but its bias towards showing you the newest thing is contributing to the constant distraction of modern life.
If life consists of what you choose to pay attention to; and what you pay attention to is increasingly not a choice you make consciously but is dictated by the software lens that you see the world through; then you are giving up control over the contents of your life to decisions made by that software.
And if the software is always focusing your attention on the newest thing just because it's newest, then you're allowing what your life consists of to be decided by who's noisiest.
Does that horrify you? It horrifies me.
Meanwhile, the stuff you don't pay attention to gets pushed out of your life.
Nurses who work with end-of-life care say that one of the most common regrets expressed by people who are dying is that they didn't do a better job of staying in touch with old friends and distant family while they still had the chance.
Email is the way I talk to more people more often than any other technology -- more than telephone, more than face-to-face contact.
My email interface should be helping me remember to stay in touch with old friends and distant family. But instead, email buries the important conversations under a flood of auto-generated GitHub and eBay notifications, political mailing list ACTION ALERTS, charities begging for money, etc. etc.
Maybe I opened my email interface with a thought in mind about what email I wanted to write. But my thought is soon lost as the interface bombards me with distractions -- all the newest, unread stuff.
Meanwhile that thoughtful, in-depth conversation from an friend I haven't seen in years is down on the third or fourth page. I didn't respond right away because it deserved a considered, crafted response. I starred it, sure, but... I guess I star a lot of things, most of which rapidly lose their relevance.
Unless I make a concerted effort, that conversation's going to get buried forever and I'm gonna forget about it. Now I'm gonna die with regrets because my email interface focuses my attention on what's new instead of what's important!
So I decided to do something about it. I started hacking around with an idea for an email client that would put that conversation with the old friend front and center of my interface, keeping it in my attention.
I built it as a Thunderbird add-on. Since its purpose is to help me stay in touch with the people I love, I named it "Lovebird".
Since it's people I care about, not messages, the Lovebird UI is built around a list of people, not a list of emails.
Everybody thinks they have the right to take up space in my inbox, but not everybody gets in to the Lovebird interface. It's a privilege, not a right. No mailing list or notification-bot should ever be allowed in the Lovebird list. Humans only.
And you only get there if I explicitly add you. I don't want my computer trying to be too smart and guessing who should go in the Lovebird list. That creates the wrong kind of feedback loop.
For everyone else, I can still check my inbox. Lovebird isn't meant to replace the inbox entirely.
I can have Lovebird sort my list of people in a couple different ways, none of which are based on putting the newest stuff on top. The default sort order shows me who's been waiting the longest for me to respond to a conversation. Whatever I've been procrastinating about writing becomes the top item in my interface. Hopefully this will make it harder for me to forget to answer people.
I can also have it show me who I haven't talked to in the longest time, even if they're not expecting a response from me. Maybe I just want to reach out to them and ask about their lives.
I've been hacking on Lovebird, on and off, for the past couple of months. If you've read an email from me lately, I probably sent it to you from Lovebird.
Now you can try it out! I've uploaded a beta version to Addons.mozilla.com. It's still missing some intended features, but it's about ready for people to try.
The source code is on GitHub. That's also where you can report any bugs that you find.
Why I Hate iPads
In the comments to a previous post, Ben asks:
"What's wrong with iPads?"
iPads crushed my dream of being a software usability guy.
It's hard for me to find the words to express why, so bear with me while I try to explain what iPads meant for my career.
My professional life in the software industry (first at Humanized, then at Mozilla) was all based around one question. It went something like:
"How can we make computers easier to learn without making them less powerful?"
"How can we give users more power without making their software harder to use?"
By "power" I don't mean gigaflops, I mean something more like the "empowerment" sense of the word. Creative power. The potential of computers to help people create things, to be a producer and not just a consumer of culture, to be smarter and more efficient and more connected and maybe even more able to self-organize and demand change from their governments or whatever. All the potentials that people used to mean when they talked about the "computer revolution".
By making computers easier to use without dumbing them down, that power could be democratized, made accessible to more people. That was my theory, anyway. Thinking about it that way made me feel like I was working on something important. The idea of this search was the source of my job satisfaction.
(Naiive techno-utopianism, in retrospect.)
When the iPad came out, at first I ignored it. Why would anybody want an iPhone that was too big to fit in your pocket and doesn't make phone calls? I had zero interest in iPhones and iPads seemed strictly inferior. I figured they'd disappear without a trace within a month.
When they started getting popular -- when every other company in the industry started scrambling to follow Apple's lead -- I slowly realized the horrifying truth:
The computer industry was no longer interested in searching for a balance between power and usability. The new trend was to make a thing super easy to use by taking away all of the power. Instead of making computers easier to use, they'd give people things that are not really computers anymore, but appliances.
Yeah technically they're "computers" in that they have a Turing-complete CPU inside them. But tablets are what you get if you strip away everything that made me interested in computers in the first place -- the ability to hack the thing, to reprogram it, to run whatever software you want, to use it to make creative works and share them.
Instead, with iPads and the "app store", it's Apple, not you, who decides what software you are allowed to run on this machine that you supposedly own. (Which by the way is far more restrictive than anything Microsoft ever did at its most monopolistic -- at least Microsoft would let you distribute whatever software you wanted for Windows. They might clone your product and crush you if you got too successful, but at least you were allowed to try.)
Also, the touchscreen UI and lack of a real filesystem or decent inter-app communication channels make it terrible for trying to create any kind of content. Trying to type words on it sucks. Trying to draw on it sucks. (Yes, I know you can attach an external keyboard. Congratulations, you've created the world's crappiest laptop.) The touchscreen UI is really only good for poking icons and panning/zooming through static content. It's an interface optimized for passive consumption.
Ironically, when I first heard "Apple is making a tablet" I imagined a thing optimized for drawing on. You know, like with a pressure-sensitive stylus and high-quality art software. Silly me; that's what Apple of 1984, the company focused on education and creativity, would have built. The Apple of 2010 is focused on being the middleman for streaming music, games, and TV shows, so that's what they built. An appliance for consuming streams of corporate-approved entertainment product.
iPads and other tablets are more similar to a new kind of television than to the computer revolution I imagined. The industry's recent obsession with them -- the "post-PC era" -- is a direction I have no interest in following. Feel free to laugh at me for being an old fogey who can't adapt with the changing times, but I wanted to make computers easier to use, not replace them with fancy TVs. If the industry doesn't want that anymore, then maybe I had no place in the industry.
Ultimately, the iPad posed a serious philosophical challenge to my whole narrative about democratizing the creative potential of computers. If the iPad got really popular, if most people saw this new appliance class as an acceptable substitute for a computer, that meant that most people are not interested in hacking or creating -- they're content with a locked-down, corporate-controlled internet media consumption device. The computer revolution I had imagined was never going to happen, because the people I thought I was fighting for didn't want it.
April 2010, when the iPad was released, marked the beginning of the end of my software developer career. I spent another year and a half trying to figure out some way to respond to this philosophical challenge, some way to fix my narrative, to get my job satisfaction back, to imagine a future for myself in that industry. (Tablets were not the only trend driving this; equally distressing was the software industry's move to an advertising-centric model that I find ethically dubious. But that's another blog post.)
By fall of 2011 I had given up. I'd accepted that my dream of being a software usability guy was based on phony assumptions, and that the role I had imagined for myself had no place in the post-PC era. I hung around Mozilla long enough to finish up my projects and then I walked away from the industry.
In short, iPads challenged what I thought computers were all about. They made me re-examine why I was ever interested in computers in the first place. And in that re-examination I realized that most of my reasons were no longer valid.
So maybe it's not quite right to say I "hate" iPads. Maybe I should really be thanking Apple for making me realize that software was not the right career for me and giving me the impetus to break away and search for something new.