Check out my latest product, BuildFactory

Archives: December 2006

30/12 Incriminating Evidence

While I slept today, I put up an away message of: "thinking of all the different ways to destroy evidence"

Leaving it up as a joke, and a not-really-clever alternative to "Away" I received some interesting messages while I was out, from "evidence? what did you do?" to the weirdest one:
what sort?
the FBI cant do forensics on Linux systems, they have to outsource the job to a firm in Canada
so im guessing state goons are just as crummy if not worse
so if its HDD stuff I'd run a cron job to touch every file on the HDD (mess up all the timestamps), then delete them
then run a shredder with something like 20 overwrites
then set it up as removeable storage and fill it with whatever torrents you think would be fun, delete and shred that
then thermite.
Always with the thermite.


I know some interesting people.

[tags: , , ]

28/12 Suspension of Disbelief

Disclaimer: I don't work for either VMWare or Parallels, as it turns out, neither has offered me a job


In my ceremonial replacement of the Parallels icon in my dock with the VMWare Fusion icon (Fusion or Fission) somebody left a comment telling me to hide my employment by VMWare, etc, marking my video as a blatant attempt at thrashing Parallels. Not only do I get about 200-400 hits a day (i'm exceedingly relevant to the industry), I don't work for VMWare. I simply have endured Parallels since it was released, and am happy that VMWare released a great competitor to the market.

This video is of a prime example of where Fusion excels where Parallels...doesn't. Virtual machine suspension, and resume. Parallels, even when not being used hogs resources in such a way that I've considered scrapping my intel 20" iMac for a Mac Pro just so my other applications don't beachball; because of this resource-suck, I had gotten in the habit of suspending virtual machines whenever possible.

Music by KiloWatts. The set used in the video can be downloaded from hybridized.



[tags: , , , , ]

27/12 Fusion or Fission

"Fission? No, I haven't been fishin' since I was on Lake Erie"

VMWare's Fusion is a major leap forward compared to Parallels, and much less camera shy. Instead of writing some long out review, and listing the numerous reasons why Fusion blows Parallels out of the water, how about a silly video instead?



[tags: , , , ]

26/12 Preventing Reader-Rage

I'm reading a book I intend to write a review for before the end of the month on this very weblog, but I needed to vent/discuss something in the meantime.

Unless you're telling a god damned story, don't use the first person.

Blargh! It is annoying whole new level to be reading a bit of quite technical writing spattered with phrases like: "[In the code above] Additionally, I implemented blah blah blah explicitly to give the compiler a ..." Or something a bit worse, first-person conclusions: "I quickly discussed method overloading in blah blah blah"

Albeit, I've not (yet) written a book, as a random dickbag on the internet it is my god-given right to call this author out for bad style, right? :) In quasi-technica writingl (i.e. the realm between developer documentation and a Clancy novel) I think addressing the reader is quite acceptable "if you use the -Wapocalypse flag, your brane will implode at compile time" but speaking in the first person is outright annoying. I cannot tell if this author is attempting to create some unnecessary connection with the reader of his book or what exactly he's attempting to do with the incessant use of first-person, but the consistency thereof has repulsed me enough to where I've skipped a number of paragraphs as soon as the author launches into a first-person, marginally-relevant, portion of text.

Just remember kids, even though your teachers might say of writing introductions and conclusions "tell them what you're going to tell them; tell them; then tell them what you've told them."

They don't mean it literally.

[tags: , , ]

21/12 Caution, Flammable

I think next time I need to get my hair cut I'm going to pull out a pack of matches, and just light my head on fire.

At least then I'm less likely to absolutely hate my haircut. Great Clips, why hast thou betrayed me?

Update: Here's what look like now

[tags: ]

21/12 Apple strudel, and other things that don't traverse NATs.

NAT, or Network Address Translation, is the absolute bane of my existence (next to Barbara Walters of course). It finds itself near the upper-ends of lists like "technologies that frack my network code" and "reasons IPv6 will save us from ourselves," but what many of you don't know, is that NAT was designed by giant salmon with a bad attitude. Why, if it weren't for NAT, we might not get to enjoy such wonderous atrocities like "Universal Plug and Play" (UPnP).

UPnP, oh how I hate you, let me count the ways:
  • Runs over HTTPU.
    HTTPU is a silly acronym for an even sillier concept, HTTP over UDP which isn't really a standard, but an outdated (2001!) internet draft (draft-goland-http-udp-04.txt).
  • Over-engineering? Is there a better modifier than "over" we can use?
    Imagine what would happen if SOAP, and some network engineers got hammered and made a bastard love-child in the back seat of a 1993 Buick Le Sabre, UPnP would be it. It exists in this weird realm of trying to cover device and service discovery and advertisement, and about 13 other things that don't need to exist but do.
  • Description. C'mon, are you serious?
    After "addressing" and "discovery" in the UPnP hall of horrors, it's time for description. This part of the freak show is where "we" (as in our machine/device/etc) know about "interesting devices" but don't know much about what those do, so "we" request a "description" after which, the other device sends us 8-10 pages of XML (double spaced) telling us about the hardware, the services, and anything else we might ever care to know about (mood, mother's maiden name, etc).
  • Internet Gateway Device
    This is where the NAT happiness happens, I'm pretty sure it's just as miserable as the rest of UPnP, but i'm not willing to read a couple hundred pages of documentation on why IGD sucks, but if the couple hundred pages wasn't enough to convince you, I've got a note from my mom confirming it.

"Aren't there alternatives?" I hear you quip, why of course! In the realm of NAT mapping protocols there exists another contender which I will hit on in a later posting, NAT-PMP, but other than that, UPnP is pretty widely adopted.

On the other side of the fence exists NAT hole-punching protocols, such as STUN, which helps coerse UDP packets from one side of a NAT to the other side with relatively few bumps and bruises. The downside of using a protocol like STUN, is that is is based on UDP, so unless you receive an ICMP error message your packets may just continually disappear into the ether and your application wouldn't be the wiser (unless you implement some TCP-like error-checking and packet ordering on top of UDP). For most applications that use STUN such as VoIP, this isn't a major issue. For other applications where data integrity is a major issue, UDP in general is most likely not on the table to begin with. Which leaves most folks (like me) working with something like STUNT which extends STUN's functionality to add support for TCP packets.

Nothing is fool-proof however, NAT is such an abomination that there exists a good proportion of NAT devices in the "real world" that misbehave, preventing hole-punching protocols like STUN(T) from getting through to allow clients behind the NAT to perform the actions they wish to. The situation worsens if you're behind two NAT devices (which I was in my last apartment, BLECH!), as no amount of UPnP, hole-punching, or Merry Christmas sugar cookies will allow traffic to traverse in the fashion which some applications (iChat AV for one example) need in order to function.

Did I mention that I abhor NATs? Grumble.

[tags: , , , , ]

19/12 Reticulating Spines and Other Wastes of Time

I just posted a message to the monodevelop-list of the same title, but I figured since there's about 7 people on that mailing list, I'd better post to my blog to ensure maximum coverage (9 people!). The actual mailing list posting can be found here, but I'll summarize.

The splash screen loading messages in MonoDevelop are about as exciting as a 1040 tax form, so I created a patch to randomly display more interesting messages like:
  • "Nerfing Pirates, Buffing Ninjas..."
  • "Zesting Oranges...
  • "Adjusting Radiation Levels..."
  • "Locking Boxes..."
  • "Burninating the Peasants..."

There's quite a few more, and it's thoroughly entertaining to watch. To get an idea of what it looks like, check out this screenshot on flickr.

The behavior is triggered by an environment variable "RETICULATE", so setting the environment variable will turn on a more exciting splash screen when you start MonoDevelop. Starting it from a build set of sources, you would call: tyler@onion:~/sources/mono-project/monodevelop> RETICULATE=1 make run

The patch: ProgressTracker.cs.diff

[tags: , , , ]

16/12 Ain't No Party Like a Scranton Party

The ongoing battle between Apple's iTunes and myself is one nearing epic proportions, thus I have another video to share, this time of the wonderful "Party Shuffle." If you're not too familiar with the reasoning behind the party shuffle feature, it basically takes the shuffle feature stereos have had since they were called "monos" and rehashing it into a feature worthy of its own sidebar entry in the NSOutlineView from hell of iTunes 7. Little did I know, with this much more exciting version of the shuffle button, comes much more exciting bugs too.

I eventually "fixed" this by letting Party Shuffle play out the rest of it's songs (through the Z's) but my "A Very GUI Halloween" party was a flop because of the lack of music variety (Terrence still managed to take first prize with his red "Bloody NSProgressIndicator" costume).



[tags: , , ]

15/12 Documenting Futility

After kicking the idea around a bit with whurley, I suppose I'm going to start publishing my silly little videos of broken software. I've been recording these every so often when I just can't document the bug I'm experiencing in a text description. I use iShowU to do the recording, so the mouse movement is a bit slower than the rest of the video (boo), but for the most part it's pretty clear. In case staring at your own screen wasn't boring enough, stare at your screen displaying a video of my screen; exciting. Hopefully this will help convey the point that I really do suck at computers.

This first video is from iTunes 7 (quite possibly the worst piece of Apple software since Mac OS 9), and a bug that I can't reproduce, but lit up my morning with a fervent rage.



[tags: , , ]

15/12 BuildFactory 1.0.12, Oops.

This morning I pushed out an update for BuildFactory v(1.0.12). This minor update fixes some minor logic errors with the pre-/post-build scripting subsystem (NSTaskDidTerminateNotification you are not my friend!). It is another procrastination release, as I still don't want to bump to 1.1 just yet, but it's certainly a bit more stable than the previous release. Changes include:
  • Scripts no longer run on clean operations
  • Advanced directory options properly linked
  • Infinite loop, infinitely fixed

Fairly minor update, but some important fixes.

[tags: , , , ]

13/12 1.11111111 cubits

If you are familiar with the disgusting Mountain Dew like rip-off soda called Mello Yello, then you're about 34% closer to the state of mind that I am currently in. Working with commercial systems is never pretty, nor easy, but sometimes it's closer to resembling fighting your way through a Mongol hoard, up a hill covered in Vaseline, in the summer, naked.

I think I'm fighting valiantly though, not winning, but definitely earning at least a few Medals of Freedom in the process. Today, I avoided screaming into a pillow until I ran out oxygen and passed out onto the floor adjacent to my couch, after a phone meeting with which the major points of contention were:
  • Having access to the Subversion repository is a privilege (of which I may or may not be worthy)
  • I should stop wasting so much time with setting up VPN (which I sort of need to continue productive development).
Grumble.

Maybe my persuasive speaking skills are waning, I've never had such problems convincing anybody to have a formalized development and testing process, or to provide me with the tools necessary to do my job. It's unfortunate that they are located so far away, what I lack in persuasive speech, I can certainly make up for in persuasive symbolic dance.

Shimmy shimmy quarter turn, and all that.

[tags: , , ]

12/12 Native Sockets with Mono

The number of powerful networking libraries available is quite astounding, but as a developer that works from his apartment writing software, I certainly don't want to re-implement those libraries, I just want to use them. As my previous posts might have made apparent, I do a good bit of work these days with Mono on both Mac OS X and Linux. "Who cares" right? On the one side of the table I have a set of powerful networking libraries, to do a wide variety of socket creation tasks, and on the other side I have a powerful runtime (Mono) that most of the code base utilizes. It is quite important to be able to make use of as much as possible of both sets of code, writing all my network code in C can lead to portability issues (and frustration), while re-implementing the network libraries in C# would crush any productive development.

A hybrid scenario is the best option given the current library I am working with, which performs some complex operations to provide NAT traversing sockets, etc. Thanks to some help from Alp Toker of NDesk, I was able to quickly implement some example code for this hybrid scenario. In this scenario, I need to call into my native library to create the socket, and then pass that socket back upwards to the C# code. While you cannot use a System.Net.Sockets.Socket object and some how lash it to a native socket file descriptor (similar to how CFString and NSString are toll-free bridged on Mac OS X), you can use Mono.Unix.UnixStream and instantiate the UnixStream object with an existing socket file descriptor. The UnixStream class is a subclass of System.IO.Stream, allowing you to read and write just like any other Stream object in C#, but the advantage of using UnixStream is that you bind it to natively created sockets, and perform I/O operations on that stream in your managed code.

In this brief little example (i.e. proof-of-concept) the libTestSocket library will open a socket to an echo server. The prototype for this native function is: int openEchoSocket(char *ipstr, int *sockfd);. By passing in an integer pointer, I can receive the return value as an indication of success (errno doesn't marshal too well from native->managed code) and still have the *sockfd value set to a valid file descriptor. Once the managed (C#) code has the valid file descriptor for the open socket, it can instantiate a UnixStream object, allowing the code thereafter to work with the native socket via UnixStream just like any other Stream object.

The code is not terribly complicated, but a good springboard for other developers and myself to make use of native networking libraries, while still keeping as much new (i.e. in development) code in C#.

Download/View this example

[tags: , , , ]

11/12 Anonymantis, this time I mean it.

After linking Fernando to a random Anonymantis installation that I had found by searching under the couch cushions of the internet, I realized that Anonymantis wasn't really "open source." Not open source in the sense that it wasn't in the super-cool mega-neat anonymous subversion repository recently setup for me by my good friend Dave from GeekISP.

While there aren't really any new changes, besides visibility; the wiki page with subversion checkout instructions, etc for Anonymantis can be found here.

Or just in case you're lazy:

svn co svn://svn.geekisp.com/bleep/trunk/anonymantis


[tags: , , , ]

09/12 balloons filled with nullity

This blog post has some suggestive material in it, and is not appropriate for people



I have some minor get up, wash hands obsessive compulsive-esque habits unlock and lock door seven times, and one of them includes looking at the statistics for this blog, trying to figure out a few things. Firstly, why are you here? Well, not you per say, but the general web surfer. As it turns out, most of the Google or MSN search referrals I get are from people that don't know that I'm either completely full of crap or partially full of crap with a chance for showers.

If I wouldn't have checked the statistics every now and again, I would have never caught Scott Stevenson's mentioning of XmlToolbar, or that I'm the number one hit when you enter stupid movie quotes into Google (it's a jump to conclusions mat, get it?). I have noticed a strange trend recently, my stats are being spammed with fake-referrals.

Normally I just view these fake-referrals as a kind of public service announcement, I mean, if it weren't for these fine spammers I would never know about such intriguing websites as "pussy-db.com." If it weren't for this kind folks, I would never have imagined that I could find an informative site such as "bestfreeporn.biz," which leads me to wonder a great many things about the internet in general. How do you make a business out of offering free pr0n? More specifically, what sort of lame ass registers a .biz domain name? It is hard hitting questions like this that I've found myself coming to grips with, I mean, where's the business angle in "unlimitedxxxaccess.com," I just don't see it.

My all time favorite domain-name-bot-referral-spam is from "wegotlegs.net. " Which is either a pr0n site, or an unfortunate naming of a prosthetic-limb company website, I'm scared to click and find out.

(For the record, the stupid stats can be found here)



[tags: , , , , ]

03/12 top of the totem pole

I'm starting to get a bit weary of driving in this town, people have no sense of anything outside of themselves. I mean, isn't it obvious by my super fly Volkswagen that they should move right out of my way and let me pass?

I've got my own business cards and everything; can't these people tell that I'm kind of a big deal?

[tags: , , ]

02/12 Zero Configuration Networking, The Definitive Guide

Zero Configuration, more commonly known as “Bonjour” (formerly known as Rendezvous) is a reasonably well known technology but a commonly misunderstood technology. Stuart Cheshire and Daniel H. Steinberg’s “The Definitive Guide” aims to walk a user from one end of the spectrum to another, starting with explaining what Bonjour is and isn’t, and ending with brief introductions to the C, Cocoa, Java, Ruby and Python APIs for including Bonjour functionality inside an application. In another fantastic “Definitive Guide” from O’Reilly, Cheshire and Steinberg not only explain how the technology works, but reasoning behind some of the design decisions, lessons learned from other technologies (AppleTalk primarily), and how Bonjour truly is one of the tools we didn’t even know was missing from the modern networking toolbox.

Stuart originally sent me the book after reading about some of my (primarily) experimental forays into using Bonjour for more than just iTunes sharing. While not too many developers, power-users, or even end-users are familiar with how Bonjour works, they no doubt have seen it in action, whether it be iChat Bonjour Messaging, iTunes Sharing, or the quick setup of their new network-capable printer. The book dives right into explaining what exactly Bonjour is, and the problem Bonjour intends to solve with a common problem even my grandmother can understand, if you set two laptops on a table, why can’t they communicate right off the bat with one another? From the end users perspective, they can “see” both of the computers, why can’t the computers “see” each other then? It is to this hypothetical naive individual this book seems to be written, as it is equally as frustrating for a software developer as it is for an end user to struggle with some of the issues the ever growing proliferation of networks has presented them. The duo [Cheshire & Steinberg] start to walk the reader through the dark ages, the forlorn days of “platinum” user interfaces, AppleTalk, and the venerable “Chooser.”


Read the full entry »

01/12 downsides to consulting

I have been more or less working from home for the better part of this year, switching between virtual machines, existing machines and at least 3 operating systems during the day (1, 2, 3). Things are going well, but it's not all rainbows and butterflies.

There's a bottle Grey Goose sitting atop my refrigerator that's been taunting me, teasing me each time I walk to the fridge. I drink a decent amount of juice during the day, so the temptation after dealing with some daily wtfs to mix an 11am screwdriver or cranberry juice with vodka keeps growing.

What a dilemma.

[tags: , , , , , , ]
www.flickr.com