… in which I hate you.
800 MBs of RAM. And you know what? I haven’t even used Flash since I started Chrome.
So in the midst of Flash versus Apple (well, we’ve sort of blown past it, but anyway), let me just point something out here…
You blow.
… in which I hate you.
800 MBs of RAM. And you know what? I haven’t even used Flash since I started Chrome.
So in the midst of Flash versus Apple (well, we’ve sort of blown past it, but anyway), let me just point something out here…
You blow.
Kalle-Alms-MacBook-Pro:trunk me$ svn st ? build ? universe.orig ? scratchpad.rtf M asynchro.xcodeproj/user.perspectivev3 M asynchro.xcodeproj/project.pbxproj M asynchro.xcodeproj/user.pbxuser ? Classes/multilineTableViewController.h ? Classes/multilineTableViewController.m M Classes/gridreaderViewController.h M Classes/gridreaderViewController.m M Classes/mgXMLWorld.h M Classes/mgXMLWorld.m ! Classes/MultilineTableViewController.h ! Classes/MultilineTableViewController.m ? tavern/world.xml ? universe/uni.jpg-files M asynchro-Info.plist ? examples/stiles
Oh, right, I renamed that “MultilineTableViewController” to “multilineTableViewController” (lowercase M) because everything else has lower-case-initial-letter.
Kalle-Alms-MacBook-Pro:trunk me$ svn rm Classes/MultilineTableViewController.h D Classes/MultilineTableViewController.h Kalle-Alms-MacBook-Pro:trunk me$ svn rm Classes/MultilineTableViewController.m D Classes/MultilineTableViewController.m
Great! Let’s add the new lower-case one to SVN now while at it…
Kalle-Alms-MacBook-Pro:trunk me$ svn add Classes/mult*tab**tab**tab**beep**beep*
Hm?
Kalle-Alms-MacBook-Pro:trunk me$ svn add Classes/*tab**tab* .DS_Store gridreaderViewController.h mgImageSourceRequest.m mgScrollView.m muddyGrid.m .svn/ gridreaderViewController.m mgImageView.h mgWindow.h tile.h UIImage+Scaling.h gridreaderViewController.xib mgImageView.m mgWindow.m tile.m UIImage+Scaling.m mg2DTileSet.h mgMinimap.h mgXMLParser.h worldViewController.h fileIO.h mg2DTileSet.m mgMinimap.m mgXMLParser.m worldViewController.m fileIO.m mgImageSource.h mgMinimapButton.h mgXMLWorld.h gridreaderAppDelegate.h mgImageSource.m mgMinimapButton.m mgXMLWorld.m gridreaderAppDelegate.m mgImageSourceRequest.h mgScrollView.h muddyGrid.h
Wait.
Where’s my class…?
Turns out SVN fucktardedly presumed “oh im shure he ment delt da fl thats lcase here insted lolstfucoksknmfur”. Luckily I had the files in memory.
The wonderful adventure continues.
svn: Failed to add file 'foo/Doc-credits.png': an unversioned file of the same name already exists Kalle-Alms-MacBook-Pro:iphone me$ rm foo/Doc-Credits.png Kalle-Alms-MacBook-Pro:iphone me$ svn up Restored 'foo/Doc-Credits.png' svn: Failed to add file 'foo/Doc-credits.png': an unversioned file of the same name already exists Kalle-Alms-MacBook-Pro:iphone me$ masturbate furiously -bash: masturbate: command not found
This time, the file Doc-Credits.png exists and the file Doc-credits.png needs to be added.
For the record, Mac OS X is at fault here — Apple decided to “be compatible” with Windows and not allow filenames of the same size with different capitalization, which *NIX does allow.
That doesn’t make SVN any less retarded though. After all, it’s running on the OS, so it should know the OS.
If you’ve ever wondered if there’s a convenient way in Objective-C to write a function for “expressing” the value of an object of yours, as a string, just like “toString” in e.g. JavaScript (and Java? I think), I’ve got good news:
-(NSString *)description
Add the above method to your Objective-C class and you’ll be able to NSLog it or get its string value anywhere using [OBNAME description]. In short, it will now respond with its ‘description’ to ‘%@’ in an NSString stringWithFormat expression.
Example:
@interface Person : NSObject {
NSString *name;
NSString *phone;
NSInteger age;
}
-(NSString *)description;
[...]
-(NSString *)description
{
return [NSString stringWithFormat:@"%@ (%d): %@",
name, age, phone];
}
Then somewhere we have a Person object and we want to see its value.
NSLog(@"We've got %@", aPerson); myLabel.text = [NSString stringWithFormat:@"Details: %@", aPerson];
(pardon any errors in code above — untested as is)
Let’s face it: the spammers are so sophisticated these days it’s only a matter of years before they’re identically copying “real” people, “real” content.
One of the simplest ways of doing this is to simply scan for identical blog entries, or blogs which focus on specific content. The recipe is simple, and if done right, impossible to detect:
1. Find 2+ blog posts about “chocolate pudding”.
2. Grab a random comment from each post.
3. Post each comment as your own user to each other blog, so that each comment appears entirely new, and genuine.
4. Put your spam URL in URL field.
There you have it. The only thing that could spoil you is if you accidentally grab a random comment that itself is spam from somebody else.
The way to combat this is to start ignoring the content of messages. In email, in blog entries, everywhere. We need to just give up on the whole idea. Instead our spam filters look at individual sites point to in URLs provided by said spammers.
Because you know what? These sites look almost exactly today, the way they looked 5, 10 years ago. They’re identical, because once we’re “there”, we either close the browser or we fall for the trap. It’s incredibly easy to scan for general spammy crap, like “viagra” or “penis enlargement” etc. Basically doing it the way it’s been done all this time so far, but applying it to web sites rather than emails or blog comments.
That’s all I had to say, really.
My fiancé’s Japanese, and as such, presents (or “omiyage” (お土産)) are extremely important. So important in fact that the following conversation occurred yesterday between me and my fiancé:
- her: by the way!
- me: yep?
- her: when you come here, you said you’d put a bunch of chocolate in your bag, right?
- me: yep!
- her: sure you’re not going to forget about it?
- me: already started buying stuff, and going to buy more tomorrow
- her: oh, okay! good! thanks!
It’s not just “a nice gesture,” and since we’re getting married, I have to be extra careful about this kind of stuff. So I went on a buying spree earlier today. This is the haul:
(edit: this looks completely fuck-tarded with my current WP theme; suggest you look at the LiveJournal syndication)

This thing apparently causes bubbles to appear when you move it. Brother's 2-year old will approve, I'm sure. Though it says '3+' so will have to be supervised playtime on this one.
Earlier today I saw two unrelated posts that somehow lead back to human engineering being compared to evolutionary engineering. The first one is a slightly naïve (but nonetheless interesting) post on Discover Magazine called “Linux versus E. coli” which brings up research made at Yale, which compares how Linux evolved to how E. coli evolved*, and another completely unrelated post by Cory Doctorow on Locus Online Perspective, where he talks about being the victim of a phising attack, despite technical competence and general wariness online. In his post, Doctorow draws the correlation between human engineered networks (internet) and evolutionary engineered networks (the human body) and mentions how parasites infect each in strikingly similar ways.
It reminds me of a talk at the Voices that Matter conference last month in Seattle, where Erik Buch talked about MVC, but also about his experience in the Aerospace software development field, where bugs must not be, and how the development strategies for this field differ greatly from those of e.g. games, where a crash will lead to a pouty kid or a drop in sales, at worst, rather than burning, stinking bodies splattered against the ground around a crashed airplane.
If you think about it, traveling thousands of feet up in the air across the globe is a rather extreme thing to be doing, if you don’t have wings to keep you up there, but we do it all the time. We’re at the verge of taking that step into space (which in some ways is less extreme than air travel), and I can’t help thinking what evolution can teach us about maintaining autonomous bodies with up-times that average 70-80 years (i.e. us humans).
In software development, we oftentimes streamline and optimize by ripping stuff out and “sharpening” the software to where it does everything it should with as little code as possible in as little time as possible, but nature doesn’t really think this way. Sometimes nature does the obviously taboo thing in software engineering, namely copy-pasting functionality around. It’s like a merging of the philosophies behind RAID and the philosophies behind optimized code. With millions of years of experience, our Great Programming Mother has made some very curious design choices, and all of them have been extensively unit tested and thought through by changing fractions of the code, testing it extensively, discarding failures, and keeping successes. Very similar to how software developers write code, just infinitely more thorough, and over a much greater span of time.
Nature takes things into account at a far greater scope than we do. For example, let’s say we have code in an automatic sliding door. The code does 4 things: it detects movement on either side (A), it opens the door (B), it waits (C), and it closes the door (D).
When we try our door, with the wait time set to 3 seconds, we realize pretty quickly that if two people walk through the doors with only a few seconds in between, person #2 will almost get the door in their face, so we tweak our code a little.
And there we have a human engineered sliding door in operation. Now there’s one very distinct thing we’re doing here that nature oftentimes does differently: we presume that it works.
A lot of code that we write, we write with the following notion in mind: I have to take every scenario into consideration, and have to account for every possible thing that could happen, and to deal with that in a good way in my attempt to perform “X“.
But nature’s code works on a different methodology — it goes something like this: I am trying to do “X“, and it might fail or it might succeed.
Nature works based on a fire-and-forget philosophy, where the reaction to situations is much more “lazy”, while being infinitely more flexible. The downside to nature’s approach is redundancy. Nature copy-pastes code all over the place because it has to. It has to double- and triple- and quadruple-check to see what’s going on, because it discards the idea of guarantees of success.
In the above sliding door code, nature would have most likely made a lot of different choices on the implementation. Fewer presumptions on what works and what doesn’t, and more redundancy to cover up for potential failures.
In regular software engineering (not the aerospace software kind), the place where our code looks the most similar to nature’s code is in initialization routines. Take for example this very simple example, where the sound card, graphics card, joystick and keyboard modules are initialized for a game system — emphasis on the concept, not on the (bad) code example:
int error_code;
error_code = sound_init();
if (error_code != ERR_NONE) {
alert_user("Sound initialization failed! Check your sound card settings. Sound has been disabled. (internal error code = %d)", error_code);
sound_enabled = false;
}
error_code = gfx_init(true); // true for hardware accelerated graphics
if (error_code != ERR_NONE) {
alert_user("Graphics initialization failed! Check your graphics card settings. Software rendering enabled. (internal error code = %d)", error_code);
error_code = gfx_init(false); // false for software renderer
if (error_code != ERR_NONE) {
alert_user_and_exit("Graphics initialization failed, again! We can't even do software rendering. Aborting! (internal error code = %d)", error_code);
}
}
int use_keyboard = true;
if (setting_use_joystick) {
use_keyboard = false;
error_code = js_init();
if (error_code != ERR_NONE) {
// fall-back to keyboard
use_keyboard = true;
}
}
if (use_keyboard) {
error_code = kbd_init();
if (error_code != ERR_NONE) {
alert_user_and_exit("Keyboard initialization failed! (internal error code = %d)", error_code);
}
}
The above code is relatively robust. It doesn't presume that something is going to work, and it tries to deal with the situation if it doesn't. It disables sound if the sound card can't be initialized, it tries to fall back to software rendering if the hardware accelerated rendering fails to initialize, and it falls back to the keyboard if the joystick (is enabled and) fails to initialize. It pukes at the user only if the graphics or keyboard can't be initialized at all. This stands in stark contrast to especially low level code where the implementation simply cannot afford to do a bunch of fail checking. The lower we step in the hierarchy of code, the further towards hardware modules we sink, we find that the flexibility decreases.
When your computer freezes up and the mouse just sits there on the screen no matter how much you wag the version on your desktop around, that's when someting went wrong down below. Imagine for a moment what would happen if this was a biological machine that just "froze". The closest similarity we can find is when we're knocked over the head and everything goes black and we go unconscious. We might compare it to a kind of "reboot". Though I think a closer comparison is heart failure. If a heart failed as easily as a computer freezes up, we'd all be dead by now.
And that's kind of the point. A heart won't just fail like that. The ultra-low components of our body aren't made to do-or-die. They're made to do their best, always, and nothing but, and to make the best of the situation always. Unfortunately, writing code that "does its best and makes the best of the situation" is hard, to put it mildly.
Which brings us back to aerospace software and space travel, because aerospace software, software for a space ship and nature all have one thing in common: they mustn't fail, ever. If Microsoft Windows imploded on board a space ship, the pilot couldn't just put in the CD and reinstall. If somewhere in the system, there was a bug that caused trouble, it shouldn't wreak havoc throughout the ship's system.
A bug is a stupid little insect**. They just cause an itch. An insect doesn't knock you unconscious or cause your heart to fail.
The good news is, this isn't new and groundbreaking stuff. Erik Buch stated that to date, not one single person has ever died from software failure on an airplane. I'm not sure the same can be said about space ships though... quite a number of them have spontaneously exploded at launch, and I'm not sure they know exactly what caused the disaster in each of those cases. I just know that if you find yourself on a space ship several years worth of travel away from Earth, and something goes wrong, you can't likely call home and ask for a helping hand. I think it's also safe to say that without computers and software to automate things, we'll never be able to go into space without a dedicated education on our belts, and as such, we will be relying more intimately on computers than ever once we go "out there".
Which I kind of hope is pretty soon.
---
(* and while the research generally concludes that "the two are more or less completely different," trackbacks on the comments section read "How the Linux Operating System Is Like the E. Coli Virus". Sometimes people are more interested in talking about what is being talked about than getting their facts straight)
(** aside from a few dangerous ones!)
It’s Choose Privacy Week, whatever that is (not even Wikipedia knows!). First time I’ve heard of it anyway, but 20K Films made a movie or two about it, and they say:
“The first-ever Choose Privacy Week will take place May 2-8, 2010 and is a new program created by the American Library Association to help librarians organize events in their communities about the role that privacy plays in their lives, why privacy is important, and how their privacy can be compromised on a daily basis.”
The movie is a treasure trove in defining the modern privacy and integrity problems that have been escalating for the last few decades in a well-rounded sort of way. I can’t help but feel that there’s an important piece of the puzzle missing though, and it’s only touched upon briefly at the very end of the video: that privacy is a changing and evolving concept, and that privacy is different, depending on the context.
When I was studying Japanese, there was a rather interesting passage we read in school regarding privacy. In essence, privacy was not only an unheard of concept in Japan back in the day, but it was in fact detrimental to the health of society at the time. Not knowing where Tanaka-san the fisherman had gone off to last night could very well lead to his demise, because the members of his village didn’t go look for him in the woods (maybe he’d broken a leg due to a bad fall or something).
While Japan today might seem like a very private place, and while people are far less inclined to tell you what they feel or think, the Japanese do not hold privacy very high — at least not digital privacy, or rights online. Every single click you make is scanned and compared and analyzed. I know this first-hand, because I was the subject of several threatening letters related to copyright infringement, and the crime which I supposedly committed did not become a law until the year after I left Japan. Summarily, the ISP kept tabs, not to obey the law, but to appease whatever company paid them to keep tabs on their users — us.
Think about that for a second. They didn’t have to. But they did.
A friend of mine, when he signed up for an internet service with an ISP in Osaka, was asked whether he wanted the “service” of the ISP being able to at any given time look at his monitor and see what he was doing. All he had to do was install this piece of software.
He declined. The representative was flabbergasted. So was my friend’s girlfriend. In the end, the girlfriend had to tell the guy, “I’m sorry, he’s Swedish, they’re like this,” to which he apparently gave an uncertain nod and nixed it from the list of “services”.
Alongside this event, my teacher in school brings up the subject of privacy and of school records of children, that these records are sold to corporations and that said corporations use them to market their products (“Your daughter turns 20 this year, right?” – “Yes she does, actually, why?” – “Have you gotten a kimono arranged for her yet? If not, our company specializes in coming-of-age ceremony kimonos and would be honored to help you out.” I believe was the (fake) scenario depicted in the school text). My teacher pointed out the horrors of this unjust behavior, and all the while, her computer at home can at the flip of a switch be monitored by her ISP — judging from that rep’s reaction, not a lot of people decline that wonderful offer.
Privacy in a small village is not the same as privacy in a metropolitan city, nor does it work the same. Privacy in Japan is obviously not the same as privacy in Sweden. Privacy for a 15-year old isn’t the same as privacy for a 50-year old. It’s being redefined beneath our feet, and refined to fit niches and groups on a more precise and specific level.
In the Choose Privacy Week movie, a lot is being said about one’s actions online being permanent — no matter how many delete keys you press, once you’ve hit “send” on that email, or that forum post, or even blog post, you’re stuck with that information online, spreading completely outside of your control, which, unless you happen to be a marketing firm, can be a rather painful and destructive thing to have happen. Posting your age or phone number or interests on Facebook will inevitably mean that said information is processed and turned into a package deal that is sold to whoever pays enough.
“Why do free social networks tilt inevitably toward user exploitation? Because you’re not their customer, you’re their product.”
– Tim Spalding (via Cory Doctorow on Twitter).
At 360iDev as well as at the Voices That Matter iPhone conference, a recurring concept was that of “mining your users to better understand your own product”. The concept is as follows: track every keypress, track every page flip, track everything your user inputs into your application and feed it to your central server. Process that information, and figure out vital things such as which features users tend to use, and even more importantly, which features users tend to not use, in order for you to over time tailor your app to suit the needs of your users better and better.
My immediate reaction to this was “dear fuck, what about privacy?” and from what I can tell, Apple supposedly ensures that users do not mine sensitive data, and apparently also cracks down on misuse of said data. But Apple’s not exactly the ideal privacy protecting superhero, except in that they’d lose reputation (and cash) if it was leaked that their applications, well, leaked.
Regardless, it is an under-advertised “feature” that whatever app you install on your i* has the ability to feed a central server somewhere with information about everything you do in it. And it doesn’t have to tell you (as opposed to when it wants to track your current location). (As a sidenote, do you think Apple’s servers need to ask you for permission finding your iPhone? Not really, as any MobileMe account holder can (contentedly/relievedly) affirm, since it’s possible to locate your phone remotely online.)
The internet, and the world, has been steadily moving toward a new form of privacy. People like Cory Doctorow are (and rightly so) advocating more protection of user’s integrity, but the user him/herself keep taking steps further and further into, well, the light. We’re opening ourselves up more and more as we encloud ourselves and place more and more of us out there. Gmail online, not POP3. Google, which (in an open, we’re-harmless-we-promise sort of way) tracks your searches to tailor your results after your specific interests, blogs, where we exhale slowly, Twitter, where we do it quickly, IM’s, Facebook, where we tell everyone who’s listening exactly who we are and who we know… there’s not a lot that we’re not saying anymore.
In fact, I’d wager that the only things we’re not saying are the things we want to keep to ourselves. But we slip, we’re human. We blurt a little too much, in a blog, a forum, on IM’s, in an email, somewhere, and it’s stored and analyzed and categorized. And I’m not just being paranoid.
Sometimes we don’t even have to say anything at all. Guilt by association has been turned into an art form by the witch hunt for terrorists and/or evildoers of various kind. I have friends who are republicans and friends who are democrats, friends who are communists, or extreme-right wing nuts, gay friends, straight friends, old and young friends, I have friends who hate cops, Christian friends, atheist friends, muslim friends, and the list goes on — the very dirty-laundry sort of list. One might argue whether being friends with a right-wing nut is appropriate at all, but I can’t really choose my friends’ political views, and you’d be surprised at the level of intellectual capacity even certain right-wing nuts might have.
One of my more verbal friends had a blog once. He’d talk about everything and anything. One day, he applied for a job and got an interview. They were excited. He seemed like the man for the job. Then bam, they told him to continue searching. The reason? They’d Google’d his name and found his blog, and couldn’t have someone with his opinions in their work place. Trouble maker. His blog is no more.
Our privacy isn’t what it used to be. Jesse Schell talks a little about this in his DICE2010 talk labeled “Design Outside the Box“, a talk which I wholeheartedly recommend anyone remotely interested in game design, or the future for that matter. He describes “the future” as a place where every move we make is tracked and analyzed by machines, where our corn flakes box lets us play a game as we eat our corn flakes and see our points compared to our friends that week; he talks about how our future selves will read a book on our Kindle and get an achievement that we’ve read our thousandth book, and that we’d be embarrassed that our thousandth book was a stupid Star Trek novel. That we’d stop to think and realize that we didn’t know what our grandparents read, but our grandchildren will be able to see exactly everything we did and read and that maybe, we should try to be a little better and do better things with our lives… (except he says it much better — just watch it until the end, even though it’s close to 30 minutes long).
And maybe that’s precisely it. The inevitable truth is, we — the remnants of us that fear the loss of privacy and try to maintain it in some form, traditional or not — are fighting a losing battle, and sooner or later, everything we do will be registered and monitored and tracked and analyzed. I’m not even going to bother reassuring you that this isn’t paranoid thinking — if you think it is, seriously, you’ve gotta start reading the news, buddy. Or just reading, period.
But let’s look at it from a different perspective, by giving a small analogy. In a village with 100 villagers, privacy is non-existent. It is, because everyone knows everything about everyone. There is no privacy to be had in an environment like that. Old Joe Schmoe can’t get an erection anymore, and everyone knows, because that’s just how it is. Joe might feel infuriated and insulted about it, but at least the rest of the world doesn’t know about his predicament — small comfort to Joe, but relevant to our analogy.
In a big metropolitan city, Joe’s predicament is except in rare cases not known by anyone, or known only to those close to Joe himself. Him, his doctor, his significant other, and that’s probably it. Privacy is greater, because there are more people to blend into. We’re more anonymous.
Then we have the internet. The internet is the mutt, the screwed-up offspring of the village mentality of everybody knowing everything and the metropolitan anonymity of blending into the masses. It’s the ants on your TV when the crows ate your antenna. Black. White. White. Black. Black. Nothing is really gray here. More people know about more people. More people are famous for lesser reasons. Just take a moment and marvel at all the (ridiculous, one might accuse) “online celebrities” and what they’ve done to become so known to the world. That guy who cried about leaving Britney Spears alone? That kid with the laser sabre whom found himself the subject of countless “re-makes” where people did everything from turning his wooden stick into a real live zzzzzzmmm-yowling sabre to ridiculing him mercilessly. If I recall right, his parents tried to raise a fuss about it, but what’s there to do about it, anyway? It’s out there. No amount of hitting ‘delete’ is going to take it away.
Posterity online is a phenomenon all by itself. It’s like the subject of an immensely intricate equation, where week-old stuff vanishes without a trace and decades-old stuff remains. Those deemed famous by the online community will linger for who knows how long — maybe forever.
We fool ourselves, thinking that with the masses and masses of information online, we are the untraceable needle in the haystack, but the internet is evolving as rapidly as the content in which we aim to hide grows — if you’ve ever whined about a company on Twitter, you might have had the pleasant surprise of said company responding to your tweet. Just by writing the right keyword into your message, they get it fed to them via Twitter’s own search feature. Do you know how much information passes through Twitter in a day?
“By the end of 2007, about 500,000 tweets per quarter were posted. By the end of 2008, 100 million tweets per quarter were posted. By the end of 2009, 2 billion tweets per quarter were posted. In the first quarter of 2010, 4 billion tweets per quarter were posted.” (bolded by author)
– http://en.wikipedia.org/wiki/Twitter
4 billion tweets per quarter. Or roughly 50 million tweets a day. If every tweet averages at 100 letters, that’s 5 billion letters. Every day (this entire post counts 15k letters — the same amount is tweeted in one fourth of a second). If a company can find the mention of their name in 50 million tweets a day — 600 tweets a second — just like that, that probably means your “blending into the crowd” trick is flawed.
We aren’t used to this but the kids of our time are. How will they define privacy as adults, having been surrounded by the perpetual lure of providing more and more pieces of themselves to perfect the product that they are to Facebook or whatever may take its place in the future. They will inevitably see those around them lifted up into the light from the shadows of anonymity, to be ridiculed or praised or both, and then cast aside when they no longer provide entertainment for the masses. Their friends will be the rock stars and celebrities we could only see at a distance, stalked and exposed to anyone who cared. They will learn to deal with the public continuum that surrounds, even dictates, their lives. Privacy won’t be then what it is today, but the people of that time will know, on a near instinctual level, how to cope with and remain private. Privacy won’t be then what it is today, but perhaps we can guide the evolution of it onto a democratic path.
Meanwhile, before you go to that job interview — or go on that overseas trip, try Googling your full name or nick name, skim your blog for objectionable content, scan your Twitter feed, and come up with good responses for when they ask you about it. Presuming they even bother to ask.
I guess most of the people who know me even remotely know that I’ve gotten into iPads and iPhones and Macs and such lately. Part of this has to do with work, actually, as I’m currently tasked with writing software for the iPhone/iPad devices (which is a pain to write, so I refer to them as i*s or iStars). I spent the last couple of weeks in the United States with a MacBook Pro, my iPhone and my iPad as my only available computers, and as such, I was more or less forced to adapt to the Mac way of doing things. It’s not that bad, actually, once you get over the fact it’s NOT a variant of Windows but a whole separate system altogether.
I’ve been a linux user for the last decade. More, even. I’ve had brief encounters with Windows, most of them horrific, all of them resulting in me eventually giving up and going back to linux, and none of them in the last 5+ years. I hear Windows is getting better, but as we say in Sweden, “bränt barn skyr elden*,” and I’ve come to the realization that I will most likely never use Windows again, even though I’m pleased to hear it’s shapening up after all these years.
One might say I’m a hard-to-please customer. Some might even accuse me of being the worst kind ever. I whine about things that don’t do their jobs, and even if they’re open source and free as in liberty, it doesn’t mean I won’t complain when they can’t do their jobs properly. I recently spew pus over PulseAudio and Ubuntu 9.10 — the worst experience since 1990 — and I stand by what I said, but in the end, I love linux, and it’s unfair to blame it all on the system, when there are so many factors out of the developers’ control.
Hardware manufacturers couldn’t give less of a fuck about linux, unless they’re making server-specific hardware.
Software manufacturers couldn’t give less of a fuck about linux, unless they’re making server-specific software.
It makes for a really ugly scene, sometimes, and people have to jump through living lions while spinning firey globes of radioactive customs officers through quality assurance managers. It’s messy, and it takes hours and pain, lots of both.
And this is an ongoing perpetual circle, where new hardware and new software clashes and collides over and over, year in and year out, in the uphill battle that is the linux desktop scene.
One of the most annoying things about being a linux user isn’t necessarily that hardware and software manufacturers piss in your corn flakes. It can be really frustrating when you’re struggling to get something working and someone goes, “Why are you using that piece of shit anyway. Linux sucks man. Just install Windows.”
Twitch. I mean, dude. Twitch. I don’t think there’s anyone out there as defensive and protective of their operating system as the linux user. We’re the first to take offense when someone tells us linux sucks. You tell a Windows user that Windows sucks and the most probable reply you’ll get is, “Uh-huh, I know that.**”
Sigh. So retarded. Well, I’ve gotten better about that, and these days I don’t have an agenda against anyone. I just know what works for me and what doesn’t, and whatever works for you, you should stick to. I still get picked on for my choice of OS though, playfully of course, and so the last couple of weeks my guilty pleasure has been to say things like:
“Damn, handbrake seems full of win. And it’s available for linux too. (And Windows, but who cares..)”
on Twitter. Which is fed to Google’s Buzz, which appears for some of the people who tend to poke fun at me. Now I’m poking back.
Joke aside, it’s interesting how the tables have turned. One of my best friends who’s a hardcore Windows user (and a skilled tech guy at that) and I have been discussing the whole linux/Windows deal for more or less ten years, and suddenly I’m waving my i*s around and talking about the innovative and prosperous market, while he’s pointing to Android and upcoming tablets that will potentially turn the tide on Apple’s tidal wave of domination. He’s suddenly wielding the open source cap and I’m wielding the closed source proprietary cap. And it happened overnight! Granted, his change isn’t as dramatic as mine — he’s simply opposed to the Mac experience, and will grab at anything that means not having to use a Mac (including some of the Win7 devices that are closing in on the market). In my case it’s a little more extreme, but in the end, I’m just excited about a rare opportunity. In the end, I do not believe the i*s will control the market, but I believe they will lead the way, and I’m excited to be a part of that process, even if it’s an unsignificant part.
—
(* “burnt child fears fire”)
(** except for that one guy in Wisconsin who got real offensive about Windows when *I* said it sucked; never mind me being a hypocrite, but I was completely taken by surprise by this reaction, and immediately labeled him a confused patriot thinking Windows somehow was connected to the pride of America)
Update: timely — MS cancels their “iPad killer”: http://gizmodo.com/5527442/microsoft-cancels-innovative-courier-tablet-project
It’s not the first time I’ve spent a whole night at an airport, but it’s definitely a runner-up for the most pleasant. For two reasons, mainly.
1. I found an outlet to plug my lap top in. Outlets when traveling are like oases when traveling… in deserts. They mean unlimited usage, with no battery life risks. My MacBook Pro actually has like 7 hours of battery life but I *will* be on a 15 hour trip and that’s counting “first plane take off” until “second plane landing” only. So, I am electropowered.
2. Google (I think it’s Google?) hosts a free wifi service here. It’s fast, too, especially at 1 am in the morning. Free wifi means the internet, which means I’m pretty much able to do everything I do normally. Except I’m sitting on a hard, cold floor and my feet are about to perish (stretch left leg out over crossed right leg, then do variations of that, ugh, running out of comfortable ones though), but I might go for a walk and maybe find a café or something in a bit. I always have my discreet, quiet, electropowered spot to retreat to if all else fails.
Earlier, a guy I met at both 360iDev in San Jose and the Voices that Matter conference here in Seattle agreed to take me to the airport in the evening, so we hung out at his place for a while. He showed me a couple of games I had managed to miss, like Plants vs Zombies. My god, that game is ridiculously addictive. I downloaded a trial of it here as soon as I found my lovely charge-spot and played it until it threw me out and said ”You, mister, have been playing for an HOUR. You better pay up!” I tried arguing that it’s $20 and that’s kind of a lot of cash, but I don’t think it heard me.
So the last couple of weeks have been weird. I don’t think I’ve actually relaxed a second since I landed the 10th. It’s not that I’m not in a stress-free environment or anything, it’s just that being away from home wears on me.
I’ve been thinking a lot about “home” the last couple of years, since I’ve been away from what you’d expect to be “home” for nearly 2 years. I hated my apartment in Japan, and I wasn’t totally happy with my lifestyle either, but “Japan” felt just as much like “home” as Sweden ever did. It was when I bought that ticket to get me to Sweden that “home” suddenly changed meaning. I went through several phases of redefining my world, or something — immediately after buying the ticket, I wanted to be back home. Then that wore off after a month or so, and the last 3 or so months of my stay, I felt more and more like I actually didn’t want to go home at all.
I think I blogged about (lazy blogger, it’s 2 am, forgive) my shocking experience in finally returning back to Sweden, and I still clearly remember that feeling, and I don’t think I will see Sweden quite the same way as I did before, ever, but it’s home, now.
Ultimately, home is where you say it is, and until you do say, it won’t be home, and it won’t feel like home.
That’s all I have to say about that right now.
I’ve been spending the last week or two absorbing information at a pace I’m very much not used to. 360iDev was very informative. Sort of like an ultra-condensed university course without obligatory courses. A lot of really cool people were there (if you sift through all the self-important blobs of goo that were scattered throughout those actually cool people), and I’m looking forward to meeting them again, if the opportunity presents itself.
Kendall Gelner, Noel Llopis, and many other hugely talented but yet pleasant to be around folks were inspiring.
Only thing I regret about the thing was eating those veggie burritos. Man they were grody.
iPadDevCamp was a super-intensive “hack something together a-zap and present it two days later” thing. Actually it was roughly 1 whole day of working, with only a few hours on the Friday eve and Sunday morning to do last minute fixes. I ended up with a group of 4 others doing a ‘multi-device game’ called (eventually) Tank or Die. The idea was to be able to add iPhones as game controllers and iPads as playing fields in this ‘control the tank and try to shoot the other tanks’. There were 3 developers (4 even) and one graphics designer. Everyone decided to start working on things on Friday, but due to transportation issues, I couldn’t actually join them until Saturday. My task ended up being the connectivity between iPads (the playing fields) and I just didn’t have enough time to figure out how to get it all working in time for the demo, so when we won “best game” award, I felt a bit like a cheater when I took that wireless keyboard from the prize pile.
Was a learning experience though, and I don’t regret participating. It’s a very nice feeling when you are convinced that “if I were tasked to do this with the things I know today, I would have succeeded”, and I am.
Now I’m going to be doing some work and relax until Friday, when I go up to Seattle for the last conference in my “conference tour”.