<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

 <title>multipart-message</title>
 <link href="https://nevyn.me/atom.xml" rel="self"/>
 <link href="https://nevyn.me/"/>
 <updated>2019-09-22T13:37:10+02:00</updated>
 <id>https://nevyn.me</id>
 <author>
   <name>Nevyn Bengtsson</name>
   <email>nevyn.jpg@gmail.com</email>
 </author>

 
 <entry>
   <title>Life in 2019.</title>
   <link href="https://nevyn.me/2019/09/19/welcome-back/"/>
   <updated>2019-09-19T00:00:00+02:00</updated>
   <id>https://nevyn.me/2019/09/19/welcome-back</id>
   <content type="html">&lt;p&gt;hello again. I accidentally let my blog’s domain expire, then my closet
server died, then my google cloud copy of it had an expired card and got
deleted, while life happened around me. then I sat next to
&lt;a href=&quot;https://tobiasahlin.com&quot;&gt;tobias ahlin&lt;/a&gt; a few years ago and he 
convinced me to switch to jekyll. (he reaaalllly loves jekyll.) I started
migrating from tumblr, left it without even pushing to github… unhappy
about formatting, tried again a year later… and so on.&lt;/p&gt;

&lt;p&gt;a year later, the wonderful &lt;a href=&quot;https://www.tedvalentin.com/&quot;&gt;ted valentin&lt;/a&gt; took 
&lt;a href=&quot;https://www.knackeriet.se/&quot;&gt;the whole office&lt;/a&gt; with him into the archipelago
(including us on parental leave!!) this week, and I got to sit next to tobias again
so he could coach me into finish this thing :)&lt;/p&gt;

&lt;p&gt;so here we are at &lt;a href=&quot;https://nevyn.me&quot;&gt;nevyn.me&lt;/a&gt;. yay, I got a blog again!
I’m not really the same person I was in 2015/2016, so I wanted to reboot the blog with a
summary of my recent journey. maybe just for a bit of catharsis.&lt;/p&gt;

&lt;h2 id=&quot;2015-holy-shit-how-did-i-survive-that&quot;&gt;2015: holy shit how did I survive that.&lt;/h2&gt;

&lt;p&gt;yeah, that was a year alright.&lt;/p&gt;

&lt;p&gt;me and my girlfriend of 9 years broke up. a few months later, my dad
passed away. while the breakup was pretty mutual and it was nice to
change things up, combining the two made me sort of lose myself.&lt;/p&gt;

&lt;p&gt;after a long, intense summer, I met my to-be wife Emma at a music 
festival. the connection was amazing, and we sorta never let go of
each other after that.&lt;/p&gt;

&lt;p&gt;then my mom passed away too.&lt;/p&gt;

&lt;p&gt;then lookback decided to move to silicon valley.&lt;/p&gt;

&lt;p&gt;then me and emma got married so we could move there together and
continue being ridiculously in love.&lt;/p&gt;

&lt;p&gt;that’s…. just too much stuff to go into a single year. i recommend
portioning out the good and the bad across a longer period of time,
if you can.&lt;/p&gt;

&lt;h2 id=&quot;lookback-goes-usa&quot;&gt;lookback goes usa&lt;/h2&gt;

&lt;p&gt;two and a half years in san francisco, living the startup life.
the world grew, I gained a bunch of amazing friends, and I worked
myself apart.&lt;/p&gt;

&lt;p&gt;san francisco is an amazing city, with such vibrant communities all
being destroyed by a selfish, greedy tech industry. biking past
four homeless tent camps, and some of the riches companies in
the world on my way to work… made me very sad and bitter, broke
me a bit.&lt;/p&gt;

&lt;p&gt;combine the losses of 2015 while being half a world away from my family, 
with overworking myself under a not-so-healthy classic startup tech culture,
with the broken city around me… it didn’t feel great.&lt;/p&gt;

&lt;p&gt;regardless, I made some really great friends. I miss you brian, bruno, kerstin, kristy,
bogo, tarjei, aurora, chris, tiff, phil, carolyn, julia, caro, nehal, alex, lea…&lt;/p&gt;

&lt;h2 id=&quot;family&quot;&gt;family&lt;/h2&gt;

&lt;p&gt;so emma got a job back in stockholm, so we moved back to sweden. phew. for the
two and a half years since the move, it’s been all about different variants of family.&lt;/p&gt;

&lt;p&gt;being near my siblings again and meeting them regularly is worth everything to me.
it’s an amazing solace. my youngest brother bengan is my closest friend, and being
with him is the best.&lt;/p&gt;

&lt;p&gt;we reworked our company culture under the amazing &lt;a href=&quot;https://twitter.com/iamhenrikm?lang=en&quot;&gt;henrik&lt;/a&gt;,
focused on health and human values, slowed down a lot and… started becoming
really successful, perhaps much thanks to these new values?? that made me really happy.
using the term “family” for work is a common silicon valley dark pattern,
but let’s call it… family-like?&lt;/p&gt;

&lt;p&gt;I started working from ted valentin’s coworking space &lt;a href=&quot;https://www.knackeriet.se/&quot;&gt;knackeriet&lt;/a&gt;,
and it’s the friendliest place on earth. every single person there is now a dear friend.
it’s like a . .. . second family. really, you’re all lovely!!&lt;/p&gt;

&lt;p&gt;and in 2018/2019, the actual family of me and emma become a family of three, as our
son Theodor joined us ❤❤ they’re my world, especially now as I’m on paternity leave.
from july this year until march of 2020, being a dad is my day job.&lt;/p&gt;

&lt;p&gt;it’s a lot of work, in a very different way from startup life; but it’s a really welcome
change of pace, and being there with my son as he grows up is such an amazing journey ❤❤&lt;/p&gt;

&lt;h2 id=&quot;hacks-bits-and-bobs&quot;&gt;hacks, bits and bobs&lt;/h2&gt;

&lt;p&gt;while parental leave is really not very easy to combine with coding,
I’m ridiculously hyped about VR nowadays, so I try to sneak some
hacking in. me, tobias kask and admir husovic organize 
&lt;a href=&quot;https://www.facebook.com/groups/vr.the.people&quot;&gt;vr the people&lt;/a&gt;, a social
evening hack hangout group in stockholm for learning VR and working on side
projects. it’s a lot of fun :)&lt;/p&gt;

&lt;p&gt;and while I do build various retro gaming inspired toys for my son, the project
I try to focus on in the few hours a month I actually have time and space to code
is &lt;a href=&quot;https://alloverse.com&quot;&gt;alloverse&lt;/a&gt;, an overly ambitious VR app platform
thatäs been brewing in the back of my head for a long time. I don’t get
very far on my own, but some friends are tagging a long, and it’s open source,
so it’s getting somewhere :)&lt;/p&gt;

&lt;hr /&gt;

&lt;p&gt;so… that’s my life in 2019! &lt;a href=&quot;https://twitter.com/nevyn&quot;&gt;let me know on twitter&lt;/a&gt;
if you enjoyed reading about it, or there’s something in particular you’d want
me to blog about:)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Introducing CoreDragon: cross-application drag’n’drop for iPad</title>
   <link href="https://nevyn.me/2016/01/14/introducing-coredragon-cross-application/"/>
   <updated>2016-01-14T04:23:30+01:00</updated>
   <id>https://nevyn.me/2016/01/14/introducing-coredragon-cross-application</id>
   <content type="html">&lt;iframe width=&quot;800&quot; height=&quot;600&quot; src=&quot;https://www.youtube.com/embed/AQ7B2x-LHnQ&quot; frameborder=&quot;0&quot; allow=&quot;accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture&quot; allowfullscreen&gt;&lt;/iframe&gt;

&lt;/p&gt;&lt;p&gt;I am very passionate about user experience design with direct manipulation. With the advent of multitouch, we have freed ourselves of the computer mouse, and the disconnected interaction of hand movement from cursor movement. Being able to directly touch what we interact with is a great victory, and the major reason why iOS is such an intuitive platform. However, in the design of the iPad, Apple has retained many of the design decisions that were made for a tiny mobile phone, where one can only do one thing at a time. This leads to a lot of modal interactions and sequences of single finger taps, such as the activity view controller, where the entire application is blocked by a modal interaction that you complete by tapping through tedious steps.&lt;/p&gt;

&lt;p&gt;The eighties solved this with another piece of direct manipulation: drag and drop. Today, I bring the eighties right back into 2016 with my &lt;a href=&quot;https://github.com/nevyn/CoreDragon&quot;&gt;new open source library CoreDragon&lt;/a&gt;&lt;a&gt;. &lt;/a&gt;&lt;a href=&quot;https://github.com/nevyn/CoreDragon&quot;&gt;CoreDragon&lt;/a&gt; lets you get rid of context menus, modal interactions and even copy paste, by allowing you to mark some areas of your application as things that can be dragged; and other areas as places where you can drop things.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://youtu.be/AQ7B2x-LHnQ&quot;&gt;See the video above for a full demo with two sample apps&lt;/a&gt;. &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>nerdsandgamersftw a working bmo super nintendo</title>
   <link href="https://nevyn.me/2015/03/19/nerdsandgamersftw-a-working-bmo-super-nintendo/"/>
   <updated>2015-03-19T17:16:27+01:00</updated>
   <id>https://nevyn.me/2015/03/19/nerdsandgamersftw-a-working-bmo-super-nintendo</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/tumblr_nknr3l4k7j1s2b58zo6_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;img src=&quot;/tumblr_files/tumblr_nknr3l4k7j1s2b58zo3_1280.png&quot;/&gt;&lt;br/&gt;&lt;img src=&quot;/tumblr_files/tumblr_nknr3l4k7j1s2b58zo4_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;img src=&quot;/tumblr_files/tumblr_nknr3l4k7j1s2b58zo5_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;img src=&quot;/tumblr_files/tumblr_nknr3l4k7j1s2b58zo8_540.jpg&quot;/&gt;&lt;br/&gt;&lt;img src=&quot;/tumblr_files/tumblr_nknr3l4k7j1s2b58zo7_500.jpg&quot;/&gt;&lt;br/&gt;&lt;img src=&quot;/tumblr_files/tumblr_nknr3l4k7j1s2b58zo2_400.gif&quot;/&gt;&lt;br/&gt;&lt;img src=&quot;/tumblr_files/tumblr_nknr3l4k7j1s2b58zo1_400.gif&quot;/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://nerdsandgamersftw.tumblr.com/post/112639615404/a-working-bmo-super-nintendo-emulator-3d-print&quot; class=&quot;tumblr_blog&quot;&gt;nerdsandgamersftw&lt;/a&gt;:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://www.thingiverse.com/thing:697480&quot;&gt;&lt;b&gt;A Working BMO Super Nintendo Emulator&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;3D print designer Mike Barretta built this amazing BMO emulator using an assortment of 3D printed pieces and Super Nintendo buttons, as well as a mixture of electronic equipment. To see this emulator in action, check out the &lt;a href=&quot;https://www.youtube.com/watch?v=LZoUYxFBfE0&quot;&gt;play test&lt;/a&gt; of Donkey Kong Country.&lt;/p&gt;&lt;p&gt;You can learn to build your own BMO Emulator via Matt’s &lt;a href=&quot;http://www.thingiverse.com/thing:697480/#instructions&quot;&gt;Thingiverse&lt;/a&gt;. Instructions, needed parts, 3D print files and everything else you need to know can be found on his page. Finally you can have your very own BMO!&lt;/p&gt;&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>The beauty of NSError</title>
   <link href="https://nevyn.me/2015/03/02/the-beauty-of-nserror/"/>
   <updated>2015-03-02T08:19:53+01:00</updated>
   <id>https://nevyn.me/2015/03/02/the-beauty-of-nserror</id>
   <content type="html">Brent Simmons in &lt;a href=&quot;http://inessential.com/2015/03/01/init_question&quot;&gt;Init Question&lt;/a&gt;:
&lt;blockquote&gt;&lt;p&gt;Let’s say you have an object where initWithSomething could fail due to bad inputs or other error.&lt;/p&gt;

&lt;p&gt;Let’s also say that, if it fails, an error should probably be presented to the user.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Brent lists a number of different options. In &lt;a href=&quot;https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/ErrorHandling/ErrorHandling.html&quot;&gt;Programming with Objective-C&lt;/a&gt;, there is a golden rule to error handling in ObjC:&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;If it is a &lt;b&gt;programmer error&lt;/b&gt;, use &lt;b&gt;exceptions&lt;/b&gt;/assertions.&lt;/li&gt;
&lt;li&gt;If it is &lt;b&gt;any other kind of error&lt;/b&gt;, use &lt;b&gt;NSError&lt;/b&gt;.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;This is yet another one of those genius API design decisions that I just love with ObjC. It&amp;rsquo;s consistent, sane and available everywhere. It leaves very little room for bikeshedding, while still being very convenient to work with most circumstances.&lt;/p&gt;

&lt;p&gt;This also eliminates option 4, as it uses assertions for a user/environment error, which would leave your app unusable without any obvious way of fixing it if anything is even slightly wrong. Danger! Don&amp;rsquo;t do that!&lt;/p&gt;

&lt;p&gt;Of the remaining alternatives, I would definitely opt for #1: &lt;b&gt;a failable constructor with in-out NSError parameter&lt;/b&gt;. There&amp;rsquo;s tons of precedent all over Foundation/AppKit/UIKit for this pattern, e g:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;code&gt;-[NSData initWithContentsOfURL:options:error:]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-[NSString initWithContentsOfURL:encoding:error:]&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-[NSXMLDocument initWithXMLString:options:error:]&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Displaying errors&lt;/h3&gt;

&lt;p&gt;A very &amp;ldquo;convenient&amp;rdquo; option is to just display errors where they happen, and not propagate them. This breaks &lt;a href=&quot;http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller&quot;&gt;MVC&lt;/a&gt;, and means that your model will likely be too coupled to how the data is displayed, and makes it hard to test and reuse. Make sure to propagate errors up to your controller layer before they&amp;rsquo;re displayed; either through direct calls and in-out parameters, or delegate protocols. I often have protocols with almost only an &amp;ldquo;I failed with this error&amp;rdquo; method.&lt;/p&gt;

&lt;p&gt;So, if you&amp;rsquo;re displaying errors so far from their source, how do you handle them and gracefully get back to a working state, if that working state depends on user interaction? NSError actually solved this problem rather beautifully back on Mac OS, but the whole infrastructure for this wasn&amp;rsquo;t ported down to iOS: only some bits of pieces followed along. Use these!&lt;/p&gt;

&lt;p&gt;You have probably used &lt;code&gt;NSLocalizedDescriptionKey&lt;/code&gt; when you&amp;rsquo;ve constructed your own NSErrors, which is like a &amp;lsquo;subject line&amp;rsquo; for the error. There are many more keys you can use to customize errors! There is also &lt;code&gt;NSLocalizedFailureReasonErrorKey&lt;/code&gt;, which is like the 'message body&amp;rsquo; of the error. &lt;code&gt;NSLocalizedRecoverySuggestionErrorKey&lt;/code&gt; lets you tell your user how they could resolve this invonvenient situation. &lt;code&gt;NSUnderlyingErrorKey&lt;/code&gt; is very interesting for other programmers: telling them what caused this error in the first place, if that&amp;rsquo;s available.&lt;/p&gt;

&lt;p&gt;But it gets better! The key &lt;code&gt;NSLocalizedRecoveryOptionsErrorKey&lt;/code&gt; lets you provide an NSArray of named options for how to solve the error. These are like the button titles of a dialog. You couple it with &lt;code&gt;NSRecoveryAttempterErrorKey&lt;/code&gt;, which is any object that conforms to the informal protocol &lt;code&gt;NSErrorRecoveryAttempting&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Hey, this sounds like you could write some generic code that just displays NSError to a user? With title, subject, buttons and actions. Yeah! This is actually what us old Mac-heads had with &lt;code&gt;-[NSApplication presentError::::]&lt;/code&gt;. No such equivalent exists in UIKit, but it is easy to build on your own.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://gist.github.com/nevyn/a1fd3adfae8e89309fd6&quot;&gt;LookbackErrorPresenter&lt;/a&gt; is an error presenter for iOS, like the one on built into AppKit on Macs, which I just open sourced for your pleasure. You just give it a well-formed NSError with any or all of the above options, and it will be presented and logged appropriately. Here&amp;rsquo;s some sample usage, straight from the &lt;a href=&quot;https://lookback.io&quot;&gt;Lookback&lt;/a&gt; sources:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;NSURL *url = [_group remoteGroupURL] ?: [NSURL URLWithString:_group.endpointURLString];
LookbackRecoveryAttempter *recovery = [[LookbackRecoveryAttempter alloc] initWithNamesAndCallbacks:
	@&quot;Manage experience&quot;, ^BOOL{
		GFOpenURL(url);
		return YES;
	},
	@&quot;Dismiss&quot;, ^BOOL{ return NO; },
	nil, nil
];
[[LookbackErrorPresenter presenter] presentError:[NSError errorWithDomain:@&quot;io.lookback&quot; code:-18300 userInfo:@{
	NSLocalizedDescriptionKey: @&quot;Experience already published&quot;,
	NSLocalizedFailureReasonErrorKey: @&quot;You can delete or manage this experience via the Lookback website.&quot;,
	NSRecoveryAttempterErrorKey: recovery,
	NSLocalizedRecoveryOptionsErrorKey: recovery.recoveryOptions,
}] completion:nil];&lt;/code&gt;&lt;/pre&gt;



&lt;p&gt;My approach in controller level code is to create user-friendly NSErrors, populated with ALL the keys above and a recovery attempter, and just display it straight to the user and let them choose how to resolve the error. I can then also include the underlying error, to let more technical-savvy users understand the technical cause, and as a help to future programmers.&lt;/p&gt;

&lt;p&gt;Error handling is very important, and if you have the right toolbox, not particularly hard! Just be vigilant, never ignore an error parameter, and propagate errors to where it can be correctly handled.&lt;/p&gt;

&lt;h3&gt;Additional resources&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;RealMac on &lt;a href=&quot;http://realmacsoftware.com/blog/cocoa-error-handling-and-recovery&quot;&gt;Cocoa Error Handling and Recovery&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;My own &lt;a href=&quot;http://&quot;&gt;Three points on error handling&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>littlebigdetails a gif is used within a post to</title>
   <link href="https://nevyn.me/2014/10/31/littlebigdetails-a-gif-is-used-within-a-post-to/"/>
   <updated>2014-10-31T19:42:31+01:00</updated>
   <id>https://nevyn.me/2014/10/31/littlebigdetails-a-gif-is-used-within-a-post-to</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/tumblr_neb1qvZEGC1qz4vmko1_540.gif&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://littlebigdetails.com/post/101346842802/tumblr-a-gif-is-used-within-a-post-to&quot; class=&quot;tumblr_blog&quot;&gt;littlebigdetails&lt;/a&gt; — A gif is used within a post to demonstrate how tumblr uses a gif within a post to demonstrate the new changes to the dashboard.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Writing your own jailbreak tweak</title>
   <link href="https://nevyn.me/2014/02/04/writing-your-own-jailbreak-tweak/"/>
   <updated>2014-02-04T08:47:00+01:00</updated>
   <id>https://nevyn.me/2014/02/04/writing-your-own-jailbreak-tweak</id>
   <content type="html">&lt;p style=&quot;font-style:italic&quot;&gt;
  This article is my raw presentation script from &lt;a href=&quot;http://www.meetup.com/CocoaHeads-Stockholm/events/162287282/&quot; title=&quot;Meeting 45 - Advanced SpriteKit, Core Bluetooth, Jailbreak tweaks - 
  CocoaHeads Stockholm (Stockholm)&quot;&gt;CocoaHeads Stockholm 2014-02&lt;/a&gt;. It&amp;rsquo;s written as if I was talking to an audience, not as a blog article, so it might be a bit weird to read.
&lt;/p&gt;

&lt;iframe src=&quot;http://www.slideshare.net/slideshow/embed_code/30772802&quot; width=&quot;476&quot; height=&quot;400&quot; frameborder=&quot;0&quot; marginwidth=&quot;0&quot; marginheight=&quot;0&quot; scrolling=&quot;no&quot;&gt;&lt;/iframe&gt;

&lt;p&gt;Hi! I’m nevyn from Lookback. Whenever Marthin sends panicked emails looking for presenters for next Cocoaheads, I look back through the things I’ve encountered recently looking for something interesting. In other words, I am far from an expert on the upcoming subject, but I find it absolutely fascinating. And the topic is: Jailbreak development. I’m going to try to sneak in a product announcement in here somewhere, so don’t zone out!&lt;/p&gt;

&lt;p&gt;What does that even mean? Let’s break it down. Jailbreaking has two parts: There’s a jail, and there’s breaking it. The jail is all the security infrastructure of iOS: a virtual room in which your apps run, and very little bad can happen. This infrastructure includes sandboxing, code signing, NX, ASLR, and so on: a seriously impressive layer-cake of security. All of these pieces work together to make sure that only trusted code can be run on your device—only apps signed by Apple or by you as a developer for your own device—and even if that code is compromised, there is a very limited range of possible consequences; for example, even if you happen to have a buffer overrun vulnerability in your app, a hacker can’t use that bug to install malicious code (like a virus) on your phone.&lt;/p&gt;

&lt;p&gt;I could go into details of how all this works, but to allow us to move on, instead I deeply recommend Charlie Miller et al’s iOS Hacker’s Handbook. It’s an excellent guide to both basic security, how to write secure iOS applications, the security infrastructure of both FreeBSD, Mac OS X, and iOS, and how all of those have previously been broken.&lt;/p&gt;


&lt;p&gt;That gets us on to the “breaking” in “jailbreaking”. What does “breaking” mean in this context, anyway? Jailbreaking means finding operating system bugs that allow you to expose vulnerabilities by writing exploits to disable every single one of the defenses put in place. &lt;/p&gt;

&lt;p&gt;For example, the iOS 7 jailbreak “evasi0n” works like this:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;The WWDC 2012 app has code signing that allows it to run anywhere forever. However, it’s still just a normal app within a sandbox, so it can’t make changes to the operating system.&lt;/li&gt;
&lt;li&gt;A bug in the way the app installer handles symbolic links allows us to run iOS’s file server instead (used to make backups, normally).&lt;/li&gt;
&lt;li&gt;A bug in the dynamic linker allows a flag to completely disable the sandbox. However, we’re still running as the user, not as root, so we can only modify the user’s apps and documents, not the operating system.&lt;/li&gt;
&lt;li&gt;A bug in the way the file server handles symbolic links gives us raw access to the harddrive.&lt;/li&gt;
&lt;li&gt;And at this point, we can write whatever we want to the disk. The sandbox is completely disabled, allowing us to run any software we want.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;This should be scary. This means that on a jailbroken device, a mail attachment could contain a virus, and all the gatekeepers would be asleep: the virus could execute, and it could infect your phone and spread it to all your contacts. Just like on a normal computer.&lt;/p&gt;

&lt;p&gt;…&lt;/p&gt;

&lt;p&gt;and that’s sort of the point. You own your iPhone. It’s a computer, just like any other. You shouldn’t have to pay Apple *additional* money just to be able to install whatever software you want on it.&lt;/p&gt;

&lt;p&gt;And I really mean *whatever* software. On a Mac you can also whatever you want, but there never really sprung up a big community of modders. There was CandyBar, Audio Hijack and a few others.&lt;/p&gt;

&lt;p&gt;But on iOS, every jailbreak comes with Cydia, and a whole lot of infrastructure written by Saurik and other awesome hackers. Every piece of the system has a category of modifications on his store. Saurik likes calling “remixing software”, which I think is a great term.&lt;/p&gt;

&lt;p&gt;How would one get started with jailbreak development, with remixing software?&lt;/p&gt;


&lt;p&gt;Large parts of the jailbreak community is based on the idea that you shouldn’t need a Mac to do development, so they’re based on Makefiles and other traditional Unix development tools. Me, I prefer my GUIs. If you’re like me, you’ll appreciate iOS Open Dev, which is an Xcode plugin package with awesome templates to help you get started. One might think it’s just a bunch of unmaintained scripts (as is often the case with obscure dev communities), but I’ve found it to be very well put together.&lt;/p&gt;

&lt;p&gt;After installation, iosopendev might not work right off the bat. If it doesn’t, you might to tell it to use the latest iOS SDK:&lt;/p&gt;
&lt;p&gt;	iod-setup sdk -d /Applications/Xcode.app/Contents/Developer -sdk iphoneos&lt;/p&gt;

&lt;p&gt;Restarting Xcode and making a new project now gives a ton of new options. They’re all based on the idea that you want to put code into other people’s apps. Some interesting ones are:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Action Menu Plugin. Always wanted to be able to select text and have an option to make it sparkle? Well, why don’t you build it!&lt;/li&gt;
&lt;li&gt;Tweak. A tweak is a plugin that is loaded into apps that aren’t supposed to have plugins. You can make a tweak that loads into every single app, or just into Springboard, which is the app that launches apps and does all the other iOS-y stuff. This is the most interesting one, so I’ll get into more detail on it later.&lt;/li&gt;
&lt;li&gt;Activator Listener. A crazy infrastructure which lets you bind any action to any handler. For example, if you make, I dunno, a tweak that lets you record the screen of any app, you might want to add an Activator to it so that the end user can choose which action should start the recording. And it could be ANY action. This is just a small sample. When locking the phone. When triple-tapping the lock button. When inverse five-finger swiping the screen. When dragging in with two fingers from top-right of the screen. You get the point.&lt;/li&gt;
&lt;li&gt;Library. Hey look, you can actually make dynamic libraries on iOS! &lt;/li&gt;
&lt;li&gt;Tool. And command line tools! It’s as if this is some kind of UNIX operating system!&lt;/li&gt;
&lt;li&gt;You can make your own Notification Center widget, just like Weather and Stocks.&lt;/li&gt;
&lt;li&gt;Toggles. Before Control Center in iOS 7, jailbreakers enjoyed the same features (and many more) using SBSettings toggles. You can make your own.&lt;/li&gt;
&lt;li&gt;XPC Service! Now this is even starting to look like Mac OS X! How odd.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Ok, so before we jump into live coding, I’d like a volunteer app. If you have an app on the AppStore and want to be horrified, yell the app name out loud!&lt;/p&gt;

&lt;p&gt;While that’s downloading, let’s make a tweak. Primarily, a tweak is a uniform way of injecting code into apps using a library called Cydia Substrate. It will let you specify which apps you want to inject in, for example by checking for the existence of a class. This filter here will inject into any app that has the hypothetical class SpotifyViewController in it. You can also say “only inject into SpringBoard”, or “into any UIKit app”, or something else.&lt;/p&gt;

&lt;p&gt;Once inside the target app, what can you do?&lt;/p&gt;

&lt;p&gt;Well, a tweak is also method swizzling made into an art form. To make it really, really easy to swizzle stuff. two optional frameworks have emerged. &lt;/p&gt;

&lt;p&gt;Logos is the oldest one, and it is a bit crazy. It’s a custom preprocessor on top of Objective-C with the extension “.x”. You tell it which class you want to swizzle, implement your replacement, and then you can optionally call the original implementation with %orig. It has support for many other things, but I think I’ll leave it at that.&lt;/p&gt;

&lt;p&gt;The alternative is CaptainHook, which uses C++ template classes and macros to accomplish the same thing. It’s not less crazy. Here we are logging every call to [NSString writeToFile:], and then calling the original implementation.&lt;/p&gt;

&lt;p&gt;So let’s write a very simple tweak. It’ll create a class called “ListClasses” when the app starts, using +load. We’ll wait for the app to finish launching properly before we do anything. At that point, we’ll add a button to the window after a second, to let the UI settle. It’s going to present a custom view controller on top of the app.&lt;/p&gt;

&lt;p&gt;This’ll be a table view controller. We will list ALL classes available to the app, and get their names. Then we’ll just list those in a table view. Build and run, aaand… Let’s have a look inside the audience app.&lt;/p&gt;

&lt;p&gt;So, these are real class names, and I could instantiate any one of them if I wanted, and call any method I wanted on them.&lt;/p&gt;

&lt;p&gt;Class names aren’t quite enough to know what to swizzle though: we want method names, and preferrably, even headers. Luckilly, or unfortunately if you want to keep secrets, Objective-C is very verbose in what kind of information is available at runtime, since it’s such a dynamic language. There’s a tool called class-dump that will take an app or a library, and output headers, much like this. However, all app-store apps are encrypted and aren’t easily class-dumped. First, they must be cracked using a tool using “Clutch”. This is also the same way that apps are pirated, so please don’t do that :(&lt;/p&gt;

&lt;p&gt;Let’s do a classdump of the audience app. I will SSH into my phone, as if it was a regular UNIX computer o_O&lt;/p&gt;

&lt;p&gt;This is a good time to mention that development on device is going to be very painful if you don’t enable SSH. SSH lets you get a command line shell right into your phone. However, you should change the password immediately after installation, since all iPhones have the same default password: alpine. You’ll also want to add a ssh key to your phone, so that iosopendev can install tweaks onto your phone directly from Xcode. If you add your phone’s IP address to your .bash_profile file, you can press command-shift-I to install tweaks.&lt;/p&gt;

&lt;p&gt;You will probably also want the tool deviceconsole, which is like Xcode organizer’s console log, except as a terminal app which means it’s searchable, fast, and just generally awesome in every way that Xcode isn’t.&lt;/p&gt;

&lt;p&gt;There’s so much more to talk about. How to publish your creation, how to debug, how to write activators, and much more. However, my time is up so talk to me afterwards if you want to know more.&lt;/p&gt;

&lt;p&gt;I’d like to finish off with the tool I built that made me learn all this. You probably saw my previous presentation on Lookback, so now I’d like to show you Lookback Anywhere. Lookback Anywhere is very simple: I’ve taken the Lookback SDK, linked it into a tweak, and added two activator actions. That means Lookback is loaded into every app on your phone, and you can record them without having to install the SDK. The same concept could be applied to any developer tool: Reveal, PonyDebugger, Spark Inspector and others could be installed into any app very easily.&lt;/p&gt;

&lt;p&gt;So I’d like to show you here how I can record in this audience app… And voila, it’s uploaded to lookback.io.&lt;/p&gt;

&lt;p&gt;Lookback Anywhere is not ready for release, but you can install a beta on your phone by adding a custom source in Cydia.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>when I fix one bug</title>
   <link href="https://nevyn.me/2013/08/01/when-i-fix-one-bug/"/>
   <updated>2013-08-01T20:23:40+02:00</updated>
   <id>https://nevyn.me/2013/08/01/when-i-fix-one-bug</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://thecodinglove.com/post/56986032924/when-i-fix-one-bug&quot; class=&quot;tumblr_blog&quot;&gt;thecodinglove&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p class=&quot;c1&quot;&gt;&lt;img src=&quot;https://i.imgur.com/rncwaFl.gif&quot; alt=&quot;image&quot;/&gt;&lt;/p&gt;
&lt;p class=&quot;c1&quot;&gt;&lt;em&gt;/* by slai47 */&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>mastervone welcome program you have only two</title>
   <link href="https://nevyn.me/2013/08/01/mastervone-welcome-program-you-have-only-two/"/>
   <updated>2013-08-01T07:31:35+02:00</updated>
   <id>https://nevyn.me/2013/08/01/mastervone-welcome-program-you-have-only-two</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/tumblr_mqsi16fjOn1rhv0i7o1_r1_1280.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://blog.mastervone.com/post/56954083514/welcome-program-you-have-only-two-choices&quot; class=&quot;tumblr_blog&quot;&gt;mastervone&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;b&gt;&lt;a href=&quot;https://itunes.apple.com/se/app/gridlike/id680149470?l=en&amp;amp;mt=8&quot;&gt;Welcome, program!&lt;/a&gt; You have only two choices: Games, or immediate deresolution! Luckilly, you can bring one or two, or even three of your “friends&amp;quot; onto the Grid. Not so lucky: only one of you will survive. &lt;/b&gt;&lt;/p&gt;

&lt;p&gt;&lt;i&gt;&lt;a href=&quot;https://itunes.apple.com/se/app/gridlike/id680149470?l=en&amp;amp;mt=8&quot;&gt;Gridlike&lt;/a&gt; is now available for iPad on the Apple App Store. It’s a two-to-four player lightbike game that we’ve been working on on and off since before Tron: Legacy was released.&lt;/i&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;http://mastervone.com&quot;&gt;We&lt;/a&gt; released a game! :D We were basically done with this game after a week-long game hacking lan party three years ago, but weren&amp;rsquo;t quite happy with the result, and there was this one annoying collision bug we never got around to fixing. Every game making lan party since, we&amp;rsquo;ve said that we&amp;rsquo;ll patch it up and release it, but things like &lt;a href=&quot;http://www.foddy.net/CLOP.html&quot;&gt;CLOP&lt;/a&gt; (don&amp;rsquo;t click.), &lt;a href=&quot;http://candies.aniwey.net&quot;&gt;Candy Box&lt;/a&gt; (don&amp;rsquo;t click!!), &lt;a href=&quot;http://blog.mastervone.com/tagged/deathtroid&quot;&gt;Deathtroid&lt;/a&gt; (do click!) and just &lt;a href=&quot;http://www.reddit.com&quot;&gt;general procrastination&lt;/a&gt; got in the way. (We&amp;rsquo;re horrible procrastinators).&lt;/p&gt;

&lt;p&gt;Last week, we had another game making LAN, (&lt;a href=&quot;https://twitter.com/nevynsdevdiary&quot;&gt;chronicled in my dev diary&lt;/a&gt;), and managed to both finish up &lt;a href=&quot;https://itunes.apple.com/se/app/gridlike/id680149470?l=en&amp;amp;mt=8&quot;&gt;Gridlike&lt;/a&gt; and start a new game, &lt;a href=&quot;https://github.com/nevyn/Tanks3&quot;&gt;Tanks!&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We&amp;rsquo;ve set the price to free for the first week, &lt;a href=&quot;https://itunes.apple.com/se/app/gridlike/id680149470?l=en&amp;amp;mt=8&quot;&gt;so go check it out&lt;/a&gt;! &lt;a href=&quot;http://www.reddit.com/r/mastervone/&quot;&gt;Let us know&lt;/a&gt; if anything&amp;rsquo;s weird, buggy or boring.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Continuously playing music in the background on iOS</title>
   <link href="https://nevyn.me/2013/03/28/continuously-playing-music-in-the-background-on/"/>
   <updated>2013-03-28T01:08:00+01:00</updated>
   <id>https://nevyn.me/2013/03/28/continuously-playing-music-in-the-background-on</id>
   <content type="html">&lt;blockquote&gt;&lt;u&gt;tl;dr&lt;/u&gt;: Have an active background task and audio session running continously whenever the user is &lt;em&gt;semantically&lt;/em&gt; playing music, so code can execute while empty buffers are being refilled.&lt;/blockquote&gt;

&lt;p&gt;For the longest time since multitasking was introduced in iOS 4, Spotify occasionally had problems with music playback stopping against the user&amp;rsquo;s wishes. See, iOS applications can only execute in the background when at least &lt;a href=&quot;http://developer.apple.com/library/ios/documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW24&quot;&gt;one of six conditions&lt;/a&gt; are true:
&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;App has background mode &amp;ldquo;audio&amp;rdquo; in Info.plist and is playing audio, with a suitable audio category active&lt;/li&gt;
    &lt;li&gt;Equivalent, but for getting location data&lt;/li&gt;
    &lt;li&gt;Equivalent, but for talking to external accessories&lt;/li&gt;
    &lt;li&gt;App is performing magic VoIP voodoo&lt;/li&gt;
    &lt;li&gt;App is a Newsstand app and is downloading content&lt;/li&gt;
    &lt;li&gt;App explicitly started a ten minute limited &amp;ldquo;background task&amp;rdquo;&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;If you&amp;rsquo;re a streaming music service, music to be played in the background won&amp;rsquo;t always be immediately available. Say your music buffer runs out, your device is on EDGE, and it takes a few seconds to get the music data: silence. Or even if you&amp;rsquo;re not streaming music, perhaps you need to tear down and set up your audio subsystem in between tracks, e g because they&amp;rsquo;re different kinds of tracks. What should a well-behaved iOS app do in this situation?
&lt;/p&gt;
&lt;p&gt;When I realized what the problem is, my first approach was to detect situations when music would not be playing, try to pre-empt them, and start a background task just before music stops playing and then end it when music is back again. If this sounds fragile and stupid to you, you&amp;rsquo;re absolutely right. I&amp;rsquo;ve heard other developers come to the same solution, but don&amp;rsquo;t do it: you&amp;rsquo;ll miss edge cases, it&amp;rsquo;ll be buggy, and it&amp;rsquo;s so overly complex.
&lt;/p&gt;
&lt;p&gt;The epiphany came when I realized what the audio background mode actually means for background tasks: background tasks become no-ops, with infinite lease time, as long as audio is playing. Only when there is no audio playing does the timer start counting, from ten minutes. Start playing again and the lease is back at infinite time.
&lt;/p&gt;
&lt;p&gt;The solution is then obvious: whether your app is playing audio is uninteresting. The only interesting information is &lt;em&gt;&lt;b&gt;whether the user currently wants music to play&lt;/b&gt;&lt;/em&gt;. If she does, start an audio session and a background task, and don&amp;rsquo;t stop them until the user wants music to stop. In between, it&amp;rsquo;s up to other subsystems to make sure that audio is playing. With the continous background task, we allow these subsystems to continue to work, even if they can&amp;rsquo;t play music this very moment. As long as they don&amp;rsquo;t take playback pauses that are longer than ten minutes, we&amp;rsquo;re all good.
&lt;/p&gt;
&lt;p&gt;This is a very simple approach, and should work no matter how your underlying audio playback code works. Below, you can find some sample code implementing my approach.
&lt;/p&gt;

&lt;p&gt;(If you&amp;rsquo;re thinking you haven&amp;rsquo;t seen this problem in Spotify in a long while, you&amp;rsquo;re right: I wrote this code two years ago and have been thinking I should blog it since then. My apologies for not doing so earlier.)&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/nevyn/5255286.js&quot;&gt;&lt;/script&gt;
</content>
 </entry>
 
 <entry>
   <title>Thinking alike: await/async in Python 3</title>
   <link href="https://nevyn.me/2013/03/19/thinking-alike-awaitasync-in-python-3/"/>
   <updated>2013-03-19T07:30:36+01:00</updated>
   <id>https://nevyn.me/2013/03/19/thinking-alike-awaitasync-in-python-3</id>
   <content type="html">&lt;a href=&quot;https://www.dropbox.com/s/xknbe58zcvjhzhv/PyCon2013.pptx&quot;&gt;Thinking alike: await/async in Python 3&lt;/a&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;https://www.dropbox.com/s/xknbe58zcvjhzhv/PyCon2013.pptx&quot;&gt;Guido van Rossum&amp;rsquo;s 2013 PyCon keynote&lt;/a&gt; presents Python 3.4&amp;rsquo;s major new feature: coroutines as a language feature for working with asynchronous operations. I wonder where I&amp;rsquo;ve &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx&quot;&gt;seen&lt;/a&gt; &lt;a href=&quot;https://github.com/nevyn/SPAsync#spawait&quot;&gt;that&lt;/a&gt; before? :)&lt;/p&gt;

&lt;p&gt;Async/await is such an amazingly simple way to express asynchrony, and I&amp;rsquo;m very happy to see more languages adopt the thinking. Also, python is *finally finally finally* standardizing on a runloop API. That has been a crazy big gap in the standard libraries and frankly I don&amp;rsquo;t understand how people have been able to write Python apps without it&amp;hellip;&lt;/p&gt;

&lt;p&gt;Example python code with the new API below. &amp;ldquo;yield from&amp;rdquo; is identical to &amp;ldquo;await&amp;rdquo; in C#.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;def getresp():
    s = socket()
    yield from loop.sock_connect(s, host, port)
    yield from loop.sock_sendall(s, b'xyzzy')
    data = yield from loop.sock_recv(s, 100)
&lt;/pre&gt;&lt;/code&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2013/03/08/my-presentation-of-methods-of-concurrency-at/"/>
   <updated>2013-03-08T17:35:39+01:00</updated>
   <id>https://nevyn.me/2013/03/08/my-presentation-of-methods-of-concurrency-at</id>
   <content type="html">&lt;p&gt;My presentation of &lt;a href=&quot;https://nevyn.me/2013/01/29/methods-of-concurrency/&quot;&gt;Methods of Concurrency&lt;/a&gt; at &lt;a href=&quot;http://www.meetup.com/CocoaHeads-Stockholm/events/100052752/&quot;&gt;CocoaHeads Stockholm 2013-02&lt;/a&gt;. Don&amp;rsquo;t miss &lt;a href=&quot;http://www.youtube.com/playlist?list=PLS4Ugv1bs-u_iZD8d6t6IinI2te1yxyav&quot;&gt;the rest of the talks from that evening&lt;/a&gt;!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Methods of concurrency — GCD, agents, tasks and invocations</title>
   <link href="https://nevyn.me/2013/01/30/methods-of-concurrency/"/>
   <updated>2013-01-30T06:16:00+01:00</updated>
   <id>https://nevyn.me/2013/01/30/methods-of-concurrency</id>
   <content type="html">&lt;p&gt;My programmer world was turned up-side down when I first saw &lt;a href=&quot;http://channel9.msdn.com/Events/BUILD/BUILD2011/TOOL-810T&quot;&gt;the new &amp;rsquo;&lt;code&gt;await&lt;/code&gt;&amp;rsquo; keyword in C#&lt;/a&gt; about a year ago, and I&amp;rsquo;ve wanted to share all the thoughts that arose from that since, but never got around to it.&lt;/p&gt;

&lt;p&gt;In the past few evenings, I&amp;rsquo;ve written some tools that I can&amp;rsquo;t not share with you, and thus we begin. You can &lt;a href=&quot;#replicating_task&quot;&gt;skip the background chapters&lt;/a&gt; if you&amp;rsquo;ve already seen the video linked above. &lt;a href=&quot;https://github.com/nevyn/SPAsync&quot;&gt;The code is available on Github&lt;/a&gt;.&lt;/p&gt;

&lt;h2 id=&quot;abstract&quot;&gt;tl;dr (abstract)&lt;/h2&gt;

&lt;p&gt;tl;dr: Building an application using a GCD queue for every class, simple &lt;code&gt;NSInvocation&lt;/code&gt;-based dispatch between threads, and Tasks (stolen from .Net) to get results of asynchronous operations and chaining them together.&lt;/p&gt;

&lt;p&gt;This article starts with five chapters on &lt;b&gt;background&lt;/b&gt;: in &lt;a href=&quot;#what_is_asynchrony&quot;&gt;what asynchrony is&lt;/a&gt;, how &lt;a href=&quot;#asynchrony_get_messy&quot;&gt;such code gets messy&lt;/a&gt;, my favorite solution of &lt;a href=&quot;#there_is_no_problem&quot;&gt;pretending there is no problem&lt;/a&gt;, how &lt;a href=&quot;#tasks&quot;&gt;C# generalizes asynchronous operations as &amp;lsquo;tasks&amp;rsquo;&lt;/a&gt; to gain enormous strength in generalizing asynchronous problems, and the new in &lt;a href=&quot;#async_await&quot;&gt;C# 5 keywords 'async&amp;rsquo; and 'await&amp;rsquo;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Then comes five chapters on &lt;b&gt;my own creations&lt;/b&gt;: I &lt;a href=&quot;#replicating_task&quot;&gt;replicate C#&amp;rsquo;s Task in Objective-C&lt;/a&gt; as the basic building block for everything else, and &lt;a href=&quot;#delving_into_task&quot;&gt;delve into its implementation&lt;/a&gt;. Then I &lt;a href=&quot;#agents&quot;&gt;move all my classes onto their own GCD work queues and call them 'agents&amp;rsquo;&lt;/a&gt;. I &lt;a href=&quot;#invocations&quot;&gt;go through invocation grabbers again&lt;/a&gt;, because I use them to &lt;a href=&quot;#agentasync&quot;&gt;simplifly cross-thread communication with &lt;code&gt;sp_agentAsync&lt;/code&gt;&lt;/a&gt; together with SPTask. Finally I delve into the &lt;a href=&quot;#async_impl&quot;&gt;implementation of sp_agentAsync&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;#summary&quot;&gt;In the summary&lt;/a&gt;, this code is disected, and hopefully by then, you will understand every part of it:&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;- (SPTask*)funkifyImageAndPublishResult:(NSURL*)link
{
	return [[[[[_backendService sp_agentAsync] requestURL:url] chain] then:^ id (NSData *response) {
		UIImage *image = [UIImage imageFromData:response];
		return [image funkyTransform];
	} on:dispatch_get_global_queue(0,0)] chain:^ SPTask*(UIImage *image) {
		return [_imageHostingService postImageAndReturnImageURL:image];
	} on:_imageHostingService.workQueue];
}&lt;/pre&gt;&lt;/code&gt;

&lt;h2 id=&quot;what_is_asynchrony&quot;&gt;What is asynchrony, anyway?&lt;/h2&gt;

&lt;p&gt;Just to make things clear, let&amp;rsquo;s sort asynchrony into three categories:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;Background computation&lt;/b&gt;. Anything that is too time consuming to do inline in whatever other code needs it. Building an image, doing a large database query, processing audio, expensive cryptography…&lt;/li&gt;
&lt;li&gt;&lt;b&gt;I/O&lt;/b&gt;. Accessing resources that are slower than RAM, such as disk or network.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Events&lt;/b&gt;. Things happen from outside your app that you can&amp;rsquo;t predict, such as touch events, keyboard input, wifi becomes available, or even value changes on objects you are interested in (i e KVO).&lt;/li&gt;
&lt;/ul&gt;&lt;h2 id=&quot;asynchrony_get_messy&quot;&gt;Asynchronous code gets messy&lt;/h2&gt;

&lt;p&gt;If at all possible, many programmers choose to tackle asynchrony by opting out of it entirely. In some cases, this way of doing networking is acceptable:&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: js;&quot;&gt;while(true) {
	var imageLength = toInt(read(socket, 2));
	var image = read(socket, imageLength);
	var mirroredImage = mirrorImage(image)
	write(socket, length(mirroredImage))
	write(socket, mirroredImage)
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;If that code is part of UI, or needs to do any other thing than the above, the entire paradigm becomes unacceptable. A network read might take minutes, and image processing isn&amp;rsquo;t cheap, either.&lt;/p&gt;

&lt;p&gt;Over the years, many patterns have emerged to deal with asynchrony. Some of them are, in rough order of evolution:&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Callback_(computer_programming)&quot;&gt;Function callbacks&lt;/a&gt; and &lt;a href=&quot;http://developer.apple.com/library/ios/#documentation/General/Conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html&quot;&gt;delegates&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://developer.apple.com/library/ios/#documentation/cocoa/Conceptual/Blocks/Articles/00_Introduction.html&quot;&gt;Closure callbacks&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Futures_and_promises&quot;&gt;Promises and futures&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Coroutine&quot;&gt;Coroutines&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;Synchronous-looking code (&lt;a href=&quot;http://www.gevent.org&quot;&gt;gevent&lt;/a&gt;, &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx&quot;&gt;async+await&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;#2 is quite popular in Objective-C, as we have &lt;a href=&quot;http://www.mikeash.com/pyblog/friday-qa-2009-08-28-intro-to-grand-central-dispatch-part-i-basics-and-dispatch-queues.html&quot;&gt;GCD&lt;/a&gt; (mikeash plug!) to help us out, and GCD is closure based. However, if you&amp;rsquo;re not careful, your code will end up looking like this:&lt;/p&gt;

&lt;code id=&quot;yuck&quot;&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;- (void)handleOneRequest;
{
	// async I/O
	[socket readUInt32ToCompletion:^(uint32_t length) {
		[socket readToLength:length completion:^(NSData *data) {
			dispatch_async(dispatch_get_global_queue(0,0) {
				// async processing
				UIImage *image = [UIImage imageFromData:data];
				UIImage *mirrored = [image mirror];
				NSData *pngBytes = [image pngData];
				[socket writeUInt32:pngBytes.length completion:^ {
					[socket writeData:pngBytes completion:^{
						[self handleOneRequest];
					}];
				}];
			});
		}];
	}];
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;Yuck. And it gets way worse when you add error handling. The same level of asynchrony using either callbacks or delegates could get almost as messy. So, instead&amp;hellip;&lt;/p&gt;

&lt;h2 id=&quot;there_is_no_problem&quot;&gt;Let&amp;rsquo;s pretend that there is no problem&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://www.gevent.org&quot;&gt;Gevent&lt;/a&gt; is a popular Python library among Spotify backend developers, and one that fascinates me. Gevent enforces cooperative multithreading on process-level threads (&amp;ldquo;green threads&amp;rdquo;), suspending execution when anyone does a blocking call. You can think of it as methods becoming coroutines, yielding whenever it would block. By patching system libraries, the following code, which looks synchronous, actually becomes asynchronous.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: python;&quot;&gt;def print_head(url):
    print ('Starting %s' % url)
    data = urllib2.urlopen(url).read()
    print ('%s: %s bytes: %r' % (url, len(data), data[:50]))

jobs = [gevent.spawn(print_head, url) for url in urls]&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/SiteSupport/gevent/blob/master/examples/concurrent_download.py&quot;&gt;The above code code&lt;/a&gt; will fetch all the headers at the URLs in 'urls&amp;rsquo; almost simultaneously. The implementation of 'print_head&amp;rsquo; pays no attention to asynchrony at all, and looks completely asynchronous. The problem has become invisible. That this is possible using just a library is a testament to the flexibility of Python.&lt;/p&gt;

&lt;p&gt;C# 5 has new features to try to reach the same level of invisibility. They have been designed to be a little more explicit, and are added as the language features 'async&amp;rsquo; and 'await&amp;rsquo; rather than as a library. But before we can talk about them, we need to introduce the older concept of &lt;em&gt;Tasks&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id=&quot;tasks&quot;&gt;Tasks&lt;/h2&gt;

&lt;p&gt;First, we realize that we can probably generalize the concept of &amp;ldquo;do something and notify me when it&amp;rsquo;s done&amp;rdquo;. One such generalization is the &lt;a href=&quot;http://en.wikipedia.org/wiki/Futures_and_promises&quot;&gt;future/promise&lt;/a&gt; (&lt;a href=&quot;http://www.mikeash.com/pyblog/friday-qa-2010-02-26-futures.html&quot;&gt;obligatory mikeash plug&lt;/a&gt;), but it seems that there are many situations in which they will block, which is unacceptable for UI code.&lt;/p&gt;

&lt;p&gt;In .Net, every asynchronous action is instead wrapped in a &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx&quot;&gt;System.Threading.Tasks.Task&lt;/a&gt;. At its core, Task is almost a value class, just &lt;b&gt;holding callbacks to be called when an operation is done&lt;/b&gt;, seemingly so trivial that it&amp;rsquo;s not even worth an abstraction. But once you have that abstraction, you can throw so many things at it. To enumerate a few in .Net:&lt;/p&gt;
  &lt;li&gt;Generic cancellation of operations&lt;/li&gt;
  &lt;li&gt;Shorthand for performing things in the background&lt;/li&gt;
  &lt;li&gt;Getting a callback when the operation completes&lt;/li&gt;
  &lt;li&gt;Waiting synchronously for the operation to complete&lt;/li&gt;
  &lt;li&gt;Chaining tasks together, with the later ones depending on the result of the earlier ones&lt;/li&gt;
  &lt;li&gt;Waiting for several tasks together (e g for an operation that depends on many separate non-interdependent things)&lt;/li&gt;
  &lt;li&gt;Delaying&lt;/li&gt;


&lt;h2 id=&quot;async_await&quot;&gt;C#: Async and await&lt;/h2&gt;

&lt;p&gt;Back to fancy language features. In C#, the &amp;rsquo;&lt;code&gt;async&lt;/code&gt;&amp;rsquo; keyword will transform a method into a special coroutine. The &amp;rsquo;&lt;code&gt;await&lt;/code&gt;&amp;rsquo; keyword is basically a &lt;a href=&quot;http://en.wikipedia.org/wiki/Coroutine&quot;&gt;coroutine &amp;rsquo;&lt;code&gt;yield&lt;/code&gt;&amp;rsquo;&lt;/a&gt;. Let&amp;rsquo;s take this (slightly fictitious) synchronous code:&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: csharp;&quot;&gt;private byte[] GetURLContents(string url) {
	var content = new MemoryStream();

	HttpWebRequest request = WebRequest.Create(url);
	WebResponse response = request.GetResponse(); // &amp;lt;-- network call, blocks!

	Stream responseStream = response.GetResponseStream();
	responseStream.copyTo(content); // &amp;lt;-- network call, blocks!

	return content.ToArray();
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;… and turn it asynchronous:&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;private &lt;b&gt;async&lt;/b&gt; Task&amp;lt;byte[]&amp;gt; GetURLContents(string url) {
	var content = new MemoryStream();
	HttpWebRequest request = WebRequest.Create(url);

	WebResponse response = &lt;b&gt;await&lt;/b&gt; request.GetResponse&lt;b&gt;Async&lt;/b&gt;(); // &amp;lt;-- yields and returns from this method!
	Stream responseStream = response.GetResponseStream();

	&lt;b&gt;await&lt;/b&gt; responseStream.copyTo&lt;b&gt;Async&lt;/b&gt;(content); // &amp;lt;-- yields and returns from this method!
	return content.ToArray();
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;Note the slight changes, highlighted in bold. Making a method &amp;rsquo;&lt;code&gt;async&lt;/code&gt;&amp;rsquo; means that instead of returning the value, it returns a task representing the future delivery of that value. Since the caller now has a task, we have all eternity to perform the requested action, and will never block the caller.&lt;/p&gt;

&lt;p&gt;We can pretend that the method has been cut into three pieces: the part before the first await keyword, the part between the first and second await keyword, and the part after the second await keyword. We have a chain of three Tasks. Since I don&amp;rsquo;t really know C#, the language I will use below does not exist:&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: csharp;&quot;&gt;private Task&amp;lt;byte[]&amp;gt; GetURLContentsAsync(string url)
{
	var content = new MemoryStream();
	HttpWebRequest request = WebRequest.Create(url);
	
	Task&amp;lt;WebResponse&amp;gt; responseTask = request.GetResponseAsync();
	Task task2 = responseTask.startAndCallback(^(WebResponse response) {
		Stream responseStream = response.GetResponseStream();
		
		Task copyTask = responseStream.CopyToAsync(content);
		Task&amp;lt;byte[]&amp;gt; bytesTask = copyTask.startAndCallback(^ {
			return content.ToArray();
		});
		return bytesTask;
	};
	return task2;
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;This method contains three explicit tasks rather than implicit, and they are chained together, one starting when the previous one completes; and the method returns the first task in the chain, that sets it all off.&lt;/p&gt;


&lt;h2 id=&quot;replicating_task&quot;&gt;Let&amp;rsquo;s face it, Objective-C is no C#: replicating the Task class in ObjC&lt;/h2&gt;

&lt;p&gt;It seems that Apple felt they were done once GCD was out the door. Indeed, GCD is an amazing library, but it only helps us with where to execute our code, not with higher level questions like &amp;ldquo;how do I compose these operations&amp;rdquo; or even &amp;ldquo;how do I know when the work is done&amp;rdquo;?, nor does it try to. Microsoft has upped the game, and I hope Apple follows (and surpasses, of course).&lt;/p&gt;

&lt;p&gt;Until then, we make do with the tools we have. Before C# 5, .Net programmers had to make do without language support for asynchrony. The &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.threading.tasks.task.aspx&quot;&gt;Task&lt;/a&gt; class achieves this with the &amp;ldquo;&lt;code&gt;continueWith&lt;/code&gt;&amp;rdquo; method. This is a perfect recipe for something to replicate in our language of choice, and thus I built &lt;b&gt;&lt;code&gt;SPTask&lt;/code&gt;&lt;/b&gt; in the same vein. Let&amp;rsquo;s try out its header:&lt;/p&gt;


&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;typedef void(^SPTaskCallback)(id value);
typedef void(^SPTaskErrback)(NSError *error);
typedef id(^SPTaskThenCallback)(id value);
typedef SPTask*(^SPTaskChainCallback)(id value);

/** @class SPTask
    @abstract Any asynchronous operation that someone might want to know the result of.
 */
@interface SPTask : NSObject

/** @method addCallback:on:
    Add a callback to be called async when this task finishes, including the queue to
    call it on. If the task has already finished, the callback will be called immediately
    (but still asynchronously)
    @return self, in case you want to add more call/errbacks on the same task */
- (instancetype)addCallback:(SPTaskCallback)callback on:(dispatch_queue_t)queue;

/** @method addErrback:on:
    Like callback, but for when the task fails 
    @return self, in case you want to add more call/errbacks on the same task */
- (instancetype)addErrback:(SPTaskErrback)errback on:(dispatch_queue_t)queue;

/** @method then:on:
    Add a callback, and return a task that represents the return value of that
    callback. Useful for doing background work with the result of some other task.
    This task will fail if the parent task fails, chaining them together.
    @return A new task to be executed when 'self' completes, representing
            the work in 'worker'
 */
- (instancetype)then:(SPTaskThenCallback)worker on:(dispatch_queue_t)queue;

/** @method chain:on:
    Add a callback that will be used to provide further work to be done. The
    returned SPTask represents this work-to-be-provided.
    @return A new task to be executed when 'self' completes, representing
            the work provided by 'worker'
  */
- (instancetype)chain:(SPTaskChainCallback)chainer on:(dispatch_queue_t)queue;

...
@end

/** @class SPTaskCompletionSource
    Task factory for a single task that the caller knows how to complete/fail.
  */
@interface SPTaskCompletionSource : NSObject
/** The task that this source can mark as completed. */
- (SPTask*)task;

/** Signal successful completion of the task to all callbacks */
- (void)completeWithValue:(id)value;
/** Signal failed completion of the task to all errbacks */
- (void)failWithError:(NSError*)error;
@end
&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;If the only method we had on &lt;code&gt;SPTask&lt;/code&gt; was &lt;code&gt;addCallback:&lt;/code&gt;, we would still be in the &amp;rsquo;&lt;a href=&quot;#yuck&quot;&gt;yuck&lt;/a&gt;&amp;rsquo; situation from above. &amp;rsquo;&lt;code&gt;then:&lt;/code&gt;&amp;rsquo; and &amp;rsquo;&lt;code&gt;chain:&lt;/code&gt;&amp;rsquo; to the rescue! They lets us write code that looked just like the await code in C#, except it&amp;rsquo;s indented one level:&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;- (SPTask*)getURLContents(NSURL *URL) {
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];
    
    return [[request sp_getResponse] chain:^ SPTask *(NSURLResponse *response) ^{
        return [response sp_readDataUntilEOF];
    }];
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;The signature of the hypothetical &lt;code&gt;sp_getResponse&lt;/code&gt; would be &lt;code&gt;-(SPTask/*&amp;lt;NSURLResponse&amp;gt;*/)sp_getResponse;&lt;/code&gt; (yes, I&amp;rsquo;m still pretending that &lt;a href=&quot;http://overooped.com/post/22516989979/tctypesafety&quot;&gt;Objective-C has generics&lt;/a&gt;). It&amp;rsquo;s a method that immediately returns an &lt;code&gt;SPTask&lt;/code&gt;, that when completes will yield an &lt;code&gt;NSURLResponse&lt;/code&gt; to its callbacks. We use this task to chain it together with a new operation. When we get the response (that represents just the headers, not the whole data response), we know that we will immediately want to start reading the entire HTTP payload into an &lt;code&gt;NSData&lt;/code&gt; object. The signature of the hypothetical &lt;code&gt;sp_readDataUntilEOF&lt;/code&gt; would be &lt;code&gt;-(SPTask/*&amp;lt;NSData&amp;gt;*/)sp_readDataUntilEOF;&lt;/code&gt;. Returning the &amp;rsquo;&lt;code&gt;readData…&lt;/code&gt;&amp;rsquo; Task from the &amp;rsquo;&lt;code&gt;chain:&lt;/code&gt;&amp;rsquo; block creates a new &lt;code&gt;SPTask&lt;/code&gt; that represents the whole chain of getResponse &amp;gt; response done &amp;gt; request data &amp;gt; data has arrived. The caller of &lt;code&gt;getURLContents&lt;/code&gt; can now add a callback to the &lt;code&gt;SPTask&lt;/code&gt; she receives, and get the full data contents of the URL.&lt;/p&gt;

&lt;p&gt;When comparing this code to the C# example, each &amp;rsquo;&lt;code&gt;return&lt;/code&gt;&amp;rsquo; is equivalent to a C# &amp;rsquo;&lt;code&gt;await&lt;/code&gt;&amp;rsquo;, because we have chopped the method up into smaller blocks, manually creating a coroutine (a method that can be resumed from where it last left off).&lt;/p&gt;

&lt;p&gt;Let&amp;rsquo;s look at an involved example.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;- (SPTask*)handleOneRequest
{
    __block NSData *pngBytes;
    return [[[[socket readUInt32] chain:^(NSNumber *length) {
        return [socket readToLength:[length intValue]];
    }] chain:^(NSData *imageData) {
        UIImage *image = [UIImage imageFromData:data];
        UIImage *mirrored = [image mirror];
        pngBytes = [image pngData];
        return [socket writeUInt32:pngBytes.length];
    } on:dispatch_get_global_queue(0,0)] addCallback:^(id _) {
        [socket writeData:pngBytes];
    }];
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;This example has the exact same level of asynchrony as &amp;rsquo;&lt;a href=&quot;#yuck&quot;&gt;yuck&lt;/a&gt;&amp;rsquo;, but because we can chain instead of nest, the method is much more readable. Let&amp;rsquo;s look at the calling side.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;[[[self handleOneRequest] addCallback:^(id _) {
    [self doMoreStuff];
}] addErrback:^(NSError *err) {
    NSLog(@&quot;Error handling the request! %@&quot;, err);
}];&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;Since exceptions aren&amp;rsquo;t used the way they are in C#, I had to steal 'errbacks&amp;rsquo; from the python framework Twisted. They work like the normal 'callback&amp;rsquo;, except it&amp;rsquo;s called when an error happens. Chaining together tasks will also chain together errors, so in the case of &lt;code&gt;handleOneRequest&lt;/code&gt;, errors will be propagated all the way up to the caller.&lt;/p&gt;




&lt;h2 id=&quot;delving_into_task&quot;&gt;Delving into SPTask&lt;/h2&gt;

&lt;p&gt;SPTask is such a simple class that we might as well take a closer look at it.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;@interface SPTask ()
{
    NSMutableArray *_callbacks;
    NSMutableArray *_errbacks;
    BOOL _isCompleted;
    id _completedValue;
    NSError *_completedError;
}

@end

@implementation SPTask
- (id)init
{
    if(!(self = [super init]))
        return nil;
    _callbacks = [NSMutableArray new];
    _errbacks = [NSMutableArray new];
    return self;
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;We track all callbacks, errbacks, and whether this task has finished.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot; id=&quot;addCallback&quot;&gt;- (instancetype)addCallback:(SPTaskCallback)callback on:(dispatch_queue_t)queue
{
    @synchronized(_callbacks) {
        if(_isCompleted) {
            if(!_completedValue) {
                dispatch_async(queue, ^{
                    callback(_completedValue);
                });
            }
        } else {
            [_callbacks addObject:[[SPCallbackHolder alloc] initWithCallback:callback onQueue:queue]];
        }
    }
    return self;
}

- (instancetype)addErrback:(SPTaskErrback)errback on:(dispatch_queue_t)queue
{
    @synchronized(_errbacks) {
        if(_isCompleted) {
            if(_completedError) {
                dispatch_async(queue, ^{
                    errback(_completedError);
                });
            }
        } else {
            [_errbacks addObject:[[SPCallbackHolder alloc] initWithCallback:errback onQueue:queue]];
        }
    }
    return self;
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;If the task has already finished, we call the callback immediately with the value we have stored. Otherwise, we store it away for later. We also return self, so that we can chain more calls onto it, such as an errback, of if the caller is returning it to another piece of code that also want to know about this task&amp;rsquo;s completion.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;- (instancetype)then:(SPTaskThenCallback)worker on:(dispatch_queue_t)queue
{
    SPTaskCompletionSource *source = [SPTaskCompletionSource new];
    SPTask *then = [source task];&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;&amp;rsquo;&lt;code&gt;then::&lt;/code&gt;&amp;rsquo; is the method you would call instead of &amp;ldquo;&lt;code&gt;addCallback&lt;/code&gt;&amp;rdquo; when you want to add some background work to a chain of tasks. We start off by creating the new task, representing this background work. To show off how to use a completion source (the public API), I create the task through a source rather than directly, although the source just forwards to the private task API.&lt;/p&gt;
    
&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;    [self addCallback:^(id value) {&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;We can&amp;rsquo;t do that work until we have the result of the current task, so we wait for it with an &lt;code&gt;addCallback&lt;/code&gt;.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;        id result = worker(value);
        [source completeWithValue:result];
    } on:queue];&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;Then we start doing the work. We just do it synchronously inline, since we have already been asynchronously dispatched to the requested queue. When we have the result, we complete our new 'then&amp;rsquo; task with that value. All the callbacks will now be called for it.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;    [self addErrback:^(NSError *error) {
        [source failWithError:error];
    } on:queue];&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;We also add an errback on &lt;code&gt;self&lt;/code&gt;, so that our &amp;rsquo;&lt;code&gt;then&lt;/code&gt;&amp;rsquo; task will fail if the original task fails.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;    return then;
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;We&amp;rsquo;re done! Returning the task to the caller, who can now wait for the background task. Onto the next method.&lt;/p&gt;


&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;- (instancetype)chain:(SPTaskChainCallback)chainer on:(dispatch_queue_t)queue
{
    SPTaskCompletionSource *chainSource = [SPTaskCompletionSource new];
    SPTask *chain = [chainSource task];&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;&amp;rsquo;&lt;code&gt;chain::&lt;/code&gt;&amp;rsquo; is the method you would call instead of &amp;rsquo;&lt;code&gt;then::&lt;/code&gt;&amp;rsquo; when what you want to do is to ask someone else to do work with the data from the callback, rather than doing work yourself. The &lt;code&gt;ChainCallback&lt;/code&gt; returns a task, which we will be waiting for using the &amp;rsquo;&lt;code&gt;chain&lt;/code&gt;&amp;rsquo; task we create here.&lt;/p&gt;
    
&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;    [self addCallback:^(id value) {
        SPTask *workToBeProvided = chainer(value);&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;When &amp;rsquo;&lt;code&gt;self&lt;/code&gt;&amp;rsquo; is done generating its value, we ask the callback for the task we should wait for.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;        [workToBeProvided addCallback:^(id value) {
            [chainSource completeWithValue:value];&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;We add a callback to this new task, and use the new &amp;rsquo;&lt;code&gt;chain&lt;/code&gt;&amp;rsquo; task we created at the beginning of the method to signal its completion.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;        } on:queue];
        [workToBeProvided addErrback:^(NSError *error) {
            [chainSource failWithError:error];
        } on:queue];&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;If the work-to-be-provided fails, we fail the whole chain.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;    } on:queue];
    [self addErrback:^(NSError *error) {
        [chainSource failWithError:error];
    } on:queue];&lt;/pre&gt;&lt;/code&gt;

&lt;code&gt;If self fails, we fail the whole chain too.&lt;/code&gt;
    
&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;    return chain;
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;We now have a task to return to the caller, that represents the completion of both &amp;rsquo;&lt;code&gt;self&lt;/code&gt;&amp;rsquo;, and the task provided from the callback.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;- (instancetype)chain
{
    return [self chain:^SPTask *(id value) {
        return value;
    } on:dispatch_get_global_queue(0, 0)];
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;&amp;rsquo;&lt;code&gt;chain&lt;/code&gt;&amp;rsquo; is just a convenience method for when the value this task yields is itself is a task. We will talk about it in depth later on.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;- (void)completeWithValue:(id)value
{
    @synchronized(_callbacks) {
        _isCompleted = YES;
        _completedValue = value;
        for(SPCallbackHolder *holder in _callbacks) {
            dispatch_async(holder.callbackQueue, ^{
                holder.callback(value);
            });
        }
        [_callbacks removeAllObjects];
        [_errbacks removeAllObjects];
    }
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;&lt;code&gt;completeWithValue:&lt;/code&gt; is exposed by &lt;code&gt;SPTaskCompletionSource&lt;/code&gt;, not &lt;code&gt;Task&lt;/code&gt; itself, but this is the implementation that will be called. It simply dispatches the requested callback to the requested queue, with the value that we completed the task with. It also saves the value into &lt;code&gt;_completedValue&lt;/code&gt;, in case someone adds a callback to the task after it has finished (see &lt;a href=&quot;#addCallback&quot;&gt;&lt;code&gt;addCallback::&lt;/code&gt;&lt;/a&gt; to see how this is done).&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;- (void)failWithError:(NSError*)error
{
    @synchronized(_errbacks) {
        _isCompleted = YES;
        _completedError = error;
        for(SPCallbackHolder *holder in _errbacks) {
            dispatch_async(holder.callbackQueue, ^{
                holder.callback(error);
            });
        }
        [_callbacks removeAllObjects];
        [_errbacks removeAllObjects];
    }
}
@end&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;The same goes for errbacks, except we save the error rather than the value.&lt;/p&gt;

&lt;p&gt;In the previous chapter, I ignored the &amp;rsquo;&lt;code&gt;on:&lt;/code&gt;&amp;rsquo; argument on the Task methods, and didn&amp;rsquo;t really focus on it in this chapter. Let&amp;rsquo;s take a detour from task abstractions and talk about Grand Central Dispatch, before getting back to it.&lt;/p&gt;


&lt;h2 id=&quot;agents&quot;&gt;It&amp;rsquo;s queues all the way down: Agents and work queues.&lt;/h2&gt;

&lt;p&gt;My day job is writing code for some streaming music company. My main annoyance with that product is that it stops and thinks too much (although not nearly as often as iTunes, phew!), doing too much work on the main thread. When working on my latest pet project, my counter reaction is thus to make sure no part of my system blocks any other part in a synchronous manner. Thus, &lt;code&gt;SPAgent&lt;/code&gt; was born:&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;/**
 Experimental multithreading primitive: An object conforming to SPAgent is not thread safe,
 but it runs in its own thread. To perform any of the methods on it, you must first dispatch to its
 workQueue.
 */
@protocol SPAgent &amp;lt;NSObject&amp;gt;
@property(nonatomic,readonly) dispatch_queue_t workQueue;
@end&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;Any object conforming to the &lt;code&gt;SPAgent&lt;/code&gt; protocol is thus communicating that you MUST NOT call any method on it from any other queue than its &lt;code&gt;workQueue&lt;/code&gt;, which is a private GCD dispatch queue that it owns and on which it does all its work. We are thereby externalizing synchronization to the caller, letting the caller use whatever method is most appropriate at that call point. It feels like such a bad idea to externalize what feels like an implementation detail like that, but so far I&amp;rsquo;m very pleased with the pattern. It&amp;rsquo;s very Erlang-y, a language where you do all major communication between &amp;ldquo;objects&amp;rdquo; as messages between processes, even as a part of the language syntax. The implementation of an agent is also very clean: you don&amp;rsquo;t have to do any locking anywhere, and you are guaranteed that only one method is being called at a time, so it&amp;rsquo;s very easy to reason about the internal state of your object.&lt;/p&gt;

&lt;p&gt;Let&amp;rsquo;s explore an example.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;    MasterControlProgram *mcp = [MasterControlProgram new];
    dispatch_async([mcp workQueue], ^{
        int leetAnswer = [mcp multiplicatify:42 with:1337];
        dispatch_async([self workQueue], ^{
            NSString *prettyThingForUI = [self ingestAnswer:leetAnswer];
            dispatch_async(dispatch_get_main_queue(), ^{
                [ui show:prettyThingForUI];
            })
        })
    });&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;Well! This looks familiar. Dispatch queue spaghetti. What can we do about that? I decided to use invocation grabbers.&lt;/p&gt;

&lt;h2 id=&quot;invocations&quot;&gt;NSInvocation refresher&lt;/h2&gt;

&lt;p&gt;&lt;a href=&quot;http://overooped.com/post/913725384/nsinvocation&quot;&gt;To refresh&lt;/a&gt;, &lt;code&gt;NSInvocation&lt;/code&gt; is a Foundation class that encapsulates calling a method on an object. It can hold onto a target, a selector, a method signature (description of each argument and return value of a method), every argument of a call, and the return value. They are the building block that enables call forwarding and proxies to work. You can either create them manually, or have one created for you by implementing &lt;code&gt;-forwardInvocation:&lt;/code&gt;, where one will be handed to you as an argument. In the latter case, you can use it immediately, but you can also store it and invoke it later.&lt;/p&gt;

&lt;p&gt;Creating invocations manually is a hassle. Therefore, it is common to create an &amp;ldquo;invocation grabber&amp;rdquo;, that is an object that will save the first unknown call being made on it, and then let the caller use the grabber in some manner. There are many open source grabbers, but this is the one I have:&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;@interface SPInvocationGrabber : NSObject
-(id)initWithObject:(id)obj stacktraceSaving:(BOOL)saveStack;
@property (readonly, retain, nonatomic) id object;
@property (readonly, retain, nonatomic) NSInvocation *invocation;
...
-(void)invoke; // will release object and invocation
@end&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;You would use it like so:&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;    id someObject;
    SPInvocationGrabber *grabber = [[SPInvocationGrabber alloc] initWithObject:someObject stacktraceSaving:NO];
    [grabber doThatThingWith:anArgument];
    NSInvocation *invocation = [grabber invocation];&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;You now have an invocation that you can call now, or later, with a reference to &amp;rsquo;&lt;code&gt;someObject&lt;/code&gt;&amp;rsquo;, the method &amp;rsquo;&lt;code&gt;doThatThingWith:&lt;/code&gt;&amp;rsquo;, and &lt;code&gt;anArgument&lt;/code&gt;. You can optionally ask the invocation to retain all the arguments (it&amp;rsquo;s not done by default to save some overhead in case you use the invocation immediately).&lt;/p&gt;

&lt;p&gt;With some &lt;code&gt;NSObject&lt;/code&gt; categories, &lt;a href=&quot;http://overooped.com/post/913725384/nsinvocation&quot;&gt;you can have fun with higher-order messaging without closures&lt;/a&gt;:&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;@interface NSObject (SPInvocationGrabbing)
-(id)invokeAfter:(NSTimeInterval)delta;
-(id)inBackground;
-(id)onMain;
@end

// Example: blink
[[self invokeAfter:0.2] setSelected:YES animated:YES]
[[self invokeAfter:0.4] setSelected:NO animated:YES]

// Example: Background computation with UI update later
- ... {
    [[self inBackground] somethingExpensive];
}
- (void)somethingExpensive {
    ...
    [[button onMain] setTitle:computedTitle forState:0];
}&lt;/pre&gt;&lt;/code&gt;

&lt;h2 id=&quot;agentasync&quot;&gt;Simplifying agent communication with Invocations&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;We can extend this concept&lt;/b&gt; to add a category on &lt;code&gt;NSObject&lt;/code&gt; to dispatch to its &lt;code&gt;workQueue&lt;/code&gt;, given that it&amp;rsquo;s an &lt;code&gt;SPAgent&lt;/code&gt;:&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;@interface NSObject (SPAgentDo)
- (instancetype)sp_agentAsync;
@end

// Example
- ... {
    [[_backendService sp_agentAsync] requestURL:someURL whenDone:^(id _){ ... } callbackQueue:_workQueue];
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;This simplifies communication to the agent, but not back: taking the return value of &lt;code&gt;requestURL:whenDone:callbackQueue:&lt;/code&gt; wouldn&amp;rsquo;t make sense, as it&amp;rsquo;s not actually being called on that line, but being scheduled to be called later. If only we had a concept representing future values…!&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sp_agentAsync&lt;/code&gt; returns an invocation grabber, but what does the call on the invocation grabber return? &lt;b&gt;An SPTask representing the real return value&lt;/b&gt;. Example:&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;- foo {
    SPTask *dataTask = [[_backendService sp_agentAsync] requestURL:someURL];
    [dataTask addCallback:^ (NSData *data) {
        // Do something with the newly acquired data
    } on:_workQueue];
}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;This also highlights why every &lt;code&gt;SPTask&lt;/code&gt; method takes a queue in addition to the callback to be run: We certainly don&amp;rsquo;t want to run the callback on the work queue of &lt;code&gt;_backendService&lt;/code&gt;, and since we&amp;rsquo;re communicating between agents, we don&amp;rsquo;t want to call the callback on the main queue. &lt;code&gt;dispatch_get_current_queue()&lt;/code&gt; looks inviting, but &lt;a href=&quot;http://developer.apple.com/library/mac/#documentation/Darwin/Reference/ManPages/man3/dispatch_get_current_queue.3.html&quot;&gt;the documentation states&lt;/a&gt; that it should only be used when you are the creator of the queue the call is executed from. Thus, we always need to be explicit about the destination queue.&lt;/p&gt;

&lt;h2 id=&quot;async_impl&quot;&gt;Delving into sp_agentAsync&lt;/h2&gt;

&lt;p&gt;The implementation of &lt;code&gt;sp_agentAsync&lt;/code&gt; is interesting enough to take a closer look at.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;@implementation NSObject (SPAgentDo)
- (instancetype)sp_agentAsync
{
    SPInvocationGrabber *grabber = [self grabWithoutStacktrace];
    __weak SPInvocationGrabber *weakGrabber = grabber;&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;The general use case of invocation grabbers is to use them seldom, therefore I added a stack trace saving feature to them, to aid in finding the origin of bugs. Agents communicate often, so we want to keep the overhead down here.&lt;/p&gt;
    
&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;    SPTaskCompletionSource *completionSource = [SPTaskCompletionSource new];
    SPTask *task = completionSource.task;
    __block void *unsafeTask = (__bridge void *)(task);&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;When you return a &lt;code&gt;Task&lt;/code&gt; from a method, the caller of that method shouldn&amp;rsquo;t be able to decide on the completion state of it: that&amp;rsquo;s a task for the creator of the task. To hide those method from the Task API, a &lt;code&gt;CompletionSource&lt;/code&gt; is used for that purpose.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;    grabber.afterForwardInvocation = ^{
        NSInvocation *invocation = [weakGrabber invocation];&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;We have just now created the grabber, but not returned it from this method, so we don&amp;rsquo;t know what method it will grab yet. Thus, we need a time in the future when the invocation has been grabbed: that&amp;rsquo;s what this callback provides us with.&lt;/p&gt;
        
&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;        // Let the caller get the result of the invocation as a task.
        // Block guarantees lifetime of 'task', so just bridge it here.
        BOOL hasObjectReturn = strcmp([invocation.methodSignature methodReturnType], @encode(id)) == 0;
        if(hasObjectReturn)
            [invocation setReturnValue:&amp;amp;unsafeTask];&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;We only want to return a &lt;code&gt;Task&lt;/code&gt; representing the return value if the method we&amp;rsquo;re wrapping returns a value of object type. If it does, we artificially set the &lt;code&gt;SPTask&lt;/code&gt; as the return value of the invocation, which is what provides the caller with the task.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;        dispatch_async([(id)self workQueue], ^{
#pragma clang diagnostic push
#pragma clang diagnostic ignored &quot;-Warc-retain-cycles&quot;
            // &quot;invoke&quot; will break the cycle, and the block must hold on to grabber
            // until this moment so that it survives (nothing else is holding the grabber)
            [grabber invoke];
#pragma clang diagnostic pop&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;Dispatch to the work queue of the target, and invoke the grabber&amp;rsquo;s invocation on that thread. In this weird case we actually want a retain cycle: the grabber should live until the dispatch to the new thread is done. This is similar to how &lt;code&gt;NSTimer&lt;/code&gt; retains its target. Invoking the grabber will set its &amp;rsquo;&lt;code&gt;afterForwardInvocation&lt;/code&gt;&amp;rsquo; to nil, thus breaking the cycle and cleaning everything up.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;            if(hasObjectReturn) {
                __unsafe_unretained id result = nil;
                [invocation getReturnValue:&amp;amp;result];
                [completionSource completeWithValue:result];
            }&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;The invocation has now been populated with an actual return value. We can extract it, and complete our &lt;code&gt;SPTask&lt;/code&gt; with that value. This value will now be propagated back to the original queue/thread, if a callback was set on the &lt;code&gt;SPTask&lt;/code&gt;.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;        });
    };
    return grabber;
}
@end&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;And we&amp;rsquo;re done! The grabber is returned to the caller, ready to begin the whole dispatch chain.&lt;/p&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;We can now go back to the example in the tl;dr and step through it, hopefully with full understanding of what&amp;rsquo;s going on.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;@interface BackendService : NSObject &amp;lt;SPAgent&amp;gt;
- (SPTask*/*&amp;lt;NSData&amp;gt;*/)requestURL:(NSURL*)url;
@end

- (SPTask*)funkifyImageAndPublishResult:(NSURL*)link
{
	return [[[[[_backendService sp_agentAsync] requestURL:url] chain] then:^ id (NSData *response) {&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;We have a &lt;code&gt;_backendService&lt;/code&gt;, which is an &lt;code&gt;SPAgent&lt;/code&gt;. Therefore, we know we can&amp;rsquo;t just call &lt;code&gt;requestURL&lt;/code&gt; directly on it: we need to be on its work queue first. We use &lt;code&gt;sp_agentAsync&lt;/code&gt; to do that.&lt;/p&gt;

&lt;p&gt;Note that by doing so, the return value is actually &lt;code&gt;SPTask&amp;lt;SPTask&amp;lt;NSData&amp;gt;&amp;gt;&lt;/code&gt;; that is, a task which yields a task which yields an &lt;code&gt;NSData&lt;/code&gt;. To get to the &lt;code&gt;NSData&lt;/code&gt;, we need to wait for the first task to complete. This is a common situation, and thus we can use the convenience method &amp;rsquo;&lt;code&gt;chain&lt;/code&gt;&amp;rsquo;. Remember that  &amp;rsquo;&lt;code&gt;chain:on:&lt;/code&gt;&amp;rsquo; adds a callback that provides more work to wait for. &amp;rsquo;&lt;code&gt;chain&lt;/code&gt;&amp;rsquo; is a shorthand for &amp;rsquo;&lt;code&gt;…] chain:^ (SPTask *task) { return task; } on:_workQueue]&lt;/code&gt;&amp;rsquo;. We&amp;rsquo;re saying, &amp;ldquo;the task yields a task. Just give me the latter when it&amp;rsquo;s ready&amp;rdquo;.
&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;		UIImage *image = [UIImage imageFromData:response];
		return [image funkyTransform];
	} on:dispatch_get_global_queue(0,0)] chain:^ SPTask*(UIImage *image) {&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;The data has arrived. We&amp;rsquo;re on a global background queue, so we can do tons of expensive work here without affecting anyone. Once we&amp;rsquo;re done doing our work, chain it together with a new task that…&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;		return [_imageHostingService postImageAndReturnImageURL:image];
	} on:_imageHostingService.workQueue];&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;sends our funky image to an image hosting service, which we also have an agent service for. &lt;code&gt;-[postImage…]&lt;/code&gt; returns an &lt;code&gt;SPTask&lt;/code&gt;, which we will wait for. We can return this final task to the caller of &amp;rsquo;&lt;code&gt;funkifyImage…&lt;/code&gt;&amp;rsquo;, and it will represent the entire chain of actions. In addition, the task will yield the URL of the image when hosted at that service. Finally, we don&amp;rsquo;t have to handle any errors in this chain: the caller can add an errback to the last task in the chain, and it can thereby handle any error in any part of the chain.&lt;/p&gt;

&lt;code&gt;&lt;pre class=&quot;brush: objc;&quot;&gt;}&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;Fin. I&amp;rsquo;ve packaged the two classes in a &lt;a href=&quot;https://github.com/nevyn/SPAsync&quot;&gt;Github project called SPAsync&lt;/a&gt;. Feel free to &lt;a href=&quot;https://github.com/nevyn/SPAsync/network&quot;&gt;fork&lt;/a&gt;, &lt;a href=&quot;#disqus_thread&quot;&gt;comment&lt;/a&gt;, or &lt;a href=&quot;mailto:joachimb@gmail.com&quot;&gt;contact me personally&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thanks to &lt;a href=&quot;http://ikennd.ac&quot;&gt;Dan&lt;/a&gt; and &lt;a href=&quot;https://twitter.com/arrelid&quot;&gt;Mattias&lt;/a&gt; for the feedback while I was writing this article!&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>super mutroid</title>
   <link href="https://nevyn.me/2013/01/20/super-mutroid/"/>
   <updated>2013-01-20T23:18:26+01:00</updated>
   <id>https://nevyn.me/2013/01/20/super-mutroid</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/tumblr_mgxds5HuEK1rhv0i7o1_1280.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://blog.mastervone.com/post/41006745821/super-mutroid&quot; class=&quot;tumblr_blog&quot;&gt;mastervone&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;During the &lt;a href=&quot;http://stockholm.musichackday.org/2013/index.php?page=Main+page&quot;&gt;Music Hack Day Stockholm 2013&lt;/a&gt; hackathon, &lt;a href=&quot;http://nevyn.nu/&quot;&gt;me&lt;/a&gt; and &lt;a href=&quot;http://www.amandarosler.com&quot;&gt;mandy&lt;/a&gt; forked Deathtroid into &lt;a href=&quot;https://github.com/nevyn/mutroid&quot;&gt;Super Mutroid&lt;/a&gt; (full source code), added &lt;a href=&quot;http://echonest.com&quot;&gt;EchoNest&lt;/a&gt; and &lt;a href=&quot;http://developer.spotify.com&quot;&gt;Spotify&lt;/a&gt; support, and made a Metroid music game.&lt;/p&gt;

&lt;p&gt;You can download it here (requires Mac OS 10.8): &lt;a href=&quot;http://cl.ly/361Q090z2834/download/Mutroid_1.01.zip&quot;&gt;Download from cl.ly&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From the &lt;a href=&quot;https://www.hackerleague.org/hackathons/music-hack-day-stockholm-13/hacks/super-mutroid&quot;&gt;Hack project page&lt;/a&gt;:&lt;/p&gt;

&lt;h2&gt;Music/rhythm platform game with a Super Metroid theme&lt;/h2&gt;

&lt;h3&gt;Description&lt;/h3&gt;
&lt;p&gt;Plays a song through Libspotify and downloads song data from EchoNest. Generates obstacles based on the beats in the song.&lt;/p&gt;

&lt;h3&gt;How to play&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;W - Jump&lt;/li&gt;
&lt;li&gt;S - Duck&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;When you start the game, enter a player name to the left and your Spotify login details to the right. You can also enter a Spotify track url in the text field under the Login button.&lt;/p&gt;

&lt;p&gt;Then just press “Create Game” and wait for the song to load! (The character will automatically start running when the song has been loaded. If nothing happens after several seconds, the song you entered probably isn’t available on EchoNest.)&lt;/p&gt;

&lt;p&gt;You die if the character runs into the spikes. If that happens, press any key to restart. If you want to enter another track url, you have to quit the game and restart it.&lt;/p&gt;

&lt;h3&gt;Known bugs&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;Sometimes crashes when you press Create Game&lt;/li&gt;
&lt;li&gt;Flickering character&lt;/li&gt;
&lt;li&gt;You can jump through the spikes that you are supposed to duck under&lt;/li&gt;
&lt;/ul&gt;&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>My Inner Hulk</title>
   <link href="https://nevyn.me/2012/08/25/my-inner-hulk/"/>
   <updated>2012-08-25T10:40:00+02:00</updated>
   <id>https://nevyn.me/2012/08/25/my-inner-hulk</id>
   <content type="html">&lt;p&gt;The idea of writing iOS apps using HTML makes me mad. It infuriates me. This is a strange thing, and generally a sign that I should cool down, breathe deeply, and just ignore the subject until it&amp;rsquo;s been simmering in my brain long enough for me to think clearly about it. But it&amp;rsquo;s been years, now! How much breathing can a man take?&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s so slow! And ugly! And inelegant! I either need a few absolute-positioned elements, or a layout that I&amp;rsquo;ll need to write code for anyway. Why would I involve a super-complex layout engine for that? Why do I want a document-based model conceived in the nineties for my playback UI? Why do I want an engine where a single missing &amp;ldquo;return NO&amp;rdquo; will make my button completely wipe out all existing state in my app and effectively restart it? One where loading is so slow that it&amp;rsquo;s designed to always be progressive, flickering like an Atari while slowly putting UI controls on my screen?&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Argument: HTML will be fast enough soon.&lt;/b&gt;&lt;br/&gt;&lt;b&gt;Counter-argument&lt;/b&gt;: And by then native will be even faster.&lt;br/&gt;&lt;b&gt;Inner, loud voice&lt;/b&gt;: Oh yeah? I bet this will be the year of Linux on the desktop too.&lt;br/&gt;&lt;b&gt;Digression&lt;/b&gt;: Whatever computer speed we reach, we will find ways to use that power to make better UIs. The idea that an inefficient platform can &amp;ldquo;catch up&amp;rdquo; because there is some kind of level where you don&amp;rsquo;t need more processing power to make a great UI is a fallacy. Remember when floating-point animations with multiple transparent layers was expensive? If you are using the above argument, you&amp;rsquo;re the guy who argued that they&amp;rsquo;re a waste of cycles and don&amp;rsquo;t make a UI better.

&lt;/p&gt;&lt;p&gt;&lt;b&gt;Argument: HTML will have all the features native apps have soon.&lt;/b&gt;&lt;br/&gt;&lt;b&gt;Counter-argument&lt;/b&gt;: And by then native will have more features, some of which will be untranslatable or very hard to translate to a web environment.&lt;br/&gt;&lt;b&gt;Inner, loud voice&lt;/b&gt;: Draaag and droooppppp arrrrgggghhh

&lt;/p&gt;&lt;p&gt;&lt;b&gt;Argument: The reason every native-app-with-web-UI sucks is because everyone else sucks. We can do it correctly.&lt;/b&gt;&lt;br/&gt;&lt;b&gt;Counter-argument&lt;/b&gt;: Really? Facebook just don&amp;rsquo;t have good web developers? I don&amp;rsquo;t buy that.&lt;br/&gt;&lt;b&gt;Inner, loud voice&lt;/b&gt;: No, YOU suck! Nngggghhhh

&lt;/p&gt;&lt;p&gt;&lt;b&gt;Argument: A-B testing, dude! Fast deployments!&lt;/b&gt;&lt;br/&gt;&lt;b&gt;Counter-argument&lt;/b&gt;: You&amp;rsquo;ve made a product change and agreed on all the design, figured out what to test and how to gather good data, implemented it, and got it through QA in less than a week? Maybe you need a web view. Actual, existing people: you can A-B test in any environment, whether a web browser is involved doesn&amp;rsquo;t matter, and you probably have time to wait a week.&lt;br/&gt;&lt;/p&gt;


&lt;p&gt;Please flame me and prove me wrong. I&amp;rsquo;ve seen so many shit HTML apps, but maybe everybody really just is doing it wrong. And you&amp;rsquo;re right, I&amp;rsquo;m not a web developer, my javascript is shit, I haven&amp;rsquo;t even built a web page in a year, and I make a living writing ObjC. Of course I&amp;rsquo;m biased. Still, no ad-hominems please.&lt;/p&gt;

&lt;p&gt;And you! You there staring at me angrily, just barely not shouting at me: yes of course some sort of insta-deployment web-ish platform is going to be amazing and take over the world, some time in the next decade. But it won&amp;rsquo;t be HTML5. Possibly it will be its grand-grand child platform, which will bear little resemblance to the original.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2012/08/02/i-had-completely-forgotten-about-nil-targeted/"/>
   <updated>2012-08-02T09:13:57+02:00</updated>
   <id>https://nevyn.me/2012/08/02/i-had-completely-forgotten-about-nil-targeted</id>
   <content type="html">&lt;p&gt;I had completely forgotten about nil targeted actions. &lt;a href=&quot;https://twitter.com/bigzaphod/status/230744266509516800&quot;&gt;BigZaphod&lt;/a&gt; &lt;a href=&quot;http://overooped.com/post/3898655445/uikit-hide-the-keyboard-without-a-reference-to-the&quot;&gt;reminds me&lt;/a&gt; of the canonical way of dismissing the keyboard:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The responder chain is so under-used in iOS. I&amp;rsquo;ll definitely try to think of ways to solve problems using it in the future.&lt;/p&gt;

&lt;p&gt;For those of you who haven&amp;rsquo;t coded for the Mac, nil-targeted actions are what makes menus (among many things) work. When you select &amp;ldquo;Copy&amp;rdquo; from the menu, this is sent to the first responder. If that happens to be a text field, that text field gets the chance to put things into the clipboard. If it had been a check box, the check box would have no idea how to copy. However, that check box might be in a window, which belongs to a NSDocumentController, and the document might have the concept of copying the document as a whole. The app would step through the responder chain for you, from the check box all the way to the document controller, and perform the copy. Magic!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Faking generics in ObjC</title>
   <link href="https://nevyn.me/2012/05/07/tctypesafety/"/>
   <updated>2012-05-07T01:51:00+02:00</updated>
   <id>https://nevyn.me/2012/05/07/tctypesafety</id>
   <content type="html">&lt;p&gt;If you have every touched C++, Java or C# and then moved to Objective-C, you have at some point written one of the following in a source file:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;NSArray/*&amp;lt;MyThing&amp;gt;*/ *_queuedThings;
NSDictionary *_thingMap; // contains MyThing
-(MAFuture*)fetchThing; // wraps a MyThing
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;With &lt;a href=&quot;https://github.com/nevyn/TCTypeSafety&quot;&gt;&lt;code&gt;TCTypeSafety&lt;/code&gt;&lt;/a&gt;, you can write pretend that you&amp;rsquo;re writing in a language with generics and write:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@interface MyThing : NSObject
...
@end
TCMakeTypeSafe(MyThing)

(later...)
NSArray&amp;lt;MyThing&amp;gt; _queuedThings;&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;Why?!&lt;/h2&gt;

&lt;p&gt;Assume that we have some kind of &lt;code&gt;Future&lt;/code&gt; class. Assume also that we have a factory that returns &lt;code&gt;Future&lt;/code&gt;s that wrap the asynchronous creation of a &lt;code&gt;MyThing&lt;/code&gt;. We might want to define the interface for such a factory like this:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@interface MyThingFactory : NSObject
- (TCFuture&amp;lt;MyThing&amp;gt; *)fetchLatestThing;
@end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Later, when we use the factory:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;MyThingFactory *fac = [MyThingFactory new];
NSString *thing = [fac fetchLatestThing].typedObject;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&amp;hellip; actually generates a compiler warning, since &lt;code&gt;typedObject&lt;/code&gt; returns &lt;code&gt;MyThing&lt;/code&gt;, not &lt;code&gt;NSString&lt;/code&gt;. (Note that we did not have to give &lt;code&gt;TCFuture&lt;/code&gt; knowledge of the &lt;code&gt;MyThing&lt;/code&gt; type to get this benefit, or modify it in any way except make it &lt;code&gt;TCTypeSafety&lt;/code&gt; compatible).&lt;/p&gt;

&lt;p&gt;This way, we can ensure that even though we have wrapped our &lt;code&gt;MyThing&lt;/code&gt;s in a &lt;code&gt;TCFuture&lt;/code&gt;, we haven&amp;rsquo;t thrown away type safety, so that if we want to change the return type of &lt;code&gt;fetchLatestThing&lt;/code&gt;, we can just do so in the header and then fix all the compiler warnings, rather than going through every single usage of &lt;code&gt;fetchLatestThing&lt;/code&gt; and fix any now invalid assumptions on the return type.&lt;/p&gt;

&lt;p&gt;This is also useful for collections such as arrays and dictionaries:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;NSMutableArray&amp;lt;MyThing&amp;gt; *typedArray = (id)[NSMutableArray new];
[typedArray insertTypedObject:@&quot;Not a MyThing&quot; atIndex:0]; // compiler warning! NSString ≠ MyThing
NSNumber *last = typedArray.lastTypedObject; // compiler warning! NSNumber ≠ MyThing
NSLog(@&quot;Last typed thing: %@&quot;, last);
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;What?!&lt;/h2&gt;

&lt;p&gt;The syntax for indicating protocol conformance of a variable is the same that you would use for template/generics specialization in other language. Also, the namespace for protocols is separate from the namespace for classes, so we can have a protocol with the same name as a class. So if we implement a protocol with getters and setters that take and return the type that we are interested in, we can get type safety. For example, we can create the protocol &lt;code&gt;MyThing&lt;/code&gt; as such:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@protocol MyThing
- (MyThing*)typedObjectAtIndex:(NSUInteger)index;
- (void)addTypedObject:(MyThing*)thing;
@end&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;We then need to add support for these methods to &lt;code&gt;NSArray&lt;/code&gt; and &lt;code&gt;NSMutableArray&lt;/code&gt;. However, the type we are specializing on is only a compile time hint and does not affect the type of the instance, so in the implementation, we can just say that these return &amp;lsquo;id&amp;rsquo;.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;@implementation NSArray (SPTypeSafety)
- (id)typedObjectAtIndex:(NSUInteger)index;
{
    return [self objectAtIndex:index];
}
@end

@implementation NSMutableArray (SPTypeSafety)
- (void)addTypedObject:(id)thing;
{
    [self addObject:thing];
}
@end&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Tada! Write a macro that generates this protocol for you (like, say, &lt;code&gt;TCMakeTypeSafe&lt;/code&gt;), and you have instant type safety.&lt;/p&gt;

&lt;h2&gt;There must be downsides.&lt;/h2&gt;

&lt;p&gt;Absolutely. You can only &amp;ldquo;specialize&amp;rdquo; on a single class: you can&amp;rsquo;t create some generic facility that would let you specialize both the key and the value of an NSDictionary. You have to use weird selectors such as &lt;code&gt;-[NSArray typedObjectAtIndex:]&lt;/code&gt;, since the protocol conformance sadly does not override the method signature for your array instance, and using &lt;code&gt;-[NSArray objectAtIndex:]&lt;/code&gt; will still give you type-unsafe return values.&lt;/p&gt;

&lt;p&gt;Worst of all, by applying the &lt;code&gt;TCMakeTypeSafe&lt;/code&gt; macro on your class, it will suddenly look like it has the interface of both a to-one accessor, &lt;code&gt;NSArray&lt;/code&gt;, &lt;code&gt;NSDictionary&lt;/code&gt;, and whatever else you add support for in &lt;code&gt;TCMakeTypeSafe&lt;/code&gt;. Thus, you wouldn&amp;rsquo;t get compile time warnings if you changed your &lt;code&gt;NSArray&lt;/code&gt; into an &lt;code&gt;NSDictionary&lt;/code&gt;, as you normally would. I &lt;em&gt;think&lt;/em&gt; this trade-off is worth it, but I&amp;rsquo;m not sure.&lt;/p&gt;

&lt;h2&gt;Where can I get it?&lt;/h2&gt;

&lt;p&gt;At &lt;a href=&quot;https://github.com/nevyn/TCTypeSafety&quot;&gt;nevyn/TCTypeSafety&lt;/a&gt; at GitHub.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: turns out Jonathan Sterling had &lt;a href=&quot;http://www.jonmsterling.com/posts/2012-05-01-refinement-protocols-another-approach-to-typesafe-collections.html&quot;&gt;almost exactly the same idea&lt;/a&gt; only a few days ago.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Subtextual notation</title>
   <link href="https://nevyn.me/2012/05/02/subtextual-notation/"/>
   <updated>2012-05-02T00:24:32+02:00</updated>
   <id>https://nevyn.me/2012/05/02/subtextual-notation</id>
   <content type="html">&lt;p&gt;We&amp;rsquo;re still writing code as if on a teletype, and still feeding it to a black-box compiler, and getting magic out. There must be a more visual approach, that&amp;rsquo;s faster to code in than ascii, more succinct, giving you a better overview, an IDE that talks to you. I&amp;rsquo;ve been hunting for a visual programming language for a long time, &lt;a href=&quot;http://overooped.com/post/17790355071/you-cant-discover-anything-if-you-cant-see-what&quot;&gt;as you probably know&lt;/a&gt;. Heck, &lt;a href=&quot;http://cl.ly/473Z0Q0P3a0X0Y463E2y&quot;&gt;I even wrote one&lt;/a&gt; (no, that&amp;rsquo;s not Quartz Composer).&lt;/p&gt;

&lt;p&gt;So of course I had to back &lt;a href=&quot;http://www.kickstarter.com/projects/ibdknox/light-table&quot;&gt;Light Table&lt;/a&gt; when I saw it. I can&amp;rsquo;t but feel that Chris Granger&amp;rsquo;s project is overambitious and too broad to build something general and practically useful, but it&amp;rsquo;ll be a very interesting journey.&lt;/p&gt;

&lt;p&gt;While researching Light Table, I ran into &lt;a href=&quot;http://alarmingdevelopment.org&quot;&gt;Jonathan Edwards&lt;/a&gt;&amp;rsquo; thoughts on it, &amp;ldquo;&lt;a href=&quot;http://alarmingdevelopment.org/?p=680&quot;&gt;An IDE is not enough&lt;/a&gt;&amp;rdquo;. He&amp;rsquo;s been working on a visual programming language of his own, called &lt;a href=&quot;http://subtextual.org&quot;&gt;Subtext&lt;/a&gt;. He&amp;rsquo;s chosen a very specific problem—conditionals—and extrapolated a language from that. I&amp;rsquo;m really not sold on his visual representation, nor the incredibly mouse and context menu-heavy interface, but I really like the idea and the thoughts behind it. While waiting for the revolution, give your brain something to chew on with the embedded video below the quote.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Much of the design of our programming languages is an artifact of the linear nature of text.&lt;/p&gt;
&lt;p&gt; — &lt;a href=&quot;http://subtextual.org/subtext2.html&quot;&gt;Jonathan Edwards in his Subtext 2 presentation&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;iframe src=&quot;http://subtextual.org/subtext2.html&quot; width=&quot;711&quot; height=&quot;580&quot;&gt;&lt;/iframe&gt;
</content>
 </entry>
 
 <entry>
   <title>hackbook hmd</title>
   <link href="https://nevyn.me/2012/04/26/hackbook-hmd/"/>
   <updated>2012-04-26T07:47:01+02:00</updated>
   <id>https://nevyn.me/2012/04/26/hackbook-hmd</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/tumblr_m31z2dAthe1qz4vmko1_1280.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;The hackbook project is alive! Or at least limping around. Finally got myself a cheap pair of Vuzix Wrap 920 head-mounted displays. Wearable computer + monitor, check! The stereo vision in them is horrible, but I only want to use one of the screens so that I can see my surroundings anyway, and on its own one of those screens is actually pretty decent. Haven&amp;rsquo;t dared to open them up further to see if one of the monitors can be detached yet, tough&amp;hellip; Don&amp;rsquo;t have any input devices yet, either.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2012/02/20/fantastic-and-beautiful-conclusion-to-everything/"/>
   <updated>2012-02-20T05:28:13+01:00</updated>
   <id>https://nevyn.me/2012/02/20/fantastic-and-beautiful-conclusion-to-everything</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/36881035?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;225&quot; frameborder=&quot;0&quot; title=&quot;Everything is a Remix Part 4&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Fantastic and beautiful conclusion to Everything is a Remix, by Kirby Ferguson.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>You can't discover anything if you can't see what you're doing.</title>
   <link href="https://nevyn.me/2012/02/18/you-cant-discover-anything-if-you-cant-see-what/"/>
   <updated>2012-02-18T09:46:00+01:00</updated>
   <id>https://nevyn.me/2012/02/18/you-cant-discover-anything-if-you-cant-see-what</id>
   <content type="html">&lt;iframe src=&quot;http://player.vimeo.com/video/36579366?byline=0&quot; width=&quot;800&quot; height=&quot;450&quot; frameborder=&quot;0&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;

&lt;p&gt;The above presentation by Bret Victor is amazing, and I couldn&amp;rsquo;t stop tweeting about it the other day. My mind was blown at:&lt;/p&gt;

&lt;p&gt;&lt;b style=&quot;font-size: 110%;&quot;&gt;4:20&lt;/b&gt;. cool! I mean, I&amp;rsquo;ve seen live editors before, but I never thought of actually using sliders on numbers. Clever! I remember now though, that this has been done by &lt;a href=&quot;http://twolivesleft.com/Codea/&quot;&gt;Codea&lt;/a&gt; (and probably others) before.&lt;/p&gt;

&lt;p&gt;&lt;b style=&quot;font-size: 150%;&quot;&gt;5:25&lt;/b&gt;. What. That changes the way I think about programming visual things. I keep thinking of all the times I&amp;rsquo;ve tweaked an animation or gradient, recompiled, redeployed to device, and get to experience my change maybe a full minute later. How many solutions have I missed, had I just been able to drag a slider to try variations?

&lt;/p&gt;&lt;p&gt;I&amp;rsquo;ve tried to come up with solutions to this problem several times before. My first try was &lt;a href=&quot;https://github.com/nevyn/RemoteParameter&quot;&gt;RemoteParameter&lt;/a&gt;. However, it is incredibly clumsy to integrate into the code being modified: modified variable must be KVO compliant, it only works for a single spot in the code (so it will fail if you&amp;rsquo;re e g modifying the background color for all cells in a list), and the editor UI is atrociously bad.&lt;/p&gt;

&lt;p&gt;My second try was with &lt;a href=&quot;https://github.com/nevyn/NuRemoting&quot;&gt;NuRemoter&lt;/a&gt;. This tool I still actually use, and is somewhat useful in working with living code (sending calls in the middle of animations, debugging time sensitive operations, etc). However, it is not at all visual, and any code I improvise in the NuRemoter UI will be in Nu, which I can&amp;rsquo;t use as-is in my project without rewriting it into ObjC. I have a few thoughts here, though: first off, I should make it easier to hook Nu code into our code base, so that things that are naturally expressed in a script-y langage, can be. Secondly, the NuRemote protocol can be used as a payload delivery system for other tools. For example, if I ever write an animation construction kit, I could use NuRemoter to upload and inject animation descriptions into the app, and immediately try them out. (I&amp;rsquo;ve thought of integrating it into my Localizer localization app, too).&lt;/p&gt;

&lt;p&gt;Wait, animation construction kit? Well, Core Animation is incredibly powerful and easy to use, but expressing animations in code is both unintuitive and slow (see: write/compile/deploy/test cycle), and maybe &lt;a href=&quot;http://twitter.com/tobiasahlin&quot;&gt;tobi&lt;/a&gt; is a better animator than me? I want something like the GLSL Shader editor: define input parameters (perhaps start and end locations, duration, intensity) and a sample image as a placeholder for the UIView being animated, and then define animations Keynote-style, possibly with values substituted for parameters. Output a json file, load it at runtime and use it instead of all the animation code. Shouldn&amp;rsquo;t be THAT hard to build?&lt;/p&gt;

&lt;p&gt;&lt;b style=&quot;font-size: 110%;&quot;&gt;6:10&lt;/b&gt;. My jaw drops just a tiny bit further, but enough to mark the time. Well, typing autocompletions into the autopreviewing document so that they run automatically is pretty obvious, but I love the idea of &lt;em&gt;showing&lt;/em&gt; you what the thing does, rather than having you read documentation. Maybe the right sidebar in Xcode should have movies instead of help snippets?&lt;/p&gt;

&lt;p&gt;&lt;b style=&quot;font-size: 110%;&quot;&gt;7:43&lt;/b&gt; and &lt;b style=&quot;font-size: 110%;&quot;&gt;8:12&lt;/b&gt;. How the hell did he do that‽&lt;/p&gt;

&lt;p&gt;&lt;b style=&quot;font-size:130%;&quot;&gt;11:30&lt;/b&gt;. Again, how did he do that‽ He&amp;rsquo;s obviously not re-evaluating the whole file on each change. Maybe he&amp;rsquo;s been careful when writing the file so that it can be re-evaluated in the context of the currently &amp;ldquo;running&amp;rdquo; web page/js-vm? It looks like an incredibly nice way to code games, though. A little bit like &lt;a href=&quot;http://unity3d.com/&quot;&gt;Unity&lt;/a&gt; I guess; I remember having my mind blown the first time I saw that editor, too.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;13:00&lt;/b&gt; and &lt;b&gt;14:10&lt;/b&gt;. Now he&amp;rsquo;s just showing off. Surely this editor must be specifically written for this game engine he has constructed, and not something generic. Still want that code+editor, though!&lt;/p&gt;

&lt;p&gt;Around &lt;b&gt;16:00&lt;/b&gt; he re-iterates again how easy it is to be creative when you can visualize your results live, and how it doesn&amp;rsquo;t just apply to visuals or animations, but entire gameplay ideas. I&amp;rsquo;m so very sold on the idea.&lt;/p&gt;

&lt;p&gt;Around &lt;b&gt;20:00&lt;/b&gt;, I really love the idea of supplying sample input data and see how that affects the code you just wrote.&lt;/p&gt;

&lt;p&gt;Around &lt;b&gt;26:00&lt;/b&gt;, I should&amp;rsquo;ve realized that this is the same guy as &lt;a href=&quot;http://overooped.com/post/5616388460/this-this-is-how-to-teach-math-the-contrast&quot;&gt;the one who made That Math Video&lt;/a&gt; that blew my mind pretty thoroughly last year. I didn&amp;rsquo;t, until I checked &lt;a href=&quot;http://worrydream.com/&quot;&gt;his web site&lt;/a&gt; in preparation for this blog entry. He has plenty of new interesting entries there, if you haven&amp;rsquo;t checked them out lately.&lt;/p&gt;

&lt;p&gt;However, out of all of these, the moment that perhaps isn&amp;rsquo;t the most interesting to me as a programmer, but never the less tipped me over from &amp;ldquo;yes, I am impressed&amp;rdquo; into a squealing, giggling pile of fanboyism, is &lt;b style=&quot;font-size:150%;&quot;&gt;31:30&lt;/b&gt;. Probably the most amazing animation editor I&amp;rsquo;ve seen, and probably the most intuitive power user UI I&amp;rsquo;ve seen, and it&amp;rsquo;s just an experiment he made? &lt;b style=&quot;text-decoration: blink;&quot;&gt;MIND BLOWN&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;I love how, instead of trying to solve the problem of tiny hit targets with giant thumbs, he has the user select the layer with her left hand, while manipulating it with her right. It&amp;rsquo;s a touch surface, and the user has two hands: why is nobody else using this fact‽ (my mind was similarly blown in &amp;lsquo;05 by the same multi-hand usage by &lt;a href=&quot;http://www.tactiva.com/&quot;&gt;TactaPad&lt;/a&gt;, which sadly never became an actual product).&lt;/p&gt;

&lt;p&gt;Compositing all the different animations the user wants to get into the scene by just scrolling back time and immediately performing the next animation is equally genius (also seen, but not at all as well implemented, in Garageband.). Just look at the amazing speed at which he composes that scene!&lt;/p&gt;

&lt;p&gt;However, out of all the amazing things Bret is showing us, none are as inspiring as his outro. Ever since I started programming, I&amp;rsquo;ve felt an idea or principle just at the edge of my consciousness. I know it&amp;rsquo;s related to creating a user interaction paradigm that is more natural, but I can&amp;rsquo;t describe it more clearly than that. I just know, for example, that multitouch is a step in the right direction. I haven&amp;rsquo;t thought about it too much in the past two years as I&amp;rsquo;ve been busy at Spotify, and Bret&amp;rsquo;s note at the end that doing only one thing will not give you insights really hit home.&lt;/p&gt;

&lt;p&gt;Alright, enough gushing. I hope that after all that, you did actually watch the video, and that you found as much inspiration as I did. Right now, I just want to stop everything I&amp;rsquo;m doing and take a few months off life and make tools. I should probably &lt;a href=&quot;http://community.spotify.com/t5/Spotify-Ideas-and-Feedback/iPad-app/idi-p/265&quot;&gt;finish a few projects&lt;/a&gt; first though&amp;hellip;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Rapid network protocol prototyping with TCAsyncHashProtocol</title>
   <link href="https://nevyn.me/2011/12/29/tcasynchashprotocol/"/>
   <updated>2011-12-29T08:12:00+01:00</updated>
   <id>https://nevyn.me/2011/12/29/tcasynchashprotocol</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;https://github.com/nevyn/TCAsyncHashProtocol&quot;&gt;github:TCAsyncHashProtocol&lt;/a&gt;. I like constructing simple network protocols from plist/json-safe dicts, and
transmit them over the wire as json. Easy to prototype with, easy to debug.
Give TCAHP an AsyncSocket, and this is what it&amp;rsquo;ll do for you, plus
support for request-response, and arbitrary NSData attachments.&lt;/p&gt;

&lt;p&gt;It is an embarrassment and almost an insult that my example project is a massive
200 lines. I hope to be able to reduce the verbosity and boilerplate clutter of
using TCAHP without making it heavy-weight. At the very least, I recommend that you
use &lt;a href=&quot;https://github.com/nevyn/SPSuccinct/blob/master/SPSuccinct/SPLowVerbosity.h&quot;&gt;SPLowVerbosity&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;An example of using TCAHP to send a request to update the server&amp;rsquo;s MOTD:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[_proto requestHash:$dict(
    @&quot;command&quot;, @&quot;setMessage&quot;, // the command is 'setMessage'
    @&quot;contents&quot;, msg // Send 'msg' as the new message to set.
) response:^(NSDictionary *response) {
    // The server has replied.
    if([[response objectForKey:@&quot;success&quot;] boolValue])
        NSLog(@&quot;Successfully updated message!&quot;);
    else
        NSLog(@&quot;Couldn't set message, because %@&quot;, [response objectForKey:@&quot;reason&quot;]);
}];&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;And on the receiving side:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;-(void)request:(TCAsyncHashProtocol*)proto setMessage:(NSDictionary*)hash responder:(TCAsyncHashProtocolResponseCallback)respond;
{
    NSString *newMessage = [hash objectForKey:@&quot;contents&quot;];
    if([newMessage rangeOfString:@&quot;noob&quot;].location != NSNotFound)
        respond($dict(
            @&quot;success&quot;, (id)kCFBooleanFalse,
            @&quot;reason&quot;, @&quot;you should be kind!&quot;
        ));
    else {
        _message = newMessage;
        respond($dict(
            @&quot;success&quot;, (id)kCFBooleanTrue
        ));
    }
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;(Note the latest piece of magic that I added, where the selector of the delegate
method is created based on the value of the key &amp;lsquo;command&amp;rsquo; in the message. I quite
like it.)&lt;/p&gt;

&lt;p&gt;As you can see, the resulting protocol is very weakly typed. In theory,
this means you will be making typos and not understanding why the hell
your network seems broken; in reality, I&amp;rsquo;ve never had that problem.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>If you are going to end up with a crappy to mediocre blender anyway, then why bother spending more or availing yourself of the advice and service of a specialty retailer? Reducing the overall quality of products thus destroys a key competitive advantage of Walmart’s smaller rivals.</title>
   <link href="https://nevyn.me/2011/11/22/if-you-are-going-to-end-up-with-a-crappy-to/"/>
   <updated>2011-11-22T07:47:14+01:00</updated>
   <id>https://nevyn.me/2011/11/22/if-you-are-going-to-end-up-with-a-crappy-to</id>
   <content type="html">&lt;blockquote&gt;If you are going to end up with a crappy to mediocre blender anyway, then why bother spending more or availing yourself of the advice and service of a specialty retailer? Reducing the overall quality of products thus destroys a key competitive advantage of Walmart&amp;rsquo;s smaller rivals.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://www.grist.org/business-technology/2011-11-11-is-your-stuff-falling-apart-thank-walmart&quot;&gt;Is your stuff falling apart? Thank Walmart (grist.org)&lt;/a&gt;. yay for progress?
</content>
 </entry>
 
 <entry>
   <title>By categorizing our cognitive flaws, documenting not just our errors but also their embarrassing predictability, he has revealed the hollowness of a very ancient aspiration. Knowing thyself is not enough. Not even close.</title>
   <link href="https://nevyn.me/2011/10/27/by-categorizing-our-cognitive-flaws-documenting/"/>
   <updated>2011-10-27T08:13:55+02:00</updated>
   <id>https://nevyn.me/2011/10/27/by-categorizing-our-cognitive-flaws-documenting</id>
   <content type="html">&lt;blockquote&gt;By categorizing our cognitive flaws, documenting not just our errors but also their embarrassing predictability, he has revealed the hollowness of a very ancient aspiration. Knowing thyself is not enough. Not even close.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://www.newyorker.com/online/blogs/books/2011/10/is-self-knowledge-overrated.html&quot;&gt;Is Self-Knowledge Overrated?&lt;/a&gt; at the new yorker. not very surprising, but sort of confirms that everyone&amp;rsquo;s an idiot, not just me :P
</content>
 </entry>
 
 <entry>
   <title>ive been trying to build a wearable computer</title>
   <link href="https://nevyn.me/2011/10/20/ive-been-trying-to-build-a-wearable-computer/"/>
   <updated>2011-10-20T08:34:00+02:00</updated>
   <id>https://nevyn.me/2011/10/20/ive-been-trying-to-build-a-wearable-computer</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/tumblr_ltc19pKLz71qz4vmko1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;I&amp;rsquo;ve been trying to build a wearable computer since forever, but I sort of got stuck because there aren&amp;rsquo;t (or I can&amp;rsquo;t find) any good HMDs (head-mounted displays) that don&amp;rsquo;t cover your entire field of vision (covering just one eye is fine, but being see-through would be the best, of course). I&amp;rsquo;ve had a Google Alert on the AirScouter for a year or so, and it seems they&amp;rsquo;re finally releasing them in some sort of product. I want one *so badly*, but they&amp;rsquo;re targeted at industrial application and priced thereafter, at $5200 :( I may be a huge frickin&amp;rsquo; nerd, but I can&amp;rsquo;t really justify spending that kind of money on yet another hobby project…&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2011/10/07/11106349791/"/>
   <updated>2011-10-07T05:23:40+02:00</updated>
   <id>https://nevyn.me/2011/10/07/11106349791</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/tumblr_lqhr46trpa1qz9917o1_1280.png&quot;/&gt;&lt;br/&gt;
</content>
 </entry>
 
 <entry>
   <title>Your brain begins to know that you are “enjoying” yourself, even if you hate this insipid thing. In spite of a love-shaped hole in the center of your spirit re: this electronic monster, you will not turn away. […] What gruesome psychomathematiconomist devised this heart-labyrinth?</title>
   <link href="https://nevyn.me/2011/09/28/your-brain-begins-to-know-that-you-are-enjoying/"/>
   <updated>2011-09-28T05:21:45+02:00</updated>
   <id>https://nevyn.me/2011/09/28/your-brain-begins-to-know-that-you-are-enjoying</id>
   <content type="html">&lt;blockquote&gt;Your brain begins to know that you are “enjoying” yourself, even if you hate this insipid thing. In spite of a love-shaped hole in the center of your spirit re: this electronic monster, you will not turn away. [&amp;hellip;] What gruesome psychomathematiconomist devised this heart-labyrinth?&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://insertcredit.com/2011/09/22/who-killed-videogames-a-ghost-story/&quot;&gt;insertcredit (4 chapters)&lt;/a&gt; reminds me why I hate &amp;ldquo;social games&amp;rdquo; more than TV. Memetic T-Viruses, turning human beings into zombies.
</content>
 </entry>
 
 <entry>
   <title>How To Fix Xcode 4</title>
   <link href="https://nevyn.me/2011/09/04/xcode4/"/>
   <updated>2011-09-04T05:59:00+02:00</updated>
   <id>https://nevyn.me/2011/09/04/xcode4</id>
   <content type="html">&lt;p&gt;People are sort of tired of me complaining; I&amp;rsquo;ve been saying I hate Xcode 4 since the first time I used it. &amp;ldquo;You&amp;rsquo;ll get used to it!&amp;rdquo;, &amp;ldquo;Learn Behaviors and everything will be well&amp;rdquo;, &amp;ldquo;Embrace the new UI model&amp;rdquo;, they said. I&amp;rsquo;ve been using it exclusively for several months now, trying to explore and use every feature of it; make sure to try to find a way in which I can confidently work in it. I failed. Launching Xcode 3 is a fresh breeze every time.&lt;/p&gt;

&lt;p&gt;Just a note up front: I&amp;rsquo;m not saying Xcode 4 sucks. It is light-years ahead of Xcode 3 in many ways, particularly autocompletion and the IDEs idea of what the code contains (inline warnings and errors as you type is wonderful). This is just about the way it manages windows and tabs. And even then, maybe there is some mode or usage pattern that I don&amp;rsquo;t know about and would fit me better — if so, please shout in the comment or to my twitter!&lt;/p&gt;

&lt;h2&gt;Spatial Thinking&lt;/h2&gt;
&lt;p&gt;Xcode 4 works fantastically for a lot of people. How am I special? Why do I have to try to be so &lt;em&gt;different&lt;/em&gt; all the time? Apart from just generally being an annoying sod, I imagine myself being a spatial thinker; I like to think in terms of spatially organizing whatever concepts I&amp;rsquo;m working with. I loved Classic Mac OS&amp;rsquo; spatial Finder, where windows always appeared at the same location were it did last time, and there was a one-to-one mapping between folder and window.&lt;/p&gt;

&lt;p&gt;The same goes for me and source code files. I used to work in Condensed Mode in XC 3; a single thin window with a project file listing, all source windows separate, and then dedicated slots for Build and Run windows on a separate screen (together with a terminal or two). I would work with a dozen source files at the same time, placing them around the screen. When I needed one I used recently, I would know where it would be spatially, and could just click a tiny corner or edge peeking out beneath whatever I was working on&lt;a href=&quot;#xc4-ref1&quot; id=&quot;backref1&quot;&gt;(1)&lt;/a&gt;. This way I could also layer other applications in between windows, and have a rather deep pile of things I&amp;rsquo;m working on. It&amp;rsquo;s the classic desktop metaphor, and the main argument against Multiple Document Interfaces (MDIs) that we Mac nerds would ridicule Windows users for having to use every day&lt;a href=&quot;#xc4-ref2&quot; id=&quot;backref2&quot;&gt;(2)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You might be able to imagine why XC4 would then be a problem for me, with everything in a single window, everything appearing in the exact same location on screen as you instead switch between modes of operation in one screen area, rather than switching between locations and zones on the screen. It was — and is — a complete disaster for my productivity. I spend so much time switching between contexts nowadays, trying to reorient myself. &lt;/p&gt;

&lt;h2&gt;Staying In the Past?&lt;/h2&gt;
&lt;p&gt;Trying to work in an Xcode 3 manner in Xcode 4 is worse than just trying to adapt.&lt;/p&gt;

&lt;p&gt;One of the best features of Xcode 3 is that it would remember all the open windows of a project when you closed it. In Xcode 4, closing a window is terminating it and its layout forever, and the last window you happen to close will become the main project window. Oh, you accidentally closed the window *you* consider the main window first, and then you had a reference header in a window configured for reading reference headers still open on another screen? Well, I guess that&amp;rsquo;s your main window now, and you&amp;rsquo;ll just need to reconfigure it as your main. (&lt;b&gt;Update&lt;/b&gt;: There is in fact &amp;ldquo;Close project&amp;rdquo; in File which will remember all the windows. This doesn&amp;rsquo;t help in the situation where you close one window forgetting that you had two open though, which is quite common.)&lt;/p&gt;

&lt;p&gt;Want a separate window for your build progress so you can keep track of what&amp;rsquo;s actually happening in your builds? That&amp;rsquo;s in a sidebar now, and if you actually want build details, you have to manually choose the latest build results in *another* sidebar, and then switch back to the first sidebar.&lt;/p&gt;

&lt;p&gt;Want a separate window for your console output? Hey, there&amp;rsquo;s this hack where you can name a tab &amp;ldquo;console&amp;rdquo;, bring up the debug lower-pane, set that pane to console output, make the pane fill the window, turn off the left-and-right sidebars, drag the tab out to its on window. Remember to put it back in its tab before closing the window though, or it&amp;rsquo;ll become your project!&lt;/p&gt;

&lt;p&gt;OK, this is not working.&lt;/p&gt;

&lt;h2&gt;Trying To Adapt&lt;/h2&gt;
&lt;p&gt;The way I work now is to have everything I used to have in separate windows, in separate tabs; and have Behaviors set to switch to them at appropriate times. I have one Build tab and one Debug tab, set up in a pretty nice way. I mean, this is okay, I can work this way. However, I do lose my focus a lot of the time, and I get lost trying to context switch between tabs. And I need to set this up for every project I start working on. And I can&amp;rsquo;t really use my secondary monitor for the things I like and used to do. And it&amp;rsquo;s just a pain.&lt;/p&gt;

&lt;h2&gt;Fixing Shit&lt;/h2&gt;
&lt;p&gt;Why alienate all spatial thinking developers from the Mac and iOS developer communies? I can absolutely imagine Condensed Mode working in Xcode 4. The concept of optional sidebars everywhere could still work. I&amp;rsquo;d just want to pull out the Project navigator sidebar into its own window which becomes the &amp;lsquo;project main&amp;rsquo; (closing it closes all related windows); allow some of the more awkward sidebars like the Object Library to be a panel like in IB; have dedicated Build and Console windows; and have the IDE try to suggest the &amp;ldquo;one file per window&amp;rdquo; concept (but possibly allow browsing different files within one window is the user really wants to). I mocked up a horrible concept in Acorn, for your viewing pleasure:&lt;/p&gt;

&lt;a href=&quot;http://nevyn.nu/blog/images/xcode4-condensed.jpeg&quot;&gt;&lt;img src=&quot;http://nevyn.nu/blog/images/xcode4-condensed.jpeg&quot; width=&quot;100%&quot;/&gt;&lt;/a&gt;


&lt;p&gt;This would make me very, very happy. Sure, it&amp;rsquo;d be half as &amp;ldquo;fast&amp;rdquo; as Xcode 3, it&amp;rsquo;d still forget how to autocomplete once a day, and crash pretty much every minute, but at least I could work with it.&lt;/p&gt;

&lt;p&gt;Thanks to Brent Simmons for writing &amp;ldquo;&lt;a href=&quot;http://inessential.com/2011/09/02/the_part_of_xcode_4_that_tires_me_out&quot; title=&quot;inessential.com: weblog&quot;&gt;The part of Xcode 4 that tires me out&lt;/a&gt;&amp;rdquo;, finally triggering me to write this post.&lt;/p&gt;

&lt;div class=&quot;footnodes&quot; style=&quot;color:#444; font-size: 70%&quot;&gt;
  &lt;p id=&quot;xc4-ref1&quot;&gt;&lt;a href=&quot;#backref1&quot;&gt;(1)&lt;/a&gt;: This is why I hate Exposé in 10.6 and 10.7. 10.5 and earlier would lay out Exposé windows with the same relative position of windows as they were when non-exposéd. 10.6 started organizing windows in a frickin&amp;rsquo; grid, destroying important information about where a window came from and what role it had. (&lt;a href=&quot;rdar://7044208&quot;&gt;rdar&lt;/a&gt;://&lt;a href=&quot;http://www.openradar.me/7044208&quot;&gt;7044208&lt;/a&gt;)&lt;/p&gt;

  &lt;p id=&quot;xc4-ref2&quot;&gt;&lt;a href=&quot;#backref2&quot;&gt;(2)&lt;/a&gt;: It&amp;rsquo;s worth to note that the prevalence of MDI on Windows is a symptom of not having a real application metaphor, and thus having to group all windows in a meta-window in order to regain an actual application context. Mac OS never had this problem, as an application is the primary unit of operation and the main metaphor there, and not the window.&lt;/p&gt;
&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>Software today is not engineering. Building the Empire State Building with three thousand people in a year is engineering. Programming today is more like the Egyptians piling blocks on each other and hoping it doesn’t fall over.</title>
   <link href="https://nevyn.me/2011/08/08/alan-kay/"/>
   <updated>2011-08-08T00:55:00+02:00</updated>
   <id>https://nevyn.me/2011/08/08/alan-kay</id>
   <content type="html">&lt;blockquote&gt;Software today is not engineering. Building the Empire State Building with three thousand people in a year is engineering. Programming today is more like the Egyptians piling blocks on each other and hoping it doesn&amp;rsquo;t fall over.&lt;/blockquote&gt;&amp;#8212;&lt;p&gt;Paraphrasing &lt;b&gt;Dr Alan Kay&lt;/b&gt; in &lt;a href=&quot;http://tele-task.de/archive/video/flash/14029/&quot;&gt;his talk &amp;ldquo;Programming and Scaling&amp;rdquo;&lt;/a&gt;. I got the same sense of depression over the state of our industry when I read about &lt;a href=&quot;http://www.youtube.com/watch?v=X4kp9Ciy1nE&quot;&gt;Doug Engelbart&amp;rsquo;s amazing NLS system from &amp;lsquo;68&lt;/a&gt; and the &lt;a href=&quot;http://en.wikipedia.org/wiki/Hypertext_Editing_System&quot;&gt;Hypertext Editing System in '67&lt;/a&gt;. Yes, we have millions and millions times faster computers today, but what we&amp;rsquo;re doing today is not &lt;em&gt;news&lt;/em&gt;. They realized already in '68 that you want direct manipulation and collaborative computing. &lt;/p&gt;

&lt;p&gt;Every day, I spend so much time building almost trivial functionality in thousands of lines of code, with brittle APIs that hook into other people&amp;rsquo;s brittle APIs, because that&amp;rsquo;s the code base we have, and every other code base seems to be roughly looks like that, too. I spend my weekends learning about C and C-like systems because that&amp;rsquo;s what I know; I don&amp;rsquo;t go around learning about compiler-compilers, I&amp;rsquo;m stuck in what my brain already &amp;ldquo;knows&amp;rdquo; that programming is like. I didn&amp;rsquo;t know twenty minutes ago that you could write a complete compositing 2d graphics environment with 26 compositing method in under 400 lines of code.&lt;/p&gt;

&lt;p&gt;My very good friend &lt;a href=&quot;http://twitter.com/swedishnomad&quot;&gt;Martin&lt;/a&gt; once told me how different it is to even think in Japanese and Chinese, how those thoughts can&amp;rsquo;t even be translated into English. Kay&amp;rsquo;s realization that the same holds true for programming is profound in a way I didn&amp;rsquo;t realize before.&lt;/p&gt;

&lt;p&gt;Back in uni I unwittingly participated in an experiment. One of the teachers arranged two lab sessions with the exact same content, and put Java programmers in one and C++ programmers in the other. We were given some UML and were asked to implement it. The real task had actually been to see how fast we could build it (but were of course not told in beforehand that we were being timed); and while I was fastest in my group and it felt like the C++ came out pretty naturally, the result showed that it took me twice as long to write the code than it took on average for the Java coders.&lt;/p&gt;

&lt;p&gt;Ever since then, I&amp;rsquo;ve been worried that even though I feel like I&amp;rsquo;m really fast with my tools, those very tools are holding me back, and I&amp;rsquo;m *really* just a tenth as fast as I could have been with another set of tools. I love ObjC, but it&amp;rsquo;s still C, it still got non-object types, there&amp;rsquo;s still manual memory management, everything is viciously verbose, and meta programming is still more limited than in some non-C languages.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Bret Victor, beast of burden</title>
   <link href="https://nevyn.me/2011/08/07/bret-victor-beast-of-burden/"/>
   <updated>2011-08-07T21:54:00+02:00</updated>
   <id>https://nevyn.me/2011/08/07/bret-victor-beast-of-burden</id>
   <content type="html">&lt;a href=&quot;http://worrydream.com/&quot;&gt;Bret Victor, beast of burden&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Remember that &lt;a href=&quot;http://overooped.com/post/5616388460/this-this-is-how-to-teach-math-the-contrast&quot;&gt;amazing UI math video&lt;/a&gt; I posted a while back? He got a &lt;a href=&quot;http://www.fastcodesign.com/1664508/ex-apple-designer-creates-teaching-ui-that-kills-math-using-data-viz&quot;&gt;nice interview and article in nicecodesign.com&lt;/a&gt;. Apparently it was made by &lt;a href=&quot;http://worrydream.com/&quot;&gt;Bret Victor&lt;/a&gt;. I didn&amp;rsquo;t know who Bret Victor was until a few moments ago, but it seems he&amp;rsquo;s pretty much awesome. &lt;a href=&quot;http://worrydream.com/&quot;&gt;His web site&lt;/a&gt; is rather amazing, and his portfolio page &lt;a href=&quot;http://worrydream.com/Apple/&quot;&gt;about his work at Apple is very funny and very sad&lt;/a&gt; at the same time. He also worked at Push Pop Press; you know, that amazing publishing-revolutionizing company that got black-holed by Big Blue? No, not &lt;a href=&quot;http://www.ibm.com/&quot;&gt;&lt;em&gt;that&lt;/em&gt; Big Blue&lt;/a&gt;, the &lt;a href=&quot;https://www.facebook.com/&quot;&gt;&lt;em&gt;new&lt;/em&gt; Big Blue&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Design patterns in general are a recipe for failure, as they are indicators of flaws in your language. A design pattern inherently violates DRY as it means that many people have written something very similar, but it has not been abstracted out.</title>
   <link href="https://nevyn.me/2011/07/31/design-patterns-in-general-are-a-recipe-for/"/>
   <updated>2011-07-31T08:38:00+02:00</updated>
   <id>https://nevyn.me/2011/07/31/design-patterns-in-general-are-a-recipe-for</id>
   <content type="html">&lt;blockquote&gt;Design patterns in general are a recipe for failure, as they are indicators of flaws in your language. A design pattern inherently violates DRY as it means that many people have written something very similar, but it has not been abstracted out.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;https://plus.google.com/115847272457568211304/posts/1k4bJJbcjkz&quot;&gt;Matthew Maurer&lt;/a&gt; in a thread by Andy Matuschak. Whole comment thread is interesting.
</content>
 </entry>
 
 <entry>
   <title>Low Verbosity KVO</title>
   <link href="https://nevyn.me/2011/07/11/low-verbosity-kvo/"/>
   <updated>2011-07-11T03:50:00+02:00</updated>
   <id>https://nevyn.me/2011/07/11/low-verbosity-kvo</id>
   <content type="html">&lt;h2&gt;DRY Cocoa: SPLowVerbosity&lt;/h2&gt;
&lt;p&gt;I love Objective-C. It&amp;rsquo;s a very explicit language: there is no magic in the language. If you want such magic as distributed objects, model classes generated at runtime, generic change notification, or heck, even referenced counted memory management, you can implement it yourself in a library. It&amp;rsquo;s also by convention a very verbose language. If the method name doesn&amp;rsquo;t say exactly what the method does, the author is doing it wrong.&lt;/p&gt;

&lt;p&gt;However, there are some things we type over and over again every day, whose verbosity does not make the code more readable but only serves to pad the code file with useless characters. These are in particular array and dictionary literals, and formatted strings.&lt;/p&gt;

&lt;p&gt;ObjC wizard &lt;a href=&quot;http://jens.mooseyard.com/&quot;&gt;Jens Alfke&lt;/a&gt; wrote &lt;a href=&quot;https://bitbucket.org/snej/myutilities&quot;&gt;MYUtilities&lt;/a&gt; quite a while ago, and in particular &lt;a href=&quot;https://bitbucket.org/snej/myutilities/src/5f25fbb44fa6/CollectionUtils.h&quot;&gt;CollectionUtils&lt;/a&gt;. This header defines a few very handy macros such as &lt;code&gt;$array(...)&lt;/code&gt;, &lt;code&gt;$dict(...)&lt;/code&gt; and &lt;code&gt;$sprintf(...)&lt;/code&gt;. &lt;code&gt;$array&lt;/code&gt; is simply a shorthand for &lt;code&gt;[NSArray arrayWithObjects:..., nil]&lt;/code&gt; (note the extra &lt;code&gt;nil&lt;/code&gt;, freeing you from typing that yourself every time, and also avoiding a possible crash). &lt;code&gt;$dict&lt;/code&gt; is &lt;code&gt;NSDictionary&lt;/code&gt;&amp;rsquo;s constructor, with the arguments in the right order (key, value, key, value, …). &lt;code&gt;$sprintf&lt;/code&gt; is &lt;code&gt;[NSString stringWithFormat:]&lt;/code&gt;. It may seem trivial, but this simple header has saved me tons and tons of typing, and surely from some silly bugs as well.&lt;/p&gt;

&lt;p&gt;For more C++ friendliness, and to not have to depend on the rest of MYUtilities, &lt;a href=&quot;https://github.com/nevyn/SPSuccinct/blob/master/SPSuccinct/SPLowVerbosity.h&quot;&gt;I wrote my own, called &lt;b&gt;SPLowVerbosity&lt;/b&gt;, with mostly the same things&lt;/a&gt;. The details are not interesting, so I won&amp;rsquo;t list the code; click through if you are curious.&lt;/p&gt;

&lt;p&gt;This is a hack, and while it is very convenient, it is not pretty. Objective-C needs in-language literals for arrays, sets, dictionaries and number objects.&lt;/p&gt;

&lt;p&gt;I do believe that such literals are now inevitable, though. With ARC, what I wrote in the first paragraph is no longer entirely true. Dealloc now magically calls super. Memory management is implicit and part of the language, not explicit and manual. The sanctity of Objective-C&amp;rsquo;s simplicity has been violated, parts of Cocoa has been moved into the language. Moving more parts of Cocoa into the language (e g exposing APIs saying &amp;lsquo;this is the class that should be instantiated when I use a dictionary literal&amp;rsquo;) no longer has a high religious price, and I bet we&amp;rsquo;ll see it at next year&amp;rsquo;s WWDC.&lt;/p&gt;

&lt;h2&gt;Object-Oriented KVO: SPKVONotificationCenter&lt;/h2&gt;
&lt;p&gt;During the past few years, my nose has started to really pick up on a code smell I didn&amp;rsquo;t feel before: unencapsulated concepts. What I mean by that is an API concept or contract that is only visible in comments and documentation, thus only &lt;u&gt;implicit&lt;/u&gt; by knowledge of that documentation when you read code using the API, instead of exposing the concept as a construct the language can help you manage.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;Mutex locking as two separate functions that must always be paired. This is an easy to make mistake, and can be very difficult to fix in complexly branching code. Static analyzation can find such errors, but is in my opinion the wrong approach.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;UITableView&lt;/code&gt;&amp;rsquo;s &lt;code&gt;beginUpdates&lt;/code&gt;/&lt;code&gt;endUpdates&lt;/code&gt; must always be called in a pair, and all the updates you make in that pair must match the changes you are doing to the data source.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NSNotificationCenter&lt;/code&gt; requires you to register for a notification with a {sender, receiver, name} triplet, and reuse that triplet to destroy the subscription. In practice what you have here is an implicit object that you must manage using an awkward object triplet, rather than an actual object.&lt;/li&gt;
&lt;li&gt;Key-Value Observing, with the same defect as with notifications, plus that callbacks are dispatched to the same instance method, forcing you to use the triplet plus a context pointer as the identifier again.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Instead of the above concepts being implicit and only visible in documentation, several of them can be represented as objects and closures, thus making it impossible to do wrong.&lt;/p&gt;

&lt;p&gt;The realization is not new, of course. It&amp;rsquo;s quite common to use &lt;a href=&quot;http://en.wikipedia.org/wiki/Resource_Acquisition_Is_Initialization&quot;&gt;RAII&lt;/a&gt; patterns in C++ to encapsulate concepts in code, giving them an explicit start point and a managed (and deterministic) end point.&lt;/p&gt;

&lt;p&gt;But this is Objective-C, not C++, so we don&amp;rsquo;t have RAII. We do have objects, however, and if we use them to actually represent our objects, we can clean up so much code.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/nevyn/SPSuccinct/blob/master/SPSuccinct/SPKVONotificationCenter.h&quot;&gt;&lt;b&gt;&lt;code&gt;SPKVOObservation&lt;/code&gt;&lt;/b&gt;&lt;/a&gt; is an object that represents a KVO subscription. When this object is created, you know you have your subscription. When this object disappears, you know the subscription is gone. By managing instances of this class like I would any other instance variable, I know I&amp;rsquo;m following KVO&amp;rsquo;s subscribe/unsubscribe contract. (With ARC, I don&amp;rsquo;t even have to manage the ivar).&lt;/p&gt;

&lt;p&gt;&lt;code&gt;SPKVONotificationCenter&lt;/code&gt; also has dispatch to a given selector instead of the catch-all &lt;code&gt;-[NSObject observeValueForKeyPath:ofObject:change:context:]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;(As for solutions for the rest of the examples: a closure can be used for the mutex case if in the current scope, otherwise you might want RAII (which is possible with GNU extensions even in C). For the table view, I&amp;rsquo;d prefer bindings, but doing to-many KVO and bindings can be really hard, so I doubt we&amp;rsquo;ll be seeing it on iOS in the near future.)&lt;/p&gt;

&lt;h2&gt;DRY KVO: SPDepends&lt;/h2&gt;

&lt;p&gt;I love &lt;a href=&quot;http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/KeyValueObserving/&quot;&gt;KVO&lt;/a&gt;. Basically every library I&amp;rsquo;ve ever used has their own implementation of notifications on attribute changes. Such an implementation is of course not difficult, but because there is no generic system for it in other languages/platforms, you can&amp;rsquo;t build a framework for working with change notifications generically. Recognizing that this is a generic concept, and then as good as building it into the language is genius, and has given us wonders such as bindings.&lt;/p&gt;

&lt;p&gt;Outside of their use in bindings where you have tool help, KVO&amp;rsquo;s API is pretty bad, and working with it is almost painfully verbose (made worse by the single callback point, spreading your code out all over the file). What I really wanted to do was to unify the two above sections for a very simple, non-verbose and object oriented approach to KVO. The result is &lt;a href=&quot;https://github.com/nevyn/SPSuccinct/blob/master/SPSuccinct/SPDepends.h&quot;&gt;&lt;b&gt;&lt;code&gt;SPDepends&lt;/code&gt;&lt;/b&gt;&lt;/a&gt;. Magic is taken to the next level; we are approaching dark arts. Whether what I&amp;rsquo;m about to present is actually a good idea or not, I leave as an exercise for the reader. First, the header: &lt;!--Dashboard readers, this code is only visible on the blog entry. Head over to read it.--&gt;&lt;/p&gt;

&lt;script src=&quot;http://gist-it.appspot.com/github/nevyn/SPSuccinct/raw/master/SPSuccinct/SPDepends.h&quot;&gt;&lt;/script&gt;&lt;p&gt;tl;dr: SPDepends lets you give it a list of {object, key path(s)} pairs that one of your properties depend on. When the value of any of the given key paths changes, a given closure is called, letting you recalculate the dependent property (or whatever you want to do). It&amp;rsquo;s about as far as you can go with KVO without actually building bindings.&lt;/p&gt;

&lt;p&gt;There is one additional piece of magic related to memory management (this was before ARC). By providing an owner and associationName, the dependency is assigned as an associatedObject, so that it will automatically be cleaned up when the owner object dies. Defining a dependency again with the same name will also throw away the old dependency. If this is not desired, you can just not provide the association name, and instead manage the returned &lt;code&gt;SPKVOObservation&lt;/code&gt; object on your own.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;
&lt;script src=&quot;http://gist-it.appspot.com/github/nevyn/SPSuccinct/raw/master/SPSuccinct/main.m&quot;&gt;&lt;/script&gt;&lt;p&gt;Output:&lt;/p&gt;
&lt;script src=&quot;https://gist.github.com/1074637.js?file=output.txt&quot;&gt;&lt;/script&gt;&lt;p&gt;Note how short the $depends macro makes all your KVO work. The macro also defines a block-safe &lt;code&gt;self&lt;/code&gt; variable &lt;code&gt;selff&lt;/code&gt; that won&amp;rsquo;t create a reference cycle.&lt;/p&gt;

&lt;p&gt;The equivalent classical KVO code would be many lines longer. However, this macro takes several steps away from how Cocoa code is normally written. Is the syntax too obscure? Is the code still readable for normal human beings?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2011/05/19/this-this-is-how-to-teach-math-the-contrast/"/>
   <updated>2011-05-19T08:35:21+02:00</updated>
   <id>https://nevyn.me/2011/05/19/this-this-is-how-to-teach-math-the-contrast</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/23839605?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;300&quot; frameborder=&quot;0&quot; title=&quot;Interactive Exploration of a Dynamical System&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;THIS. This is how to teach math. The contrast between the Wikipedia page and this application&amp;rsquo;s UI is striking.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>File format plugin API for Spotify?</title>
   <link href="https://nevyn.me/2011/05/15/spotify-plugin/"/>
   <updated>2011-05-15T20:20:00+02:00</updated>
   <id>https://nevyn.me/2011/05/15/spotify-plugin</id>
   <content type="html">&lt;p&gt;At Spotify, we have one and a half day of &amp;lsquo;hackday&amp;rsquo; ('code whatever you want&amp;rsquo;, the '20% time&amp;rsquo; concept from Google) every sprint. Since the past few months have been a bit hectic finishing up &lt;a href=&quot;http://www.spotify.com/se/blog/archives/2011/05/04/spotify-says-hello-to-the-ipod/&quot;&gt;the new 0.5.0 release&lt;/a&gt;, we haven&amp;rsquo;t really had time for that in a while, and thus compensated by having a whole week of crazy hacking this week. I managed to finish two features in that time; one in the iOS client (of which I will only say: Loren Brichter is my hero!), and one in the desktop client: file format plugins.&lt;/p&gt;

&lt;p&gt;Last year, one of my hackday projects was integrating &lt;a href=&quot;http://www.fly.net/~ant/&quot;&gt;blargg&lt;/a&gt;&amp;rsquo;s &lt;a href=&quot;http://www.fly.net/~ant/libs/audio.html#Game_Music_Emu&quot;&gt;Game Music Emu&lt;/a&gt; into Spotify, thus letting you play NES, GameBoy, SNES, Genesis, PC Engine and other console&amp;rsquo;s music files in Spotify. Just a few days of work, and suddenly I had the best console music player app in the world, with playqueue, playlists and whatnot. However, GME is LGPL and we statically link our dependencies, so there was no way I could release it :(&lt;/p&gt;

&lt;p&gt;Thus, I aimed to hit two birds with one stone: by adding a file format plugin API to Spotify, I could a) enable anyone to add support for their favorite file format in Spotify (flac, mikmod, sid, &amp;hellip;) b) let me &lt;a href=&quot;https://github.com/nevyn/GMESPlugin&quot;&gt;release the GME support as an open source plugin&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;However, I&amp;rsquo;ve never designed a plugin API in C before, and if we&amp;rsquo;re going to release it and support it for quite a while, it should be well designed, easy to use, and cover all the basic needs. It&amp;rsquo;s versioned, so it should be simple to add new things to the API, but changing the existing ones might be tricky. So, my question is: do you have any feedback for me on &lt;a href=&quot;https://github.com/nevyn/GMESPlugin/blob/master/local_file_plugin_api.h&quot;&gt;this api&lt;/a&gt;? &lt;!--Dashboard readers: view this post on my blog to see the header embedded.--&gt;&lt;/p&gt;

&lt;p&gt;&lt;script src=&quot;https://gist.github.com/969905.js?file=local_file_plugin_api.h&quot;&gt;&lt;/script&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>When you hand a recursive mutex down from one routine to another, the callee cannot know the state of predicates in the caller. It has to assume there are some, because it cannot verify there aren’t; and if the caller had known that there were no broken predicates, it should have allowed concurrency by unlocking.</title>
   <link href="https://nevyn.me/2011/04/15/when-you-hand-a-recursive-mutex-down-from-one/"/>
   <updated>2011-04-15T09:08:59+02:00</updated>
   <id>https://nevyn.me/2011/04/15/when-you-hand-a-recursive-mutex-down-from-one</id>
   <content type="html">&lt;blockquote&gt;When you hand a recursive mutex down from one routine to another, the callee cannot know the state of predicates in the caller. It has to assume there are some, because it cannot verify there aren&amp;rsquo;t; and if the caller had known that there were no broken predicates, it should have allowed concurrency by unlocking.&lt;/blockquote&gt;&amp;#8212;&lt;p&gt;So, late night hacking trying to fix a stupid bug in Spotify. Find out that all mutexes in the Spotify codebase are recursive. Googleathon about recursive locks. Find interesting stackoverflow answers and blog posts and stuff. Some say recursive locks are Evil, but their arguments aren&amp;rsquo;t super-solid. &lt;a href=&quot;http://groups.google.com/group/comp.programming.threads/msg/d835f2f6ef8aed99?hl=en&amp;amp;pli=1&quot;&gt;Find the guy who wrote recursive locks in pthreads. He has good arguments.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basically: If you don&amp;rsquo;t know exactly the state of the stuff the lock is locking, how can you ever dare to call out to other code that would modify the stuff by taking the recursive lock? If you DO know exactly the state of the stuff the lock is locking, why are you holding the lock?! In other words, don&amp;rsquo;t use recursive locks.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>On the plus side, it’s now easier to add a new contact, and I can decide whether to call somebody or start a chat by hovering over a contact. On the minus side, everything else.</title>
   <link href="https://nevyn.me/2011/03/31/on-the-plus-side-its-now-easier-to-add-a-new/"/>
   <updated>2011-03-31T06:58:23+02:00</updated>
   <id>https://nevyn.me/2011/03/31/on-the-plus-side-its-now-easier-to-add-a-new</id>
   <content type="html">&lt;blockquote&gt;On the plus side, it’s now easier to add a new contact, and I can decide whether to call somebody or start a chat by hovering over a contact. On the minus side, everything else.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://ignorethecode.net/blog/2011/03/30/skype_5/&quot;&gt;ignorethecode on the atrocity that is Skype 5&lt;/a&gt;. It really is a bloated, ugly, misbehaving piece of crap software. It&amp;rsquo;s even worse than the original MSN Messenger for Mac OS, and that&amp;rsquo;s quite an achievement. (Bloated chat UIs are a pet peeve of mine; I had an argument with my friend Sterd about it back before I had successfully converted him to a Mac user (:P) &lt;a href=&quot;http://nevyn.nu/files/pics/msn-bloat.jpg&quot;&gt;using this picture comparing the space efficiency of an MSN for Windows chat window with that of Adium&lt;/a&gt;, and not even using one of the minimalistic Adium themes.)
</content>
 </entry>
 
 <entry>
   <title>iOS 4.3: imp_implementationWithBlock()</title>
   <link href="https://nevyn.me/2011/03/29/ios-43-impimplementationwithblock/"/>
   <updated>2011-03-29T19:32:36+02:00</updated>
   <id>https://nevyn.me/2011/03/29/ios-43-impimplementationwithblock</id>
   <content type="html">&lt;a href=&quot;http://www.friday.com/bbum/2011/03/17/ios-4-3-imp_implementationwithblock/&quot;&gt;iOS 4.3: imp_implementationWithBlock()&lt;/a&gt;&lt;br/&gt;&lt;p&gt;iOS 4.3 has a new objc api: adding method implementations using blocks. &lt;a href=&quot;https://github.com/nevyn/NSObject-AddMethod/blob/master/NSObject%2BAddMethod.h&quot;&gt;I tried to do the same once&lt;/a&gt; using libffi but never had the patience to finish it. This is a prettier solution anyway.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Eskil Steenberg (creator of Indie MMO “Love” - which is also a Voxel world engine of sorts) has told me that he doesn’t bother with small chunks – he just has a single Vertex Array that represents an entire quadrant of his spherical world, and to get around the massive waste of space he actually has to _defrag_ his graphics memory using his own memory management functions running on his GPU, effectively pushing all the active visible triangles together, and leaving a single large clear area of graphics memory for future triangles to be placed. This is the kind of batshit crazy engine programming I’ve come to expect from Eskil, and is not for the faint of heart.</title>
   <link href="https://nevyn.me/2011/03/18/eskil-steenberg-creator-of-indie-mmo-love/"/>
   <updated>2011-03-18T18:27:48+01:00</updated>
   <id>https://nevyn.me/2011/03/18/eskil-steenberg-creator-of-indie-mmo-love</id>
   <content type="html">&lt;blockquote&gt;Eskil Steenberg (creator of Indie MMO “Love” - which is also a Voxel world engine of sorts) has told me that he doesn&amp;rsquo;t bother with small chunks – he just has a single Vertex Array that represents an entire quadrant of his spherical world, and to get around the massive waste of space he actually has to _defrag_ his graphics memory using his own memory management functions running on his GPU, effectively pushing all the active visible triangles together, and leaving a single large clear area of graphics memory for future triangles to be placed. This is the kind of batshit crazy engine programming I&amp;rsquo;ve come to expect from Eskil, and is not for the faint of heart.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://forums.introversion.co.uk/defcon/introversion/viewtopic.php?p=97890#97890&quot;&gt;Defcon - Minecraft + Physics = Awesome&lt;/a&gt; (how can you &lt;em&gt;not&lt;/em&gt; read an article with that title?)
</content>
 </entry>
 
 <entry>
   <title>UIKit: Hide the keyboard without a reference to the currently focused text field</title>
   <link href="https://nevyn.me/2011/03/16/uikit-hide-the-keyboard-without-a-reference-to/"/>
   <updated>2011-03-16T23:14:00+01:00</updated>
   <id>https://nevyn.me/2011/03/16/uikit-hide-the-keyboard-without-a-reference-to</id>
   <content type="html">&lt;p&gt;Googling for answers to UIKit or iOS/iPhone programming problems today resembles googling for answers to JavaScript problems. There is so much horribly, horribly broken code out there, being promoted as the way to do things. &lt;/p&gt;

&lt;p&gt;Ranting aside, today&amp;rsquo;s problem is writing your own view controller container, and noticing that focused UI elements don&amp;rsquo;t dismiss their keyboard in response to viewWillDisappear: or similar. If this was MacOS, or AppStore approval didn&amp;rsquo;t exist, you&amp;rsquo;d just do [self.view.window.firstResponder resignFirstResponder]. You can&amp;rsquo;t do that though, firstResponder is private on window, don&amp;rsquo;t ask me why. &lt;a href=&quot;http://stackoverflow.com/questions/1823317/how-do-i-legally-get-the-current-first-responder-on-the-screen-on-an-iphone/2887690#2887690&quot;&gt;cdyson37 on StackOverflow&lt;/a&gt; however, found the public API &lt;code&gt;-[UIView(UITextField) endEditing:]&lt;/code&gt; hidden in a category in UITextField.h, that supposedly looks recursively through the receiver&amp;rsquo;s children for the first responder, and if found, resigns it. Perfect! A copy-pasteable code snippet for lazy googlers:&lt;/p&gt;

&lt;strike&gt;&lt;pre&gt;&lt;code&gt;[self.view endEditing:YES]&lt;/code&gt;&lt;/pre&gt;&lt;/strike&gt;

&lt;p&gt;&lt;b&gt;UPDATE!&lt;/b&gt; Turns out I&amp;rsquo;m an idiot. While the above works and is correct, there is a better way. You don&amp;rsquo;t NEED to have access to the first responder, because you can use a nil targeted action instead, which will walk the responder chain, starting at the first responder. So a MUCH prettier way of hiding the keyboard is:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Thanks to &lt;a href=&quot;https://twitter.com/bigzaphod/status/230744266509516800&quot;&gt;BigZaphod&lt;/a&gt; for that code snippet. I haven&amp;rsquo;t used sendAction: since I did Mac coding, before I suddenly became an almost-iOS-only coder in 2008. The responder chain is so handy, I must start using it more in my iOS coding…&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2011/02/11/nerdery-at-its-best-no-better-way-to-put-your-old/"/>
   <updated>2011-02-11T04:08:10+01:00</updated>
   <id>https://nevyn.me/2011/02/11/nerdery-at-its-best-no-better-way-to-put-your-old</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/dmoDLyiQYKw?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Nerdery at its best. No better way to put your old computers to use than to make them sing! (via &lt;a href=&quot;http://blog.keendra.com/&quot;&gt;Keendra&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Rasmus Andersson: Why I wrote a programmer's text editor</title>
   <link href="https://nevyn.me/2011/01/21/rasmus-andersson-why-i-wrote-a-programmers-text/"/>
   <updated>2011-01-21T07:33:25+01:00</updated>
   <id>https://nevyn.me/2011/01/21/rasmus-andersson-why-i-wrote-a-programmers-text</id>
   <content type="html">&lt;a href=&quot;http://blog.hunch.se/post/2843044421/why-i-wrote-a-programmers-text-editor&quot;&gt;Rasmus Andersson: Why I wrote a programmer's text editor&lt;/a&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://blog.hunch.se/post/2843044421/why-i-wrote-a-programmers-text-editor&quot; class=&quot;tumblr_blog&quot;&gt;rsms&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;
bla bla bla bla bla the less productive is the result. There’s an unfortunate common pattern when people open up a new application for the first time: They start by going into the “Preferences” UI and dig around like it was a game of Zelda. Instead Kod will have a very limited set of preferences which can be configured through a bla bla bla bla
&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;YES! I need to do that! The preferences dialog for my next productivity app, there won&amp;rsquo;t be a standard Cocoa control in sight! It&amp;rsquo;ll be an RPG! And you have to explore the game world for *hours* to find the most obscure preferences! Want to change the default app to use for Frobnitzing? It&amp;rsquo;s right there, first room. Want to configure the font size of the auxiliary extension panel? You&amp;rsquo;re going to have AN ADVENTURE finding it.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Media keys hook in Mac OS X</title>
   <link href="https://nevyn.me/2011/01/04/mediakeys/"/>
   <updated>2011-01-04T18:42:00+01:00</updated>
   <id>https://nevyn.me/2011/01/04/mediakeys</id>
   <content type="html">&lt;p&gt;There is no nice (or is it even official?) way of detecting and handling the media keys on the user&amp;rsquo;s keyboard. One can intercept events with type NSSystemDefined and subtype 8 in -[NSApplication sendEvents:], but this has major problem: any other applications that listen to the media keys will receive these events too. This means for example that if only Spotify is running and you want to pause your music, iTunes will start when you press play/pause. If you have VLC running in the background, it will also start playing.&lt;/p&gt;

&lt;p&gt;Apple has solved this problem internally by having their media key using applications cooperate and resign media key controls to the application that was in the foreground most recently. However, there is no way for third party applications to join this cooperation.&lt;/p&gt;

&lt;p&gt;I have implemented a workaround that does this using a CGEventTap in the Cocoa class &lt;a href=&quot;https://github.com/nevyn/SPMediaKeyTap&quot;&gt;SPMediaKeyTapThe advantage of using an event tap instead of just intercepting the events in -[NSApplication sendEvent:] is that you have the power to throw the event away. This way, we can decide to &amp;ldquo;own&amp;rdquo; the media keys and be the only app that listens to them.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This class is smart enough to resign the media key event tap whenever another application that we know will want to use the media keys becomes active, and keeps track of which media key using app was recently started.&lt;/p&gt;

&lt;p&gt;If everyone uses this class, and everyone add each other&amp;rsquo;s bundle ID to that list of whitelisted bundle ID&amp;rsquo;s, we&amp;rsquo;ll get nice behavior from all apps. An even better solution would be if &lt;a href=&quot;http://www.openradar.me/8817368&quot;&gt;Apple provided a way of acquiring the media keys&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2010/12/12/thedevilswater/"/>
   <updated>2010-12-12T08:08:53+01:00</updated>
   <id>https://nevyn.me/2010/12/12/thedevilswater</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://thedevilswater.tumblr.com/post/1233352532&quot;&gt;thedevilswater&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img src=&quot;http://68.media.tumblr.com/tumblr_l9p4yad7R31qao2of.jpg&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://68.media.tumblr.com/tumblr_l9p56a3LcS1qao2of.jpg&quot; height=&quot;332&quot; width=&quot;500&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://68.media.tumblr.com/tumblr_l9p86tm8wb1qauekc.jpg&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://68.media.tumblr.com/tumblr_l9p8h1sLBA1qbqmpx.jpg&quot;/&gt;&lt;/p&gt;
&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>maybe half of spotifys dev team is completely</title>
   <link href="https://nevyn.me/2010/11/17/maybe-half-of-spotifys-dev-team-is-completely/"/>
   <updated>2010-11-17T05:39:00+01:00</updated>
   <id>https://nevyn.me/2010/11/17/maybe-half-of-spotifys-dev-team-is-completely</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/tumblr_lbzt92zY4j1qz4vmko1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Maybe half of Spotify&amp;rsquo;s dev team is completely addicted to Minecraft. We spent maybe six hours last night &lt;a href=&quot;http://dl.dropbox.com/u/6775/sunrise%20spotify.jpg&quot;&gt;making this&lt;/a&gt; on our own multiplayer server. It doesn&amp;rsquo;t come through very well in a still picture, but that thing there is *huge*. (For perspective, &lt;a href=&quot;http://dl.dropbox.com/u/6775/spotify%20logo%20being%20constructed.jpg&quot;&gt;this is from during the construction process&lt;/a&gt; (or rather the first; we redid the whole thing after that due to mistakes))&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>List of capabilities web apps need but can't currently have </title>
   <link href="https://nevyn.me/2010/11/08/list-of-capabilities-web-apps-need-but-cant/"/>
   <updated>2010-11-08T17:20:00+01:00</updated>
   <id>https://nevyn.me/2010/11/08/list-of-capabilities-web-apps-need-but-cant</id>
   <content type="html">&lt;p&gt;I despise using web apps. The only ones I&amp;rsquo;ve found that are even at least useful are made by Google, and Google&amp;rsquo;s web apps are as aesthetically pleasing and user friendly as a Windows 98 shareware app. But even if they were made with the same care and attention to detail as Mac apps by Cultured Code or Omni Group, they&amp;rsquo;d still have a long way to go before being as useful and productive as a native desktop app, because they&amp;rsquo;d be missing some essential features the browser can&amp;rsquo;t give them. This is my list of these features, as I think of them.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;Undo/redo for non-text things (that is, JS hooks for undo)&lt;/li&gt;
&lt;li&gt;Pasteboard for anything but text. Important: application-specific objects like e g &amp;ldquo;calendar event&amp;rdquo; in an iCal like app, not just a generic group of common media (like pictures, audio, video, styled text, &amp;hellip;), although that would be really nice as a stop-gap measure&lt;/li&gt;
&lt;li&gt;Host application menu integration, with a standardized way to handle keyboard shortcuts&lt;/li&gt;
&lt;li&gt;A windowing concept of &amp;ldquo;application&amp;rdquo; with several windows and OS hooks (i e dock icon or task bar group)&lt;/li&gt;
&lt;li&gt;Context menus&lt;/li&gt;
&lt;li&gt;Some document store model that is shareable between web apps. Example: if I have an image, I want to be able to open it in both a nice editor, and a nice viewer, which might be two completely separate apps by completely separate vendors. &lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;There is one things a web app can&amp;rsquo;t *ever* have without doing tons and tons of work, and that is behaving like a native app. Google has fake context menus in their apps for example, but they don&amp;rsquo;t contain the options normally available when context-clicking text in Mac OS; for example, right clicking a word in Wave won&amp;rsquo;t let me look it up in the dictionary, speak it, nor do spelling corrections on it. Moving down a list using arrow keys is a &lt;em&gt;very&lt;/em&gt; standard feature in list views in native apps; in Gmail this is an advanced feature you have to turn on, &lt;em&gt;and&lt;/em&gt; you have to use letter keys to do the navigation (j, k for down, up).&lt;/p&gt;

&lt;p&gt;I originally made this list in Wave over a year ago; moving it here since Wave is dying. The list is made a little bit antique by the introduction of the iPad; three of the items might now fall under the category of &amp;ldquo;things a native app might not need&amp;rdquo;.&lt;/p&gt;

&lt;p&gt;The big wins you get with web apps are all in deployment. Deploy-once, instant upgrades, cross-platform. You can argue that sacrificing usability for easier deployment is worth it, but I&amp;rsquo;d rather do it the other way around.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2010/08/22/michael-casteel-is-my-new-hero-got-mom-a-13-mbp/"/>
   <updated>2010-08-22T01:53:33+02:00</updated>
   <id>https://nevyn.me/2010/08/22/michael-casteel-is-my-new-hero-got-mom-a-13-mbp</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://casteel.org&quot;&gt;Michael Casteel&lt;/a&gt; is my new hero! Got mom a 13&amp;quot; MBP a while ago to replace a Performa, but she missed Klondike and none of the other osx card games I had found were as good. Turns out Casteel ported his original Klondike to OS X! It&amp;rsquo;s originally a game for the Plus, I hadn&amp;rsquo;t even considered that he still worked on it.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Andrey Subbotin: iPhone 4 @2x assets made easy</title>
   <link href="https://nevyn.me/2010/08/12/andrey-subbotin-iphone-4-2x-assets-made-easy/"/>
   <updated>2010-08-12T00:39:25+02:00</updated>
   <id>https://nevyn.me/2010/08/12/andrey-subbotin-iphone-4-2x-assets-made-easy</id>
   <content type="html">&lt;a href=&quot;http://subbotin.me/post/862376241/ios-png-check&quot;&gt;Andrey Subbotin: iPhone 4 @2x assets made easy&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;
&lt;p&gt;We were updating our app’s graphics for the gorgeous screen of iPhone 4 the other day and it was a pain to update all the 163 PNG files we had and not to miss a thing.&lt;/p&gt;

&lt;p&gt;So, I’ve come up with a simple Ruby script that checks that for each @1x image you have a properly sized @2x image.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Man, such a life saver. &lt;code&gt;sudo gem install ios-png-check&lt;/code&gt; is the path to bliss.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>One-line closures in ObjC without blocks; or, NSInvocation fun</title>
   <link href="https://nevyn.me/2010/08/07/nsinvocation/"/>
   <updated>2010-08-07T05:53:00+02:00</updated>
   <id>https://nevyn.me/2010/08/07/nsinvocation</id>
   <content type="html">&lt;!--Hey dashboard readers: You won't see some of the inline code. Why don'tcha &lt;a href=&quot;http://overooped.com/post/913725384/nsinvocation&quot;&gt;hop over to the full post&lt;/a&gt;?&amp;ndash;&gt;

&lt;p&gt;
	Objective-C is wonderfully dynamic. One of my favorite wonders is the invocation grabber. I never paid them much attention at first, only using them when I explicitly needed an NSInvocation for some API. Then, I started &lt;a href=&quot;http://www.spotify.com/about/jobs/&quot;&gt;working at Spotify&lt;/a&gt; and found a certain header file; suddenly, I saw the light. 
&lt;/p&gt;

&lt;p&gt;
	If you know what that an invocation grabber is, you can just skip down to the code. For the rest, I&amp;rsquo;ll elaborate.&lt;br/&gt;
Shortcut: &lt;a href=&quot;#juicy&quot;&gt;Just gimme the juicy bits, I&amp;rsquo;m impatient!&lt;/a&gt;
&lt;/p&gt;

&lt;h2&gt;NSInvocations&lt;/h2&gt;

&lt;p&gt;
	An NSInvocation is a standard Foundation class that wraps four pieces of information all related to calling a method:
&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;code&gt;target&lt;/code&gt;, the object on which to call the method&lt;/li&gt;
&lt;li&gt;&lt;code&gt;selector&lt;/code&gt;, the name of the method to be called&lt;/li&gt;
&lt;li&gt;&lt;code&gt;methodSignature&lt;/code&gt;, a class that describes the return type, and the type of all the arguments, of a method.&lt;/li&gt;
&lt;li&gt;… and finally it contains all the arguments to call the method with.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;
 	Or, in the form you are used to see these parts in code:
&lt;/p&gt;

&lt;code&gt;[target partOfSelector:argument1 secondPartOfSelector:argument2]&lt;/code&gt;

&lt;p&gt;
	Normally, these are kind of tricky to construct, particularly the method signature. However, Objective-C&amp;rsquo;s message forwarding mechanism practically gives them to us for free!
&lt;/p&gt;

&lt;h2&gt;Message forwarding?&lt;/h2&gt;

&lt;p&gt;(Short clarification detour: In Objective-C, you almost never call methods directly; instead, you send messages to objects, and the receiver almost always responds to the message by calling the method corresponding to that message on itself. This is why the terms &amp;lsquo;method calling&amp;rsquo; and 'messaging&amp;rsquo; are often used interchangeably in ObjC, but they are not the same thing.)
&lt;/p&gt;


&lt;p&gt;
	When you call a method on an instance whose class does not define that method, you don&amp;rsquo;t get a compiler error as in C++. When you then run your code, the runtime assumes that you&amp;rsquo;re trying to do &lt;em&gt;&lt;a href=&quot;http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtForwarding.html&quot;&gt;message forwarding&lt;/a&gt;&lt;/em&gt;. Message forwarding means that the receiver of the message will not itself handle the message, but is only a proxy for &lt;em&gt;some other&lt;/em&gt; object. One common example is &lt;a href=&quot;http://developer.apple.com/mac/library/documentation/cocoa/conceptual/distrobjects/DistrObjects.html&quot;&gt;Distributed Object&lt;/a&gt;, where you&amp;rsquo;re sending messages (calling methods) on objects in other applications, or even other applications on other computers.
&lt;/p&gt;

&lt;h2&gt;Writing an invocation grabber&lt;/h2&gt;

&lt;p&gt;
	This is where the &lt;em&gt;invocation grabber&lt;/em&gt; comes in. We can create a class that does nothing but listen for message forwarding requests, and when it receives one, asks the &lt;code&gt;target&lt;/code&gt; what it would respond to such a request. Given this answer, an NSInvocation can be created which matches the invocation of the message we sent to it.
&lt;/p&gt;

&lt;p&gt;
	Consider the following example:
&lt;/p&gt;

&lt;script src=&quot;http://gist.github.com/511181.js?file=gistfile4.m&quot;&gt;&lt;/script&gt;&lt;p&gt;We define a MyClass, create an instance of it, then create an invocationGrabber with that new MyClass as its &lt;em&gt;target&lt;/em&gt;, and then try to call -[MyClass areTheNewViewersGoneYet:] on the grabber. Finally, we fetch the result of the invocation grabbing.&lt;/p&gt;

&lt;p&gt;Note that line 9 &lt;strong&gt;does not call&lt;/strong&gt; &lt;code&gt;areTheNewViewersGoneYet:&lt;/code&gt; on your new MyClass. Instead, the grabber intercepts that call and gives us an NSInvocation &lt;strong&gt;that would have called that line just as we wrote it&lt;/strong&gt;, but some time in the future instead of now. This is like a one-line &lt;a href=&quot;http://thirdcog.eu/pwcblocks/#whatareblocks&quot;&gt;closure&lt;/a&gt;, as the code, state and variables you send to the grabber are saved until later, just waiting to be executed.&lt;/p&gt;

&lt;p&gt;
	Our invocation grabber does not implement a method with the selector &lt;code&gt;areTheNewViewersGoneYet:&lt;/code&gt;. Given just the invocation grabber and that selector, the runtime would have no idea how to call it. Does it return a bool, in which case it will need to reserve four bytes for the return value? Or maybe a CGRect, in which case 16 bytes are needed.
&lt;/p&gt;

&lt;p&gt;So to figure this (and related things) out, the runtime will begin by asking for the method signature for the selector being sent with the message with -[NSObject methodSignatureForSelector:(SEL)]. Our SPInvocationGrabber itself has no idea, so we implement that method to ask the &lt;em&gt;target&lt;/em&gt;:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;- (NSMethodSignature *)methodSignatureForSelector:(SEL)inSelector {
	return [_target methodSignatureForSelector:inSelector];
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
	With the signature in hand, the runtime will now give you an NSInvocation and ask you to take care of invocation with &lt;code&gt;-[NSObject forwardInvocation:]&lt;/code&gt;. In our case, we&amp;rsquo;ll just stash away the invocation for later use. In the example above, we created a &lt;code&gt;yellowDuck&lt;/code&gt; and sent it as an argument to &lt;code&gt;areTheNewViewersGoneYet:&lt;/code&gt;, and if we delay our execution of the NSInvocation, that duck might be released with the nearest NSAutoreleasePool. Thus, in forwardInvocation, we ask the NSInvocation to retain all its arguments. Don&amp;rsquo;t worry, when we release the NSInvocation, it will release those arguments too.
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;- (void)forwardInvocation:(NSInvocation *)anInvocation {
	[anInvocation retainArguments];
	anInvocation.target = _target;
	self.invocation = anInvocation;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;
  That&amp;rsquo;s basically all there is to it! Some memory management and accessor methods, and we have our own invocation grabber.
&lt;/p&gt;

&lt;h2&gt;&lt;a name=&quot;juicy&quot;&gt;So what&amp;rsquo;s all the fuss about?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://gist.github.com/511181&quot;&gt;Let&amp;rsquo;s start out with some code&lt;/a&gt;.&lt;/p&gt;

&lt;script src=&quot;http://gist.github.com/511181.js?file=NSObject%2BSPInvocationGrabbing.h&quot;&gt;&lt;/script&gt;&lt;p&gt;That&amp;rsquo;s the header. It has a few categories on NSObject, which is where it&amp;rsquo;s at. (A category on NSObject means that we are adding methods on almost &lt;em&gt;all other classes&lt;/em&gt;; these three methods can be called on &lt;em&gt;any&lt;/em&gt; instance of a class inheriting from NSObject.)&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-[NSObject grab]&lt;/code&gt; gives you an invocation grabber for the receiver, so that instead of &lt;code&gt;[[[SPInvocationGrabber alloc] initWithObject:foo] autorelease]&lt;/code&gt; we can just say &lt;code&gt;[foo grab]&lt;/code&gt;. It doesn&amp;rsquo;t sound like much, but it goes a long way toward taking the hassle out of doing magic.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-[NSObject invokeAfter:]&lt;/code&gt; will give you a proxy object that, instead of performing the method you call on it &lt;em&gt;right away&lt;/em&gt;, instead invokes it &lt;em&gt;later&lt;/em&gt;. Again, doesn&amp;rsquo;t sound like much, but man, &lt;code&gt;-[NSObject performSelector:withObject:afterDelay:]&lt;/code&gt; is a mouthful, and it doesn&amp;rsquo;t work with non-object arguments or calls that take more than two arguments. Suddenly delayed execution is &lt;em&gt;simple&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;-[NSObject nextRunloop]&lt;/code&gt; is the same as &lt;code&gt;invokeAfter:&lt;/code&gt; with a zero second delay. This is the common idiom for having something executed the next runloop (or at least as soon as possible after the current runloop).

&lt;/p&gt;&lt;p&gt;I&amp;rsquo;ll show you what it can do with some examples:

&lt;script src=&quot;http://gist.github.com/511181.js?file=gistfile3.m&quot;&gt;&lt;/script&gt;&lt;/p&gt;&lt;p&gt;A: Yeah yeah, we could have set an animation delegate, and animation did finish selector, and from &lt;em&gt;there&lt;/em&gt; called removeFromSuperview. That&amp;rsquo;s at least six lines of code. Now we did it with &lt;em&gt;one&lt;/em&gt;: &lt;code&gt;[[flash invokeAfter:duration+0.1] removeFromSuperview]&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;B: Some things work better if you call them &lt;em&gt;very soon&lt;/em&gt; instead of right away. Sometimes it&amp;rsquo;s an animation that needs to have started before we can begin modifying it. Other times it&amp;rsquo;s a timing issue and creating a delegate or notification is a lot of hassle for something that will just work one runloop from now.&lt;/p&gt;

&lt;p&gt;C: Hey, who thought animations could be so simple? Don&amp;rsquo;t worry if the view controller that owns that table goes away before the animation finished: the invocation grabber retains both the table view and the arguments, so for 450 milliseconds, those objects *will* remain.&lt;/p&gt;

&lt;p&gt;There&amp;rsquo;s more magic, but I&amp;rsquo;ll go through that after the implementation:&lt;/p&gt;
&lt;script src=&quot;http://gist.github.com/511181.js?file=NSObject%2BSPInvocationGrabbing.m&quot;&gt;&lt;/script&gt;&lt;p&gt;First, stack trace saving. You have no idea how useful this is. If you do the old &lt;code&gt;-[NSObject performSelector:withObject:afterDelay:]&lt;/code&gt; trick, you&amp;rsquo;ll note that sometimes you crash. You&amp;rsquo;ll also note that below the method you just delayed execution of, you have no useful backtrace. Fret not, for execinfo.h is here to save your day! When an SPInvocationGrabber is created, the names of the symbols on the stack are saved away with &lt;code&gt;-[saveBacktrace]&lt;/code&gt;. Then, if you use the grabber&amp;rsquo;s invoke instead of &lt;code&gt;-[NSInvocation invoke]&lt;/code&gt;, the invocation will be wrapped in a try-catch, and in the event of an exception, the old backtrace will be printed, showing you the culprit that scheduled this broken future invocation.&lt;/p&gt;

&lt;p&gt;As for those convenient categories on NSObject, they are ridiculously simple. All &lt;code&gt;-[invokeAfter:]&lt;/code&gt; does is to create a grabber, schedule it for execution later with an NSTimer (before it has grabbed anything, even!), and then returns it, ready to grab something for later execution.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;ve tried to create &lt;code&gt;-[NSObject invokeOnMainThread]&lt;/code&gt; and &lt;code&gt;-[NSObject invokeOnBackgroundThread]&lt;/code&gt;, but those are trickier, because you can&amp;rsquo;t just schedule the invocation and then return the grabber, as &lt;code&gt;-[NSObject performSelectorOnMainThread:withObject:waitUntilDone:]&lt;/code&gt; would perform &lt;code&gt;-[invoke]&lt;/code&gt; &lt;em&gt;immediately&lt;/em&gt;, giving us no time to do the invocation grabbing, as with &lt;code&gt;-[invokeAfter:]&lt;/code&gt;. It&amp;rsquo;s easy to do on your own though, even without a convenience method:&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;
  id grabber = [foo grab];
  [grabber doSomethingFancyThatMustBeDoneOnMainThread:object someArg:wohoo];
  [grabber performSelectorOnMainThread:@selector(invoke) withObject:nil waitUntilDone:NO];
&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;Enjoy, and do post your own invocation tricks in the comments and reblogs.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update 20100828&lt;/b&gt;: As you can see from the gist, I&amp;rsquo;ve updated it with background and main thread invocation (&lt;a href=&quot;http://gist.github.com/511181#file_main.m&quot;&gt;example usage below&lt;/a&gt;); thanks to Adam Crume in the comments for the idea and half of the code.&lt;/p&gt;

&lt;script src=&quot;https://gist.github.com/511181.js?file=main.m&quot;&gt;&lt;/script&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2010/07/09/thedailywhat-nerdy-animation-of-the-day/"/>
   <updated>2010-07-09T05:34:44+02:00</updated>
   <id>https://nevyn.me/2010/07/09/thedailywhat-nerdy-animation-of-the-day</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/13118504?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;225&quot; frameborder=&quot;0&quot; title=&quot;Super Mario Bros.&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://thedailywh.at/post/782111829/nerdy-animation-of-the-day-sidewalk-mario-bros&quot; class=&quot;tumblr_blog&quot;&gt;thedailywhat&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Nerdy Animation of the Day:&lt;/strong&gt; “&lt;a href=&quot;http://vimeo.com/13118504&quot;&gt;Sidewalk Mario Bros&lt;/a&gt;” — A graffiti-style animated Super Mario Bros. speedrun “played” alongside a concrete crash barrier.&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://tinycartridge.com/post/777324626/sidewalk-mario-bros-by-surfap-a-speedrun-of-the&quot;&gt;tinycartridge&lt;/a&gt;.]&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Reblog 4 awesomeness! How did they even do that?!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>rentzsch.tumblr.com: Magic Feet</title>
   <link href="https://nevyn.me/2010/07/01/rentzschtumblrcom-magic-feet/"/>
   <updated>2010-07-01T16:44:48+02:00</updated>
   <id>https://nevyn.me/2010/07/01/rentzschtumblrcom-magic-feet</id>
   <content type="html">&lt;a href=&quot;http://rentzsch.tumblr.com/post/755379830/magic-feet&quot;&gt;rentzsch.tumblr.com: Magic Feet&lt;/a&gt;&lt;br/&gt;&lt;blockquote&gt;
&lt;p&gt;The experiment:&lt;/p&gt; &lt;p&gt;Step on a nail. Make sure it punctures your shoe and penetrates your foot.&lt;/p&gt; &lt;p&gt;(You probably want to make sure you’re up-to-date on your tetanus shot first.)&lt;/p&gt; &lt;p&gt;Do it again. Yes, with the blood. Doesn’t matter if you wait a week or a couple of years in-between runs.&lt;/p&gt; &lt;p&gt;Now the fun starts.&lt;/p&gt;

&lt;p&gt;On the third run, &lt;em&gt;you’ll catch yourself&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;You’ll develop what roofers call “magic feet” — you’ll learn to recognize the sensation of a nail driving through the sole of your shoe.&lt;/p&gt;

&lt;p&gt;I have magic feet.&lt;/p&gt;

&lt;p&gt;And I just took a screenshot of my unsaved work as an app crashed.&lt;/p&gt;

&lt;p&gt;That’s probably the closest software analog to &lt;em&gt;magic feet&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Sometimes, an app starts to beachball mysteriously. Most often it&amp;rsquo;s Safari. It&amp;rsquo;s a special kind of beachball. You can feel that it will lead to a crash. Cmd-shift-3, open TextEdit, start typing whatever you were typing in Safari into TextEdit manually copying the text, watch Safari crash, reopen, open windows from last session, paste from TextEdit. The only thing that saved your work was an ungodly slow cache miss because your harddrive sucks.&lt;/p&gt;

&lt;p&gt;I should just get MarsEdit. And a harddrive with a speed switch.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Howto: Restore Springboard icon positions after iTunes botches them</title>
   <link href="https://nevyn.me/2010/06/14/howto-restore-springboard-icon-positions-after/"/>
   <updated>2010-06-14T07:30:00+02:00</updated>
   <id>https://nevyn.me/2010/06/14/howto-restore-springboard-icon-positions-after</id>
   <content type="html">&lt;p&gt;You&amp;rsquo;re syncing from another computer. You&amp;rsquo;re restoring from a backup. iTunes has a bad day. Whatever reason, iTunes decided to resync all your apps, and replace them in your springboard in alphabetical order. I don&amp;rsquo;t know about you, but I don&amp;rsquo;t find that particularly helpful. I don&amp;rsquo;t know *how* many times I&amp;rsquo;ve meticulously sorted at least the three first Springboard pages with my most often used apps (which doesn&amp;rsquo;t sound like much, but *damn* does that UI suck!).&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Expert instructions&lt;/b&gt;&lt;br/&gt;
Get your ~/Library/Preferences/com.apple.springboard.plist from your old device or a backup, and replace the plist on your new device or new install. Nothing of much importance is in that file, so it should be fine to just replace. If you&amp;rsquo;re worried, just open the two files in Property List Editor and copy the array over; it&amp;rsquo;s just an array of array of application identifiers under the keypath iconState.iconLists. Respring/`killall SpringBoard` when done.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Noobie instructions&lt;/b&gt;&lt;br/&gt;Scenario: You have a recent backup of your phone/pod/pad in Time Machine. You have your device with the botched icon ordering. You want to fix things.&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Make a backup of your device. This way, we will know relatively certainly which backup belongs to this particular device.&lt;/li&gt;
&lt;li&gt;In Finder, navigate to your home folder &amp;gt; Library &amp;gt; Application Support &amp;gt; MobileSync &amp;gt; Backups&lt;/li&gt;
&lt;li&gt;Sort by Modified, newest at the top. The topmost one (something like &amp;ldquo;74e39ee0ac6b69af6f57e213cf5c6b95e5fd787f&amp;rdquo;, perhaps longer and with dashes) will be your device&amp;rsquo;s backup. Move this one to your desktop.&lt;/li&gt;
&lt;li&gt;Enter Time Machine for this folder. Restore the folder you moved away before to yesterday&amp;rsquo;s version or something&lt;/li&gt;
&lt;li&gt;Download the &lt;a href=&quot;http://supercrazyawesome.com/&quot;&gt;iPhone Backup Extractor&lt;/a&gt; app&lt;/li&gt;
&lt;li&gt;Open that app, click the button, choose the name of your device with the most recent date, and confirm&lt;/li&gt;
&lt;li&gt;At the bottom, there is an &amp;ldquo;iPhone OS Files&amp;rdquo; entry. Extract this to your desktop.&lt;/li&gt;
&lt;li&gt;Now, your device need to be jailbroken. If it isn&amp;rsquo;t already, get &lt;a href=&quot;http://spiritjb.com&quot;&gt;Spirit JB&lt;/a&gt;, run it, and jailbreak your device (it&amp;rsquo;ll only take seconds)&lt;/li&gt;
&lt;li&gt;If you just jailbroke your device, or if you don&amp;rsquo;t have SSH enabled, go into Cydia on your device, wait for it to restart, and then install OpenSSH. &lt;a href=&quot;http://www.cultofmac.com/how-to-change-your-iphones-default-ssh-password/20871&quot;&gt;You must change your default password&lt;/a&gt;, or &lt;em&gt;bad things will invariably happen&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;Get &lt;a href=&quot;http://www.panic.com/transmit/&quot;&gt;Transmit&lt;/a&gt; or another good SFTP client.&lt;/li&gt;
&lt;li&gt;Make sure you&amp;rsquo;re on the same wifi as your device.&lt;/li&gt;
&lt;li&gt;In your SFTP client, connect to (name of your device, with spaces replaced with dashes).local. My device is called Canvas, so I connected to Canvas.local. The connection method should be SFTP, the username should be &amp;lsquo;mobile&amp;rsquo;, and the password is your mobile password, as changed above or previously. By default it is 'alpine&amp;rsquo;, but you REALLY SHOULD NOT USE THIS PASSWORD, as it means anyone can connect to your phone, and e g read and send SMSes.&lt;/li&gt;
&lt;li&gt;You&amp;rsquo;ll end up in your mobile user&amp;rsquo;s home folder. Navigate to Library &amp;gt; Preferences.&lt;/li&gt;
&lt;li&gt;From your desktop, get the file iPhone OS Files &amp;gt; Library &amp;gt; Preferences &amp;gt; com.apple.springboard.plist, and upload and replace the one on your device.&lt;/li&gt;
&lt;li&gt;Respring or reboot the device. Icon positions should be restored.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;I haven&amp;rsquo;t tested the noobie instructions; just mail me at &lt;a href=&quot;mailto:joachimb@gmail.com&quot;&gt;joachimb@gmail.com&lt;/a&gt; if they don&amp;rsquo;t work and we&amp;rsquo;ll figure it out.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Maxwell's Equations</title>
   <link href="https://nevyn.me/2010/05/27/maxwells-equations/"/>
   <updated>2010-05-27T08:09:17+02:00</updated>
   <id>https://nevyn.me/2010/05/27/maxwells-equations</id>
   <content type="html">&lt;a href=&quot;http://www.irregularwebcomic.net/1420.html&quot;&gt;Maxwell's Equations&lt;/a&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://science.tumblr.com/post/634626186/maxwells-equations&quot; class=&quot;tumblr_blog&quot;&gt;science&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Irregular Webcomic:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Imagine you are James Clerk Maxwell, in 1865, formulating your theory of electricity and magnetism, and writing down your four equations for the first time in history. You write down the terms of these equations based on your experiments with electric batteries, bits of wire, and magnets. (…) You take the values you measured for εo and μo, multiply them together, take the square root, and then take the reciprocal. The answer is a speed, so it has units of speed, in this case metres per second. And the answer is very close to 300,000,000 metres per second. Converted into miles, that’s a tad over 186,000 miles per second. Being James Clerk Maxwell, and a brilliant physicist, you immediately recognise what this number is.&lt;/p&gt;
&lt;p&gt;The speed of light. (…)&lt;/p&gt;
&lt;p&gt;When you were writing down your equations, you were thinking about electricity and magnetism. Light was the farthest thing from your mind. You had not the slightest clue (and nor did anyone else) that light was related to elecricity or magnetism. But there it is, falling out of your equations.&lt;/p&gt;
&lt;p&gt;You realise that you are the first person in all of history to know what light is made of. Can you imagine that feeling?&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>As you could probably tell, the previous song wasn’t quite finished. Here’s the final version.</title>
   <link href="https://nevyn.me/2010/05/17/sterdtrololo2/"/>
   <updated>2010-05-17T08:39:00+02:00</updated>
   <id>https://nevyn.me/2010/05/17/sterdtrololo2</id>
   <content type="html">&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://assets.tumblr.com/swf/audio_player.swf?audio_file=http%3A%2F%2Fdl.dropbox.com%2Fu%2F6775%2FJag%2520%25C3%25A4r%2520glad%2520och%2520lite%2520kn%25C3%25A4pp.mp3&amp;color=FFFFFF&quot; height=&quot;27&quot; width=&quot;207&quot; quality=&quot;best&quot; wmode=&quot;opaque&quot;&gt;&lt;/embed&gt;
</content>
 </entry>
 
 <entry>
   <title>trololo (1)</title>
   <link href="https://nevyn.me/2010/05/16/sterdtrololo/"/>
   <updated>2010-05-16T22:41:00+02:00</updated>
   <id>https://nevyn.me/2010/05/16/sterdtrololo</id>
   <content type="html">&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://assets.tumblr.com/swf/audio_player.swf?audio_file=https%3A%2F%2Fwww.tumblr.com%2Faudio_file%2Fnevyn%2F603523046%2Ftumblr_l2igh1aZmN1qz4vmk&amp;color=FFFFFF&quot; height=&quot;27&quot; width=&quot;207&quot; quality=&quot;best&quot; wmode=&quot;opaque&quot;&gt;&lt;/embed&gt;&lt;br/&gt;&lt;p&gt;We&amp;rsquo;re having a coding party at Voxar&amp;rsquo;s place. Sterd got bored of his game. I trololol&amp;rsquo;d him. He fired up Live and trololol&amp;rsquo;d me harder than I&amp;rsquo;ve ever been trololol&amp;rsquo;d before. (I can&amp;rsquo;t stop looping!)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Clarification</title>
   <link href="https://nevyn.me/2010/05/15/clarification/"/>
   <updated>2010-05-15T06:19:46+02:00</updated>
   <id>https://nevyn.me/2010/05/15/clarification</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://rentzsch.tumblr.com/post/598576172/clarification&quot; class=&quot;tumblr_blog&quot;&gt;rentzsch&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;It’s not about Adobe.&lt;/p&gt;

&lt;p&gt;It’s not about Flash.&lt;/p&gt;

&lt;p&gt;It’s not about cross-platform.&lt;/p&gt;

&lt;p&gt;It’s about less code.&lt;/p&gt;

&lt;p&gt;It’s about fewer crashes.&lt;/p&gt;

&lt;p&gt;It’s about faster-than-C runtime.&lt;/p&gt;

&lt;p&gt;It’s about faster development time.&lt;/p&gt;

&lt;p&gt;It’s about distributed computing.&lt;/p&gt;

&lt;p&gt;It’s about pervasive multicore.&lt;/p&gt;

&lt;p&gt;It’s about REPLs and live software.&lt;/p&gt;

&lt;p&gt;It’s about software that preemptively exposes my coding errors.&lt;/p&gt;

&lt;p&gt;It’s about &lt;em&gt;better software&lt;/em&gt;.&lt;/p&gt;&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>Every time you do something that’s hard for you, every time you transcend some personal boundary or cross some goalpost you thought uncrossable or work really fucking hard at something (even — especially — if you fail) or do something you thought you couldn’t do, it is an accomplishment, and it’s important to acknowledge it. Every time you receive a compliment and say “thank you” instead of “oh, it’s nothing”, you are striking a blow against a poisonous, toxic, and dangerous social model. And every time you do that publicly, you give strength to someone else who sees you do it, because by accurately valuing your accomplishments and achievements as accomplishments and achievements, you teach others that their similar accomplishments and achievements are things to be valued — and thus, by extension, that they are to be valued.

And every time you see someone trying to downplay their achievements, especially compared against someone else’s, remind them that accomplishment is not a zero sum game: your achievement doesn’t reflect upon another’s, and another’s doesn’t reflect upon you. Measure against yourself. That’s the only standard that matters.

And if you’re one of those people who are policing the social appropriateness of claiming one’s accomplishments and placing value upon them in public, just fucking stop it already.</title>
   <link href="https://nevyn.me/2010/05/08/every-time-you-do-something-thats-hard-for-you/"/>
   <updated>2010-05-08T21:56:49+02:00</updated>
   <id>https://nevyn.me/2010/05/08/every-time-you-do-something-thats-hard-for-you</id>
   <content type="html">&lt;blockquote&gt;&lt;p&gt;Every time you do something that’s hard for you, every time you transcend some personal boundary or cross some goalpost you thought uncrossable or work &lt;em&gt;really fucking hard&lt;/em&gt; at something (even — especially — if you fail) or do something you thought you couldn’t do, it is an accomplishment, and it’s important to acknowledge it. Every time you receive a compliment and say “thank you” instead of “oh, it’s nothing”, you are striking a blow against a poisonous, toxic, and dangerous social model. And every time you do that publicly, you give strength to someone else who sees you do it, because by accurately valuing your accomplishments and achievements &lt;em&gt;as&lt;/em&gt; accomplishments and achievements, you teach others that &lt;em&gt;their&lt;/em&gt; similar accomplishments and achievements are things to be valued — and thus, by extension, that &lt;em&gt;they&lt;/em&gt; are to be valued.&lt;/p&gt;

&lt;p&gt;And every time you see someone trying to downplay their achievements, especially compared against someone else’s, remind them that accomplishment is not a zero sum game: your achievement doesn’t reflect upon another’s, and another’s doesn’t reflect upon you. Measure against yourself. That’s the only standard that matters.&lt;/p&gt;

&lt;p&gt;And if you’re one of those people who are policing the social appropriateness of claiming one’s accomplishments and placing value upon them in public, just fucking &lt;em&gt;stop it already&lt;/em&gt;.&lt;/p&gt;&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://synecdochic.dreamwidth.org/401060.html&quot;&gt;Denise Paolucci&lt;/a&gt; &amp;gt; &lt;a href=&quot;http://cleversimon.com/&quot;&gt;cleversimon&lt;/a&gt; &amp;gt; &lt;a href=&quot;http://insooutso.tumblr.com/&quot; class=&quot;tumblr_blog&quot;&gt;insooutso&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2010/04/12/theres-a-very-old-bug-on-adobes-jira-bug-tracker/"/>
   <updated>2010-04-12T01:49:00+02:00</updated>
   <id>https://nevyn.me/2010/04/12/theres-a-very-old-bug-on-adobes-jira-bug-tracker</id>
   <content type="html">&lt;p&gt;There&amp;rsquo;s &lt;a href=&quot;http://bugs.adobe.com/jira/browse/FP-890?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&amp;amp;focusedCommentId=360525#action_360525&quot;&gt;a very old bug on Adobe&amp;rsquo;s JIRA bug tracker about flash video performance being absolutely abysmal on MacOS&lt;/a&gt;. One of the QA engineers at Adobe commented a while ago on that issue to explain that Adobe was currently focusing all their effort on mobile devices, and &amp;ldquo;didn&amp;rsquo;t have time&amp;rdquo; to fix the Mac version. There was an uproar, and the comment was removed. As I have the original in my mail, I thought I&amp;rsquo;d repost it here for posterity:&lt;/p&gt;

&lt;pre&gt;
Poor performance on Mac OS X  
Updated: 10/06/09 10:09 PM   Created: 11/01/08 03:57 PM  
The following comment has been edited on this issue:	[ Permlink ]
Author: John Chen 
Created on: 05/26/09 12:16 PM
Edited by: John Chen 
Edited on: 10/07/09 11:35 AM
Comment: 
We are well aware of this issue and there is already several bugs logged in our internal system. As with all bugs, they will be worked on based on priority. 

Please be patient. 

Original comment: 
Hi everyone, 

We are well aware of this issue and there is already several bugs logged in our internal system. As with all bugs, they will be worked on based on priority. 

I know how you all feel; it pisses me off to see h.264 streaming video such as ones from hulu.com take up 70-80% cpu usage on a MAC (PC uses about 30%). It heats up my MAC, drains my batteries, and lags for a second once in a while when streaming in 420p quality. 

What can be more important than fixing this MAC specific performance issue you ask? If you do a search on Google or have went to the recent MAX conference, you will understand that our highest priority will be optimizing our player to be faster than ninjas for mobile phones (&lt;a href=&quot;http://news.cnet.com/8301-1001_3-10098883-92.html&quot;&gt;http://news.cnet.com/8301-1001_3-10098883-92.html&lt;/a&gt;) 

If you were CEO, what would you do? Spend resource to fix this bug (it's not like it doesn't work- it's just not as good as PC) to make a million people happy, or give Flash to everyone with phones (billions of people?). 

These MANY INSANE &quot;optimizations and new technology&quot; will fix many performance issues; and perhaps, this one included. 

With all that said, I'll continue to push this bug to be fixed. I would fix this bug myself if I could... 

Please be patient. 
Project:	Flash Player
Components:	 Rendering Performance
Affects Versions:	 Flash Player 10
Security Level:	Public (All JIRA Users)
Attachments:	 01 safari play.jpg, 02 safari pause.jpg, 03 camino play.jpg, 04 camino pause.jpg, 978-1.jpg, activity-monitor-snow-leopard-20090629-113345.jpg, d2bb8b2ebb2ba4e4233ccf0c80dcd7c58f30c726.png
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>On ngmoco's We Rule</title>
   <link href="https://nevyn.me/2010/04/08/on-ngmocos-we-rule/"/>
   <updated>2010-04-08T06:11:00+02:00</updated>
   <id>https://nevyn.me/2010/04/08/on-ngmocos-we-rule</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://itunes.apple.com/us/app/we-rule/id339274852?mt=8&quot;&gt;We Rule&lt;/a&gt; is a pretty boring FarmVille knock-off for iPhone and iPad. Actually, it&amp;rsquo;s really well made for what it is: nice graphics, music and atmosphere. But all you do is plant, harvest, order and deliver. I figured, maybe I can enjoy it anyway? One of the results from that is the image below.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dl.dropbox.com/u/6775/werule.crops.png&quot;/&gt;&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s obvious ngmoco are rewarding people who spend as much time as possible in the game. The fastest way to get money is to plant the fastest crop, so that you&amp;rsquo;ll have to constantly stay in the game — 6 coins per minute. The casual gamer might plant beans and return once a day, but only get 0.3 coins per minute.&lt;/p&gt;

&lt;p&gt;Seeing someone with a nice kingdom doesn&amp;rsquo;t mean that they are dedicated, however. If you give ngmoco real, actual money and buy &amp;lsquo;mojo&amp;rsquo;, they&amp;rsquo;ll shorten any waiting time to mere seconds. I understand that this is their entire business model, but I feel it takes away from any sense of accomplishment of doing things the non-paying way.&lt;/p&gt;

&lt;p&gt;What really annoys me is what this game could have been. The makers of the game, Newtoy, helped make Age of Empires 2, so obviously they know how to make non-casual games too. I tcpdumped the server traffic and got a &lt;a href=&quot;http://dl.dropbox.com/u/6775/werule.kingdom.json&quot;&gt;json description of my kingdom&lt;/a&gt;, which was highly interesting. They planned for several kinds of resources: stone, food and wood, which would have made for a much more complex and interesting gameplay. The best part, however, is how the json hints at armies; infantry, archers, cavalry. This game would have been absolutely *kickass* if you could attack other players! Or attack anything at all, for that matter. There is also hints of trading, another absent feature.&lt;/p&gt;

&lt;p&gt;Perhaps these features are scheduled for a future release? I dearly hope so, but I really doubt it. I imagine Newtoy had great plans for a social medieval strategy and city-building game, and came to Ngmoco for financing. However, Ngmoco must have found the game much too inaccessible to all the casual FarmVille gamers out there; what&amp;rsquo;s the fun in building if it can be torn down? And however do you get ROI on a freemium game without heaps and bounds of casual gamers? And thus did &lt;em&gt;Kingdoms&lt;/em&gt; (production name) become &lt;em&gt;We Rule&lt;/em&gt;.&lt;/p&gt;

&lt;p style=&quot;font-size:11px&quot;&gt;&lt;em&gt;(I&amp;rsquo;m &lt;u&gt;nevyn&lt;/u&gt; on Plus&lt;sub&gt;+&lt;/sub&gt; btw, if you want to add me)&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2010/02/22/i-was-afraid-microsoft-would-let-the-acquisition/"/>
   <updated>2010-02-22T05:12:00+01:00</updated>
   <id>https://nevyn.me/2010/02/22/i-was-afraid-microsoft-would-let-the-acquisition</id>
   <content type="html">&lt;object width=&quot;400&quot; height=&quot;292&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://video.ted.com/assets/player/swf/EmbedPlayer.swf&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;param name=&quot;bgColor&quot; value=&quot;#ffffff&quot;&gt;&lt;/param&gt; &lt;param name=&quot;flashvars&quot; value=&quot;vu=http://video.ted.com/talks/dynamic/BlaiseAguerayArcas_2010-medium.mp4&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/BlaiseAgueraYArcas-2010.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=766&amp;introDuration=16500&amp;adDuration=4000&amp;postAdDuration=2000&amp;adKeys=talk=blaise_aguera;year=2010;theme=the_creative_spark;theme=new_on_ted_com;theme=a_taste_of_ted2010;event=TED2010;&amp;preAdTag=tconf.ted/embed;tile=1;sz=512x288;&quot; /&gt;&lt;embed src=&quot;http://video.ted.com/assets/player/swf/EmbedPlayer.swf&quot; pluginspace=&quot;http://www.macromedia.com/go/getflashplayer&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; bgColor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;292&quot; allowFullScreen=&quot;true&quot; flashvars=&quot;vu=http://video.ted.com/talks/dynamic/BlaiseAguerayArcas_2010-medium.mp4&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/BlaiseAgueraYArcas-2010.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=766&amp;introDuration=16500&amp;adDuration=4000&amp;postAdDuration=2000&amp;adKeys=talk=blaise_aguera;year=2010;theme=the_creative_spark;theme=new_on_ted_com;theme=a_taste_of_ted2010;event=TED2010;&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br/&gt;&lt;p&gt;I was afraid Microsoft would let the acquisition of Seadragon go to waste, as it is with so many acquisitions. This time however, it seems my fears are unfounded. Blaise Aguera y Arcas demos some amazing mapping + ZUI + augmented reality in this TED talk.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2010/01/25/university-of-oxford-just-released-the-source-code/"/>
   <updated>2010-01-25T07:45:57+01:00</updated>
   <id>https://nevyn.me/2010/01/25/university-of-oxford-just-released-the-source-code</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/NTLQAb6zH1c?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;University of Oxford just released the source code for their PTAMM library, the most amazing Augmented Reality library I&amp;rsquo;ve seen. It does simultaneous localization and mapping (SLAM) very very accurately, with no markers or tags, and copes very well with changes in scale and perspective. If you are a programmer and at *all* into AR, you MUST check out this library. &lt;/p&gt;

&lt;p&gt;I&amp;rsquo;ve been working all weekend so I haven&amp;rsquo;t had a chance to check it out myself yet :( I&amp;rsquo;ve been watching their youtube videos for the past year though, and been amazed with every video. I really really wish I had the time to check it out properly.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Geek Test</title>
   <link href="https://nevyn.me/2010/01/07/geek-test/"/>
   <updated>2010-01-07T07:37:00+01:00</updated>
   <id>https://nevyn.me/2010/01/07/geek-test</id>
   <content type="html">&lt;a href=&quot;http://www.innergeek.us/geek-test.html&quot;&gt;Geek Test&lt;/a&gt;&lt;br/&gt;&lt;p&gt;I scored ~38.856%. Sounds low, but apparently I&amp;rsquo;m a &amp;ldquo;major geek&amp;rdquo;. Phew!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>lucius brock davis 6309 road rage</title>
   <link href="https://nevyn.me/2010/01/03/lucius-brock-davis-6309-road-rage/"/>
   <updated>2010-01-03T21:22:33+01:00</updated>
   <id>https://nevyn.me/2010/01/03/lucius-brock-davis-6309-road-rage</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/tumblr_kvl7yiYIho1qzz1pao1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://lucius.tumblr.com/post/312981371&quot; class=&quot;tumblr_blog&quot;&gt;lucius&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Brock Davis: “6/3/09: road rage”&lt;/p&gt;&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>Filtering a UITableView, and keyboard wonkiness</title>
   <link href="https://nevyn.me/2009/12/31/filtering-a-uitableview-and-keyboard-wonkiness/"/>
   <updated>2009-12-31T02:15:00+01:00</updated>
   <id>https://nevyn.me/2009/12/31/filtering-a-uitableview-and-keyboard-wonkiness</id>
   <content type="html">&lt;p&gt;Hey, another bug that took half a day to fix. That always deserves a blog entry.&lt;/p&gt;

&lt;p&gt;So I have a UITableView, and on it I have a tableHeaderView containing a UISearchBar. The UISearchBar filters the contents of the UITableView, and thus at every key press I have to reloadData (or more specifically, I -[UITableView reloadSections:withRowAnimation:]). For some reason, this calls setUserInteractionEnabled:NO on the UITableView, which in turn makes the UISearchBar&amp;rsquo;s UIFieldEditor resignFirstResponder, which makes the keyboard collapse. After the reload, user interaction is restored, UISearchBar gets focus, and the keyboard comes up.&lt;/p&gt;

&lt;p&gt;This is rather embarrassing: I even subclassed UITableView, disabling setUserInteractionEnabled, before I realized that right there, before my eyes, is a UISearchBar delegate method called -[UISearchBarDelegate searchBarShouldEndEditing:]. Just add a bool ivar to the view controller saying whether the search bar may be resign key, set it to false before refreshing, refresh, and set it to true, and in the above delegate, return the ivar bool. Done, no more disappearing and reappearing keyboards.&lt;/p&gt;

&lt;p&gt;Oh, and the code:
&lt;/p&gt;&lt;pre&gt;&lt;code&gt;
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
	_searchBarMayResign = NO;
	[self.tableView reloadData]; // or equivalent
	_searchBarMayResign = YES;
}
- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar;
{
	return _searchBarMayResign;
}
&lt;/code&gt;&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>lucius:

An 8-Bit Chiptune version of Toccata by J.S. Bach. BWV 565. Made by yours truly, with LSDJ, a Game Boy, and some reverb.

Man! Didn’t know you were that kickass. This song is seriously awesome, I feel like making a Castlevania remake just to have some interactive visuals to this song.</title>
   <link href="https://nevyn.me/2009/12/27/lucius-an-8-bit-chiptune-version-of-toccata-by/"/>
   <updated>2009-12-27T04:22:07+01:00</updated>
   <id>https://nevyn.me/2009/12/27/lucius-an-8-bit-chiptune-version-of-toccata-by</id>
   <content type="html">&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://assets.tumblr.com/swf/audio_player.swf?audio_file=http%3A%2F%2Fwww.felttip.com%2Faudio%2Ftoccata.mp3&amp;color=FFFFFF&quot; height=&quot;27&quot; width=&quot;207&quot; quality=&quot;best&quot; wmode=&quot;opaque&quot;&gt;&lt;/embed&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/12/26/thedailywhat-stop-what-youre-doing-and-watch/"/>
   <updated>2009-12-26T11:26:53+01:00</updated>
   <id>https://nevyn.me/2009/12/26/thedailywhat-stop-what-youre-doing-and-watch</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;225&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/JVxe5NIABsI?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://thedw.us/post/300028074/stop-what-youre-doing-and-watch-the-hell-out-of&quot; class=&quot;tumblr_blog&quot;&gt;thedailywhat&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;b&gt;Stop What You’re Doing And Watch The Hell Out Of This of the Day: &lt;/b&gt;The Internet’s resident aural-pleasure-purveyor Pogo does Pixar’s &lt;i&gt;Up&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;[&lt;a href=&quot;http://www.youtube.com/user/Fagottron&quot;&gt;via&lt;/a&gt;.]&lt;/p&gt;&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>Exercise 4-12. Adapt the ideas of Cthulhu() to write a recursive version of the Forbidden Song of Hali; that is, to unravel the fibres of reality and allow the icy liquid darkness of Carcosa to devour your mind.</title>
   <link href="https://nevyn.me/2009/12/20/exercise-4-12-adapt-the-ideas-of-cthulhu-to/"/>
   <updated>2009-12-20T00:27:33+01:00</updated>
   <id>https://nevyn.me/2009/12/20/exercise-4-12-adapt-the-ideas-of-cthulhu-to</id>
   <content type="html">&lt;blockquote&gt;Exercise 4-12. Adapt the ideas of Cthulhu() to write a recursive version of the Forbidden Song of Hali; that is, to unravel the fibres of reality and allow the icy liquid darkness of Carcosa to devour your mind.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://www.bobhobbs.com/files/kr_lovecraft.html&quot;&gt;The C Programming Language: 4.10&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>oh why this places gone so quiet ive got a job</title>
   <link href="https://nevyn.me/2009/12/16/oh-why-this-places-gone-so-quiet-ive-got-a-job/"/>
   <updated>2009-12-16T07:28:23+01:00</updated>
   <id>https://nevyn.me/2009/12/16/oh-why-this-places-gone-so-quiet-ive-got-a-job</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/tumblr_kupqbczOIE1qz4vmko1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Oh, why this place&amp;rsquo;s gone so quiet? &lt;a href=&quot;http://spotify.com/&quot;&gt;I&amp;rsquo;ve got a job ;D&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>&quot;Bizarre&quot; Octopuses Carry Coconuts as Instant Shelters</title>
   <link href="https://nevyn.me/2009/12/16/bizarre-octopuses-carry-coconuts-as-instant/"/>
   <updated>2009-12-16T07:24:42+01:00</updated>
   <id>https://nevyn.me/2009/12/16/bizarre-octopuses-carry-coconuts-as-instant</id>
   <content type="html">&lt;a href=&quot;http://news.nationalgeographic.com/news/2009/12/091214-octopus-carries-coconuts-coconut-carrying.html&quot;&gt;&quot;Bizarre&quot; Octopuses Carry Coconuts as Instant Shelters&lt;/a&gt;&lt;br/&gt;&lt;p&gt;This is the most ridiculous thing I&amp;rsquo;ve seen in forever. A tip-toeing octopus!&lt;/p&gt;

&lt;embed src=&quot;http://museumvictoria.com.au/flash/flvplayer.swf&quot; height=&quot;376&quot; width=&quot;475&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; flashvars=&quot;level=0&amp;amp;dock=false&amp;amp;image=http%3A%2F%2Fmuseumvictoria.com.au%2Fpages%2F13380%2Fcoconutoctopusholder.jpg&amp;amp;bandwidth=1368&amp;amp;file=%2Fpages%2F13380%2Foctopus4.flv&amp;amp;plugins=viral-2d&quot;&gt;&lt;/embed&gt;&lt;p&gt;(Via &lt;a href=&quot;http://tfail.tumblr.com/post/284909475/bizarre-octopuses-carry-coconuts-as-instant-shelters&quot; class=&quot;tumblr_blog&quot;&gt;tfail&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>gpyow inverted halo edition because ive always</title>
   <link href="https://nevyn.me/2009/11/05/gpyow-inverted-halo-edition-because-ive-always/"/>
   <updated>2009-11-05T08:35:00+01:00</updated>
   <id>https://nevyn.me/2009/11/05/gpyow-inverted-halo-edition-because-ive-always</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/tumblr_kslw3afLeH1qz4vmko1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;GPYOW: Inverted Halo Edition. Because I&amp;rsquo;ve always wanted to do a GPYOW.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>lucius i just redesigned felttiptumblrcom</title>
   <link href="https://nevyn.me/2009/10/22/lucius-i-just-redesigned-felttiptumblrcom/"/>
   <updated>2009-10-22T22:08:53+02:00</updated>
   <id>https://nevyn.me/2009/10/22/lucius-i-just-redesigned-felttiptumblrcom</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/tumblr_krsvs39j4q1qzz1pao1_1280.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://lucius.tumblr.com/post/219768690&quot;&gt;lucius&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;I just redesigned &lt;a href=&quot;http://felttip.tumblr.com&quot;&gt;felttip.tumblr.com&lt;/a&gt; based on Mac OS 9.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;That design is AWESOME! You win.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>[PHP is] ‘quick- and-dirty’ elevated to a religion.</title>
   <link href="https://nevyn.me/2009/10/21/php-is-quick-and-dirty-elevated-to-a/"/>
   <updated>2009-10-21T01:13:19+02:00</updated>
   <id>https://nevyn.me/2009/10/21/php-is-quick-and-dirty-elevated-to-a</id>
   <content type="html">&lt;blockquote&gt;[PHP is] &amp;lsquo;quick- and-dirty&amp;rsquo; elevated to a religion.&lt;/blockquote&gt;&amp;#8212; &lt;a href=&quot;http://ursecta.com/wp/2009/09/net-considered-harmful/&quot;&gt;@jmweh&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>Radiotjänst slösar skattepengar för att få folk att betala tv-innehav fastän de inte behöver</title>
   <link href="https://nevyn.me/2009/10/20/radiotjanst/"/>
   <updated>2009-10-20T23:57:50+02:00</updated>
   <id>https://nevyn.me/2009/10/20/radiotjanst</id>
   <content type="html">&lt;p&gt;Skrev just ett argt brev till Radiotjänst, efter mina försök att säga upp tv-innehav.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ni har en online-tjänst, men det går inte att avanmäla tv-innehav därinne. Ni har en telefontjänst (med det sämsta meny-system jag varit med om). Telefonkön specifikt för att säga upp tv-innehav var *38 väntande lång*. Hur många skattefinansierade anställda har ni egentligen på att ta emot avanmälningar? Hur många hundratusentals skattekronor går till detta, bara för att ni saknar en enda liten knapp inne på webbtjänsten?&lt;/p&gt;

&lt;p&gt;Det gör mig riktigt förbannad. Vänligen åtgärda och sluta slösa pengar.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Inte nog med detta slöseri, de har också börjat ignorera mail från informationsfrihet.se &amp;ndash; jag försökte avanmäla via deras formulär, men fick ingen respons från radiotjänst.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>the write compile test cycle is very very tedious</title>
   <link href="https://nevyn.me/2009/10/15/the-write-compile-test-cycle-is-very-very-tedious/"/>
   <updated>2009-10-15T02:41:00+02:00</updated>
   <id>https://nevyn.me/2009/10/15/the-write-compile-test-cycle-is-very-very-tedious</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/tumblr_krigxd4t9I1qz4vmko1_1280.png&quot;/&gt;&lt;br/&gt;&lt;p&gt; The write-compile-test cycle is very very tedious when doing iPhone development on the device, because the &amp;ldquo;compile&amp;rdquo; step needs to include &amp;ldquo;install on device&amp;rdquo;, which can be very, very slow. It can take up to a minute, depending on how many apps you have installed and the current cycle of the moon. Imagine, then, doing tiny interface changes and you want to see how that tiny fix changes the UI (which sometimes you really need to do on the device to get a feel for it) &amp;ndash; ten tries changing an animation delay could mean ten minutes of just waiting for installation. If you&amp;rsquo;re jailbroken, there is a&lt;strike&gt;n easier&lt;/strike&gt; faster way.&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;In Cydia, install ldid, rsync and ssh&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blogs.translucentcode.org/mick/archives/000230.html&quot;&gt;Follow this guide to install an ssh key pair&lt;/a&gt; on your iPhone, so that the script can install the app without asking for password.&lt;/li&gt;
&lt;li&gt;Add an additional build target to your app, and call it &amp;ldquo;Upload&amp;rdquo; or something.&lt;/li&gt;
&lt;li&gt;Make that build target depend on your real app (as in the picture above)&lt;/li&gt;
&lt;li&gt;Add a &amp;ldquo;run shell script&amp;rdquo; build phase, and give it this script:
&lt;pre&gt;&lt;code&gt;export DEVICE_NAME=Mishimazu.local
rsync -avz &quot;${CONFIGURATION_BUILD_DIR}/${PROJECT}.app&quot; root@${DEVICE_NAME}:/Applications/
ssh root@${DEVICE_NAME} ldid -s &quot;/Applications/${PROJECT}.app/${PROJECT}&quot;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Replace &amp;ldquo;Mishimazu&amp;rdquo; with the name of your iPhone.&lt;/li&gt;
&lt;li&gt;Change your active target to &amp;ldquo;Upload&amp;rdquo;, and build as usual.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;A few notes though.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;This script does not launch the app, you&amp;rsquo;ll have to do that yourself.&lt;/li&gt;
&lt;li&gt;You don&amp;rsquo;t get the console routed to Xcode. Open up the Console in the Organizer for a workaround (not as good though)&lt;/li&gt;
&lt;li&gt;Xcode debugger won&amp;rsquo;t work&lt;/li&gt;
&lt;li&gt;File locations might have changed! You no longer have your private uuid bundle with your documents, but rather need to place documents and related things in /var/mobile. It&amp;rsquo;s possible NSSearchPathForDirectoriesInDomains will figure the right paths out for you, I haven&amp;rsquo;t tested; just make sure you&amp;rsquo;re aware of this&lt;/li&gt;
&lt;li&gt;You are no longer sandboxed. This might change assumptions you do in code&lt;/li&gt;


&lt;p&gt;In short, only use this deployment method for simple things, and install as usual when you need to really make sure things still work as they should, before a beta or appstore deploy. Of course, if you&amp;rsquo;re targeting the Cydia store or similar, that doesn&amp;rsquo;t apply.&lt;/p&gt; &lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>Improved cross-project references in Xcode 3.1.1</title>
   <link href="https://nevyn.me/2009/10/05/improved-cross-project-references-in-xcode-311/"/>
   <updated>2009-10-05T23:02:55+02:00</updated>
   <id>https://nevyn.me/2009/10/05/improved-cross-project-references-in-xcode-311</id>
   <content type="html">&lt;a href=&quot;http://www.cocoabuilder.com/archive/message/xcode/2008/9/13/24608&quot;&gt;Improved cross-project references in Xcode 3.1.1&lt;/a&gt;&lt;br/&gt;&lt;p&gt;This is your new friend when you have sub-projects in Xcode that build frameworks that the parent project needs to link to and find headers for:&lt;/p&gt;

&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;FRAMEWORK_SEARCH_PATHS = &quot;$(BUILT_PRODUCTS_DIR)/$(FRAMEWORKS_FOLDER_PATH)&quot;&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;

&lt;p&gt;This is much better than the old framework search path of [name of other project]/build/${CONFIGURATION}/ (since that depended on the subproject building into &amp;lsquo;build&amp;rsquo; folder (which isn&amp;rsquo;t happening when you e g have a system-wide build folder)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Warning: When replacing the glass on an iPhone 3G, don't use pdaparts.com's video!</title>
   <link href="https://nevyn.me/2009/10/02/warning-when-replacing-the-glass-on-an-iphone-3g/"/>
   <updated>2009-10-02T01:38:00+02:00</updated>
   <id>https://nevyn.me/2009/10/02/warning-when-replacing-the-glass-on-an-iphone-3g</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=8fF0DF-mbn4&quot;&gt;Pdaparts.com has a video&lt;/a&gt; showing how to replace the glass on an iPhone 3G. These instructions are INVALID and will risk destroying your LCD. Please look at &lt;a href=&quot;http://www.youtube.com/watch?v=4mboB8p-sdw&quot;&gt;leewaterman&amp;rsquo;s HD video&lt;/a&gt; instead.&lt;/p&gt;

&lt;p&gt;Specifically, what Pdaparts do wrong is they try to remove the LCD from the frame by loosening it from the bottom, breaking it free from the frame. However, the latches holding the LCD in place are placed &lt;em&gt;along the edges&lt;/em&gt;. If you pry too hard along the bottom, you will &lt;em&gt;break the crystals in your LCD&lt;/em&gt;! This will look like slightly colorful ink or oil blots where and near where you applied too much pressure.&lt;/p&gt;

&lt;p&gt;The correct procedure is to unhinge the latches along the edges. &lt;a href=&quot;http://www.youtube.com/watch?v=4mboB8p-sdw&quot;&gt;leewaterman&amp;rsquo;s video&lt;/a&gt; shows exactly how this is done.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Jag jobbar på argument jag kommer få dra varje dag framöver.</title>
   <link href="https://nevyn.me/2009/09/14/piratargument/"/>
   <updated>2009-09-14T17:51:12+02:00</updated>
   <id>https://nevyn.me/2009/09/14/piratargument</id>
   <content type="html">&lt;p&gt;Jag kommer rösta Pirat om ett år. Det är det enda partiet som förstår, och &lt;b&gt;förstår&lt;/b&gt; konsekvenserna av, att kostnaden av en digital kopia är *noll*. Inte &amp;ldquo;billigt&amp;rdquo;, *noll*.

Tänk er innan telefonen fanns. Det gick nog väldigt bra för Posten; enda sättet att kommunicera på distans var att skicka brev. Så plötsligt kom då telefonen. Postens roll minskar plötsligt till att skicka paket och kanske en tiondel så många brev. Posten blir väldigt arg på denna nya teknologi &amp;ndash; hur ska Posten nu överleva?! Det enda sättet för Posten att överleva är att lobbya för att illegalisera telefonen, eller hur? De stackars Posten-arbetarna sliter ju hårt; de förtjänar sin lön och en stabil jobbsituation.

När en digital kopia är gratis och omöjlig att skilja från originalet, kan en lag säga att det är förbjudet att kopiera information?

Det är dags för musiklobbyn att bli jäkligt bra på att skicka paket, istället för att försöka illegalisera telefoner.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>mmoga.com is a scammer</title>
   <link href="https://nevyn.me/2009/09/14/mmogacom-is-a-scammer/"/>
   <updated>2009-09-14T04:08:14+02:00</updated>
   <id>https://nevyn.me/2009/09/14/mmogacom-is-a-scammer</id>
   <content type="html">&lt;p&gt;Or so it seems, anyway; and I can&amp;rsquo;t say I&amp;rsquo;m surprised. I bought a Diablo II: Lords of Destruction key from them. The key added fine to my battle.net account, so it seemed legit. However, now that I try to log in a month later, the key is in use by someone else; I assume they resold it.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Seiken Densetsu 3 / Secret of Mana 2 with 3 player hack</title>
   <link href="https://nevyn.me/2009/09/13/seiken-densetsu-3-secret-of-mana-2-with-3-player/"/>
   <updated>2009-09-13T06:41:00+02:00</updated>
   <id>https://nevyn.me/2009/09/13/seiken-densetsu-3-secret-of-mana-2-with-3-player</id>
   <content type="html">&lt;a href=&quot;http://nevyn.nu/files/seiken3-3player.smc&quot;&gt;Seiken Densetsu 3 / Secret of Mana 2 with 3 player hack&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Apparently there&amp;rsquo;s some sort of taboo to publish a ROM file with a hack applied. This becomes very aggravating when you can&amp;rsquo;t find the same / similar enough ROM file that the hack maker used.&lt;/p&gt;

&lt;p&gt;Me, Amanda and my brother Bengan played Secret of Mana together (paid for it and all, Virtual Arcade rocks). It&amp;rsquo;s an amazingly good game; there are so few cooperative RPG games, especially &amp;gt;2 players. After finishing it, we felt we had to have more, and SD3 is the obvious candidate. But, the game was never released in the west! There&amp;rsquo;s no way that I know of to get it in English and pay for it, so I installed Homebrew Channel and Snes9X. After playing for an hour or two, after finally picking up the third player (me, of course), I pressed start to activate my control. Nothing happened. Turns out they removed the three player option from SD3. Just can&amp;rsquo;t understand why&amp;hellip;&lt;/p&gt;

&lt;p&gt;Anyways, I hunted hacks all over the Internet, but the one everyone linked to was 404&amp;rsquo;d, and the second one I found seemed broken; I couldn&amp;rsquo;t apply it, anyhow. Finally, I found &lt;a href=&quot;http://www.fantasyanime.com/mana/som2downloads.htm&quot;&gt;FantasyAnime.com and their SD3 page&lt;/a&gt;, and to my great joy they listed the ROM - next to the patch! The patch applied cleanly; tomorrow we play!&lt;/p&gt;

&lt;p&gt;The link above is to the ROM file with the hack applied, if anyone else goes googling for it.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Alice In Wonderland Syndrome</title>
   <link href="https://nevyn.me/2009/09/08/alice-in-wonderland-syndrome/"/>
   <updated>2009-09-08T21:45:18+02:00</updated>
   <id>https://nevyn.me/2009/09/08/alice-in-wonderland-syndrome</id>
   <content type="html">&lt;a href=&quot;http://en.wikipedia.org/wiki/Alice_in_Wonderland_syndrome&quot;&gt;Alice In Wonderland Syndrome&lt;/a&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://bestofwikipedia.tumblr.com/post/182722812/alice-in-wonderland-syndrome&quot;&gt;bestofwikipedia&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;Alice in Wonderland syndrome (AIWS, named after the novel written by Lewis Carroll), also known as Todd’s syndrome, is a disorienting neurological condition which affects human perception. Sufferers may experience micropsia, macropsia, and/or size distortion of other sensory modalities. A temporary condition, it is often associated with migraines, brain tumors, and the use of psychoactive drugs. (via &lt;a href=&quot;http://twitter.com/AngryResident&quot; title=&quot;@AngryResident&quot;&gt;@AngryResident&lt;/a&gt;)&lt;/blockquote&gt;

&lt;p&gt;Hum, I get this sometimes&amp;hellip; Particularly when feverish or very tired. Things will *feel* like they are *very very far away*. My body stretches on for miles and miles; as if if I stood up, I would touch the clouds. If I&amp;rsquo;m awake and about, the world might distort, my hands by the computer keyboard as if reaching across the city. If sleepy and tired, closing my eyes do nothing to avert the feeling; dreams will take on a fantastic feeling of distance, everything of incredible, incomprehensible size and distance. I might fly, or walk far above the ground, the world a blur around me.&lt;/p&gt;

&lt;p&gt;If I have a really bad fever, I might get a related nightmare: instead of distance, my perception of size crashes; everything in the world is cubes of different sizes. Some are so huge I feel sick to my stomach for just comprehending the size of the thing; it feels so wrong. It is as if I truly *comprehended* the size of the Earth, not just knew it as a number. Then that cube is dwarfed a million times over by its neighbour, and I&amp;rsquo;ll wake up from the chaotic, extreme feelings of discomfort.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>canabalt is a very cool atmospheric gametoy with</title>
   <link href="https://nevyn.me/2009/09/03/canabalt-is-a-very-cool-atmospheric-gametoy-with/"/>
   <updated>2009-09-03T07:35:00+02:00</updated>
   <id>https://nevyn.me/2009/09/03/canabalt-is-a-very-cool-atmospheric-gametoy-with</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/tumblr_kpbc6oTisZ1qz4mrco1_1280.png&quot;/&gt;&lt;br/&gt;&lt;a href=&quot;http://adamatomic.com/canabalt/&quot;&gt;Canabalt&lt;/a&gt; is a very cool atmospheric game/toy with only a single control: jump. It is reminiscent of Mirror&amp;rsquo;s Edge. The visuals are stunning, the music nice and the sound design fantastic. &lt;i&gt;(via  &lt;a href=&quot;http://www.davidslog.com/177521091/canabalt-via-caseypugh-jakelodwick-and-travors&quot;&gt;david&lt;/a&gt;&lt;/i&gt;, &lt;a href=&quot;http://caseypugh.tumblr.com/post/177409884/canabalt&quot;&gt;&lt;i&gt;caseypugh&lt;/i&gt;&lt;/a&gt;&lt;i&gt;, &lt;/i&gt;&lt;a href=&quot;http://jakelodwick.tumblr.com/post/177425263/canabalt-is-beautiful-thrilling-bet-you-cant&quot;&gt;&lt;i&gt;jakelodwick&lt;/i&gt;&lt;/a&gt;&lt;i&gt;, and &lt;/i&gt;&lt;a href=&quot;http://travors.com/post/177465792/canabalt-is-beautiful-thrilling-bet-you-cant&quot;&gt;&lt;i&gt;travors&lt;/i&gt;&lt;/a&gt;&lt;i&gt;)&lt;/i&gt;

&lt;p&gt;(btw: &lt;a href=&quot;https://dl.getdropbox.com/u/6775/7606m.png&quot;&gt;7606 m&lt;/a&gt;!)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Secret gems in Snow Leopard</title>
   <link href="https://nevyn.me/2009/08/30/secret-gems-in-snow-leopard/"/>
   <updated>2009-08-30T20:58:00+02:00</updated>
   <id>https://nevyn.me/2009/08/30/secret-gems-in-snow-leopard</id>
   <content type="html">&lt;p&gt;Just got a few so far, but I&amp;rsquo;m sure Twitter will yield lots more over the coming days, so I&amp;rsquo;m preparing for a gigantic list ;)&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;b&gt;Exposé&lt;/b&gt;&lt;ul&gt;&lt;li&gt;Press space to make the thumbnail under the cursor full-sized (for quick previews). &lt;a href=&quot;http://twitter.com/fraserspeirs/status/3630015024&quot;&gt;@fraserspeirs&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Press command-1 to sort windows by name. &lt;a href=&quot;http://twitter.com/mikeysan/status/3630097863&quot;&gt;@mikeysan&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;Press command-2 to group by application. &lt;a href=&quot;http://twitter.com/mikeysan/status/3630097863&quot;&gt;@mikeysan&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;&lt;/li&gt;

  &lt;li&gt;&lt;b&gt;Dock&lt;/b&gt;&lt;ul&gt;&lt;li&gt;Minimize windows to &amp;ldquo;the application icon&amp;rdquo; is a setting on Dock, which will store your minimized windows in Exposé instead of on the right side of the dock. Highly recommended! &lt;a href=&quot;http://twitter.com/joar_at_work/status/3640213895&quot;&gt;@joar_at_work&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;&lt;/li&gt;
  &lt;li&gt;&lt;b&gt;Other UI&lt;/b&gt;&lt;ul&gt;&lt;li&gt;Show hidden files and folders in an Open/Save dialog by pressing command-shift-period &lt;a href=&quot;http://daringfireball.net/linked/2009/09/18/snow-leopard-hidden-files&quot;&gt;@gruber&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;&lt;/li&gt;

  &lt;li&gt;&lt;b&gt;For devs&lt;/b&gt;&lt;ul&gt;&lt;li&gt;-[NSArray enumerateObjectsAtIndexes:options:usingBlock:] with NSEnumerationConcurrent. &lt;a href=&quot;http://twitter.com/fraserspeirs/status/3625065504&quot;&gt;@fraserspeirs&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;/System/Library/Frameworks/JavaScriptCore.framework/Versions/A/Resources/jsc is an interactive Javascript commandline tool. Could be useful? &lt;a href=&quot;http://twitter.com/ccgus/status/3811920193&quot;&gt;@ccgus&lt;/a&gt;&lt;/li&gt;

  &lt;/ul&gt;&lt;/li&gt;

&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>The One Objective-C Block Memory Management Example You Need To Read</title>
   <link href="https://nevyn.me/2009/08/30/the-one-objective-c-block-memory-management/"/>
   <updated>2009-08-30T08:34:00+02:00</updated>
   <id>https://nevyn.me/2009/08/30/the-one-objective-c-block-memory-management</id>
   <content type="html">This is what I wish they would have shown us at WWDC, so that I would have understood &lt;a href=&quot;http://thirdcog.eu/pwcblocks/#cblocks-memory&quot;&gt;block memory management&lt;/a&gt; and wouldn&amp;rsquo;t have felt like I had to &lt;a href=&quot;http://thirdcog.eu/pwcblocks/&quot;&gt;write an entire frickin&amp;rsquo; guide to help others avoid my confusion&lt;/a&gt;:

&lt;div style=&quot;background-color: #005885; border: 1px solid #33799d; padding-left: 1em; margin-top: 1em;&quot;&gt;&lt;pre&gt;&lt;code&gt;typedef void(^BasicBlock)(void);

void doStuff(BOOL cool) {
    BasicBlock block;
    if(cool)
        block = ^ { ... };
    else
        block = ^ { ... };
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&amp;hellip; roughly translates to &amp;hellip;&lt;/p&gt;

&lt;div style=&quot;background-color: #005885; border: 1px solid #33799d; padding-left: 1em; margin-top: 1em;&quot;&gt;&lt;pre&gt;&lt;code&gt;void doStuff(BOOL cool) {
    BasicBlock block;
    if(cool) {

        struct Block_literal_1 blockStorage1 = ...;
        block = &amp;amp;blockStorage1;

    } // blockStorage1 falls off the stack here

    else 

    {

        struct Block_literal_1 blockStorage2 = ...;
        block = &amp;amp;blockStorage2;

    } // blockStorage2 falls off the stack here


    // and block thus points to non-existing/invalid memory here.
    ...
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;&amp;hellip; which is why you need to do this, to move the block to the &lt;em&gt;heap&lt;/em&gt;:&lt;/p&gt;

&lt;div style=&quot;background-color: #005885; border: 1px solid #33799d; padding-left: 1em; margin-top: 1em;&quot;&gt;&lt;pre&gt;&lt;code&gt;void doStuff(BOOL cool) {
    BasicBlock block;
    if(cool)
        block = Block_copy(^ { ... });
    else
        block = Block_copy(^ { ... });
    ...
}&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;(which in Cocoa is &lt;code&gt;block = [[^ { ... } copy] autorelease]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This example applies to returning blocks from functions or methods, storing blocks in collections, storing them in instance variables and other variables on the heap, and so on.&lt;/p&gt;

&lt;p&gt;(Sudden realization and example inspiration brought to you by the &lt;a href=&quot;http://clang.llvm.org/docs/BlockImplementation.txt&quot;&gt;Clang Block Implementation Specification&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Teaching Ruby to High School Girls</title>
   <link href="https://nevyn.me/2009/08/28/teaching-ruby-to-high-school-girls/"/>
   <updated>2009-08-28T04:07:02+02:00</updated>
   <id>https://nevyn.me/2009/08/28/teaching-ruby-to-high-school-girls</id>
   <content type="html">&lt;a href=&quot;http://teachingkids.railsbridge.org/2009/08/15/teaching-ruby-to-high-school-girls.html&quot;&gt;Teaching Ruby to High School Girls&lt;/a&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://blog.andymatuschak.org/post/172776592/teaching-ruby-to-high-school-girls&quot;&gt;andymatuschak&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;img src=&quot;http://andymatuschak.org/files/TumblrImages/TeachingRuby.png&quot;/&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.sarahmei.com/blog/&quot;&gt;Sarah Mei&lt;/a&gt; bravely stood in front of a class of high school girls and helped them make a pixelly Etch-a-Sketch. The awesome part? They &lt;i&gt;loved&lt;/i&gt; it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://teachingkids.railsbridge.org/2009/08/15/teaching-ruby-to-high-school-girls.html&quot;&gt;Her detailed transcript of the experience&lt;/a&gt; is enthralling. She has some very clever insights about teaching this stuff:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Ruby purists may protest that I didn’t talk about objects, or classes, but for the ones who keep going with programming, they’ll get that soon enough. In this class, I just wanted them to have fun and see what they could do with code. […]&lt;/p&gt;
&lt;p&gt;I realize now […] that you can’t be too fussy about style. If they want to skip indentation altogether and give all their variables one-letter names, that’s fine, as long as they’re still excited about what they’re doing.&lt;/p&gt;
&lt;p&gt;If they keep going with it, they’ll realize that there’s a reason you indent and give your variables descriptive names, and they’ll start doing it. But […] nothing ensures that they drop it like a hot potato better than harping on them to write maintainable code.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Sarah’s totally got it: kids have to be inspired before they’ll care.&lt;/p&gt;
&lt;p&gt;When I was a kid, I got drawn in by the prospect of making games—that’s really common, right?—but games are a tricky inspirational goal because &lt;a href=&quot;http://web.archive.org/web/20070610125837/hackety.org/2007/05/07/noWayKidsWillAllMakeGames.html&quot;&gt;they’re really freaking complicated to make&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If it’s just a matter of inspiration, though, a student could start by modding existing games or building them through &lt;a href=&quot;http://gamesalad.com/&quot;&gt;drag-and-drop tools&lt;/a&gt;. If the kid is really interested, he’ll outgrow that stuff and find himself with a real hunger for knowledge.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Back in high school, we had to do 50 hours of &amp;ldquo;CAS&amp;rdquo; each year (&amp;ldquo;Creativity, Activity and Service&amp;rdquo;); S was my favorite, because I could hold courses in stuff I loved, like programming, gnuplot, and other nerdy stuff. It was so great! I &amp;lsquo;tricked&amp;rsquo; people who didn&amp;rsquo;t know computers and never got along with them into learning and successfully using &lt;em&gt;a frickin&amp;rsquo; command line unix tool!&lt;/em&gt; Mmm, gnuplot…&lt;/p&gt;

&lt;p&gt;I held one course in QuickBASIC, to teach basic programming, which which I made all my friends attend. QB is fun to experiment with because of the built-in &lt;a href=&quot;http://en.wikipedia.org/wiki/Turtle_graphics&quot;&gt;turtle graphics&lt;/a&gt;. My last task I gave them was to spend the entire class drawing a picture. One of them managed to draw a whole scene with colors and animation and everything, which was a very proud moment :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/08/27/neurosonics-audiomedical-laboratory-footage-this/"/>
   <updated>2009-08-27T01:18:26+02:00</updated>
   <id>https://nevyn.me/2009/08/27/neurosonics-audiomedical-laboratory-footage-this</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;225&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/ukZCHX5ffEI?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;b&gt;Neurosonics Audiomedical Laboratory footage&lt;b&gt;&lt;br/&gt;
This is is just beautiful. Really nice audio design, but the visual stuff is what&amp;rsquo;ll blow you away.&lt;/b&gt;&lt;/b&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/08/25/this-certainly-goes-hand-in-hand-with-what-i/"/>
   <updated>2009-08-25T03:31:00+02:00</updated>
   <id>https://nevyn.me/2009/08/25/this-certainly-goes-hand-in-hand-with-what-i</id>
   <content type="html">&lt;object width=&quot;400&quot; height=&quot;292&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://video.ted.com/assets/player/swf/EmbedPlayer.swf&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;param name=&quot;bgColor&quot; value=&quot;#ffffff&quot;&gt;&lt;/param&gt; &lt;param name=&quot;flashvars&quot; value=&quot;vu=http://video.ted.com/talks/embed/DanielPink_2009G-embed_high.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/DanielPink-2009G.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=618&quot; /&gt;&lt;embed src=&quot;http://video.ted.com/assets/player/swf/EmbedPlayer.swf&quot; pluginspace=&quot;http://www.macromedia.com/go/getflashplayer&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; bgColor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;292&quot; allowFullScreen=&quot;true&quot; flashvars=&quot;vu=http://video.ted.com/talks/embed/DanielPink_2009G-embed_high.flv&amp;su=http://images.ted.com/images/ted/tedindex/embed-posters/DanielPink-2009G.embed_thumbnail.jpg&amp;vw=432&amp;vh=240&amp;ap=0&amp;ti=618&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br/&gt;&lt;p&gt;This certainly goes hand in hand with what I always knew but didn&amp;rsquo;t know I knew! How do I know that? Well, just right now I was watching a TED talk instead of writing code for a very well-paid client job, that&amp;rsquo;s how! And see? Here I&amp;rsquo;m writing a blog entry instead of writing said code. It&amp;rsquo;s a conspiracy of the mind! Memes, they eat my brains away.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/08/23/i-need-to-make-something-with-this-gimme-the/"/>
   <updated>2009-08-23T06:17:47+02:00</updated>
   <id>https://nevyn.me/2009/08/23/i-need-to-make-something-with-this-gimme-the</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/Y9HMn6bd-v8?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;I NEED to make something with this. Gimme the code! Or maybe there&amp;rsquo;s a paper? Need to get my GPGPU on.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Programming with C Blocks on Apple Devices</title>
   <link href="https://nevyn.me/2009/08/17/programming-with-c-blocks-on-apple-devices/"/>
   <updated>2009-08-17T06:08:18+02:00</updated>
   <id>https://nevyn.me/2009/08/17/programming-with-c-blocks-on-apple-devices</id>
   <content type="html">&lt;a href=&quot;http://thirdcog.eu/pwcblocks/&quot;&gt;Programming with C Blocks on Apple Devices&lt;/a&gt;&lt;br/&gt;&lt;p&gt;I wrote a guide to using the new neat Blocks feature from Snow Leopard. Bonus: You can use them on 10.5 and iPhone too! Read on, and please leave a comment with what you thought of it, especially if you disliked it or something&amp;rsquo;s amiss.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The specialized device</title>
   <link href="https://nevyn.me/2009/08/15/the-specialized-device/"/>
   <updated>2009-08-15T07:18:00+02:00</updated>
   <id>https://nevyn.me/2009/08/15/the-specialized-device</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://mrgan.tumblr.com/post/162888021/the-specialized-device&quot;&gt;mrgan&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;And one last area where the tablet may create a whole new category: gaming. To my knowledge there’s been no 10”, handheld, touch-input game console. Again, the form factor won’t just mean that now your &lt;a href=&quot;http://rolando.ngmoco.com/&quot;&gt;Rolandos&lt;/a&gt; will be four times as big; it will mean whole new kinds of games. I don’t have the imagination to guess what these will be, but the possibilities are enormous, even assuming that Apple doesn’t add any new capabilities (such as a front-facing camera).&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;How about this? (youtube videos below for you dashboarders)&lt;/p&gt;

&lt;div style=&quot;position:relative; left: -25px;&quot;&gt;
&lt;object width=&quot;560&quot; height=&quot;340&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/5ohNzHWL7FI&amp;amp;hl=en&amp;amp;fs=1&amp;amp;&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/5ohNzHWL7FI&amp;amp;hl=en&amp;amp;fs=1&amp;amp;&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;560&quot; height=&quot;340&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;br/&gt;&lt;object width=&quot;560&quot; height=&quot;340&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/2-oArux66gA&amp;amp;hl=en&amp;amp;fs=1&amp;amp;&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/2-oArux66gA&amp;amp;hl=en&amp;amp;fs=1&amp;amp;&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;560&quot; height=&quot;340&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>tristn:

The Avalanches - A Different Feeling
“Since I Left You” is paradise, “Frontier Psychiatrist” is a funnier song, “Etoh” has funky talking robots, “Live At Dominoes” is the best dance song, but “A Different Feeling” is the song that kicks my ass every time I hear the album. The sudden string quartet switch-off and then the Space Invaders join back in and oh my fuck.

No no no, the album is crap, they cut so many samples to comply with copyright and the result is bland compared to the mesmerizing, wandering masterpiece I’ve attached to this post. I have no idea what it is or where it’s from, only that it has existed in my Music folder since way back.

(Actually, I haven’t listened to the album that much, I just had to compensate for losing my edge.)</title>
   <link href="https://nevyn.me/2009/08/15/tristn-the-avalanches-a-different-feeling/"/>
   <updated>2009-08-15T06:30:00+02:00</updated>
   <id>https://nevyn.me/2009/08/15/tristn-the-avalanches-a-different-feeling</id>
   <content type="html">&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://assets.tumblr.com/swf/audio_player.swf?audio_file=http%3A%2F%2Fnevyn.nu%2Fmusic%2Fetc%2F_Avalanches_%2520-%2520Live.mp3&amp;color=FFFFFF&quot; height=&quot;27&quot; width=&quot;207&quot; quality=&quot;best&quot; wmode=&quot;opaque&quot;&gt;&lt;/embed&gt;
</content>
 </entry>
 
 <entry>
   <title>Use ImageMagick on your webservers?</title>
   <link href="https://nevyn.me/2009/08/04/use-imagemagick-on-your-webservers/"/>
   <updated>2009-08-04T07:04:23+02:00</updated>
   <id>https://nevyn.me/2009/08/04/use-imagemagick-on-your-webservers</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.marco.org/155083680&quot;&gt;marco&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&amp;amp;t=14051&quot;&gt;This thread&lt;/a&gt; just solved a big &lt;code&gt;convert&lt;/code&gt; performance bottleneck for me, in which basic image operations (resize, sharpen, etc.) would take orders of magnitude more time than with older versions of ImageMagick and would saturate multiple CPU cores for far too long.&lt;/p&gt;

&lt;p&gt;Apparently, OpenMP isn’t very good yet for many-core, high-volume usage.&lt;/p&gt;

&lt;p&gt;Compile ImageMagick with &lt;code&gt;--disable-openmp&lt;/code&gt; and performance skyrockets.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;That&amp;rsquo;s hilarious! I love all these &amp;ldquo;Just add a few pragmas (oh, and relearn everything you know about parallelism) and your app will SCALE LINEARLY with cores! OMG!&amp;rdquo; which then fall flat on their face in real world applications.&lt;/p&gt;

&lt;p&gt;Anecdote from last WWDC: One of the very last sessions (that is, after everyone had been learning everything about the new kickass stuff in 10.6) was a session by Intel on Intel&amp;rsquo;s magical threading library &lt;a href=&quot;http://en.wikipedia.org/wiki/TBB&quot;&gt;Threading Building Blocks&lt;/a&gt;, comparing it to the new and shiny &lt;a href=&quot;http://en.wikipedia.org/wiki/Grand_Central_Dispatch&quot;&gt;Grand Central Dispatch&lt;/a&gt;. They spend 70% of the presentation teaching us TBB (which everyone already knew) and pimping it real hard with a really slow, ugly and totally miscoded sample app that they gradually TBB&amp;rsquo;d. When they were done, it was time for the GCD comparison, in which they completely misunderstood how to use it, then tried to cram GCDisms into their app that was already architected entirely to fit TBB. Even though they stood up there and failed so hard it hurt at understanding GCD, their code STILL ran FASTER on GCD than with their own brainchild TBB! I wasn&amp;rsquo;t sure whether to laugh or cry.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ballmer Admits Microsoft Ship Crap</title>
   <link href="https://nevyn.me/2009/08/01/ballmer-admits-microsoft-ship-crap/"/>
   <updated>2009-08-01T04:16:59+02:00</updated>
   <id>https://nevyn.me/2009/08/01/ballmer-admits-microsoft-ship-crap</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.techradar.com/news/computing/pc/ballmer-windows-7-will-give-heck-of-a-christmas--621769&quot;&gt;techradar.com&lt;/a&gt; &amp;lt; &lt;a href=&quot;http://blog.jxpx777.com/post/152986815/ballmer-admits-microsoft-ship-crap&quot;&gt;jxpx777&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&amp;ldquo;We don’t believe in coming to market like Apple - high margin, high quality, high price.         We believe in high volume and low price.&amp;rdquo; — Steve Ballmer&lt;/blockquote&gt;
&lt;p&gt;Heh, golden.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/07/25/huh-three20-was-a-lot-cooler-than-i-thought-i/"/>
   <updated>2009-07-25T12:52:38+02:00</updated>
   <id>https://nevyn.me/2009/07/25/huh-three20-was-a-lot-cooler-than-i-thought-i</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/5429347?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;300&quot; frameborder=&quot;0&quot; title=&quot;TTStyleBuilder&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Huh. Three20 was a lot cooler than I thought; I was thinking it was just a few handy controls, but lurking in its depths was a real, working and very cool implementation of &lt;a href=&quot;http://kickingbear.com/blog/archives/3&quot;&gt;Guy English&amp;rsquo; Cocoa Shaders idea&lt;/a&gt;. The video shows a UI on top of this shader system, where you can play with what you&amp;rsquo;d otherwise do in code.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Hexy: Everything Overload wants to be</title>
   <link href="https://nevyn.me/2009/07/20/hexy-everything-overload-wants-to-be/"/>
   <updated>2009-07-20T22:36:00+02:00</updated>
   <id>https://nevyn.me/2009/07/20/hexy-everything-overload-wants-to-be</id>
   <content type="html">&lt;p&gt;Me over at &lt;a href=&quot;http://iphone-reviews.tumblr.com/post/145294344/hexy-fifth-ace-productions-everything-overload-wants&quot;&gt;iphone-reviews&lt;/a&gt;:&lt;/p&gt;

&lt;p style=&quot;float:right; margin:1em;&quot;&gt;&lt;img src=&quot;http://blog.bigzaphod.org/wp-content/uploads/newshot2.jpg&quot; width=&quot;220&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=297408435&amp;amp;mt=8&quot;&gt;Hexy&lt;/a&gt; is an abstract, tile- and turn-based strategy game with variable board size, for the iPhone. With all those similarities to &lt;a href=&quot;http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=289191117&amp;amp;mt=8&quot;&gt;a certain other game&lt;/a&gt;, I had to give it a try. And you know what? Hexy is everything I ever wanted Overload to be.&lt;/p&gt;

&lt;p&gt;It follows iPhone interface guidelines, while customizing them to go with the game’s theme AND look stunningly beautiful. It has a conceptual theme going (bee hive; with &lt;a href=&quot;http://twitter.com/nevyn/status/2724064077&quot;&gt;the complimentary joke&lt;/a&gt; that &lt;a href=&quot;http://twitter.com/dylanbr/status/2724192811&quot;&gt;any nerd will appreciate&lt;/a&gt;), but without going all the way there; it’s not a yellow-orange cartoon bee hive that one might expect from a flash or j2me game, but rather just enough subtle cues (sounds, names of things) to take it far enough while keeping the graphical design simple, unique and beautiful.&lt;/p&gt;

&lt;p&gt;There’s a tutorial on first play that’s succinct and nicely done like everything else. There’s just no excuse for not having one in my game…&lt;/p&gt;

&lt;p&gt;There’s local versus AI play, and local two player gaming, that’s simple enough. Further, though, there’s wifi play, and match-making online multiplayer. I haven’t seen that much, which is why I’m so anxious to get it into my own game as well. Unfortunately there doesn’t seem to be that many online players in Europe; the match maker didn’t find anyone for me to play with so I didn’t get to judge that experience. In Overload, I hope to make that situation better with push notification game invitation, friend lists and an in-game community, but that’s a very big step.&lt;/p&gt;

&lt;p&gt;Most importantly though, is that Hexy is both challenging, allows for complex strategy, and a great deal of fun, while keeping games short enough for a play when waiting in queue with your phone; in short, the perfect mobile casual game. So get it! ~~&lt;a href=&quot;http://overooped.com/&quot;&gt;nevyn&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/07/11/really-awesome-real-time-skylight-editor-in/"/>
   <updated>2009-07-11T22:44:33+02:00</updated>
   <id>https://nevyn.me/2009/07/11/really-awesome-real-time-skylight-editor-in</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;225&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/kksmifosh0w?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Really awesome &lt;a href=&quot;http://blog.wolfire.com/2009/07/sky-and-lighting-editing-part-1/&quot;&gt;real-time skylight editor in Overgrowth&lt;/a&gt;. Goddammit the Wolfire coders rock. When I grow up I also want to be a 3D programmer!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Developers think cloning a site like StackOverflow is easy for the same reason that open-source software remains such a horrible pain in the ass to use.</title>
   <link href="https://nevyn.me/2009/07/09/developers-think-cloning-a-site-like-stackoverflow/"/>
   <updated>2009-07-09T08:34:37+02:00</updated>
   <id>https://nevyn.me/2009/07/09/developers-think-cloning-a-site-like-stackoverflow</id>
   <content type="html">&lt;blockquote&gt;Developers think cloning a site like StackOverflow is easy for the same reason that open-source software remains such a horrible pain in the ass to use.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://blog.bitquabit.com/2009/07/01/one-which-i-call-out-hacker-news/&quot;&gt;bitquabit on that Stack Overflow REALLY isn&amp;rsquo;t something you can replicate over a weekend&lt;/a&gt;. Even typing at 100WPM and making zero mistakes and having the original source code on paper and just retyping it into your editor, would take eighty hours. Certainly puts it into perspective.

&lt;p&gt;He outlines some good reasons why back-end coders generally fail hard at front-end coding (*cough*linux*cough*), and I can&amp;rsquo;t but agree. Front-end is very time consuming, and not something you can make compromises on if you actually want users to use the software.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Raining on Chrome OS</title>
   <link href="https://nevyn.me/2009/07/09/raining-on-chrome-os/"/>
   <updated>2009-07-09T08:11:00+02:00</updated>
   <id>https://nevyn.me/2009/07/09/raining-on-chrome-os</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.marco.org/137766495&quot;&gt;marco&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;Not to put a damper on anyone’s fun, but doesn’t the Google Chrome OS sound a lot like &lt;a href=&quot;http://www.marco.org/135849603&quot;&gt;this&lt;/a&gt;?&lt;/blockquote&gt;

&lt;p&gt;That&amp;rsquo;s what I was thinking. I was also thinking, &amp;ldquo;Maybe Google&amp;rsquo;s won&amp;rsquo;t be as craptastic&amp;rdquo;, followed by &amp;ldquo;Wait, never mind&amp;rdquo;.&lt;/p&gt;

&lt;p&gt;The only way web apps could work as desktop apps would be if you gave them all the features of desktop apps; rich c&amp;amp;p, drag'n'drop, full control over the chrome, a native UI that does not assume that every surface is made for text and should be selectable, control over hardware features, a more desktop-like LOCAL/local-like and shared-between-apps document store, having in the os the concept of an application with several windows rather than just a bunch of windows that might be connected (think gmail and the buggy gtalk floating windows e g), &amp;hellip; yeah, the list goes on. I&amp;rsquo;d be very pleasantly surprised if that&amp;rsquo;s what Google is aiming for, but I doubt it. They probably just want Google Apps in a full screen browser and be done with it.&lt;/p&gt;

&lt;p&gt;Also, I don&amp;rsquo;t get a single one of the arguments they are pushing as &amp;ldquo;good&amp;rdquo; about Chrome OS. Malware? Get a Mac. Cluttered UI? Get a Mac. Startup time? Don&amp;rsquo;t shut it down when you&amp;rsquo;re done with it, just have it sleep, dammit, can&amp;rsquo;t you use a computer? Want the OS to not get unusable after half a year? Get a Mac. And learn to use a computer. Forgot to backup? Time Machine. Software and security updates? Believe me. Chrome OS will require software updates. Video drivers can&amp;rsquo;t run as web apps. Nor kernels. Nor window managers. You get the point.&lt;/p&gt;

&lt;p&gt;Some more OS competition can do nothing but good; I&amp;rsquo;m just not buying their arguments nor their goal one iota. Maybe the presentation was bad? Hey Google, maybe you could have some concept images in your next blog post? Or maybe wait until you have something to show, and show us that.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Futurustic UI: Virtuality</title>
   <link href="https://nevyn.me/2009/07/08/futurustic-ui-virtuality/"/>
   <updated>2009-07-08T04:35:00+02:00</updated>
   <id>https://nevyn.me/2009/07/08/futurustic-ui-virtuality</id>
   <content type="html">&lt;p&gt;I just watched the pilot for Virtuality, and whenever I watch a scifi, I&amp;rsquo;m intrigued by the UI the future people use. Sure, some of it is just flashy wosh stuff just there to look good on the big screen, but there can also be real thought and vision behind it.&lt;/p&gt;

&lt;p&gt;This video editor the shrink uses is cool because it looks like a real, working app, and he does gestures and live editing and he looks like he&amp;rsquo;s in control. (Sorry for the HUD video controls, no way to hide them in QTX when video is paused, very annoying)&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://nevyn.nu/blog/images/video1.png&quot;&gt;&lt;img src=&quot;http://nevyn.nu/blog/images/video1.png&quot; style=&quot;width:500px;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://nevyn.nu/blog/images/video2.png&quot;&gt;&lt;img src=&quot;http://nevyn.nu/blog/images/video2.png&quot; style=&quot;width:500px;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Okay, this is just flashy. But it&amp;rsquo;s really flashy:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://nevyn.nu/blog/images/hud.png&quot;&gt;&lt;img src=&quot;http://nevyn.nu/blog/images/hud.png&quot; style=&quot;width:500px;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the form factor of the device I want Apple to make. This is what the iPhone will be like. Look, it even looks like an iPhone in the third shot.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://nevyn.nu/blog/images/pda1.png&quot;&gt;&lt;img src=&quot;http://nevyn.nu/blog/images/pda1.png&quot; style=&quot;width:500px;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://nevyn.nu/blog/images/pda2.png&quot;&gt;&lt;img src=&quot;http://nevyn.nu/blog/images/pda2.png&quot; style=&quot;width:500px;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://nevyn.nu/blog/images/pda3.png&quot;&gt;&lt;img src=&quot;http://nevyn.nu/blog/images/pda3.png&quot; style=&quot;width:500px;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Heh. Tweet burgers. I need to tweet this shot.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://nevyn.nu/blog/images/TweetBurger.png&quot;&gt;&lt;img src=&quot;http://nevyn.nu/blog/images/TweetBurger.png&quot; style=&quot;width:500px;&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>ned kelly thumb drive</title>
   <link href="https://nevyn.me/2009/07/07/ned-kelly-thumb-drive/"/>
   <updated>2009-07-07T04:36:00+02:00</updated>
   <id>https://nevyn.me/2009/07/07/ned-kelly-thumb-drive</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbpl0qzungWOy3v6Ko1_400.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&amp;lt; &lt;a href=&quot;http://www.engadget.com/2009/07/06/ned-kelly-thumb-drive-for-the-bushranger-in-your-life/&quot;&gt;engadget&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>App idea: Presence</title>
   <link href="https://nevyn.me/2009/07/06/app-idea-presence/"/>
   <updated>2009-07-06T22:30:00+02:00</updated>
   <id>https://nevyn.me/2009/07/06/app-idea-presence</id>
   <content type="html">&lt;p&gt;Tell me if this already exists so I don&amp;rsquo;t waste my time! I&amp;rsquo;d want this feature for another app I&amp;rsquo;m writing.&lt;/p&gt;&lt;p&gt;This is a mock iTunes App Store app description:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Presence lets you control an online service where you can set your global status (Available, DND, in a meeting, sleeping, etc), which can then be polled by any third party, e g to determine if it&amp;rsquo;s okay to push a notification to you right now.&lt;/p&gt;

&lt;p&gt;Choose between default statuses, or make your own. Customize each status to what you are okay with receiving in that status, and whether to push that status change to any of your services (e g google talk or msn).&lt;/p&gt;

&lt;p&gt;Also has the ability to set your status on a schedule (e g set to &amp;ldquo;Sleeping&amp;rdquo; at midnight and until 8 am).&lt;/p&gt;
&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/07/03/very-cool-physics-game-prototype-with-a-gazillion/"/>
   <updated>2009-07-03T08:29:28+02:00</updated>
   <id>https://nevyn.me/2009/07/03/very-cool-physics-game-prototype-with-a-gazillion</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;225&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/bVezPRfol9E?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;VERY cool physics game prototype with a gazillion particles, by the awesome kotsoft.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>smbc 1543</title>
   <link href="https://nevyn.me/2009/07/01/smbc-1543/"/>
   <updated>2009-07-01T20:54:56+02:00</updated>
   <id>https://nevyn.me/2009/07/01/smbc-1543</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbpdf1srkANcKNkl4o1_500.gif&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.smbc-comics.com/index.php?db=comics&amp;amp;id=1543&quot;&gt;SMBC #1543&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>picture is unrelated is eternal damnation worth</title>
   <link href="https://nevyn.me/2009/06/27/picture-is-unrelated-is-eternal-damnation-worth/"/>
   <updated>2009-06-27T16:29:20+02:00</updated>
   <id>https://nevyn.me/2009/06/27/picture-is-unrelated-is-eternal-damnation-worth</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbp7fstw4a9Y5IuzLo1_400.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://pictureisunrelated.com/2009/05/14/is-eternal-damnation-worth-a-little-bacon/&quot;&gt;Picture Is Unrelated — &lt;b&gt;Is eternal damnation worth a little bacon?&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/06/26/voxar-hackedgadgets-smb-themes-on-stepper/"/>
   <updated>2009-06-26T15:43:03+02:00</updated>
   <id>https://nevyn.me/2009/06/26/voxar-hackedgadgets-smb-themes-on-stepper</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/Kh2AWswAMvw?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;voxar &amp;lt; &lt;a href=&quot;http://hackedgadgets.com/2009/06/24/super-mario-played-with-three-stepper-motors/&quot;&gt;hackedgadgets&lt;/a&gt;: SMB themes on stepper motors! I want to make odd machinery make music too&amp;hellip;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>by voxar taken outside dreamhack summer 2009</title>
   <link href="https://nevyn.me/2009/06/17/by-voxar-taken-outside-dreamhack-summer-2009/"/>
   <updated>2009-06-17T04:03:00+02:00</updated>
   <id>https://nevyn.me/2009/06/17/by-voxar-taken-outside-dreamhack-summer-2009</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsboseqp86eA56wZHXo1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;(by &lt;a href=&quot;http://twitter.com/Voxar/status/2189430280&quot;&gt;@voxar&lt;/a&gt;; taken outside Dreamhack Summer 2009)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/06/05/made-a-rather-serene-screensaver-from-my-wwdc/"/>
   <updated>2009-06-05T06:48:19+02:00</updated>
   <id>https://nevyn.me/2009/06/05/made-a-rather-serene-screensaver-from-my-wwdc</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/5005047?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;250&quot; frameborder=&quot;0&quot; title=&quot;Third Cog screen saver&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Made a rather serene screensaver from my &lt;a href=&quot;http://dl-client.getdropbox.com/u/6775/WWDC-badge-insert2.png&quot;&gt;wwdc badge insert&lt;/a&gt; (thanks for the &lt;a href=&quot;http://carpeaqua.com/2009/06/04/make-your-own-wwdc-badge-insert/&quot;&gt;inspiration, carpeaqua&lt;/a&gt;!) +&lt;a href=&quot;http://thirdcog.eu/&quot;&gt;thirdcog&amp;rsquo;s  cog animation&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Erlang R13B pkg installer for 64-bit Intel Macs</title>
   <link href="https://nevyn.me/2009/06/03/erlang-r13b-pkg-installer-for-64-bit-intel-macs/"/>
   <updated>2009-06-03T23:54:22+02:00</updated>
   <id>https://nevyn.me/2009/06/03/erlang-r13b-pkg-installer-for-64-bit-intel-macs</id>
   <content type="html">&lt;a href=&quot;http://nevyn.nu/files/Erlang_R13B.pkg&quot;&gt;Erlang R13B pkg installer for 64-bit Intel Macs&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Compiled with: ./configure &amp;ndash;enable-threads &amp;ndash;enable-smp-support &amp;ndash;enable-darwin-64bit &amp;ndash;enable-m64-build&lt;/p&gt;

&lt;p&gt;It will only work on a 64-bit Intel Mac.&lt;/p&gt;

&lt;p&gt;Installs in /usr/local/bin, which should be in your default $PATH.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/05/27/i-love-voxars-coding-runs/"/>
   <updated>2009-05-27T16:46:58+02:00</updated>
   <id>https://nevyn.me/2009/05/27/i-love-voxars-coding-runs</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/4852677?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;565&quot; frameborder=&quot;0&quot; title=&quot;Spot v0.2.0&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;I love &lt;a href=&quot;http://twitter.com/voxar/&quot;&gt;Voxar&lt;/a&gt;&amp;rsquo;s coding runs.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The Zen Master</title>
   <link href="https://nevyn.me/2009/05/26/the-zen-master/"/>
   <updated>2009-05-26T02:17:36+02:00</updated>
   <id>https://nevyn.me/2009/05/26/the-zen-master</id>
   <content type="html">&lt;p&gt;I just met my first C zen master on IRC. After he thorougly demolished my belief that it&amp;rsquo;s even possible for me to learn all of C with this:&lt;/p&gt;
&lt;blockquote&gt;
Zhivago: We write a pointer to int[3] in C as int (*)[3].
&lt;/blockquote&gt;

&lt;p&gt;&amp;hellip; he goes on with this gem after my astonishment:&lt;/p&gt;
&lt;blockquote&gt;
Zhivago: nevyn: One of the most valuable things that we can do is to learn to appreciate just how grotesquely ignorant we are.
&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>The value is limitless</title>
   <link href="https://nevyn.me/2009/05/26/the-value-is-limitless/"/>
   <updated>2009-05-26T02:08:56+02:00</updated>
   <id>https://nevyn.me/2009/05/26/the-value-is-limitless</id>
   <content type="html">&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;
(gdb) p (double)pow(10, 6)
$9 = inf
&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;

&lt;p&gt;What. The. Fuck?! Do I need to relearn C AGAIN?!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/05/25/spot-the-open-source-spotify-client-for-iphone/"/>
   <updated>2009-05-25T19:32:00+02:00</updated>
   <id>https://nevyn.me/2009/05/25/spot-the-open-source-spotify-client-for-iphone</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/ARKnvnOCJJg?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://github.com/nevyn/spot&quot;&gt;Spot&lt;/a&gt;, the open source Spotify client for iPhone.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;God I look like a drug addict in that thumbnail, and it takes *days* for it to change&amp;hellip; In my defense, I recorded that video at 5 AM!&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>xib + subversion + automerge = pain</title>
   <link href="https://nevyn.me/2009/05/24/xib-subversion-automerge-pain/"/>
   <updated>2009-05-24T22:42:00+02:00</updated>
   <id>https://nevyn.me/2009/05/24/xib-subversion-automerge-pain</id>
   <content type="html">&lt;p&gt;Don&amp;rsquo;t let Subversion automerge your xib files. This error isn&amp;rsquo;t even on the freakin&amp;rsquo; google:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;ibtool: some object IDs were duplicated&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;You can work around this by 1) telling subversion the file can&amp;rsquo;t be merged by setting its mime type to application/octet-stream 2) requiring the file to be svn locked before you edit it for an exclusive lock. You can tell your subversion client to automatically give xib files these properties by adding a few lines to your ~/.subversion/config file.&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;
## Under [miscellany]
enable-auto-props = yes

## under [auto-props]
*.nib = svn:mime-type=application/octet-stream;svn:needs-lock=*
*.xib = svn:mime-type=application/octet-stream;svn:needs-lock=*
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;

&lt;p&gt;Of course, your merged xib is still beyond saving, so just fetch the previous version and redo all your changes! (also, &lt;a href=&quot;http://svnbook.red-bean.com/en/1.5/svn.advanced.locking.html&quot;&gt;more on subversion locking&lt;/a&gt; and &lt;a href=&quot;http://blogs.open.collab.net/svn/2007/07/from-the-questi.html&quot;&gt;exclusive checkouts&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>1972 - Dennis Ritchie invents a powerful gun that shoots both forward and backward simultaneously. Not satisfied with the number of deaths and permanent maimings from that invention he invents C and Unix.</title>
   <link href="https://nevyn.me/2009/05/08/1972-dennis-ritchie-invents-a-powerful-gun-that/"/>
   <updated>2009-05-08T23:38:00+02:00</updated>
   <id>https://nevyn.me/2009/05/08/1972-dennis-ritchie-invents-a-powerful-gun-that</id>
   <content type="html">&lt;blockquote&gt;1972 - Dennis Ritchie invents a powerful gun that shoots both forward and backward simultaneously. Not satisfied with the number of deaths and permanent maimings from that invention he invents C and Unix.&lt;/blockquote&gt;&amp;#8212;&lt;p&gt;&lt;a href=&quot;http://james-iry.blogspot.com/2009/05/brief-incomplete-and-mostly-wrong.html&quot;&gt;One Div Zero — A Brief, Incomplete and Mostly Wrong History of Programming Languages&lt;/a&gt;. Also:&lt;/p&gt;
&lt;blockquote&gt;
1983 - Bjarne Stroustrup bolts everything he&amp;rsquo;s ever heard of onto C to create C++. The resulting language is so complex that programs must be sent to the future to be compiled by the Skynet artificial intelligence. Build times suffer.&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>C: Screwdriver. Objective-C: Tire iron with screwdriver tip. Python: Electric screwdriver. PHP: Electric hammer.</title>
   <link href="https://nevyn.me/2009/05/07/c-screwdriver-objective-c-tire-iron-with/"/>
   <updated>2009-05-07T16:40:32+02:00</updated>
   <id>https://nevyn.me/2009/05/07/c-screwdriver-objective-c-tire-iron-with</id>
   <content type="html">&lt;blockquote&gt;C: Screwdriver. Objective-C: Tire iron with screwdriver tip. Python: Electric screwdriver. PHP: Electric hammer.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://twitter.com/boredzo&quot;&gt;@boredzo&lt;/a&gt; &amp;amp; &lt;a href=&quot;http://twitter.com/mikeysan&quot;&gt;@mikeysan&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>När flera partipolitiskt engagerade då uttrycker att ett utmanarparti är “oansvarigt” för att det är helt dedikerat värnandet om medborgerliga rättigheter, stör det mig.</title>
   <link href="https://nevyn.me/2009/05/05/pirater/"/>
   <updated>2009-05-05T22:25:14+02:00</updated>
   <id>https://nevyn.me/2009/05/05/pirater</id>
   <content type="html">&lt;blockquote&gt;När flera partipolitiskt engagerade då uttrycker att ett utmanarparti är &amp;ldquo;oansvarigt&amp;rdquo; för att det är helt dedikerat värnandet om medborgerliga rättigheter, stör det mig.&lt;/blockquote&gt;&amp;#8212;&lt;p&gt;&lt;a href=&quot;http://www.expressen.se/debatt/1.1557612/radda-internet&quot;&gt;Marie ”Emma” Andersson i Expressen Debatt&lt;/a&gt;. Ännu ett guldkorn:&lt;/p&gt;
&lt;blockquote&gt;&amp;ldquo;Problemet&amp;rdquo; med ett utmanarparti av den här typen skulle kunna lösas väldigt enkelt genom att våra rättigheter återinförs. Skulle frågor om integritet, mänskliga rättigheter, rättssäkerhet och proportionalitet drivas mer seriöst skulle inte Piratpartiet existera.&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>wohoooo san francisco here i come</title>
   <link href="https://nevyn.me/2009/05/02/wohoooo-san-francisco-here-i-come/"/>
   <updated>2009-05-02T07:01:34+02:00</updated>
   <id>https://nevyn.me/2009/05/02/wohoooo-san-francisco-here-i-come</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbmyuuyydUyoIjUBco1_1280.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;WOHOOOO! San Francisco, here I come!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The sentence “I never said she stole my money” can have seven different meanings depending on which word is stressed.</title>
   <link href="https://nevyn.me/2009/04/28/the-sentence-i-never-said-she-stole-my-money-can/"/>
   <updated>2009-04-28T16:41:20+02:00</updated>
   <id>https://nevyn.me/2009/04/28/the-sentence-i-never-said-she-stole-my-money-can</id>
   <content type="html">&lt;blockquote&gt;The sentence “I never said she stole my money” can have seven different meanings depending on which word is stressed.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://www.peterwknox.com/&quot;&gt;peterwknox&lt;/a&gt; &amp;lt; &lt;a href=&quot;http://gregbrown.tumblr.com/&quot;&gt;gregbrown&lt;/a&gt; &amp;lt; &lt;a href=&quot;http://setuplikeadeckofcards.com/&quot;&gt;setuplikeadeckofcards&lt;/a&gt; &amp;lt; &lt;a href=&quot;http://luminosa.tumblr.com/&quot;&gt;luminosa&lt;/a&gt;:
&lt;blockquote&gt;A neat anecdote from &lt;a href=&quot;http://www.nytimes.com/2009/04/27/technology/27jeopardy.html&quot;&gt;the New York Times article on IBM’s Jeopardy-playing computer&lt;/a&gt;.&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://tjmahr.com/&quot;&gt;tristanjay7&lt;/a&gt;:
&lt;/p&gt;&lt;blockquote&gt;
&lt;p&gt;It’s called &lt;a href=&quot;http://en.wikipedia.org/wiki/Focus_(linguistics)&quot;&gt;focus&lt;/a&gt;. Also, I’m not getting the special meaning for the reading in which “money” is stressed.&lt;a href=&quot;http://en.wikipedia.org/wiki/Focus_(linguistics)&quot;&gt;&lt;br/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&amp;ldquo;She stole my &lt;em&gt;heart!&lt;/em&gt;&amp;rdquo;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>ruby script/generate scaffold &lt; types</title>
   <link href="https://nevyn.me/2009/04/27/ruby-scriptgenerate-scaffold-types/"/>
   <updated>2009-04-27T04:24:00+02:00</updated>
   <id>https://nevyn.me/2009/04/27/ruby-scriptgenerate-scaffold-types</id>
   <content type="html">&lt;blockquote&gt;
script/generate scaffold ModelName [field:type, field:type]
&lt;/blockquote&gt;
&lt;p&gt;Rails 2.x changed the scaffolding script to one that &lt;em&gt;doesn&amp;rsquo;t&lt;/em&gt; make a view that iterates over all the columns, letting you create an admin interface in five minutes, but rather one that wants you to fill in the types of all the columns of the table there, on the spot. (Can you tell I don&amp;rsquo;t like the change?). Neither the in-command help, nor the docs on scaffold, nor google tell you what the valid types for the columns are; turns out it&amp;rsquo;s the same types you use in migrations. (Maybe that&amp;rsquo;s obvious, but being the foolish man I am, I never learned migrations properly until very recently). Thusly, I&amp;rsquo;ll copy-paste &lt;a href=&quot;http://dizzy.co.uk/ruby_on_rails/cheatsheets/rails-migrations#database_mapping&quot;&gt;this wonderful cheat-sheet&lt;/a&gt; with the types, for future reference for myself and you:&lt;/p&gt;

&lt;table width=&quot;500&quot; border=&quot;1&quot;&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Rails&lt;/th&gt;&lt;th&gt;db2&lt;/th&gt;&lt;th&gt;mysql&lt;/th&gt;&lt;th&gt;openbase&lt;/th&gt;&lt;th&gt;Oracle&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:binary&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;blob(32678)&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;blob&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;object&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;blob&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:boolean&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;decimal(1)&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;tinyint(1)&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;boolean&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;number(10)&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:date&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;date&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;date&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;date&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;date&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:datetime&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;timestamp&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;datetime&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;datetime&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;date&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:decimal&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;decimal&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;decimal&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;decimal&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;decimal&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:float&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;float&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;float&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;float&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;number&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:integer&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;int&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;int(11)&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;integer&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;number(38)&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:string&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;varchar(255)&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;varchar(255)&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;char(4096)&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;varchar2(255)&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:text&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;clob(32768)&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;text&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;text&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;clob&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:time&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;time&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;time&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;time&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;date&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:timestamp&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;timestamp&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;datetime&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;timestamp&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;date&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;5&quot;&gt; &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;th&gt;Rails&lt;/th&gt;
&lt;th&gt;postgresql&lt;/th&gt;
&lt;th&gt;sqlite&lt;/th&gt;
&lt;th&gt;sqlserver&lt;/th&gt;
&lt;th&gt;Sybase&lt;/th&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:binary&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;bytea&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;blob&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;image&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;image&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:boolean&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;boolean&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;boolean&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;bit&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;bit&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:date&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;date&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;date&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;datetime&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;datetime&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:datetime&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;timestamp&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;datetime&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;datetime&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;datetime&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:decimal&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;decimal&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;decimal&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;decimal&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;decimal&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:float&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;float&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;float&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;float(8)&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;float(8)&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:integer&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;integer&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;integer&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;int&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;int&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:string&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;*&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;varchar(255)&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;varchar(255)&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;varchar(255)&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:text&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;text&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;text&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;text&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;text&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:time&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;time&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;datetime&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;datetime&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;time&lt;/td&gt;
&lt;/tr&gt;&lt;tr&gt;&lt;td style=&quot;text-align: left;&quot;&gt;&lt;code&gt;:timestamp&lt;/code&gt;&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;timestamp&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;datetime&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;datetime&lt;/td&gt;&lt;td style=&quot;text-align: left;&quot;&gt;timestamp&lt;/td&gt;
&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/04/25/lucius-i-wonder-if-there-will-be-cake/"/>
   <updated>2009-04-25T19:30:17+02:00</updated>
   <id>https://nevyn.me/2009/04/25/lucius-i-wonder-if-there-will-be-cake</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/Fz2_NkyTv8E?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://lucius.tumblr.com/post/99841640&quot;&gt;lucius&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;“I wonder if there will be cake.”&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>[Swedish] Piratpolitik</title>
   <link href="https://nevyn.me/2009/04/23/swedish-piratpolitik/"/>
   <updated>2009-04-23T22:21:40+02:00</updated>
   <id>https://nevyn.me/2009/04/23/swedish-piratpolitik</id>
   <content type="html">Jag har blivit piratpartist, och &lt;a href=&quot;http://blogg.expressen.se/peterj/entry.jsp?messid=495711&quot;&gt;detta mailet från en mailinglita som Peter Olsson på kvp.se hittade&lt;/a&gt; sammanfattar anledningen bäst:
&lt;blockquote&gt;
&lt;p&gt;Själv är jag en konservativ medelålders man som aldrig någonsin har &amp;ldquo;fildelat&amp;rdquo;. (Och jag tycker illa om piratkopiering.) Ändå har jag nu för avsikt att gå med i piratpartiet, rösta på dem i EU-valet och ge dem ett penningbidrag till deras valkampanj.
&lt;/p&gt;
&lt;p&gt;Orsaken till detta är förstås att alla andra partier helt uppenbart är beredda att införa sinnessjukt oproportionerligt repressiva lagar och kontroller för att en ganska oväsentlig näring (nöjesindustrin) under några år till skall kunna klamra sig fast vid en fullständigt obsolet och förlegad affärsmodell.
&lt;/p&gt;
&lt;p&gt;Det vore ju en sak om det handlade om krig och terrorism, om
akut brist på mat eller på rent vatten. Då kunde man ju förstå om situationen vore så fruktansvärt allvarlig att vissa inskränkningar i den personliga integriteten vore nödvändiga.
Men nu handlar det inte om något som är ens det minsta lilla
oundgängligt för någons överlevnad eller hälsa, utan om att en i
sig ganska oväsentlig industri skall kunna hålla fast vid ett
förlegat sätt att tjäna alldeles för mycket pengar, att dagens
trubadurer, skådespelare och andra gycklare och deras
finansiärer inte skall behöva anpassa sin affärsmodell till
utvecklingen.
&lt;/p&gt;
&lt;p&gt;En total, en helt osannolik, en fullständigt patologisk brist
på sinne för alla proportioner. Ungefär som att jämna ett helt
samhälle med marken bara för att kejsaren under några veckor
skall kunna ta morgonpromenader ostört på just den platsen.
&lt;/p&gt;
&lt;p&gt;Till sist en fråga: Är det någon på listan (utom riksdagsmän och
andra i uppenbar lojalitetskonflikt) som _inte_ har för avsikt
att rösta på piratpartiet i EU-valet? Och i så fall: Varför i
helvete inte?
&lt;/p&gt;&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/04/20/best-in-game-video-on-teh-intertubes-remember/"/>
   <updated>2009-04-20T19:25:50+02:00</updated>
   <id>https://nevyn.me/2009/04/20/best-in-game-video-on-teh-intertubes-remember</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/2Kg52_2XVtI?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Best in-game video on teh intertubes. Remember seeing this as a .mov file long, long ago (probably have that high-res movie somewhere too).&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>cavestory</title>
   <link href="https://nevyn.me/2009/04/18/cavestory/"/>
   <updated>2009-04-18T08:31:34+02:00</updated>
   <id>https://nevyn.me/2009/04/18/cavestory</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/gltl6QbB8merl7e5Tj19p0s0o1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;(&lt;a href=&quot;http://aco.tumblr.com/&quot;&gt;aco&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>source unknown heh</title>
   <link href="https://nevyn.me/2009/04/17/source-unknown-heh/"/>
   <updated>2009-04-17T20:28:13+02:00</updated>
   <id>https://nevyn.me/2009/04/17/source-unknown-heh</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbme82jjne84bDZ0Fo1_500.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;(Source unknown, heh)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/04/17/i-went-to-the-game-concept-challenge-2009s-24/"/>
   <updated>2009-04-17T05:37:00+02:00</updated>
   <id>https://nevyn.me/2009/04/17/i-went-to-the-game-concept-challenge-2009s-24</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/z4e6BY_9ER0?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;I went to the &lt;a href=&quot;http://www.gameconceptchallenge.se/competitions.html&quot;&gt;Game Concept Challenge 2009&amp;rsquo;s 24 Hour Programmer Challenge&lt;/a&gt;, where we got a theme and 24 hours to make a game. The theme this year was &amp;ldquo;puzzle game&amp;rdquo; with pretty much no restrictions.&lt;/p&gt;

&lt;p&gt;I decided to make a game where you steer by whistling, which I called Aurality. It&amp;rsquo;s rather unpolished; I spent quite a few of my hours first coming up with an idea, and then learning and understanding fast fourier transforms and all that that entails&amp;hellip;&lt;/p&gt;

&lt;p&gt;For the iPhone coders in the crowd, the &lt;a href=&quot;https://github.com/nevyn/aurality/tree&quot;&gt;sources are available&lt;/a&gt; at Github. In the &lt;a href=&quot;http://github.com/nevyn/aurality/tree/f688abb7fc6c1666e2d6dd04b7f4184b3ea057dd/Vendor&quot;&gt;Vendor folder&lt;/a&gt; you also find the &lt;a href=&quot;http://www.fftw.org/&quot;&gt;FFTW discrete Fourier transform C library&lt;/a&gt;, precompiled and lipo&amp;rsquo;d (It&amp;rsquo;s a Simulator+Device universal binary) as a nice static archive for inclusion in an iPhone project.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/04/14/if-only-my-promo-material-was-this-good-i-too/"/>
   <updated>2009-04-14T07:32:59+02:00</updated>
   <id>https://nevyn.me/2009/04/14/if-only-my-promo-material-was-this-good-i-too</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;225&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/S8yRaWY1xV8?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;If only my promo material was this good, I, too, would make one bazillion dollars a minute.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/04/14/after-the-wiimote-headtracking-experiments-i-felt/"/>
   <updated>2009-04-14T00:50:00+02:00</updated>
   <id>https://nevyn.me/2009/04/14/after-the-wiimote-headtracking-experiments-i-felt</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/4131235?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;180&quot; frameborder=&quot;0&quot; title=&quot;Deep UIs with Perspective/Face Tracking&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;After the wiimote headtracking experiments, I felt that having two extra accessories (wiimote and a sensor bar) just wouldn&amp;rsquo;t cut it for any practical application of a deep UI. Instead, I downloaded OpenCV (open source face tracking) to track the user&amp;rsquo;s eyes and perspective transform the UI based on that.&lt;/p&gt;

&lt;p&gt;Sorry that there&amp;rsquo;s no live camera feed with this recording; you&amp;rsquo;ll just have to trust that I sat here and moved my face back and forth and magically made the UI swing around to that. I did a slow pan from right to left, followed by a slow low pan from left to right, and then some misc moves. Use the green and blue dots as references for the perspective transform; the blue dot is where my face is (in the camera image) and the green dot is canvas center, translated along positive Z axis to show the transform more clearly.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/04/14/another-ui-experiment-this-one-from-jan-2008/"/>
   <updated>2009-04-14T00:24:02+02:00</updated>
   <id>https://nevyn.me/2009/04/14/another-ui-experiment-this-one-from-jan-2008</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/619160?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;384&quot; frameborder=&quot;0&quot; title=&quot;Head tracking: Step 1&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Another UI experiment, this one from Jan 2008 trying to implement &lt;a href=&quot;http://johnnylee.net/projects/wii/&quot;&gt;Johnny Chung Lee&amp;rsquo;s headtracking&lt;/a&gt; in Cocoa.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>My dream UI: The Natural, Physical, Deep UI</title>
   <link href="https://nevyn.me/2009/04/14/my-dream-ui-the-natural-physical-deep-ui/"/>
   <updated>2009-04-14T00:10:00+02:00</updated>
   <id>https://nevyn.me/2009/04/14/my-dream-ui-the-natural-physical-deep-ui</id>
   <content type="html">&lt;p&gt;I&amp;rsquo;ve been very interested in alternative user interfaces for many years. In my voodoopad wiki the topic &amp;ldquo;My Dream UI&amp;rdquo; has the tag line &amp;ldquo;If I just keep throwing ideas together, the big mashed-up blob will eventually become awesomeness&amp;rdquo; :) So, for my dream UI, I would want:&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Natural UI/Multitouch&lt;/b&gt;. You all know what multitouch is, and it&amp;rsquo;s become mainstream now with the iPhone. (When I started using the term, I was referring to a multitouch surface such as &lt;a href=&quot;http://www.perceptivepixel.com/&quot;&gt;Jeff Han&lt;/a&gt;&amp;rsquo;s table &lt;em&gt;(Update: link is dead, was referring to &lt;a href=&quot;https://www.youtube.com/watch?v=ysEVYwa-vHM&quot;&gt;Perceptive Pixel&lt;/a&gt;, not Microsoft Surface)&lt;/em&gt;. Several companies and groups are claiming this term as their name now, though).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Physical UI&lt;/b&gt;: Entities in a Physical UI are tangible, physical, can collide, slide, stick, be heavy. The most well known example is &lt;a href=&quot;http://bumptop.com/&quot;&gt;BumpTop&lt;/a&gt;, which was recently publically released.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Deep UI&lt;/b&gt;: This is my own term for a UI that appears deep, for example by head tracking. The inspiration is &lt;a href=&quot;http://johnnylee.net/projects/wii/&quot;&gt;Johnny Chung Lee&amp;rsquo;s excellent wiimote experimentation&lt;/a&gt; (bottom of that page). In a Deep UI, when you move your head or rotate the device, you are able to look &lt;em&gt;under&lt;/em&gt; foreground objects and see off the side what&amp;rsquo;s below; e g seeing windows below the foreground window that would be completely obscured if seen head-on.&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;My dream UI is thus a Deep NUI. From my wiki:
&lt;/p&gt;&lt;blockquote&gt;A Deep UI is one that takes the user&amp;rsquo;s depth perception into account, specifically by using head and/or eye tracking. A Deep classical UI would be a window-managed UI, where one may pan the head to see behind the current window. A Deep NUI is one that uses multitouch surfaces, and applies depth handling. This applies not only to seeing behind flat surfaces in the NUI, but also changing the point-of-view of three-dimensional applications in the NUI.&lt;/blockquote&gt;


&lt;p&gt;&lt;em&gt;Addendum&lt;/em&gt;: About a month ago, The Astonishing Tribe released a concept of a cell phone with Deep UI! Check it out:
&lt;object width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/7SImOIMcMlk&amp;amp;hl=en&amp;amp;fs=1&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/7SImOIMcMlk&amp;amp;hl=en&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;480&quot; height=&quot;385&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/04/13/this-is-one-of-my-many-adventures-into-natural/"/>
   <updated>2009-04-13T23:46:31+02:00</updated>
   <id>https://nevyn.me/2009/04/13/this-is-one-of-my-many-adventures-into-natural</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/4129660?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;340&quot; frameborder=&quot;0&quot; title=&quot;GooPad, the visual wiki (r126)&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;This is one of my many adventures into Natural UIs, this particular one is an experiment with ZUIs.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;GooPad is a hack I wrote in 2007 on top of &lt;a href=&quot;http://flyingmeat.com/voodoopad/&quot;&gt;VoodooPad&lt;/a&gt; to experiment with Zoomable User Interfaces, or ZUIs.&lt;/p&gt;

&lt;p&gt;You can pan the canvas, but also zoom in and out, to get an overview or dive into an article. You can also resize individual wiki entries, and that way make spatial hierarchies or groups of entries; even nesting entries inside entries, like in Seadragon or Raskin&amp;rsquo;s initial ZUI concepts.&lt;/p&gt;

&lt;p&gt;I really wish I had a multi touch pad back then, navigating without one was very clumsy.&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s a standard Cocoa app reading .vpdoc bundles and visualizing them with Core Animation. Mail me if you&amp;rsquo;re interested in the project or its sources.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>tristanjay7 tone matrix duet sorry for</title>
   <link href="https://nevyn.me/2009/04/12/tristanjay7-tone-matrix-duet-sorry-for/"/>
   <updated>2009-04-12T21:13:00+02:00</updated>
   <id>https://nevyn.me/2009/04/12/tristanjay7-tone-matrix-duet-sorry-for</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/wAArp4Tbqm6l2qo3okBIFwCso1_1280.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://tjmahr.com/post/95304140/tone-matrix-duet&quot;&gt;tristanjay7&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;a href=&quot;http://lab.andre-michelle.com/tonematrix&quot;&gt;Tone Matrix&lt;/a&gt; Duet&lt;/blockquote&gt;

&lt;div style=&quot;position:relative;left:-150px;&quot;&gt;
&lt;script type=&quot;text/javascript&quot;&gt;&lt;!--
	QT_WritePoster_XHTML('Click to Play', 'http://nevyn.nu/movies/tone-matrix-duet/tone%20matrix%20duet-poster.jpg',
		'http://nevyn.nu/movies/tone-matrix-duet/tone%20matrix%20duet.mov',
		'815', '339', '',
		'controller', 'true',
		'autoplay', 'true',
		'bgcolor', 'black',
		'scale', 'aspect');
//--&gt;
&lt;/script&gt;&lt;noscript&gt;
&lt;object width=&quot;815&quot; height=&quot;339&quot; classid=&quot;clsid:02BF25D5-8C17-4B23-BC80-D3488ABDDC6B&quot; codebase=&quot;http://www.apple.com/qtactivex/qtplugin.cab&quot;&gt;
	&lt;param name=&quot;src&quot; value=&quot;http://nevyn.nu/movies/tone-matrix-duet/tone%20matrix%20duet-poster.jpg&quot;&gt;&lt;param name=&quot;href&quot; value=&quot;http://nevyn.nu/movies/tone-matrix-duet/tone%20matrix%20duet.mov&quot;&gt;&lt;param name=&quot;target&quot; value=&quot;myself&quot;&gt;&lt;param name=&quot;controller&quot; value=&quot;false&quot;&gt;&lt;param name=&quot;autoplay&quot; value=&quot;false&quot;&gt;&lt;param name=&quot;scale&quot; value=&quot;aspect&quot;&gt;&lt;embed width=&quot;815&quot; height=&quot;339&quot; type=&quot;video/quicktime&quot; pluginspage=&quot;http://www.apple.com/quicktime/download/&quot; src=&quot;http://nevyn.nu/movies/tone-matrix-duet/tone%20matrix%20duet-poster.jpg&quot; href=&quot;http://nevyn.nu/movies/tone-matrix-duet/tone%20matrix%20duet.mov&quot; target=&quot;myself&quot; controller=&quot;false&quot; autoplay=&quot;false&quot; scale=&quot;aspect&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/noscript&gt;
&lt;/div&gt;
&lt;p&gt;Sorry for the crappy sound, have &amp;gt;100 safari tabs open and flash doesn&amp;rsquo;t like that&amp;hellip; Why doesn&amp;rsquo;t Tone Matrix just support loading and dumping to/from some ascii format? (Dashboard readers: need to go to my blog to see this entry properly)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>lucius cutest robots ever tweenbots are</title>
   <link href="https://nevyn.me/2009/04/12/lucius-cutest-robots-ever-tweenbots-are/"/>
   <updated>2009-04-12T20:59:33+02:00</updated>
   <id>https://nevyn.me/2009/04/12/lucius-cutest-robots-ever-tweenbots-are</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/jpYM5geNGm6zd2l7WIRPh6Ffo1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://lucius.tumblr.com/post/95386567&quot;&gt;lucius&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Cutest robots ever.
&lt;/p&gt;
&lt;blockquote&gt;
&lt;a href=&quot;http://www.tweenbots.com/&quot;&gt;Tweenbots&lt;/a&gt; are human-dependent robots that navigate the city with the help of pedestrians they encounter. Rolling at a constant speed, in a straight line, Tweenbots have a destination displayed on a flag, and rely on people they meet to read this flag and to aim them in the right direction to reach their goal.&lt;/blockquote&gt;&lt;/blockquote&gt;

&lt;p&gt;Best comment from &lt;a href=&quot;http://hackaday.com/2009/04/11/tweenbots-rely-on-human-help/&quot;&gt;hackaday&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
it just occurred to me - not only is it programming humans, it’s using an *exploit* to do it. people won’t just help any old object get to it’s destination, but a cute robot crying out for help? it’s a rootkit for people.&lt;br/&gt;
&amp;ndash; peirun
&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/04/11/via-mikeash-the-job-you-dont-want-cable/"/>
   <updated>2009-04-11T19:42:55+02:00</updated>
   <id>https://nevyn.me/2009/04/11/via-mikeash-the-job-you-dont-want-cable</id>
   <content type="html">&lt;p&gt;Via &lt;a href=&quot;https://twitter.com/mikeash/status/1494136768&quot;&gt;@mikeash&lt;/a&gt;, the job you don&amp;rsquo;t want:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.pipeinternational.com/index.php?option=com_myblog&amp;amp;show=Cable-Loading-Update.html&amp;amp;Itemid=65&quot;&gt;&lt;img src=&quot;http://www.pipeinternational.com/images/blog/09_03/p3030062.jpg&quot; style=&quot;width:500px&quot;/&gt;&lt;br/&gt;&lt;em&gt;Cable loading on the &amp;ldquo;Durable&amp;rdquo;&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;
&lt;object width=&quot;500&quot; height=&quot;404&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/g2ys2l-www0&amp;amp;hl=en&amp;amp;fs=1&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/g2ys2l-www0&amp;amp;hl=en&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;500&quot; height=&quot;404&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/p&gt;

&lt;p&gt;
&lt;object width=&quot;500&quot; height=&quot;404&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/v1JEuzBkOD8&amp;amp;hl=en&amp;amp;fs=1&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/v1JEuzBkOD8&amp;amp;hl=en&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;500&quot; height=&quot;404&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>wwwtopatococom sid05 moorewr tristanjay7</title>
   <link href="https://nevyn.me/2009/04/11/wwwtopatococom-sid05-moorewr-tristanjay7/"/>
   <updated>2009-04-11T18:34:51+02:00</updated>
   <id>https://nevyn.me/2009/04/11/wwwtopatococom-sid05-moorewr-tristanjay7</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/3XAbcPruEm49uw6pYMNX0ijpo1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.topatoco.com&quot;&gt;www.topatoco.com&lt;/a&gt; &amp;lt; &lt;a href=&quot;http://sid05.tumblr.com/post/94810733/via-www-topatoco-com&quot;&gt;sid05&lt;/a&gt; &amp;lt; &lt;a href=&quot;http://moorewr.tumblr.com/post/94827106/sid05-via-www-topatoco-com-hey-wheres-the&quot;&gt;moorewr&lt;/a&gt; &amp;lt; &lt;a href=&quot;http://tjmahr.com/post/95054935/via-moorewr-sid05-www-topatoco-com&quot;&gt;tristanjay7&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Fantastic. I&amp;rsquo;ve always been worried that if I was transported back in time, I&amp;rsquo;d be too dependent on layers of layers of technology to have any useful knowledge whatsoever. This&amp;rsquo;ll save me, though!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/04/11/procrastination-is-being-me/"/>
   <updated>2009-04-11T02:17:55+02:00</updated>
   <id>https://nevyn.me/2009/04/11/procrastination-is-being-me</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/37wR_TWdVy0?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Procrastination is BEING ME.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/04/07/deathtroid-crash/"/>
   <updated>2009-04-07T16:28:00+02:00</updated>
   <id>https://nevyn.me/2009/04/07/deathtroid-crash</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/K9tKnU2Dq88?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Voxar is &amp;ldquo;between jobs&amp;rdquo;. That&amp;rsquo;s an eupherism for &amp;ldquo;working all day on hobby projects&amp;rdquo;. Like Deathtroid networking. I added some sounds, too.&lt;/p&gt;

&lt;p&gt;We seem to be running into some sort of pyglet bug though, where the timer makes us crash. &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
Traceback (most recent call last):
  File &quot;src/main.py&quot;, line 295, in &lt;module&gt;
    pyglet.app.EventLoop().run()
  File &quot;/Library/Python/2.5/site-packages/pyglet/app/carbon.py&quot;, line 84, in run
    self._timer_proc(timer, None, False)
  File &quot;/Library/Python/2.5/site-packages/pyglet/app/carbon.py&quot;, line 133, in _timer_proc
    sleep_time = self.idle()
  File &quot;/Library/Python/2.5/site-packages/pyglet/app/__init__.py&quot;, line 187, in idle
    dt = clock.tick(True)
  File &quot;/Library/Python/2.5/site-packages/pyglet/clock.py&quot;, line 698, in tick
    return _default.tick(poll)
  File &quot;/Library/Python/2.5/site-packages/pyglet/clock.py&quot;, line 317, in tick
    item.next_ts = self._get_soft_next_ts(ts, item.interval)
  File &quot;/Library/Python/2.5/site-packages/pyglet/clock.py&quot;, line 585, in _get_soft_next_ts
    if not taken(next_ts, interval / 4):
  File &quot;/Library/Python/2.5/site-packages/pyglet/clock.py&quot;, line 563, in taken
    if abs(item.next_ts - ts) &amp;lt;= e:
TypeError: unsupported operand type(s) for -: 'NoneType' and 'float'
&lt;/module&gt;&lt;/code&gt;&lt;/pre&gt;

I ugly-patched it like this:
&lt;pre&gt;&lt;code&gt;
--- clock.py	2009-04-06 22:20:44.000000000 +0200
+++ clock-uglypatched.py	2009-04-06 20:55:46.000000000 +0200
@@ -560,6 +560,8 @@
             scheduled nearby.
             '''
             for item in self._schedule_interval_items:
+                if item.next_ts == None:
+                  continue
                 if abs(item.next_ts - ts)  ts + e:
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I&amp;rsquo;m guessing a schedule item shouldn&amp;rsquo;t be allowed to have a next_ts == None at this point.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: This bug is known under &lt;a href=&quot;http://code.google.com/p/pyglet/issues/detail?id=407&quot;&gt;issue 407&lt;/a&gt; on their bug tracker.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Review: PowerUp Forever (XBox Live Arcade)</title>
   <link href="https://nevyn.me/2009/04/06/review-powerup-forever-xbox-live-arcade/"/>
   <updated>2009-04-06T02:53:00+02:00</updated>
   <id>https://nevyn.me/2009/04/06/review-powerup-forever-xbox-live-arcade</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://xbox360.ign.com/objects/142/14247609.html&quot;&gt;PowerUp Forever&lt;/a&gt; for the XB360 is very very similar to my all-time favorite shooter &lt;a href=&quot;http://en.wikipedia.org/wiki/Battle_Girl&quot;&gt;Battle-Girl&lt;/a&gt; by Ultra/United. If you&amp;rsquo;re, like me, a fan of the old classic, you know that there&amp;rsquo;s no MacOS X port. I&amp;rsquo;ve tried to reach Ultra/United many times without luck, and a few years ago their site died, seemingly from the domain expiring. I&amp;rsquo;d give a lot to be able to play that game again on a modern platform, even if neither graphics nor gameplay was upgraded.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://www.gamesights.com/screen_shots/mac_os/battle-girl/images/01-13.gif&quot; width=&quot;500&quot;/&gt;&lt;br/&gt;&lt;i&gt;Battle-Girl&lt;/i&gt;&lt;/p&gt;

PowerUp is, however, not Battle-Girl. It&amp;rsquo;s a top-down shooter with many similar characteristics. Free-roaming levels, lots of enemies, kill seemingly harmless enemies to lure out/foil the boss to finish the level.

&lt;p&gt;The fluid simulation makes it look stunningly beautiful. It&amp;rsquo;s like you&amp;rsquo;re in some gigantic creature. After just playing a level or two, I felt that as all levels are open-ended and infinite in size, there&amp;rsquo;s no element of exploration; that was something I really liked from Battle-Girl. In BG, the first thing you&amp;rsquo;d do was to explore the level in its entirety to figure out where to hide when something big is incoming, or where Terminus (the end boss) would spawn.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://xbox360.ign.com/dor/objects/14247609/powerup-forever/images/powerup-forever-20081205022816274.html?page=mediaFull&quot;&gt;&lt;img src=&quot;http://xbox360media.ign.com/xbox360/image/article/936/936213/powerup-forever-20081205022816274.jpg&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;&lt;br/&gt;&lt;i&gt;PowerUp Forwever&lt;/i&gt;&lt;/p&gt;

&lt;p&gt;However, getting into PowerUp, I realized that level design really is present, but in a very different way. It&amp;rsquo;s like Flow or Spore: you grow for each level, and suddenly those very dangerous enemies are so small and insignificant you just run through them, and the whole level takes on a new scale. There are structures in semi-random patterns, around where your Programmers from BG are; the spawns. Kill enough of them to finish the level. Sometimes the structures are really tight, and with hundreds of enemies all around, you almost panic. Luckilly, there&amp;rsquo;s the Smart Bomb. I found out the levels aren&amp;rsquo;t infinite, either; it seems a very fast and annoying enemy starts to spawn the longer from the real level you go, which means that if you wander too far, you &lt;em&gt;will&lt;em&gt; die.&lt;/em&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;ve only played the game for an hour or so, but so far, I thoroughly recommend it. It isn&amp;rsquo;t BattleGirl, but it&amp;rsquo;s just as good.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>lucius snc add more cowbell to apple script</title>
   <link href="https://nevyn.me/2009/04/04/lucius-snc-add-more-cowbell-to-apple-script/"/>
   <updated>2009-04-04T06:36:41+02:00</updated>
   <id>https://nevyn.me/2009/04/04/lucius-snc-add-more-cowbell-to-apple-script</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/DK2tS5GwFbsz7cb7HOZrN0C7_500.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://lucius.tumblr.com/post/92605329&quot;&gt;lucius&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://snc.tumblr.com/post/43389951/add-more-cowbell-to-apple-script-command-in&quot;&gt;snc&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;“Add more cowbell to” Apple Script command in Sound Studio’s library. What a great easter egg.&lt;/blockquote&gt;
&lt;p&gt;I love when people find my easter eggs.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Fellow developers,&lt;br/&gt; You can stop adding easter eggs to your apps now. Lucius won.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>voidstar game engine with the game voidbomb first</title>
   <link href="https://nevyn.me/2009/04/01/voidstar-game-engine-with-the-game-voidbomb-first/"/>
   <updated>2009-04-01T07:52:00+02:00</updated>
   <id>https://nevyn.me/2009/04/01/voidstar-game-engine-with-the-game-voidbomb-first</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsblqm0momthXjENmgo1_1280.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;VoidStar game engine with the game VoidBomb. First year project in Game Programming at BTH by me, voxar, sterd and mangeh. Conversation with Per brought it up, and I just had to make it compile again :)&lt;/p&gt;

&lt;p&gt;The objective of the game is to drop bombs to blow up the ground (modifiable heightmap!) to find the flag.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://nevyn.nu/files/VoidStar.zip&quot;&gt;Download for Mac&lt;/a&gt;, &lt;a href=&quot;svn://nevyn.nu/school/trunk/stervymangxar&quot;&gt;Source code repository&lt;/a&gt;&lt;/p&gt;

&lt;p&gt; What&amp;rsquo;s interesting about this project is that it&amp;rsquo;s the origin for my favorite game engine design, and the same designed used in Deathtroid. There is only one Entity class, so instead of using inheritance to create different kinds of entities, one builds an Entity from Elements, one for each sub-engine. For example, to create the avatar in Deathtroid, we initialize an Entity with a ForceBasedPhysics element for the physics slot, an AvatarBehavior bound to the correct Player for the logics slot, and StateAnimatedSprite for the view slot.&lt;/p&gt;

&lt;em&gt;Update: Forgot to bundle dependencies. Try it again if it failed for you before.&lt;/em&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/03/31/that-was-a-good-lunch-break/"/>
   <updated>2009-03-31T22:50:48+02:00</updated>
   <id>https://nevyn.me/2009/03/31/that-was-a-good-lunch-break</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/yc692qQeg8g?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;That was a good lunch break.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/03/31/fez-i-have-a-soft-spot-for-retro-as-you-know/"/>
   <updated>2009-03-31T03:54:16+02:00</updated>
   <id>https://nevyn.me/2009/03/31/fez-i-have-a-soft-spot-for-retro-as-you-know</id>
   <content type="html">&lt;p&gt;Fez. I have a soft spot for retro (as you know). Can&amp;rsquo;t wait to play it. (Confusing game? Try combining it with Braid!)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>deathtroid r114</title>
   <link href="https://nevyn.me/2009/03/30/deathtroid-r114/"/>
   <updated>2009-03-30T08:31:52+02:00</updated>
   <id>https://nevyn.me/2009/03/30/deathtroid-r114</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsblnsjzk2Dtzdo3jVo1_1280.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;Deathtroid, r114, after Per&amp;rsquo;s productive train ride home.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>lan party turned into coding party were building</title>
   <link href="https://nevyn.me/2009/03/29/lan-party-turned-into-coding-party-were-building/"/>
   <updated>2009-03-29T15:13:00+02:00</updated>
   <id>https://nevyn.me/2009/03/29/lan-party-turned-into-coding-party-were-building</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsblmrg700jWM69pGNo1_1280.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;LAN party turned into coding party. We&amp;rsquo;re building a multiplayer deathmatch Super Metroid Clone. It&amp;rsquo;s called&amp;hellip; &lt;b style=&quot;font-size:2em&quot;&gt;Deathtroid!&lt;/b&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>jxpx777 brettkelly luckyshirt and dont you</title>
   <link href="https://nevyn.me/2009/03/26/jxpx777-brettkelly-luckyshirt-and-dont-you/"/>
   <updated>2009-03-26T07:07:55+01:00</updated>
   <id>https://nevyn.me/2009/03/26/jxpx777-brettkelly-luckyshirt-and-dont-you</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/zCQlLnZhZlgkllftJQVPtHBCo1_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://blog.jxpx777.com/post/89809550/brettkelly-via-luckyshirt&quot;&gt;jxpx777&lt;/a&gt; &amp;lt; &lt;a href=&quot;http://blog.brettkelly.org/post/89604818/via-luckyshirt&quot;&gt;brettkelly&lt;/a&gt; &amp;lt; &lt;a href=&quot;http://luckyshirt.tumblr.com/&quot;&gt;luckyshirt&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And don&amp;rsquo;t you forget it. (Feels very relevant, re &lt;a href=&quot;http://gdc.gamespot.com/video/6206692/gdc-2009-onlive-press-conference?tag=videos;title;1&quot;&gt;OnLive&amp;rsquo;s &amp;ldquo;impossible&amp;rdquo; new service&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>DBGraffle4 : Automatically draw SQL schema in OmniGraffle</title>
   <link href="https://nevyn.me/2009/03/26/dbgraffle4-automatically-draw-sql-schema-in/"/>
   <updated>2009-03-26T01:38:00+01:00</updated>
   <id>https://nevyn.me/2009/03/26/dbgraffle4-automatically-draw-sql-schema-in</id>
   <content type="html">&lt;a href=&quot;http://www.visualdistortion.org/DBGraffle4/&quot;&gt;Paul Davis wrote a script&lt;/a&gt; to extract the schema from a postgresql server and draw it in OmniGraffle. This is so handy you wouldn&amp;rsquo;t believe. Then his domain expired. It&amp;rsquo;s still available from &lt;a href=&quot;http://web.archive.org/web/20070331024950/http://www.visualdistortion.org/DBGraffle4/&quot;&gt;The Wayback Machine&lt;/a&gt; however, but since that&amp;rsquo;s not indexed by google (as far as I know), I thought I&amp;rsquo;d replicate the relevant parts on my blog, to keep them alive. Mirrors of: &lt;a href=&quot;http://nevyn.nu/mirror/DBGraffle4.py&quot;&gt;the Python script&lt;/a&gt; and &lt;a href=&quot;http://nevyn.nu/mirror/DBGraffle4.scpt&quot;&gt;the AppleScript&lt;/a&gt;. You need both.

&lt;p&gt;There&amp;rsquo;s also a &lt;a href=&quot;http://blog.thomaspan.com/archives/105&quot;&gt;version of DBGraffle that gets the schema from a MySQL database, by Thomas Pan&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here&amp;rsquo;s a complete repost of his blog entry, with all links substituted with Wayback equivalents:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.visualdistortion.org/DBGraffle4/&quot;&gt;Visualdistortion&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;h3&gt;General&lt;/h3&gt;
This project is intended as a way to easily import an SQL
schema into OmniGraffle.  It was written for OmniGraffle 4.
To the best of my knowledge it works on both OmniGraffle 4 and
OmniGraffle 4 Professional.  It will NOT work on any earlier
version.  The OmniGraffle team was nice enough to pressure me into
updating a script I wrote last week to the new version so if
you&amp;rsquo;re looking for something to use with OmniGraffle 3,
check &lt;a href=&quot;http://www.visualdistortion.org/dbgraffle&quot;&gt;here&lt;/a&gt;
for that.  Its been very fluid with my web postings of this lately.
If you can&amp;rsquo;t find something, hold on to your butt cause it&amp;rsquo;ll pop up
somwhere eventually.


&lt;p&gt;
&lt;/p&gt;&lt;h3&gt;Me&lt;/h3&gt;
Written by &lt;a href=&quot;http://pjdavis@engineering.uiowa.edu&quot;&gt;Paul Davis&lt;/a&gt;


&lt;h3&gt;Requirements&lt;/h3&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;http://www.apple.com&quot;&gt;OS X&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.omnigroup.com/applications/omnigraffle/&quot;&gt;Omni Graffle 4&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.postgresql.org&quot;&gt;PostgreSQL&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.python.org&quot;&gt;Python&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://freespace.virgin.net/hamish.sanderson/appscript.html&quot;&gt;AppScript&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://www.pygresql.org&quot;&gt;PyGreSQL&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;
&lt;/p&gt;&lt;h4&gt;OS X&lt;/h4&gt;
Errrm, you kinda need this to run OmniGraffle.


&lt;h4&gt;OmniGraffle 4&lt;/h4&gt;
You need at least version 4.0  I tested this on the demo, and I think its working.  I didn&amp;rsquo;t play
around too much because I&amp;rsquo;ve been playing with the Professional version. It will NOT work on older 
versions, so if you were gonna ask that, you already know.


&lt;p&gt;
&lt;/p&gt;&lt;h4&gt;PostgreSQL&lt;/h4&gt;
The basic principles of this should not be limited to Postgres.  If you want to try extending support
to other database backends, I&amp;rsquo;ll udate this so that everyone can share your wonderous accomplishment.
Note: I have a very short temper for MySQL users.


&lt;h4&gt;Python&lt;/h4&gt;
I used AppScript for this.  AppleScript is not my friend. AppleScript is not your friend.
The version that I assume came on this laptop is sufficient.  I don&amp;rsquo;t know if it came on this laptop
or it got installed as package.  However, this version is good to go.  I list versions a bit
further on.


&lt;p&gt;
&lt;/p&gt;&lt;h4&gt;AppScript&lt;/h4&gt;
AppScript is my friend.  AppScript is your friend.  Use AppScript and you will be smiled upon by
whichever god scares you the most.  That and you won&amp;rsquo;t go bald as fast as you would using AppleScript.


&lt;h4&gt;PyGreSQL&lt;/h4&gt;
Mmmmm.  My buddy &lt;a href=&quot;http://www.slamb.org&quot;&gt;Scott Lamb&lt;/a&gt; has got a project going to write some
good Postgres drivers for Python.  When he gets that into a working state I plan on migrating to use
his drivers.  Once you find the power of bind, its a bit hard to leave it.


&lt;p&gt;
&lt;/p&gt;&lt;h3&gt;My Versions&lt;/h3&gt;
	&lt;ol&gt;&lt;li&gt;OS X 10.4.3&lt;/li&gt;
		&lt;li&gt;OmniGraffle Professional 4.1 Beta 1&lt;/li&gt;
		&lt;li&gt;PostgreSQL 8.0.2&lt;/li&gt;
		&lt;li&gt;Python 2.3.5&lt;/li&gt;
		&lt;li&gt;AppScript 1.0.0&lt;/li&gt;
		&lt;li&gt;PyGreSQL 1.33&lt;/li&gt;
	&lt;/ol&gt;&lt;h3&gt;Download&lt;/h3&gt;
&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;http://DBGraffle4.py&quot; target=&quot;_blank&quot;&gt;DBGraffle4.py&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;http://DBGraffle4.scpt&quot;&gt;DBGraffle4.scpt&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;
&lt;/p&gt;&lt;h3&gt;Installation&lt;/h3&gt;
&lt;ol&gt;&lt;li&gt;Download DBGraffle4.py and place it somewhere safe.&lt;/li&gt;
	&lt;li&gt;Download DBGraffle4.scpt and place it somewhere convenient&lt;/li&gt;
	&lt;li&gt;I reccommend using Script Editor to save the *.scpt as an *.app and placing it in the
	dock or on the desktop.  After its there, you can double click it and follow the popups.&lt;/li&gt;
&lt;/ol&gt;&lt;h3&gt;General Information&lt;/h3&gt;
I used the red, blue, and green highlights just to show that you can alter the default
properties of objects as they are created.  If you open the python script and look at
the first 20 lines or so, you&amp;rsquo;ll see where you can change the defaults to your liking.
I couldn&amp;rsquo;t get the line jumps to take.  It seems they got a whole lot more complicated than
they were in OG 3.


&lt;p&gt;
&lt;/p&gt;&lt;h3&gt;Related Stuff&lt;/h3&gt;
	&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://web.archive.org/web/20070331024950/http://www.visualdistortion.org/Graffle2SQL&quot;&gt;Graffle2SQL&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://www.visualdistortion.org/dbgraffle&quot;&gt;DBGraffle - Similar thing for OmniGraffle 3&lt;/a&gt;&lt;/li&gt;
		&lt;li&gt;&lt;a href=&quot;http://www.visualdistortion.org/sqllogger&quot;&gt;SQL Logger - The schema for the examples&lt;/a&gt;&lt;/li&gt;
	&lt;/ul&gt;&lt;h3&gt;Questions and Comments&lt;/h3&gt;
Feel free to email me with questions and comments.  I&amp;rsquo;m lonely.


&lt;p&gt;
&lt;/p&gt;&lt;h3&gt;Thanks&lt;/h3&gt;
&lt;ul&gt;&lt;li&gt;Jeff Melloy - I swapped him laptops cause I don&amp;rsquo;t have an Apple.  And he&amp;rsquo;s good at SQL.&lt;/li&gt;
	&lt;li&gt;Joel Page - One of the Omni Graffle engineers.  Gave me a hand with Omni Graffle 4&lt;/li&gt;
	&lt;li&gt;All the open source projects that I&amp;rsquo;ve used.&lt;/li&gt;
&lt;/ul&gt;&lt;h3&gt;Money&lt;/h3&gt;
I don&amp;rsquo;t want any.  Send something to a charity.  Preferably cancer research.

&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>Use @rpath instead of @loader_path or @executable_path in .frameworks</title>
   <link href="https://nevyn.me/2009/03/19/use-rpath-instead-of-loaderpath-or/"/>
   <updated>2009-03-19T23:32:00+01:00</updated>
   <id>https://nevyn.me/2009/03/19/use-rpath-instead-of-loaderpath-or</id>
   <content type="html">&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: mikeash has written &lt;a href=&quot;http://www.mikeash.com/pyblog/friday-qa-2009-11-06-linking-and-install-names.html&quot;&gt;an excellent post on install names&lt;/a&gt;, including @rpath. Just read his post.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;ve written a great deal (&lt;a href=&quot;http://overooped.com/post/42240519/properly-bundling-frameworks-in-your-application&quot;&gt;1&lt;/a&gt;, &lt;a href=&quot;http://thirdcog.eu/apps/frameworks&quot;&gt;2&lt;/a&gt;) about how to make bundled .frameworks work. My &amp;ldquo;old&amp;rdquo; method has been to use @loader_path/../Frameworks/[frameworkName].framework/Versions/A/[frameworkName] in the .framework&amp;rsquo;s install name, and rewrite the .app&amp;rsquo;s load paths with install_name_tool if it&amp;rsquo;s wrong. However, I just found @rpath and it&amp;rsquo;s much more powerful and much easier to use. I&amp;rsquo;ll blog it more when I have time, but for now, read the &lt;a href=&quot;http://developer.apple.com/releasenotes/developertools/RN-dyld/index.html&quot;&gt;documentation about RPATH&lt;/a&gt; and do use it instead of @executable_path or @loader_path, unless you have a good reason.&lt;/p&gt;

&lt;p&gt;Using @rpath solves this problem:&lt;br/&gt;&lt;img src=&quot;http://dl.getdropbox.com/u/6775/dependency%20clashes.png&quot;/&gt;&lt;/p&gt;
&lt;p&gt;Why? Because in the .app you can decide which RUtils.framework should be used by setting &amp;ldquo;Runpath Search Paths&amp;rdquo;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Overly Judgemental IE6 Splash Pages</title>
   <link href="https://nevyn.me/2009/03/19/overly-judgemental-ie6-splash-pages/"/>
   <updated>2009-03-19T21:01:00+01:00</updated>
   <id>https://nevyn.me/2009/03/19/overly-judgemental-ie6-splash-pages</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://blog.jxpx777.com/post/87701327/overly-judgemental-ie6-splash-pages&quot;&gt;jxpx777&lt;/a&gt; &amp;lt; &lt;a href=&quot;http://blog.hugsformonsters.com/post/87657240/overly-judgemental-ie6-splash-pages&quot;&gt;hugsformonsters&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;While working on this site, I made jokes to Mike Yuan about having really confrontational splash pages for anybody that visited the site using IE6. I swear, I’m not this much of a dick to my users, but as a former PC user/Xbox owner, I have enough pent up MS-Hate to fill a fucking water tower. Just remember it’s completely a joke, I don’t care what browser you use as long as you don’t expect me to support it. Thanks for stopping by, hope you laughed.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://hugsformonsters.com/images/blog/IE1.jpg&quot;&gt;&lt;img src=&quot;http://nevyn.nu/img/blog/sIE1.jpg&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://hugsformonsters.com/images/blog/IE2.jpg&quot;&gt;&lt;img src=&quot;http://nevyn.nu/img/blog/sIE2.jpg&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://hugsformonsters.com/images/blog/IE3.jpg&quot;&gt;&lt;img src=&quot;http://nevyn.nu/img/blog/sIE3.jpg&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://hugsformonsters.com/images/blog/IE4.jpg&quot;&gt;&lt;img src=&quot;http://nevyn.nu/img/blog/sIE4.jpg&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://hugsformonsters.com/images/blog/IE5.jpg&quot;&gt;&lt;img src=&quot;http://nevyn.nu/img/blog/sIE5.jpg&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://hugsformonsters.com/images/blog/IE6.jpg&quot;&gt;&lt;img src=&quot;http://nevyn.nu/img/blog/sIE6.jpg&quot;/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Very tempted!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>lifeofbk thank you thank you so much as i</title>
   <link href="https://nevyn.me/2009/03/18/lifeofbk-thank-you-thank-you-so-much-as-i/"/>
   <updated>2009-03-18T20:06:39+01:00</updated>
   <id>https://nevyn.me/2009/03/18/lifeofbk-thank-you-thank-you-so-much-as-i</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/juWdWxNnal7eoql1nJWWwxsHo1_400.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://lifeofbk.com/post/87534708/thank-you-thank-you-so-much-as-i-said-a-few&quot;&gt;lifeofbk&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;Thank you.  Thank you so much.  As I said &lt;a href=&quot;http://lifeofbk.com/post/50752256/is-anybody-else-sick-of-the-multiple&quot;&gt;a few months ago&lt;/a&gt;, the multi-ringing SMS alert was the worst new ‘feature’ ever added to the iPhone.  I’m glad we’re finally getting the choice to fix it.&lt;/blockquote&gt;

&lt;p&gt;Whu..? I &lt;em&gt;love&lt;/em&gt; that feature! I keep forgetting to check SMSes; with my old phone, that&amp;rsquo;d annoy people to no end. Nowadays I might actually reply!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Things move fast on the web, and so when a developer discontinues support for an antiquated browser I don’t think this person should be considered an asshole or an enemy of free information. Rather, more developers need to take such stands. We don’t have government agencies on the web telling us how to do things (for the most part, at least), and we’re better off for it. This means all we’ve got left to fall back on to make sure everything progresses smoothly is social convention.</title>
   <link href="https://nevyn.me/2009/03/13/things-move-fast-on-the-web-and-so-when-a/"/>
   <updated>2009-03-13T22:54:28+01:00</updated>
   <id>https://nevyn.me/2009/03/13/things-move-fast-on-the-web-and-so-when-a</id>
   <content type="html">&lt;blockquote&gt;Things move fast on the web, and so when a developer discontinues support for an antiquated browser I don’t think this person should be considered an asshole or an enemy of free information. Rather, more developers need to take such stands. We don’t have government agencies on the web telling us how to do things (for the most part, at least), and we’re better off for it. This means all we’ve got left to fall back on to make sure everything progresses smoothly is social convention.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://langer.tumblr.com/post/86039303&quot;&gt;Matt Langer on&lt;/a&gt; the responsibility of every web developer and hacker to further the web rather than to cater to technophobic backwards administrators and computer illiterates (in other words, dropping IE support).
</content>
 </entry>
 
 <entry>
   <title>The Dirty Secret Apple Doesn't Want You To Know</title>
   <link href="https://nevyn.me/2009/03/12/the-dirty-secret-apple-doesnt-want-you-to-know/"/>
   <updated>2009-03-12T20:38:00+01:00</updated>
   <id>https://nevyn.me/2009/03/12/the-dirty-secret-apple-doesnt-want-you-to-know</id>
   <content type="html">&lt;p&gt;You spend a shitload of money on iTunes.&lt;/p&gt;

&lt;pre&gt;
Shoppy happy day of month
    Sunday: [========================                                 ] 36.9%
    Monday: [==                                                       ] 3.3%
   Tuesday: [=====                                                    ] 8.3%
 Wednesday: [====                                                     ] 6.6%
  Thursday: [===                                                      ] 5.0%
    Friday: [==========                                               ] 14.9%
  Saturday: [================                                         ] 24.9%

Shoppy happy month of year
   Januari: [==                                                       ] 2.5%
   Febuari: [==                                                       ] 3.7%
      Mars: [=                                                        ] 0.8%
     April: [                                                         ] 0.0%
       May: [                                                         ] 0.0%
      June: [                                                         ] 0.0%
      July: [================================                         ] 49.4%
    August: [=================                                        ] 25.7%
 September: [==                                                       ] 2.5%
   October: [==                                                       ] 3.3%
  November: [==                                                       ] 3.3%
  December: [======                                                   ] 8.7%

Number of obvious fart apps: 0

Apps statistics:
----------------
 Total applications: 149
    Total free apps: 106
 Total free updates: 74
    Total paid apps: 61
 Total paid updates: 0
Total spent on apps: 1465Kr [~$165]
 
Music statistics:
-----------------
         Total music: 163
    Total free music: 3
    Total paid music: 161
Total spent on music: 4547Kr [~$513]

Total spent in the iTunes Store: 6012Kr [~$678]
&lt;/pre&gt;

&lt;p&gt;Find out how much YOU spend with &lt;a href=&quot;http://voxar.net/&quot;&gt;Voxar&lt;/a&gt;&amp;rsquo;s &lt;a href=&quot;http://github.com/Voxar/itunes-store/tree/master&quot;&gt;script &amp;ldquo;itunes-store&amp;rdquo;&lt;/a&gt;. He&amp;rsquo;s working on a web service, but for now, you&amp;rsquo;ll have to run the script from your terminal.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: Voxar needs help with detecting tv shows in receipt emails (since they&amp;rsquo;re not available here in Sweden). If you feel like helping, feel free to comment or mail him at &lt;a href=&quot;mailto:voxxar@gmail.com&quot;&gt;voxxar@gmail.com&lt;/a&gt;! &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>you thought the tweetie rejection was stupid pete</title>
   <link href="https://nevyn.me/2009/03/11/you-thought-the-tweetie-rejection-was-stupid-pete/"/>
   <updated>2009-03-11T19:27:00+01:00</updated>
   <id>https://nevyn.me/2009/03/11/you-thought-the-tweetie-rejection-was-stupid-pete</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbkxevur9Rt2XnuYko1_400.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;You thought the &lt;a href=&quot;http://www.engadget.com/2009/03/10/apple-stupidly-rejects-tweetie-1-3-for-foul-language-in-twitter/&quot;&gt;Tweetie rejection&lt;/a&gt; was stupid? &lt;a href=&quot;https://twitter.com/Dative&quot;&gt;Pete Gallaway&lt;/a&gt;&amp;rsquo;s Diggle is a Digg.com client for iPhone. It was &lt;a href=&quot;https://twitter.com/Dative/status/1309888598&quot;&gt;rejected&lt;/a&gt; (&lt;a href=&quot;http://twitpic.com/1zxis&quot;&gt;the offense&lt;/a&gt;) because that day, a Digg article with the title &amp;ldquo;FUCK&amp;rdquo; was popular.&lt;/p&gt;

&lt;p&gt;Next: Apple removes Safari from iPhone for offensive language on my blog.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>There's always time to launch your dream</title>
   <link href="https://nevyn.me/2009/03/11/theres-always-time-to-launch-your-dream/"/>
   <updated>2009-03-11T03:23:09+01:00</updated>
   <id>https://nevyn.me/2009/03/11/theres-always-time-to-launch-your-dream</id>
   <content type="html">&lt;a href=&quot;http://www.37signals.com/svn/posts/1619-theres-always-time-to-launch-your-dream&quot;&gt;There's always time to launch your dream&lt;/a&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://blog.jxpx777.com/post/85227167/theres-always-time-to-launch-your-dream&quot;&gt;jxpx777&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;“I’d love to start a company / become a great programmer / write an awesome blog, but there’s just not enough time in the day!” Bullshit. There’s always enough time, you’re just not spending it…&lt;/blockquote&gt;

&lt;p&gt;I know, okay? x_x I&amp;rsquo;ve been fighting procrastination half my life. It&amp;rsquo;s one thing that this means I miss homework or even deadlines at work; it&amp;rsquo;s much more painful that I&amp;rsquo;m missing out on doing the things I &lt;em&gt;really&lt;/em&gt; want to do, fulfilling my dreams. For example, I&amp;rsquo;ve been going on and on for about a month about how easy it&amp;rsquo;d be to add rudimentary networking to &lt;a href=&quot;http://thirdcog.eu/apps/overload&quot;&gt;Overload&lt;/a&gt;, yet I haven&amp;rsquo;t written a single code on it during all that time. Not having time just can&amp;rsquo;t be true, even though I&amp;rsquo;ve been pretty busy. I&amp;rsquo;ve just&amp;hellip; Not taken the time.&lt;/p&gt;

&lt;p&gt;This doesn&amp;rsquo;t just apply to my dreams but to anything so it&amp;rsquo;s rather tangential to the OP, but still. It&amp;rsquo;s been the same pattern throughout my life: If something&amp;rsquo;s really important, either to myself or to someone else, I trawl my news reader or watch a tv series, feeling worse and worse and less capable of doing the thing the closer the deadline comes, until it&amp;rsquo;s too late, whereafter I&amp;rsquo;ve done neither the thing I needed to do nor things I wanted to do or would enjoy.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;ve tried organizational software, schedules, rewarding myself for succeeding, punishing myself for failing, talking to a shrink, asked teachers for help, reading books, &amp;hellip; It&amp;rsquo;s not a lack of time, that I know, but *what is it* that makes me make myself fail, over and over?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Py vs rb: Round 8451</title>
   <link href="https://nevyn.me/2009/03/08/py-vs-rb-round-8451/"/>
   <updated>2009-03-08T21:31:00+01:00</updated>
   <id>https://nevyn.me/2009/03/08/py-vs-rb-round-8451</id>
   <content type="html">&lt;p&gt;My brother sent me a &lt;a href=&quot;http://en.wikipedia.org/wiki/VCard&quot;&gt;vcard&lt;/a&gt; file and asked if I could extract its email adresses somehow (some 1500 of them). Started out with a &lt;a href=&quot;http://www.regular-expressions.info/&quot;&gt;regexp&lt;/a&gt; but it just made my head hurt, so I thought, &amp;ldquo;Hey, I could do this faster with a script&amp;rdquo; and googled for &amp;ldquo;&lt;a href=&quot;http://www.google.com/search?client=safari&amp;amp;rls=en-us&amp;amp;q=python+vcard&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&quot;&gt;python vcard&lt;/a&gt;&amp;rdquo;. Found &lt;a href=&quot;http://vobject.skyhouseconsulting.com/&quot;&gt;vobject&lt;/a&gt;, spent half an hour trying to find samples and trying to make heads or tails of the &lt;a href=&quot;http://vobject.skyhouseconsulting.com/epydoc/&quot;&gt;documentation&lt;/a&gt; (don&amp;rsquo;t click if you don&amp;rsquo;t like migraine), but finally just gave up (I was in lazy-sunday mode and just skimmed the page and docus; imo, more shouldn&amp;rsquo;t be needed for such a simple task). Try two, googled &amp;ldquo;&lt;a href=&quot;http://www.google.com/search?client=safari&amp;amp;rls=en-us&amp;amp;q=ruby+vcard&amp;amp;ie=UTF-8&amp;amp;oe=UTF-8&quot;&gt;ruby vcard&lt;/a&gt;&amp;rdquo; and &lt;a href=&quot;http://vpim.rubyforge.org/&quot;&gt;found vpim&lt;/a&gt; (note the &amp;lsquo;excessive&amp;rsquo; amount of excellent samples). A &amp;ldquo;gem install vpim&amp;rdquo; and less than two minutes in TextMate gave me:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
require 'rubygems'
require 'vpim/vcard'

cards = Vpim::Vcard.decode(open(&quot;/Users/nevyn/Desktop/vCard-kort.vcf&quot;))

cards.each do |card|
    puts &quot;#{card.email}&quot;
end
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I liked Python when I started learning it years ago, but I just can&amp;rsquo;t stand it anymore.  I know it&amp;rsquo;s just a library, but I&amp;rsquo;ve had many such experiences with Python. And it doesn&amp;rsquo;t have proper blocks! Gah.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>ds repair fail the replacement button was</title>
   <link href="https://nevyn.me/2009/03/06/ds-repair-fail-the-replacement-button-was/"/>
   <updated>2009-03-06T07:38:00+01:00</updated>
   <id>https://nevyn.me/2009/03/06/ds-repair-fail-the-replacement-button-was</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbkpi83o2qrMdkAkOo1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/nevyn/3331817908/&quot;&gt;DS repair: FAIL&lt;/a&gt; :( The replacement button was upside-down&amp;hellip;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>nintendo ds motherboard pretty</title>
   <link href="https://nevyn.me/2009/03/06/nintendo-ds-motherboard-pretty/"/>
   <updated>2009-03-06T07:29:00+01:00</updated>
   <id>https://nevyn.me/2009/03/06/nintendo-ds-motherboard-pretty</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbkphx2yqdgtDBumbo1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/nevyn/3331749964/in/set-72157614845430664/&quot;&gt;Nintendo DS motherboard&lt;/a&gt;. Pretty.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>toradex robin module 16ghz atom 2g ssd</title>
   <link href="https://nevyn.me/2009/02/28/toradex-robin-module-16ghz-atom-2g-ssd/"/>
   <updated>2009-02-28T21:51:57+01:00</updated>
   <id>https://nevyn.me/2009/02/28/toradex-robin-module-16ghz-atom-2g-ssd</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbkhs2ifeec8rliHbo1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.toradex.com/En/Products/Robin_Z530_Z510&quot;&gt;Toradex Robin&lt;/a&gt; module. 1.6GHz Atom, 2G SSD on-board, 512M RAM, sATA, GEthernet, micro-sd, VGA&amp;hellip; All on a credit card-sized board.&lt;/p&gt;

&lt;p&gt;My next computer? ;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>marco macro shot of the kindles e ink screen</title>
   <link href="https://nevyn.me/2009/02/28/marco-macro-shot-of-the-kindles-e-ink-screen/"/>
   <updated>2009-02-28T17:11:37+01:00</updated>
   <id>https://nevyn.me/2009/02/28/marco-macro-shot-of-the-kindles-e-ink-screen</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/bhKTvCKNAkha5luguDjvRjo3o1_r1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.marco.org/82176259&quot;&gt;marco&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Macro shot of the Kindle’s e-ink screen and text rendering.&lt;/p&gt;

&lt;p&gt;It’s also clear that the globule flipping is approximate, at least in this early version of the screen technology. That’s why there are random black dots in the “white” areas (that’s not dust) and why some of the pure-black pixels have an occasional white dot hanging around (like the big one in the lower-left curve of the “e”).&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I hope they don&amp;rsquo;t fix that. I haven&amp;rsquo;t seen a Kindle 2 IRL, but from the looks of that photo, the display looks delightfully organic and paper-like :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>adobegripes acrobat only the acrobat team</title>
   <link href="https://nevyn.me/2009/02/28/adobegripes-acrobat-only-the-acrobat-team/"/>
   <updated>2009-02-28T01:54:00+01:00</updated>
   <id>https://nevyn.me/2009/02/28/adobegripes-acrobat-only-the-acrobat-team</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/m0ejoBtPKkg9po9sG1Rgi8z0o1_500.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://adobegripes.tumblr.com/post/81964725/acrobat-only-the-acrobat-team-could-make-an-os&quot;&gt;adobegripes&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;Acrobat: ONLY THE ACROBAT TEAM COULD MAKE AN OS FUCK UP THIS BADLY.&lt;/p&gt;
&lt;p&gt;How is this even fucking possible?&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Classic MacOS uses &amp;ldquo;:&amp;rdquo; as a path separator, while current MacOS and unix systems use &amp;ldquo;/&amp;rdquo;. If you use a &amp;ldquo;:&amp;rdquo; separator within a Unix context, it will look like a &amp;ldquo;/&amp;rdquo; in a classic Mac context (remember, Finder is a Carbon application), and vice versa. Most likely, the Adobe team used some old code from the Classic era that uses &amp;ldquo;:&amp;rdquo;, and changed it to use a new API (e g going from Toolbox code to CoreFoundation), but forgot to change the path separator convention in building the path.&lt;/p&gt;

&lt;p&gt;Reproduce it on your own:&lt;br/&gt;&lt;img src=&quot;http://dl.getdropbox.com/u/6775/mkdir_slash.png&quot;/&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>This is credited as being by Aphex Twin in the id3 tags. I have no idea if that’s true. Nevertheless, best Ghost in the Shell remix I’ve heard, and a really great piece of music.</title>
   <link href="https://nevyn.me/2009/02/21/this-is-credited-as-being-by-aphex-twin-in-the-id3/"/>
   <updated>2009-02-21T19:38:09+01:00</updated>
   <id>https://nevyn.me/2009/02/21/this-is-credited-as-being-by-aphex-twin-in-the-id3</id>
   <content type="html">&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://assets.tumblr.com/swf/audio_player.swf?audio_file=http%3A%2F%2Fnevyn.nu%2Fmusic%2Fetc%2Fafx-gits.mp3&amp;color=FFFFFF&quot; height=&quot;27&quot; width=&quot;207&quot; quality=&quot;best&quot; wmode=&quot;opaque&quot;&gt;&lt;/embed&gt;
</content>
 </entry>
 
 <entry>
   <title>this is what a work place should look like</title>
   <link href="https://nevyn.me/2009/02/21/this-is-what-a-work-place-should-look-like/"/>
   <updated>2009-02-21T07:14:12+01:00</updated>
   <id>https://nevyn.me/2009/02/21/this-is-what-a-work-place-should-look-like</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbk6wmr04RaFgMm1Yo1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.boston.com/bigpicture/2009/02/at_work.html#photo7&quot;&gt;THIS&lt;/a&gt; is what a work place should look like!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/02/09/sunday-at-office-lots-of-macs-airfoil/"/>
   <updated>2009-02-09T05:10:34+01:00</updated>
   <id>https://nevyn.me/2009/02/09/sunday-at-office-lots-of-macs-airfoil</id>
   <content type="html">&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,115,0&quot; width=&quot;400&quot; height=&quot;300&quot; id=&quot;qikPlayer&quot; align=&quot;middle&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;sameDomain&quot; /&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;movie&quot; value=&quot;http://qik.com/swfs/qikPlayer4.swf&quot; /&gt;&lt;param name=&quot;quality&quot; value=&quot;high&quot; /&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#333333&quot; /&gt;&lt;param name=&quot;FlashVars&quot; value=&quot;rssURL=http://qik.com/video/c54828adb20e42edbdbdff5d92a8ba25.rss&amp;autoPlay=false&quot;&gt;&lt;embed src=&quot;http://qik.com/swfs/qikPlayer4.swf&quot; quality=&quot;high&quot; bgcolor=&quot;#333333&quot; width=&quot;400&quot; height=&quot;300&quot; name=&quot;qikPlayer&quot; align=&quot;middle&quot; allowScriptAccess=&quot;sameDomain&quot; allowFullScreen=&quot;true&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot; FlashVars=&quot;rssURL=http://qik.com/video/c54828adb20e42edbdbdff5d92a8ba25.rss&amp;autoPlay=false&quot;/&gt;&lt;/object&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Sunday&quot;&gt;Sunday&lt;/a&gt; + at &lt;a href=&quot;http://www.bth.se/&quot;&gt;office&lt;/a&gt; + &lt;a href=&quot;http://www.apple.com/imac/&quot;&gt;lots of macs&lt;/a&gt; + &lt;a href=&quot;http://rogueamoeba.com/airfoil/&quot;&gt;Airfoil&lt;/a&gt; + &lt;a href=&quot;http://open.spotify.com/artist/4M84umUNRbZy1mJleyyRM9&quot;&gt;Vitalic&lt;/a&gt;&amp;rsquo;s &lt;a href=&quot;http://open.spotify.com/album/0WCOG9MNipRmcYmk7F9hlU&quot;&gt;V Live&lt;/a&gt; on &lt;a href=&quot;http://www.spotify.com/&quot;&gt;Spotify&lt;/a&gt; = &lt;a href=&quot;http://qik.com/video/999787&quot;&gt;awesome&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/02/08/demo-of-the-feature-i-described-in-my-previous/"/>
   <updated>2009-02-08T04:49:00+01:00</updated>
   <id>https://nevyn.me/2009/02/08/demo-of-the-feature-i-described-in-my-previous</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/3096994?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;719&quot; frameborder=&quot;0&quot; title=&quot;Overload v0.3b Sneak Peek&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Demo of the feature I described in &lt;a href=&quot;http://overooped.com/post/75932214/my-very-first-review-of-overload-in-the-us-store&quot;&gt;my&lt;/a&gt; &lt;a href=&quot;http://overooped.com/post/75933015/so-he-didnt-like-me-but-i-intended-to-change&quot;&gt;previous&lt;/a&gt; &lt;a href=&quot;http://overooped.com/post/75933824/and-he-saw-it-and-with-his-issues-adressed-he&quot;&gt;posts&lt;/a&gt;. Also of the new rendering engine in 0.3 (not out yet).&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>When you don’t drink, people always want to know why. They’re like, ‘You don’t drink? Why?’ It never happens with anything else. ‘You don’t use mayonnaise? Why? Are you addicted to mayonnaise? Is it OK if I use mayonnaise? I could go outside …’</title>
   <link href="https://nevyn.me/2009/02/06/when-you-dont-drink-people-always-want-to-know/"/>
   <updated>2009-02-06T16:27:56+01:00</updated>
   <id>https://nevyn.me/2009/02/06/when-you-dont-drink-people-always-want-to-know</id>
   <content type="html">&lt;blockquote&gt;When you don’t drink, people always want to know why. They’re like, ‘You don’t drink? Why?’ It never happens with anything else. ‘You don’t use mayonnaise? Why? Are you addicted to mayonnaise? Is it OK if I use mayonnaise? I could go outside …’&lt;/blockquote&gt;&amp;#8212;&lt;p&gt;Jim Gaffigan (via &lt;a href=&quot;http://tumblelog.marco.org/&quot;&gt;marco&lt;/a&gt;…&lt;a href=&quot;http://www.chrispazen.com/&quot;&gt;chrispazen&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Ahah, fave quote. Never could remember who it was, though.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>and he saw it and with his issues adressed he</title>
   <link href="https://nevyn.me/2009/02/06/and-he-saw-it-and-with-his-issues-adressed-he/"/>
   <updated>2009-02-06T05:06:00+01:00</updated>
   <id>https://nevyn.me/2009/02/06/and-he-saw-it-and-with-his-issues-adressed-he</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbjlcgf5ysYx4JSZYo1_1280.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;And &lt;a href=&quot;http://overooped.com/post/75932214/my-very-first-review-of-overload-in-the-us-store&quot;&gt;he&lt;/a&gt; &lt;a href=&quot;http://overooped.com/post/75933015/so-he-didnt-like-me-but-i-intended-to-change&quot;&gt;saw it&lt;/a&gt;! And with his issues adressed, he actually liked the game! You have no idea how good it felt to make just a single &lt;a href=&quot;http://itunes.com/app/Overload&quot;&gt;$2.99&lt;/a&gt; customer happy! I&amp;rsquo;ll survive the week on this victory alone :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>so he didnt like me but i intended to change</title>
   <link href="https://nevyn.me/2009/02/06/so-he-didnt-like-me-but-i-intended-to-change/"/>
   <updated>2009-02-06T05:02:00+01:00</updated>
   <id>https://nevyn.me/2009/02/06/so-he-didnt-like-me-but-i-intended-to-change</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbjlcb4kb9Zk4rwVEo1_400.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;So, &lt;a href=&quot;http://overooped.com/post/75932214/my-very-first-review-of-overload-in-the-us-store&quot;&gt;he didn&amp;rsquo;t like me&lt;/a&gt;, but I intended to change that. The second I got home from work I started &lt;a href=&quot;http://thirdcog.eu/overload/analytics/&quot;&gt;researching exactly what was gathered&lt;/a&gt;, not just explicitly by me but also implicitly by Pinch Analytics. I added confirmation dialogs, made sure they were always in logical order, and with as short wording as possible. A few days after the horrible review, I pushed a new update. There is just no way to respond to reviews or bad reviews in iTunes; there was no way to tell the guy I had addressed his concerns in a way I hoped he found satisfactory, so I put his name in the update in the hopes that &lt;a href=&quot;http://overooped.com/post/75933824/and-he-saw-it-and-with-his-issues-adressed-he&quot;&gt;he&amp;rsquo;d see it&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>my very first review of overload in the us store</title>
   <link href="https://nevyn.me/2009/02/06/my-very-first-review-of-overload-in-the-us-store/"/>
   <updated>2009-02-06T04:57:00+01:00</updated>
   <id>https://nevyn.me/2009/02/06/my-very-first-review-of-overload-in-the-us-store</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbjlc5qnbgMhIYr1Io1_1280.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;My very first review of &lt;a href=&quot;http://itunes.com/app/Overload&quot;&gt;Overload&lt;/a&gt; in the US store was a one star review :( &lt;a href=&quot;http://overooped.com/post/75933015/so-he-didnt-like-me-but-i-intended-to-change&quot;&gt;This needed swift action&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>NSFileHandle Considered Harmful [Updated]</title>
   <link href="https://nevyn.me/2009/01/28/nsfilehandle-considered-harmful-updated/"/>
   <updated>2009-01-28T19:44:00+01:00</updated>
   <id>https://nevyn.me/2009/01/28/nsfilehandle-considered-harmful-updated</id>
   <content type="html">&lt;p&gt;&lt;em&gt;&lt;u&gt;Update 20090627&lt;/u&gt;: This bug &lt;a href=&quot;http://openradar.me/6535050&quot;&gt;has been fixed&lt;/a&gt; in 10.6. I&amp;rsquo;d still only recommend using it for very simple cases, but at least it works now!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;NSFileHandle has a bug where the calling thread will lock up indefinitely if a data of size &amp;gt;4096 is requested. Reduced case:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
#import &lt;foundation&gt;

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSFileHandle *fh = [[NSFileHandle alloc] initWithFileDescriptor:fileno(fopen(&quot;/dev/random&quot;, &quot;r&quot;))];
    
    NSLog(@&quot;Reading 4096 bytes... This will succeed.&quot;);
    [fh readDataOfLength:4096];
    NSLog(@&quot;Reading 4097 bytes... This will lock for infinity&quot;);
    [fh readDataOfLength:4097];
    NSLog(@&quot;This will never be printed.&quot;);
    
    [fh closeFile];
    [fh release];

    [pool drain];
    return 0;
}
&lt;/foundation&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;(Warning: running this program might lock up your computer; killing the rogue process is difficult as NSFileHandle will read an infinite amount of data from /dev/random, swapping out your OS.)

&lt;/p&gt;&lt;p&gt;This is extra dangerous if your read length is dynamic, such as in a protocol where the first incoming bytes defines how long the upcoming chunk to read is.&lt;/p&gt;

&lt;p&gt;Solution: Use the C API for working with file descriptors instead, such as read() and write(). A file descriptor can be extracted with [NSFileHandle fileDescriptor] if you receive one from another API.&lt;/p&gt;

&lt;p&gt;(&lt;a href=&quot;http://openradar.me/6535050&quot;&gt;This bug has been reported&lt;/a&gt;.)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>via aco</title>
   <link href="https://nevyn.me/2009/01/28/via-aco/"/>
   <updated>2009-01-28T18:39:17+01:00</updated>
   <id>https://nevyn.me/2009/01/28/via-aco</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/gltl6QbB8iyx68g859Dyr6VBo1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;(via &lt;a href=&quot;http://aco.tumblr.com/&quot;&gt;aco&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>[Cocoa] Less code when working with delegates</title>
   <link href="https://nevyn.me/2009/01/22/cocoa-less-code-when-working-with-delegates/"/>
   <updated>2009-01-22T23:06:00+01:00</updated>
   <id>https://nevyn.me/2009/01/22/cocoa-less-code-when-working-with-delegates</id>
   <content type="html">&lt;p&gt;The usual pattern is to do this in your class that has a delegate:&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;
-(void)frobnicate;
{
  ...
  BOOL extraJuicy = NO;
  if(delegate &amp;amp;&amp;amp; [delegate respondsToSelector:@selector(frobnicatorShouldAddJuice:)])
    extraJuicy = [delegate frobnicatorShouldAddJuice:self];
  if(extraJuicy)
    ...
  ...
}
&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;for every delegation method, which gets old, fast.&lt;/p&gt;


&lt;p&gt;With &lt;a href=&quot;http://github.com/nevyn/delegationhelper/tree/master&quot; title=&quot;nevyn's delegationhelper at master - GitHub&quot;&gt;DelegationHelper&lt;/a&gt;, you can do this:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
// Setup
@interface FrobnicatorDelegationHelper : DelegationHelper &lt;frobnicatordelegate&gt; {} @end

@interface Frobnicator... { FrobnicatorDelegationHelper *delegate; ... } ...@end

@implementation
-(void)setDelegate:(id&lt;frobnicatordelegate&gt;)delegate_
{
  delegate = [[DelegationHelper alloc] init];
  delegate.delegate = delegate_;
  
  [delegate setDefaultDelegationObject:BOOLobj(YES) forSelector:(frobnicatorShouldAddJuice:)];
}

// And then just...
-(void)frobnicate;
{
  ...
  if([delegate frobnicateShouldAddJuice:self])
    ...
  ...
}
&lt;/frobnicatordelegate&gt;&lt;/frobnicatordelegate&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Okay, the setup requires three extra lines and one line per selector (for defaults), but we&amp;rsquo;ve cut down the actual 
delegate calls from four lines to one! So if you have more than a single delegate method for your class, the 
DelegationHelper will help you.&lt;/p&gt;

&lt;p&gt;For more samples, see &lt;a href=&quot;http://github.com/nevyn/delegationhelper/blob/e4801e9c50f784d072a5c9e9054885dd281bd7a3/main.m&quot; title=&quot;main.m at e4801e9c50f784d072a5c9e9054885dd281bd7a3 from nevyn's delegationhelper - GitHub&quot;&gt;main.m&lt;/a&gt; in &lt;a href=&quot;http://github.com/nevyn/delegationhelper/tree/master&quot; title=&quot;nevyn's delegationhelper at master - GitHub&quot;&gt;my repository&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/01/20/hey-cool-i-updated-soundapp-reborn-this-weekend/"/>
   <updated>2009-01-20T04:37:00+01:00</updated>
   <id>https://nevyn.me/2009/01/20/hey-cool-i-updated-soundapp-reborn-this-weekend</id>
   <content type="html">&lt;p&gt;Hey, cool! I updated &lt;a href=&quot;http://thirdcog.eu/apps/soundapp&quot;&gt;SoundApp Reborn&lt;/a&gt; this weekend with a &lt;a href=&quot;http://thirdcog.eu/news/show/11&quot;&gt;tiny tiny 0.1.1 update&lt;/a&gt;, and already over one thousand people have downloaded it on &lt;a href=&quot;http://www.macupdate.com/info.php/id/24110/soundapp-reborn&quot;&gt;macupdate&lt;/a&gt; and &lt;a href=&quot;http://www.versiontracker.com/dyn/moreinfo/macosx/31933&quot;&gt;versiontracker&lt;/a&gt;! Pretty sweet for such a small app, and makes me feel even worse for not updating it in two years&amp;hellip;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/01/19/woah-nice-just-noticed-that-even-if-an-app-has/"/>
   <updated>2009-01-19T20:57:00+01:00</updated>
   <id>https://nevyn.me/2009/01/19/woah-nice-just-noticed-that-even-if-an-app-has</id>
   <content type="html">&lt;p&gt;Woah, nice. Just noticed that even if an app has no windows open (in this case, Live Messenger), it still has an icon in the dock&amp;ndash; err, taskbar. Application-centric FTW! (Usually the approach is to add a systray icon, which I always thought was a horrible hack)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>heh that didnt last long</title>
   <link href="https://nevyn.me/2009/01/19/heh-that-didnt-last-long/"/>
   <updated>2009-01-19T06:44:00+01:00</updated>
   <id>https://nevyn.me/2009/01/19/heh-that-didnt-last-long</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbivq1xfoS8JXnbsIo1_r1_500.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;Heh, &lt;a href=&quot;http://overooped.com/post/71371019/things-10-6-should-steal-from-win-7&quot;&gt;that didn&amp;rsquo;t last long&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>things mac os x 106 should steal from windows 7</title>
   <link href="https://nevyn.me/2009/01/19/things-mac-os-x-106-should-steal-from-windows-7/"/>
   <updated>2009-01-19T05:34:00+01:00</updated>
   <id>https://nevyn.me/2009/01/19/things-mac-os-x-106-should-steal-from-windows-7</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbivnjeypSeMzegSpo1_r2_1280.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://overooped.com/post/71371019/things-10-6-should-steal-from-win-7&quot;&gt;Things Mac OS X 10.6 should steal from Windows 7&lt;/a&gt;: Dock Thumbnails&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Things 10.6 should steal from Win 7</title>
   <link href="https://nevyn.me/2009/01/19/things-106-should-steal-from-win-7/"/>
   <updated>2009-01-19T05:33:00+01:00</updated>
   <id>https://nevyn.me/2009/01/19/things-106-should-steal-from-win-7</id>
   <content type="html">&lt;p&gt;Like Jobs and Picasso before him said, &amp;ldquo;Good artists copy, great artists steal&amp;rdquo;. Microsoft seems to have realized that there really is something to the application centric model that Mac OS has been using all these years (as opposed to Windows&amp;rsquo; long running window centric model, where each window is a separate process), and that the Dock might have some potential. &lt;a href=&quot;http://overooped.com/post/71371150/things-mac-os-x-10-6-should-steal-from-windows-7&quot;&gt;Thus, they made their own version of the Dock in Win7&lt;/a&gt;, not the same, but similar. And I&amp;rsquo;m loving it. Apple really needs to take some UI hints from Microsoft here (!). Some observations follow&amp;hellip;&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;When you right click on an app in the Mac Dock, you get an ordinary text menu with all the open windows in that app. In Windows 7, you get a graphical grid of thumbnails. This is so much better. Steal it!&lt;/li&gt;
  &lt;li&gt;When you hover over this thumbnail in Win7, that particular window is highlighted and all other windows are hidden. You can then scrub over all the thumbnails in that app without having to wait for the on-hover delay, to quickly look through the app and find the window you&amp;rsquo;re looking for. So useful, please steal this!&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;Now, I&amp;rsquo;m tempted to try to work in Windows, but I can&amp;rsquo;t make iPhone apps in Windows, and there are some things I know I just can&amp;rsquo;t stand. The most annoying thing is that the scroll wheel acts on the active control, not the control under the mouse (SO FRUSTRATING, especially when the active control is a popup menu). Doesn&amp;rsquo;t seem like they&amp;rsquo;re even viewing it as a fault. Also, I can&amp;rsquo;t stand Visual Studio, but I guess I could code in another IDE. Any suggestions? (I&amp;rsquo;m the kind that actually like XCode)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Accelerating Template-Based Matching on the GPU for AR Applications</title>
   <link href="https://nevyn.me/2009/01/18/accelerating-template-based-matching-on-the-gpu/"/>
   <updated>2009-01-18T21:21:50+01:00</updated>
   <id>https://nevyn.me/2009/01/18/accelerating-template-based-matching-on-the-gpu</id>
   <content type="html">&lt;a href=&quot;http://www.hitlabnz.org/publications/2007-AcceleratingTemplate-BasedMatchingontheGPUforARApplications.pdf&quot;&gt;Accelerating Template-Based Matching on the GPU for AR Applications&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Very cool, ARToolkit ported to GPGPU code. Doesn&amp;rsquo;t seem like they&amp;rsquo;ve released code nor binaries, though :( Which is weird, since ARToolkit is GPL.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Wikipedia: Lagom</title>
   <link href="https://nevyn.me/2009/01/18/wikipedia-lagom/"/>
   <updated>2009-01-18T20:08:00+01:00</updated>
   <id>https://nevyn.me/2009/01/18/wikipedia-lagom</id>
   <content type="html">&lt;a href=&quot;http://en.wikipedia.org/wiki/Lagom&quot;&gt;Wikipedia: Lagom&lt;/a&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://tjmahr.com/post/71267702/wikipedia-lagom&quot;&gt;tristanjay7&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;“Lagom is a Swedish word with no direct English equivalent, meaning “just the right amount”….In a single word, lagom is said to describe the basis of the Swedish national psyche, one of consensus and equality.”&lt;/p&gt;
&lt;p&gt;Thanks to the Sweden episode of No Reservations.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Hah! Didn&amp;rsquo;t know it&amp;rsquo;d be so fun to &lt;a href=&quot;http://www.youtube.com/watch?v=rOztyYUjXh8&quot;&gt;watch a travel show about your own country&lt;/a&gt;. (Also, youtube ftw.)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/01/18/im-convinced-that-most-people-only-spend-1-2/"/>
   <updated>2009-01-18T05:14:58+01:00</updated>
   <id>https://nevyn.me/2009/01/18/im-convinced-that-most-people-only-spend-1-2</id>
   <content type="html">&lt;blockquote&gt;“I’m convinced that most people only spend 1-2 hours a day actually working. Of that time spent, a lot of it is “meta work”, endless emails, scheduling, and such. When you go to work and sit in your cube you’re behaving pretty much like a CPU. Most of the time you’re at 99% idle, but you need to be there and “on” just in case someone needs some processing done.”&lt;/blockquote&gt; &lt;p&gt;— &lt;a href=&quot;http://nathanbowers.com/business/keanu-vs-the-cubicle/&quot;&gt;Nathan Bowers&lt;/a&gt; &amp;lt; &lt;a href=&quot;http://lindsaycampbell.tumblr.com/&quot;&gt;lindsaycampbell&lt;/a&gt; &amp;lt; &lt;a href=&quot;http://tumblelog.marco.org/71155221&quot;&gt;marco&lt;/a&gt;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
do {
  for(Distraction *d in [self distractions:kTwitterDistraction, kRSSDistraction, kIRCDistraction, nil])
    [self lazilyReadForAFewMinutes:d];

  for(Distraction *d in [self workDistractions:kEmailDistraction, kColleagueAskingQuestions, nil])
    if( ! [d canBeAvoided]) [self respond:d];

  BOOL wasInteresting;
  @try {
    do {
      wasInteresting = [self writeWorkRelatedCodeForSeconds:5*60];
    } while(wasInteresting);
  } @catch (ImmenselyBoringException *thisIsKillingMe) {
  }

} while ([NSDate timeIntervalSinceReferenceDate] &lt;/code&gt;&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/01/17/hrrrthrrr-this-is-where-we-live-by-apt-studio/"/>
   <updated>2009-01-17T08:12:47+01:00</updated>
   <id>https://nevyn.me/2009/01/17/hrrrthrrr-this-is-where-we-live-by-apt-studio</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/2295261?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;300&quot; frameborder=&quot;0&quot; title=&quot;This Is Where We Live&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://hrrrthrrr.tumblr.com/post/64151739/this-is-where-we-live-by-apt-studio-using-more&quot;&gt;hrrrthrrr&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;b&gt;This is Where We Live&lt;/b&gt; by Apt Studio&lt;/p&gt;
&lt;p&gt;Using more than 1000 books and three weeks of filming in stop-motion, the producers &lt;a href=&quot;http://aptstudio.com/&quot;&gt;Apt&lt;/a&gt;&lt;a href=&quot;http://aptstudio.com/&quot;&gt; Studio&lt;/a&gt; and working with &lt;a href=&quot;http://www.asylumfilms.co.uk/&quot;&gt;Asylum&lt;/a&gt; Films made this beautiful film to commemorate the 25th anniversary of imprint &lt;a href=&quot;http://fifthestate.co.uk/&quot;&gt;4th Estate&lt;/a&gt;. The film contains numerous in-jokes and references to the books it features, and everything, from the ships in port to the cinema in Soho to the man fishing in Central Park is made out of books, covers, pages and words. In the campaign’s website you can &lt;a href=&quot;http://www.25thestate.com/&quot;&gt;check photos of the making of&lt;/a&gt;.&lt;/p&gt;&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/01/16/star-wars-retold-by-someone-who-hasnt-seen-it/"/>
   <updated>2009-01-16T11:22:10+01:00</updated>
   <id>https://nevyn.me/2009/01/16/star-wars-retold-by-someone-who-hasnt-seen-it</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/2809991?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;225&quot; frameborder=&quot;0&quot; title=&quot;Star Wars: Retold (by someone who hasn&amp;#039;t seen it)&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://vimeo.com/2809991&quot;&gt;Star Wars: Retold (by someone who hasn&amp;rsquo;t seen it)&lt;/a&gt;. Han. S. Solo.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>my brother needed some math homework help figuring</title>
   <link href="https://nevyn.me/2009/01/15/my-brother-needed-some-math-homework-help-figuring/"/>
   <updated>2009-01-15T07:15:00+01:00</updated>
   <id>https://nevyn.me/2009/01/15/my-brother-needed-some-math-homework-help-figuring</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbiq1ds67zmSJnx8Po1_540.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://flickr.com/photos/nevyn/2783672135/&quot;&gt;My brother&lt;/a&gt; needed some math homework help figuring out quadratic equations. I really want to teach him programming and I&amp;rsquo;ve shown him some very basic C before, so together we &lt;a href=&quot;http://github.com/nevyn/myass/tree/master&quot;&gt;threw together a quick app&lt;/a&gt; solve quadratic formulas with the pq-formula :) [note: he chose project name :P]&lt;/p&gt;

&lt;p&gt;(If you are a beta tester for any of &lt;a href=&quot;http://thirdcog.eu/&quot;&gt;my apps&lt;/a&gt;, you can even &lt;a href=&quot;http://github.com/nevyn/myass/raw/5493b1a13322f8086c3119874220bf87e4eaf608/Releases/Leyory%201.0.zip&quot;&gt;download and install the app&lt;/a&gt; and try it yourself!)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>my current desktop picture i hope itll inspire</title>
   <link href="https://nevyn.me/2009/01/12/my-current-desktop-picture-i-hope-itll-inspire/"/>
   <updated>2009-01-12T08:35:52+01:00</updated>
   <id>https://nevyn.me/2009/01/12/my-current-desktop-picture-i-hope-itll-inspire</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbiltxp82cJwXaDGCo1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;My current desktop picture. I hope it&amp;rsquo;ll inspire me to finish my goddamn candidate thesis so I can get on with my life.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Last.fm</title>
   <link href="https://nevyn.me/2009/01/11/lastfm/"/>
   <updated>2009-01-11T22:58:00+01:00</updated>
   <id>https://nevyn.me/2009/01/11/lastfm</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://tjmahr.com/post/69649078/last-fm&quot;&gt;tristanjay7&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://kapi.in/post/69645954/last-fm&quot;&gt;kapi&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Please reblog with your usernames. Mine is kapi80&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://www.last.fm/user/mahr&quot;&gt;mahr&lt;/a&gt;&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;I&amp;rsquo;m &lt;a href=&quot;http://www.last.fm/user/nevyn&quot;&gt;nevyn&lt;/a&gt;. Tangentially, I noticed yesterday that last.fm has a nice iPhone version of their site, and I used it to settle an argument with &lt;a href=&quot;http://www.amandarosler.com/&quot;&gt;my girlfriend&lt;/a&gt; whether I had listened to &lt;a href=&quot;http://www.last.fm/music/Jim+Noir/_/My+Patch&quot;&gt;Jim Noir&amp;rsquo;s My patch&lt;/a&gt; one or five times that day, because she couldn&amp;rsquo;t get it out of her head. Turns out I had listened to it 3 times, not 1 :P Jim Noir rocks, especially My Patch.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update&lt;/em&gt;: Cool:
&lt;/p&gt;&lt;blockquote&gt;
Your musical compatibility with mahr is VERY HIGH
&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>Bio-Bak</title>
   <link href="https://nevyn.me/2009/01/10/bio-bak/"/>
   <updated>2009-01-10T22:26:08+01:00</updated>
   <id>https://nevyn.me/2009/01/10/bio-bak</id>
   <content type="html">&lt;a href=&quot;http://www.bio-bak.nl/&quot;&gt;Bio-Bak&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Need to link this again. Most awesome portfolio site on the web.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The Dial Up Kid</title>
   <link href="https://nevyn.me/2009/01/10/the-dial-up-kid/"/>
   <updated>2009-01-10T22:25:00+01:00</updated>
   <id>https://nevyn.me/2009/01/10/the-dial-up-kid</id>
   <content type="html">&lt;a href=&quot;http://www.sonnyradio.com/dialupkid.htm&quot;&gt;The Dial Up Kid&lt;/a&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://log.maniacalrage.net/post/69008382/the-dial-up-kid&quot;&gt;maniacalrage&lt;/a&gt; (via &lt;a href=&quot;http://tumblelog.marco.org/69010974&quot;&gt;marco&lt;/a&gt;):&lt;/p&gt;
&lt;blockquote&gt;I still occasionally have nightmares that feature these sounds. The faces in this animation are dead on.&lt;/blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://www.bio-bak.nl/&quot;&gt;BioBak&lt;/a&gt; has a face animated to the modem sound in the lower left corner of his site (which is the most awesome portfolio site on the internets) which is much, much better. I wonder which was first&amp;hellip;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>pre spotlight</title>
   <link href="https://nevyn.me/2009/01/10/pre-spotlight/"/>
   <updated>2009-01-10T18:56:00+01:00</updated>
   <id>https://nevyn.me/2009/01/10/pre-spotlight</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbijl8r54xH1gg7ozo1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;It seems the Palm Pre has a &lt;a href=&quot;http://www.engadgetmobile.com/photos/palm-pre-interface-tour/1273824/&quot;&gt;system-wide search&lt;/a&gt; á la &lt;a href=&quot;http://en.wikipedia.org/wiki/Spotlight_(software)&quot;&gt;Spotlight&lt;/a&gt;. That is awesome — and only one of &lt;a href=&quot;http://www.engadget.com/2009/01/08/palm-pre-in-depth-impressions-video-and-huge-hands-on-gallery/&quot;&gt;many awesome things about the Pre&lt;/a&gt; (I can&amp;rsquo;t quit obsessing about that awesome app switching UI (videos at the bottom)). For the first time we seem to have a truly worthy competitor to the iPhone.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/01/04/its-just-like-the-vehicle-in-tracktor-beam/"/>
   <updated>2009-01-04T22:09:17+01:00</updated>
   <id>https://nevyn.me/2009/01/04/its-just-like-the-vehicle-in-tracktor-beam</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/LC97wdQOmfI?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;It&amp;rsquo;s just like the vehicle in &lt;a href=&quot;http://will.thimbleby.net/tractorbeam/&quot;&gt;Tracktor Beam!&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>How to fix a syslogd that uses &gt;100% CPU</title>
   <link href="https://nevyn.me/2009/01/03/how-to-fix-a-syslogd-that-uses-100-cpu/"/>
   <updated>2009-01-03T08:34:52+01:00</updated>
   <id>https://nevyn.me/2009/01/03/how-to-fix-a-syslogd-that-uses-100-cpu</id>
   <content type="html">&lt;a href=&quot;http://discussions.apple.com/thread.jspa?messageID=7403933&amp;#7403933&quot;&gt;How to fix a syslogd that uses &gt;100% CPU&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Other symptoms: malloc errors in the syslog.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>GetBundles</title>
   <link href="https://nevyn.me/2009/01/03/getbundles/"/>
   <updated>2009-01-03T01:11:00+01:00</updated>
   <id>https://nevyn.me/2009/01/03/getbundles</id>
   <content type="html">&lt;a href=&quot;http://www.al3x.net/2008/12/03/how-i-use-textmate.html&quot;&gt;GetBundles&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Al3x:&lt;/p&gt;
&lt;blockquote&gt;
GetBundles is totally sweet. It goes out and checks not just the official TextMate bundle repositories but GitHub as well. Once it’s got an authoritative list of all the bundles out there, it lets you install them with a click. You don’t even need to restart TextMate to make use of newly installed bundles. GetBundles is how you should get bundles.
&lt;/blockquote&gt;

&lt;p&gt;It&amp;rsquo;s really weird that GetBundles is so unknown, given that it&amp;rsquo;s so great. Here&amp;rsquo;s how you install it the easiest way:
&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Open a new TextMate document&lt;/li&gt;
&lt;li&gt;Paste this text in it:&lt;br/&gt;&lt;pre&gt;&lt;code&gt;mkdir -p ~/Library/Application\ Support/TextMate/Bundles
cd ~/Library/Application\ Support/TextMate/Bundles
svn co &lt;a href=&quot;http://svn.textmate.org/trunk/Review/Bundles/GetBundles.tmbundle/&quot;&gt;http://svn.textmate.org/trunk/Review/Bundles/GetBundles.tmbundle/&lt;/a&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;Select all and press ctrl-R&lt;/li&gt;
&lt;li&gt;Wait until you get a lot of &amp;ldquo;A&amp;rdquo; lines in the document&lt;/li&gt;
&lt;li&gt;Restart TextMate (or do Bundles &amp;gt; Bundle Editor &amp;gt; Reload Bundles) and you now have GetBundles! It&amp;rsquo;s under Bundles &amp;gt; GetBundles &amp;gt; GetBundles.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Here&amp;rsquo;s what it looks like:&lt;br/&gt;&lt;img src=&quot;http://dl-client.getdropbox.com/u/6775/getbundles.png&quot; style=&quot;width:510px;&quot;/&gt;&lt;br/&gt;
Just double clicking a row installs the bundle.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2009/01/02/my-favorite-derren-brown-trick-paying-with-blank/"/>
   <updated>2009-01-02T20:26:00+01:00</updated>
   <id>https://nevyn.me/2009/01/02/my-favorite-derren-brown-trick-paying-with-blank</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/3Vz_YTNLn6w?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;My favorite Derren Brown trick: paying with blank paper instead of money.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>National Consumer Agency of Denmark: iBook Lab Report</title>
   <link href="https://nevyn.me/2009/01/02/national-consumer-agency-of-denmark-ibook-lab/"/>
   <updated>2009-01-02T06:42:00+01:00</updated>
   <id>https://nevyn.me/2009/01/02/national-consumer-agency-of-denmark-ibook-lab</id>
   <content type="html">&lt;a href=&quot;http://www.forbrug.dk/fileadmin/Filer/PDF/ENGF959-orig.pdf&quot;&gt;National Consumer Agency of Denmark: iBook Lab Report&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Okay, so back in 2006, the consumer agency of Denmark did some research on why the iBook G4&amp;rsquo;s logic board seems to break after 12-18 months. Turns out it&amp;rsquo;s almost always the same fault: a ISL 6225CA chip where the pins 1 and 28 are badly solded to the board, which makes the solder crack. This is why clamping or shimming the iBook makes it work, it rejoins the solder temporarily. &lt;a href=&quot;http://coreyarnold.org/ibook/&quot;&gt;Several users&lt;/a&gt; &lt;a href=&quot;http://coreyarnold.org/ibook/?p=20#comments&quot;&gt;have tried&lt;/a&gt; &lt;a href=&quot;http://www.edugames.dse.nl/logicboardrepair/&quot;&gt;to solder&lt;/a&gt; the break or shim the motherboard. Shimming only seems to work for a while, while soldering seems to work great.&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s odd that I had such a hard time to find this report, given that it&amp;rsquo;s by far the most common reason why an iBook G4 breaks.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>tristanjay7 livejamie reddit</title>
   <link href="https://nevyn.me/2009/01/01/tristanjay7-livejamie-reddit/"/>
   <updated>2009-01-01T23:22:26+01:00</updated>
   <id>https://nevyn.me/2009/01/01/tristanjay7-livejamie-reddit</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/v1GKDlMsei671i6ys5Mu9Golo1_500.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://tristanjay7.tumblr.com/post/67763381/livejamie-this-is-why-reddit-is-amazing-you-mean&quot;&gt;tristanjay7&lt;/a&gt; &amp;gt; &lt;a href=&quot;http://livejamie.com/post/67736226/this-is-why-reddit-is-amazing&quot;&gt;livejamie&lt;/a&gt; &amp;gt; reddit&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>tristanjay7 ericmortensen a book of musical</title>
   <link href="https://nevyn.me/2009/01/01/tristanjay7-ericmortensen-a-book-of-musical/"/>
   <updated>2009-01-01T23:14:00+01:00</updated>
   <id>https://nevyn.me/2009/01/01/tristanjay7-ericmortensen-a-book-of-musical</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MqWahqdB8i507ustanRVafvVo1_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://tristanjay7.tumblr.com/post/67763241/ericmortensen-a-book-of-musical-compositions&quot;&gt;tristanjay7&lt;/a&gt; &amp;gt; &lt;a href=&quot;http://blog.worshiptheglitch.com/post/67597766/a-book-of-musical-compositions-where-each-note-is&quot;&gt;ericmortensen&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;A book of musical compositions where each note is transformed into colors. The artist Hoagy Houghton proposes a manner of playing piano original, which is based on the reading of the variations of colors. (via &lt;a href=&quot;http://66.196.80.202/babelfish/translate_url_content?.intl=fr&amp;amp;lp=fr_en&amp;amp;trurl=http%3a%2f%2fwww.fubiz.net%2fblog%2findex.php%3f2008%2f12%2f30%2f2549-aleatory-compositions-book&quot;&gt;Aleatory Book Compositions - Fubiz&lt;/a&gt;)&lt;/blockquote&gt;

&lt;p&gt;Hey, that&amp;rsquo;s just &lt;a href=&quot;http://www.pianowizard.com/&quot;&gt;Piano Wizard&lt;/a&gt; (warning: autoplaying video). Which @mandy incidentally gave me for christmas present! Its UI and gameplay is pretty horrible though, at least compared to guitar hero, and I&amp;rsquo;ll have to blog that extensively later&amp;hellip;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The code that allegedly broke the Zune</title>
   <link href="https://nevyn.me/2009/01/01/the-code-that-allegedly-broke-the-zune/"/>
   <updated>2009-01-01T23:06:00+01:00</updated>
   <id>https://nevyn.me/2009/01/01/the-code-that-allegedly-broke-the-zune</id>
   <content type="html">&lt;a href=&quot;http://www.zuneboards.com/forums/zune-news/38143-cause-zune-30-leapyear-problem-isolated.html&quot;&gt;The code that allegedly broke the Zune&lt;/a&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://tumblelog.marco.org/67771148&quot;&gt;marco&lt;/a&gt; &amp;lt; &lt;a href=&quot;http://jstn.cc/post/67760495&quot;&gt;jstn&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;
while (days &amp;gt; 365) {
    if (IsLeapYear(year)) {
        if (days &amp;gt; 366) {
            days -= 366;
            year += 1;
        } /* nevyn's note: this is where there should
             be an else { break; } */
    } else {
        days -= 365;
        year += 1;
    }
}
&lt;/pre&gt;

&lt;p&gt;(Also, &lt;a href=&quot;http://pastie.org/349916&quot;&gt;this&lt;/a&gt;  is very ugly C style in many places. I expected better from Microsoft.)&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;a href=&quot;http://pastie.org/349916&quot;&gt;The code from where this originated is available here&lt;/a&gt;. The funny thing is that the same code is copy-pasted in several places, with slight variations. Around line 259 is the offending code. Around line 554 is the same code, but done right (with a break after the second if).&lt;/p&gt;

&lt;p&gt;Library code, people! Don&amp;rsquo;t reinvent the wheel! And if you do have to reinvent it, and you are *Microsoft* with all the money and resources that entails, get some real programmers to do the job, and spend time and money on very very thorough unit testing (e g, running every function through a table with every date from -100 to +100 years from now, or something smarter/simpler I haven&amp;rsquo;t thought of)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update: More fun stuff. There&amp;rsquo;s a function that checks if a date is valid before setting it on the RTC (Real Time Clock), and it will return false for dates before 1980 and after 2080. Therefore, the Zune will stop working 2080. :P&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update: Yes, it was Freescale that wrote this code, should&amp;rsquo;ve seen that&amp;hellip; I&amp;rsquo;m still of the opinion that Microsoft should&amp;rsquo;ve tested it thoroughly before using it, though, and I&amp;rsquo;m &lt;a href=&quot;http://episteme.arstechnica.com/eve/forums/a/tpc/f/174096756/m/233007436931?r=573004836931#573004836931&quot;&gt;not alone in thinking so&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>its about an hour til the next year comes round</title>
   <link href="https://nevyn.me/2009/01/01/its-about-an-hour-til-the-next-year-comes-round/"/>
   <updated>2009-01-01T07:48:00+01:00</updated>
   <id>https://nevyn.me/2009/01/01/its-about-an-hour-til-the-next-year-comes-round</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbi62esv6aMgUEeeEo1_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;It&amp;rsquo;s about an hour til&amp;rsquo; the next year comes round, so I put the project in a box to work on it later. BUT HEY, why not &lt;a href=&quot;http://flickr.com/photos/nevyn/3153890991/in/set-72157611917994727/&quot;&gt;boot it while it&amp;rsquo;s in the box&lt;/a&gt;? OHYEAH.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>okay still broken but at least free of its</title>
   <link href="https://nevyn.me/2009/01/01/okay-still-broken-but-at-least-free-of-its/"/>
   <updated>2009-01-01T07:47:00+01:00</updated>
   <id>https://nevyn.me/2009/01/01/okay-still-broken-but-at-least-free-of-its</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbi62cnoau9ZazC9Po1_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Okay, still broken, but at least &lt;a href=&quot;http://flickr.com/photos/nevyn/3154729178/in/set-72157611917994727/&quot;&gt;FREE OF ITS PLASTIC PRISON&lt;/a&gt;!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>im building a wearable computer starting with</title>
   <link href="https://nevyn.me/2009/01/01/im-building-a-wearable-computer-starting-with/"/>
   <updated>2009-01-01T07:45:00+01:00</updated>
   <id>https://nevyn.me/2009/01/01/im-building-a-wearable-computer-starting-with</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbi62b5dxCiSvbUr9o1_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://flickr.com/photos/nevyn/sets/72157611917994727/&quot;&gt;I&amp;rsquo;m building&lt;/a&gt; a &lt;a href=&quot;http://faculty.arch.usyd.edu.au/kcdc/journal/vol2/dcnet/sub8/front_wearable.jpg&quot;&gt;wearable computer&lt;/a&gt;. Starting with &lt;a href=&quot;http://flickr.com/photos/nevyn/3153890563/in/set-72157611917994727/&quot;&gt;getting this old iBook working&lt;/a&gt;. Ohyeah.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>science from the top ten astronomy pictures of</title>
   <link href="https://nevyn.me/2008/12/29/science-from-the-top-ten-astronomy-pictures-of/"/>
   <updated>2008-12-29T07:33:09+01:00</updated>
   <id>https://nevyn.me/2008/12/29/science-from-the-top-ten-astronomy-pictures-of</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/wYctwvtfTi1p3yysoSwUpljwo1_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://science.tumblr.com/post/67189965/from-the-top-ten-astronomy-pictures-of-2008-comes&quot;&gt;science&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;From the &lt;a href=&quot;http://blogs.discovermagazine.com/badastronomy/2008/12/17/top-ten-astronomy-pictures-of-2008/&quot;&gt;Top Ten Astronomy Pictures of 2008&lt;/a&gt; comes this spectacular picture (yes picture, not rendering) of spiral galaxy NGC7331, 50 million light years away.  The detail in the photo is staggering and every little bit is beautiful.  &lt;a href=&quot;http://www.astrofoto.es/Galeria/2008/ngc7331caha/ngc7331caha_en.html&quot;&gt;Here is the 3000 pixel wide ‘reduced’ version&lt;/a&gt; and for the insane, &lt;a href=&quot;http://www.caha.es/ngc-7331-a-large-spiral-galaxy.html&quot;&gt;this page has uncompressed 4000 pixel wide images up to 67 meg in size&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The other &lt;a href=&quot;http://blogs.discovermagazine.com/badastronomy/2008/12/17/top-ten-astronomy-pictures-of-2008/&quot;&gt;top photos of the year&lt;/a&gt; are of course worth checking out as well.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;(Nothing to add, it&amp;rsquo;s just plain beautiful.)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Nobody should start to undertake a large project. You start with a small trivial project, and you should never expect it to get large. If you do, you’ll just overdesign and generally think it is more important than it likely is at that stage. Or worse, you might be scared away by the sheer size of the work you envision.

So start small, and think about the details. Don’t think about some big picture and fancy design. If it doesn’t solve some fairly immediate need, it’s almost certainly over-designed.

And don’t expect people to jump in and help you. That’s not how these things work. You need to get something half-way useful first, and then others will say “hey, that almost works for me”, and they’ll get involved in the project.”</title>
   <link href="https://nevyn.me/2008/12/27/nobody-should-start-to-undertake-a-large-project/"/>
   <updated>2008-12-27T10:32:00+01:00</updated>
   <id>https://nevyn.me/2008/12/27/nobody-should-start-to-undertake-a-large-project</id>
   <content type="html">&lt;blockquote&gt;&lt;p&gt;Nobody should start to undertake a large project. You start with a small trivial project, and you should never expect it to get large. If you do, you’ll just overdesign and generally think it is more important than it likely is at that stage. Or worse, you might be scared away by the sheer size of the work you envision.&lt;/p&gt;

&lt;p&gt;So start small, and think about the details. Don’t think about some big picture and fancy design. If it doesn’t solve some fairly immediate need, it’s almost certainly over-designed.&lt;/p&gt;

&lt;p&gt;And don’t expect people to jump in and help you. That’s not how these things work. You need to get something half-way useful first, and then others will say “hey, that almost works for me”, and they’ll get involved in the project.”&lt;/p&gt;&lt;/blockquote&gt;&amp;#8212;Linus Torvalds, &lt;a href=&quot;http://tristanjay7.tumblr.com/post/66931309/a-double-handful-of-programming-quotes&quot;&gt;via&lt;/a&gt; &lt;a href=&quot;http://tumblr.iamdanw.com/post/66890648/a-double-handful-of-programming-quotes&quot;&gt;via&lt;/a&gt; &lt;a href=&quot;http://www.hackification.com/2008/12/23/a-double-handful-of-programming-quotes/&quot;&gt;via &amp;ldquo;A Double Handful of Programming Quotes&amp;rdquo;&lt;/a&gt;.
</content>
 </entry>
 
 <entry>
   <title>holy shit theyre actually pulling that ship</title>
   <link href="https://nevyn.me/2008/12/26/holy-shit-theyre-actually-pulling-that-ship/"/>
   <updated>2008-12-26T10:10:46+01:00</updated>
   <id>https://nevyn.me/2008/12/26/holy-shit-theyre-actually-pulling-that-ship</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbhxmu9ssnEvg4Raeo1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Holy shit they&amp;rsquo;re actually PULLING THAT SHIP ASHORE. &lt;a href=&quot;http://alexiuss.deviantart.com/journal/17919112/&quot;&gt;Some very crazy pictures&lt;/a&gt; of very poor people working as ship breakers in Bangladesh.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>FROM HEAVEN IT DESCENDS; GOD DELIVERS ON YOUR DEEPEST DESIRES.</title>
   <link href="https://nevyn.me/2008/12/25/from-heaven-it-descends-god-delivers-on-your/"/>
   <updated>2008-12-25T07:13:00+01:00</updated>
   <id>https://nevyn.me/2008/12/25/from-heaven-it-descends-god-delivers-on-your</id>
   <content type="html">&lt;a href=&quot;http://ditchnet.org/httpclient/&quot;&gt;FROM HEAVEN IT DESCENDS; GOD DELIVERS ON YOUR DEEPEST DESIRES.&lt;/a&gt;&lt;br/&gt;&lt;p&gt;I&amp;rsquo;ve been thinking about writing something like this for years and years, only I&amp;rsquo;d want it as a proxy between the browser and the server, with a two-pane interface for response/requests and headers and stuff.&lt;/p&gt;

&lt;p&gt;Meanwhile, this will do very, very nicely.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>my girlfriend made me a sackboy for christmas so</title>
   <link href="https://nevyn.me/2008/12/25/my-girlfriend-made-me-a-sackboy-for-christmas-so/"/>
   <updated>2008-12-25T06:24:00+01:00</updated>
   <id>https://nevyn.me/2008/12/25/my-girlfriend-made-me-a-sackboy-for-christmas-so</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbhvzbafz2PHS1Q3so1_1280.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://amandarosler.com/&quot;&gt;My girlfriend&lt;/a&gt; made me a &lt;a href=&quot;http://en.wikipedia.org/wiki/LittleBigPlanet&quot;&gt;Sackboy&lt;/a&gt; for christmas! So awesome :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>tristanjay7kapi full house</title>
   <link href="https://nevyn.me/2008/12/25/tristanjay7kapi-full-house/"/>
   <updated>2008-12-25T05:38:32+01:00</updated>
   <id>https://nevyn.me/2008/12/25/tristanjay7kapi-full-house</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/V3plvX2eRhvisag2oaobqTRco1_400.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://tristanjay7.tumblr.com/post/66596169/kapi-full-house&quot;&gt;tristanjay7&lt;/a&gt;:&lt;a href=&quot;http://kapi.in/post/66577412/full-house&quot;&gt;kapi&lt;/a&gt;: Full House&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/12/24/tristanjay7-hoarr-tinycartridge-mega-man/"/>
   <updated>2008-12-24T06:53:05+01:00</updated>
   <id>https://nevyn.me/2008/12/24/tristanjay7-hoarr-tinycartridge-mega-man</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/1OJqdthb0jA?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://tristanjay7.tumblr.com/post/66416488/hoarr-tinycartridge-mega-man-vs-hard-hat&quot;&gt;tristanjay7&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://hoarr.tumblr.com/post/66414145/mega-man-vid&quot;&gt;hoarr&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;a href=&quot;http://tinycartridge.com/post/66412610/mega-man-vs-hard-hat-using-every-unique-weapon&quot;&gt;tinycartridge&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Mega Man vs. Hard Hat, using every unique weapon and utility item from &lt;i&gt;Mega Man 1-6&lt;/i&gt;, &lt;i&gt;Mega Man I-V&lt;/i&gt; (Game Boy), &lt;i&gt;Mega Man 7-8&lt;/i&gt;, &lt;i&gt;Mega Man &amp;amp; Bass&lt;/i&gt;, &lt;i&gt;Mega Man Powered Up&lt;/i&gt;, and &lt;i&gt;Mega Man 9&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;[Thanks, auntie!]&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;b&gt;EPIC&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;b&gt;WIN&lt;/b&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>GitHub Ribbons</title>
   <link href="https://nevyn.me/2008/12/22/github-ribbons/"/>
   <updated>2008-12-22T02:36:30+01:00</updated>
   <id>https://nevyn.me/2008/12/22/github-ribbons</id>
   <content type="html">&lt;a href=&quot;http://github.com/blog/273-github-ribbons&quot;&gt;GitHub Ribbons&lt;/a&gt;&lt;br/&gt;&lt;p&gt;No better way to spend your Sunday evening than some serious forking.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>awesome grafitti love it via via via</title>
   <link href="https://nevyn.me/2008/12/20/awesome-grafitti-love-it-via-via-via/"/>
   <updated>2008-12-20T07:35:27+01:00</updated>
   <id>https://nevyn.me/2008/12/20/awesome-grafitti-love-it-via-via-via</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/tYBN1n5jFhopt48kpJLPSkHEo1_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Awesome grafitti, love it!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://tristanjay7.tumblr.com/post/65803108/snuh-via&quot;&gt;via&lt;/a&gt; &lt;a href=&quot;http://snuh.tumblr.com/post/65777185/via&quot;&gt;via&lt;/a&gt; &lt;a href=&quot;http://riotclitshave.com&quot;&gt;via&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>hard limits</title>
   <link href="https://nevyn.me/2008/12/17/hard-limits/"/>
   <updated>2008-12-17T20:46:27+01:00</updated>
   <id>https://nevyn.me/2008/12/17/hard-limits</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbhlel2uuzk8pThGIo1_400.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Hard Limits.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Pangea has been developing Mac games for over 20 years, but according to president &amp; CEO Brian Greenstone, the company’s App Store sales since July alone have brought in more revenue than the company’s total retail sales over the last 20 years.</title>
   <link href="https://nevyn.me/2008/12/17/pangea-has-been-developing-mac-games-for-over-20/"/>
   <updated>2008-12-17T06:33:36+01:00</updated>
   <id>https://nevyn.me/2008/12/17/pangea-has-been-developing-mac-games-for-over-20</id>
   <content type="html">&lt;blockquote&gt;Pangea has been developing Mac games for over 20 years, but according to president &amp;amp; CEO Brian Greenstone, the company’s App Store sales since July alone have brought in more revenue than the company’s total retail sales over the last 20 years.&lt;/blockquote&gt;&amp;#8212;&lt;p&gt;&lt;a href=&quot;http://arstechnica.com/journals/apple.ars/2008/12/16/some-iphone-devs-raking-in-the-cash-from-the-app-store&quot;&gt;Some iPhone devs raking in the cash from the App Store&lt;/a&gt;. (via &lt;a href=&quot;http://tumblelog.marco.org/65174230&quot;&gt;marco&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Woah. I&amp;rsquo;ve been playing several Pangea games in my days (I&amp;rsquo;ve had a Mac for around 20 years now); just the thought that they could make more in just a year than they made in the previous &lt;em&gt;twenty&lt;/em&gt; years kinda blows my mind. And as marco predicts, &lt;a href=&quot;http://thirdcog.eu/apps/overload&quot;&gt;my own game&lt;/a&gt; hasn&amp;rsquo;t been quite as successful :P&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>I don’t see any value in forcing the single return. Actually I think it generally makes code much harder to read. It turns the execution path from a tree into an onion.</title>
   <link href="https://nevyn.me/2008/12/17/i-dont-see-any-value-in-forcing-the-single/"/>
   <updated>2008-12-17T06:10:00+01:00</updated>
   <id>https://nevyn.me/2008/12/17/i-dont-see-any-value-in-forcing-the-single</id>
   <content type="html">&lt;blockquote&gt;I don&amp;rsquo;t see any value in forcing the single return. Actually I think it generally makes code much harder to read. It turns the execution path from a tree into an onion.&lt;/blockquote&gt;&amp;#8212;&lt;p&gt;&lt;i&gt;&amp;ndash;&lt;a href=&quot;http://forums.sun.com/thread.jspa?messageID=9788225#9788225&quot;&gt;dubwai on forums.sun.com&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;So it&amp;rsquo;s just not me! Gah, I thought I was going crazy. I can&amp;rsquo;t stand single-return code, yet &lt;b&gt;&lt;i&gt;all&lt;/i&gt;&lt;/b&gt; Apple sample and template code uses it! I just had to google it to see if there was some good reason for it, or if they were just being annoying pricks. Turns out they are just annoying pricks.&lt;/p&gt;

&lt;p&gt;Compare!&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
- (id)initWithFrame:(CGRect)frame {
  if (self = [super initWithFrame:frame]) {
    do your stuff...
  }
  return self;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;hellip; to &amp;hellip;&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
- (id)initWithFrame:(CGRect)frame {
  if ( ! [super initWithFrame:frame] ) return nil;
  do your stuff...

  return self;
}&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Keep the common case left-most; indent the uncommon code and return early if the strange case makes the common case not make sense. So simple, so clean!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/11/24/tristanjay7-castlevania-symphony-of-the-night/"/>
   <updated>2008-11-24T08:00:57+01:00</updated>
   <id>https://nevyn.me/2008/11/24/tristanjay7-castlevania-symphony-of-the-night</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://tristanjay7.tumblr.com/post/61205190/castlevania-symphony-of-the-night-what-is-a-man&quot;&gt;tristanjay7&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;&lt;b&gt;Castlevania Symphony of the Night: What is a man?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;I still have this whole exchange memorized. I love Symphony of the Night.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;Oh god, I love this passage. I have at least three friends with which I replay this dialog with regularly. &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Sorry for spamming you, but just one more now. It’s actually called “one more”. Or at least it was once, he probably gave it a real name since.</title>
   <link href="https://nevyn.me/2008/11/23/sorry-for-spamming-you-but-just-one-more-now/"/>
   <updated>2008-11-23T23:42:44+01:00</updated>
   <id>https://nevyn.me/2008/11/23/sorry-for-spamming-you-but-just-one-more-now</id>
   <content type="html">&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://assets.tumblr.com/swf/audio_player.swf?audio_file=http%3A%2F%2Fnevyn.nu%2Fmusic%2Fetc%2Fsterd%2Fentill.mp3&amp;color=FFFFFF&quot; height=&quot;27&quot; width=&quot;207&quot; quality=&quot;best&quot; wmode=&quot;opaque&quot;&gt;&lt;/embed&gt;
</content>
 </entry>
 
 <entry>
   <title>“Zenith”.</title>
   <link href="https://nevyn.me/2008/11/23/zenith/"/>
   <updated>2008-11-23T23:41:54+01:00</updated>
   <id>https://nevyn.me/2008/11/23/zenith</id>
   <content type="html">&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://assets.tumblr.com/swf/audio_player.swf?audio_file=http%3A%2F%2Fnevyn.nu%2Fmusic%2Fetc%2Fsterd%2FPB%2520-%2520Zenith.mp3&amp;color=FFFFFF&quot; height=&quot;27&quot; width=&quot;207&quot; quality=&quot;best&quot; wmode=&quot;opaque&quot;&gt;&lt;/embed&gt;
</content>
 </entry>
 
 <entry>
   <title>This is his remix of The Flying Pickets’ Only You. I love it.</title>
   <link href="https://nevyn.me/2008/11/23/this-is-his-remix-of-the-flying-pickets-only-you/"/>
   <updated>2008-11-23T23:38:47+01:00</updated>
   <id>https://nevyn.me/2008/11/23/this-is-his-remix-of-the-flying-pickets-only-you</id>
   <content type="html">&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://assets.tumblr.com/swf/audio_player.swf?audio_file=http%3A%2F%2Fnevyn.nu%2Fmusic%2Fetc%2Fsterd%2FPB%2520-%2520Only%2520You%25202.mp3&amp;color=FFFFFF&quot; height=&quot;27&quot; width=&quot;207&quot; quality=&quot;best&quot; wmode=&quot;opaque&quot;&gt;&lt;/embed&gt;
</content>
 </entry>
 
 <entry>
   <title>Hey it’s my old best friend’s birthday today! I’d link him, but he took his site down. Instead, I’ll post my favorites of the songs he’s made. This one is “The Star Odyssey”.</title>
   <link href="https://nevyn.me/2008/11/23/hey-its-my-old-best-friends-birthday-today-id/"/>
   <updated>2008-11-23T23:35:54+01:00</updated>
   <id>https://nevyn.me/2008/11/23/hey-its-my-old-best-friends-birthday-today-id</id>
   <content type="html">&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://assets.tumblr.com/swf/audio_player.swf?audio_file=http%3A%2F%2Fnevyn.nu%2Fmusic%2Fetc%2Fsterd%2FPB%2520-%2520The%2520Star%2520Odyssey.mp3&amp;color=FFFFFF&quot; height=&quot;27&quot; width=&quot;207&quot; quality=&quot;best&quot; wmode=&quot;opaque&quot;&gt;&lt;/embed&gt;
</content>
 </entry>
 
 <entry>
   <title>This song goes great with the comic below.</title>
   <link href="https://nevyn.me/2008/11/23/this-song-goes-great-with-the-comic-below/"/>
   <updated>2008-11-23T23:04:13+01:00</updated>
   <id>https://nevyn.me/2008/11/23/this-song-goes-great-with-the-comic-below</id>
   <content type="html">&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://assets.tumblr.com/swf/audio_player.swf?audio_file=http%3A%2F%2Fnevyn.nu%2Fmusic%2Fetc%2F13%2520Olson.mp3&amp;color=FFFFFF&quot; height=&quot;27&quot; width=&quot;207&quot; quality=&quot;best&quot; wmode=&quot;opaque&quot;&gt;&lt;/embed&gt;
</content>
 </entry>
 
 <entry>
   <title>how ironic that what i decide to do with it is to</title>
   <link href="https://nevyn.me/2008/11/23/how-ironic-that-what-i-decide-to-do-with-it-is-to/"/>
   <updated>2008-11-23T23:01:31+01:00</updated>
   <id>https://nevyn.me/2008/11/23/how-ironic-that-what-i-decide-to-do-with-it-is-to</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbgn8uc0fwL56f9doo1_1280.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;How ironic that what I decide to do with it is to blog it. That&amp;rsquo;s not breaking the mold, that&amp;rsquo;s what I do every day! Gah never mind, Sundays weren&amp;rsquo;t meant to be meaningful anyway.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/11/23/just-wasted-an-hour-on-youtube-watching-louis-ck/"/>
   <updated>2008-11-23T22:31:34+01:00</updated>
   <id>https://nevyn.me/2008/11/23/just-wasted-an-hour-on-youtube-watching-louis-ck</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/4u2ZsoYWwJA?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Just wasted an hour on Youtube watching Louis CK. (7:00 and on is best)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/11/23/this-is-absurd-i-never-realized-there-was-this/"/>
   <updated>2008-11-23T08:51:21+01:00</updated>
   <id>https://nevyn.me/2008/11/23/this-is-absurd-i-never-realized-there-was-this</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;225&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/1XBwjQsOEeg?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;This is absurd. I never realized there was this much air travel, every day!&lt;/p&gt;

If the magnitude doesn&amp;rsquo;t hit you with that video, go smaller; &lt;a href=&quot;http://www.youtube.com/watch?v=cQTAfIf_AOk&amp;amp;feature=related&quot;&gt;watch the one for just Europe&lt;/a&gt;. Remember, this is in a single day.

&lt;p&gt;It&amp;rsquo;s amazing the Earth survives a *day* with all the pollution this must produce.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>That’s why real programmers get confused by Halloween and X-Mas, cause OCT 31 = DEC 25</title>
   <link href="https://nevyn.me/2008/11/18/thats-why-real-programmers-get-confused-by/"/>
   <updated>2008-11-18T04:48:08+01:00</updated>
   <id>https://nevyn.me/2008/11/18/thats-why-real-programmers-get-confused-by</id>
   <content type="html">&lt;blockquote&gt;That&amp;rsquo;s why real programmers get confused by Halloween and X-Mas, cause OCT 31 = DEC 25&lt;/blockquote&gt;&amp;#8212;from a &lt;a href=&quot;http://thedailywtf.com/Comments/Keep-it-Simple-and-Stupid.aspx#229463&quot;&gt;tdwtf comment&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>Ubuntu Oddities, pt. I</title>
   <link href="https://nevyn.me/2008/11/16/ubuntu-oddities-pt-i/"/>
   <updated>2008-11-16T09:19:52+01:00</updated>
   <id>https://nevyn.me/2008/11/16/ubuntu-oddities-pt-i</id>
   <content type="html">&lt;p&gt;&lt;b&gt;Sharing fails&lt;/b&gt;&lt;br/&gt;
Context-clicked a folder and selected to share it. Said I needed to install a Windows networking service. I said yes, but I had synaptic open so it failed. Closed synaptic and tried again; but after clicking install service nothing happened, and then it said the session needed to be restarted. Doing so yielded nothing though, sharing still doesn&amp;rsquo;t work and trying to enable it yields the same result. Rebooting doesn&amp;rsquo;t help.

&lt;/p&gt;&lt;p&gt;&lt;b&gt;Can&amp;rsquo;t activate Nvidia drivers&lt;/b&gt;&lt;br/&gt;
Activating my wifi drivers worked fine, but when I click Activate on the nvidia drivers, 173 or 177, nothing happens. (A progress bar appears at 0%, spins indeterminately, and then disappears, with the state of the driver still as &amp;ldquo;unactivated&amp;rdquo;).&lt;/p&gt;

&lt;p&gt;SOLVED: Trying to switch to fancy desktop effects bizarrely installs the driver without a hitch, and without showing that strange driver preference pane. It just installs almost silently.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Nerdtalk&lt;/b&gt;&lt;br/&gt;
Functionality needs to be installed through the Synaptics package manager. However, all packages have short, cryptic and abbreviated names that doesn&amp;rsquo;t say what the package does. That&amp;rsquo;s not very friendly&amp;hellip;&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Tiresome movie dialogs &lt;/b&gt;&lt;br/&gt;
Trying to play a mkv file yields a million dialog boxes with menacing icons that warn you about missing codecs, packs, and proprietarity. Clicking blindly on accept gets you through it, but it&amp;rsquo;s still pretty nasty.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Enjoy the silence&lt;/b&gt;&lt;br/&gt;
There&amp;rsquo;s no sound. Trying to change sound device yields the horrible assertion that &amp;ldquo;audiotestsrc wave=sine freq=512 ! audioconvert ! audioresample ! gconfaudiosink profile=music: Could not open audio device for playback&amp;rdquo;. What does that even mean?&lt;/p&gt;

&lt;p&gt;SOLVED: The solution is of course to &lt;a href=&quot;http://www.junauza.com/2008/05/ubuntuxubuntu-804-macbook-pro-sound-and.html&quot;&gt;add an obscure line to an obscure file&lt;/a&gt;, as usual in Linux.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Wobbly priorities&lt;/b&gt;&lt;br/&gt;
Ubuntu has wobbly windows &amp;ndash; but, unless it&amp;rsquo;s a configuration option somewhere, not live resize of windows. Priorities, anyone? Even Windows has had live resize for the longest time.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>MacBook Pro Ubuntu triple-boot dancing</title>
   <link href="https://nevyn.me/2008/11/16/macbook-pro-ubuntu-triple-boot-dancing/"/>
   <updated>2008-11-16T09:13:44+01:00</updated>
   <id>https://nevyn.me/2008/11/16/macbook-pro-ubuntu-triple-boot-dancing</id>
   <content type="html">&lt;p&gt;I&amp;rsquo;ve had some serious problems installing Ubuntu on my MacBook Pro (revision D, the penryn edition, released start of 2008; the model before the unibody MBPs). I&amp;rsquo;ve tried twice now, once with 8.0 and then with 8.1.&lt;/p&gt;

&lt;p&gt;After installing Ubuntu &lt;a href=&quot;https://help.ubuntu.com/community/MacBookPro%20&quot;&gt;exactly according to the instructions at the Ubuntu wiki&lt;/a&gt;, the Windows installation would be broken. Directly after install, when trying to boot Windows, it would bluescreen for a fraction of a second and then immediately reboot. I&amp;rsquo;ve found through googling that the error message is &amp;ldquo;invalid boot volume&amp;rdquo; or something like that. Anyways, I googled some more and found out I had to resync the MBR and GPT partition tables, so I&amp;rsquo;d install refit and do that. After that, I&amp;rsquo;d just get &amp;ldquo;hal.dll missing or corrupt&amp;rdquo;! What the hell! Turns out the boot.ini needed tweaking to point to the right partition, but even after fixing that, I&amp;rsquo;d just get the bluescreen again. At some point I also just got a blinking cursor at boot.&lt;/p&gt;

&lt;p&gt;Anyways, after hours troubleshooting I found &lt;a href=&quot;http://icrontic.com/articles/triplebootmbp%20&quot;&gt;this article on icrontic which describes a procedure that actually works&lt;/a&gt;. However, that&amp;rsquo;s not the one I followed; instead, I followed Craigular.B&amp;rsquo;s instructions, which you can find if you scroll down through the comments. I&amp;rsquo;ve replicated and annotated his comments below, with further elaboration for people who might not be as linux savvy as me or him.&lt;/p&gt;

&lt;p&gt;Needless to say, make a complete backup of your machine before proceeding. I&amp;rsquo;m not even kidding. I don&amp;rsquo;t know how many times I avoided heeding that advice and just went through anyway, and I&amp;rsquo;ve regretted it several times. Just get an external disk and &lt;a href=&quot;http://www.shirt-pocket.com/SuperDuper/SuperDuperDescription.html&quot;&gt;SuperDuper!&lt;/a&gt; your disk to it. It&amp;rsquo;s not very expensive.&lt;/p&gt;

&lt;p&gt;Please read the notes at the end before proceeding.&lt;/p&gt;

&lt;p&gt;Here we go:&lt;/p&gt;


&lt;ol&gt;&lt;li&gt;Install 10.5. No need to partition yet, just install like you usually would. However, don&amp;rsquo;t run Boot Camp Utility! We&amp;rsquo;re going to use the diskutil command.
&lt;/li&gt;&lt;li&gt;&lt;p&gt;When the installation is complete and you&amp;rsquo;re ready, open up Terminal from the Utilities folder in your Applications folder.&lt;/p&gt;

&lt;p&gt;You now need to figure out how big your partitions are going to be. If your disk is a 250gb disk, your disk will show up as 232gb if you get info on it. With such a disk, the following configuration would be a good one:&lt;/p&gt;
&lt;p&gt;MacOS: 165gb &lt;br/&gt;
Ubuntu: 12gb&lt;br/&gt;
Windows: 55gb&lt;br/&gt;
165+12+55 = 232&lt;br/&gt;&lt;/p&gt;

&lt;p&gt;Work out your numbers, and then type this command into the terminal:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;sudo diskutil resizeVolume disk0s2 165G &quot;Journaled HFS+&quot; &quot;Ubuntu&quot; 12G &quot;MS-DOS FAT32&quot; &quot;Windows XP&quot; 55G&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Replace those numbers &amp;ldquo;165G&amp;rdquo;, &amp;ldquo;12G&amp;rdquo; and &amp;ldquo;55G&amp;rdquo; with numbers appropriate for your harddrive, as calculated above.&lt;/p&gt;
&lt;/li&gt;

&lt;li&gt;Install Windows. Pop in your Windows CD, reboot holding c, install like usual. Make sure you install it on the fourth partition. In the above example, that would be the 55gb one. Having unique sizes for each partition is a good one to uniquely identify them throughout systems without ambiguity.&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Install Ubuntu; download the regular i386 disk image from ubuntu.com, burn it with Disk Utility, pop it in, and reboot holding c. Follow the installation guide. When you&amp;rsquo;re at the partitioning stage (but before partitioning), press fn-ctrl-alt-F2 to get to a text console. Type:
&lt;code&gt;sudo dd if=/dev/sda of=/tmp/sda.mbr bs=512 count=1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This will save your master boot record of your drive to a file in memory&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;Press ctrl-alt-fn-F7 to get back to the installer. Select manual partitioning. Select the /dev/sda3 entry (should be 12 gigabytes if you&amp;rsquo;re following the instructions exactly; if not, it should be the size you typed after &amp;ldquo;Ubuntu&amp;rdquo; in the resizeVolume command), press Edit partition, don&amp;rsquo;t change the size!, use as Ext2 file system, check &amp;ldquo;Format the partition&amp;rdquo;, type / as the mount point.&lt;/li&gt;

&lt;li&gt;Confirm the partitioning, and ignore the warning about swap memory. You&amp;rsquo;ll be enabling that manually later. Continue with the installation until you are on step 7 of 7 of the installer. &lt;/li&gt;

&lt;li&gt;&lt;p&gt;It&amp;rsquo;s now time to restore the MBR. ctrl-alt-f2, type&lt;br/&gt;&lt;code&gt;sudo dd if=/tmp/sda.mbr of=/dev/sda&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;If you want to store the mbr for later use, e g if you are afraid you might mess it up later, you can do this: &lt;br/&gt;
a. Plug a usb stick into the computer &lt;br/&gt;
b. type sudo mkdir /mnt/foo &lt;br/&gt;
c. type sudo mount /dev/sdb1 /mnt/foo &lt;br/&gt;
d. If you get a warning about read-only, type sudo umount /mnt/foo, remove the stick, unlock it, and plug it in again, and continue from b &lt;br/&gt;
e. type sudo cp /tmp/sda.mbr /mnt/foo/ &lt;br/&gt;
f. type sudo umount /mnt/foo and remove your stick&lt;/li&gt;

&lt;li&gt;Press ctrl-alt-F7 to return to the installer. Click Advanced&amp;hellip;. Change the &amp;ldquo;Device for boot loader installation&amp;rdquo; to /dev/sda3 so that the boot loader is only installed for the Linux partition instead of the entire disk. Press OK, and click Install&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Reboot. Windows and Linux will be gone from your available boot options. Don&amp;rsquo;t fret. Boot into Macos. Install &lt;a href=&quot;http://refit.sourceforge.net/&quot;&gt;refit&lt;/a&gt;. Reboot. At the refit menu, selection the &amp;ldquo;Partition Tool&amp;rdquo;, and type &amp;ldquo;y&amp;rdquo; to accept its changing the MBR partition table.&lt;/p&gt;

&lt;p&gt;Now you should be able to boot any of MacOS, Linux or Windows. If it freezes at the grayscale  Windows flag or Penguin logo, just hard reset your computer and try again.&lt;/p&gt;

&lt;p&gt;You now have a triple boot machine. However, you still need to finish setting up Ubuntu.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;8.1 came with all the drivers (wifi, trackpad, graphics, keyboard fn-keys) you need for this rev D MBP (which 8.0 didn&amp;rsquo;t), so you&amp;rsquo;re done, yay! (although the wifi drivers have to be approved after the first boot due to being proprietary (as if that was some horrible thing))&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update:&lt;/b&gt; To get the sound working, you might need to follow the instructions at &lt;a href=&quot;http://www.junauza.com/2008/05/ubuntuxubuntu-804-macbook-pro-sound-and.html&quot;&gt;http://www.junauza.com/2008/05/ubuntuxubuntu-804-macbook-pro-sound-and.html&lt;/a&gt; (add &amp;ldquo;options snd_hda_intel model=mbp3&amp;rdquo; to the bottom of /etc/modprobe.d/options)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;&lt;b&gt;Update 2:&lt;/b&gt;&lt;br/&gt;
It is entirely possible that all the fiddling around with the MBR was completely unnecessary. This has taken my entire Saturday, and I don&amp;rsquo;t feel like experimenting with reinstalling it all once again. However, I think the two keys to success were:&lt;br/&gt;
1. Manually partitioning (which I found out after writing this guide you can easilly do graphically according to this guide: &lt;a href=&quot;http://ubuntuforums.org/showthread.php?t=469999&quot;&gt;http://ubuntuforums.org/showthread.php?t=469999&lt;/a&gt; )&lt;br/&gt;
2. Not installing the boot loader at /dev/sda but at /dev/sda3.&lt;/p&gt;

&lt;p&gt;Just following these two points, and fixing the partition table with refit, should be all you need to get going. Please add a comment or mail me at joachimb@gmail.com for success or failure stories.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/11/15/59797428/"/>
   <updated>2008-11-15T19:53:29+01:00</updated>
   <id>https://nevyn.me/2008/11/15/59797428</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/2229299?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;225&quot; frameborder=&quot;0&quot; title=&quot;g-speak overview 1828121108&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;
</content>
 </entry>
 
 <entry>
   <title>oblong industries, inc.</title>
   <link href="https://nevyn.me/2008/11/15/oblong-industries-inc/"/>
   <updated>2008-11-15T19:52:40+01:00</updated>
   <id>https://nevyn.me/2008/11/15/oblong-industries-inc</id>
   <content type="html">&lt;a href=&quot;http://oblong.com/&quot;&gt;oblong industries, inc.&lt;/a&gt;&lt;br/&gt;&lt;p&gt;If that was my office, I would live off saline solution and caffenie, I would never leave it. I would also have that music pumping throughout the room. Every second of my life from that moment forward would be a mini sci fi movie.&lt;/p&gt;

&lt;p&gt;Ok, seriously though. It looks freakin&amp;rsquo; badass, but I&amp;rsquo;d love to see some actual practical applications&amp;hellip;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>TouchFlo is like a very thin candy shell over the stinking pile of shit that is Windows mobile</title>
   <link href="https://nevyn.me/2008/11/15/touchflo-is-like-a-very-thin-candy-shell-over-the/"/>
   <updated>2008-11-15T19:47:49+01:00</updated>
   <id>https://nevyn.me/2008/11/15/touchflo-is-like-a-very-thin-candy-shell-over-the</id>
   <content type="html">&lt;blockquote&gt;TouchFlo is like a very thin candy shell over the stinking pile of shit that is Windows mobile&lt;/blockquote&gt;&amp;#8212; &lt;a href=&quot;http://www.penny-arcade.com/2008/11/14/&quot;&gt;Gabe&lt;/a&gt; over at PA. Seems to apply equally well to all other recent Windows Mobile phones (Xperia, *especially* the original HTC Touch, etc&amp;hellip;); I mean, how couldn&amp;rsquo;t it? A UI designed for keyboard and mouse, shoehorned into a handheld and retrofitted to work with a stylus by changing as little as possible to accommodate the change, and THEN taking that UI and retrofitting it for finger touch, again changing as little as possible, preferably not more than a new home screen? I mean, how could it NOT fail?
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/11/09/the-mac-zfs-project-is-awesome-and-i-cant-wait/"/>
   <updated>2008-11-09T01:06:00+01:00</updated>
   <id>https://nevyn.me/2008/11/09/the-mac-zfs-project-is-awesome-and-i-cant-wait</id>
   <content type="html">&lt;p&gt;The Mac ZFS project is awesome and I can&amp;rsquo;t wait for the day when all my machines run ZFS, but that day doesn&amp;rsquo;t seem to be today. Bill Winnett on the zfs-discuss list:&lt;/p&gt;

&lt;blockquote&gt;Since posting this problem, I have also found other issues.  Sometimes using finder to move larger files from a hfs+ filesystem to a zfs sub dir with umlaut O in the directory name, the file gets lost.   The file does not seem to get posted in the directory listing after the copy completes.  I have even found sub directories to completely disappear, even opening a terminal session and navigating to the work area and running find or ls, does not find the directory.  Strange behavior to say the least.&lt;/blockquote&gt;

&lt;p&gt;I also find it funny that the mailing list software completely failed to handle ö in his mail, and he had to resend it replacing ö with &amp;ldquo;umlaut O&amp;rdquo;. You know what you call a programmer that&amp;rsquo;s not multilingual? &amp;hellip; American.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/11/06/japan-in-1991-and-2008-respectively-same-train/"/>
   <updated>2008-11-06T08:18:00+01:00</updated>
   <id>https://nevyn.me/2008/11/06/japan-in-1991-and-2008-respectively-same-train</id>
   <content type="html">&lt;br/&gt;&lt;br/&gt;&lt;div style=&quot;width: 850px; position:relative; left:-160px;&quot;&gt;
&lt;object width=&quot;425&quot; height=&quot;344&quot; style=&quot;float: left&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/Lf8Ig2M3Zq0&amp;amp;hl=en&amp;amp;fs=1&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/Lf8Ig2M3Zq0&amp;amp;hl=en&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;
&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/8ScexNfYbBQ&amp;amp;hl=en&amp;amp;fs=1&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/8ScexNfYbBQ&amp;amp;hl=en&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;

&lt;/div&gt;

&lt;p&gt;Japan, in 1991 and 2008 respectively. Same train, same platform; very timeless. And VERY crammed!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/10/23/john-mccain-negative-attack-ads-show-you-have-no/"/>
   <updated>2008-10-23T05:17:43+02:00</updated>
   <id>https://nevyn.me/2008/10/23/john-mccain-negative-attack-ads-show-you-have-no</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/vsX2Gx9jl_o?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=vsX2Gx9jl_o&quot;&gt;John McCain: Negative Attack Ads Show You Have No Vision&lt;/a&gt;. I find this funny.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/10/20/updated-my-mac-frameworks-page-with-glew-150/"/>
   <updated>2008-10-20T19:59:00+02:00</updated>
   <id>https://nevyn.me/2008/10/20/updated-my-mac-frameworks-page-with-glew-150</id>
   <content type="html">&lt;p&gt;Updated my &lt;a href=&quot;http://thirdcog.eu/apps/frameworks&quot;&gt;Mac Frameworks&lt;/a&gt; page with &lt;a href=&quot;http://thirdcog.eu/apps/frameworks#glew&quot;&gt;GLEW 1.5.0&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>organized ignorance</title>
   <link href="https://nevyn.me/2008/10/17/organized-ignorance/"/>
   <updated>2008-10-17T22:20:55+02:00</updated>
   <id>https://nevyn.me/2008/10/17/organized-ignorance</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/YupSvmJ1Ld190m65Zza6EcOl_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://organized-ignorance.net/post/47600824/riotrepublic-peroty-insuchaworld-windmill&quot;&gt;organized-ignorance&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/10/12/my-dock-what-happens-when-im-stressed/"/>
   <updated>2008-10-12T04:17:00+02:00</updated>
   <id>https://nevyn.me/2008/10/12/my-dock-what-happens-when-im-stressed</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://flickr.com/photos/nevyn/2931284311/&quot;&gt;&lt;img src=&quot;http://farm4.static.flickr.com/3009/2931284311_c5d46b04e2_o.png&quot;/&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My Dock - “What Happens When I’m Stressed” Edition. I should prune that Safari to-read list…&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Growl 1.1.4 with 0.1s transition animation</title>
   <link href="https://nevyn.me/2008/10/07/growl-114-with-01s-transition-animation/"/>
   <updated>2008-10-07T05:18:00+02:00</updated>
   <id>https://nevyn.me/2008/10/07/growl-114-with-01s-transition-animation</id>
   <content type="html">&lt;a href=&quot;http://tr.im/8bm&quot;&gt;Growl 1.1.4 with 0.1s transition animation&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Just a little bit of sanity. It would drive me batshit crazy that the growls would animate in just so slowly, covering whatever you needed to interact with &lt;em&gt;right now&lt;/em&gt;, and &lt;em&gt;just&lt;/em&gt; when it starts to fade out you mouse-over it to click it to remove it, but it fades &lt;em&gt;in&lt;/em&gt; on mouse-over! And then you click it, move your cursor away, and then have to sit through an additional 0.7s of fade out transition, and &lt;em&gt;then&lt;/em&gt; you could interact with whatever it is you needed to interact with. Unless another growl decided to appear just then, and into the vacant spot. GRARGHHHH!&lt;/p&gt;
&lt;p&gt;
I never understood how LanOSD could die while Growl prospered; LanOSD was pure grace.&lt;/p&gt;

&lt;p&gt;Funniest part of this hack: Just above the setTransitionDuration method, there&amp;rsquo;s a comment: &amp;ldquo;Maybe there should be a preference setting for this&amp;rdquo; (or something to that effect)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Erasable Shower Note Tablet</title>
   <link href="https://nevyn.me/2008/10/03/erasable-shower-note-tablet/"/>
   <updated>2008-10-03T07:21:00+02:00</updated>
   <id>https://nevyn.me/2008/10/03/erasable-shower-note-tablet</id>
   <content type="html">&lt;a href=&quot;http://www.etravelergear.com/ershownottab.html&quot;&gt;Erasable Shower Note Tablet&lt;/a&gt;&lt;br/&gt;&lt;p&gt;And there we go. Out of stock, though&amp;hellip; &lt;i&gt;later&lt;/i&gt;: Okay, &lt;a href=&quot;http://marketplace.hgtv.com/Product.aspx?Lid=834-N610123&quot;&gt;this then&lt;/a&gt;. Apparently me and shutupinternet aren&amp;rsquo;t the only ones with ideas in the shower :P&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Shower Notepad</title>
   <link href="https://nevyn.me/2008/10/03/shower-notepad/"/>
   <updated>2008-10-03T07:20:52+02:00</updated>
   <id>https://nevyn.me/2008/10/03/shower-notepad</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://shutupinternet.com/post/52779104/shower-notepad&quot;&gt;shutupinternet&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;I posted a little bit ago that I do all of my &lt;a href=&quot;http://shutupinternet.com/post/51618640/shower-thinking&quot;&gt;best thinking in the shower&lt;/a&gt;. Sometimes I either take too long of a shower or think of too many good things to remember so today (in the shower) I came up with this: Shower Notepad. (Pause for gasps). I’m sure there’s waterproof paper and waterproof pens so let’s make this happen so I won’t forget any of the prime things that come to me under my waterfall of joy.&lt;/blockquote&gt;



I need this. All my best ideas come to me while I&amp;rsquo;m in the shower.
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/10/02/i-have-no-idea-what-the-hell-theyre-selling-but/"/>
   <updated>2008-10-02T18:22:14+02:00</updated>
   <id>https://nevyn.me/2008/10/02/i-have-no-idea-what-the-hell-theyre-selling-but</id>
   <content type="html">&lt;p&gt;I have no idea what the hell they&amp;rsquo;re selling, but this is the most awesome ad I&amp;rsquo;ve ever seen.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Mobile-ITX</title>
   <link href="https://nevyn.me/2008/09/29/mobile-itx/"/>
   <updated>2008-09-29T05:02:01+02:00</updated>
   <id>https://nevyn.me/2008/09/29/mobile-itx</id>
   <content type="html">&lt;a href=&quot;http://www.epiacenter.com/modules.php?name=News&amp;file=article&amp;sid=1108&quot;&gt;Mobile-ITX&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Hey, this is cool. Finally a motherboard standard at reasonable sizes ;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/09/29/run-multiple-apps-on-android-suddenly-i-feel-like/"/>
   <updated>2008-09-29T04:57:02+02:00</updated>
   <id>https://nevyn.me/2008/09/29/run-multiple-apps-on-android-suddenly-i-feel-like</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/q1m4j676BCc?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=q1m4j676BCc&quot;&gt;Run Multiple Apps on Android&lt;/a&gt;. Suddenly I feel like switching platforms :P At least I really need to try this one out&amp;hellip;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Yasushi Miura - Lotus

I’ve had four of his songs in my library, recorded from soma.fm, for years, but never found more of his music. Today I found one of his albums on some russian site. This is so good I’m losing my mind.

Update: Found some more of his music on the Internet Archive!</title>
   <link href="https://nevyn.me/2008/09/28/yasushi-miura-lotus-ive-had-four-of-his-songs/"/>
   <updated>2008-09-28T04:58:00+02:00</updated>
   <id>https://nevyn.me/2008/09/28/yasushi-miura-lotus-ive-had-four-of-his-songs</id>
   <content type="html">&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://assets.tumblr.com/swf/audio_player.swf?audio_file=https%3A%2F%2Fwww.tumblr.com%2Faudio_file%2Fnevyn%2F52037327%2FMLhBbCcsbee3cey7cebjG2Bv&amp;color=FFFFFF&quot; height=&quot;27&quot; width=&quot;207&quot; quality=&quot;best&quot; wmode=&quot;opaque&quot;&gt;&lt;/embed&gt;
</content>
 </entry>
 
 <entry>
   <title>check that search and replace bar bar not</title>
   <link href="https://nevyn.me/2008/09/19/check-that-search-and-replace-bar-bar-not/"/>
   <updated>2008-09-19T08:17:14+02:00</updated>
   <id>https://nevyn.me/2008/09/19/check-that-search-and-replace-bar-bar-not</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbe1fhljfhZxVTxTqo1_500.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://macrabbit.com/espresso/&quot;&gt;Check that search-and-replace bar&lt;/a&gt;. Bar, not window. Regexp. Syntax highlighted regexps.  And the sidebar. And everything&amp;rsquo;s so clean. Jan, you&amp;rsquo;re the man. I&amp;rsquo;m crying here, it&amp;rsquo;s so beautiful.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>boasas rocks</title>
   <link href="https://nevyn.me/2008/09/17/boasas-rocks/"/>
   <updated>2008-09-17T19:34:47+02:00</updated>
   <id>https://nevyn.me/2008/09/17/boasas-rocks</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbdz8t8qsPIiqJ0F0o1_500.gif&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.boasas.com/?c=1006&quot;&gt;BOASAS&lt;/a&gt; rocks.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/09/11/when-i-read-the-register-on-the-recent-googasm/"/>
   <updated>2008-09-11T08:46:13+02:00</updated>
   <id>https://nevyn.me/2008/09/11/when-i-read-the-register-on-the-recent-googasm</id>
   <content type="html">&lt;p&gt;When I read &lt;a href=&quot;http://www.theregister.co.uk/2008/09/08/dziuba_chrome/&quot;&gt;The Register on the recent Googasm over Chrome&lt;/a&gt;, and more specifically, Mike Arrington&amp;rsquo;s &amp;ldquo;Chrome will spawn millions of web devices that run Crome instead of Windows&amp;rdquo;, I immediately came to think of &lt;a href=&quot;http://retort.nevyn.nu/&quot;&gt;retort.nevyn.nu&lt;/a&gt;. (Use the linked video carefully as not to dilute the effect.)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>via rocketjumper</title>
   <link href="https://nevyn.me/2008/09/11/via-rocketjumper/"/>
   <updated>2008-09-11T00:52:52+02:00</updated>
   <id>https://nevyn.me/2008/09/11/via-rocketjumper</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/59zTzQzwEdp2fjgrznOONCxq_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;(via &lt;a href=&quot;http://rocketjumper.tumblr.com/post/49514166/via-vidar&quot;&gt;rocketjumper&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/09/06/i-made-a-demo-video-for-overload-it-got-onto/"/>
   <updated>2008-09-06T18:57:00+02:00</updated>
   <id>https://nevyn.me/2008/09/06/i-made-a-demo-video-for-overload-it-got-onto</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/1674162?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;302&quot; frameborder=&quot;0&quot; title=&quot;Third Cog Software - Overload v0.1 - Intro movie&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;I made a &lt;a href=&quot;http://www.vimeo.com/1674162&quot;&gt; demo video for Overload &lt;/a&gt;. It got onto one of the &lt;a href=&quot;http://mac.feber.se/art/71948/overload_ger_manuellt_multipla/&quot;&gt;Swedish Mac news sites&lt;/a&gt;! :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Overload on the App Store</title>
   <link href="https://nevyn.me/2008/09/05/overload-on-the-app-store/"/>
   <updated>2008-09-05T21:04:00+02:00</updated>
   <id>https://nevyn.me/2008/09/05/overload-on-the-app-store</id>
   <content type="html">&lt;a href=&quot;http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=289191117&amp;mt=8&quot;&gt;Overload on the App Store&lt;/a&gt;&lt;br/&gt;&lt;p&gt;My game is finally out on the App Store! :D Go buy it, now! ;)
&lt;/p&gt;&lt;center&gt;&lt;a href=&quot;http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=289191117&amp;amp;mt=8&quot;&gt;&lt;img src=&quot;http://thirdcog.eu/images/overload/0.1-2.png&quot;/&gt;&lt;/a&gt;&lt;/center&gt;
</content>
 </entry>
 
 <entry>
   <title>Just some thoughts on the evolution of graphical interfaces</title>
   <link href="https://nevyn.me/2008/09/05/just-some-thoughts-on-the-evolution-of-graphical/"/>
   <updated>2008-09-05T07:10:00+02:00</updated>
   <id>https://nevyn.me/2008/09/05/just-some-thoughts-on-the-evolution-of-graphical</id>
   <content type="html">&lt;p&gt;I &lt;a href=&quot;http://www.zathras.de/angelweb/x2005-05-09.htm&quot;&gt;agree&lt;/a&gt; that the windows-and-menus GUI is getting a bit old, and I&amp;rsquo;ve been researching alternative UIs for a while and been keeping notes in my voodoopad. My Dream UI would be a Zoomable UI (cf Raskin, Seadragon), where objects are physical (&lt;a href=&quot;http://bumptop.com/&quot;&gt;BumpTop&lt;/a&gt;), the UI is deep (tracks user&amp;rsquo;s eyes to give the UI a perspective transform relative to the user, cf &lt;a href=&quot;http://www.cs.cmu.edu/~johnny/projects/wii/&quot;&gt;Johnny Chung Lee&lt;/a&gt;), and of course multitouch (cf &lt;a href=&quot;http://www.perceptivepixel.com/&quot;&gt;Jeff Han&lt;/a&gt;). I call this a &amp;ldquo;Deep NUI&amp;rdquo;.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.dogsolitude9.com/imac/snarf/index.html&quot;&gt;One guy actually nailed almost all of these in a concept&lt;/a&gt;, but his site seems to have died :( Anyone have a copy?&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: Found one of the videos on Youtube. It goes by quickly, but check the screen while it&amp;rsquo;s visible:&lt;br/&gt;&lt;/p&gt;&lt;center&gt;
&lt;object width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.youtube.com/v/l-d_CHY92Aw&amp;amp;hl=en&amp;amp;fs=1&quot;&gt;&lt;param name=&quot;allowFullScreen&quot; value=&quot;true&quot;&gt;&lt;embed src=&quot;http://www.youtube.com/v/l-d_CHY92Aw&amp;amp;hl=en&amp;amp;fs=1&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; width=&quot;425&quot; height=&quot;344&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/center&gt;

&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Third Cog Software - Overload</title>
   <link href="https://nevyn.me/2008/08/25/third-cog-software-overload/"/>
   <updated>2008-08-25T04:02:00+02:00</updated>
   <id>https://nevyn.me/2008/08/25/third-cog-software-overload</id>
   <content type="html">&lt;a href=&quot;http://thirdcog.eu/apps/overload&quot;&gt;Third Cog Software - Overload&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Overload has been submitted to the App Store! Now for the requisite week to be approved&amp;hellip; Follow the link for some pictures.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>this day turned out to be a walk down memory lane</title>
   <link href="https://nevyn.me/2008/08/22/this-day-turned-out-to-be-a-walk-down-memory-lane/"/>
   <updated>2008-08-22T02:26:00+02:00</updated>
   <id>https://nevyn.me/2008/08/22/this-day-turned-out-to-be-a-walk-down-memory-lane</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbcx2n2ytvThSBnvG_500.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;This day turned out to be a walk down memory lane. &lt;a href=&quot;http://allyourbase.planettribes.gamespy.com/video1_view.shtml&quot;&gt;Somebody  set up us the bomb!&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>clan g lan party in 2001 me and my buds back at</title>
   <link href="https://nevyn.me/2008/08/22/clan-g-lan-party-in-2001-me-and-my-buds-back-at/"/>
   <updated>2008-08-22T02:20:26+02:00</updated>
   <id>https://nevyn.me/2008/08/22/clan-g-lan-party-in-2001-me-and-my-buds-back-at</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbcx2ewyo4OxalrIQ_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://flickr.com/photos/nevyn/2784484208/&quot;&gt;Clan-G Lan party in 2001&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Me and my buds back at a lan party in 2001. My brother is nearly inrecognizable from how he looks today; I, however, look pretty much the same.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/08/18/just-committed-the-nights-work-this-could-be-an/"/>
   <updated>2008-08-18T14:34:00+02:00</updated>
   <id>https://nevyn.me/2008/08/18/just-committed-the-nights-work-this-could-be-an</id>
   <content type="html">&lt;p&gt;Just committed the night&amp;rsquo;s work. This could be an awesome game. Overload: Coming to an iTunes App Store near you!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>[During] any unexpected delay or shipment error […] the service provider gets to foot the bill to the tune of $5,000 per minute. […] What highly reliable application platform did the software developers choose? Microsoft Access.</title>
   <link href="https://nevyn.me/2008/08/17/during-any-unexpected-delay-or-shipment-error/"/>
   <updated>2008-08-17T09:16:01+02:00</updated>
   <id>https://nevyn.me/2008/08/17/during-any-unexpected-delay-or-shipment-error</id>
   <content type="html">&lt;blockquote&gt;[During] any unexpected delay or shipment error [&amp;hellip;] the service provider gets to foot the bill to the tune of $5,000 per minute. [&amp;hellip;] What highly reliable application platform did the software developers choose? Microsoft Access.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://thedailywtf.com/Articles/A-Barely-Accessible-System.aspx&quot;&gt;A Barely Accessible System - The Daily WTF&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/08/17/death-star-over-san-francisco-current-i-dont/"/>
   <updated>2008-08-17T08:00:28+02:00</updated>
   <id>https://nevyn.me/2008/08/17/death-star-over-san-francisco-current-i-dont</id>
   <content type="html">&lt;object classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; width=&quot;400&quot; height=&quot;400&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://current.com/e/89204971/en_US&quot;&gt;&lt;/param&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot;&gt;&lt;/param&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot;&gt;&lt;/param&gt;&lt;embed type=&quot;application/x-shockwave-flash&quot; src=&quot;http://current.com/e/89204971/en_US&quot; width=&quot;400&quot; height=&quot;400&quot; wmode=&quot;transparent&quot; allowfullscreen=&quot;true&quot; allowscriptaccess=&quot;always&quot; &gt;&lt;/embed&gt;&lt;/object&gt;&lt;img style=&quot;visibility:hidden;width:0px;height:0px;&quot; border=0 width=0 height=0 src=&quot;http://counters.gigya.com/wildfire/IMP/CXNID=2000002.0NXC/bT*xJmx*PTEyMTg5MjAzODg4MDMmcHQ9MTIxODkyMDM5MjI4OSZwPTIwODg*MSZkPSZuPSZnPTE=.gif&quot; /&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://current.com/items/89204971_death_star_over_san_francisco&quot;&gt;Death Star over San Francisco // Current&lt;/a&gt;&lt;br/&gt;
I don&amp;rsquo;t know who make these videos, but I love them. Fantastic atmosphere, and so surrealistic.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Nice design: David's Log</title>
   <link href="https://nevyn.me/2008/08/16/nice-design-davids-log/"/>
   <updated>2008-08-16T12:14:53+02:00</updated>
   <id>https://nevyn.me/2008/08/16/nice-design-davids-log</id>
   <content type="html">&lt;a href=&quot;http://www.davidslog.com/&quot;&gt;Nice design: David's Log&lt;/a&gt;&lt;br/&gt;&lt;p&gt;It even sticks to the right. I love it. For some reason makes me very nostalgic, from when I played in TextEdit with text shadows and took blurry photos with an old Kensington 320x240 webcam.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/08/16/using-photographs-to-enhance-videos-of-a-static/"/>
   <updated>2008-08-16T02:17:02+02:00</updated>
   <id>https://nevyn.me/2008/08/16/using-photographs-to-enhance-videos-of-a-static</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/1513129?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;267&quot; frameborder=&quot;0&quot; title=&quot;Using Photographs to Enhance Videos of a Static Scene&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Using Photographs to Enhance Videos of a Static Scene on Vimeo (via &lt;a href=&quot;http://www.vimeo.com/1513129&quot;&gt;Vimeo&lt;/a&gt;). A must-watch. See also the &lt;a href=&quot;http://grail.cs.washington.edu/projects/videoenhancement/videoEnhancement.htm&quot;&gt;project site&lt;/a&gt; for more. They might release souce this weekend.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/08/08/slow-motion-lightning-via-videofeber/"/>
   <updated>2008-08-08T22:38:25+02:00</updated>
   <id>https://nevyn.me/2008/08/08/slow-motion-lightning-via-videofeber</id>
   <content type="html">&lt;object type=&quot;application/x-shockwave-flash&quot; data=&quot;http://www.todaysbigthing.com/betamax/betamax.swf?item_id=309&amp;fullscreen=1&amp;autostart=true&quot; width=&quot;400&quot; height=&quot;300&quot;&gt;&lt;br/&gt;&lt;p&gt;Slow Motion Lightning (via &lt;a href=&quot;http://video.feber.se/art/65681/blixt_i_slow_motion/&quot;&gt;Videofeber&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>how to really use 4 gigs of ram via my flickr</title>
   <link href="https://nevyn.me/2008/08/07/how-to-really-use-4-gigs-of-ram-via-my-flickr/"/>
   <updated>2008-08-07T07:55:01+02:00</updated>
   <id>https://nevyn.me/2008/08/07/how-to-really-use-4-gigs-of-ram-via-my-flickr</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbcbyreoxxB0hh3yN_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;How to really use 4 gigs of ram (via &lt;a href=&quot;http://flickr.com/photos/nevyn&quot;&gt;my flickr&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Mutable Adventure, Pedro and Erlang Text Processing</title>
   <link href="https://nevyn.me/2008/08/07/mutable-adventure-pedro-and-erlang-text/"/>
   <updated>2008-08-07T07:02:00+02:00</updated>
   <id>https://nevyn.me/2008/08/07/mutable-adventure-pedro-and-erlang-text</id>
   <content type="html">&lt;p&gt;As some of you might know, I&amp;rsquo;m currently writing a game called Mutable Adventure, a 2D sidescrolling platformer MMOG with the editability of Second Life.
&lt;/p&gt;
&lt;p&gt;The thing about Mutable that interests me the most, however, is the networking. I&amp;rsquo;m using a library/protocol called &lt;a href=&quot;http://www.itee.uq.edu.au/~pjr/HomePages/PedroHome.html&quot; title=&quot;Pedro Home&quot;&gt;Pedro&lt;/a&gt;, by &lt;a href=&quot;http://www.itee.uq.edu.au/~pjr/&quot; title=&quot;Peter Robinson&quot;&gt;Peter Robinson&lt;/a&gt;, which I found when &lt;a href=&quot;http://en.wikipedia.org/wiki/Keith_Clark&quot; title=&quot;Keith Clark - Wikipedia, the free encyclopedia&quot;&gt;Keith Clark&lt;/a&gt; presented it at &lt;a href=&quot;http://bth.se/&quot; title=&quot;Blekinge Tekniska Högskola, BTH&quot;&gt;work&lt;/a&gt;. Before I go on, I need to explain why this protocol is so goddamned cool.
&lt;/p&gt;
&lt;h3&gt;Pedro and software agents&lt;/h3&gt;
&lt;p&gt;It&amp;rsquo;s based on Prolog, more specifically, his own implementation of QuProlog. It&amp;rsquo;s sort of a blackboard system, with a central messaging server that everyone connects to. It&amp;rsquo;s string-based, and what you send over the network are prolog fact-style messages, called a notification, for example:
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
  playerWasHit(152, 12388)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This is then broadcasted to everyone to subscribe to this message. A subscription might look like this:
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
  playerWasHit(PlayerID, ObjectID), PlayerID = 152
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Notice that the expression contains Prolog variables, and a guard expression. This means that several clients may subscribe to the same notification, but with a guard expression that says they only want player info about their own player.
&lt;/p&gt;

&lt;p&gt;Each subscription is accompanied by a number, so that you on the client side can redirect the incoming notification to the right place. In Python I&amp;rsquo;ve implemented this so that individual objects may subscribe, and that individual objects may receive notifications. For example, say a ball is spawned in the game world. At the instance it&amp;rsquo;s instansiated, it may subscribe to information &lt;em&gt;pertaining to this specific instance&lt;/em&gt;, by giving the subscription a guard expression with its own ID number. Boom, automatic network message propagation within your game client or server. As an example, in the client, the Tilemap class is appended with a category/mixin with the following code (notice the third argument, the guard):
&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;
  gClient.net.subscribe(self, &quot;tilemap(TilemapName, NameOfTilesetTilemapUses, ScrollX, ScrollY, AutoScrollX, AutoScrollY)&quot;, 
                              &quot;TilemapName = \&quot;%s\&quot;&quot;%self.name)
  gClient.net.subscribe(self, &quot;tileInMap(TilemapName, TileX, TileY, TileIndexInRoomTileset)&quot;,
                              &quot;TilemapName = \&quot;%s\&quot;&quot;%self.name)
  gClient.net.subscribe(self, &quot;tilesInMap(TilemapName, FromIndex, ToIndex, TileIndexArray)&quot;,
                              &quot;TilemapName = \&quot;%s\&quot;&quot;%self.name)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;(&lt;a href=&quot;http://blog.voxar.net/&quot; title=&quot;Voxar&quot;&gt;Voxar&lt;/a&gt; has &lt;a href=&quot;http://dl.getdropbox.com/u/47446/pedronet.py&quot; title=&quot;&quot;&gt;significantly improved the syntax in the Pedro python wrapper&lt;/a&gt; since then)
&lt;/p&gt;

&lt;p&gt;Suddenly, your objects aren&amp;rsquo;t mere objects; because they can communicate on their own with the outside world, and respond on their own, they&amp;rsquo;re now &lt;a href=&quot;http://en.wikipedia.org/wiki/Software_agent&quot; title=&quot;Software agent - Wikipedia, the free encyclopedia&quot;&gt;software agents&lt;/a&gt;. Also, because the messaging medium is now separate from the server instance, your game server may now be freely split as you see fit into several processes, both for load balancing and for division of labor into discrete entities, with higher cohesion and lower coupling.
&lt;/p&gt;
&lt;h3&gt;The downside&lt;/h3&gt;
&lt;p&gt;Peter Robinson&amp;rsquo;s implementation of this concept isn&amp;rsquo;t perfect, however. First off, it&amp;rsquo;s written in plain c, &lt;em&gt;and&lt;/em&gt; it depends on glib2. GObjects. I can&amp;rsquo;t stand GObjects. I can&amp;rsquo;t stand manual memory management. And it&amp;rsquo;s 5000 lines of code for a relatively simple concept.
&lt;/p&gt;
&lt;p&gt;Secondly, you just traded yourself simplicity for the price of a single bottleneck. A buggy, unstable, memory leaking single bottleneck with no means of load balancing or distribution. Written in C with a single maintainer, based on glib2 which is pretty hard to get running under Windows, if you would want to.
&lt;/p&gt;
&lt;p&gt;(I attended a 24 hour game development challenge a while back, where I wrote a networked 3D racer. Because I couldn&amp;rsquo;t get pedro running under Windows, I had to run it on my own server at home, while the judges tested the game from the other side of the country. &amp;gt;1sec lag and no lag compensation or similar whatsoever in the code = I certainly didn&amp;rsquo;t win that competition :( )
&lt;/p&gt;

&lt;h3&gt;Erlang, The Savior&lt;/h3&gt;
&lt;p&gt;After reading &lt;a href=&quot;http://armstrongonsoftware.blogspot.com/&quot; title=&quot;armstrong on software&quot;&gt;Joe Armstrong&lt;/a&gt;&amp;rsquo;s &lt;a href=&quot;http://amazon.com/dp/193435600X&quot; title=&quot;Amazon.com: Programming Erlang: Software for a Concurrent World: Joe Armstrong: Books&quot;&gt;book on Erlang&lt;/a&gt;, I was itching to write something. I tried writing a Twitter clone, thinking that Erlang&amp;rsquo;s highly distributed nature would come to great use there, but every line took a minute to write (because I&amp;rsquo;m so new to Erlang), and Twitter just felt too big and too difficult to write as a first project, so that got abandoned.
&lt;/p&gt;
&lt;p&gt;So, the next thing I&amp;rsquo;m trying is to write a Pedro clone in Erlang. It&amp;rsquo;s a good match, since the hardest part of of Pedro is the pattern matching, and Erlang got that as a part of being a functional programming language. I&amp;rsquo;ve set out to get it to work in 100 lines or less. So far I&amp;rsquo;m up to 60 lines, and I think I have a chance of making it.
&lt;/p&gt;
&lt;p&gt;In Erlang, processes are cheap and abundant. You spawn a lot of processes and then do all communication through erlang messaging. A common pattern is the middle man pattern. While cleaning the dishes I remembered this pattern, from its usage in an IRC client built in the book, and tried to apply it to Erdro (Erlang Pedro :P) conceptually in my head (Sorry, the following is a bit hazy as 1) I haven&amp;rsquo;t implemented it yet 2) it contains a lot of erlang terms). One problem with Erdro is that in its current implementation, even if you have a supervisor process watching the server and respawning if it does, restoring all the stack state, the process would be dead and the sockets meaningless, and all clients would have been lost and restring state would be pointless. However, if each client is abstracted away with a middle man process (meaning all socket communication goes to and from a separate process, and communication with the server is handled through erlang messages), you could store all the state including process pointers to these middle men  in a mnesia database or similar, and if the server dies, respawn the server and its state and everything you&amp;rsquo;d have lost was a single message (the one that made the server crash); all socket connections would be alive and all clients just continue communicating.
&lt;/p&gt;
&lt;p&gt;Put the middle men on a cluster of machines away from the messaging server, each with its own IP and bandwidth, and you&amp;rsquo;ve distributed your network load. The machine containing the messaging server could self-immolate, still only a single message would be lost (given that there is another computer that could act as messaging server).
&lt;/p&gt;
&lt;p&gt;Process load balancing of the server, however, is left as an exercise for the reader.
&lt;/p&gt;
&lt;h3&gt;The nitty gritty details of text processing in Erlang&lt;/h3&gt;
&lt;p&gt;There&amp;rsquo;s a slight mismatch between Erlang and Prolog, given that they&amp;rsquo;re completely different languages (one is functional, the other is logical). In the context of Pedro, however, I could only think of a single difference that mattered, and had to be changed.
&lt;/p&gt;
&lt;p&gt;In Prolog, the term &amp;ldquo;myFunctor(atom, anotherAtom)&amp;rdquo; defines a fact. In Erlang, it&amp;rsquo;s a function call. So, for this to work, I&amp;rsquo;d have to convert that term to something equivalent that could be used in Erlang pattern matching: a tuple, like so, &amp;ldquo;{myFunctor, atom, anotherAtom}&amp;rdquo;. Since Pedro doesn&amp;rsquo;t have tuples, the transformation is reversible and fully equivalent (I hope! It&amp;rsquo;s not like I&amp;rsquo;ve tested my code yet&amp;hellip;). How would &lt;em&gt;you&lt;/em&gt; do this? The first thing on my mind, being a ruby coder, was regular expressions. My first realization was the erlang&amp;rsquo;s regexp support is really, really, really horrible. Not only is it slow, its syntax support is so basic you might as well do without. My second realization was that regular expressions were a really bad match for the task at hand anyway. So my first real piece of Erlang code was a text search-and-replace implementation with pattern matching specific to my task:
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
functor_to_struct(PrologString) -&amp;gt;
  [First|Rest] = PrologString,
  fts(&quot;&quot;, [First], Rest, false, 0).

fts(BeforeFunctor, Functor, [], _, _) -&amp;gt;
    BeforeFunctor++Functor;
fts(BeforeFunctor, Functor, Rest, InStringEscapeMode, Prev) -&amp;gt;
  [Next|Rest2] = Rest,
  case Next of
    34 when (Prev == $\\) and InStringEscapeMode -&amp;gt; % \&quot;
      fts(BeforeFunctor++[34], &quot;&quot;, Rest2, true, Next);
    34 -&amp;gt; % &quot;
        fts(BeforeFunctor++[34], &quot;&quot;, Rest2, not InStringEscapeMode, Next);
    Char when InStringEscapeMode -&amp;gt;
      fts(BeforeFunctor++[Char], &quot;&quot;, Rest2, true, Next);

    $( -&amp;gt;
      fts(BeforeFunctor++&quot;{++Functor++&quot;, &quot; , &quot;&quot;, Rest2, false, Next);
    $) -&amp;gt;
      fts(BeforeFunctor++Functor++&quot;}&quot;, &quot;&quot;, Rest2, false, Next);
    Char when ((Char &amp;gt;= $a) and (Char == $A) and (Char == $0) and (Char =
      fts(BeforeFunctor, Functor++[Char], Rest2, false, Next);
    Char -&amp;gt;
      fts(BeforeFunctor++Functor++[Char], &quot;&quot;, Rest2, false, Next)
  end.
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Half-way through the code, it felt so horrible, I felt like I was writing the worst code in the universe. Now that it&amp;rsquo;s done, though, I find it pretty nice. It&amp;rsquo;s relatively short for what it accomplishes (replaces function calls with tuples, being careful not to interpret parens inside a quoted string) imo. However, after a good night&amp;rsquo;s sleep, I realized that this was a really stupid way of doing it. Why? Because Erlang has a code parser in its standard library.
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
  {ok, Scanned, _} = erl_scan:string(&quot;foo(bar).&quot;),
  {ok, Parsed} = erl_parse:parse_exprs(Scanned)
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;yields &lt;code&gt;[{call,1,{atom,1,foo},[{atom,1,bar}]}]&lt;/code&gt;, a perfectly fine nested Erlang data structure that can be traversed and parsed. So that&amp;rsquo;s what I did!
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
  transform_calls_to_tuples(ParseTree) -&amp;gt;
    tctt(ParseTree, []).

  tctt([], Collected) -&amp;gt;
    lists:reverse(Collected);
  tctt([Token|Rest], Collected) when element(1, Token) == call -&amp;gt;
    {call, 1, FunctorNameAtom, ArgumentList} = Token,
    tctt(Rest, [{tuple, 1, [FunctorNameAtom | tctt(ArgumentList, [])]} | Collected]);
  tctt([Token|Rest], Collected) -&amp;gt;
    tctt(Rest, [Token|Collected]).
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&amp;hellip; which yields the same result, but in a parse tree (which you can turn into a string again with erl_pp, the pretty printer).
&lt;/p&gt;
&lt;p&gt;That&amp;rsquo;s it! I&amp;rsquo;ll get back to you when Erdro is done.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>furbo.org · Beta testing on iPhone 2.0</title>
   <link href="https://nevyn.me/2008/08/07/furboorg-beta-testing-on-iphone-20/"/>
   <updated>2008-08-07T04:49:55+02:00</updated>
   <id>https://nevyn.me/2008/08/07/furboorg-beta-testing-on-iphone-20</id>
   <content type="html">&lt;a href=&quot;http://furbo.org/2008/08/06/beta-testing-on-iphone-20/&quot;&gt;furbo.org · Beta testing on iPhone 2.0&lt;/a&gt;&lt;br/&gt;
</content>
 </entry>
 
 <entry>
   <title>Coding before design. Software tends to be much more usable if it is, at least roughly, designed before the code is written. The desired human interface for a program or feature may affect the data model, the choice of algorithms, the order in which operations are performed, the need for threading, the format for storing data on disk, and even the feature set of the program as a whole. But doing all that wireframing and prototyping seems boring, so a programmer often just starts coding — they’ll worry about the interface later.</title>
   <link href="https://nevyn.me/2008/08/03/coding-before-design-software-tends-to-be-much/"/>
   <updated>2008-08-03T23:06:21+02:00</updated>
   <id>https://nevyn.me/2008/08/03/coding-before-design-software-tends-to-be-much</id>
   <content type="html">&lt;blockquote&gt;Coding before design. Software tends to be much more usable if it is, at least roughly, designed before the code is written. The desired human interface for a program or feature may affect the data model, the choice of algorithms, the order in which operations are performed, the need for threading, the format for storing data on disk, and even the feature set of the program as a whole. But doing all that wireframing and prototyping seems boring, so a programmer often just starts coding — they’ll worry about the interface later.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://mpt.net.nz/archive/2008/08/01/free-software-usability&quot;&gt;Matthew Paul Thomas  » Blog Archive   » Why Free Software has poor usability, and how to improve it&lt;/a&gt;. Pen and paper, fellow coders. They are your friends. Also, this article is excellent, &lt;em&gt;do&lt;/em&gt; read it.
</content>
 </entry>
 
 <entry>
   <title>Sid05 lifestream 0.1</title>
   <link href="https://nevyn.me/2008/08/03/sid05-lifestream-01/"/>
   <updated>2008-08-03T07:03:38+02:00</updated>
   <id>https://nevyn.me/2008/08/03/sid05-lifestream-01</id>
   <content type="html">&lt;a href=&quot;http://columns.tumblr.com/&quot;&gt;Sid05 lifestream 0.1&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Very, very beautiful design! Best life-feed style layout I&amp;rsquo;ve seen. So clever, too! Just RSS importing and some CSS to get all that&amp;hellip; Wow.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>TUAW - Re-thinking the iPhone's home screen</title>
   <link href="https://nevyn.me/2008/08/03/tuaw-re-thinking-the-iphones-home-screen/"/>
   <updated>2008-08-03T06:46:21+02:00</updated>
   <id>https://nevyn.me/2008/08/03/tuaw-re-thinking-the-iphones-home-screen</id>
   <content type="html">&lt;a href=&quot;http://www.tuaw.com/2008/07/21/re-thinking-the-iphones-home-screen/&quot;&gt;TUAW - Re-thinking the iPhone's home screen&lt;/a&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://buschlog.com/post/43644820/tuaw-re-thinking-the-iphones-home-screen&quot;&gt;christianbusch&lt;/a&gt;:&lt;/p&gt;

&lt;blockquote&gt;&lt;p&gt;The iPhone ‘Desktop’ (Springboard) appears to be to small for the new amount of applications. Good point. I’ve got the same problem.&lt;/p&gt;
&lt;p&gt;Apple do something! e.g. folders…&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;The article mentions Spotlight, and that&amp;rsquo;s actually what I had in mind. &lt;a href=&quot;http://iphone-reviews.tumblr.com/&quot;&gt;As you know&lt;/a&gt;, I have quite a few apps. Usually I &lt;a href=&quot;http://nevyn.nu/img/apps-folder.png&quot;&gt;navigate by icons&lt;/a&gt;, but that amount of apps just doesn&amp;rsquo;t fit on the small screen, so when I remember the name, a search field at the top would be great.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Nevyn's iPhone App Reviews</title>
   <link href="https://nevyn.me/2008/08/03/nevyns-iphone-app-reviews/"/>
   <updated>2008-08-03T04:26:56+02:00</updated>
   <id>https://nevyn.me/2008/08/03/nevyns-iphone-app-reviews</id>
   <content type="html">&lt;a href=&quot;http://iphone-reviews.tumblr.com/&quot;&gt;Nevyn's iPhone App Reviews&lt;/a&gt;&lt;br/&gt;&lt;p&gt;I check out quite a few iPhone apps, so I&amp;rsquo;ve started reviewing them. Sure, you can do that at the app store, but I&amp;rsquo;d like to highlight the best and the worst.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/08/03/while-on-the-topic-of-the-lhc-via-patrickcassels/"/>
   <updated>2008-08-03T02:04:00+02:00</updated>
   <id>https://nevyn.me/2008/08/03/while-on-the-topic-of-the-lhc-via-patrickcassels</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/1431471?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;302&quot; frameborder=&quot;0&quot; title=&quot;CERN Rap&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;While on the topic of the LHC. Via &lt;a href=&quot;http://patrickcassels.tumblr.com/post/44272628/the-large-hadron-collider-historys-biggest&quot;&gt;patrickcassels&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>large hadron collider nearly ready the big</title>
   <link href="https://nevyn.me/2008/08/02/large-hadron-collider-nearly-ready-the-big/"/>
   <updated>2008-08-02T20:47:53+02:00</updated>
   <id>https://nevyn.me/2008/08/02/large-hadron-collider-nearly-ready-the-big</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbc5l628vedRxqeVP_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.boston.com/bigpicture/2008/08/the_large_hadron_collider.html&quot;&gt;Large Hadron Collider nearly ready - The Big Picture - Boston.com&lt;/a&gt;. The LHC is as beautiful as it is creepy.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Is “Our Customers Are Stupid and Have No Idea What They Really Want” really Microsoft’s new mantra?</title>
   <link href="https://nevyn.me/2008/07/30/is-our-customers-are-stupid-and-have-no-idea-what/"/>
   <updated>2008-07-30T22:44:00+02:00</updated>
   <id>https://nevyn.me/2008/07/30/is-our-customers-are-stupid-and-have-no-idea-what</id>
   <content type="html">&lt;blockquote&gt;Is “Our Customers Are Stupid and Have No Idea What They Really Want” really Microsoft’s new mantra?&lt;/blockquote&gt;&amp;#8212;&lt;p&gt;&amp;ldquo;I&amp;rsquo;ve got to imagine that the Microsoft customers who took all the damn time to upgrade their machines to Vista, determined it was unworkable, and then had to take all the time to go BACK to XP, probably did so for a reason, possibly even a valid reason, and not because they had been swayed by bad word-of-mouth. I further imagine that these customers are completely livid at having Microsoft not say, “Oh, sorry, we’ll get right on those bugs,” but, instead, “You’re just stupidly following the crowd, and if you’d just free your mind up, you’ll discover you actually love Vista&amp;hellip; hater.”&amp;rdquo;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://wilshipley.com/blog/2008/07/mojave-experiment-bad-science-bad.html&quot;&gt;Call Me Fishmeal: “The Mojave Experiment:” Bad Science, Bad Marketing&lt;/a&gt; (The Mojave Experiment: Microsoft PR movie where they let XP users test Vista (with a Vista expert beside them) for ten minutes and record them saying that Vista doesn&amp;rsquo;t suck)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>StupidFilter :: Main / About</title>
   <link href="https://nevyn.me/2008/07/29/stupidfilter-main-about/"/>
   <updated>2008-07-29T11:20:25+02:00</updated>
   <id>https://nevyn.me/2008/07/29/stupidfilter-main-about</id>
   <content type="html">&lt;a href=&quot;http://stupidfilter.org/main/index.php?n=Main.About&quot;&gt;StupidFilter :: Main / About&lt;/a&gt;&lt;br/&gt;&lt;p&gt;I can write a StupidFilter in one line of code:&lt;/p&gt;

&lt;code&gt;&lt;pre&gt;curl $1 | grep -iv &quot;FIRST&quot;&lt;/pre&gt;&lt;/code&gt;
</content>
 </entry>
 
 <entry>
   <title>noigetit obama in berlin thousands and</title>
   <link href="https://nevyn.me/2008/07/27/noigetit-obama-in-berlin-thousands-and/"/>
   <updated>2008-07-27T01:27:53+02:00</updated>
   <id>https://nevyn.me/2008/07/27/noigetit-obama-in-berlin-thousands-and</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/X6pnpwdzPbt8jrazPbNUGdLX_400.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://noigetit.tumblr.com/post/43417062/obama-in-berlin-thousands-and-thousands-are-out&quot;&gt;noigetit&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Obama in Berlin.&lt;/p&gt;
&lt;p&gt;Thousands and thousands are out in Berlin waving American flags, shouting, cheering and clapping for an American presidential candidate.  This is what it it looks like to be respected in the world again.&lt;/p&gt;
&lt;/blockquote&gt;
</content>
 </entry>
 
 <entry>
   <title>Exploring Unix Failures</title>
   <link href="https://nevyn.me/2008/07/27/exploring-unix-failures/"/>
   <updated>2008-07-27T01:20:52+02:00</updated>
   <id>https://nevyn.me/2008/07/27/exploring-unix-failures</id>
   <content type="html">&lt;section&gt;&lt;dialog&gt;&lt;dt&gt;Voxar:&lt;/dt&gt;&lt;dd&gt;OMFWTF!&lt;/dd&gt;&lt;dt&gt;Voxar:&lt;/dt&gt;&lt;dd&gt;$ ls | grep python&lt;/dd&gt;&lt;dt&gt;Voxar:&lt;/dt&gt;&lt;dd&gt;lrwxr-xr-x   1 root  wheel         9 Jul 26 14:28 python2.4@ -&gt; python2.5&lt;/dd&gt;&lt;dt&gt;Voxar:&lt;/dt&gt;&lt;dd&gt;lrwxr-xr-x   1 root  wheel        10 Apr 23 20:07 python2.5@ -&gt; python2.4/&lt;/dd&gt;&lt;/dialog&gt;&lt;/section&gt;
</content>
 </entry>
 
 <entry>
   <title>via threepanelsoulcom from the guys behind</title>
   <link href="https://nevyn.me/2008/07/27/via-threepanelsoulcom-from-the-guys-behind/"/>
   <updated>2008-07-27T01:18:27+02:00</updated>
   <id>https://nevyn.me/2008/07/27/via-threepanelsoulcom-from-the-guys-behind</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbbvur1nckhDVNhiH_500.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;via &lt;a href=&quot;http://www.threepanelsoul.com&quot;&gt;threepanelsoul.com&lt;/a&gt; (from the guys behind MacHall (Ian McConville is my hero!))&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/07/26/indecision-an-interactive-hyper-videoblog-story/"/>
   <updated>2008-07-26T09:19:00+02:00</updated>
   <id>https://nevyn.me/2008/07/26/indecision-an-interactive-hyper-videoblog-story</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/VtQg_LCq_T8?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=VtQg_LCq_T8&quot;&gt;Indecision - an interactive hyper-videoblog story&lt;/a&gt; (via &lt;a href=&quot;http://twitter.com/borkware/statuses/868328015&quot;&gt;borkware on twitter&lt;/a&gt;). Awesome idea, Make Your Own Adventure, with video and youtube annotations! Great idea, very much looking forward to what he or someone else might do with this idea  :) (as this is just a concept) At the first choice, select &amp;ldquo;make videos&amp;rdquo; to hear his great idea elaborated a bit.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;You &lt;i&gt;must&lt;/i&gt; &lt;a href=&quot;http://www.youtube.com/watch?v=VtQg_LCq_T8&quot;&gt;load the video on Youtube&lt;/a&gt; for it to work!&lt;/b&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/07/22/borkware-got-me-started-on-some-really-weird/"/>
   <updated>2008-07-22T07:52:00+02:00</updated>
   <id>https://nevyn.me/2008/07/22/borkware-got-me-started-on-some-really-weird</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/RHcEFk1i3b4?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://twitter.com/borkware&quot;&gt;Borkware&lt;/a&gt; &lt;a href=&quot;http://twitter.com/borkware/statuses/864425632&quot;&gt;got me&lt;/a&gt; &lt;a href=&quot;http://tinyurl.com/6kxtbg%20&quot;&gt;started&lt;/a&gt; &lt;a href=&quot;http://www.youtube.com/user/meepmeepmeepow&quot;&gt;on&lt;/a&gt; &lt;a href=&quot;http://www.youtube.com/watch?v=kDA9NbPAK8o&quot;&gt;some&lt;/a&gt; &lt;a href=&quot;http://youtube.com/watch?v=Ob6TTU1knUM&quot;&gt;really&lt;/a&gt; &lt;a href=&quot;http://youtube.com/watch?v=rXSp8Oi6vYc&quot;&gt;weird&lt;/a&gt; &lt;a href=&quot;http://youtube.com/watch?v=Jk1DB7Yf-hw&quot;&gt;stuff&lt;/a&gt;, &lt;a href=&quot;http://www.youtube.com/watch?v=3Rvgkr3GA0E&quot;&gt;h&lt;/a&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=lhmjnYKlVnM&quot;&gt;a&lt;/a&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=-mgxCR3Sbkw&quot;&gt;h&lt;/a&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=bL1Ysm705n0&quot;&gt;a&lt;/a&gt;, &lt;a href=&quot;http://www.youtube.com/watch?v=sYIIhis6jfI&quot;&gt;but this guy&lt;/a&gt; &lt;a href=&quot;http://www.youtube.com/watch?v=RHcEFk1i3b4&quot;&gt;wins&lt;/a&gt;!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Exploring Windows Failures</title>
   <link href="https://nevyn.me/2008/07/20/exploring-windows-failures/"/>
   <updated>2008-07-20T07:29:00+02:00</updated>
   <id>https://nevyn.me/2008/07/20/exploring-windows-failures</id>
   <content type="html">&lt;p&gt;So &lt;a href=&quot;http://blog.voxar.net/&quot;&gt;Voxar&lt;/a&gt; just described to me a scenario he just experienced in Windows. He ctrl-C&amp;rsquo;d folder A, pasted it into destination, and while Windows was thrashing on that operation, he ctrl-C&amp;rsquo;d folder B. By now, Windows was done thrashing and initiated the transfer proper, only, it&amp;rsquo;s now copying folder B, not A! We can from this infer that during a clipboard file transfer in Windows XP, the clipboard&amp;rsquo;s content is read *multiple times* during a single operation, during different stages of said operation, even though the stages may be very far apart in time.&lt;/p&gt;

&lt;p&gt;This, my friends, is what we programmers refer to as &amp;ldquo;ugly, ugly hack&amp;rdquo; and not something you put into shipping code with any sense of pride, much less into an integral part of your operating system.&lt;/p&gt;

&lt;p&gt;This event evokes the memory of when my brother accidentally moved his &amp;ldquo;666&amp;rdquo; folder (containing pretty much every semi-important file he has &amp;ndash; personal documents, all his music, pictures, movies, you name it, in one very big soup of nested &amp;ldquo;New Folder (3)&amp;rdquo;&amp;rsquo;s) into an ajacent folder by dragging slightly during a double click. The move is instantaneous. After all, it&amp;rsquo;s just a single rewrite of the file table on the disk. He quickly realizes his mistake, goes into the ajacent folder, ctrl-X'es the mighty 666 folder, and ctrl-V&amp;rsquo;s it into the root of the disk where it belongs. Now, suddenly this isn&amp;rsquo;t an instantaneous transaction. Windows pops up its Moving Files dialog box, progress bar and all, and starts, very slowly, to move the files back, one by one. Half-way through, my brother hears the dreaded &amp;ldquo;BONGG&amp;rdquo; sound followed by an error dialog: &amp;ldquo;Could not move file: Permission denied&amp;rdquo; (or similar). His &amp;ldquo;seriously now.txt&amp;rdquo; (containing all passwords, phone numbers, and any information that could ever be of importance) and most of the mp3 collection have been moved. Everything else? Gone. It&amp;rsquo;s not in the root&amp;rsquo;s &amp;ldquo;666&amp;rdquo; folder, and the 666 folder is completely gone from the ajacent folder from the beginning of the story. All the rest of the files are completely gone, and confirmed so by a search.&lt;/p&gt;

&lt;p&gt;Now &lt;em&gt;this&lt;/em&gt;, my friends, is not what we call an &amp;ldquo;ugly hack&amp;rdquo;. This is what we call &amp;ldquo;a real fuck-up&amp;rdquo;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Prince of Persia: Next Gen - E3 2008</title>
   <link href="https://nevyn.me/2008/07/20/prince-of-persia-next-gen-e3-2008/"/>
   <updated>2008-07-20T04:12:01+02:00</updated>
   <id>https://nevyn.me/2008/07/20/prince-of-persia-next-gen-e3-2008</id>
   <content type="html">&lt;a href=&quot;http://www.gametrailers.com/player/36270.html&quot;&gt;Prince of Persia: Next Gen - E3 2008&lt;/a&gt;&lt;br/&gt;&lt;p&gt;That music really didn&amp;rsquo;t go well with that trailer&amp;hellip; Sounded/looked like some AMV off of youtube :P And it&amp;rsquo;s certainly visible where they got their inspiration&amp;hellip; ICO anyone? (I&amp;rsquo;m usually a big fan of Sigur rós, btw)&lt;/p&gt;

&lt;p&gt;Also, I dig the next-gen-ish cell shading-ish graphics.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>via joar via twitter love the analog and physical</title>
   <link href="https://nevyn.me/2008/07/17/via-joar-via-twitter-love-the-analog-and-physical/"/>
   <updated>2008-07-17T03:39:00+02:00</updated>
   <id>https://nevyn.me/2008/07/17/via-joar-via-twitter-love-the-analog-and-physical</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsbbhpl13zy8BIh8r7_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;via &lt;a href=&quot;http://twitter.com/joar_wingfors/statuses/860064801&quot;&gt;joar&lt;/a&gt; via twitter. Love the analog and physical widgets. &amp;ldquo;473&amp;rdquo; in the lower-left corner of the screen might be very /precise/, but preciseness is probably not needed in this case.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Properly bundling .frameworks in your application package</title>
   <link href="https://nevyn.me/2008/07/15/properly-bundling-frameworks-in-your-application/"/>
   <updated>2008-07-15T06:54:00+02:00</updated>
   <id>https://nevyn.me/2008/07/15/properly-bundling-frameworks-in-your-application</id>
   <content type="html">&lt;p&gt;&lt;b&gt;Update&lt;/b&gt;: &lt;a href=&quot;http://overooped.com/post/87887322/use-rpath-instead-of-loader-path-or-executable-path&quot;&gt;My blog post on @rpath&lt;/a&gt; supersedes/complements this post (it&amp;rsquo;s not finished yet, though).&lt;/p&gt;
&lt;br/&gt;&lt;br/&gt;&lt;p&gt;I&amp;rsquo;m sure you&amp;rsquo;ve run into it. You build your app and it works fine, but when you distribute it, your users get:&lt;/p&gt;
&lt;code&gt;&lt;pre&gt;
Library not loaded: /Users/Richard/Library/Frameworks/libmng.framework/Versions/A/libmng
  Referenced from: /Users/nevyn/Downloads/Sphere-Mac RC3/SphereEngine.app/Contents/MacOS/SphereEngine
  Reason: image not found
&lt;/pre&gt;&lt;/code&gt;

&lt;p&gt;One more time. This subject seems to pop up quite often, but I think I&amp;rsquo;ve finally gotten it nailed. Before I used to fetch the sources of all the libraries I was using, set up an .xcodeproj and set install_name to &amp;ldquo;@executable_path/../Frameworks/&amp;rdquo; (&lt;a href=&quot;http://thirdcog.eu/apps/frameworks&quot;&gt;and that I did here&lt;/a&gt;). That&amp;rsquo;s not really necessary, and not possible for non-open source frameworks. So, no matter what framework or library you have, this is how you bundle it anyway, no matter what the install_name is.&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Add an extra Copy Files target action in your XCode project (and rename it Copy Frameworks)&lt;/li&gt;
&lt;li&gt;Get info on the new terget action, and set its destination to Frameworks.&lt;/li&gt;
&lt;li&gt;Then, drag all custom frameworks to this target action, and they will be automatically bundled with the application when you build.&lt;/li&gt;
&lt;li&gt;You will now need to gather some information. Run `otool -L on YourApp.app/Contents/MacOS/YourApp` and note its output for each of the lines corresponding to a framework you just bundled.&lt;/li&gt;
&lt;li&gt;Next, add a Shell Script target action. This target action will call the install_name_tool to rewrite the linking information in the built binary to reference the bundled frameworks instead, even if the frameworks haven&amp;rsquo;t been built with an install_name of @executable_path/../Frameworks. Copy and modify as appropriate:
&lt;/li&gt;
&lt;/ol&gt;&lt;code&gt;&lt;pre&gt;
function relocateLibraryInCurrentApp() {
  install_name_tool -change $1$2 @executable_path/../Frameworks/$2 $CONFIGURATION_BUILD_DIR/$EXECUTABLE_PATH
}

relocateLibraryInCurrentApp /usr/local/lib/ libfmodex.dylib #note the space
relocateLibraryInCurrentApp /Library/Frameworks/ Foobar.framework/Versions/A/Foobar #note the space
&lt;/pre&gt;&lt;/code&gt;

Note the two different styles for a loose dylib and for a .framework. Just add one relocateLibraryInCurrentApp for each library or framework you&amp;rsquo;re bundling. Good luck!


&lt;p&gt;&lt;br/&gt;&lt;b&gt;Addendum&lt;/b&gt;: I realized that making a post that just describes how to do something, not why, is kind of lame.&lt;/p&gt;

&lt;p&gt;In Mac OS, each binary contains a list of paths to binaries which it was linked to and which need to be loaded for all code to be available. When you launch an app, the runtime will thus load the app&amp;rsquo;s code, and for each library it needs to find will try to load it from the path set in the app&amp;rsquo;s binary. (For frameworks it&amp;rsquo;ll also look in /System/Library/Frameworks and /Library/Frameworks). What install_name_tool does is simply to rewrite that path inside the binary given as the fourth argument, searching exactly for the string argument #2, and change it to argument #3.&lt;/p&gt;

&lt;p&gt;Additional resources:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://qin.laya.com/tech_coding_help/dylib_linking.html&quot;&gt;http://qin.laya.com/tech_coding_help/dylib_linking.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://balanceinmotion.net/blog/2007/12/26/free-love-frustration/&quot;&gt;http://balanceinmotion.net/blog/2007/12/26/free-love-frustration/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>This past November my wife and I had our first kid. She was on a special monitor because she had hypertension throughout the pregnancy. This monitor kept track of a number of vitals including some of the unborn baby’s as well. Sure enough it was Windows 2000 and sure enough mid-way through the delivery it crashed! The nurses had to frantically pull all the sensors off, hook up some secondary equipment, one that required a nurse to reach in to my wife to clip a sensor to my son’s head that required piercing his skin and hope for the best. Luckily, everything went fantastic and all was okay. Windows 2000 finished booting a few minutes after my son was born.</title>
   <link href="https://nevyn.me/2008/07/09/this-past-november-my-wife-and-i-had-our-first/"/>
   <updated>2008-07-09T23:57:14+02:00</updated>
   <id>https://nevyn.me/2008/07/09/this-past-november-my-wife-and-i-had-our-first</id>
   <content type="html">&lt;blockquote&gt;This past November my wife and I had our first kid. She was on a special monitor because she had hypertension throughout the pregnancy. This monitor kept track of a number of vitals including some of the unborn baby&amp;rsquo;s as well. Sure enough it was Windows 2000 and sure enough mid-way through the delivery it crashed! The nurses had to frantically pull all the sensors off, hook up some secondary equipment, one that required a nurse to reach in to my wife to clip a sensor to my son&amp;rsquo;s head that required piercing his skin and hope for the best. Luckily, everything went fantastic and all was okay. Windows 2000 finished booting a few minutes after my son was born.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://www.networkworld.com/community/node/29644?page=2&amp;amp;ts=&quot;&gt;Top Ten Worst Uses for Windows | NetworkWorld.com Community&lt;/a&gt; &amp;ndash; I knew Windows ran in a lot of stupid places, but *medical equipment*? Holy mother of god, how stupid can you be?!
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/06/23/real-time-tracking-this-is-absolutely/"/>
   <updated>2008-06-23T05:56:08+02:00</updated>
   <id>https://nevyn.me/2008/06/23/real-time-tracking-this-is-absolutely</id>
   <content type="html">&lt;iframe src=&quot;http://www.snotr.com/embed/1340&quot; width=&quot;400&quot; height=&quot;330&quot; frameborder=&quot;0&quot;&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.snotr.com/video/1340&quot;&gt;Real time tracking&lt;/a&gt; &amp;ndash; this is absolutely fantastically great! No real-world markers or in-system knowledge about the surroundings beforehand, only extrapolating point-by-point the surroundings and using recent points as the basis for new points. I can&amp;rsquo;t wait to use this!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Man gets Windows Vista to work with printer</title>
   <link href="https://nevyn.me/2008/06/20/man-gets-windows-vista-to-work-with-printer/"/>
   <updated>2008-06-20T20:29:35+02:00</updated>
   <id>https://nevyn.me/2008/06/20/man-gets-windows-vista-to-work-with-printer</id>
   <content type="html">&lt;a href=&quot;http://blog.seattlepi.nwsource.com/microsoft/archives/141343.asp&quot;&gt;Man gets Windows Vista to work with printer&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Actual headline. Just can&amp;rsquo;t resist reblogging this; there&amp;rsquo;s just so much wrongness in it. One thing: apparently Vista *redirects* writes to a sensitive folder to *another location* on the system. This wouldn&amp;rsquo;t have *that* bad, if the alternate location wasn&amp;rsquo;t as sensitive as the first! I don&amp;rsquo;t have the details, but the article says the drivers were still active, which implies that wherever Vista redirected the files, they were still loaded at that location. Actually, it *had* been that bad: how does it make any sense at all to not just write-protect the folder instead? Oh, old installers would stop working then, you say? But apparently those that would&amp;rsquo;ve stopped working then are those that aren&amp;rsquo;t compatible with Vista anyway! Urrgh, I can&amp;rsquo;t stand it.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Stump The Experts 2008 (Audio only)</title>
   <link href="https://nevyn.me/2008/06/14/stump-the-experts-2008-audio-only/"/>
   <updated>2008-06-14T07:45:00+02:00</updated>
   <id>https://nevyn.me/2008/06/14/stump-the-experts-2008-audio-only</id>
   <content type="html">&lt;a href=&quot;http://nevyn.nu/Stump_The_Experts_2008.m4a&quot;&gt;Stump The Experts 2008 (Audio only)&lt;/a&gt;&lt;br/&gt;&lt;p&gt;I recorded the Stump The Experts session at WWDC 2008 with my MBP. I missed the first ten minutes or so, unfortunately.&lt;/p&gt;

&lt;p&gt;Adding a player here as soon as I&amp;rsquo;ve uploaded the audio in mp3&amp;hellip;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>lol via boxbrown</title>
   <link href="https://nevyn.me/2008/05/28/lol-via-boxbrown/"/>
   <updated>2008-05-28T22:18:03+02:00</updated>
   <id>https://nevyn.me/2008/05/28/lol-via-boxbrown</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb9jdgl3eiYFyFDM4_500.gif&quot;/&gt;&lt;br/&gt;&lt;p&gt;lol.&lt;/p&gt;

&lt;p&gt;via &lt;a href=&quot;http://www.webcomicsnation.com/boxbrown/bellen/series.php?view=single&amp;amp;ID=42318&quot;&gt;boxbrown&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/05/23/my-god-whoever-created-this-has-won-the/"/>
   <updated>2008-05-23T23:21:33+02:00</updated>
   <id>https://nevyn.me/2008/05/23/my-god-whoever-created-this-has-won-the</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/lsd96jy3GWY?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&amp;ldquo;My God. Whoever created this has won the internet. Forever.&amp;rdquo; And I can&amp;rsquo;t but agree.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Weekend Hacking</title>
   <link href="https://nevyn.me/2008/05/19/weekend-hacking/"/>
   <updated>2008-05-19T05:12:00+02:00</updated>
   <id>https://nevyn.me/2008/05/19/weekend-hacking</id>
   <content type="html">&lt;p&gt;I had a lot to do this weekend and decided to do none of it, and instead &lt;a href=&quot;http://thirdcog.eu/apps/cfxr&quot;&gt;ported&lt;/a&gt; &lt;a href=&quot;http://www.drpetter.se/project_sfxr.html&quot;&gt;sfxr&lt;/a&gt; to Cocoa, with a native UI and proper save/load :) My version&amp;rsquo;s called &lt;a href=&quot;http://thirdcog.eu/apps/cfxr&quot;&gt;cfxr&lt;/a&gt; (as in &amp;ldquo;Cocoa sfxr&amp;rdquo;) and is available at &lt;a href=&quot;http://thirdcog.eu/apps/cfxr&quot;&gt;http://thirdcog.eu/apps/cfxr&lt;/a&gt; . I&amp;rsquo;m not saying it&amp;rsquo;s better than sfxr, only different and more native. If you&amp;rsquo;ve got a 10.5 Mac, &lt;a href=&quot;http://thirdcog.eu/apps/cfxr&quot;&gt;check it out&lt;/a&gt; and let me know what you think :) It&amp;rsquo;s basically just an experiment to learn &lt;a href=&quot;http://cocoadevcentral.com/articles/000085.php&quot;&gt;Core Data&lt;/a&gt; and &lt;a href=&quot;http://cocoadevcentral.com/articles/000080.php&quot;&gt;Bindings&lt;/a&gt; (Thanks, &lt;a href=&quot;http://theocacao.com/&quot;&gt;Scott&lt;/a&gt;!), and a reason to make save/load work better on the Mac.&lt;/p&gt;

&lt;p&gt;The sfxr code (more specifically, the sdl port), when I first saw it, seemed like the worst mess I&amp;rsquo;ve ever seen. Sure, it&amp;rsquo;s a quick hack, but not even keeping state in a struct? OMG. But after working with this code for a weekend, it&amp;rsquo;s surprisingly good for what it is! &amp;ldquo;Porting&amp;rdquo; it to Cocoa was as easy as finding out which globals were properties of the sound (that is, attributes), and adding &amp;ldquo;sound.&amp;rdquo; before all accesses to those, and #defining objc syntax as C syntax for the four major playback methods. I guess I could&amp;rsquo;ve #defined the sound attribute accesses as well, making an upgrade as easy as a copy-paste, but I felt I had already done enough code generation for one day :P (Check out the legacyAccessors.m in the source to see what I mean :P Not very good looking code but it got the job done.)&lt;/p&gt;

&lt;p&gt;It&amp;rsquo;s a rough 0.1 and might need some work. I was also thinking about making the playback part an AudioUnit or VST (just for fun) to make the playback more flexible. It works pretty nice as it is though, so do &lt;a href=&quot;http://thirdcog.eu/apps/cfxr&quot;&gt;check it out&lt;/a&gt; :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Lazy Man's Logging</title>
   <link href="https://nevyn.me/2008/05/17/lazy-mans-logging/"/>
   <updated>2008-05-17T08:40:00+02:00</updated>
   <id>https://nevyn.me/2008/05/17/lazy-mans-logging</id>
   <content type="html">file_put_contents(&amp;hellip;, FILE_APPEND) to log is a bad idea and you know it, but it&amp;rsquo;s sometimes good enough, or you just don&amp;rsquo;t get paid enough to make something serious. I just let you make it a tiny bit more serious, a whole lot more dependable, and still just change a single line of code.

&lt;pre name=&quot;code&quot; class=&quot;php&quot;&gt;
  /// Creates a table called $table as (id, when, message) if none such exists, and inserts a row with $message in it.
  /// If no connection details are given, it uses the current database connection. Same goes for $database and $when.
  ///
  /// @returns TRUE on success or FALSE on failure.
  ///
  /// @example mysql_put_contents(&quot;orders&quot;, &quot;I CAN HAZ CHEEZBURGER?&quot;, &quot;mysite&quot;, NULL, &quot;127.0.0.1:3306&quot;, &quot;mysite_user&quot;, &quot;secret&quot;) or die(mysql_error());
  /// @example mysql_put_contents(&quot;guestbook&quot;, &quot;Longcat says: I'm loooooooooooong&quot;) or die(&quot;Errorz!&quot;);
  function mysql_put_contents($table, $message, $database = NULL, $when = NULL, $host = NULL, $user = NULL, $pass = NULL) {
    if($host)
	    mysql_connect($host, $user, $pass);
	  if($database)
	    mysql_select_db($database);
	
	  $qry = &quot;CREATE TABLE IF NOT EXISTS `$table` (
             `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
             `when` TIMESTAMP DEFAULT NOW(),
             `message` TEXT NOT NULL
           );&quot;;
    $result = mysql_query($qry);
    if($result === FALSE)
      return FALSE;
      
    $qry = &quot;INSERT INTO `$table` VALUES(NULL, &quot;.($when ? $when : 'NULL').&quot;, '&quot;.mysql_real_escape_string($message).&quot;');&quot;;

    $result = mysql_query($qry);
    if($result === FALSE)
      return FALSE;
      
    return TRUE;
  }
	
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>The simple fact that most or all of [Apple’s] competition haven’t really comprehended what Apple’s advantage is yet - it’s ascribed to design as in “pretty”, strong brand as in “luxury” and customer loyalty as in “Apple users are fools”. This cluelessness has given Apple a head start unlike a common technology arms race, and frankly there’s no sign that their competitors are about to “get it”.</title>
   <link href="https://nevyn.me/2008/05/14/the-simple-fact-that-most-or-all-of-apples/"/>
   <updated>2008-05-14T04:41:34+02:00</updated>
   <id>https://nevyn.me/2008/05/14/the-simple-fact-that-most-or-all-of-apples</id>
   <content type="html">&lt;blockquote&gt;The simple fact that most or all of [Apple&amp;rsquo;s] competition haven&amp;rsquo;t really comprehended what Apple&amp;rsquo;s advantage is yet - it&amp;rsquo;s ascribed to design as in &amp;ldquo;pretty&amp;rdquo;, strong brand as in &amp;ldquo;luxury&amp;rdquo; and customer loyalty as in &amp;ldquo;Apple users are fools&amp;rdquo;. This cluelessness has given Apple a head start unlike a common technology arms race, and frankly there&amp;rsquo;s no sign that their competitors are about to &amp;ldquo;get it&amp;rdquo;.&lt;/blockquote&gt;&amp;#8212;Arru in the comments to Moonwatcher&amp;rsquo;s &lt;a href=&quot;http://globelogger.com/2008/05/why-doesnt-appl.html&quot;&gt;Why Doesn&amp;rsquo;t Apple Face The Innovator&amp;rsquo;s Dilemma?&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>adium 125 when sending a file to a</title>
   <link href="https://nevyn.me/2008/05/12/adium-125-when-sending-a-file-to-a/"/>
   <updated>2008-05-12T04:17:53+02:00</updated>
   <id>https://nevyn.me/2008/05/12/adium-125-when-sending-a-file-to-a</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb8vft2bgKIlw9lmL_500.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;(Adium 1.2.5, when sending a file to a meta-contact (someone in my contact list who I have multiple accounts on))&lt;/p&gt;

&lt;p&gt;Eh. Very nice, Adium. Classy. I like the unique identifiers. Thought Adium was above bad UIs :P&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Gin, Television, and Social Surplus</title>
   <link href="https://nevyn.me/2008/04/29/gin-television-and-social-surplus/"/>
   <updated>2008-04-29T01:27:00+02:00</updated>
   <id>https://nevyn.me/2008/04/29/gin-television-and-social-surplus</id>
   <content type="html">&lt;a href=&quot;http://www.herecomeseverybody.org/2008/04/looking-for-the-mouse.html&quot;&gt;Gin, Television, and Social Surplus&lt;/a&gt;&lt;br/&gt;&lt;p&gt;What I got out of this article is (and yes, I&amp;rsquo;m going to ruin the punch line now), if the US tv-watching population got up and wrote a few words on wikipedia every time ads came on, and wikipedia was started, completely from scratch, on Friday night, the entire history of wikipedia &amp;ndash; every page, every edit, every talk page, every line of code, in every language that Wikipedia exists in &amp;ndash; would have been completed by Sunday night. One weekend. Just the time spent watching ads during one weekend. That completely boggles my mind.&lt;/p&gt;

&lt;p&gt;(&lt;a href=&quot;http://blip.tv/file/855937&quot;&gt;video version&lt;/a&gt;, via &lt;a href=&quot;http://daringfireball.net/linked/2008/april#mon-28-shirky&quot;&gt;gruber&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The men who program in C are Real Men. The women who program in C are Real Men too. You can spot a C programmer from their testosterone fueled swagger, and the unbelievable amount of contempt they inject into the phrase Java “programmer”.</title>
   <link href="https://nevyn.me/2008/04/28/the-men-who-program-in-c-are-real-men-the-women/"/>
   <updated>2008-04-28T19:54:00+02:00</updated>
   <id>https://nevyn.me/2008/04/28/the-men-who-program-in-c-are-real-men-the-women</id>
   <content type="html">&lt;blockquote&gt;The men who program in C are Real Men. The women who program in C are Real Men too. You can spot a C programmer from their testosterone fueled swagger, and the unbelievable amount of contempt they inject into the phrase Java &amp;ldquo;programmer&amp;rdquo;.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://xrl.us/bjwcq&quot;&gt;Urban Dictionary: C++&lt;/a&gt; via &lt;a href=&quot;http://twitter.com/violasong/statuses/798518022&quot;&gt;@violasong&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>PHP: Timeout on file_get_contents</title>
   <link href="https://nevyn.me/2008/04/15/php-timeout-on-filegetcontents/"/>
   <updated>2008-04-15T20:30:00+02:00</updated>
   <id>https://nevyn.me/2008/04/15/php-timeout-on-filegetcontents</id>
   <content type="html">&lt;p&gt;Since there doesn&amp;rsquo;t seem to be a single piece of documentation or example on the use of the context option for file_get_contents, and everyone&amp;rsquo;s actually setting the PHP app&amp;rsquo;s ini value for timeout (euugh) instead of doing it right, I thought I&amp;rsquo;d feed this to google:&lt;/p&gt;
&lt;div style=&quot;text-align:left;color:#000000; background-color:#ffffff; border:solid black 1px; padding:0.5em 1em 0.5em 1em; overflow:auto;font-size:small; font-family:monospace; &quot;&gt;&lt;span style=&quot;color:#825900;&quot;&gt;$ctx&lt;/span&gt; = &lt;span style=&quot;color:#661aa9;&quot;&gt;stream_context_create&lt;/span&gt;(&lt;span style=&quot;color:#881350;&quot;&gt;array&lt;/span&gt;(&lt;br/&gt;
    &lt;span style=&quot;color:#eb7300;&quot;&gt;&amp;lsquo;http&amp;rsquo;&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color:#881350;&quot;&gt;array&lt;/span&gt;(&lt;br/&gt;
        &lt;span style=&quot;color:#eb7300;&quot;&gt;'timeout&amp;rsquo;&lt;/span&gt; =&amp;gt; &lt;span style=&quot;color:#0000ff;&quot;&gt;1&lt;/span&gt;&lt;br/&gt;
        )&lt;br/&gt;
    )&lt;br/&gt;
);&lt;br/&gt;&lt;span style=&quot;color:#003369;&quot;&gt;file_get_contents&lt;/span&gt;(&lt;span style=&quot;color:#eb7300;&quot;&gt;&amp;ldquo;http://google.com/&amp;rdquo;&lt;/span&gt;, &lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;, &lt;span style=&quot;color:#825900;&quot;&gt;$ctx&lt;/span&gt;);&lt;/div&gt;

&lt;p&gt;The unit on the timeout argument is seconds as a float; that is, it is possible to use fractions (e g set timeout to 0.1).&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>my girlfriend will love this viajonic</title>
   <link href="https://nevyn.me/2008/04/11/my-girlfriend-will-love-this-viajonic/"/>
   <updated>2008-04-11T23:34:35+02:00</updated>
   <id>https://nevyn.me/2008/04/11/my-girlfriend-will-love-this-viajonic</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/2bzuZxyp97ae5lf3PbUkMcIE_400.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;My girlfriend will love this. (Via&lt;a href=&quot;http://tumblr.100yen.co.uk/post/31302436&quot;&gt;jonic&lt;/a&gt;).&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Dr. Albert Bartlett: Arithmetic, Population and Energy</title>
   <link href="https://nevyn.me/2008/04/11/dr-albert-bartlett-arithmetic-population-and/"/>
   <updated>2008-04-11T08:53:00+02:00</updated>
   <id>https://nevyn.me/2008/04/11/dr-albert-bartlett-arithmetic-population-and</id>
   <content type="html">&lt;a href=&quot;http://globalpublicmedia.com/transcripts/645&quot;&gt;Dr. Albert Bartlett: Arithmetic, Population and Energy&lt;/a&gt;&lt;br/&gt;&lt;p&gt;These were not &lt;i&gt;really&lt;/i&gt; things that I didn&amp;rsquo;t already know. Stated so boldly, however, the facts really shock me. I get the sudden urge to build a bunker powered by solar cells, and prepare for the inevitable war for our dwindling resources. (&lt;a href=&quot;http://video.google.com/videoplay?docid=-5051121482067161853&amp;amp;q=%22Arithmetic%2C+Population+and+Energy%22&amp;amp;total=11&amp;amp;start=0&amp;amp;num=10&amp;amp;so=0&amp;amp;type=search&amp;amp;plindex=0&quot;&gt;Video&lt;/a&gt;, &lt;a href=&quot;http://media.globalpublicmedia.com/RM/2005/08/Bartlett.mp3&quot;&gt;audio&lt;/a&gt;, &lt;a href=&quot;http://globalpublicmedia.com/transcripts/645&quot;&gt;transcript&lt;/a&gt;)&lt;/p&gt;

&lt;p style=&quot;font-size: 1.5em;&quot;&gt;&lt;i&gt;“So no matter how you cut it, in your life expectancy, you are going to see the peak of world oil production.”&lt;/i&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Trouble in Rails Land - order_id is null </title>
   <link href="https://nevyn.me/2008/04/10/trouble-in-rails-land-orderid-is-null/"/>
   <updated>2008-04-10T05:31:00+02:00</updated>
   <id>https://nevyn.me/2008/04/10/trouble-in-rails-land-orderid-is-null</id>
   <content type="html">&lt;a href=&quot;http://rafb.net/p/j1omDW48.html&quot;&gt;Trouble in Rails Land - order_id is null &lt;/a&gt;&lt;br/&gt;&lt;p&gt;Can someone please explain to me why this is fails? I&amp;rsquo;d be very, very grateful. I must be missing something very essential, and I thought I had begun to grok rails by now&amp;hellip; It worked great for a while, and then suddenly stopped working.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/04/06/location-bar-autocomplete-in-safari-rocks/"/>
   <updated>2008-04-06T21:35:33+02:00</updated>
   <id>https://nevyn.me/2008/04/06/location-bar-autocomplete-in-safari-rocks</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/865596?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;311&quot; frameborder=&quot;0&quot; title=&quot;da[right-arrow]2008[backspace][enter]&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Location bar autocomplete in Safari rocks.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Re: Firefox 3 vs. Safari 3</title>
   <link href="https://nevyn.me/2008/04/06/re-firefox-3-vs-safari-3/"/>
   <updated>2008-04-06T20:32:00+02:00</updated>
   <id>https://nevyn.me/2008/04/06/re-firefox-3-vs-safari-3</id>
   <content type="html">&lt;p&gt;I agree with &lt;a href=&quot;http://daringfireball.net/2008/04/firefox_3_safari_3&quot;&gt;everything that Gruber writes about in his latest article&lt;/a&gt;. &lt;a href=&quot;http://voxar.net/&quot;&gt;A friend of mine&lt;/a&gt; went majorly goddamned-mac-zealot on me and his article (had to explain not once but *twice* that Gruber wasn&amp;rsquo;t saying &amp;ldquo;FF should be exactly as Safari&amp;rdquo; but &amp;ldquo;Safari beats the Mac port of FF on a number of points&amp;rdquo; :P) All is well and good though, as he found a fix for the most annoying UI element of FF3 for me: single-click-selects-entire-URL. I almost screamed from frustration from just trying to edit the URL a few days ago. Here&amp;rsquo;s how to fix it, though:&lt;/p&gt;
&lt;ol&gt;&lt;li&gt;Go to about:config (type it in the location bar and type enter)&lt;/li&gt;
&lt;li&gt;Filter on &amp;ldquo;clickSelects&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Double-click on the row that says &amp;ldquo;browser.urlbar.clickSelectsAll&amp;rdquo; to set it to false.&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;Now when you single-click in a Firefox location bar, it&amp;rsquo;ll place the caret in it; double click will select word; and triple-click will select the whole line, just like in a Mac app.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Addendum&lt;/b&gt;: Okay, so Voxar tried to convince me that Safari&amp;rsquo;s location bar was idiotic and illogical (of course only from reading Gruber&amp;rsquo;s article and not trying it out, even though he has a Mac on his desk :P), and challenged me: if Safari always highlights the first autocomplete entry when you type an url, wouldn&amp;rsquo;t it be VERY cumbersome to enter e g &amp;ldquo;http://daringfireball.net/2008/&amp;rdquo; when the only URL in your history is &amp;ldquo;http://daringfireball.net/2008/04/firefox_3_safari_3&amp;rdquo;? The answer is of course, no :) In Safari, you type &amp;ldquo;da[right-arrow]2008[backspace][enter]&amp;rdquo; and you&amp;rsquo;re done with it. The same scenario in Firefox would require you to type the entire URL in by hand, since the autocomplete would be completely useless (even the &lt;a href=&quot;http://ed.agadak.net/2007/11/smartbar-to-awesomebar&quot;&gt;AwesomeBar&lt;/a&gt; would be stumped!). Now I remember why I love Safari :) (&lt;a href=&quot;http://overooped.com/post/30935987&quot;&gt;Watch It In Full Motion.&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Micro-benchmarks are pretty irrelevant, and you would think Sun’s big honchos would know that. However, when you realize that J2EE is a huge pile of steaming manure weighing down the people unfortunate enough to be using it, I guess it makes sense to shout “but our arithmetic is really fast!”.</title>
   <link href="https://nevyn.me/2008/04/04/micro-benchmarks-are-pretty-irrelevant-and-you/"/>
   <updated>2008-04-04T03:27:13+02:00</updated>
   <id>https://nevyn.me/2008/04/04/micro-benchmarks-are-pretty-irrelevant-and-you</id>
   <content type="html">&lt;blockquote&gt;Micro-benchmarks are pretty irrelevant, and you would think Sun&amp;rsquo;s big honchos would know that. However, when you realize that J2EE is a huge pile of steaming manure weighing down the people unfortunate enough to be using it, I guess it makes sense to shout &amp;ldquo;but our arithmetic is really fast!&amp;rdquo;.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://www.cincomsmalltalk.com/blog/blogView?showComments=true&amp;amp;printTitle=Earth_to_Sun&amp;amp;entry=3384074930&quot;&gt;Earth to Sun&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>Human Computation</title>
   <link href="https://nevyn.me/2008/03/31/human-computation/"/>
   <updated>2008-03-31T05:36:00+02:00</updated>
   <id>https://nevyn.me/2008/03/31/human-computation</id>
   <content type="html">&lt;a href=&quot;http://video.google.com/videoplay?docid=-8246463980976635143&quot;&gt;Human Computation&lt;/a&gt;&lt;br/&gt;&lt;p&gt;This data set could be really, really, really useful.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>build_hd_index is evil.</title>
   <link href="https://nevyn.me/2008/03/29/buildhdindex-is-evil/"/>
   <updated>2008-03-29T19:26:54+01:00</updated>
   <id>https://nevyn.me/2008/03/29/buildhdindex-is-evil</id>
   <content type="html">&lt;a href=&quot;http://devnevyn.livejournal.com/3558.html&quot;&gt;build_hd_index is evil.&lt;/a&gt;&lt;br/&gt;&lt;p&gt;An old blog entry of mine about my arch-nemesis build_hd_index. I once disabled it by chmod 000'ing the file. I have now learned that this is a very bad idea. The 10.5.2 Server updater has a new version of this file. When Installer tries to install it, it fails. However, it does not rollback, which means that your system has just been screwed.&lt;/p&gt;

&lt;p&gt;Target Disk Mode and &lt;a href=&quot;http://www.charlessoft.com/&quot;&gt;Pacifist&lt;/a&gt; are my very best friends.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The truth, it hurts, it hurts! (Default parameters in Python seem to be evaluated once)</title>
   <link href="https://nevyn.me/2008/03/24/the-truth-it-hurts-it-hurts-default-parameters/"/>
   <updated>2008-03-24T06:39:00+01:00</updated>
   <id>https://nevyn.me/2008/03/24/the-truth-it-hurts-it-hurts-default-parameters</id>
   <content type="html">&lt;div style=&quot;text-align:left;color:#000000; background-color:#ffffff; border:solid black 1px; padding:0.5em 1em 0.5em 1em; overflow:auto;font-size:small; font-family:monospace; &quot;&gt;&lt;span style=&quot;color:#881350;&quot;&gt;class&lt;/span&gt; Bar(&lt;span style=&quot;color:#440088;&quot;&gt;object&lt;/span&gt;):&lt;br/&gt;
  &lt;span style=&quot;color:#881350;&quot;&gt;pass&lt;/span&gt;&lt;br/&gt;
 &lt;br/&gt;&lt;span style=&quot;color:#881350;&quot;&gt;class&lt;/span&gt; Foo(&lt;span style=&quot;color:#440088;&quot;&gt;object&lt;/span&gt;):&lt;br/&gt;
  &lt;span style=&quot;color:#881350;&quot;&gt;def&lt;/span&gt; &lt;span style=&quot;color:#ff0000;&quot;&gt;__init__&lt;/span&gt;(&lt;span style=&quot;color:#881350;&quot;&gt;self&lt;/span&gt;, a = Bar()):&lt;br/&gt;
    &lt;span style=&quot;color:#440088;&quot;&gt;super&lt;/span&gt;(Foo, &lt;span style=&quot;color:#881350;&quot;&gt;self&lt;/span&gt;).&lt;span style=&quot;color:#ff0000;&quot;&gt;__init__&lt;/span&gt;()&lt;br/&gt;
    &lt;span style=&quot;color:#881350;&quot;&gt;self&lt;/span&gt;.a = a&lt;br/&gt;
 &lt;br/&gt;
foo1 = Foo()&lt;br/&gt;
foo2 = Foo()&lt;br/&gt;
 &lt;br/&gt;&lt;span style=&quot;color:#881350;&quot;&gt;print&lt;/span&gt; &lt;span style=&quot;color:#440088;&quot;&gt;repr&lt;/span&gt;(foo1) + &lt;span style=&quot;color:#440088;&quot;&gt;repr&lt;/span&gt;(foo2)&lt;br/&gt;&lt;span style=&quot;color:#881350;&quot;&gt;print&lt;/span&gt; &lt;span style=&quot;color:#440088;&quot;&gt;repr&lt;/span&gt;(foo1.a) + &lt;span style=&quot;color:#440088;&quot;&gt;repr&lt;/span&gt;(foo2.a)&lt;br/&gt;&lt;span style=&quot;color:#236e25;&quot;&gt;# foo1.a and foo2.a is the same instance&lt;/span&gt;&lt;/div&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/03/24/lemonade-trick-via-engadget/"/>
   <updated>2008-03-24T01:42:13+01:00</updated>
   <id>https://nevyn.me/2008/03/24/lemonade-trick-via-engadget</id>
   <content type="html">&lt;embed style=&quot;width:400px; height:326px;&quot; id=&quot;VideoPlayback&quot; type=&quot;application/x-shockwave-flash&quot; src=&quot;http://video.google.com/googleplayer.swf?docId=-6481081770096470753&amp;hl=en&quot; flashvars=&quot;&quot;&gt; &lt;/embed&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://video.google.com/videoplay?docid=-6481081770096470753&amp;amp;hl=en&quot;&gt;Lemonade trick&lt;/a&gt; (&lt;a href=&quot;http://www.engadget.com/2008/03/23/robot-drummer-goes-solo-plays-solos/&quot;&gt;via engadget&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ball Throwing Machine that a Dog can load - Hacked Gadgets</title>
   <link href="https://nevyn.me/2008/03/23/ball-throwing-machine-that-a-dog-can-load-hacked/"/>
   <updated>2008-03-23T07:52:25+01:00</updated>
   <id>https://nevyn.me/2008/03/23/ball-throwing-machine-that-a-dog-can-load-hacked</id>
   <content type="html">&lt;a href=&quot;http://hackedgadgets.com/2008/03/22/ball-throwing-machine-that-a-dog-can-load/&quot;&gt;Ball Throwing Machine that a Dog can load - Hacked Gadgets&lt;/a&gt;&lt;br/&gt;&lt;p&gt;via @voxar over IM. DIY FTW! :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>via arstechnicacom windows vista the modern</title>
   <link href="https://nevyn.me/2008/03/23/via-arstechnicacom-windows-vista-the-modern/"/>
   <updated>2008-03-23T01:33:00+01:00</updated>
   <id>https://nevyn.me/2008/03/23/via-arstechnicacom-windows-vista-the-modern</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb6vy3ujzhbN27Zoh_500.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;via &lt;a href=&quot;http://arstechnica.com/articles/paedia/past-present-future-file-systems.ars/6&quot;&gt;arstechnica.com&lt;/a&gt;. &lt;a href=&quot;http://bink.nu/photos/news_article_images/category1022/picture13552.aspx&quot;&gt;Windows Vista: The Modern Operating System&lt;/a&gt;!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Apple is legendary for being bad Windows citizens.</title>
   <link href="https://nevyn.me/2008/03/21/apple-is-legendary-for-being-bad-windows-citizens/"/>
   <updated>2008-03-21T19:40:15+01:00</updated>
   <id>https://nevyn.me/2008/03/21/apple-is-legendary-for-being-bad-windows-citizens</id>
   <content type="html">&lt;blockquote&gt;Apple is legendary for being bad Windows citizens.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://waffle.wootest.net/2008/03/20/where-by-interesting-i-mean-annoying/&quot;&gt;waffle →  Where By “Interesting”, I Mean “Annoying”&lt;/a&gt;. Indeed they are! Get your shit together, Apple. Don&amp;rsquo;t bundle QuickTime with iTunes. Don&amp;rsquo;t install a tray icon. Don&amp;rsquo;t be evil!
</content>
 </entry>
 
 <entry>
   <title>furbo.org · Brain surgeons</title>
   <link href="https://nevyn.me/2008/03/18/furboorg-brain-surgeons/"/>
   <updated>2008-03-18T05:28:19+01:00</updated>
   <id>https://nevyn.me/2008/03/18/furboorg-brain-surgeons</id>
   <content type="html">&lt;a href=&quot;http://furbo.org/2008/03/16/brain-surgeons/&quot;&gt;furbo.org · Brain surgeons&lt;/a&gt;&lt;br/&gt;&lt;p&gt;So far best take I&amp;rsquo;ve read on why not allowing background processes on the iPhone is a good thing; backed by actual experience and everything. (He wrote a background processing app for a jailbroken iPhone and the battery died in hours). The idea that your app could register for getting launched and checking something in the background periodically when the phone happens to be online for some other reason is great, I hope Apple implements it.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://daringfireball.net/2008/03/iphone_flip_side&quot;&gt;Gruber mentions the AIM app demoed during the SDK event&lt;/a&gt; and how it would benefit from background processing. However, much of what you were looking to gain by running AIM in the background could be achieved by keeping the connection online on the server side instead, and pushing messages sent while AIM was off on the iPhone when it is started again (or when doing the kind of background processing mentioned on furby). (Update: that&amp;rsquo;s actually what they do)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/03/07/28196850/"/>
   <updated>2008-03-07T20:03:48+01:00</updated>
   <id>https://nevyn.me/2008/03/07/28196850</id>
   <content type="html">&lt;center&gt;&lt;img src=&quot;http://data.tumblr.com/MLhBbCcsb6a4jcuwKFFa5W6K_500.png&quot;/&gt;&lt;/center&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/03/07/modular-snake-robots-entirely-awesome-although/"/>
   <updated>2008-03-07T06:46:03+01:00</updated>
   <id>https://nevyn.me/2008/03/07/modular-snake-robots-entirely-awesome-although</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/T62E-_pQt3c?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.modsnake.com&quot;&gt;Modular Snake Robots&lt;/a&gt;. Entirely awesome, although perhaps not as awesome s the iphone sdk ;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>iPhone SDK</title>
   <link href="https://nevyn.me/2008/03/07/iphone-sdk/"/>
   <updated>2008-03-07T06:37:18+01:00</updated>
   <id>https://nevyn.me/2008/03/07/iphone-sdk</id>
   <content type="html">&lt;a href=&quot;http://developer.apple.com/iphone/devcenter/&quot;&gt;iPhone SDK&lt;/a&gt;&lt;br/&gt;&lt;p&gt;This is the first time that the gaming industry will be writing games purely in Cocoa and Objective-C. Given that &lt;a href=&quot;http://www.engadget.com/2008/03/06/live-from-apples-iphone-press-conference&quot;&gt;a more-or-less fully functional 2D Spore was written in &lt;em&gt;two weeks&lt;/em&gt;&lt;/a&gt; by EA, maybe this will be the eye opener for the big boy game devs out there that there are serious alternatives to C++ out there. And if the big studios start being sane, the rest of the industry will follow. Oh happy times! :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>broken ibook anyone know what this could be</title>
   <link href="https://nevyn.me/2008/03/07/broken-ibook-anyone-know-what-this-could-be/"/>
   <updated>2008-03-07T02:45:00+01:00</updated>
   <id>https://nevyn.me/2008/03/07/broken-ibook-anyone-know-what-this-could-be</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb693gua6mM8BQNxk_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Broken iBook. Anyone know what this could be?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; I&amp;rsquo;m pretty sure it&amp;rsquo;s a broken graphics card. In the kernel panic crash report, the graphics driver is always in the call stack.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Update 2:&lt;/em&gt; &lt;a href=&quot;http://overooped.com/tagged/hackbook&quot;&gt;Found and fixed the error&lt;/a&gt;; it&amp;rsquo;s a bad solder on the GPU&amp;rsquo;s voltage regulator.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>That Cocoa training class was, as I’ve said before, one of the biggest eye-openers of my career. It was so damn easy to build beautiful, functional applications that I walked out feeling like I’d climbed into some giant mecha robot and could now lift huge girders with a wave of my pinky.</title>
   <link href="https://nevyn.me/2008/03/05/that-cocoa-training-class-was-as-ive-said/"/>
   <updated>2008-03-05T04:42:00+01:00</updated>
   <id>https://nevyn.me/2008/03/05/that-cocoa-training-class-was-as-ive-said</id>
   <content type="html">&lt;blockquote&gt;That Cocoa training class was, as I’ve said before, one of the biggest eye-openers of my career. It was so damn easy to build beautiful, functional applications that I walked out feeling like I’d climbed into some giant mecha robot and could now lift huge girders with a wave of my pinky.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://mooseyard.com/Jens/2007/01/in-which-i-think-about-java-again-but-only-for-a-moment/&quot;&gt;In Which I Think About Java Again, But Only For A Moment — Thought Palace&lt;/a&gt;

&lt;p&gt;Not that I think that there&amp;rsquo;s anyone who&amp;rsquo;s reading my blog and NOT convinced Cocoa is the best thing since sliced bread and that GUI Java is horrible-horrible-horrible, but still, a good read.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.noodlesoft.com/blog/2007/01/23/the-sun-also-sets/&quot;&gt;Noodlesoft writes about the history of the hideous thing we now know as Swing&lt;/a&gt;, and &lt;a href=&quot;http://talblog.info/archives/2007/01/sundown.html&quot;&gt;Swingdown on talblog&lt;/a&gt; follows up on the same subject. Sun really killed an AppKit-like Java toolkit just because it wasn&amp;rsquo;t built in-house? And when AWT was deemed too horrible and a new toolkit had to be built, they gave the job to the AWT guys? How could they not see the mistake in that? I guess that explains why Swing is so bad. (more: &lt;a href=&quot;http://www.zefhemel.com/archives/2003/12/29/java-swing-history&quot;&gt;zefhemel&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/03/05/resizing-a-disk-image-in-disk-utility-is-not-a/"/>
   <updated>2008-03-05T02:15:00+01:00</updated>
   <id>https://nevyn.me/2008/03/05/resizing-a-disk-image-in-disk-utility-is-not-a</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/752664?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;293&quot; frameborder=&quot;0&quot; title=&quot;Disk Utility gets Worst UI Of The Year Award&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Resizing a disk image in Disk Utility is not a pleasant experience. &lt;b&gt;&lt;a href=&quot;http://overooped.com/post/27947979&quot;&gt;Updated: Fixed the audio. Click this link to get to a slightly better version.&lt;/a&gt;&lt;/b&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Software Archaeology Find #4: The New Programming Paradigm Is Copy &amp; Paste &amp; Insanity</title>
   <link href="https://nevyn.me/2008/03/04/software-archaeology-find-4-the-new-programming/"/>
   <updated>2008-03-04T23:39:00+01:00</updated>
   <id>https://nevyn.me/2008/03/04/software-archaeology-find-4-the-new-programming</id>
   <content type="html">&lt;div style=&quot;text-align:left;color:#000000; background-color:#ffffff; border:solid black 1px; padding:0.5em 1em 0.5em 1em; overflow:auto;font-size:small; font-family:monospace; &quot;&gt;    &lt;span style=&quot;color:#881350;&quot;&gt;private&lt;/span&gt; &lt;span style=&quot;color:#881350;&quot;&gt;boolean&lt;/span&gt;  &lt;span style=&quot;color:#003369;&quot;&gt;loginOrganisation&lt;/span&gt;(&lt;span style=&quot;color:#440088;&quot;&gt;String&lt;/span&gt; pUserName, &lt;span style=&quot;color:#440088;&quot;&gt;String&lt;/span&gt; pPassword) {&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;
        &lt;span style=&quot;color:#881350;&quot;&gt;try&lt;/span&gt; {&lt;br/&gt;&lt;br/&gt;
            RemoteAddress[] status;&lt;br/&gt;
            &lt;span style=&quot;color:#881350;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#003369;&quot;&gt; &lt;/span&gt;(Constants.DEBUG) {&lt;br/&gt;
                System.out.&lt;span style=&quot;color:#003369;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color:#760f15;&quot;&gt;&amp;ldquo;[MotorolaEmulatorActivator.loginOrganisation] User &amp;rdquo;&lt;/span&gt; +pUserName );&lt;br/&gt;
            }&lt;br/&gt;&lt;br/&gt;
            RemoteAddress[] domain = &lt;span style=&quot;color:#881350;&quot;&gt;null&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;
            &lt;span style=&quot;color:#881350;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#003369;&quot;&gt; &lt;/span&gt;(pUserName.&lt;span style=&quot;color:#003369;&quot;&gt;equals&lt;/span&gt;(COUNTY_COUNCIL_USER)) {&lt;br/&gt;&lt;br/&gt;
                &lt;span style=&quot;color:#881350;&quot;&gt;try&lt;/span&gt; {&lt;br/&gt;
                    domain = mHelp.&lt;span style=&quot;color:#003369;&quot;&gt;lookup&lt;/span&gt;(COUNTY_COUNCIL_DOMAIN);&lt;br/&gt;
                    &lt;span style=&quot;color:#881350;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#003369;&quot;&gt; &lt;/span&gt;(Constants.DEBUG) {&lt;br/&gt;
                       System.out.&lt;span style=&quot;color:#003369;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color:#760f15;&quot;&gt;&amp;ldquo;[MotorolaEmulatorActivator.loginOrganisation] Number of correct domains found &amp;rdquo;&lt;/span&gt; +domain.length);&lt;br/&gt;
                   }&lt;br/&gt;&lt;br/&gt;
                } &lt;span style=&quot;color:#881350;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#003369;&quot;&gt; &lt;/span&gt;(&lt;span style=&quot;color:#440088;&quot;&gt;Exception&lt;/span&gt; e) {&lt;br/&gt;&lt;br/&gt;
                    &lt;span style=&quot;color:#881350;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#003369;&quot;&gt; &lt;/span&gt;(Constants.DEBUG) {&lt;br/&gt;
                        System.out.&lt;span style=&quot;color:#003369;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color:#760f15;&quot;&gt;&amp;ldquo;[MotorolaEmulatorActivator.loginOrganisation] Fel på Lookup&amp;rdquo;&lt;/span&gt;);&lt;br/&gt;
                    }&lt;br/&gt;&lt;br/&gt;
                    e.&lt;span style=&quot;color:#003369;&quot;&gt;printStackTrace&lt;/span&gt;();  &lt;span style=&quot;color:#236e25;&quot;&gt;//To change body of catch statement use Options | File Templates.&lt;br/&gt;&lt;/span&gt;                }&lt;br/&gt;&lt;br/&gt;
                RemoteAddress[] childs = mHelp.&lt;span style=&quot;color:#003369;&quot;&gt;getChilds&lt;/span&gt;(domain[&lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;]);&lt;br/&gt;&lt;br/&gt;
                &lt;span style=&quot;color:#881350;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#003369;&quot;&gt; &lt;/span&gt;(COUNTY_COUNCIL_CONCEPT.&lt;span style=&quot;color:#003369;&quot;&gt;equals&lt;/span&gt;(mHelp.&lt;span style=&quot;color:#003369;&quot;&gt;getProperty&lt;/span&gt;(childs[&lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;]))) {&lt;br/&gt;&lt;br/&gt;
                    mOrganizationDomain = domain[&lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;];&lt;br/&gt;
                    mOrganisationConcept = childs[&lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;];&lt;br/&gt;
                    mLoggedinOrganisationDomain = COUNTY_COUNCIL_DOMAIN;&lt;br/&gt;
                    &lt;span style=&quot;color:#236e25;&quot;&gt;//status = mHelp.getChilds(childs[0]);&lt;br/&gt;&lt;/span&gt;                    &lt;span style=&quot;color:#236e25;&quot;&gt;//mHelp.setProperty(status[0], &amp;ldquo;online&amp;rdquo;);&lt;br/&gt;&lt;/span&gt;&lt;br/&gt;
                 &lt;span style=&quot;color:#881350;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#881350;&quot;&gt;true&lt;/span&gt;;&lt;br/&gt;
                }&lt;br/&gt;
            }&lt;br/&gt;&lt;br/&gt;
            &lt;span style=&quot;color:#881350;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#003369;&quot;&gt; &lt;/span&gt;(pUserName.&lt;span style=&quot;color:#003369;&quot;&gt;equals&lt;/span&gt;(MUNICIPAL_USER)) {&lt;br/&gt;&lt;br/&gt;
                domain = mHelp.&lt;span style=&quot;color:#003369;&quot;&gt;lookup&lt;/span&gt;(MUNICIPAL_DOMAIN);&lt;br/&gt;&lt;br/&gt;
                  &lt;span style=&quot;color:#881350;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#003369;&quot;&gt; &lt;/span&gt;(Constants.DEBUG) {&lt;br/&gt;
                    System.out.&lt;span style=&quot;color:#003369;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color:#760f15;&quot;&gt;&amp;ldquo;[MotorolaEmulatorActivator.loginOrganisation] Number of correct domains found &amp;rdquo;&lt;/span&gt; +domain.length);&lt;br/&gt;
                }&lt;br/&gt;&lt;br/&gt;
                RemoteAddress[] childs = mHelp.&lt;span style=&quot;color:#003369;&quot;&gt;getChilds&lt;/span&gt;(domain[&lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;]);&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;
                &lt;span style=&quot;color:#881350;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#003369;&quot;&gt; &lt;/span&gt;(MUNICIPAL_CONCEPT.&lt;span style=&quot;color:#003369;&quot;&gt;equals&lt;/span&gt;(mHelp.&lt;span style=&quot;color:#003369;&quot;&gt;getProperty&lt;/span&gt;(childs[&lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;]))) {&lt;br/&gt;
                    mOrganizationDomain = domain[&lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;];&lt;br/&gt;
                    mOrganisationConcept = childs[&lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;];&lt;br/&gt;
                    mLoggedinOrganisationDomain = MUNICIPAL_DOMAIN;&lt;br/&gt;
                    &lt;span style=&quot;color:#236e25;&quot;&gt;//status = mHelp.getChilds(childs[0]);&lt;br/&gt;&lt;/span&gt;                    &lt;span style=&quot;color:#236e25;&quot;&gt;//mHelp.setProperty(status[0], &amp;ldquo;online&amp;rdquo;);&lt;br/&gt;&lt;/span&gt;&lt;br/&gt;
                 &lt;span style=&quot;color:#881350;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#881350;&quot;&gt;true&lt;/span&gt;;&lt;br/&gt;
                }&lt;br/&gt;
            }&lt;br/&gt;&lt;br/&gt;
            &lt;span style=&quot;color:#881350;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#003369;&quot;&gt; &lt;/span&gt;(pUserName.&lt;span style=&quot;color:#003369;&quot;&gt;equals&lt;/span&gt;(PRIVATE_USER)) {&lt;br/&gt;&lt;br/&gt;
                domain = mHelp.&lt;span style=&quot;color:#003369;&quot;&gt;lookup&lt;/span&gt;(PRIVATE_DOMAIN);&lt;br/&gt;&lt;br/&gt;
                  &lt;span style=&quot;color:#881350;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#003369;&quot;&gt; &lt;/span&gt;(Constants.DEBUG) {&lt;br/&gt;
                    System.out.&lt;span style=&quot;color:#003369;&quot;&gt;println&lt;/span&gt;(&lt;span style=&quot;color:#760f15;&quot;&gt;&amp;ldquo;[MotorolaEmulatorActivator.loginOrganisation] Number of correct domains found &amp;rdquo;&lt;/span&gt; +domain.length);&lt;br/&gt;
                }&lt;br/&gt;&lt;br/&gt;
                RemoteAddress[] childs = mHelp.&lt;span style=&quot;color:#003369;&quot;&gt;getChilds&lt;/span&gt;(domain[&lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;]);&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;
                &lt;span style=&quot;color:#881350;&quot;&gt;if&lt;/span&gt;&lt;span style=&quot;color:#003369;&quot;&gt; &lt;/span&gt;(PRIVATE_CONCEPT.&lt;span style=&quot;color:#003369;&quot;&gt;equals&lt;/span&gt;(mHelp.&lt;span style=&quot;color:#003369;&quot;&gt;getProperty&lt;/span&gt;(childs[&lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;]))) {&lt;br/&gt;
                    mOrganizationDomain = domain[&lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;];&lt;br/&gt;
                    mOrganisationConcept = childs[&lt;span style=&quot;color:#0000ff;&quot;&gt;0&lt;/span&gt;];&lt;br/&gt;
                    mLoggedinOrganisationDomain = PRIVATE_DOMAIN;&lt;br/&gt;
                    &lt;span style=&quot;color:#236e25;&quot;&gt;//status = mHelp.getChilds(childs[0]);&lt;br/&gt;&lt;/span&gt;                    &lt;span style=&quot;color:#236e25;&quot;&gt;//mHelp.setProperty(status[0], &amp;ldquo;online&amp;rdquo;);&lt;br/&gt;&lt;/span&gt;&lt;br/&gt;
                 &lt;span style=&quot;color:#881350;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#881350;&quot;&gt;true&lt;/span&gt;;&lt;br/&gt;
                }&lt;br/&gt;
            }&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;
        } &lt;span style=&quot;color:#881350;&quot;&gt;catch&lt;/span&gt;&lt;span style=&quot;color:#003369;&quot;&gt; &lt;/span&gt;(&lt;span style=&quot;color:#440088;&quot;&gt;Exception&lt;/span&gt; e) {&lt;br/&gt;
            e.&lt;span style=&quot;color:#003369;&quot;&gt;printStackTrace&lt;/span&gt;();  &lt;span style=&quot;color:#236e25;&quot;&gt;//To change body of catch statement use Options | File Templates.&lt;br/&gt;&lt;/span&gt;        }&lt;br/&gt;&lt;br/&gt;&lt;br/&gt;
        &lt;span style=&quot;color:#881350;&quot;&gt;return&lt;/span&gt; &lt;span style=&quot;color:#881350;&quot;&gt;false&lt;/span&gt;;&lt;br/&gt;
    }&lt;br/&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;&lt;a href=&quot;http://overooped.com/post/26804603&quot;&gt;&amp;lt; Previous archaeology find&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/03/03/213608-argonbetawwwtrac-nevyn-for-i-in/"/>
   <updated>2008-03-03T06:37:46+01:00</updated>
   <id>https://nevyn.me/2008/03/03/213608-argonbetawwwtrac-nevyn-for-i-in</id>
   <content type="html">&lt;code&gt;21:36:08 argon:/beta/www/trac nevyn$ for i in $( find . -depth 1 -type d ); do sqlite2to3 $i/db/trac.db; trac-admin $i upgrade; trac-admin $i wiki upgrade; done&lt;/code&gt;

&lt;p&gt;Nice. I could learn to like bash scripting, after all.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Time Machine does not work over the Internet</title>
   <link href="https://nevyn.me/2008/03/03/time-machine-does-not-work-over-the-internet/"/>
   <updated>2008-03-03T03:20:28+01:00</updated>
   <id>https://nevyn.me/2008/03/03/time-machine-does-not-work-over-the-internet</id>
   <content type="html">&lt;p&gt;This might not come as a surprise to you, but I&amp;rsquo;ve been experimenting just to see if Time Machine might be able to backup my dad&amp;rsquo;s (Gunnar&amp;rsquo;s) MacBook and my girlfriend&amp;rsquo;s mom&amp;rsquo;s (Mia&amp;rsquo;s) MacBook over the Internet to my 10.5 Server. It isn&amp;rsquo;t.&lt;/p&gt;

&lt;p&gt;I started the experiment in December. Mia&amp;rsquo;s backup had succeeded three times, all on December 17, for a total of 17GB. After that, Time Machine had shown progress bars and everything, but only completed four partial backups for a total of 40MB. Fourty megabytes in two months, all of it trying to backup /Applications.&lt;/p&gt;

&lt;p&gt;Gunnar&amp;rsquo;s backup never completed even once in the same period. The .sparseimage was four megabytes, and the only transferred file seemed to be the alias for &amp;ldquo;User guides and documentation&amp;rdquo; that appears in the volume root of some installations. He had also reported that Time Machine frequently showed progress bars.&lt;/p&gt;

&lt;p&gt;I really expected it to work, since, you know, it&amp;rsquo;s just a TCP link and the underlying network shouldn&amp;rsquo;t matter. The server is reliable and very rarely offline, and the MacBooks relatively often awake and online. Unfortunately, it seems Time Machine&amp;rsquo;s error handling is severely lacking. I suppose the only recommendation I can make is for them to get a Time Capsule each, if they want to continue using Time Machine; otherwise I might be able to use incremental Super Duper over the &amp;lsquo;net.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Me and my girlfriend have tried a whole host of backup apps by now. Homebrewn cron-driven rsync scripts (works great for mysql/svn backup but not large data quantities on mobile clients), &lt;a href=&quot;http://propagandaprod.com/&quot;&gt;Déjà vu&lt;/a&gt; (psync, ueherrghghhh!), &lt;a href=&quot;http://www.decimus.net/&quot;&gt;Synk&lt;/a&gt; (just plain bad, all versions), &lt;a href=&quot;http://www.crashplan.com/&quot;&gt;CrashPlan&lt;/a&gt; (written in Java, ugh, sooo slow!), &lt;a href=&quot;http://www.bombich.com/software/ccc.html&quot;&gt;Carbon Copy Cloner&lt;/a&gt; (old and not incremental) have been tested but they all failed spectacularly one way or another. We&amp;rsquo;ve considered several more (&lt;a href=&quot;http://psyncx.sourceforge.net/&quot;&gt;PsyncX&lt;/a&gt;, &lt;a href=&quot;http://www.econtechnologies.com/site/Pages/ChronoSync/chrono_overview.html&quot;&gt;ChronoSync&lt;/a&gt;, &lt;a href=&quot;http://www.ibackup.com/&quot;&gt;iBackup&lt;/a&gt;, &lt;a href=&quot;http://www.shirt-pocket.com/SuperDuper/&quot;&gt;SuperDuper!&lt;/a&gt;, &amp;hellip;) but discarded them after reading the specs and a few reviews. Time Machine is buggy and slow, but so far the only backup solution for the Mac that we&amp;rsquo;ve found that works.&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Time Machine is Confused</title>
   <link href="https://nevyn.me/2008/03/03/time-machine-is-confused/"/>
   <updated>2008-03-03T02:14:23+01:00</updated>
   <id>https://nevyn.me/2008/03/03/time-machine-is-confused</id>
   <content type="html">&lt;img src=&quot;http://nevyn.nu/img/tmbug.png&quot;/&gt;&lt;p&gt;Also, I have 21.44 GB free on that volume. Also, Time Machine is built specifically to handle the case of the disk being full by removing old backups.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>TagBot - Spotlight File Tagging For Mac OS X Tiger</title>
   <link href="https://nevyn.me/2008/02/29/tagbot-spotlight-file-tagging-for-mac-os-x-tiger/"/>
   <updated>2008-02-29T08:31:11+01:00</updated>
   <id>https://nevyn.me/2008/02/29/tagbot-spotlight-file-tagging-for-mac-os-x-tiger</id>
   <content type="html">&lt;a href=&quot;http://bigrobotsoftware.com/&quot;&gt;TagBot - Spotlight File Tagging For Mac OS X Tiger&lt;/a&gt;&lt;br/&gt;&lt;p&gt;So annoying. I build basically exactly this utility, including the HUD UI. Then I never figured out how to make Spotlight index my tags :( &lt;br/&gt;&lt;br/&gt;
Oh. He cheats by using Spotlight comments, just like everyone else. Ugh.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The World's Ugliest Core Animation Demo App</title>
   <link href="https://nevyn.me/2008/02/28/the-worlds-ugliest-core-animation-demo-app/"/>
   <updated>2008-02-28T07:02:00+01:00</updated>
   <id>https://nevyn.me/2008/02/28/the-worlds-ugliest-core-animation-demo-app</id>
   <content type="html">&lt;a href=&quot;http://nevyn.nu/files/Foobaz.zip&quot;&gt;The World's Ugliest Core Animation Demo App&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Written in ten minutes to show my girlfriend how Objective-C and CoreAnimation works.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>EU Invests $22 Million in Next-Generation BitTorrent Client</title>
   <link href="https://nevyn.me/2008/02/27/eu-invests-22-million-in-next-generation/"/>
   <updated>2008-02-27T07:12:33+01:00</updated>
   <id>https://nevyn.me/2008/02/27/eu-invests-22-million-in-next-generation</id>
   <content type="html">&lt;a href=&quot;http://torrentfreak.com/eu-invests-22-million-in-next-generation-bittorrent-client/&quot;&gt;EU Invests $22 Million in Next-Generation BitTorrent Client&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Crazy and wonderful!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Mac OS X 10.5 Server Admin is pretty neat.</title>
   <link href="https://nevyn.me/2008/02/26/mac-os-x-105-server-admin-is-pretty-neat/"/>
   <updated>2008-02-26T08:33:00+01:00</updated>
   <id>https://nevyn.me/2008/02/26/mac-os-x-105-server-admin-is-pretty-neat</id>
   <content type="html">&lt;p&gt;I know a lot of people complain about OS X being a bad server os. They might be right. However, so far, it&amp;rsquo;s been a smooth sailing for me. Sure beats my old freebsd server :P I couldn&amp;rsquo;t find any good Server Admin screen shots on the net, so I put some up (click for more):&lt;/p&gt;
&lt;a href=&quot;http://nevyn.nu/ServerGUIIsUseful/&quot;&gt;&lt;img src=&quot;http://nevyn.nu/ServerGUIIsUseful/Picture%201.thumb.png&quot;/&gt;&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/02/24/theory-casual-piracy-good-for-microsoft-but/"/>
   <updated>2008-02-24T00:08:51+01:00</updated>
   <id>https://nevyn.me/2008/02/24/theory-casual-piracy-good-for-microsoft-but</id>
   <content type="html">&lt;p&gt;theory: casual piracy = good for microsoft, but they can&amp;rsquo;t have that position officially because then their shareholders would sue them. Thus, they make it very annoying to use a legit version (WGA, etc) of Windows, which will help spread warezed versions of windows, thus making sure windows is on every machine everywhere, even on macs.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Realtime acoustics modeling in games: Prototype &quot;Aurora2D&quot;, v1.1</title>
   <link href="https://nevyn.me/2008/02/22/realtime-acoustics-modeling-in-games-prototype/"/>
   <updated>2008-02-22T02:40:00+01:00</updated>
   <id>https://nevyn.me/2008/02/22/realtime-acoustics-modeling-in-games-prototype</id>
   <content type="html">&lt;p&gt;I&amp;rsquo;m writing my candidate thesis on &lt;a href=&quot;http://nevyn.nu/realtime_acoustics/&quot;&gt;realtime acoustics modeling in games&lt;/a&gt;; figuring out the reverb, echoes and occlusion of sound in a room by doing a physics simulation, specifically image-source model, roughly as described by &lt;a href=&quot;http://nevyn.nu/realtime_acoustics/Extension%20of%20the%20image%20model%20to%20arbitrary%20polyhedra.pdf&quot;&gt;Jeffrey Borish in his &amp;ldquo;Extension of the image model to arbitrary polyhedra&amp;rdquo;&lt;/a&gt;. I&amp;rsquo;ve spent a day or two a week for the past eight weeks or so building a 2D prototype called Aurora2D, before I implement the modeling inside the &lt;a href=&quot;http://www.friendlystapler.se/&quot;&gt;RMS game engine&lt;/a&gt;. Finally, it&amp;rsquo;s sorta working. I&amp;rsquo;ve coaxed the RMS sound engine into Aurora2D, so you can actually hear the model in real time. Since it works, I thought I&amp;rsquo;d publish it here :)&lt;/p&gt;

&lt;p&gt;This stuff is pretty cool for (mac) programmers, because it&amp;rsquo;s a garbage collected Objective-C/C++ hybrid using Core Animation and NSOperationQueue, which means it&amp;rsquo;s massively multi-threaded. For you, the sources are available at svn://nevyn.nu/school/trunk/realtime_acoustics/Implementation/Aurora2D.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m hoping that this will also excite gamers, since most sound effects done in games today are just either baked into the sound file with no accounting for the physical environment in which it is playing whatsoever, or the sound gets some basic DSP effects applied to it, only taking into account as much as the level designer could know at level creation time. However, with today&amp;rsquo;s computers, we can do so much more. We have multicore CPUs, multicore graphic cards, multicore physics cards in some cases. Why is so little done with audio? Perhaps you can&amp;rsquo;t, and that&amp;rsquo;ll be what I find out when I do this in 3D, but I really doubt it.&lt;/p&gt;

&lt;p&gt;Anyway. Enough talking. &lt;a href=&quot;http://nevyn.nu/realtime_acoustics/Aurora2D_v1.1.zip&quot;&gt;Download Aurora2D v1.1&lt;/a&gt;! (Mac Intel 10.5 only)&lt;/p&gt;

&lt;a href=&quot;http://skitch.com/nevyn/gwt2/aurora2d-manual&quot;&gt;&lt;img src=&quot;http://img.skitch.com/20080221-eiuxf1cau4b2tb5idem9q72mpb.jpg&quot; width=&quot;500&quot;/&gt;&lt;/a&gt;

&lt;p&gt;The interface has evolved for my debugging use only, and is probably confusing for human beings. The above illustration will probably only serve to add to this confusion. Click on the image for a larger version.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Ironic Sans: Idea: A new typography term</title>
   <link href="https://nevyn.me/2008/02/21/ironic-sans-idea-a-new-typography-term/"/>
   <updated>2008-02-21T20:12:09+01:00</updated>
   <id>https://nevyn.me/2008/02/21/ironic-sans-idea-a-new-typography-term</id>
   <content type="html">&lt;a href=&quot;http://www.ironicsans.com/2008/02/idea_a_new_typography_term.html&quot;&gt;Ironic Sans: Idea: A new typography term&lt;/a&gt;&lt;br/&gt;
</content>
 </entry>
 
 <entry>
   <title>Software Archaeology Find #3: Another Kind of Object Orientation</title>
   <link href="https://nevyn.me/2008/02/20/software-archaeology-find-3-another-kind-of/"/>
   <updated>2008-02-20T21:52:00+01:00</updated>
   <id>https://nevyn.me/2008/02/20/software-archaeology-find-3-another-kind-of</id>
   <content type="html">&lt;div style=&quot;text-align:left;color:#000000; background-color:#ffffff; border:solid black 1px; padding:0.5em 1em 0.5em 1em; overflow:auto;font-size:small; font-family:monospace; &quot;&gt;&lt;span style=&quot;color:#881350;&quot;&gt;public&lt;/span&gt; &lt;span style=&quot;color:#881350;&quot;&gt;void&lt;/span&gt; &lt;span style=&quot;color:#003369;&quot;&gt;login&lt;/span&gt;(Actor pactor) {&lt;br/&gt;
    mActor = pactor;&lt;br/&gt;&lt;br/&gt;
    ClientLogin loginActor = &lt;span style=&quot;color:#881350;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#003369;&quot;&gt;ClientLogin&lt;/span&gt;();&lt;br/&gt;
    loginActor.&lt;span style=&quot;color:#003369;&quot;&gt;setUsername&lt;/span&gt;(pactor.&lt;span style=&quot;color:#003369;&quot;&gt;getUsername&lt;/span&gt;());&lt;br/&gt;
    loginActor.&lt;span style=&quot;color:#003369;&quot;&gt;setPassword&lt;/span&gt;(pactor.&lt;span style=&quot;color:#003369;&quot;&gt;getPassword&lt;/span&gt;());&lt;br/&gt;
    loginActor = (ClientLogin) pactor;&lt;br/&gt;&lt;br/&gt;
    Actor ac = &lt;span style=&quot;color:#881350;&quot;&gt;new&lt;/span&gt; &lt;span style=&quot;color:#003369;&quot;&gt;Actor&lt;/span&gt;();&lt;br/&gt;
    ac.&lt;span style=&quot;color:#003369;&quot;&gt;setUsername&lt;/span&gt;(loginActor.&lt;span style=&quot;color:#003369;&quot;&gt;getUsername&lt;/span&gt;());&lt;br/&gt;
    ac.&lt;span style=&quot;color:#003369;&quot;&gt;setPassword&lt;/span&gt;(loginActor.&lt;span style=&quot;color:#003369;&quot;&gt;getPassword&lt;/span&gt;());&lt;br/&gt;
    &lt;span style=&quot;color:#003369;&quot;&gt;updateActor&lt;/span&gt;(ac);&lt;br/&gt;&lt;br/&gt;
    &lt;span style=&quot;color:#236e25;&quot;&gt;//TODO: This should be uncommented for the final version&lt;br/&gt;&lt;/span&gt;    &lt;span style=&quot;color:#236e25;&quot;&gt;//mClient.clientLogin(loginActor);&lt;br/&gt;&lt;/span&gt;&lt;br/&gt;
}&lt;/div&gt;

&lt;p&gt;&lt;em&gt;&lt;a href=&quot;http://overooped.com/post/26157931&quot;&gt;&amp;lt; Previous archaeology find&lt;/a&gt; | &lt;a href=&quot;http://overooped.com/post/27931909&quot;&gt;Next archaeology find &amp;gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/02/19/the-loudness-war-via/"/>
   <updated>2008-02-19T02:32:21+01:00</updated>
   <id>https://nevyn.me/2008/02/19/the-loudness-war-via</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/3Gmex_4hreQ?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;The Loudness War (via &lt;a href=&quot;http://youtube.com/user/&quot;&gt;&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Internet Software Patents</title>
   <link href="https://nevyn.me/2008/02/17/internet-software-patents/"/>
   <updated>2008-02-17T22:48:07+01:00</updated>
   <id>https://nevyn.me/2008/02/17/internet-software-patents</id>
   <content type="html">&lt;a href=&quot;http://philip.greenspun.com/business/internet-software-patents&quot;&gt;Internet Software Patents&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Actually a description of how everything cool relating to computering and the Internet was already envisioned in the &amp;lsquo;60s. A good read.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Reasons why Visual Studio Sucks #3: Hard-to-overview build results</title>
   <link href="https://nevyn.me/2008/02/17/reasons-why-visual-studio-sucks-3/"/>
   <updated>2008-02-17T22:07:00+01:00</updated>
   <id>https://nevyn.me/2008/02/17/reasons-why-visual-studio-sucks-3</id>
   <content type="html">&lt;p&gt;The build results window in Visual Studio is plain text. No color coding, no UI elements, just text. This means that you&amp;rsquo;ll have to scan and read the text to find out if the build was successful, slightly at fault, or a major fuckup. If I recall correctly, the entire build command is output to the window as well, with no soft wrapping, so that the actual error is probably a few thousand pixels to the right, meaning you&amp;rsquo;ll have to scroll left and right just to read the error message, or even find out if it was an error or a warning. Even if that&amp;rsquo;s not the case, it&amp;rsquo;s hard to get an overview over the build process in Visual Studio. There&amp;rsquo;s a completely different build results pane you can look at instead, which /does/ have color coding and a nice table view. However, you don&amp;rsquo;t get to see the entire error message, the pane is buggy and displays errors in weird order, and it doesn&amp;rsquo;t correlate the error to a specific file in a good way. And you can&amp;rsquo;t easilly get to the corresponding build command to read the exact details of the error.&lt;/p&gt;

&lt;p&gt;Once again, please correct me if I&amp;rsquo;m wrong, even flame me if it&amp;rsquo;s appropriate. I don&amp;rsquo;t use Visual Studio that much, and this is mostly taken from memory.&lt;/p&gt;

&lt;img src=&quot;http://nevyn.nu/img/BuildResults.png&quot; width=&quot;500&quot;/&gt;&lt;p&gt;&lt;em&gt;In XCode, if you open the lower pane and click once on an error (double click takes you to the error in the code, as usual), the lower pane scrolls to reveal relevant compiler output.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href=&quot;http://nevyn.tumblr.com/post/26546661&quot;&gt;&amp;lt; Previous suckitude&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Reasons why Visual Studio Sucks #2: No real project find [SORTA-KINDA REDACTED]</title>
   <link href="https://nevyn.me/2008/02/17/reasons-why-visual-studio-sucks-2-no-real/"/>
   <updated>2008-02-17T21:35:00+01:00</updated>
   <id>https://nevyn.me/2008/02/17/reasons-why-visual-studio-sucks-2-no-real</id>
   <content type="html">&lt;p&gt;In any sane IDE, when you do a project-wide search, you get a search result summary and a result count, allowing you to refine the search if it&amp;rsquo;s too general, and else jump directly to the relevant files.&lt;/p&gt;

&lt;img src=&quot;http://nevyn.nu/img/ProjectFind.png&quot; width=&quot;500&quot;/&gt;&lt;p&gt;In Visual Studio, Project Find works like file find. When you click Find Next, you just get thrown to the next file containing the phrase. No summary, no order, no find count. Just haphazard teleportation through your project, with no overview and a complete sense of loss of control. Euggh.&lt;/p&gt;

&lt;img src=&quot;http://nevyn.nu/img/ProjectFindVS.png&quot; width=&quot;500&quot;/&gt;&lt;p&gt;&lt;em&gt;Update:&lt;/em&gt; It seems Visual Studio &lt;em&gt;does&lt;/em&gt; indeed have Project Find. It looks completely botchered, though: No result highlights, no file grouping, and no options to refine the search without redoing it entirely. But it&amp;rsquo;s certainly better than nothing! ctrl-shift-F to bring it forth. Thanks to Eddie Willman and &lt;a href=&quot;http://voxar.net/&quot;&gt;Patrik Sjöberg&lt;/a&gt; for sending this in.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(ps. No, I&amp;rsquo;m not actively trying to make XCode look cool and fancy, and Visual Studio look like crap: that drop shadow is added automatically when you screen shot a single window in mac os)&lt;/em&gt;&lt;/p&gt;



&lt;p&gt;&lt;em&gt;&lt;a href=&quot;http://nevyn.tumblr.com/post/26546540&quot;&gt;&amp;lt; Previous suckitude&lt;/a&gt; | &lt;a href=&quot;http://nevyn.tumblr.com/post/26548111&quot;&gt;Next suckitude &amp;gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Reasons why Visual Studio Sucks #1: MDI</title>
   <link href="https://nevyn.me/2008/02/17/reasons-why-visual-studio-sucks-1-mdi/"/>
   <updated>2008-02-17T21:33:00+01:00</updated>
   <id>https://nevyn.me/2008/02/17/reasons-why-visual-studio-sucks-1-mdi</id>
   <content type="html">&lt;p&gt;I really don&amp;rsquo;t like working in Visual Studio, but when people ask me why, I can&amp;rsquo;t put my finger to it, and I can&amp;rsquo;t recall any specific reasons. Thus, I&amp;rsquo;ll write them here whenever I come up with a reason. You&amp;rsquo;re very welcome to refute the arguments in the comments.&lt;/p&gt;

&lt;p&gt;Reason 1: &lt;a href=&quot;http://en.wikipedia.org/wiki/Multiple_document_interface&quot;&gt;MDI&lt;/a&gt;. &amp;lsquo;Nuff said.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;a href=&quot;http://nevyn.tumblr.com/post/26546661&quot;&gt;Next suckitude &amp;gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>After I walked away and plotted my path directly from the Apple store to the nearest Gamestop, I noticed a really weird feeling. My hands were literally craving the feeling of the [MacBook Air] keyboard. It was as if they missed the physical experience of resting on that keyboard. </title>
   <link href="https://nevyn.me/2008/02/17/after-i-walked-away-and-plotted-my-path-directly/"/>
   <updated>2008-02-17T21:23:20+01:00</updated>
   <id>https://nevyn.me/2008/02/17/after-i-walked-away-and-plotted-my-path-directly</id>
   <content type="html">&lt;blockquote&gt;After I walked away and plotted my path directly from the Apple store to the nearest Gamestop, I noticed a really weird feeling. My hands were literally craving the feeling of the [MacBook Air] keyboard. It was as if they missed the physical experience of resting on that keyboard. &lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://dotnetaddict.dotnetdevelopersjournal.com/macbookair_kirei.htm&quot;&gt;Macbook Airはきれいですよ！ [The .NET Addict&amp;rsquo;s Blog]&lt;/a&gt;. Maybe I&amp;rsquo;ll reconsider getting one anyway :P
</content>
 </entry>
 
 <entry>
   <title>Nevyn's First Rule of Singleton Evilness</title>
   <link href="https://nevyn.me/2008/02/17/nevyns-first-rule-of-singleton-evilness/"/>
   <updated>2008-02-17T19:14:00+01:00</updated>
   <id>https://nevyn.me/2008/02/17/nevyns-first-rule-of-singleton-evilness</id>
   <content type="html">&lt;p&gt;I finally figured out a litmus test for whether being a singleton is okay or evil for a particular class:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If a class is thread-safe and has no state that can be changed, it may be a singleton.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html&quot;&gt;NSFileManager&lt;/a&gt;: OK. &lt;a href=&quot;http://www.friendlystapler.se/wiki/Sound&quot;&gt;RMS::Sound::Gateway&lt;/a&gt;: Not so much.&lt;/p&gt;

&lt;p&gt;I suppose there are ways to circumvent this rule; e g most of Apple&amp;rsquo;s singletons may be created either through the+[defaultManager] method, or instantiated on-the-spot, e g if you want several separate &lt;a href=&quot;http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html#&quot;&gt;NSNotificationCenter&lt;/a&gt; inside the same application.&lt;/p&gt;

&lt;p&gt;This discussion came up during the creation of the &lt;a href=&quot;http://www.friendlystapler.se&quot;&gt;RMS game engine&lt;/a&gt;, among many other times. Now that I&amp;rsquo;m ripping out parts of the engine for re-use, I realize that it was a very bad design decision to use singletons the way we did. For example, my &lt;a href=&quot;http://nevyn.tumblr.com/post/25051276&quot;&gt;2D modeler prototype&lt;/a&gt; for my &lt;a href=&quot;http://nevyn.nu/realtime_acoustics/&quot;&gt;candidate thesis&lt;/a&gt; is document-based, thus it needs an RMS::Sound::Gateway for each window. This is no-can-do until I fix the code, because for example the Voice class has the delegated play method, and the way it works is that it gets the global gateway and adds itself to the gateway&amp;rsquo;s list of playing voices.&lt;/p&gt;

&lt;p&gt;&amp;ldquo;State that can be changed&amp;rdquo;? Oh, right. +[NSColor redColor] has state, but it can still be a singleton since that state can&amp;rsquo;t be changed by my code. Same for NSEvent&amp;rsquo;s singleton methods, and so on.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>intriguing is it a macbook or a macbook pro via</title>
   <link href="https://nevyn.me/2008/02/16/intriguing-is-it-a-macbook-or-a-macbook-pro-via/"/>
   <updated>2008-02-16T08:08:54+01:00</updated>
   <id>https://nevyn.me/2008/02/16/intriguing-is-it-a-macbook-or-a-macbook-pro-via</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb5gu81x1xqojbpcb_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Intriguing! Is it a MacBook, or a MacBook Pro? via &lt;a href=&quot;http://www.engadget.com/2008/02/15/macbook-pro-mockup-contest-results-the-winner-is-you/&quot;&gt; engadget.com &lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/02/16/where-does-the-i-am-intrigued-by-your-ideas-and/"/>
   <updated>2008-02-16T08:04:39+01:00</updated>
   <id>https://nevyn.me/2008/02/16/where-does-the-i-am-intrigued-by-your-ideas-and</id>
   <content type="html">&lt;p&gt;Where does the &amp;ldquo;I am intrigued by your ideas and wish to subscribe to your newsletter&amp;rdquo; meme come from?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Valve releases SteamWorks toolset for free</title>
   <link href="https://nevyn.me/2008/02/16/valve-releases-steamworks-toolset-for-free/"/>
   <updated>2008-02-16T01:26:11+01:00</updated>
   <id>https://nevyn.me/2008/02/16/valve-releases-steamworks-toolset-for-free</id>
   <content type="html">&lt;a href=&quot;http://www.bit-tech.net/news/2008/01/30/valve_releases_steamworks_toolset_for_free/1&quot;&gt;Valve releases SteamWorks toolset for free&lt;/a&gt;&lt;br/&gt;
</content>
 </entry>
 
 <entry>
   <title>GeForce 8 graphics processors to gain PhysX support</title>
   <link href="https://nevyn.me/2008/02/16/geforce-8-graphics-processors-to-gain-physx/"/>
   <updated>2008-02-16T00:44:46+01:00</updated>
   <id>https://nevyn.me/2008/02/16/geforce-8-graphics-processors-to-gain-physx</id>
   <content type="html">&lt;a href=&quot;http://techreport.com/discussions.x/14147&quot;&gt;GeForce 8 graphics processors to gain PhysX support&lt;/a&gt;&lt;br/&gt;
</content>
 </entry>
 
 <entry>
   <title>Software Archaeology Find #2: Enterprise-y</title>
   <link href="https://nevyn.me/2008/02/13/software-archaeology-find-2-enterprise-y/"/>
   <updated>2008-02-13T02:04:00+01:00</updated>
   <id>https://nevyn.me/2008/02/13/software-archaeology-find-2-enterprise-y</id>
   <content type="html">&lt;div style=&quot;text-align:left;color:#000000; background-color:#ffffff; border:solid black 1px; padding:0.5em 1em 0.5em 1em; overflow:auto;font-size:small; font-family:monospace; &quot;&gt;&lt;span style=&quot;color:#881350;&quot;&gt;int&lt;/span&gt; role = Constants.DOCTOR;&lt;br/&gt;&lt;span style=&quot;color:#881350;&quot;&gt;switch&lt;/span&gt;&lt;span style=&quot;color:#003369;&quot;&gt; &lt;/span&gt;(res.&lt;span style=&quot;color:#003369;&quot;&gt;getInt&lt;/span&gt;(&lt;span style=&quot;color:#0000ff;&quot;&gt;2&lt;/span&gt;)) {&lt;br/&gt;
    &lt;span style=&quot;color:#881350;&quot;&gt;case&lt;/span&gt; Constants.DOCTOR:&lt;br/&gt;
        role = Constants.DOCTOR;&lt;br/&gt;
        &lt;span style=&quot;color:#881350;&quot;&gt;break&lt;/span&gt;;&lt;br/&gt;
    &lt;span style=&quot;color:#881350;&quot;&gt;case&lt;/span&gt; Constants.NURSE:&lt;br/&gt;
        role = Constants.NURSE;&lt;br/&gt;
        &lt;span style=&quot;color:#881350;&quot;&gt;break&lt;/span&gt;;&lt;br/&gt;
    &lt;span style=&quot;color:#881350;&quot;&gt;case&lt;/span&gt; Constants.ASSISTANT_NURSE:&lt;br/&gt;
        role = Constants.ASSISTANT_NURSE;&lt;br/&gt;
        &lt;span style=&quot;color:#881350;&quot;&gt;break&lt;/span&gt;;&lt;br/&gt;
}&lt;/div&gt;

&lt;p&gt;&lt;em&gt;&lt;a href=&quot;http://nevyn.tumblr.com/post/25149461&quot;&gt;&amp;lt; Previous archaeology find&lt;/a&gt; | &lt;a href=&quot;http://nevyn.tumblr.com/post/26804603&quot;&gt;Next archaeology find &amp;gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>huh windows mobile with something that looks like</title>
   <link href="https://nevyn.me/2008/02/12/huh-windows-mobile-with-something-that-looks-like/"/>
   <updated>2008-02-12T00:53:06+01:00</updated>
   <id>https://nevyn.me/2008/02/12/huh-windows-mobile-with-something-that-looks-like</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb5aow748oBHOhcev_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Huh. Windows Mobile with something that looks like a very interesting UI? Meh, it&amp;rsquo;s probably another HTC Touch-ism: nice innovation-y candy crust on top of moldy 80&amp;rsquo;s-looking Windows Mobile UI.
&lt;br/&gt;via &lt;a href=&quot;http://www.engadget.com/2008/02/10/sonyericsson-xperia-x1-qwerty-with-windows-mobile/&quot;&gt;engadget.com&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Not sure why Core Audio isn't an Objective C API</title>
   <link href="https://nevyn.me/2008/02/11/not-sure-why-core-audio-isnt-an-objective-c-api/"/>
   <updated>2008-02-11T21:59:00+01:00</updated>
   <id>https://nevyn.me/2008/02/11/not-sure-why-core-audio-isnt-an-objective-c-api</id>
   <content type="html">&lt;p&gt;It&amp;rsquo;s for performance, right? It&amp;rsquo;s the only good reason I can think of. And, you know, it sounds sensible. I mean, ultra-low latency and all that, you probably don&amp;rsquo;t want that objc dispatch overhead.&lt;/p&gt;

&lt;p&gt;I just did an experiment, however. I dislike working with C APIs, so I&amp;rsquo;m writing Cocoa wrappers for Core Audio, just exposing those pesky Component properties that take five lines to set or get, with simple methods. Suddenly I thought, &amp;ldquo;Wait, what if I try to use an objc method as a render callback? Those require very low latency and are called often. So I should be seeing some of that objc overhead.&amp;rdquo;.&lt;/p&gt;

&lt;p&gt;Very unscientific comparison, comparing a simple sine renderer in c and objc, on an MBP 1.83x2 (source available on request):&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;CPU usage in app using C callback: 3.0%&lt;/li&gt;
 &lt;li&gt;CPU usage in app using ObjC callback: 3.1%&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;This isn&amp;rsquo;t, by far, any compelling evidence that Core Audio should be Objective C; I&amp;rsquo;m just saying it seems more feasible than I originally thought it&amp;rsquo;d be. Also, actually thinking about the problem, I realize that the callback&amp;rsquo;s only called 44100/512 ≈ 86 times a second and has about 10 ms to complete (astronomically long in computer terms).&lt;/p&gt;

&lt;p&gt;But NeXT did it that way, didn&amp;rsquo;t they? I want to remember that NeXT had basically /everything/ in objc, including drivers and audio and such things. So, why not Mac OS X? NeXT was hardly known for being a slow OS. Tell me what I&amp;rsquo;m missing in the comments.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>It’s not enough to slap the Ender’s Game name on just any game—it has to be exciting, memorable, and endlessly replayable</title>
   <link href="https://nevyn.me/2008/02/10/its-not-enough-to-slap-the-enders-game-name-on/"/>
   <updated>2008-02-10T08:17:35+01:00</updated>
   <id>https://nevyn.me/2008/02/10/its-not-enough-to-slap-the-enders-game-name-on</id>
   <content type="html">&lt;blockquote&gt;It&amp;rsquo;s not enough to slap the Ender&amp;rsquo;s Game name on just any game—it has to be exciting, memorable, and endlessly replayable&lt;/blockquote&gt;&amp;#8212;Awesome, an Ender&amp;rsquo;s Game game! Based on the Battle Room concept. An FPS without gravity! Can&amp;rsquo;t wait to play it. &lt;a href=&quot;http://arstechnica.com/journals/thumbs.ars/2008/01/29/the-enemy-gate-is-down-enders-game-games-coming&quot;&gt;Ars Technica: The enemy&amp;rsquo;s gate is DOWN: Unreal-powered Ender&amp;rsquo;s Game incoming&lt;/a&gt; (via &lt;a href=&quot;http://the.taoofmac.com/&quot;&gt;Rui Carmo&lt;/a&gt;)
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/02/09/skont/"/>
   <updated>2008-02-09T23:14:03+01:00</updated>
   <id>https://nevyn.me/2008/02/09/skont</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/675922?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;300&quot; frameborder=&quot;0&quot; title=&quot;Nicklas B&amp;auml;ckstr&amp;ouml;m - Det &amp;auml;r sk&amp;ouml;n. T.&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;(&lt;a href=&quot;http://youtube.com/watch?v=MKN39OJ_CvM&quot;&gt;Original på youtube&lt;/a&gt;, &lt;a href=&quot;http://hjalle.se/blog/2008/02/skon....t/&quot;&gt;via Hjalle&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>via thedailywtfcom</title>
   <link href="https://nevyn.me/2008/02/07/via-thedailywtfcom/"/>
   <updated>2008-02-07T04:16:59+01:00</updated>
   <id>https://nevyn.me/2008/02/07/via-thedailywtfcom</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb53qz3ypBHQHUqRh_500.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;via &lt;a href=&quot;http://thedailywtf.com/Articles/THIS-is-a-Warning-Message!.aspx&quot;&gt;thedailywtf.com&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>the things team are either perfectionists or are</title>
   <link href="https://nevyn.me/2008/02/04/the-things-team-are-either-perfectionists-or-are/"/>
   <updated>2008-02-04T20:55:00+01:00</updated>
   <id>https://nevyn.me/2008/02/04/the-things-team-are-either-perfectionists-or-are</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb50igox124MNRnpc_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;The Things team are either perfectionists or are just very, very indecisive :P &lt;/p&gt;

&lt;p&gt;via &lt;a href=&quot;http://culturedcode.com/things/blog/2008/02/habemus-dialogum-we-have-a-dialog.html&quot;&gt;culturedcode.com&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>apples pages reads microsoft wordfiles better</title>
   <link href="https://nevyn.me/2008/02/04/apples-pages-reads-microsoft-wordfiles-better/"/>
   <updated>2008-02-04T15:59:00+01:00</updated>
   <id>https://nevyn.me/2008/02/04/apples-pages-reads-microsoft-wordfiles-better</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb50krdx44pIj1SZ7_540.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;Apple&amp;rsquo;s &lt;i&gt;Pages&lt;/i&gt; reads Microsoft Wordfiles better than Microsoft Word.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>People procrastinate due to two reasons: The outcome of the task is or has become insignificant to you or because you think that the task itself is bigger than you and therefore you don’t feel comfortable to control it.</title>
   <link href="https://nevyn.me/2008/02/01/people-procrastinate-due-to-two-reasons-the/"/>
   <updated>2008-02-01T17:49:38+01:00</updated>
   <id>https://nevyn.me/2008/02/01/people-procrastinate-due-to-two-reasons-the</id>
   <content type="html">&lt;blockquote&gt;People procrastinate due to two reasons: The outcome of the task is or has become insignificant to you or because you think that the task itself is bigger than you and therefore you don&amp;rsquo;t feel comfortable to control it.&lt;/blockquote&gt;&amp;#8212;David Allen via &amp;ldquo;Stop Procrastination Now.pdf&amp;rdquo; via my girlfriend. Yes, by writing this, I am procrastinating.
</content>
 </entry>
 
 <entry>
   <title>Software Archaeology Find #1: Labyrinths</title>
   <link href="https://nevyn.me/2008/01/31/software-archaeology-find-1-labyrinths/"/>
   <updated>2008-01-31T16:48:00+01:00</updated>
   <id>https://nevyn.me/2008/01/31/software-archaeology-find-1-labyrinths</id>
   <content type="html">&lt;p&gt;Just a sample of the wonderful file structure we&amp;rsquo;re trying to make sense of and reorganize from an old project.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;E:\archive\backup\tsr\old\x. en knippe blandade prisma-virtue-old-new\discern\2002-09-10 current_build\current_build_old\2002-08-01 current_build\sessions\dice\textures\house.jpg
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;&lt;a href=&quot;http://nevyn.tumblr.com/post/26157931&quot;&gt;Next archaeology find &amp;gt;&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>96 Characters Ought To Be Enough For Anyone — Thought Palace</title>
   <link href="https://nevyn.me/2008/01/31/96-characters-ought-to-be-enough-for-anyone/"/>
   <updated>2008-01-31T07:31:13+01:00</updated>
   <id>https://nevyn.me/2008/01/31/96-characters-ought-to-be-enough-for-anyone</id>
   <content type="html">&lt;a href=&quot;http://mooseyard.com/Jens/2008/01/96-characters-ought-to-be-enough-for-anyone/&quot;&gt;96 Characters Ought To Be Enough For Anyone — Thought Palace&lt;/a&gt;&lt;br/&gt;&lt;p&gt;I really like his third footnote (thanks to Ahruman from #macdev for showing me this nugget)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>real time acoustics modeling in games 2d</title>
   <link href="https://nevyn.me/2008/01/30/real-time-acoustics-modeling-in-games-2d/"/>
   <updated>2008-01-30T14:13:00+01:00</updated>
   <id>https://nevyn.me/2008/01/30/real-time-acoustics-modeling-in-games-2d</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb4tbr2cqeNxTbMw4_r1_500.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://nevyn.nu/realtime_acoustics/&quot;&gt;Real-Time Acoustics Modeling in Games&lt;/a&gt;: 2D prototype, almost done. Yes, this is the application which uses CoreAnimation, NSOperationQueue and the garbage collector all at once.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>These are my children. They join me on all my journeys.</title>
   <link href="https://nevyn.me/2008/01/30/these-are-my-children-they-join-me-on-all-my/"/>
   <updated>2008-01-30T01:21:00+01:00</updated>
   <id>https://nevyn.me/2008/01/30/these-are-my-children-they-join-me-on-all-my</id>
   <content type="html">&lt;p&gt;So I use a lot of small utility classes that just jump between projects. Not enough to warrant a library, but still code I can&amp;rsquo;t live without. For example, ary(id first, &amp;hellip;) instead of [NSArray arrayWithObjects:&amp;hellip;], dict(id key, id value, &amp;hellip;) for a dictionary, sf(NSString *format, &amp;hellip;) instead of [NSString stringWithFormat:&amp;hellip;], a zooming and delta-scrollable CALayer, vector class with most linear algebra, line class, simple macros to turn of CoreAnimation animations&amp;hellip; You get the point.&lt;/p&gt;

&lt;p&gt;Anyways, from my last blog entry you might have gathered that NSOperationQueue, CoreAnimation and garbage collection don&amp;rsquo;t really work well together. It seems to be a problem with ensuring that only a single is committing changes/transactions at a time (hence a crash in CALayerEnsureTransaction). NSOperationQueue sets up a full thread with a run loop for every single operation. I have no idea why they chose this wasteful approach; personally, I&amp;rsquo;d reuse a set of threads. And since NSOperationQueue isn&amp;rsquo;t working, and my entire acoustic modeling simulation is built around NSOperations, I decided to do just that. Thus, FakeOperationQueue joins my army of utility classes. It has the exact same interface as NSOperationQueue (almost, I only covered what I use), and works on NSOperations. Note that it doesn&amp;rsquo;t consider dependencies! It&amp;rsquo;s a very simple class, only a hundred lines of code.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://twitter.com/rentzsch/statuses/656831652&quot; title=&quot;Twitter / rentzsch: @nevyn WANT&quot;&gt;Rentzsch seemed somewhat interested in my fake queue&lt;/a&gt;. Thus, I decided I might as well put my stuff online.&lt;/p&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://thirdcog.eu/code/FakeOperationQueue.m&quot; title=&quot;&quot;&gt;FakeOperationQueue.m&lt;/a&gt; &lt;a href=&quot;http://thirdcog.eu/code/FakeOperationQueue.h&quot; title=&quot;&quot;&gt;FakeOperationQueue.h&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://thirdcog.eu/code/NCCommon.m&quot; title=&quot;&quot;&gt;NCCommon.m&lt;/a&gt; &lt;a href=&quot;http://thirdcog.eu/code/NCCommon.h&quot; title=&quot;&quot;&gt;NCCommon.h&lt;/a&gt; &amp;ndash; ary, sf, dict; foreact macro stolen from somewhere; probably more&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://thirdcog.eu/code/BNZVector.m&quot; title=&quot;&quot;&gt;BNZVector.m&lt;/a&gt; &lt;a href=&quot;http://thirdcog.eu/code/BNZVector.h&quot; title=&quot;&quot;&gt;BNZVector.h&lt;/a&gt; (I was planning to join a contest for BNZ but I enver got around to it, hence the prefix)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://thirdcog.eu/code/BNZLine.m&quot; title=&quot;&quot;&gt;BNZLine.m&lt;/a&gt; &lt;a href=&quot;http://thirdcog.eu/code/BNZLine.h&quot; title=&quot;&quot;&gt;BNZLine.h&lt;/a&gt; &lt;a href=&quot;http://thirdcog.eu/code/BNZLineTest.m&quot; title=&quot;&quot;&gt;BNZLineTest.m&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://thirdcog.eu/code/CALayerAdditions.m&quot; title=&quot;&quot;&gt;CALayerAdditions.m&lt;/a&gt; &lt;a href=&quot;http://thirdcog.eu/code/CALayerAdditions.h&quot; title=&quot;&quot;&gt;CALayerAdditions.h&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;http://thirdcog.eu/code/CAScrollDeltaLayer.m&quot; title=&quot;&quot;&gt;CAScrollDeltaLayer.m&lt;/a&gt; &lt;a href=&quot;http://thirdcog.eu/code/CAScrollDeltaLayer.h&quot; title=&quot;&quot;&gt;CAScrollDeltaLayer.h&lt;/a&gt; &amp;ndash; Sort of embarrasing code, I&amp;rsquo;m probably mixing some spaces up, but it&amp;rsquo;s very handy when scrolling from -[NSResponder mouseDragged] with mouse deltas&lt;/li&gt; &lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>I do not trust the Objective-C 2.0 Garbage Collector</title>
   <link href="https://nevyn.me/2008/01/25/i-do-not-trust-the-objective-c-20-garbage/"/>
   <updated>2008-01-25T00:55:06+01:00</updated>
   <id>https://nevyn.me/2008/01/25/i-do-not-trust-the-objective-c-20-garbage</id>
   <content type="html">&lt;p&gt;Why? Because I crash inside the collector thread. And because it&amp;rsquo;s young. And because it seems I&amp;rsquo;m the only one on this planet building an application involving both the GC, CoreAnimation and NSOperationQueue. They&amp;rsquo;re a perfect fit, but no one has ever crashed where I do, it seems.&lt;/p&gt;

&lt;p&gt;For example, let this be the first and only hit on google for CALayerEnsureTransaction: CALayerEnsureTransaction.&lt;/p&gt;

&lt;p&gt;Another example. Let this be the first and only hit on google for Auto::Thread::scan_other_thread: Auto::Thread::scan_other_thread.&lt;/p&gt;

&lt;p&gt;And it was so.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Yes, I&amp;rsquo;m frustrated.&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>via katebeatoncom awesome</title>
   <link href="https://nevyn.me/2008/01/22/via-katebeatoncom-awesome/"/>
   <updated>2008-01-22T21:04:09+01:00</updated>
   <id>https://nevyn.me/2008/01/22/via-katebeatoncom-awesome</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb4hy1ri7fQvCkKro_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;via &lt;a href=&quot;http://katebeaton.com/Site/History_Project.html&quot;&gt;katebeaton.com&lt;/a&gt;. Awesome!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>I have newprojectitis</title>
   <link href="https://nevyn.me/2008/01/22/i-have-newprojectitis/"/>
   <updated>2008-01-22T04:40:00+01:00</updated>
   <id>https://nevyn.me/2008/01/22/i-have-newprojectitis</id>
   <content type="html">&lt;section&gt;&lt;dialog&gt;&lt;dt&gt;Jan:&lt;/dt&gt;&lt;dd&gt;[exams not going good]&lt;/dd&gt;&lt;dt&gt;nevyn:&lt;/dt&gt;&lt;dd&gt;ah... boring education?&lt;/dd&gt;&lt;dt&gt;Jan:&lt;/dt&gt;&lt;dd&gt;[secret project name] :)&lt;/dd&gt;&lt;dt&gt;nevyn:&lt;/dt&gt;&lt;dd&gt;hehe&lt;/dd&gt;&lt;dt&gt;nevyn:&lt;/dt&gt;&lt;dd&gt;goddamn coding is so much fun&lt;/dd&gt;&lt;dt&gt;nevyn:&lt;/dt&gt;&lt;dd&gt;I started a new game today :P&lt;/dd&gt;&lt;dt&gt;Jan:&lt;/dt&gt;&lt;dd&gt;hehe, you have serious newprojectitis&lt;/dd&gt;&lt;/dialog&gt;&lt;/section&gt;
</content>
 </entry>
 
 <entry>
   <title>Pullsar: Starting up.</title>
   <link href="https://nevyn.me/2008/01/22/pullsar-starting-up/"/>
   <updated>2008-01-22T01:10:00+01:00</updated>
   <id>https://nevyn.me/2008/01/22/pullsar-starting-up</id>
   <content type="html">&lt;p&gt;Pull Stars from Mario Galaxy is just way too much fun, don&amp;rsquo;t you think? So do I. So I set out to make a game based on that very concept.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m doing it in the same vein of openness as &lt;a href=&quot;http://wantonhubris.com/blog/&quot;&gt;Warren Marshall over at Wanton Hubris&lt;/a&gt;, where he documented every step of making his &lt;a href=&quot;http://wantonhubris.com/toetag/ToeTag.html&quot;&gt;Quake 1 editor ToeTag&lt;/a&gt;. Okay, maybe I&amp;rsquo;m taking it a step further and yet another step too far; I recorded the full hour of development I put into this first prototype. In it you might find some neat Core Animation tricks, or at least get you started on your own CA apps. Note though that I&amp;rsquo;m using a View as a Controller and doing some generally bad design, just to get started quickly. Also, I&amp;rsquo;ll try to cut it down to the essentials in maybe a five min vid when I have time.&lt;/p&gt;

&lt;p&gt;Check out the project site with all the material at &lt;a href=&quot;http://thirdcog.eu/apps/pullsar&quot;&gt;http://thirdcog.eu/apps/pullsar&lt;/a&gt;. &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/22/great-soldering-advice-from-curiousinventor/"/>
   <updated>2008-01-22T01:08:04+01:00</updated>
   <id>https://nevyn.me/2008/01/22/great-soldering-advice-from-curiousinventor</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/3NN7UGWYmBY?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Great soldering advice from CuriousInventor. &amp;ldquo;Surface Mount Soldering 101&amp;rdquo;. I&amp;rsquo;m really not good at soldering, so I&amp;rsquo;ll definitely get the equiment he recommends and try his techniques next time&amp;hellip;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Three Points On Error Handling</title>
   <link href="https://nevyn.me/2008/01/21/three-points-on-error-handling/"/>
   <updated>2008-01-21T08:09:00+01:00</updated>
   <id>https://nevyn.me/2008/01/21/three-points-on-error-handling</id>
   <content type="html">&lt;p&gt;I&amp;rsquo;ve been ranting on Twitter lately about how to do error checking &lt;em&gt;the wrong way&lt;/em&gt;. Coincidentally, the &lt;a href=&quot;http://www.macdevnet.com/index.php/podcasts/mdr/38-mdr/138-mdr003&quot; title=&quot;MDR003: Exceptional Errors&quot;&gt;latest topic on Mac Developer Roundtable&lt;/a&gt; was about just that, error handling.
&lt;/p&gt;

&lt;p&gt;I don&amp;rsquo;t think this episode of MDR was very interesting. It was essentially an overview of the three common error handling strategies (exceptions, enum returns, pass-by-ref error object), and some general C++/Java likeage from Uli (which is not a compliment :P). However, it got me writing a real blog entry, which is a good thing :)
&lt;/p&gt;

&lt;p&gt;So: Three things kept repeating in my head while I listened to MDR#3, hoping that someone&amp;rsquo;d mention it so that we can rid the world of more bad code.
&lt;/p&gt;

&lt;br/&gt;&lt;p&gt;&lt;strong&gt;First off&lt;/strong&gt;, stay far far away from nested ifs. I don&amp;rsquo;t remember which Mac dev blog I read it on, maybe &lt;a href=&quot;http://www.wilshipley.com/blog/&quot; title=&quot;Call Me Fishmeal.&quot;&gt;Wil Shipley&lt;/a&gt;&amp;rsquo;s or &lt;a href=&quot;http://ridiculousfish.com/blog/&quot; title=&quot;ridiculous_fish&quot;&gt;ridiculous_fish&lt;/a&gt;, but whoever it was recommended to always try to keep the code as far to the left as possible. Use the outermost block for the common, correct case, and use inner blocks for error cases. What I mean by this is, check for the error condition and treat it in-place, don&amp;rsquo;t check for the not-error case and treat the error in an else far far away. An example is in order&amp;hellip;
&lt;/p&gt;

&lt;pre&gt;&lt;code class=&quot;cpp&quot;&gt;
// Don't:
void collectPhazon() {
  PhazonDetector *detector = findNearestPhazonDetector();
  if(detector) {
    Phazon *nearestPhazon = detector-&amp;gt;scanForPhazon();
    if(nearestPhazon) {
      sendPhazonCollectorDrone(nearestPhazon-&amp;gt;position());
    } else {
      beep(kNoPhazonFoundBeep);
    }
  } else {
    beep(kMajorlyCatastrophicErrorBeep);
  }
}

// Do:
void collectPhazon() {
  PhazonDetector *detector = findNearestPhazonDetector();
  if(!detector) { beep(kMajorlyCatastrophicErrorBeep); return; }
  
  Phazon *nearestPhazon = detector-&amp;gt;scanForPhazon();
  if(!nearestPhazon) { beep(kNoPhazonFoundBeep); return; }
  
  sendPhazonCollectorDrone(nearestPhazon-&amp;gt;position());
}
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;This also applies to smaller scopes, such as for and while loops. Instead of having a big &lt;em&gt;if&lt;/em&gt; block inside the loop, say &lt;em&gt;if(error_condition) continue;&lt;/em&gt;. Feel free to use gotos as well, eg:
&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;cpp&quot;&gt;
  Baz *a() {
    ...
    if(error) goto a_cleanup;

    return myBaz;
  a_cleanup:
    free(myBaz);
    fclose(bazHandle);
    return NULL;
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;The same effect can be achieved with try-catch-finally, so use whichever makes your code the easiest to understand.
&lt;/p&gt;

&lt;br/&gt;&lt;p&gt;&lt;strong&gt;Secondly&lt;/strong&gt;, never use just a boolean NO or a nil return value as an error return for a method or function that can fail in more than one way. If you do, the user of your library (or yourself, if it&amp;rsquo;s in your app!) can&amp;rsquo;t know what actually went wrong.
&lt;/p&gt;

&lt;p&gt;This leads to error dialogs such as &amp;ldquo;Couldn&amp;rsquo;t connect to iPod&amp;rdquo; &amp;ndash; why not? Because one isn&amp;rsquo;t connected? Because it&amp;rsquo;s the wrong model? Because I hit it with a hammer? The sentence is lacking a &amp;lsquo;because&amp;rsquo; because the reason is hidden behind bad abstractions.
&lt;/p&gt;

&lt;p&gt;This is where NSError is your friend, and I think that this is the answer to Scotty&amp;rsquo;s burning question: 'When should I use NSError&amp;rsquo;? The answer is simple: whenver there&amp;rsquo;s more than one way to fail; whenver a NO/nil can mean more than one kind of failure.
&lt;/p&gt;

&lt;br/&gt;&lt;p&gt;&lt;strong&gt;Third&lt;/strong&gt;, and this was actually mentioned, if you&amp;rsquo;re checking for errors, make sure you understand /why/ you&amp;rsquo;re checking for that error, and what the logical response is.
&lt;/p&gt;

&lt;p&gt;This snippet from Apple&amp;rsquo;s sample &amp;ldquo;ComplexPlayThru&amp;rdquo; is a perfect example of how not to do it (ComplexPlayThru.cpp, line 353-354):&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;cpp&quot;&gt;
  comp = FindNextComponent(NULL, &amp;amp;desc);
  if (comp == NULL) exit (-1);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Nice! My app suddenly disappeared with no explanation whatsoever! And I&amp;rsquo;m sure no other part of the app uses the error code &amp;rsquo;-1&amp;rsquo;! Awesome. Also, the component that they&amp;rsquo;re looking for is an Apple default, must-be-there-or-any-sound-app-will-crash component. It&amp;rsquo;s safe to assume that it will always be there, and just skip the error check.
&lt;/p&gt;
&lt;p&gt;This also goes against Gus&amp;rsquo; advice: please &lt;em&gt;don&amp;rsquo;t&lt;/em&gt; just copy any sample code you find, even if it&amp;rsquo;s from Apple.
&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Guitar Wizard</title>
   <link href="https://nevyn.me/2008/01/21/guitar-wizard/"/>
   <updated>2008-01-21T04:48:54+01:00</updated>
   <id>https://nevyn.me/2008/01/21/guitar-wizard</id>
   <content type="html">&lt;a href=&quot;http://m3tjanster.idg.se/m3tv/2008_01_07_ces10_GuitarWizard.asp&quot;&gt;Guitar Wizard&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Nice. Guitar Hero with a real guitar! So, once I master GH3, maybe I can get this and /actually/ learn to play the guitar ;) Also, check out &lt;a href=&quot;http://media.musicwizard.com/movies/pw_4step.html&quot;&gt;Piano Wizard&lt;/a&gt;. What I don&amp;rsquo;t get though, is why market it for kids when it looks great for anyone who wants to learn to play the piano?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>IT-chefen som slutade skratta</title>
   <link href="https://nevyn.me/2008/01/21/it-chefen-som-slutade-skratta/"/>
   <updated>2008-01-21T01:53:00+01:00</updated>
   <id>https://nevyn.me/2008/01/21/it-chefen-som-slutade-skratta</id>
   <content type="html">&lt;a href=&quot;http://www.dn.se/DNet/jsp/polopoly.jsp?d=3130&amp;a=734791&quot;&gt;IT-chefen som slutade skratta&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Det är lite som Per säger, ibland vill man bara bli potatisodlare :P&lt;/p&gt;

&lt;p&gt;Fast just att jobba inom management är väl det sista jag kan tänka mig&amp;hellip; Heléne i artikeln: &amp;ldquo;[det kändes] som om jag inte gjorde något som var till någon nytta&amp;rdquo;. &lt;a href=&quot;http://the.taoofmac.com&quot;&gt;Rui Carmo&lt;/a&gt; brukar säga att hans liv är en exakt replika av &lt;a href=&quot;http://dilbert.com&quot;&gt;Dilbert&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/20/head-tracking-step-1-wiimote-point-tracking-in/"/>
   <updated>2008-01-20T01:40:00+01:00</updated>
   <id>https://nevyn.me/2008/01/20/head-tracking-step-1-wiimote-point-tracking-in</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/619160?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;384&quot; frameborder=&quot;0&quot; title=&quot;Head tracking: Step 1&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Head tracking, step 1: Wiimote point tracking in 101 lines of code.&lt;br/&gt;
(Music is Frank Martiniq - Cellar Door)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>NSURLConnection, rails, apache, spaces in URLs and &quot;Your browser sent a request that this server could not understand&quot;</title>
   <link href="https://nevyn.me/2008/01/19/nsurlconnection-rails-apache-spaces-in-urls-and/"/>
   <updated>2008-01-19T07:10:00+01:00</updated>
   <id>https://nevyn.me/2008/01/19/nsurlconnection-rails-apache-spaces-in-urls-and</id>
   <content type="html">&lt;p&gt;My Rails application uses redirect_to at one point in my code where it redirects to a pdf document on an apache server. The URL that it redirects to contains spaces. URLs may not contain spaces. redirect_to does not escape these spaces, but issues a &amp;lsquo;302 Found&amp;rsquo; redirect response with the unescaped URL.&lt;/p&gt;

&lt;p&gt;When my Cocoa application receives this redirect request through the currently running NSURLConnection, it follows the new url. In 10.4, it escaped the URL before sending the GET request. In 10.5, this is no longer the case, and apache (correctly) barfs on the request with
&lt;/p&gt;&lt;blockquote&gt;
&lt;b&gt;Bad Request&lt;/b&gt;
&lt;p&gt;Your browser sent a request that this server could not understand.&lt;/p&gt;
&lt;p&gt;The request line contained invalid characters following the protocol string.&lt;/p&gt;
&lt;/blockquote&gt;

The solution is simple: URI::escape the URL before redirecting to it. The big question however, is: &lt;b&gt;Is this a bug in my code, in Rails, or in Cocoa?&lt;/b&gt;

&lt;p&gt;I&amp;rsquo;m guessing first or second; I&amp;rsquo;m supposing there&amp;rsquo;s a very good reason why Apple chose to change the behaviour of NSURLConnection. Also, the Rails documentation &lt;i&gt;does&lt;/i&gt; say, &lt;q&gt;String starting with protocol:// (like http://): Is passed straight through as the target for redirection&lt;/q&gt;, which would put the responsibility square on me. However, Rails &lt;em&gt;is&lt;/em&gt; generating an invalid response, so I&amp;rsquo;ll go with blaming rails.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>AOL adopting XMPP aka Jabber</title>
   <link href="https://nevyn.me/2008/01/18/aol-adopting-xmpp-aka-jabber/"/>
   <updated>2008-01-18T23:02:16+01:00</updated>
   <id>https://nevyn.me/2008/01/18/aol-adopting-xmpp-aka-jabber</id>
   <content type="html">&lt;a href=&quot;http://florianjensen.com/2008/01/17/aol-adopting-xmpp-aka-jabber/&quot;&gt;AOL adopting XMPP aka Jabber&lt;/a&gt;&lt;br/&gt;&lt;p&gt;AOL is obviously one step ahead, in any case. A giant leap, really, not just opening the protocol but changing to a completely OSS protocol. Nice!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Messenger 9 API unveiled at Georgia Tech presentation</title>
   <link href="https://nevyn.me/2008/01/18/messenger-9-api-unveiled-at-georgia-tech/"/>
   <updated>2008-01-18T23:01:17+01:00</updated>
   <id>https://nevyn.me/2008/01/18/messenger-9-api-unveiled-at-georgia-tech</id>
   <content type="html">&lt;a href=&quot;http://www.liveside.net/blogs/main/archive/2007/10/31/messenger-9-gtalk-integration-messenger-api-new-client-for-mac-os-x-news-unveiled-at-georgia-tech-presentation-whew.aspx&quot;&gt;Messenger 9 API unveiled at Georgia Tech presentation&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Am I reading this right? Is Microsoft opening up their MSN protocol? No more reverse engineering?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>taken with my iphone when walking to school</title>
   <link href="https://nevyn.me/2008/01/16/taken-with-my-iphone-when-walking-to-school/"/>
   <updated>2008-01-16T22:58:00+01:00</updated>
   <id>https://nevyn.me/2008/01/16/taken-with-my-iphone-when-walking-to-school</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb49hietov5FcxOhT_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Taken with my iPhone when walking to school.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>me my girlfriend and some neighbors gathered to</title>
   <link href="https://nevyn.me/2008/01/16/me-my-girlfriend-and-some-neighbors-gathered-to/"/>
   <updated>2008-01-16T22:57:00+01:00</updated>
   <id>https://nevyn.me/2008/01/16/me-my-girlfriend-and-some-neighbors-gathered-to</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb49hh1qcADC3TTiJ_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Me, my girlfriend, and some neighbors gathered to &amp;ldquo;watch&amp;rdquo; MacWorld and the MacBook Air announcement &amp;ndash; which meant refreshing macrumors.com and following the livechatting on #macintosh on irc.arstechnica.com, all on my HDTV.&lt;/p&gt;

&lt;p&gt;Yes, we are nerds :P&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/11/welcome-voxar-to-the-world-of-twitter/"/>
   <updated>2008-01-11T10:23:41+01:00</updated>
   <id>https://nevyn.me/2008/01/11/welcome-voxar-to-the-world-of-twitter</id>
   <content type="html">&lt;p&gt;Welcome, @voxar, to the world of Twitter :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/11/i-second-rogueamoeba-airfoil-3-is-awesome-been/"/>
   <updated>2008-01-11T08:51:26+01:00</updated>
   <id>https://nevyn.me/2008/01/11/i-second-rogueamoeba-airfoil-3-is-awesome-been</id>
   <content type="html">&lt;p&gt;I second @RogueAmoeba &amp;ndash; Airfoil 3 IS awesome! Been using it for months. It can do 0.2 sec latency if you only transmit to computers.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/11/wtf-textedit-just-did-a-get-a-getattrlist-on-all/"/>
   <updated>2008-01-11T08:45:34+01:00</updated>
   <id>https://nevyn.me/2008/01/11/wtf-textedit-just-did-a-get-a-getattrlist-on-all</id>
   <content type="html">&lt;p&gt;WTF? TextEdit just did a get a getattrlist on all (?) files in my /Games folder, for no obvious reason. I haven&amp;rsquo;t used TextEdit in hours.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/11/todays-adventure-using-the-computer-with/"/>
   <updated>2008-01-11T08:22:21+01:00</updated>
   <id>https://nevyn.me/2008/01/11/todays-adventure-using-the-computer-with</id>
   <content type="html">&lt;p&gt;Today&amp;rsquo;s adventure: Using the computer with fs_usage in the background all day. I knew my computer swapped, but *that much*? Ouch.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/11/23467336/"/>
   <updated>2008-01-11T05:12:00+01:00</updated>
   <id>https://nevyn.me/2008/01/11/23467336</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb41a7lvzAAd0kWvL_r1_500.png&quot;/&gt;&lt;br/&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/11/why-on-earth-do-i-have-to-tell-spotlight-not-to/"/>
   <updated>2008-01-11T04:45:55+01:00</updated>
   <id>https://nevyn.me/2008/01/11/why-on-earth-do-i-have-to-tell-spotlight-not-to</id>
   <content type="html">&lt;p&gt;Why on earth do I have to tell Spotlight not to index my TimeMachine *backup*?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/10/bmf-two-three-years-ago-a-few-classmates-i-spoke/"/>
   <updated>2008-01-10T12:28:28+01:00</updated>
   <id>https://nevyn.me/2008/01/10/bmf-two-three-years-ago-a-few-classmates-i-spoke</id>
   <content type="html">&lt;p&gt;@bmf two-three years ago a few classmates I spoke with thought the Internet was a big, big computer somewhere. Explaining didn&amp;rsquo;t help :P&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/10/damnit-why-doesnt-aulab-allow-using-many-devices/"/>
   <updated>2008-01-10T09:42:21+01:00</updated>
   <id>https://nevyn.me/2008/01/10/damnit-why-doesnt-aulab-allow-using-many-devices</id>
   <content type="html">&lt;p&gt;Damnit! Why doesn&amp;rsquo;t AULab allow using many devices at once? I want to input from one audio device and output to another.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/10/airfoil-users-rejoice/"/>
   <updated>2008-01-10T09:21:19+01:00</updated>
   <id>https://nevyn.me/2008/01/10/airfoil-users-rejoice</id>
   <content type="html">&lt;p&gt;Airfoil users, rejoice! &lt;a href=&quot;http://thirdcog.eu/apps/soundflower&quot;&gt;http://thirdcog.eu/apps/soundflower&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/10/rentzsch-fission/"/>
   <updated>2008-01-10T07:58:37+01:00</updated>
   <id>https://nevyn.me/2008/01/10/rentzsch-fission</id>
   <content type="html">&lt;p&gt;@rentzsch: Fission&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Soundflower with volume controls</title>
   <link href="https://nevyn.me/2008/01/10/soundflower-with-volume-controls/"/>
   <updated>2008-01-10T03:08:00+01:00</updated>
   <id>https://nevyn.me/2008/01/10/soundflower-with-volume-controls</id>
   <content type="html">&lt;a href=&quot;http://thirdcog.eu/apps/soundflower&quot;&gt;Soundflower with volume controls&lt;/a&gt;&lt;br/&gt;&lt;p&gt;I spent a day or two procrastinating, writing a patch for Soundflower I&amp;rsquo;ve wanted to write for years. Adds volume, gain, balance and mute support to all Soundflower virtual sound devices.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/09/paniccpu-0-caller-0x001a7bed-kernel-trap-at/"/>
   <updated>2008-01-09T20:39:15+01:00</updated>
   <id>https://nevyn.me/2008/01/09/paniccpu-0-caller-0x001a7bed-kernel-trap-at</id>
   <content type="html">&lt;p&gt;panic(cpu 0 caller 0x001A7BED): Kernel trap at 0x343121d1, type 14=page fault. All this just to get surround sound *with* volume controls.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/09/just-got-my-first-kernel-panic-from-driver/"/>
   <updated>2008-01-09T12:12:23+01:00</updated>
   <id>https://nevyn.me/2008/01/09/just-got-my-first-kernel-panic-from-driver</id>
   <content type="html">&lt;p&gt;Just got my first kernel panic from driver development. yay! Any ideas on how to make this less painful? (adding vol ctrl to soundflower)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>the dinovo mini has a dedicated ctrl alt del</title>
   <link href="https://nevyn.me/2008/01/08/the-dinovo-mini-has-a-dedicated-ctrl-alt-del/"/>
   <updated>2008-01-08T06:57:00+01:00</updated>
   <id>https://nevyn.me/2008/01/08/the-dinovo-mini-has-a-dedicated-ctrl-alt-del</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb3x3npc0Iyj3OZV0_500.png&quot;/&gt;&lt;br/&gt;&lt;p&gt;The &lt;a href=&quot;http://www.logitech.com/index.cfm/keyboards/keyboard/devices/3848&amp;amp;cl=us,en&quot;&gt;diNovo Mini&lt;/a&gt; has a dedicated ctrl-alt-del button. Need I say more?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Day Break: Best show I've seen in 2007</title>
   <link href="https://nevyn.me/2008/01/08/day-break-best-show-ive-seen-in-2007/"/>
   <updated>2008-01-08T01:55:58+01:00</updated>
   <id>https://nevyn.me/2008/01/08/day-break-best-show-ive-seen-in-2007</id>
   <content type="html">&lt;a href=&quot;http://www.imdb.com/title/tt0801425/&quot;&gt;Day Break: Best show I've seen in 2007&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Better than Heroes and Lost imo. It just gets better and better for each episode, and the ending is awesome.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>is cynergy blatantly ripping off apples bonjour</title>
   <link href="https://nevyn.me/2008/01/04/is-cynergy-blatantly-ripping-off-apples-bonjour/"/>
   <updated>2008-01-04T05:51:00+01:00</updated>
   <id>https://nevyn.me/2008/01/04/is-cynergy-blatantly-ripping-off-apples-bonjour</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb3rbj04bAsfnuR37_r1_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Is Cynergy blatantly ripping off Apple&amp;rsquo;s Bonjour logo, or is the shape too simple?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/03/am-i-the-only-one-getting-kcgerrorillegalargument/"/>
   <updated>2008-01-03T11:50:31+01:00</updated>
   <id>https://nevyn.me/2008/01/03/am-i-the-only-one-getting-kcgerrorillegalargument</id>
   <content type="html">&lt;p&gt;Am I the only one getting kCGErrorIllegalArgument in my windowserver.log every time I switch windows?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Mr. Random Is My Friend</title>
   <link href="https://nevyn.me/2008/01/02/mr-random-is-my-friend/"/>
   <updated>2008-01-02T05:40:00+01:00</updated>
   <id>https://nevyn.me/2008/01/02/mr-random-is-my-friend</id>
   <content type="html">&lt;p&gt;
  This is Mr. Random.
&lt;/p&gt;&lt;pre&gt;
&lt;code class=&quot;ruby&quot;&gt;21:35:26 nevyn@xephon:~$ cat bin/rnd
  #!/usr/bin/env ruby
  class Array
    def random
      self[Kernel.rand(self.length)]
    end
  end


  if $0 == __FILE__
    puts $*.random
  end
&lt;/code&gt;
&lt;/pre&gt;


&lt;p&gt;
  This is how you use Mr. Random.
&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;21:38:38 nevyn@xephon:~$ rnd pizza chinese leftovers
leftovers &lt;/code&gt;
&lt;/pre&gt;

&lt;p&gt;
  The best thing is how it makes you realize what you &lt;em&gt;don&amp;rsquo;t&lt;/em&gt; want.
&lt;/p&gt;&lt;pre&gt;
&lt;code&gt;21:38:50 nevyn@xephon:~$ rnd pizza
pizza &lt;/code&gt;
&lt;/pre&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2008/01/02/also-itd-be-interesting-to-instrument-what/"/>
   <updated>2008-01-02T03:59:08+01:00</updated>
   <id>https://nevyn.me/2008/01/02/also-itd-be-interesting-to-instrument-what</id>
   <content type="html">&lt;p&gt;Also, it&amp;rsquo;d be interesting to instrument what happens when I log in&amp;hellip; It takes more than five minutes before the hd stops thrashing&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Stepwise has been taken down</title>
   <link href="https://nevyn.me/2007/12/24/stepwise-has-been-taken-down/"/>
   <updated>2007-12-24T19:47:50+01:00</updated>
   <id>https://nevyn.me/2007/12/24/stepwise-has-been-taken-down</id>
   <content type="html">&lt;a href=&quot;http://www.stepwise.com/&quot;&gt;Stepwise has been taken down&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Wow. I knew Rixstep was an idiot; I didn&amp;rsquo;t know he was an ass as well.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/12/23/i-wonder-if-those-patches-are-available-for/"/>
   <updated>2007-12-23T19:53:20+01:00</updated>
   <id>https://nevyn.me/2007/12/23/i-wonder-if-those-patches-are-available-for</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;225&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/WhXOPDqVYBE?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;I wonder if those patches are available for download somewhere. That would be awesome.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/12/10/wont-you-blog-about-this-song/"/>
   <updated>2007-12-10T08:36:14+01:00</updated>
   <id>https://nevyn.me/2007/12/10/wont-you-blog-about-this-song</id>
   <content type="html">&lt;p&gt;Won&amp;rsquo;t you blog about this song?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/12/03/david-and-dania-performing-their-quick-change/"/>
   <updated>2007-12-03T05:56:18+01:00</updated>
   <id>https://nevyn.me/2007/12/03/david-and-dania-performing-their-quick-change</id>
   <content type="html">&lt;p&gt;David and Dania performing their quick change act  on America&amp;rsquo;s Got Talent &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>saturn ciclopsorg via presentation zen</title>
   <link href="https://nevyn.me/2007/11/24/saturn-ciclopsorg-via-presentation-zen/"/>
   <updated>2007-11-24T20:28:00+01:00</updated>
   <id>https://nevyn.me/2007/11/24/saturn-ciclopsorg-via-presentation-zen</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb25lsrje6NJE8lyj_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Saturn, &lt;a href=&quot;http://ciclops.org/view.php?id=2230&amp;amp;flash=1&amp;amp;js=1&amp;amp;navjs=1&quot;&gt;ciclops.org&lt;/a&gt; via &lt;a href=&quot;http://www.presentationzen.com/&quot;&gt;Presentation Zen&lt;/a&gt; &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/11/24/ted-talks-larry-lessig-how-creativity-is/"/>
   <updated>2007-11-24T20:10:55+01:00</updated>
   <id>https://nevyn.me/2007/11/24/ted-talks-larry-lessig-how-creativity-is</id>
   <content type="html">&lt;!--cut and paste--&gt;&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0&quot; width=&quot;400&quot; height=&quot;264&quot; id=&quot;VE_Player&quot; align=&quot;middle&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.videoegg.com/ted/flash/loader.swf&quot;&gt;&lt;PARAM NAME=&quot;FlashVars&quot; VALUE=&quot;bgColor=FFFFFF&amp;file=http://static.videoegg.com/ted/movies/LARRYLESSIG-2007_high.flv&amp;autoPlay=false&amp;fullscreenURL=http://static.videoegg.com/ted/flash/fullscreen.html&amp;forcePlay=false&amp;logo=&amp;allowFullscreen=true&quot;&gt;&lt;param name=&quot;quality&quot; value=&quot;high&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#FFFFFF&quot;&gt;&lt;param name=&quot;scale&quot; value=&quot;noscale&quot;&gt;&lt;param name=&quot;wmode&quot; value=&quot;window&quot;&gt;&lt;embed src=&quot;http://static.videoegg.com/ted/flash/loader.swf&quot; FlashVars=&quot;bgColor=FFFFFF&amp;file=http://static.videoegg.com/ted/movies/LARRYLESSIG-2007_high.flv&amp;autoPlay=false&amp;fullscreenURL=http://static.videoegg.com/ted/flash/fullscreen.html&amp;forcePlay=false&amp;logo=&amp;allowFullscreen=true&quot; quality=&quot;high&quot; allowScriptAccess=&quot;always&quot; bgcolor=&quot;#FFFFFF&quot; scale=&quot;noscale&quot; wmode=&quot;window&quot; width=&quot;400&quot; height=&quot;264&quot; name=&quot;VE_Player&quot; align=&quot;middle&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;&gt;&lt;/object&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.ted.com/index.php/talks/view/id/187&quot;&gt;TED | Talks | Larry Lessig: How creativity is being strangled by the law (video)&lt;/a&gt;. Best use of presentation slideware I&amp;rsquo;ve ever seen.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/11/24/severn-suzuki-giving-an-amazing-speak-at-un-earth/"/>
   <updated>2007-11-24T19:37:51+01:00</updated>
   <id>https://nevyn.me/2007/11/24/severn-suzuki-giving-an-amazing-speak-at-un-earth</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/C2g473JWAEg?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Severn Suzuki, giving an amazing speak at UN Earth Summit 1992&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/11/24/amazing-hand-shadow-show-by-raymond-crowe/"/>
   <updated>2007-11-24T05:59:24+01:00</updated>
   <id>https://nevyn.me/2007/11/24/amazing-hand-shadow-show-by-raymond-crowe</id>
   <content type="html">&lt;p&gt;Amazing Hand Shadow show by Raymond Crowe&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/11/24/please-watch-this-even-if-you-dont-understand-a/"/>
   <updated>2007-11-24T01:14:36+01:00</updated>
   <id>https://nevyn.me/2007/11/24/please-watch-this-even-if-you-dont-understand-a</id>
   <content type="html">&lt;p&gt;Please watch this even if you don&amp;rsquo;t understand a word of Swedish :P&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Enterprise-y</title>
   <link href="https://nevyn.me/2007/11/23/enterprise-y/"/>
   <updated>2007-11-23T18:19:00+01:00</updated>
   <id>https://nevyn.me/2007/11/23/enterprise-y</id>
   <content type="html">&lt;blockquote&gt;&lt;code&gt;YesNoFactory.getFactoryInstance().YES.getDescription().&lt;/code&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;code&gt;equals(array[0].toUpperCase());&lt;/code&gt;&lt;/blockquote&gt; &lt;br/&gt;&lt;a href=&quot;http://worsethanfailure.com/Articles/Taking-a-Good-Thing-Too-Far.aspx&quot;&gt;Taking a Good Thing Too Far - Worse Than Failure&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>How Addicted to Apple Are You?</title>
   <link href="https://nevyn.me/2007/11/22/how-addicted-to-apple-are-you/"/>
   <updated>2007-11-22T07:10:42+01:00</updated>
   <id>https://nevyn.me/2007/11/22/how-addicted-to-apple-are-you</id>
   <content type="html">&lt;a href=&quot;http://www.justsayhi.com/bb/apple_addiction&quot; style=&quot;color: #80a9dd; text-decoration: none; display: block; width: 286px; height: 128px; padding-top: 50px; padding-left: 17px; background-image: url('http://assets.justsayhi.com/badges/743/498/apple_addiction.r2j4vb0yia.jpg'); background-repeat: no-repeat; background-attachment: initial; -webkit-background-clip: initial; -webkit-background-origin: initial; background-color: initial; font-family: 'Times New Roman', sans-serif; font-size: 30px; background-position: initial initial&quot;&gt;80%&lt;/a&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Study after study has shown that happy workers are productive workers and productive workers make more money for their capitalistic overlords. Is standardizing on Internet Explorer really worth more than that?</title>
   <link href="https://nevyn.me/2007/11/20/study-after-study-has-shown-that-happy-workers-are/"/>
   <updated>2007-11-20T20:19:53+01:00</updated>
   <id>https://nevyn.me/2007/11/20/study-after-study-has-shown-that-happy-workers-are</id>
   <content type="html">&lt;blockquote&gt;Study after study has shown that happy workers are productive workers and productive workers make more money for their capitalistic overlords. Is standardizing on Internet Explorer really worth more than that?&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://blog.eod.com/post/19428069&quot;&gt;An Entirely Other Day - I&amp;rsquo;ve Got a New Attitude&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>The programmer, though, wants to be involved deeply and profoundly in just a few projects — he wants to own them, top to bottom. Maybe it’s a whole program, or a single feature, or some underlying library. Whatever. He wants to live in it, neck-deep. He has to worry about all — literally all — of the obscure technical details that make computers go. Jumping between projects — context switching — is a great way to burn a programmer out, because the cost of unloading one project from his head only to load up another one is enormously high. The idea of switching between two projects in a day, much less ten, is not only exhausting, but depressing.</title>
   <link href="https://nevyn.me/2007/11/20/the-programmer-though-wants-to-be-involved/"/>
   <updated>2007-11-20T20:16:32+01:00</updated>
   <id>https://nevyn.me/2007/11/20/the-programmer-though-wants-to-be-involved</id>
   <content type="html">&lt;blockquote&gt;The programmer, though, wants to be involved deeply and profoundly in just a few projects — he wants to own them, top to bottom. Maybe it’s a whole program, or a single feature, or some underlying library. Whatever. He wants to live in it, neck-deep. He has to worry about all — literally all — of the obscure technical details that make computers go. Jumping between projects — context switching — is a great way to burn a programmer out, because the cost of unloading one project from his head only to load up another one is enormously high. The idea of switching between two projects in a day, much less ten, is not only exhausting, but depressing.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://blog.eod.com/post/18462877&quot;&gt;An Entirely Other Day - Wide vs. Deep&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/11/20/learning-optical-illusions-with-whitest-boy-alive/"/>
   <updated>2007-11-20T03:12:26+01:00</updated>
   <id>https://nevyn.me/2007/11/20/learning-optical-illusions-with-whitest-boy-alive</id>
   <content type="html">&lt;object width=&quot;400&quot; height=&quot;329&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://www.sclipo.com/outer_flvplayer_new.swf?file=SWZ3F6J2H1&quot;&gt;&lt;param name=&quot;wmode&quot; value=&quot;transparent&quot;&gt;&lt;embed src=&quot;http://www.sclipo.com/outer_flvplayer_new.swf?file=SWZ3F6J2H1&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot; width=&quot;400&quot; height=&quot;329&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br/&gt;&lt;p&gt;&lt;b&gt;Learning optical illusions with Whitest Boy Alive&lt;/b&gt; &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/11/19/dear-gigantic-google-database-its-possible-to/"/>
   <updated>2007-11-19T23:11:28+01:00</updated>
   <id>https://nevyn.me/2007/11/19/dear-gigantic-google-database-its-possible-to</id>
   <content type="html">&lt;p&gt;Dear gigantic Google database,&lt;/p&gt;&lt;p&gt; It&amp;rsquo;s possible to install Mac OS X 10.5 Server onto a GUID-formatted harddrive on an Intel mac,  and then put the drive into a Mac PPC G5 dual 2.0 tower, and it&amp;rsquo;ll boot and run fantastically, even though it&amp;rsquo;s not APT/APM.&lt;/p&gt;&lt;p&gt; Now you know. &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/11/16/my-systemlog-is-now-302-megabytes-i-get-about/"/>
   <updated>2007-11-16T05:01:19+01:00</updated>
   <id>https://nevyn.me/2007/11/16/my-systemlog-is-now-302-megabytes-i-get-about</id>
   <content type="html">&lt;p&gt;My system.log is now 302 megabytes. I get about ten of these a second:&lt;/p&gt;&lt;p&gt;&amp;ldquo;&amp;hellip; ISyncSession deleteRecordWithIdentifier: ignoring delete for unknown record &amp;hellip;&amp;rdquo;&lt;/p&gt;&lt;p&gt; WTF? &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/11/13/rdar5596766-summary-switching-to-an/"/>
   <updated>2007-11-13T19:22:00+01:00</updated>
   <id>https://nevyn.me/2007/11/13/rdar5596766-summary-switching-to-an</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;rdar://5596766&quot;&gt;&lt;b&gt;rdar://5596766:&lt;/b&gt;&lt;/a&gt;&lt;br/&gt;&lt;b&gt;Summary&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Switching to an application when you don&amp;rsquo;t have a window open in it in the current space, switches to a space that does. This is okay for many applications. It&amp;rsquo;s not okay for an application that you are likely to use on many spaces simultaneously, such as Safari or the Terminal.&lt;/p&gt;  &lt;p&gt;&lt;b&gt;Steps to reproduce&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;1. Open a Safari browser on your developer space, Space 1.&lt;br/&gt;    2. Go to Space 3 to check your mail.&lt;br/&gt;    3. Notice the interesting feed item from Daring Fireball&lt;br/&gt;    4. Command-Tab to Safari to navigate to daringfireball.net&lt;br/&gt;    5. Feel the draft as all your mail-related windows fly by and you are transported to your developer space, putting you completely out of context feeling slightly embarrased for your act of procrastination being exposed so rudely to XCode. &lt;/p&gt; &lt;p&gt;&lt;b&gt;Expected results&lt;/b&gt;&lt;/p&gt; &lt;p&gt;At step 0, I would go to the Spaces system preferences to set Safari to be an application that is available on *any* space (which is NOT the same as *all* spaces). See also &lt;a href=&quot;http://blog.elliottcable.name/articles/2007/11/spaces-solution&quot;&gt;http://blog.elliottcable.name/articles/2007/11/spaces-solution&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;In step 4, focus would be given to Safari and its menubar be frontmost, and that&amp;rsquo;s all that would happen. No swooshing to another Space.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Regression&lt;/b&gt;&lt;/p&gt; &lt;p&gt;Sometimes, even clicking on a link in Mail gets you swooshing to another space. That&amp;rsquo;s another, unrelated bug, however. &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>A visual tour of Android's UI - Engadget</title>
   <link href="https://nevyn.me/2007/11/13/a-visual-tour-of-androids-ui-engadget/"/>
   <updated>2007-11-13T04:56:26+01:00</updated>
   <id>https://nevyn.me/2007/11/13/a-visual-tour-of-androids-ui-engadget</id>
   <content type="html">&lt;a href=&quot;http://www.engadget.com/gallery/a-visual-tour-of-androids-ui/484274/&quot;&gt;A visual tour of Android's UI - Engadget&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Not impressed. Possibly better than SonyEricsson&amp;rsquo;s (my current favorite among the ones I&amp;rsquo;ve tested), but not impressively so.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>via wwwgeekculturecom</title>
   <link href="https://nevyn.me/2007/11/07/via-wwwgeekculturecom/"/>
   <updated>2007-11-07T19:24:01+01:00</updated>
   <id>https://nevyn.me/2007/11/07/via-wwwgeekculturecom</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb1h906mmT73OEY5n_500.gif&quot;/&gt;&lt;br/&gt;&lt;p&gt;via &lt;a href=&quot;http://www.geekculture.com/joyoftech/joyimages/1031.gif&quot;&gt;www.geekculture.com&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/11/07/you-only-need-to-go-to-their-site-and-get-a-quick/"/>
   <updated>2007-11-07T07:30:30+01:00</updated>
   <id>https://nevyn.me/2007/11/07/you-only-need-to-go-to-their-site-and-get-a-quick</id>
   <content type="html">&lt;p&gt;You only need to go to&lt;a href=&quot;http://www.openhandsetalliance.com/&quot;&gt; their site&lt;/a&gt; and get a quick whiff of the Enterprise-y smell to realize that Android feels too much corporate and too little google to be likely to be awesome. Please prove me wrong. &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/11/06/ted-talks-aubrey-de-grey-why-we-age-and-how-we/"/>
   <updated>2007-11-06T01:05:48+01:00</updated>
   <id>https://nevyn.me/2007/11/06/ted-talks-aubrey-de-grey-why-we-age-and-how-we</id>
   <content type="html">&lt;!--cut and paste--&gt;&lt;object classid=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot; codebase=&quot;http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0&quot; width=&quot;400&quot; height=&quot;356&quot; id=&quot;VE_Player&quot; align=&quot;middle&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://static.videoegg.com/ted/flash/loader.swf&quot;&gt;&lt;PARAM NAME=&quot;FlashVars&quot; VALUE=&quot;bgColor=FFFFFF&amp;file=http://static.videoegg.com/ted/movies/AUBREYDEGREY_high.flv&amp;autoPlay=false&amp;fullscreenURL=http://static.videoegg.com/ted/flash/fullscreen.html&amp;forcePlay=false&amp;logo=&amp;allowFullscreen=true&quot;&gt;&lt;param name=&quot;quality&quot; value=&quot;high&quot;&gt;&lt;param name=&quot;allowScriptAccess&quot; value=&quot;always&quot;&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#FFFFFF&quot;&gt;&lt;param name=&quot;scale&quot; value=&quot;noscale&quot;&gt;&lt;param name=&quot;wmode&quot; value=&quot;window&quot;&gt;&lt;embed src=&quot;http://static.videoegg.com/ted/flash/loader.swf&quot; FlashVars=&quot;bgColor=FFFFFF&amp;file=http://static.videoegg.com/ted/movies/AUBREYDEGREY_high.flv&amp;autoPlay=false&amp;fullscreenURL=http://static.videoegg.com/ted/flash/fullscreen.html&amp;forcePlay=false&amp;logo=&amp;allowFullscreen=true&quot; quality=&quot;high&quot; allowScriptAccess=&quot;always&quot; bgcolor=&quot;#FFFFFF&quot; scale=&quot;noscale&quot; wmode=&quot;window&quot; width=&quot;400&quot; height=&quot;356&quot; name=&quot;VE_Player&quot; align=&quot;middle&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;&gt;&lt;/object&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.ted.com/index.php/talks/view/id/39&quot;&gt;TED Talks | Aubrey de Grey: Why we age and how we can avoid it&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/11/05/shanghai/"/>
   <updated>2007-11-05T21:39:00+01:00</updated>
   <id>https://nevyn.me/2007/11/05/shanghai</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/ohHNONAbheE?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;[In Swedish again] DEL TVÅ av föregående video. Blir sugen på att flytta till Shanghai&amp;hellip; :P &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/11/05/shanghai-1/"/>
   <updated>2007-11-05T21:32:34+01:00</updated>
   <id>https://nevyn.me/2007/11/05/shanghai-1</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/C0jDJ-wsMYI?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;[In swedish] Fredrik Härén om kunskap. Pwnzar ett helt land!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/11/05/18345844/"/>
   <updated>2007-11-05T06:13:29+01:00</updated>
   <id>https://nevyn.me/2007/11/05/18345844</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/MLhBbCcsb1dlvz1ia6Ky5pV4_500.jpg&quot;/&gt;&lt;br/&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/11/05/great-demo-for-running-windows-seamlessly-on-a/"/>
   <updated>2007-11-05T01:28:53+01:00</updated>
   <id>https://nevyn.me/2007/11/05/great-demo-for-running-windows-seamlessly-on-a</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/JIApJMzGzDQ?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Great demo for running Windows seamlessly on a Mac.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>It turns out that EBS works so well that all you have to do is keep the clock running on whatever task you were doing when the interruption occurred. As disconcerting as this may sound, EBS produces the best results when you do this.</title>
   <link href="https://nevyn.me/2007/11/02/it-turns-out-that-ebs-works-so-well-that-all-you/"/>
   <updated>2007-11-02T08:24:43+01:00</updated>
   <id>https://nevyn.me/2007/11/02/it-turns-out-that-ebs-works-so-well-that-all-you</id>
   <content type="html">&lt;blockquote&gt;It turns out that EBS works so well that all you have to do is keep the clock running on whatever task you were doing when the interruption occurred. As disconcerting as this may sound, EBS produces the best results when you do this.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://www.joelonsoftware.com/items/2007/10/26.html&quot;&gt;Evidence Based Scheduling - Joel on Software&lt;/a&gt;. I might just have to use FogBugz on my next project.
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/11/02/for-those-that-arent-ultra-mac-nerds-this-is-a/"/>
   <updated>2007-11-02T02:10:00+01:00</updated>
   <id>https://nevyn.me/2007/11/02/for-those-that-arent-ultra-mac-nerds-this-is-a</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/366441?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;179&quot; frameborder=&quot;0&quot; title=&quot;Apple Fixing God&amp;#039;s Horrible Mistake&amp;#039;s Fix&amp;#039;s Fix&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;i&gt;(For those that aren’t ultra-mac-nerds, this is a follow up on &lt;a href=&quot;http://devnevyn.livejournal.com/1124.html&quot;&gt;“Fixing God’s Horrible Mistake’s Fix”&lt;/a&gt;, which was a followup to “&lt;a href=&quot;http://end.com/speth/2006/07/fixing-gods-horrible-mistakes/&quot;&gt;Fixing God’s Horrible Mistake&lt;/a&gt;”. Movie downloadable from &lt;a href=&quot;http://nevyn.nu/movies/Cocoa_arrow%20key_selection_in_10.5.mov&quot; title=&quot;my site&quot;&gt;my site&lt;/a&gt;).&lt;/i&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>PC Memory: Just the Facts</title>
   <link href="https://nevyn.me/2007/10/22/pc-memory-just-the-facts/"/>
   <updated>2007-10-22T22:08:24+02:00</updated>
   <id>https://nevyn.me/2007/10/22/pc-memory-just-the-facts</id>
   <content type="html">&lt;a href=&quot;http://www.tomshardware.com/2007/10/03/pc_memory/&quot;&gt;PC Memory: Just the Facts&lt;/a&gt;&lt;br/&gt;&lt;p&gt;At Tom&amp;rsquo;s Hardware. Everything you&amp;rsquo;ve ever wanted to know about DDR RAM, and probably a whole lot more.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The complexity of software is an essential property, not an accidental one. Hence, descriptions of a software entity that abstract away its complexity often abstract away its essence</title>
   <link href="https://nevyn.me/2007/10/21/the-complexity-of-software-is-an-essential/"/>
   <updated>2007-10-21T01:29:06+02:00</updated>
   <id>https://nevyn.me/2007/10/21/the-complexity-of-software-is-an-essential</id>
   <content type="html">&lt;blockquote&gt;The complexity of software is an essential property, not an accidental one. Hence, descriptions of a software entity that abstract away its complexity often abstract away its essence&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://www.gamearchitect.net/Articles/SoftwareIsHard.html&quot;&gt;Software Is Hard&lt;/a&gt; quoting Fred Brooks in &lt;i&gt;&lt;a href=&quot;http://info.computer.org/portal/site/computer/index.jsp?pageID=computer_level1&amp;amp;path=computer/homepage/misc/Brooks&amp;amp;file=index.xml&amp;amp;xsl=article.xsl&quot;&gt;&lt;/a&gt;&lt;/i&gt;
</content>
 </entry>
 
 <entry>
   <title>Software Is Hard</title>
   <link href="https://nevyn.me/2007/10/21/software-is-hard/"/>
   <updated>2007-10-21T01:25:26+02:00</updated>
   <id>https://nevyn.me/2007/10/21/software-is-hard</id>
   <content type="html">&lt;a href=&quot;http://www.gamearchitect.net/Articles/SoftwareIsHard.html&quot;&gt;Software Is Hard&lt;/a&gt;&lt;br/&gt;&lt;p&gt;The whole thing is great. Had to link to it again.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>We build systems like the Wright brothers built airplanes–build the whole thing, push it off the cliff, let it crash, and start over again</title>
   <link href="https://nevyn.me/2007/10/21/we-build-systems-like-the-wright-brothers-built/"/>
   <updated>2007-10-21T01:22:51+02:00</updated>
   <id>https://nevyn.me/2007/10/21/we-build-systems-like-the-wright-brothers-built</id>
   <content type="html">&lt;blockquote&gt;We build systems like the Wright brothers built airplanes&amp;ndash;build the whole thing, push it off the cliff, let it crash, and start over again&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://www.gamearchitect.net/Articles/SoftwareIsHard.html&quot;&gt;Software Is Hard&lt;/a&gt; quoting the 1968 NATO Software Software Engineering Conference.
</content>
 </entry>
 
 <entry>
   <title>(bash #17403)</title>
   <link href="https://nevyn.me/2007/09/30/bash-17403/"/>
   <updated>2007-09-30T07:40:56+02:00</updated>
   <id>https://nevyn.me/2007/09/30/bash-17403</id>
   <content type="html">&lt;section&gt;&lt;dialog&gt;&lt;dt&gt;&lt;hepkitten&gt;&lt;/dt&gt;&lt;dd&gt;also i appear to have lost my bf&lt;/dd&gt;&lt;dt&gt;&lt;hepkitten&gt;&lt;/dt&gt;&lt;dd&gt;:&lt;&lt;/dd&gt;&lt;dt&gt;&lt;kinzillah&gt;&lt;/dt&gt;&lt;dd&gt;&quot;lost&quot;? does he respond to ping?&lt;/dd&gt;&lt;/dialog&gt;&lt;/section&gt;
</content>
 </entry>
 
 <entry>
   <title>Seam carving in bad code</title>
   <link href="https://nevyn.me/2007/09/22/seam-carving-in-bad-code/"/>
   <updated>2007-09-22T06:38:48+02:00</updated>
   <id>https://nevyn.me/2007/09/22/seam-carving-in-bad-code</id>
   <content type="html">&lt;p&gt;So &lt;a href=&quot;http://the.taoofmac.com/space/blog/2007/09/18/1225&quot;&gt;Carmo wrote&lt;/a&gt; about some &lt;a href=&quot;http://en.wikipedia.org/wiki/Seam_carving&quot;&gt;seam carving&lt;/a&gt; &lt;a href=&quot;http://gabeiscoding.com/2007/09/updates-for-retargeting-gui.html&quot;&gt;code written in Qt by Gabe Rudy&lt;/a&gt;, and how it wouldn&amp;rsquo;t compile in XCode. What I&amp;rsquo;m wondering is, however, how it ever compiled in anything. See, for some reason Gabe decided to use Yet Another Image Library (like there aren&amp;rsquo;t enough half-assed image libraries out there) that was written in C in his C++ code. Without declaring it extern C. So Gabe&amp;rsquo;s code would be looking for the wonderful function signature L__Z10createMaskii$stub instead of _createMask.&lt;/p&gt;

&lt;p&gt;I fixed &amp;lsquo;em up with some #ifdef __cplusplus. &lt;a href=&quot;http://thirdcog.eu/seam-carving-gui-mac.zip&quot;&gt;Here&amp;rsquo;s the source and binaries for your enjoyment&lt;/a&gt;. Oh, but before you joyfully go download it, be warned: the resizing is &lt;em&gt;not&lt;/em&gt; in real time.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The point of any company should be to make customers want to give it money, NOT to get money from customers. It’s a subtle distinction that is the difference between good and evil.</title>
   <link href="https://nevyn.me/2007/09/21/the-point-of-any-company-should-be-to-make/"/>
   <updated>2007-09-21T04:40:52+02:00</updated>
   <id>https://nevyn.me/2007/09/21/the-point-of-any-company-should-be-to-make</id>
   <content type="html">&lt;blockquote&gt;The point of any company should be to make customers want to give it money, NOT to get money from customers. It&amp;rsquo;s a subtle distinction that is the difference between good and evil.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://wilshipley.com/blog/2007/09/iphone-ipod-contain-or-disengage.html&quot;&gt;Call Me Fishmeal: iPhone &amp;amp; iPod: contain or disengage?&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>Box collision with inverse/incorrect physics and force lines</title>
   <link href="https://nevyn.me/2007/09/18/box-collision-with-inverseincorrect-physics-and/"/>
   <updated>2007-09-18T23:03:27+02:00</updated>
   <id>https://nevyn.me/2007/09/18/box-collision-with-inverseincorrect-physics-and</id>
   <content type="html">&lt;a href=&quot;http://nevyn.nu/movies/Box_collision-inverse_collision_with_force_lines_2.mov&quot;&gt;Box collision with inverse/incorrect physics and force lines&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Doing coding for homework ends up being way too much fun sometimes ;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Water and technology do not blend well.</title>
   <link href="https://nevyn.me/2007/09/18/water-and-technology-do-not-blend-well/"/>
   <updated>2007-09-18T19:35:20+02:00</updated>
   <id>https://nevyn.me/2007/09/18/water-and-technology-do-not-blend-well</id>
   <content type="html">&lt;p&gt;I recently took a long, steamy hot shower, while my Gadget Pants hung on a hook on the wall. This hasn&amp;rsquo;t been a problem before. However, this shower must have been extra steamy, for all did not go well. My phone got a steamy display for an hour but that went away, the DS didn&amp;rsquo;t even notice, but my PSP&amp;hellip; My beautiful original Japan-imported 1.5 firmware PSP, which gave me &lt;a href=&quot;http://www.luaplayer.org/&quot;&gt;heaps of coding fun&lt;/a&gt; and &lt;a href=&quot;http://conferences.oreillynet.com/cs/eurooscon/view/e_sess/7661&quot;&gt;a trip to Amsterdam&lt;/a&gt;, gave up the ghost. The screen has blotches all over it, the D-pad presses right all the time, the memory stick slot has corroded and won&amp;rsquo;t read anything properly, the UMD reader won&amp;rsquo;t spin, and the whole thing freezes randomly, which could be the result of any of the former or of yet another broken component inside it. In other words, it&amp;rsquo;s broken beyond repair. This is a sad, sad day.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/09/13/bioshock-review-by-the-escapist-great-deal-of/"/>
   <updated>2007-09-13T23:43:05+02:00</updated>
   <id>https://nevyn.me/2007/09/13/bioshock-review-by-the-escapist-great-deal-of</id>
   <content type="html">&lt;embed src=&quot;http://update.videoegg.com/flash/proxy.swf?jsver=1.4&quot; FlashVars=&quot;gc=c2hvd0FkPXRydWUmYWRWYXJzPWFyZWE9Z2FtZXMmc2l0ZT1lc2NhcGlzdG1hZ2F6aW5lJmZpbGU9aHR0cCUzQSUyRiUyRnNlbGZzZXJ2ZTMwMCUyRWRvd25sb2FkJTJFdmlkZW9lZ2clMkVjb20lMkZnaWQzODklMkZjaWQxMzg5JTJGMVElMkZRUSUyRjExODg4MDkwMTI0VjVQNWozTndyeE9xRHNjRUpYUyZzd2ZwYXRoPWh0dHAlM0ElMkYlMkZ1cGRhdGUlMkV2aWRlb2VnZyUyRWNvbSUyRmZsYXNoJTJGcHJveHklMkVzd2YlM0Zqc3ZlciUzRDElMkU0JmF1dG9QbGF5PWZhbHNlJnNob3dBZFByaW1hcnk9dHJ1ZSZ3bW9kZT13aW5kb3cmYWxsb3dGbGFzaDlGdWxsc2NyZWVuPXRydWU=&quot; quality=&quot;high&quot; allowFullScreen=&quot;true&quot; allowScriptAccess=&quot;always&quot; scale=&quot;noscale&quot; wmode=&quot;window&quot; width=&quot;400&quot; height=&quot;332&quot; name=&quot;VE_Player&quot; align=&quot;middle&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot;&gt;&lt;/embed&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.escapistmagazine.com/articles/view/editorials/zeropunctuation/1394-Zero-Punctuation-BioShock&quot;&gt;BioShock review by The Escapist&lt;/a&gt;. Great deal of fun.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/08/31/360-light-field-display-via-engadget/"/>
   <updated>2007-08-31T22:43:42+02:00</updated>
   <id>https://nevyn.me/2007/08/31/360-light-field-display-via-engadget</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;225&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/FF1vFTQOWN4?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;360° Light Field Display (via &lt;a href=&quot;http://www.engadget.com/2007/08/31/researchers-develop-a-360-degree-holographic-display/&quot;&gt;Engadget&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Phone Scoop - HTC Touch</title>
   <link href="https://nevyn.me/2007/08/30/phone-scoop-htc-touch/"/>
   <updated>2007-08-30T21:17:47+02:00</updated>
   <id>https://nevyn.me/2007/08/30/phone-scoop-htc-touch</id>
   <content type="html">&lt;a href=&quot;http://www.phonescoop.com/articles/htc_touch/&quot;&gt;Phone Scoop - HTC Touch&lt;/a&gt;&lt;br/&gt;&lt;p&gt;HTC&amp;rsquo;s additions to Windows Mobile look really nice, actually. Pretty thought-through touch UI. BUT&amp;hellip; They&amp;rsquo;ve just tacked it onto Windows, and most apps are still stylus-based, with 4x4 pixel widgets and general ugliness. I wish they had gone all the way, replacing all apps, especially text input. Then it might actually have been a worthy opponent to the iPhone.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/08/29/content-aware-image-sizing-via-pc-feber-hella/"/>
   <updated>2007-08-29T00:14:32+02:00</updated>
   <id>https://nevyn.me/2007/08/29/content-aware-image-sizing-via-pc-feber-hella</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/c-SSu3tJ3ns?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=c-SSu3tJ3ns&quot;&gt;Content-Aware Image Sizing&lt;/a&gt; (via &lt;a href=&quot;http://pc.feber.se//feber/art/27454/ndra_bildstorlek_utan_att_tapp/&quot;&gt;PC Feber&lt;/a&gt;). Hella smart algoritm! And so simple!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>On making the Ultimate Machine</title>
   <link href="https://nevyn.me/2007/08/25/on-making-the-ultimate-machine/"/>
   <updated>2007-08-25T20:24:31+02:00</updated>
   <id>https://nevyn.me/2007/08/25/on-making-the-ultimate-machine</id>
   <content type="html">&lt;p&gt;Sony knows hardware but they don&amp;rsquo;t know shit about fun games or UI.&lt;br/&gt;
Nintendo knows fun games but they know shit about online gaming.&lt;br/&gt;
Microsoft knows online gaming but they also don&amp;rsquo;t know shit about UI.&lt;br/&gt;
Apple knows UI but they don&amp;rsquo;t know shit about&amp;hellip; well, gaming.&lt;/p&gt;

&lt;p&gt;If they joined forces, it&amp;rsquo;d be the most awesome gaming machine mankind has ever seen. But instead they compete and put out mediocre products and praise them to the skies, even though they completely lack what their competitors have and are really only good in one way each.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>PhotoRec - Recover photos from broken memory cards</title>
   <link href="https://nevyn.me/2007/08/22/photorec-recover-photos-from-broken-memory-cards/"/>
   <updated>2007-08-22T23:25:23+02:00</updated>
   <id>https://nevyn.me/2007/08/22/photorec-recover-photos-from-broken-memory-cards</id>
   <content type="html">&lt;a href=&quot;http://www.cgsecurity.org/wiki/PhotoRec&quot;&gt;PhotoRec - Recover photos from broken memory cards&lt;/a&gt;&lt;br/&gt;&lt;p&gt;What an amazing tool! It saved a whole memory card full of files for me, even though both the camera, a windows machine and my Mac said the card contained zero pictures!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>This requires complete redesign of the sound engine in the Flash Player which dates from circa 1996 and has not been improved since.</title>
   <link href="https://nevyn.me/2007/08/22/this-requires-complete-redesign-of-the-sound/"/>
   <updated>2007-08-22T19:26:45+02:00</updated>
   <id>https://nevyn.me/2007/08/22/this-requires-complete-redesign-of-the-sound</id>
   <content type="html">&lt;blockquote&gt;This requires complete redesign of the sound engine in the Flash Player which dates from circa 1996 and has not been improved since.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://www.kaourantin.net/2007/08/what-just-happened-to-video-on-web_20.html&quot;&gt;kaourantin.net: What just happened to video on the web?&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>Sparkle deploy script with zipping and dsa signing</title>
   <link href="https://nevyn.me/2007/08/22/sparkle-deploy-script-with-zipping-and-dsa-signing/"/>
   <updated>2007-08-22T01:46:48+02:00</updated>
   <id>https://nevyn.me/2007/08/22/sparkle-deploy-script-with-zipping-and-dsa-signing</id>
   <content type="html">&lt;a href=&quot;http://thirdcog.eu/proj/snippets/sparkle_deploy_script.rb&quot;&gt;Sparkle deploy script with zipping and dsa signing&lt;/a&gt;&lt;br/&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/08/20/all-you-have-to-do-is-look-at-this-blog-i-blog-on/"/>
   <updated>2007-08-20T20:31:50+02:00</updated>
   <id>https://nevyn.me/2007/08/20/all-you-have-to-do-is-look-at-this-blog-i-blog-on</id>
   <content type="html">&lt;p&gt;All you have to do is look at this blog. I blog on about about a youtube video a day. I cry when I read my browser history and realize &lt;i&gt;what I have really been doing &lt;b&gt;all fucking day&lt;/b&gt;&lt;/i&gt; and all the days before it in an infinite chain of procrastination. I have at least two app ideas that would really make a difference if I got them out there, and at least a dozen started projects that are &lt;i&gt;fun&lt;/i&gt; to code on and hopefully to use. &lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m feeling a desperate need to stop blogging, stop reading feeds, stop wasting time on wikipedia, and really doing something.&lt;/p&gt;

&lt;p&gt;I think this about once a week. There&amp;rsquo;ll probably be a youtube video in this space before the day is over.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.atomicwang.org/motherfucker/Index/Index.html&quot;&gt;Mike Lee&lt;/a&gt;&amp;rsquo;s &lt;a href=&quot;http://nevyn.tumblr.com/post/9122157&quot;&gt;stupid post&lt;/a&gt; made me feel that about my whole life and not just my this immediate moment, though. &lt;i&gt;Thanks a lot.&lt;/i&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>I was born a programmer. The rest is just implementation detail.</title>
   <link href="https://nevyn.me/2007/08/20/i-was-born-a-programmer-the-rest-is-just/"/>
   <updated>2007-08-20T20:21:35+02:00</updated>
   <id>https://nevyn.me/2007/08/20/i-was-born-a-programmer-the-rest-is-just</id>
   <content type="html">&lt;blockquote&gt;I was born a programmer. The rest is just implementation detail.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://www.atomicwang.org/motherfucker/Index/A9267832-5BD9-475F-98E6-A8C269E91C4B.html&quot;&gt;This&lt;/a&gt; is so profound I&amp;rsquo;m almost crying with rage. My life&amp;rsquo;s too simple, I go through life like I&amp;rsquo;m looking out a train window and just waiting for my destination, and I have produced nothing of consequence.

&lt;p&gt;My call in life is programming. This much is clear. Now I must accomplish something with it, or forever hate myself.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>i visited ladonia with my girlfriend and her</title>
   <link href="https://nevyn.me/2007/08/19/i-visited-ladonia-with-my-girlfriend-and-her/"/>
   <updated>2007-08-19T21:45:03+02:00</updated>
   <id>https://nevyn.me/2007/08/19/i-visited-ladonia-with-my-girlfriend-and-her</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/9053678_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://flickr.com/photos/nevyn/sets/72157601547336743&quot;&gt;I visited Ladonia&lt;/a&gt; with &lt;a href=&quot;http://another-morning.net/&quot;&gt;my girlfriend&lt;/a&gt; and her family yesterday.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/08/19/what-if-business-meetings-were-like-blog-comment/"/>
   <updated>2007-08-19T04:37:35+02:00</updated>
   <id>https://nevyn.me/2007/08/19/what-if-business-meetings-were-like-blog-comment</id>
   <content type="html">&lt;embed src=&quot;http://www.collegehumor.com/moogaloop/moogaloop.swf?clip_id=1771556&quot; quality=&quot;best&quot; width=&quot;400&quot; height=&quot;300&quot; type=&quot;application/x-shockwave-flash&quot;&gt;&lt;/embed&gt;&lt;br/&gt;&lt;p&gt;What if business meetings were like blog comment threads?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no i do not feel particularly inclined to give up</title>
   <link href="https://nevyn.me/2007/08/17/no-i-do-not-feel-particularly-inclined-to-give-up/"/>
   <updated>2007-08-17T21:47:34+02:00</updated>
   <id>https://nevyn.me/2007/08/17/no-i-do-not-feel-particularly-inclined-to-give-up</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/8897772_r2_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;No, I do not feel &lt;em&gt;particularly&lt;/em&gt; inclined to give up my lovely host at loopia to let a fucking snail mail spammer handle my domain! (Do &lt;strong&gt;not&lt;/strong&gt; use &lt;em&gt;Domain Registry of America (London, England)&lt;/em&gt;. Just the name should be a giveaway &amp;hellip; But I bet a lot of people get tricked to pay them anyway because of the deliberately tricky way the letter is written. I almost fell for it myself the first time.)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>the previously mentioned iphone ebook reader from</title>
   <link href="https://nevyn.me/2007/08/17/the-previously-mentioned-iphone-ebook-reader-from/"/>
   <updated>2007-08-17T20:04:19+02:00</updated>
   <id>https://nevyn.me/2007/08/17/the-previously-mentioned-iphone-ebook-reader-from</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/8891763_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;The previously mentioned iPhone ebook reader from Phill Ryu&amp;rsquo;s blog&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>5 iPhone Apps I'd Like To See From Apple</title>
   <link href="https://nevyn.me/2007/08/17/5-iphone-apps-id-like-to-see-from-apple/"/>
   <updated>2007-08-17T20:02:42+02:00</updated>
   <id>https://nevyn.me/2007/08/17/5-iphone-apps-id-like-to-see-from-apple</id>
   <content type="html">&lt;a href=&quot;http://phillryu.com/2007/08/16/5-iphone-apps-id-like-to-see-from-apple/&quot;&gt;5 iPhone Apps I'd Like To See From Apple&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Some &lt;em&gt;very&lt;/em&gt; sweet UI sketchups of potential iPhone apps. I especially like the Ebook reader, it&amp;rsquo;s beautiful and actually looks usable. (Contrast the reader bundled with my Nokia: it takes about half a minute to open a &lt;em&gt;text file&lt;/em&gt; and has &lt;em&gt;neither bookmarks nor line numbers&lt;/em&gt;! In other words, utter and complete crap, like the rest of the phone&amp;rsquo;s GUI.)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/08/17/spoon-dont-you-evah-feat-keepon-the-dancing/"/>
   <updated>2007-08-17T03:34:04+02:00</updated>
   <id>https://nevyn.me/2007/08/17/spoon-dont-you-evah-feat-keepon-the-dancing</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/nPdP1jBfxzo?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=nPdP1jBfxzo&quot;&gt;Spoon - Don&amp;rsquo;t You Evah feat. Keepon the Dancing Robot!&lt;/a&gt; (via &lt;a href=&quot;http://www.engadget.com/2007/08/16/keepon-dancing-robot-featured-in-spoons-latest-music-video/&quot;&gt;Engadget.com&lt;/a&gt;) (Also: &lt;a href=&quot;http://www.youtube.com/watch?v=3g-yrjh58ms&quot;&gt;Keepon dancing to Spoon&amp;rsquo;s &amp;ldquo;I Turn My Camera On&amp;rdquo;&lt;/a&gt;!)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/08/15/kid-beyond-i-needs-to-get-my-hands-on-live-via/"/>
   <updated>2007-08-15T04:39:09+02:00</updated>
   <id>https://nevyn.me/2007/08/15/kid-beyond-i-needs-to-get-my-hands-on-live-via</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/V8mlSWWZ9zQ?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=V8mlSWWZ9zQ&quot;&gt;Kid Beyond&lt;/a&gt;. I needs to get my hands on Live. (Via sterd over IM)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>boasas 832</title>
   <link href="https://nevyn.me/2007/08/14/boasas-832/"/>
   <updated>2007-08-14T21:50:09+02:00</updated>
   <id>https://nevyn.me/2007/08/14/boasas-832</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/8584492_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://boasas.com/&quot;&gt;boasas&lt;/a&gt; #832&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Creating standalone [Python] Mac OS X applications</title>
   <link href="https://nevyn.me/2007/08/10/creating-standalone-python-mac-os-x-applications/"/>
   <updated>2007-08-10T04:35:01+02:00</updated>
   <id>https://nevyn.me/2007/08/10/creating-standalone-python-mac-os-x-applications</id>
   <content type="html">&lt;a href=&quot;http://bob.pythonmac.org/archives/2005/02/09/creating-standalone-mac- os-x-applications/&quot;&gt;Creating standalone [Python] Mac OS X applications&lt;/a&gt;&lt;br/&gt;
</content>
 </entry>
 
 <entry>
   <title>Be Kind Rewind Trailer</title>
   <link href="https://nevyn.me/2007/08/09/be-kind-rewind-trailer/"/>
   <updated>2007-08-09T20:44:36+02:00</updated>
   <id>https://nevyn.me/2007/08/09/be-kind-rewind-trailer</id>
   <content type="html">&lt;a href=&quot;http://movies.yahoo.com/movie/1809761737/video/3631941/&quot;&gt;Be Kind Rewind Trailer&lt;/a&gt;&lt;br/&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/08/09/second-life-parody-via-lonelysandwich-note-that/"/>
   <updated>2007-08-09T20:29:19+02:00</updated>
   <id>https://nevyn.me/2007/08/09/second-life-parody-via-lonelysandwich-note-that</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/flkgNn50k14?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=flkgNn50k14&quot;&gt;Second Life parody&lt;/a&gt; (via &lt;a href=&quot;http://lonelysandwich.com/&quot;&gt;lonelysandwich&lt;/a&gt;). Note that it&amp;rsquo;s only funny if you&amp;rsquo;ve actually played the game or seen gameplay videos.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/08/09/copypaste-iphone-concept-not-much-of-a-fan-of/"/>
   <updated>2007-08-09T20:17:56+02:00</updated>
   <id>https://nevyn.me/2007/08/09/copypaste-iphone-concept-not-much-of-a-fan-of</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/266383?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;300&quot; frameborder=&quot;0&quot; title=&quot;iPhone Copy and Paste&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Copy/paste iPhone concept. Not much of a fan of that copy method, but the video is awesome. (Via &lt;a href=&quot;http://www.engadget.com/2007/08/09/fake-iphone-cut-and-paste-demo-loves-you/&quot;&gt;Engadget&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Insanely Great News</title>
   <link href="https://nevyn.me/2007/08/04/insanely-great-news/"/>
   <updated>2007-08-04T11:28:19+02:00</updated>
   <id>https://nevyn.me/2007/08/04/insanely-great-news</id>
   <content type="html">&lt;a href=&quot;http://www.insanelygreattees.com/news/?p=53&quot;&gt;Insanely Great News&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Only Apple would ship a *paperclip* in a specially-designed bag with a specially-designed instructions sheet.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/07/31/check-out-the-office-car-second-half-is/"/>
   <updated>2007-07-31T01:30:06+02:00</updated>
   <id>https://nevyn.me/2007/07/31/check-out-the-office-car-second-half-is</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/nMRVRsB0NKY?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Check out the Office Car! Second half is skippable.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>It amazes me how little you can say in so many words</title>
   <link href="https://nevyn.me/2007/07/27/it-amazes-me-how-little-you-can-say-in-so-many/"/>
   <updated>2007-07-27T12:03:20+02:00</updated>
   <id>https://nevyn.me/2007/07/27/it-amazes-me-how-little-you-can-say-in-so-many</id>
   <content type="html">&lt;blockquote&gt;Continuing Hannspree&amp;rsquo;s unique lifestyle selections, the company brings you the best of both elegance and simplicity. The XV Series design is remarkable; the range of functions and user-friendly interface brings digital technology into your home, becoming part of your life. XV Series is not only a bold statement of style, it is a dynamic device painstakingly designed to exceed the consumer&amp;rsquo;s expectations.&lt;/blockquote&gt;

&lt;p&gt;Can anyone guess even what &lt;em&gt;kind&lt;/em&gt; of product it is?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/07/27/the-avalanches-frontier-psychiatrist/"/>
   <updated>2007-07-27T09:26:47+02:00</updated>
   <id>https://nevyn.me/2007/07/27/the-avalanches-frontier-psychiatrist</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/U8BWBn26bX0?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;The Avalanches - Frontier Psychiatrist&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/07/27/the-avalanches-since-i-left-you/"/>
   <updated>2007-07-27T09:26:29+02:00</updated>
   <id>https://nevyn.me/2007/07/27/the-avalanches-since-i-left-you</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;225&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/VfAuFAgHpzc?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;The Avalanches - Since I Left You&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/07/26/playstation-3-eye-of-judgment-an-augmented/"/>
   <updated>2007-07-26T02:04:05+02:00</updated>
   <id>https://nevyn.me/2007/07/26/playstation-3-eye-of-judgment-an-augmented</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=EhvVv9-SqXU&quot;&gt;PlayStation 3: Eye of Judgment&lt;/a&gt;, an augmented reality game. AuRGs are so cool! (&lt;a href=&quot;http://www.youtube.com/watch?v=ebHilAXNHSY&quot;&gt;There&amp;rsquo;s a technical demonstration as well&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Cursorcerer - Hide Your Cursor at Will</title>
   <link href="https://nevyn.me/2007/07/25/cursorcerer-hide-your-cursor-at-will/"/>
   <updated>2007-07-25T05:13:25+02:00</updated>
   <id>https://nevyn.me/2007/07/25/cursorcerer-hide-your-cursor-at-will</id>
   <content type="html">&lt;a href=&quot;http://doomlaser.com/cursorcerer-hide-your-cursor-at-will/&quot;&gt;Cursorcerer - Hide Your Cursor at Will&lt;/a&gt;&lt;br/&gt;&lt;p&gt;(Via the &lt;a href=&quot;http://www.rogueamoeba.com/utm/posts/Linked/cursorcerer-2007-07-10-03-00&quot;&gt;Rogue Amoeba blog&lt;/a&gt;. By the way, you stole my freakin&amp;rsquo; app idea with Airfoil 3! :( Okay, it was a pretty obvious extension, but still&amp;hellip;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>On my C distaste</title>
   <link href="https://nevyn.me/2007/07/24/on-my-c-distaste/"/>
   <updated>2007-07-24T18:28:00+02:00</updated>
   <id>https://nevyn.me/2007/07/24/on-my-c-distaste</id>
   <content type="html">&lt;p&gt;I don&amp;rsquo;t remember where I read it, but I just recalled a quote I read a long time ago. It went something like:&lt;/p&gt;

&lt;blockquote&gt;Say you need a status report from a fellow object. In message passing languages (all scripting languages, smalltalk, objc&amp;hellip;), you might ask for this report from that object, equivalent to maybe making a call to it, or sending it an email. The C++ equivalent, however, would be like doing open brain surgery on the object, sticking a probe in the open brain, and analyzing the electrical signals in order to find the answer.&lt;/blockquote&gt;

&lt;p&gt;The original was phrased better&amp;hellip; Anyhow, it was &lt;a href=&quot;http://armstrongonsoftware.blogspot.com/&quot;&gt;Joe Armstrong&lt;/a&gt; that got me thinking about this again; I&amp;rsquo;m very very curious about Erlang and are feeling very much like implementing a game server in that language, maybe an mmorpg style game, in order to test the concurrency and scalability.&lt;/p&gt;

&lt;p&gt;For wishlist: &lt;a href=&quot;http://www.pragmaticprogrammer.com/titles/jaerlang/&quot;&gt;Programming Erlang&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/07/24/6567734/"/>
   <updated>2007-07-24T11:44:54+02:00</updated>
   <id>https://nevyn.me/2007/07/24/6567734</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/6567734_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.flickr.com/photos/eythor/511155537/&quot;&gt;#&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Periodic Table of the Internet</title>
   <link href="https://nevyn.me/2007/07/24/periodic-table-of-the-internet/"/>
   <updated>2007-07-24T06:20:08+02:00</updated>
   <id>https://nevyn.me/2007/07/24/periodic-table-of-the-internet</id>
   <content type="html">&lt;a href=&quot;http://www.wellingtongrey.net/miscellanea/archive/2007-06-23--periodic-table-of-the-internet.html&quot;&gt;Periodic Table of the Internet&lt;/a&gt;&lt;br/&gt;&lt;p&gt;(Via &lt;a href=&quot;http://www.anarchaia.org/&quot;&gt;Anarchaia&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>15 Unfortunately Placed Ads</title>
   <link href="https://nevyn.me/2007/07/24/15-unfortunately-placed-ads/"/>
   <updated>2007-07-24T05:51:06+02:00</updated>
   <id>https://nevyn.me/2007/07/24/15-unfortunately-placed-ads</id>
   <content type="html">&lt;a href=&quot;http://www.bspcn.com/2007/07/17/15-unfortunately-placed-ads/&quot;&gt;15 Unfortunately Placed Ads&lt;/a&gt;&lt;br/&gt;&lt;p&gt;(via &lt;a href=&quot;http://www.anarchaia.org/&quot;&gt;Anarchaia&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>once again ive updated the front page of my</title>
   <link href="https://nevyn.me/2007/07/22/once-again-ive-updated-the-front-page-of-my/"/>
   <updated>2007-07-22T09:36:21+02:00</updated>
   <id>https://nevyn.me/2007/07/22/once-again-ive-updated-the-front-page-of-my</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/6399840_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Once again, I&amp;rsquo;ve updated the &lt;a href=&quot;http://nevyn.nu/&quot;&gt;front page of my personal web site, nevyn.nu&lt;/a&gt;. Photoshop was fun! &lt;a href=&quot;http://nevyn.nu/&quot;&gt;Check it out!&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/07/22/breaking-news-the-internet-has-crashed-via-the/"/>
   <updated>2007-07-22T02:26:11+02:00</updated>
   <id>https://nevyn.me/2007/07/22/breaking-news-the-internet-has-crashed-via-the</id>
   <content type="html">&lt;p&gt;Breaking News! The Internet has crashed! (via the &lt;a href=&quot;http://project.ioni.st/&quot;&gt;projectionist&lt;/a&gt;. I bet my parents would actually believe this report as real, at least the beginning of it. Too funny!)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/07/19/gold-block-digging-slinky-beats/"/>
   <updated>2007-07-19T19:58:39+02:00</updated>
   <id>https://nevyn.me/2007/07/19/gold-block-digging-slinky-beats</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://youtube.com/watch?v=iWhP6ouh-8E&quot;&gt;Gold Block Digging Slinky Beats&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Polyphasism, Try 2, Day 11</title>
   <link href="https://nevyn.me/2007/07/19/polyphasism-try-2-day-11/"/>
   <updated>2007-07-19T19:14:29+02:00</updated>
   <id>https://nevyn.me/2007/07/19/polyphasism-try-2-day-11</id>
   <content type="html">&lt;p&gt;Not a single crash, rarely miss a nap by more than five minutes, and this time I haven&amp;rsquo;t been as tired as last time (read: haven&amp;rsquo;t been tired enough to cry from exhaustion), although the morning hours after the core sleep is mostly waiting for the next nap, trying to keep my eyes open.&lt;/p&gt;

&lt;p&gt;However, I &lt;em&gt;am&lt;/em&gt; constantly tired, which sort of defeats the point of this polyphasism. I&amp;rsquo;ll give it another week, but if that doesn&amp;rsquo;t work out, I&amp;rsquo;ll go back to monophasic.&lt;/p&gt;

&lt;p&gt;(Oh, and falling asleep while standing up is an interesting experience; hitting the floor isn&amp;rsquo;t.)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>kurtwood smith michael ironside separated at</title>
   <link href="https://nevyn.me/2007/07/15/kurtwood-smith-michael-ironside-separated-at/"/>
   <updated>2007-07-15T21:54:19+02:00</updated>
   <id>https://nevyn.me/2007/07/15/kurtwood-smith-michael-ironside-separated-at</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/5801810_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Kurtwood Smith / Michael Ironside - Separated at birth? :P (sorry, only got mspaint here)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The Lone Coda Disliker</title>
   <link href="https://nevyn.me/2007/07/09/the-lone-coda-disliker/"/>
   <updated>2007-07-09T17:58:19+02:00</updated>
   <id>https://nevyn.me/2007/07/09/the-lone-coda-disliker</id>
   <content type="html">&lt;p&gt;Am I the only one who don&amp;rsquo;t like &lt;a href=&quot;http://www.panic.com/coda/&quot;&gt;Coda&lt;/a&gt;?&lt;/p&gt;

&lt;p&gt;I just realized why I don&amp;rsquo;t like it, too: It&amp;rsquo;s a Windows application.&lt;/p&gt;

&lt;p&gt;You&amp;rsquo;re cornered into &lt;a href=&quot;http://www.noscope.com/media/windows_vista_maximized.jpg&quot;&gt;a &lt;b&gt;single window&lt;/b&gt;, preferably in fullscreen&lt;/a&gt;, navigating your data not by wonderfully spatial windows, but by small, almost identical small evil creatures called &amp;rsquo;&lt;a href=&quot;http://www.vbaccelerator.com/home/VB/Code/Controls/Tab_Controls/MDI_Tabs/mdiTabs.png&quot;&gt;tabs&lt;/a&gt;&amp;rsquo;.&lt;/p&gt;

&lt;p&gt;And instead of presenting data in separate windows, you&amp;rsquo;re supposed to *switch modes* on these tabs, back and forth, back and forth; either that, or using the &lt;i&gt;other&lt;/i&gt; unforgivingly evil Windows UI metaphor: &lt;b&gt;&lt;a href=&quot;http://www.tenasys.com/images/debug_visualstudio.jpg&quot;&gt;the split pane&lt;/a&gt;&lt;/b&gt;. Suddenly you have windows again, but they&amp;rsquo;re deprived of their ability to obscure each other, instead  opting for scrolling back and forth, back and forth to see your relevant areas.&lt;/p&gt;

&lt;p&gt;Also, its CSS editor sucks badly, at least compared to &lt;a href=&quot;http://macrabbit.com/cssedit/&quot;&gt;that app which surely God himself must have sent down to earth&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Implementing Silverlight in 21 Days - Miguel de Icaza</title>
   <link href="https://nevyn.me/2007/07/08/implementing-silverlight-in-21-days-miguel-de/"/>
   <updated>2007-07-08T06:59:15+02:00</updated>
   <id>https://nevyn.me/2007/07/08/implementing-silverlight-in-21-days-miguel-de</id>
   <content type="html">&lt;a href=&quot;http://tirania.org/blog/archive/2007/Jun-21.html&quot;&gt;Implementing Silverlight in 21 Days - Miguel de Icaza&lt;/a&gt;&lt;br/&gt;&lt;p&gt;Post mortem of the initial for Moonlight, a Silverlight clone in Mono. From nothing to complete API compatibility in twenty (20!) days!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>You would have to fly on a commercial aircraft every day for 18,000 years before your chances of being in a crash exceeded 50 per cent.</title>
   <link href="https://nevyn.me/2007/07/08/you-would-have-to-fly-on-a-commercial-aircraft/"/>
   <updated>2007-07-08T06:14:10+02:00</updated>
   <id>https://nevyn.me/2007/07/08/you-would-have-to-fly-on-a-commercial-aircraft</id>
   <content type="html">&lt;blockquote&gt;You would have to fly on a commercial aircraft every day for 18,000 years before your chances of being in a crash exceeded 50 per cent.&lt;/blockquote&gt;&amp;#8212;From Natalie Angier  book &lt;i&gt;The Canon&lt;/i&gt;, via &lt;a href=&quot;http://observer.guardian.co.uk/review/story/0,,2115519,00.html&quot;&gt;The Observer&lt;/a&gt; (haven&amp;rsquo;t actually read the book myself)
</content>
 </entry>
 
 <entry>
   <title>iPhone serial hacked, full interactive shell</title>
   <link href="https://nevyn.me/2007/07/07/iphone-serial-hacked-full-interactive-shell/"/>
   <updated>2007-07-07T11:11:06+02:00</updated>
   <id>https://nevyn.me/2007/07/07/iphone-serial-hacked-full-interactive-shell</id>
   <content type="html">&lt;a href=&quot;http://hackint0sh.org/forum/showthread.php?t=1408&quot;&gt;iPhone serial hacked, full interactive shell&lt;/a&gt;&lt;br/&gt;&lt;p&gt;We have interactive shell. I repeat, we have interactive shell. Via &lt;a href=&quot;http://iphone.fiveforty.net.nyud.net:8080/wiki/index.php?title=Main_Page&quot;&gt;iPhone Dev wiki&lt;/a&gt; via &lt;a href=&quot;http://www.appletvhacks.net/2007/07/06/iphoneinterface-lets-you-tweak-your-iphone/&quot;&gt;Apple TV Hacks&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Triumphant</title>
   <link href="https://nevyn.me/2007/07/06/triumphant/"/>
   <updated>2007-07-06T21:49:41+02:00</updated>
   <id>https://nevyn.me/2007/07/06/triumphant</id>
   <content type="html">&lt;p&gt;I just had the most &lt;i&gt;amazing&lt;/i&gt; dream, all set to Röyksopp&amp;rsquo;s Triumphant. I don&amp;rsquo;t remember the dream at all, though, but I certainly remember the music.&lt;/p&gt;
&lt;br/&gt;&lt;p&gt;&lt;embed src=&quot;http://nevyn.nu/music/jw/mp3player.swf&quot; width=&quot;510&quot; height=&quot;20&quot; type=&quot;application/x-shockwave-flash&quot; pluginspage=&quot;http://www.macromedia.com/go/getflashplayer&quot; flashvars=&quot;file= http://nevyn.nu/music/etc/01-royksopp-triumphant-prs.mp3&amp;amp;showdigits=false&amp;amp;autostart=false&quot;&gt;&lt;/embed&gt;&lt;br/&gt;&lt;b&gt;Röyksopp - Triumphant&lt;/b&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/07/05/the-original-human-pole-position-performance/"/>
   <updated>2007-07-05T09:14:17+02:00</updated>
   <id>https://nevyn.me/2007/07/05/the-original-human-pole-position-performance</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/ywqu_8RIDvU?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=ywqu_8RIDvU&amp;amp;mode=related&amp;amp;search=&quot;&gt;The Original Human POLE POSITION Performance&lt;/a&gt;. Also: &lt;a href=&quot;http://www.youtube.com/watch?v=WoUzfIlX_D8&amp;amp;mode=related&amp;amp;search=&quot;&gt;Pong&lt;/a&gt;, &lt;a href=&quot;http://www.youtube.com/watch?v=_JTbJdLwqMo&amp;amp;feature=dir&quot;&gt;Space Invaders&lt;/a&gt;, &lt;a href=&quot;http://www.youtube.com/watch?v=sWY0Q_lMFfw&amp;amp;mode=related&amp;amp;search=&quot;&gt;more Pong&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/07/05/in-a-perfect-world-lowest-common-denominator/"/>
   <updated>2007-07-05T08:27:19+02:00</updated>
   <id>https://nevyn.me/2007/07/05/in-a-perfect-world-lowest-common-denominator</id>
   <content type="html">&lt;p&gt;In a perfect world, &amp;lsquo;lowest common denominator with regards to feature set and quality&amp;rsquo; and 'market leader&amp;rsquo; are mutually exclusive.&lt;/p&gt;

&lt;p style=&quot;font-size:200%; color: #f55; text-align: center;&quot;&gt;I hate you, Internet Explorer!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>my camera was not at the inverness police</title>
   <link href="https://nevyn.me/2007/07/05/my-camera-was-not-at-the-inverness-police/"/>
   <updated>2007-07-05T00:37:54+02:00</updated>
   <id>https://nevyn.me/2007/07/05/my-camera-was-not-at-the-inverness-police</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/4917032_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;MY CAMERA WAS NOT AT THE INVERNESS POLICE STATION.&lt;/p&gt;

&lt;p&gt;IT IS GONE FOREVER.&lt;/p&gt;

&lt;p&gt;Incidentally, they received some MEMORY CARDS but they said THEY DID NOT KEEP THEM. Yes, because who could possibly have lost a memory card FULL OF AWESOME PICTURES and then want it back?&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>This phone flies in the face of all those who think that 1.0 products must be either fully focused on one task to be done well, or those that consider 1.0 products something you should avoid by default until the next release, you know, the one with all the bugs worked out.
[…] As others continue to market proudly their “alpha” and “beta” stickers, Apple shows us all, that you can deliver a 1.0 experience that really is complete. […]

What it means to be 1.0 will never be the same.</title>
   <link href="https://nevyn.me/2007/07/03/this-phone-flies-in-the-face-of-all-those-who/"/>
   <updated>2007-07-03T05:17:09+02:00</updated>
   <id>https://nevyn.me/2007/07/03/this-phone-flies-in-the-face-of-all-those-who</id>
   <content type="html">&lt;blockquote&gt;&lt;p style=&quot;font-size:70%&quot;&gt;This phone flies in the face of all those who think that 1.0 products must be either fully focused on one task to be done well, or those that consider 1.0 products something you should avoid by default until the next release, you know, the one with all the bugs worked out.&lt;/p&gt;
&lt;p style=&quot;font-size:70%&quot;&gt;[&amp;hellip;] As others continue to market proudly their &amp;ldquo;alpha&amp;rdquo; and &amp;ldquo;beta&amp;rdquo; stickers, Apple shows us all, that you can deliver a 1.0 experience that really is complete. [&amp;hellip;]
&lt;/p&gt;
&lt;p style=&quot;color:#c77&quot;&gt;What it means to be 1.0 will never be the same.&lt;/p&gt;&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://davidweiss.blogspot.com/2007/07/10-that-wasnt.html&quot;&gt;David Weiss: The 1.0 that wasn&amp;rsquo;t&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>the joy of tech comic laughter is the best tech</title>
   <link href="https://nevyn.me/2007/06/29/the-joy-of-tech-comic-laughter-is-the-best-tech/"/>
   <updated>2007-06-29T21:49:27+02:00</updated>
   <id>https://nevyn.me/2007/06/29/the-joy-of-tech-comic-laughter-is-the-best-tech</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/4536986_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.geekculture.com/joyoftech/joyarchives/975.html&quot;&gt;The Joy of Tech comic&amp;hellip; laughter is the best tech support.&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Relaxing</title>
   <link href="https://nevyn.me/2007/06/29/relaxing/"/>
   <updated>2007-06-29T00:02:09+02:00</updated>
   <id>https://nevyn.me/2007/06/29/relaxing</id>
   <content type="html">&lt;p&gt;I met with a client yesterday, and at the same time with another consultant that I helped get a job for them. He seemed eh, a little bit more professional than me&amp;hellip; He actually demanded *deadlines*. I then realized how stupid it was of me to never do the same, to just accept &amp;ldquo;ASAP!!&amp;rdquo; as a deadline. So now my projects got a deadline *in the autumn* which is lightyears away in my measures. So I&amp;rsquo;ve dedicated two days, today and tomorrow, as First Real Days of Summer Vacation, where I&amp;rsquo;m not stressed out about work, school or travels, just relax'uhn.&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;m probably just going to be bored, though.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/06/28/best-mac-vs-pc-video-evar/"/>
   <updated>2007-06-28T04:18:03+02:00</updated>
   <id>https://nevyn.me/2007/06/28/best-mac-vs-pc-video-evar</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/Jkrn6ecxthM?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=Jkrn6ecxthM&quot;&gt;Best Mac vs PC video EVAR.&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/06/27/marble-machine-1-in-action-via-matthiaswandel/"/>
   <updated>2007-06-27T07:17:27+02:00</updated>
   <id>https://nevyn.me/2007/06/27/marble-machine-1-in-action-via-matthiaswandel</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/26EE3jG5thM?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Marble machine 1 in action (via &lt;a href=&quot;http://youtube.com/user/Matthiaswandel&quot;&gt;Matthiaswandel&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/06/27/marble-adding-machine-via-matthiaswandel/"/>
   <updated>2007-06-27T07:09:57+02:00</updated>
   <id>https://nevyn.me/2007/06/27/marble-adding-machine-via-matthiaswandel</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/GcDshWmhF4A?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Marble adding machine (via &lt;a href=&quot;http://youtube.com/user/Matthiaswandel&quot;&gt;Matthiaswandel&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>I'm Sure It Makes Sense To the Creator</title>
   <link href="https://nevyn.me/2007/06/26/im-sure-it-makes-sense-to-the-creator/"/>
   <updated>2007-06-26T22:57:26+02:00</updated>
   <id>https://nevyn.me/2007/06/26/im-sure-it-makes-sense-to-the-creator</id>
   <content type="html">&lt;p&gt;Hm-mm-m! I was sampling &lt;code&gt;mds&lt;/code&gt; this morning and came across:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;&lt;code&gt;
247 -[SISearchCtx executeSearchContextCracked_2:jobNum:]
&lt;/code&gt;&lt;/pre&gt;&lt;/blockquote&gt;
&lt;p&gt;Cracked? Cracked, you say? Hm-mm&amp;hellip;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Someone trying to scam my brother, failing miserably</title>
   <link href="https://nevyn.me/2007/06/26/someone-trying-to-scam-my-brother-failing/"/>
   <updated>2007-06-26T03:20:43+02:00</updated>
   <id>https://nevyn.me/2007/06/26/someone-trying-to-scam-my-brother-failing</id>
   <content type="html">&lt;section&gt;&lt;dialog&gt;&lt;dt&gt;(me in another convo):&lt;/dt&gt;&lt;dd&gt;Call Paypal and make sure the funds is on the account. If they're not, he's probably a scammer.&lt;/dd&gt;&lt;dt&gt;Bengan (in convo with the scammer):&lt;/dt&gt;&lt;dd&gt;reversed?&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;what are you doing man?&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;i did it&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;because&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;i cannot let you call them&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;and now&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;since you did call them&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;MY ants sister dad's mum accounts Limited&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;u have to decide&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;dont call them&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;and why not?&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;wtf do all my family think?&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;we are wery richt&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;and if im not using the money the right way, they abandon me&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;yeah thats not too smart reversing the money like 4 times&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;true :\&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;so i guess&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;ull have to pay to my credit card in sweden&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;or we're not making a deal&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;damn :\&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;so you gonna do that?&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;no&lt;/dd&gt;&lt;dt&gt;&lt;/dt&gt;&lt;dd&gt;[ ... ]&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;can we have a phonetalk then?&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;i loosed my phone in the sea&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;and my god... your still trying to convince me ur not a scammer&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;whatever ur trying to pull here, im not gonna let you scam me, if you are a scammer, ur really wasting ur time here&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;im not an scammer&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;then we have no problem&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;are u dumb ? no offence but&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;i think you are&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;cus&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;have u ever been rich?&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;it isnt easy&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;your parrents is thinking more of the money&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;than theyr son&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;why reverse the cash?&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;paypal isnt gonna tell ur parents they investigated their accounts &lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;WHWHAHAAHAHATTAAAATTT?????&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;YOU KIDDING ME?&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;you dont have any other phone around you?&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;no&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;goto a phone booth?&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;nah&lt;/dd&gt;&lt;dt&gt;&lt;/dt&gt;&lt;dd&gt;[ ... ]&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;u just stole 200euro&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;and i will have to talk with my dad for it&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;i never stole it, its reversed&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;u stole it&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;soo&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;i rather just get a cab&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;and go on hes job&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;there you can call me, if you call me ill give the 200 euros back&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;noep&lt;/dd&gt;&lt;dt&gt;Bengan:&lt;/dt&gt;&lt;dd&gt;okay so you rather goto ur dad and tell him im a scammer than giving me a phonecall&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;yea&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;rather you give me [the item]&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;and we forget about this&lt;/dd&gt;&lt;dt&gt;Kim:&lt;/dt&gt;&lt;dd&gt;and ye, im blackmailing you&lt;/dd&gt;&lt;/dialog&gt;&lt;/section&gt;
</content>
 </entry>
 
 <entry>
   <title>since im much too lazy to blog about actual</title>
   <link href="https://nevyn.me/2007/06/23/since-im-much-too-lazy-to-blog-about-actual/"/>
   <updated>2007-06-23T20:28:14+02:00</updated>
   <id>https://nevyn.me/2007/06/23/since-im-much-too-lazy-to-blog-about-actual</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/4104739_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;Since I&amp;rsquo;m much too lazy to blog about &lt;i&gt;actual experiences&lt;/i&gt;, you&amp;rsquo;ll have to &lt;a href=&quot;http://another-morning.net/blog/show/20&quot;&gt;read Amanda&amp;rsquo;s account&lt;/a&gt; for what I&amp;rsquo;ve been up to the past three weeks if that sort of things interests you.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>public thoughts: End the Safari crashes</title>
   <link href="https://nevyn.me/2007/06/23/public-thoughts-end-the-safari-crashes/"/>
   <updated>2007-06-23T18:38:04+02:00</updated>
   <id>https://nevyn.me/2007/06/23/public-thoughts-end-the-safari-crashes</id>
   <content type="html">&lt;a href=&quot;http://christian.web42.com/en/archives/000164.html&quot;&gt;public thoughts: End the Safari crashes&lt;/a&gt;&lt;br/&gt;&lt;p&gt;If your Windows Safari 3 installation crashes often, here&amp;rsquo;s the solution. For Swedish users, the folder names are &amp;lsquo;sv.lproj&amp;rsquo; and 'Swedish.lproj&amp;rsquo;. &lt;b&gt;Update&lt;/b&gt;: &lt;a href=&quot;http://rakaz.nl/item/how_to_stop_safari_from_constantly_crashing&quot;&gt;Easier solution&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>from penny arcade yes this is how it feels to</title>
   <link href="https://nevyn.me/2007/06/22/from-penny-arcade-yes-this-is-how-it-feels-to/"/>
   <updated>2007-06-22T02:48:30+02:00</updated>
   <id>https://nevyn.me/2007/06/22/from-penny-arcade-yes-this-is-how-it-feels-to</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/3987630_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;(from &lt;a href=&quot;http://www.penny-arcade.com/comic/2007/06/08&quot;&gt;Penny Arcade&lt;/a&gt;. Yes, this is how it feels to play on Live Arcade.)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>My Girl is a Lucky Girl</title>
   <link href="https://nevyn.me/2007/06/20/my-girl-is-a-lucky-girl/"/>
   <updated>2007-06-20T05:41:58+02:00</updated>
   <id>https://nevyn.me/2007/06/20/my-girl-is-a-lucky-girl</id>
   <content type="html">&lt;p&gt;Voy! I just returned from &lt;a href=&quot;http://web.dreamhack.se/&quot;&gt;Dreamhack Summer &amp;lsquo;07&lt;/a&gt;. While the event was fun, the awesomest thing is that &lt;a href=&quot;http://another-morning.net/&quot;&gt;my girlfriend&lt;/a&gt; won an &lt;a href=&quot;http://en.wikipedia.org/wiki/Xbox_360&quot;&gt;XBox 360&lt;/a&gt;! I guess I&amp;rsquo;ll be a giddy Microsoft fanboy a while on.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Blog'd!</title>
   <link href="https://nevyn.me/2007/06/20/blogd/"/>
   <updated>2007-06-20T05:32:58+02:00</updated>
   <id>https://nevyn.me/2007/06/20/blogd</id>
   <content type="html">&lt;p&gt;I &lt;a href=&quot;http://gizmodo.com/gadgets/too-much-free-time/homemade-transformers-costumes-created-without-computer-graphics-269938.php#c1689661&quot;&gt;left a comment on a Gizmodo post about &lt;i&gt;Transformers&lt;/i&gt; nerds&lt;/a&gt; wondering about why nerds always deprecate themselves and are ashamed of other nerds. &lt;a href=&quot;http://www.geekstudies.org/&quot;&gt;Jason Tocci over at Geek Studies.org&lt;/a&gt; found the comment interesting enough to &lt;a href=&quot;http://www.geekstudies.org/2007/06/more-than-meets-the-eye&quot;&gt;blog about it&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt; I&amp;rsquo;ve been fascinated with this kind of self-taboo within geek/nerd cultures since I started studying Game Programming at &lt;a href=&quot;http://bth.se/&quot;&gt;Blekinge Institute of Technology&lt;/a&gt;. No one here is openly nerdy unless you know them well. If someone finds himself discussing intricacies of C++ syntax while on the bus, he&amp;rsquo;ll quickly switch subject to the weekend&amp;rsquo;s party when he realizes what he&amp;rsquo;s talking about. Even though me and my friends here have lots of common interests, conversations may die out entirely because we have nothing /non-nerdy/ to talk about &amp;ndash; it&amp;rsquo;s as if it&amp;rsquo;s unsocial and &amp;lsquo;boring&amp;rsquo; to talk about nerd stuff. The really weird thing is that I do it myself too!&lt;/p&gt;

&lt;p&gt;I&amp;rsquo;ll be following Geek Studies. Perhaps Jason will unravel the mystery of the Geek Shame.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/06/17/whats-the-worst-thing-that-can-happen/"/>
   <updated>2007-06-17T21:26:16+02:00</updated>
   <id>https://nevyn.me/2007/06/17/whats-the-worst-thing-that-can-happen</id>
   <content type="html">&lt;object width=&quot;400&quot; height=&quot;338&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://embed.break.com/MzExODA1&quot;&gt;&lt;/param&gt;&lt;embed src=&quot;http://embed.break.com/MzExODA1&quot; type=&quot;application/x-shockwave-flash&quot; width=&quot;400&quot; height=&quot;338&quot;&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br&gt;&lt;font size=1&gt;&lt;a href=&quot;http://www.break.com/index/tough-to-argue.html&quot;&gt;Interesting Argument About Global Warming&lt;/a&gt; - Watch more &lt;a href=&quot;http://www.break.com/&quot;&gt;free videos&lt;/a&gt;&lt;/font&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.break.com/index/tough-to-argue.html&quot;&gt;What&amp;rsquo;s the worst thing that can happen?&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/06/16/is-your-pc-feeling-a-little-bloated-via/"/>
   <updated>2007-06-16T18:32:44+02:00</updated>
   <id>https://nevyn.me/2007/06/16/is-your-pc-feeling-a-little-bloated-via</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/3hDdw_PA7xw?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Is Your PC Feeling a Little Bloated? (via &lt;a href=&quot;http://gizmodo.com/gadgets/video/which-pcs-are-most-bloated-269425.php&quot;&gt;gizmodo.com&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/06/16/japanese-tetris-awesome/"/>
   <updated>2007-06-16T08:16:50+02:00</updated>
   <id>https://nevyn.me/2007/06/16/japanese-tetris-awesome</id>
   <content type="html">&lt;object width='448' height='336'&gt;&lt;param name='movie' value='http://www.glumbert.com/embed/japtetris'&gt;&lt;/param&gt;&lt;param name='wmode' value='transparent'&gt;&lt;/param&gt;&lt;embed src='http://www.glumbert.com/embed/japtetris' type='application/x-shockwave-flash' wmode='transparent' width='448' height='336'&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div&gt;&lt;a href='http://www.glumbert.com/media/japtetris'&gt;glumbert.com - Japanese Tetris&lt;/a&gt;&lt;/div&gt;&lt;br/&gt;&lt;p&gt;Japanese &amp;ldquo;tetris&amp;rdquo;. Awesome!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Rockness</title>
   <link href="https://nevyn.me/2007/06/07/rockness/"/>
   <updated>2007-06-07T05:16:18+02:00</updated>
   <id>https://nevyn.me/2007/06/07/rockness</id>
   <content type="html">&lt;a href=&quot;http://rockness.co.uk/&quot;&gt;Rockness&lt;/a&gt;&lt;br/&gt;&lt;p&gt;I&amp;rsquo;m leaving for Scotland in a few hours. See you in a week!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Email is such a funny thing. People hand you these single little messages that are no heavier than a river pebble. But it doesn’t take long until you have acquired a pile of pebbles that’s taller than you and heavier than you could ever hope to move, even if you wanted to do it over a few dozen trips. But for the person who took the time to hand you their pebble, it seems outrageous that you can’t handle that one tiny thing. “What ‘pile’? It’s just a fucking pebble!”</title>
   <link href="https://nevyn.me/2007/06/05/email-is-such-a-funny-thing-people-hand-you-these/"/>
   <updated>2007-06-05T20:06:24+02:00</updated>
   <id>https://nevyn.me/2007/06/05/email-is-such-a-funny-thing-people-hand-you-these</id>
   <content type="html">&lt;blockquote&gt;Email is such a funny thing. People hand you these single little messages that are no heavier than a river pebble. But it doesn’t take long until you have acquired a pile of pebbles that’s taller than you and heavier than you could ever hope to move, even if you wanted to do it over a few dozen trips. But for the person who took the time to hand you their pebble, it seems outrageous that you can’t handle that one tiny thing. “What ‘pile’? It’s just a fucking &lt;i&gt;pebble&lt;/i&gt;!”&lt;/blockquote&gt;&amp;#8212;Merlin Mann on &lt;a href=&quot;http://www.43folders.com/2007/05/30/email-bankruptcy-2/&quot;&gt;the strange allure (and false hope) of email bankruptcy&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/06/04/i-just-realized-i-hadnt-liked-to-this-yet/"/>
   <updated>2007-06-04T21:51:53+02:00</updated>
   <id>https://nevyn.me/2007/06/04/i-just-realized-i-hadnt-liked-to-this-yet</id>
   <content type="html">&lt;!-- Start of Brightcove Player --&gt;
&lt;div style=&quot;display:none&quot;&gt;

&lt;/div&gt;
&lt;script src=&quot;http://admin.brightcove.com/js/experience_util.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
 // By use of this code snippet, I agree to the Brightcove Publisher T and C 
 // found at http://www.brightcove.com/publishertermsandconditions.html. 

 var config = new Array();

 /* 
 * feel free to edit these configurations
 * to modify the player experience
 */
 config[&quot;videoId&quot;] = null; //the default video loaded into the player
 config[&quot;videoRef&quot;] = null; //the default video loaded into the player by ref id specified in console
 config[&quot;lineupId&quot;] = null; //the default lineup loaded into the player
 config[&quot;playerTag&quot;] = null; //player tag used for identifying this page in brightcove reporting
 config[&quot;autoStart&quot;] = false; //tells the player to start playing video on load
 config[&quot;preloadBackColor&quot;] = &quot;#FFFFFF&quot;; //background color while loading the player

  /* 
 * set the player's size using the parameters below
 * to make this player dynamically resizable, set the width and height as a percentage
 */
 config[&quot;width&quot;] = 486;
 config[&quot;height&quot;] = 412;
 
 /* do not edit these config items */
 config[&quot;playerId&quot;] = 713271701;
 
 createExperience(config, 8);
&lt;/script&gt;
&lt;!-- End of Brightcove Player --&gt;&lt;br/&gt;&lt;p&gt;I just realized I hadn&amp;rsquo;t liked to this yet. Everyone should see this. &lt;a href=&quot;http://www.perceptivepixel.com/&quot;&gt;This is truly the future of computing&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>No, the problem is that programming is really fucking hard; and if you look at those people who are acknowledged as the best programers, they’re generally the ones who acknowledge that […]</title>
   <link href="https://nevyn.me/2007/06/02/no-the-problem-is-that-programming-is-really/"/>
   <updated>2007-06-02T08:54:38+02:00</updated>
   <id>https://nevyn.me/2007/06/02/no-the-problem-is-that-programming-is-really</id>
   <content type="html">&lt;blockquote&gt;No, the problem is that programming is &lt;i&gt;really fucking hard&lt;/i&gt;; and if you look at those people who are acknowledged as the best programers, they&amp;rsquo;re generally the ones who acknowledge that [&amp;hellip;]&lt;/blockquote&gt;&amp;#8212;gwenhwyfaer in a comment to &lt;a href=&quot;http://worsethanfailure.com/The-Great-Pyramid-of-Agile.aspx&quot;&gt; The Great Pyramid of Agile &lt;/a&gt; at &lt;a href=&quot;http://worsethanfailure.com/&quot;&gt;Worse Than Failure&lt;/a&gt;, in response to the statement that &amp;ldquo;The problem with our industry, as I see it, is that anyone can program.&amp;rdquo;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/06/01/im-on-national-tv/"/>
   <updated>2007-06-01T21:12:23+02:00</updated>
   <id>https://nevyn.me/2007/06/01/im-on-national-tv</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/-ra-_fZeXYQ?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;I&amp;rsquo;m on national TV! ;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The disk &quot;Foo&quot; is in use and could not be ejected.</title>
   <link href="https://nevyn.me/2007/05/29/the-disk-foo-is-in-use-and-could-not-be-ejected/"/>
   <updated>2007-05-29T19:07:07+02:00</updated>
   <id>https://nevyn.me/2007/05/29/the-disk-foo-is-in-use-and-could-not-be-ejected</id>
   <content type="html">Solution (because just &amp;lsquo;lsof&amp;rsquo; doesn&amp;rsquo;t work):

&lt;pre&gt;&lt;code&gt;
sudo lsof +D /Volumes/Foo
&lt;/code&gt;&lt;/pre&gt;

Tadaaa! Creds to &lt;a href=&quot;http://e-scribe.com/news/61#18&quot;&gt;Russell Edwards in a comment&lt;/a&gt; to an &lt;a href=&quot;http://e-scribe.com/news/61&quot;&gt;e-scribe blog post&lt;/a&gt;.
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/05/26/tagging-houses-with-a-laser-projector-via-the/"/>
   <updated>2007-05-26T10:08:41+02:00</updated>
   <id>https://nevyn.me/2007/05/26/tagging-houses-with-a-laser-projector-via-the</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/EFWcAkxzkv4?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Tagging HOUSES with a laser projector. Via the &lt;a href=&quot;http://project.ioni.st/post/1198#video_1198&quot;&gt;project.ioni.st&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/05/25/hello-future/"/>
   <updated>2007-05-25T08:27:21+02:00</updated>
   <id>https://nevyn.me/2007/05/25/hello-future</id>
   <content type="html">&lt;p&gt;&lt;span style=&quot;font-size: 2em;&quot;&gt;Hello future.&lt;/span&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The Theoretical Game</title>
   <link href="https://nevyn.me/2007/05/22/the-theoretical-game/"/>
   <updated>2007-05-22T06:58:38+02:00</updated>
   <id>https://nevyn.me/2007/05/22/the-theoretical-game</id>
   <content type="html">&lt;a href=&quot;http://thirdcog.eu/apps/theoretical/&quot;&gt;The Theoretical Game&lt;/a&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://thirdcog.eu/apps/theoretical/&quot;&gt;&lt;img src=&quot;http://thirdcog.eu/images/theoretical/05%20Blue%20won%20round.png&quot; alt=&quot;The Theoretical Game screenshot&quot;/&gt;&lt;/a&gt;&lt;br/&gt;&lt;/p&gt;
&lt;p&gt;I present unto thee: my latest creation. And my first Java cell phone game.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/05/21/2184635/"/>
   <updated>2007-05-21T07:50:13+02:00</updated>
   <id>https://nevyn.me/2007/05/21/2184635</id>
   <content type="html">&lt;iframe src=&quot;https://player.vimeo.com/video/192645?title=0&amp;byline=0&amp;portrait=0&quot; width=&quot;400&quot; height=&quot;300&quot; frameborder=&quot;0&quot; title=&quot;7 year old kid (me) talking about Apple IIs back in &amp;#039;82&quot; webkitallowfullscreen mozallowfullscreen allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;
</content>
 </entry>
 
 <entry>
   <title>CuteFTP sucks badly.</title>
   <link href="https://nevyn.me/2007/05/18/cuteftp-sucks-badly/"/>
   <updated>2007-05-18T21:35:51+02:00</updated>
   <id>https://nevyn.me/2007/05/18/cuteftp-sucks-badly</id>
   <content type="html">&lt;p&gt;Don&amp;rsquo;t download it. In particular, don&amp;rsquo;t pay for it. My client paid $40 to them for it just to get some proper support from them, and even then, all they said was &amp;ldquo;It&amp;rsquo;s a fault in the configuration of the server you&amp;rsquo;re connecting to. Ask the server&amp;rsquo;s administrator to fix it.&amp;rdquo;, when the &amp;ldquo;fault&amp;rdquo; was that my server uses Unicode instead of ISO-Latin-1 for file name encodings.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/05/18/wobbly-worm-the-motion-the-icons-in-your-mac-os-x/"/>
   <updated>2007-05-18T04:39:40+02:00</updated>
   <id>https://nevyn.me/2007/05/18/wobbly-worm-the-motion-the-icons-in-your-mac-os-x</id>
   <content type="html">&lt;dl&gt;&lt;dt&gt;&lt;strong&gt;Wobbly Worm&lt;/strong&gt;&lt;/dt&gt;
&lt;dd&gt;The motion the icons in your Mac OS X Dock will make when you, after a reboot, launch all your common apps by clicking on them in order, making them do their &amp;ldquo;I&amp;rsquo;m launching&amp;rdquo; dance in a wave.&lt;/dd&gt;
&lt;/dl&gt;&lt;p&gt;(My Wobbly Worm is: iTunes, Safari, Mail, Adium, iCal, Colloquy and XCode.) &lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Despite the complete absurdity of the design request, […] the job will go to a candidate who manages to answer the question by designing an extremely overcomplicated solution for a completely non-existent problem. And that candidate will be the same person who designs their software.</title>
   <link href="https://nevyn.me/2007/05/17/despite-the-complete-absurdity-of-the-design/"/>
   <updated>2007-05-17T21:29:54+02:00</updated>
   <id>https://nevyn.me/2007/05/17/despite-the-complete-absurdity-of-the-design</id>
   <content type="html">&lt;blockquote&gt;Despite the complete absurdity of the design request, [&amp;hellip;] the job will go to a candidate who manages to answer the question by designing an extremely overcomplicated solution for a completely non-existent problem. And that candidate will be the same person who designs their software.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://worsethanfailure.com/&quot;&gt;Worse Than Failure&lt;/a&gt; &lt;a href=&quot;http://worsethanfailure.com/Articles/Riddle-Me-An-Interview.aspx&quot;&gt;on Microsoft&amp;rsquo;s job interview practice&lt;/a&gt;.
</content>
 </entry>
 
 <entry>
   <title>I’m not sure how long it takes to twist your brain into a state where teenagers having cancer seems preferable to teenagers having sex, but I can’t imagine it’s easy. You really have to struggle to be that stupid.</title>
   <link href="https://nevyn.me/2007/05/16/im-not-sure-how-long-it-takes-to-twist-your-brain/"/>
   <updated>2007-05-16T00:35:15+02:00</updated>
   <id>https://nevyn.me/2007/05/16/im-not-sure-how-long-it-takes-to-twist-your-brain</id>
   <content type="html">&lt;blockquote&gt;I’m not sure how long it takes to twist your brain into a state where teenagers having cancer seems preferable to teenagers having sex, but I can’t imagine it’s easy. You really have to struggle to be that stupid.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://doodleplex.com/glassmaze/index.php/why-right-wing-crazies-love-cervical-cancer&quot;&gt;Why Right Wing Crazies Love Cervical Cancer | Glass Maze&lt;/a&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/05/15/in-case-youve-been-trying-to-reach-me-lately-im/"/>
   <updated>2007-05-15T20:51:02+02:00</updated>
   <id>https://nevyn.me/2007/05/15/in-case-youve-been-trying-to-reach-me-lately-im</id>
   <content type="html">&lt;p&gt;In case you&amp;rsquo;ve been trying to reach me lately: I&amp;rsquo;m writing code until 8 am mostly every day now. &lt;a href=&quot;http://friendlystapler.se/&quot;&gt;The Big Project&lt;/a&gt; has a Last Day Of Code this Sunday, and we&amp;rsquo;re faaaaar from being done. Meanwhile, three of my clients are bugging me for important updates and bug fixes.&lt;/p&gt;

&lt;p&gt;See you when things slow down.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Very strange double-free in SUI102::dealloc</title>
   <link href="https://nevyn.me/2007/05/15/very-strange-double-free-in-sui102dealloc/"/>
   <updated>2007-05-15T10:42:59+02:00</updated>
   <id>https://nevyn.me/2007/05/15/very-strange-double-free-in-sui102dealloc</id>
   <content type="html">In two completely different apps, one Carbon and one Cocoa, at some point, the system seems to want to wander off into some obscure part of the system and initialize the camera system. In the Carbon app, it&amp;rsquo;s in the standard event polling loop for no apparent reason. In the Cocoa app, it&amp;rsquo;s when I&amp;rsquo;m showing an open-file panel, for no apparent reason. I&amp;rsquo;ll show you snippets of the call trace in the Cocoa app:
&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;#46 0x00002236 in -[SlideshowView initWithFrame:] &lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;
Okay, so that&amp;rsquo;s expected. 
&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;#45 0x9346ce20 in -[NSSavePanel(NSSavePanelRuntime) runModalForDirectory:file:types:] ()&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;
Yep, that&amp;rsquo;s what I&amp;rsquo;m asking for.
&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;
#44 0x93346fab in -[NSApplication runModalForWindow:] ()#39 0x92dd6fe2 in ReceiveNextEventCommon ()
#43 0x933481d4 in -[NSApplication _realDoModalLoop:peek:] ()
#42 0x9327d056 in -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] ()
#41 0x9327d465 in _DPSNextEvent ()
#40 0x92dd6e39 in BlockUntilNextEventMatchingListInMode ()
&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;
Okay, fine, you want to poll for events. That&amp;rsquo;s okay, I said &amp;lsquo;show it modally&amp;rsquo;.
&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;#33 0x92e5eebd in ActivateTSMDocument ()
#29 0x92e612af in InitKeybdMenu ()
#28 0x92ff33da in EstablishSelectedInputMethodsOfClassesIn ()
#27 0x9083db30 in CFArrayApplyFunction ()
#26 0x92ff43f4 in EstablishSelectedInputMethodsOfClass ()
#25 0x908259cb in CFDictionaryApplyFunction ()
#24 0x92ff344e in EstablishSelectedInputMethodsScriptIterator ()
#23 0x9083db30 in CFArrayApplyFunction ()
#22 0x92ff6524 in EstablishSelectedInputMethodsComponentIterator ()
#21 0x92ff1d4d in SetTextServiceSelected ()
#20 0x92ff1ac4 in SetTextServiceSelectedCore ()
#19 0x92e65915 in ConvertToComponentID ()
#18 0x90cbc56e in FindNextComponent ()
#17 0x90cbc5da in FindNextComponentInternal ()
#16 0x90cbc994 in registerSystemComponents ()
#15 0x90cbf971 in processSerialKissers ()
#14 0x90cfddfb in kissComponent ()
#13 0x90cd3389 in CallComponentRegister ()
#12 0x90cce7f8 in CallComponentDispatch ()
#11 0x90cce8cc in CallComponent ()
#10 0x0af38caf in sgpnMainEntry ()
#9  0x90cceb13 in CallComponentFunctionCommon ()
#8  0x0af38d08 in sgpnRegister ()
&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;
Yeah okay, you&amp;rsquo;re doing some magic to populate some UI or something, instantiating some dynamically linked code component. Fine, I can buy that too. I&amp;rsquo;m sure there&amp;rsquo;s a lot of that going on behind my back.
&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;#7  0x0af34fdf in CameraCentral::startupWithNotificationsOnMainThread ()
&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;
Or uh&amp;hellip; What, what?! CameraCentral? What the hell does the camera have to do with anything?

&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;
#6  0x0af34c6d in CameraCentral::registerCameraDriver ()
#5  0x0aef7d6d in SUI102::~SUI102 ()
#4  0x0aef7c7e in SUI102::dealloc ()
#3  0x90005d0f in free ()
#2  0x9010eb32 in abort ()
&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;
Oh *SMOOTH*. Not only are you for some absurd reason loading camera drivers, you happened to load a camera driver that does a *double free* in its destructor (You create a driver and then immediately destroy it, too? Ohhh, cruel.). It must be my birthday.

&lt;p&gt;&lt;b&gt;UPDATE&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Apparently, Sonix SN9C201 WebCam.component is utter shite. Don&amp;rsquo;t install it. Thanks to jonmarimba, mikeash and rudy over at &lt;a href=&quot;irc://leguin.freenode.net/macdev/&quot;&gt;#macdev&lt;/a&gt; on freenode for the help :)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Mac frameworks for common game libraries - GLEW</title>
   <link href="https://nevyn.me/2007/05/14/mac-frameworks-for-common-game-libraries-glew/"/>
   <updated>2007-05-14T23:03:00+02:00</updated>
   <id>https://nevyn.me/2007/05/14/mac-frameworks-for-common-game-libraries-glew</id>
   <content type="html">&lt;a href=&quot;http://thirdcog.eu/proj/macfw/index.html#glew&quot;&gt;Mac frameworks for common game libraries - GLEW&lt;/a&gt;&lt;br/&gt;&lt;p&gt;I&amp;rsquo;ve added GLEW to my list of Frameworkified game libraries.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>FreeImage is now Frameworkified.</title>
   <link href="https://nevyn.me/2007/05/03/freeimage-is-now-frameworkified/"/>
   <updated>2007-05-03T09:02:00+02:00</updated>
   <id>https://nevyn.me/2007/05/03/freeimage-is-now-frameworkified</id>
   <content type="html">&lt;p&gt;I&amp;rsquo;ve updated my &lt;a href=&quot;http://thirdcog.eu/proj/macfw/&quot;&gt;Mac frameworks for common game libraries&lt;/a&gt; page with instructions and binaries for the &lt;a href=&quot;http://freeimage.sourceforge.net/&quot;&gt;FreeImage library&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>09 F9 11 02 9D 74 E3 5B D8 41 56 C5 63 56 88 C0</title>
   <link href="https://nevyn.me/2007/05/02/09-f9-11-02-9d-74-e3-5b-d8-41-56-c5-63-56-88-c0/"/>
   <updated>2007-05-02T17:28:39+02:00</updated>
   <id>https://nevyn.me/2007/05/02/09-f9-11-02-9d-74-e3-5b-d8-41-56-c5-63-56-88-c0</id>
   <content type="html">&lt;p&gt;Wow. &lt;a href=&quot;http://blog.wired.com/gadgets/2007/02/the_new_hddvdbl.html&quot;&gt;Next-gen DVD DRM is so dead&lt;/a&gt;.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/04/28/medc-2007-worst-practices-microsoft-presentations/"/>
   <updated>2007-04-28T08:16:44+02:00</updated>
   <id>https://nevyn.me/2007/04/28/medc-2007-worst-practices-microsoft-presentations</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/qZOL878CwfM?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=qZOL878CwfM&quot;&gt;MEDC 2007 Worst Practices&lt;/a&gt;. Microsoft presentations seem so fun :P (via &lt;a href=&quot;http://www.objective-d.com/?p=23&quot;&gt;objective-d.com&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/04/20/richard-stallman-free-software-song-must-be-seen/"/>
   <updated>2007-04-20T23:23:55+02:00</updated>
   <id>https://nevyn.me/2007/04/20/richard-stallman-free-software-song-must-be-seen</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/9sJUDx7iEJw?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://www.youtube.com/watch?v=9sJUDx7iEJw&quot;&gt;Richard Stallman Free software Song&lt;/a&gt;. Must be seen to be believed.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>hanging tough via pk images</title>
   <link href="https://nevyn.me/2007/04/20/hanging-tough-via-pk-images/"/>
   <updated>2007-04-20T05:50:35+02:00</updated>
   <id>https://nevyn.me/2007/04/20/hanging-tough-via-pk-images</id>
   <content type="html">&lt;img src=&quot;/tumblr_files/1061298_500.jpg&quot;/&gt;&lt;br/&gt;&lt;p&gt;&lt;a href=&quot;http://flickr.com/photos/pk-images/102137441/in/set-72057594085495408/&quot;&gt;Hanging Tough&lt;/a&gt; (via &lt;a href=&quot;http://flickr.com/photos/pk-images&quot;&gt;pk-Images&lt;/a&gt;)&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>IPv6: Turning our salvation into a mouthful of disappointment</title>
   <link href="https://nevyn.me/2007/04/19/ipv6-turning-our-salvation-into-a-mouthful-of/"/>
   <updated>2007-04-19T03:46:43+02:00</updated>
   <id>https://nevyn.me/2007/04/19/ipv6-turning-our-salvation-into-a-mouthful-of</id>
   <content type="html">&lt;p&gt;Unholy mother of uninformed panic, this is so bafflingly idiotic. End-to-end NAT-less communication is the very *dream* that I hoped that IPv6 would bring, but now this single feature is deemed a *security issue* and recommended to be blocked? ACK! &lt;/p&gt;

&lt;p&gt;The genius at Homeland Security who started this oughta be banned from ever using a computer again. He/she obviously takes way too much pleasure in making using a computer a pain.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.karppinen.fi/2007/04/17/turning-a-feature-into-a-flaw/&quot;&gt;Read more about it at karppinen.fi.&lt;/a&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Um, maybe they think about computer science as programming because it is programming? Without programming, how exactly are computer scientists going to revolutionize anything at all? It’s like saying that people are discouraged from becoming surgeons because they think of it as “cutting people open”.</title>
   <link href="https://nevyn.me/2007/04/18/um-maybe-they-think-about-computer-science-as/"/>
   <updated>2007-04-18T08:36:31+02:00</updated>
   <id>https://nevyn.me/2007/04/18/um-maybe-they-think-about-computer-science-as</id>
   <content type="html">&lt;blockquote&gt;Um, maybe they think about computer science as programming because it is programming? Without programming, how exactly are computer scientists going to revolutionize anything at all? It’s like saying that people are discouraged from becoming surgeons because they think of it as “cutting people open”.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://daringfireball.net&quot;&gt;John Gruber&lt;/a&gt;&amp;rsquo;s &lt;a href=&quot;http://daringfireball.net/linked/2007/april#tue-17-comp_sci_nytimes&quot;&gt;commentary&lt;/a&gt; on &lt;a href=&quot;http://www.nytimes.com/2007/04/17/science/17comp.html?ex=1334462400&amp;amp;en=6f1818cfc32ea7e0&amp;amp;ei=5090&amp;amp;partner=rssuserland&amp;amp;emc=rss&quot;&gt;a NYT article on women in CS&lt;/a&gt;.
</content>
 </entry>
 
 <entry>
   <title>How to merge mp3:s</title>
   <link href="https://nevyn.me/2007/04/09/how-to-merge-mp3s/"/>
   <updated>2007-04-09T09:20:51+02:00</updated>
   <id>https://nevyn.me/2007/04/09/how-to-merge-mp3s</id>
   <content type="html">&lt;ol&gt;&lt;li&gt;Use MediaRage ( &lt;a href=&quot;http://www.chaoticsoftware.com/ProductPages/MediaRage.html&quot;&gt;http://www.chaoticsoftware.com/ProductPages/MediaRage.html&lt;/a&gt; ) to organize all the mp3&amp;rsquo;s in one big pile in a folder. Make sure that when sorted by name, the mp3&amp;rsquo;s are in playing order (for example, they would be so if they were called &amp;ldquo;disk 01 track 01 first track.mp3&amp;rdquo;, then &amp;ldquo;disk 01 track 02 second track.mp3&amp;rdquo;, and so on.)&lt;/li&gt;
&lt;li&gt;Download mpg123 from &lt;a href=&quot;http://macosx.forked.net/download.php?j=http://macosx.forked.net/p/mpg123-0.59r.pkg.tgz&quot;&gt;Forked.net&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Unpack and install&lt;/li&gt;
&lt;li&gt;Open Applications &amp;gt; Utilities &amp;gt; Terminal.app&lt;/li&gt;
&lt;li&gt;Write &amp;lsquo;cd &amp;rsquo; (without the &amp;rsquo;) in the newly opened terminal window&lt;/li&gt;
&lt;li&gt;Find the folder with the  mp3&amp;rsquo;s, and drag it to the terminal window, and press enter.&lt;/li&gt;
&lt;li&gt;Type:
	&lt;blockquote&gt;&lt;code&gt;&lt;pre&gt;/usr/local/bin/mpg123 -w allt.wav *.mp3&lt;/pre&gt;&lt;/code&gt;&lt;/blockquote&gt;
and press enter
&lt;/li&gt;
&lt;li&gt;Wait. You should be seeing &amp;ldquo;Decoding of (filnamn) finished.&amp;rdquo; once for every mp3 in the folder&lt;/li&gt;
&lt;li&gt;When it&amp;rsquo;s done, put the wav file in iTunes. If the result is an audio book, take step 10 and 12. Otherwise, you can skip them.&lt;/li&gt;
&lt;li&gt;In Preferences &amp;gt; Advanced &amp;gt; Importing, choose AAC encoding, press OK&lt;/li&gt;
&lt;li&gt;Right or ctrl click on the wav file in iTunes and select &amp;ldquo;Convert selection to AAC&amp;rdquo;&lt;/li&gt;
&lt;li&gt;When it&amp;rsquo;s done, get info on the aac file, and make sure that it&amp;rsquo;s bookmarked.&lt;/li&gt;
&lt;/ol&gt;
</content>
 </entry>
 
 <entry>
   <title>On burning students to a crisp</title>
   <link href="https://nevyn.me/2007/04/05/on-burning-students-to-a-crisp/"/>
   <updated>2007-04-05T09:37:36+02:00</updated>
   <id>https://nevyn.me/2007/04/05/on-burning-students-to-a-crisp</id>
   <content type="html">&lt;p&gt;When I was studying at highschool, they gave us larger and larger amounts of homework and projects and responsibilities to take care of. They motivated this practice by saying that it was a good thing – it would teach me how to prioritize and plan, to prepare me for university life.
&lt;/p&gt;
&lt;p&gt;All it did was make me miserable, because as little as you can make a coffee maker be better at making coffee faster by pouring more and more water and coffee powder into it, human beings don&amp;rsquo;t automagically become efficient planners and non-procrastinators because you pour larger and larger amounts of responsibility on top of them.
&lt;/p&gt;
&lt;p&gt;Almost everyone I know feel very bad under the stress of the large heaps of responsibility put on them. Not a single student knows how to relax without intoxicating themselves to the verge of senselessness. (Which derails my thoughts as usual: the Student Health and lots of &amp;lsquo;grown-up organizations&amp;rsquo; tell us over and over again that we should drink sensibly (read: less), that it&amp;rsquo;s bad, blah blah blah. They never seem interested in finding out &lt;em&gt;why&lt;/em&gt; people drink so much, what the actual &lt;em&gt;root cause&lt;/em&gt; is, and how to fix the &lt;em&gt;problem&lt;/em&gt; instead of the symptom. Am I right or wrong? Personally I have no idea, since I don&amp;rsquo;t drink, but I&amp;rsquo;m imagining that one would drink in order to rid oneself of all this stress).
&lt;/p&gt;
&lt;p&gt;In essence, we&amp;rsquo;ve all been put under more and more weight under the assumption that something magical will happen, and we&amp;rsquo;ll one day learn how to plan and prioritize, boom, just like that. In practice, some do, but most just learn to be very good procrastinators and escapists in order to cope. Okay, I&amp;rsquo;ll just get to my point already: If you&amp;rsquo;re trying to teach us to plan, why not make planning a freakin&amp;rsquo; part of the curriculum, goddamnit?! We&amp;rsquo;ve had a dozen courses in 'studying techniques&amp;rsquo; (how to read large amounts, how to take efficient notes, how to make presentations, etc&amp;hellip;), but nothing on coping with a large amount of tasks. I say, make Getting Things Done or something like it mandatory reading the moment highschool pupils step in the door.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Links for 2007-03</title>
   <link href="https://nevyn.me/2007/04/03/links-for-2007-03/"/>
   <updated>2007-04-03T19:38:11+02:00</updated>
   <id>https://nevyn.me/2007/04/03/links-for-2007-03</id>
   <content type="html">&lt;p&gt;I wanted to do a weekly linked list, but I&amp;rsquo;m too lazy to organize the links that delicious has already spammed my blog with, so I&amp;rsquo;ll just bunch them together here, and make linkblog entries once-per-week in the future instead.&lt;/p&gt;

&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;http://palmsout.blogspot.com/2007/02/sample-wednesday-27-daft-punk.html&quot;&gt;Palms Out Sounds&lt;/a&gt; - Where&amp;rsquo;d Daft Punk get all those samples from? If you like Daft Punk, you&amp;rsquo;ve gotta check these out.
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://pythonmac.org/packages/py24-fat/index.html&quot;&gt;Mac OS X Python Packages for Universal Python 2.4 on Mac OS X 10.3.9 and later (Intel and PPC)&lt;/a&gt; - Precompiled python packages for mac.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://wiki.python.org/moin/PythonGameLibraries&quot;&gt;PythonGameLibraries - PythonInfo Wiki&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://alistapart.com/articles/slidingdoors/&quot;&gt;A List Apart: Articles: Sliding Doors of CSS&lt;/a&gt; - A classic&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.swfir.com/&quot;&gt;swfIR: swf Image Replacement&lt;/a&gt; - Do neat image stuff client-side&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://symphonyofnoise.com/nails/yearzero/&quot;&gt;NINE INCH NAILS . YEAR ZERO&lt;/a&gt; - Songs from NIN&amp;rsquo;s latest album&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.echoingthesound.org/phpbbx/viewtopic.php?t=20265&quot;&gt;echoing the sound :: a nine inch nails discussion forum :: View topic - Current Summary of Year Zero Info &amp;ndash; READ THE FIRST POST&lt;/a&gt; - All the info you&amp;rsquo;ll ever need about NIN&amp;rsquo;s &lt;a href=&quot;http://en.wikipedia.org/wiki/Alternate_reality_game&quot;&gt;ARG&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.ditchnet.org/wp/2007/02/10/expandable-widget-tutorial/&quot;&gt;Das blog von Todd Ditchendorf  » Blog Archive   » Expandable Widget Tutorial&lt;/a&gt; - Resizable Dashboard Widgets&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.cloudmakers.org/&quot;&gt;cloudmakers.org&lt;/a&gt; - &lt;a href=&quot;http://en.wikipedia.org/wiki/Alternate_reality_game&quot;&gt;ARG&lt;/a&gt; community&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.regdeveloper.co.uk/2007/03/08/adobe_cs3_development/&quot;&gt;Adobe edits the development cycle | Reg Developer&lt;/a&gt; - How do you even &lt;i&gt;begin&lt;/i&gt; when you&amp;rsquo;re to develop such a big product?&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.pragmaticprogrammer.com/titles/jfpaypal/&quot;&gt;Payment Processing with Paypal and Ruby&lt;/a&gt; - Book on the subject. Might be useful some day.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.macintouch.com/tiger12.html&quot;&gt;Mac OS X 10.4 Tiger (Part 12)&lt;/a&gt; - Spotlight eats CPU sometimes. It&amp;rsquo;s a bug in mds. Look her on how to fix it. &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://uk.builder.com/programming/java/0,39026606,39280559,00.htm&quot;&gt;Sending email in Java: There&amp;rsquo;s more than one way - Builder UK&lt;/a&gt; - haha, more than one way to do something in Java? NO WAY!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.coolstuff.se/&quot;&gt;CoolStuff.se&lt;/a&gt; - like thinkgeek but Swedish&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.schillmania.com/projects/soundmanager2/&quot;&gt;SoundManager 2: Javascript Sound for the Web&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.bolinfest.com/wii/&quot;&gt;Creating web sites for the Wii Opera browser&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://m3rlinez.blogspot.com/2007/01/utf-8-in-netbeans-55.html&quot;&gt;.:: m3rLinEz ::. Another tech blog: UTF-8 in Netbeans 5.5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://gizmodo.com/gadgets/digital-cameras/canon-powershot-tx1-handson-720p-in-the-palm-of-your-hand-242537.php&quot;&gt;Canon Powershot TX-1 Hands-On: 720p in the Palm of Your Hand - Gizmodo&lt;/a&gt; - mmm, HD video camera!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://t-a-w.blogspot.com/2007/02/right-to-criticize-programming.html&quot;&gt;taw&amp;rsquo;s blog: The right to criticize programming languages&lt;/a&gt; - Good and bad things about a few languages&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.blueshoes.org/en/javascript/editor/&quot;&gt;BlueShoes browser-based Wysiwyg Editor (dhtml, javascript)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://dojotoolkit.org/docs/rich_text.html&quot;&gt;Rich Text Editing With Dojo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.geocities.com/ben-fuzzybear/acronyms.html&quot;&gt;Ben&amp;rsquo;s Incredible Big List of Initialisms and Acronyms (BIBLIA)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://blog.davidville.com/&quot;&gt;Davidville&lt;/a&gt; - The blog of the guy who makes Twitter&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://webtypography.net/sxsw2007/webtypography-sxsw2007-notes.pdf&quot;&gt;Web Typography Sucks | Slides and notes from SxSW 2007&lt;/a&gt; - It sure does, and here&amp;rsquo;s how to fix it.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://bingobommel.blogspot.com/2006/11/hacking-la-fonera-part-ii.html&quot;&gt;LaFonera Router // HACKINIG // BingoBommel: Hacking the La Fonera - PART II&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://beast.caboo.se/&quot;&gt;Beast&lt;/a&gt; - &amp;ldquo;A small, light-weight forum in Rails with a scary name and a goal of around 500 lines of code when we&amp;rsquo;re done.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://twittermap.com/&quot;&gt;twittermap&lt;/a&gt; - Twitter/google maps mashup&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://wiki.awkwardtv.org/wiki/index.php?title=Main_Page&quot;&gt;Main Page - AwkwardTV&lt;/a&gt; - Hacking the AppleTV&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://forums.maxconsole.net/showthread.php?t=40046&quot;&gt;MaxConsole Forums - 3.0X OE Guide&lt;/a&gt; - Hacking the PSP&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://boardsus.playstation.com/playstation/board/message?board.id=psp&amp;amp;thread.id=2748114&amp;amp;jump=true&quot;&gt;    ~ 3.03 OE Custom Firmware Installation Guide (Ver. 3.03 OE-C) ~ - PSP™ General - PlayStation.com Forums&lt;/a&gt; - Hacking the PSP&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://boardsus.playstation.com/playstation/board/message?board.id=psp&amp;amp;thread.id=2810436&amp;amp;jump=true&quot;&gt;    ~ Custom PSP Firmware Installation Guide (Ver. 3.10 OE-A+) ~ - PSP™ General - PlayStation.com Forums&lt;/a&gt; - Hacking the PSP&amp;hellip; Yes, I like hacking my PSP ;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://seashore.sourceforge.net/&quot;&gt;Seashore - About&lt;/a&gt; - Very promising MSPaint replacement for the Mac&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://doodleplex.com/glassmaze/http:/doodleplex.com/glassmaze/index.php/the-committee-for-technological-obfuscation&quot;&gt;  The Committee for Technological Obfuscation | Glass Maze&lt;/a&gt; - This describes Java &lt;i&gt;so good&lt;/i&gt;!&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://developer.apple.com/documentation/mac/Text/Text-571.html#MARKER-9-18&quot;&gt;About Keyboards(IM: Tx)&lt;/a&gt; - Mac keyboard keycodes. Good when writing input managers for games&amp;hellip;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://musicovery.com/index.php?ct=us&quot;&gt;Musicovery : interactive webRadio&lt;/a&gt; - Like a &lt;a href=&quot;http://www.pandora.com/&quot;&gt;Pandora&lt;/a&gt; and former-&lt;a href=&quot;http://www.audiogalaxy.com/&quot;&gt;AudioGalaxy&lt;/a&gt; mashup&lt;/li&gt;
&lt;/ul&gt;
</content>
 </entry>
 
 <entry>
   <title>Apple’s sustainable competitive advantage is their deep trust in the inherent value of their products and the experiences they provide. Almost no one has that these days.</title>
   <link href="https://nevyn.me/2007/04/03/apples-sustainable-competitive-advantage-is-their/"/>
   <updated>2007-04-03T19:19:16+02:00</updated>
   <id>https://nevyn.me/2007/04/03/apples-sustainable-competitive-advantage-is-their</id>
   <content type="html">&lt;blockquote&gt;Apple&amp;rsquo;s sustainable competitive advantage is their deep trust in the inherent value of their products and the experiences they provide. Almost no one has that these days.&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://davidweiss.blogspot.com/2007/04/apple-confidence-vs-protectionism.html&quot;&gt;David Weiss&lt;/a&gt; (MacBU) with wise words. Everyone is trying to &lt;i&gt;artificially&lt;/i&gt; lock their customers to their products (either by proprietary formats or FUD) instead of believing that their product is actually better than the competition and that &lt;i&gt;that&lt;/i&gt; will retain their customers.
</content>
 </entry>
 
 <entry>
   <title>Polyphasic Sleep Experiment: Day 8 OF DOOM</title>
   <link href="https://nevyn.me/2007/03/31/polyphasic-sleep-experiment-day-8-of-doom/"/>
   <updated>2007-03-31T20:48:16+02:00</updated>
   <id>https://nevyn.me/2007/03/31/polyphasic-sleep-experiment-day-8-of-doom</id>
   <content type="html">&lt;p&gt;And then I failed. Of course I failed. For some STUPID reason I put my phone+alarm clock ULTIMATE COMBO on the bedside table. When I woke up at 7am after my nice little 3hr core sleep, I clicked &amp;ldquo;Turn off alarm&amp;rdquo; and thought with a very very small part of my brain (which I like to call &amp;rsquo;&lt;em&gt;the stupid&lt;/em&gt; brain&amp;rsquo;), &amp;ldquo;Hey! I&amp;rsquo;m pretty tired! Let&amp;rsquo;s lie down!&amp;rdquo;.&lt;/p&gt;&lt;p&gt;It&amp;rsquo;s now 11.47 am. &lt;em&gt;I just woke up&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;&lt;i&gt;On the end of Day 8, &lt;a href=&quot;http://www.youtube.com/watch?v=2aCCEJQ8hFA&quot;&gt;I made a vlog for this entry as well&lt;/a&gt;. &lt;/i&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Feature request: Consolidate link posts</title>
   <link href="https://nevyn.me/2007/03/30/feature-request-consolidate-link-posts/"/>
   <updated>2007-03-30T17:28:23+02:00</updated>
   <id>https://nevyn.me/2007/03/30/feature-request-consolidate-link-posts</id>
   <content type="html">&lt;p&gt;You know, &lt;a href=&quot;http://diveintomark.org/archives/2007/03/09/links-for-2007-03-09&quot;&gt;the way Mark does it&lt;/a&gt;. Takes my delicious feed&amp;rsquo;s entries and posts a single consolidated post at the end of the day.&lt;/p&gt;

&lt;p&gt;Oh, and it&amp;rsquo;d be nice if, when the delicious feed contains no description for a particular entry, it didn&amp;rsquo;t output broken html.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Polyphasic Sleep Experiment: Day 7</title>
   <link href="https://nevyn.me/2007/03/30/polyphasic-sleep-experiment-day-7/"/>
   <updated>2007-03-30T17:25:24+02:00</updated>
   <id>https://nevyn.me/2007/03/30/polyphasic-sleep-experiment-day-7</id>
   <content type="html">&lt;p&gt;It&amp;rsquo;s impossible. There&amp;rsquo;s just no way I can get myself to get up after my three hour core nap. I *always* oversleep by an hour. Which means that I&amp;rsquo;m tired but not &lt;i&gt;inhumanly&lt;/i&gt; tired. Which means that my body has no incentive to do radical changes to my REM sleep. Which means I&amp;rsquo;ll never learn to nap. Which means I&amp;rsquo;ll never be able to master polyphasic sleep.&lt;/p&gt;

&lt;p&gt;I don&amp;rsquo;t get it. Other polyphase-sleepers must&amp;rsquo;ve been able to withstand the urge to sleep an extra hour, but &lt;i&gt;how?&lt;/i&gt; It&amp;rsquo;s not like I&amp;rsquo;m so full of rational thought when I&amp;rsquo;m that tired &amp;ndash; I just go back to bed and use whatever failing logic I can come up with to convince my conscious brain that sleeping is okay, like &amp;ldquo;Oh, but I&amp;rsquo;m just going to lie down! I&amp;rsquo;m not going to fall &lt;i&gt;asleep!&lt;/i&gt; Haha, you know I shouldn&amp;rsquo;t do that. No, I&amp;rsquo;ll just lie down a litte.&amp;rdquo;, and then I fall asleep.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/03/30/uh-why-does-it-seem-like-tumblrs-just-picking/"/>
   <updated>2007-03-30T17:20:33+02:00</updated>
   <id>https://nevyn.me/2007/03/30/uh-why-does-it-seem-like-tumblrs-just-picking</id>
   <content type="html">&lt;p&gt;Uh. Why does it seem like tumblr&amp;rsquo;s just picking random delicious bookmarks that I marked ages ago and throws them in together with my new &amp;lsquo;uns&amp;hellip;&amp;hellip;?&lt;/p&gt;

&lt;p&gt;It really does look messy with the blog consisting of just all my recent bookmarks. They&amp;rsquo;re all interesting and worth a read if you&amp;rsquo;re into the link&amp;rsquo;s subject, though. (And who&amp;rsquo;s not into PSP homebrew? :) )&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Polyphasic Sleep Experiment: Day 4</title>
   <link href="https://nevyn.me/2007/03/27/polyphasic-sleep-experiment-day-4/"/>
   <updated>2007-03-27T23:57:50+02:00</updated>
   <id>https://nevyn.me/2007/03/27/polyphasic-sleep-experiment-day-4</id>
   <content type="html">&lt;p&gt;&lt;a href=&quot;http://another-morning.net/&quot;&gt;My wonderful girlfriend&lt;/a&gt;  &lt;a href=&quot;http://another-morning.net/blog/show/14&quot;&gt;recently blogged about our experiment with&lt;/a&gt; &lt;a href=&quot;http://en.wikipedia.org/wiki/Polyphasic_sleep&quot;&gt;polyphasic sleep&lt;/a&gt;, &lt;a href=&quot;http://www.everything2.com/index.pl?node=Everyman%20Sleep%20Schedule&quot;&gt;the Everyman pattern&lt;/a&gt; to be precise. According to &lt;a href=&quot;http://www.puredoxyk.com/index.php/category/polyphasic/&quot;&gt;Puredoxyk&lt;/a&gt;, Everyman&amp;rsquo;s supposed to just &amp;ldquo;be tricky for a day or two&amp;rdquo;, while Uberman can be hella hard.&lt;/p&gt;

&lt;p&gt;Well, either I&amp;rsquo;m doing it wrong or Everyman&amp;rsquo;s fuck hell much harder for those who are not übermensch like puredoxyk. At times I&amp;rsquo;m so tired I&amp;rsquo;m almost crying, and staying up that last hour between 3 and 4 am is pure hell, I tell you.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Comments on a tumblr blog.</title>
   <link href="https://nevyn.me/2007/03/21/comments-on-a-tumblr-blog/"/>
   <updated>2007-03-21T04:48:06+01:00</updated>
   <id>https://nevyn.me/2007/03/21/comments-on-a-tumblr-blog</id>
   <content type="html">&lt;p&gt;Here&amp;rsquo;s a semi-ugly hack to get comments on your blog.&lt;/p&gt;

&lt;ol&gt;&lt;li&gt;Go to your settings and change to a custom theme.&lt;/li&gt;
    &lt;li&gt;Right before:
&lt;pre&gt;&lt;code&gt;
&amp;lt;/div&amp;gt;
{/block:Posts}
&lt;/code&gt;&lt;/pre&gt;
&amp;hellip;Paste the following.
&lt;pre&gt;&lt;code&gt;
&amp;lt;div class=&quot;cmt&quot;&amp;gt;
  &amp;lt;a href=&quot;http://nevyn.nu/cmt/?id=YOURBLOGNAME.{ PERMALINK }&quot;&amp;gt;
  (cmt)&amp;lt;/a&amp;gt;
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&amp;hellip;So that the result looks like this:
&lt;pre&gt;&lt;code&gt;
  &amp;lt;div class=&quot;cmt&quot;&amp;gt;
    &amp;lt;a href=&quot;http://nevyn.nu/cmt/?id=YOURBLOGNAME.{ PERMALINK }&quot;&amp;gt;
    (cmt)&amp;lt;/a&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{/block:Posts}
&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;Change YOURBLOGNAME into the name of your blog, and &lt;i&gt;remove the spaces before and after the word PERMALINK!&lt;/i&gt; It&amp;rsquo;s a bug in tumblr which prevents me from typing it correctly in my blog post.&lt;/li&gt;
&lt;li&gt;There&amp;rsquo;s no step four! ;) Well, you might want to define the css class cmt so that it doesn&amp;rsquo;t look super-ugly&amp;hellip; I defined it as:
&lt;pre&gt;&lt;code&gt;
            .cmt {
	            font-size:        10px;
	            text-align: right;
	        }
&lt;/code&gt;&lt;/pre&gt;
but it&amp;rsquo;s still pretty ugly&amp;hellip;&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;The application you&amp;rsquo;re now using is an old php hack of mine. It supports nested conversations and all that jazz, but no feedback on your blog whether there&amp;rsquo;s comments on the post, nor email notifications or even moderation. But it&amp;rsquo;s better than nothing.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/03/20/eighties-isometric-perspective-schoolbook/"/>
   <updated>2007-03-20T07:15:46+01:00</updated>
   <id>https://nevyn.me/2007/03/20/eighties-isometric-perspective-schoolbook</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/lBvaHZIrt0o?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Eighties isometric perspective schoolbook illustration graphics music video doing a visual commentary on the modern western society, all set to Röyksopp&amp;rsquo;s enchanting melodies. Beautiful.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/03/19/tillman-the-other-skateboarding-bulldog-awesome/"/>
   <updated>2007-03-19T23:21:49+01:00</updated>
   <id>https://nevyn.me/2007/03/19/tillman-the-other-skateboarding-bulldog-awesome</id>
   <content type="html">&lt;p&gt;Tillman. The &lt;i&gt;other&lt;/i&gt; skateboarding bulldog. Awesome.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Further anecdotes from Java Hate Land</title>
   <link href="https://nevyn.me/2007/03/19/further-anecdotes-from-java-hate-land/"/>
   <updated>2007-03-19T08:29:00+01:00</updated>
   <id>https://nevyn.me/2007/03/19/further-anecdotes-from-java-hate-land</id>
   <content type="html">Style is a class that inherits from MutableAttributeSet which conforms to AttributeSet. An AttributeSet contains key-value pairs describing character attributes, which works okay. However, Style contains additional state about character attributes that is seemingly completely separate from the state held by its superclass. Using the interface from AttributeSet to set character attributes yields no result whatsoever &amp;ndash; the resulting text is unstyled.
&lt;pre&gt;&lt;code&gt;
	Style s = new Style();
	s.addAttribute(TextAttribute.UNDERLINE, TextAttribute.UNDERLINE_ON);
	// Rendering text using s yields plain text, no formatting.
&lt;/code&gt;&lt;/pre&gt;

To actually set the style of a Style, you use the class StyleConstants&amp;rsquo;s static methods set[type of attribute](MutableAttributeSet, newValue), like so:
&lt;pre&gt;&lt;code&gt;
	Style s = new Style();
	StyleConstants.setUnderline(s, true);
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Recall that AttributedString does not inherit from String. I&amp;rsquo;m beginning to believe that the Java designers never realized what object orientation is and just add inheritance to classes where it sounds good.&lt;/p&gt;

&lt;p&gt;There seems to be no way whatsoever to represent styled text in Java that is in any way portable across the Java API. AttributedString only works with printing; AttributedCharacterIterator is the only way to get text and style out of the AttributedString; Style is used by the UI to represent style but while it actually inherits from the same class as the internal style representation in AttributedCharacterIterator, it&amp;rsquo;s actually completely incompatible. I&amp;rsquo;ve seen even more ways to represent style, but haven&amp;rsquo;t used them so I can&amp;rsquo;t recall them at the moment.&lt;/p&gt;

&lt;p&gt;Right now, I&amp;rsquo;m going through hell to be able to get a formatted text representation of a model class of mine, being able to either append it to a JTextPane or send it directly to the printer, and later being able to extract the styled text from the JTextPane and send it to the printer. The text is going through at least three different representations of style on the way.&lt;/p&gt;

&lt;p&gt;Please, for the love of god, tell me that I&amp;rsquo;m missing something blatantly obvious that makes this make any sense whatsoever.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>IDEA: Meta-tags for feed consolidation.</title>
   <link href="https://nevyn.me/2007/03/18/idea-meta-tags-for-feed-consolidation/"/>
   <updated>2007-03-18T08:31:34+01:00</updated>
   <id>https://nevyn.me/2007/03/18/idea-meta-tags-for-feed-consolidation</id>
   <content type="html">&lt;p&gt;Keeping a list of all my feeds by deliciousing them with the tag meta:feed. Then you can use that feed as a feed-feed for your feed reader. Metafeeds. Mmmmm. The idea is so good because it&amp;rsquo;s so nerdy!&lt;/p&gt;

&lt;p&gt;Ooh. And tagging with meta:feed:group:&lt;group name&gt;[:&lt;subroup name&gt;[:&lt;and so on...&gt;]] to sort the feeds. And meta:feed:tag:&lt;tag&gt; to tag a feed. Meta-meta-meta-info. &lt;i&gt;We&amp;rsquo;re really on to something here!&lt;/i&gt;&lt;/tag&gt;&lt;/and&gt;&lt;/subroup&gt;&lt;/group&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Can't stop playing. 165 yards; you?</title>
   <link href="https://nevyn.me/2007/03/18/cant-stop-playing-165-yards-you/"/>
   <updated>2007-03-18T07:55:22+01:00</updated>
   <id>https://nevyn.me/2007/03/18/cant-stop-playing-165-yards-you</id>
   <content type="html">&lt;a href=&quot;http://www.onemorelevel.com/games3/double-wires.swf&quot;&gt;Can't stop playing. 165 yards; you?&lt;/a&gt;&lt;br/&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/03/18/rahzel-all-i-know-awesome-it-was-years-and/"/>
   <updated>2007-03-18T07:20:53+01:00</updated>
   <id>https://nevyn.me/2007/03/18/rahzel-all-i-know-awesome-it-was-years-and</id>
   <content type="html">&lt;p&gt;Rahzel - All I know. Awesome, it was years and years since I saw this one. Youtube rocks.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/03/18/nouvelle-star-absolutely-awesome-beatboxing-via/"/>
   <updated>2007-03-18T07:08:28+01:00</updated>
   <id>https://nevyn.me/2007/03/18/nouvelle-star-absolutely-awesome-beatboxing-via</id>
   <content type="html">&lt;p&gt;Nouvelle Star. Absolutely awesome beatboxing. (via &lt;a href=&quot;http://video.feber.se//feber/art/14154/beatbox_i_franska_idol/&quot;&gt;video.feber&lt;/a&gt;) (&lt;a href=&quot;http://www.youtube.com/watch?v=VFDDxZFm7JQ&quot;&gt;another angle&lt;/a&gt;. YouTube needs Babelfish for audio! ;) )&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/03/16/im-tooo-tiiireeeeed-must-think-about-candidate/"/>
   <updated>2007-03-16T19:45:42+01:00</updated>
   <id>https://nevyn.me/2007/03/16/im-tooo-tiiireeeeed-must-think-about-candidate</id>
   <content type="html">&lt;p&gt;I&amp;rsquo;m tooo tiiireeeeed.&lt;/p&gt;

&lt;p&gt;Must think about candidate thesis. Can&amp;rsquo;t think. Problem.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>I hate the Java API. Truly. With all my heart.</title>
   <link href="https://nevyn.me/2007/03/14/i-hate-the-java-api-truly-with-all-my-heart/"/>
   <updated>2007-03-14T22:13:00+01:00</updated>
   <id>https://nevyn.me/2007/03/14/i-hate-the-java-api-truly-with-all-my-heart</id>
   <content type="html">A JTextPane that shows styled text can&amp;rsquo;t take an AttributedString. You can&amp;rsquo;t get the string out of an AttributedString without iterating through it, because it doesn&amp;rsquo;t inherit from String. You can insert attributed text into a JTextPane, but only by giving it a String and an AttributeSet. You can&amp;rsquo;t get an AttributeSet out of an AttributedString, but you can get a map&lt;attribute&gt; out of it. Which are two completely different things, it seems.&lt;/attribute&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/03/12/thom-yorke-cymbal-rush-henry-rollins-show-via/"/>
   <updated>2007-03-12T07:57:16+01:00</updated>
   <id>https://nevyn.me/2007/03/12/thom-yorke-cymbal-rush-henry-rollins-show-via</id>
   <content type="html">&lt;iframe width=&quot;400&quot; height=&quot;300&quot;  id=&quot;youtube_iframe&quot; src=&quot;https://www.youtube.com/embed/J4DTuDllIkM?feature=oembed&amp;amp;enablejsapi=1&amp;amp;origin=http://safe.txmblr.com&amp;amp;wmode=opaque&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;br/&gt;&lt;p&gt;Thom Yorke - Cymbal Rush - Henry Rollins Show (via &lt;a href=&quot;http://youtube.com/user/yorkerollins&quot;&gt;yorkerollins&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Thom Yorke is completely awesome. Seeing him perform is beyond words. Good thing I haven&amp;rsquo;t seem him live, I&amp;rsquo;d probably asplode.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/03/11/wiseman-tempestas-lunaris-communitas-sueciae/"/>
   <updated>2007-03-11T22:11:22+01:00</updated>
   <id>https://nevyn.me/2007/03/11/wiseman-tempestas-lunaris-communitas-sueciae</id>
   <content type="html">&lt;section&gt;&lt;dialog&gt;&lt;dt&gt;Wiseman:&lt;/dt&gt;&lt;dd&gt;Tempestas Lunaris communitas Sueciae popularissimus et optimus est, et in reti et in portabili instrumento radiotelephonico.&lt;/dd&gt;&lt;dt&gt;Wiseman:&lt;/dt&gt;&lt;dd&gt;Popularissima et optima, even.&lt;/dd&gt;&lt;dt&gt;Wiseman:&lt;/dt&gt;&lt;dd&gt;&quot;Lunarstorm är Sveriges populäraste och bästa community, både på nätet och i mobilen.&quot;&lt;/dd&gt;&lt;/dialog&gt;&lt;/section&gt;
</content>
 </entry>
 
 <entry>
   <title>In the breathtaking Scottish Highlands,
on the shores of Loch Ness
[…]
The Chemical Brothers […] Daft Punk</title>
   <link href="https://nevyn.me/2007/03/08/in-the-breathtaking-scottish-highlands-on-the/"/>
   <updated>2007-03-08T08:02:56+01:00</updated>
   <id>https://nevyn.me/2007/03/08/in-the-breathtaking-scottish-highlands-on-the</id>
   <content type="html">&lt;blockquote&gt;In the breathtaking Scottish Highlands,&lt;br/&gt;
on the shores of Loch Ness&lt;br/&gt;
[&amp;hellip;]&lt;br/&gt;
The Chemical Brothers [&amp;hellip;] Daft Punk&lt;/blockquote&gt;&amp;#8212;&lt;a href=&quot;http://www.rockness.co.uk/&quot;&gt;Rockness&lt;/a&gt; promises aural riches beyond comprehension. Before the day was over, I had two tickets.
</content>
 </entry>
 
 <entry>
   <title>no title</title>
   <link href="https://nevyn.me/2007/03/08/she-is-saying-procrastination-is-a-good-thing/"/>
   <updated>2007-03-08T03:39:00+01:00</updated>
   <id>https://nevyn.me/2007/03/08/she-is-saying-procrastination-is-a-good-thing</id>
   <content type="html">&lt;div style=&quot;color:#f00; font-size:2em; width:100px;&quot;&gt;SHE IS SAYING PROCRASTINATION IS A GOOD THING
&lt;/div&gt;
</content>
 </entry>
 

</feed>
