New Hobbies Are The Best Hobbies

I've been idle lately. Not just 'technologically' but physically. Three years ago, when I changed departments at my employer, I went from climbing ladders and crawling under buildings to sitting at a desk all day. I also went from 175lbs to 220lbs. It took just a few months to get to the new weight, but it took over a year to get back (o'kay so I'm 180 now; close enough). I changed my eating habits to match my new less active job and made a point to get out now and then. That had been going pretty well until a few months ago, at which point I just kind of stopped. No real reason; just did. I also noticed that I wasn't doing much of anything else. It had all kind of run together. Sure, my various hobbies and such were still fun, but they were also old hat. I needed something new. I also needed to get moving or risk regaining the weight. If you've never been there, you can't really know, but it's a lot harder to keep the weight off once you've gained and lost it than it is to just not gain it.

I've been playing around with various GPS related applications on my phone lately. Mostly the 'check in' at a location variety. I have Brightkite, and Loopt; picked up Gowalla recently. They're all fun in their own little way, but I really enjoy the Geohash app. It's based off an XKCD comic, and though I usually don't go to the locations that it generates, I like looking at the info every day. I've yet to meet anyone else at a generated location, but I hold out hope that it'll happen.

Ever since I got an iPhone 3G (I have a 3GS now) I've played with the idea of getting a dedicated GPS device too. The iPhone serves me well for getting from point A to point B, but it's not all that accurate. A few years ago I read about a thing called Geocaching. The idea being that using just a set of coordinates and a few clues you would set out looking for a can, box, or other containers that someone else hid with the hope that others would find it. Sometimes there might be odds and ends to trade or clues to the location of yet another hidden treasure. Maybe an object that wants to travel to a faraway place, and if you can help it get closer by moving it to another hidden place then it's just accepted that you will.

Last night, on a whim, I decided that I was going to stop thinking about it, and actually give it a try. I signed into geocaching.com from work, set up an account, and searched for a few caches nearby. After work, I set out looking and using Google Maps and my phone's built-in compass I made an attempt to find two different places that seemed as though they would be pretty easy. I failed. A lot. All the while I was cursing the highly inaccurate GPS on my phone. Sure it was great for plotting a route to follow in my car, but when trying to find something that may be smaller than my hand and hidden from view, it just didn't seem to be good enough. Most handheld GPS devices I've looked at have a clear sky accuracy from 10 to 30 feet. My iPhone didn't seem to want to do better than about 40 to 60 feet. So combining the probable inaccuracy of the device that tagged the location and the error in location from my phone and I realized it was possible I could be almost 100 feet away from my target at any time and think I was right on top of it.

I tried one more, that was closer to home, later last night after an HR Geeks (Hampton Roads, not Human Resources) meeting that sprung up because some people couldn't make it to the scheduled meeting last week. It was quite dark by that time, and after a few minutes, I realized that it was a lost cause. This morning I was woken up far earlier than I had planned to get up and was forced to leave the house. After taking care of what I needed to, I decided to give it another go. I picked a different cache, as it was on my way back home. This time after just a few minutes I found a hidden glass jar with a few tiny seashells, an equally small toy car, and a rolled up piece of paper in a plastic bag. I unrolled the paper, left the date and my name, packed it all back up and hid it away again. There was another less than a quarter mile away, so I went for it. I also downloaded the iPhone application that Groundspeak (the group that operates geocaching.com) offers which gives access to the cache database, and an easy way to update entries. Sure it cost $10, but sometimes the free route isn't the best route.

So pulling up to the second attempt of the day I can already tell where it's hidden. Mostly because it was hidden in the same way the first one was, but on some level, it was like I could just feel it. This time it took longer to sign the log and put it back than it took to actually find it. Feeling good about myself I decided I want to try to find the last one I looked for last night. On the way, I'd be passing two others. First one is on the road I live on. Spent a few minutes looking, and started to think that perhaps it wasn't there anymore, despite only being put into place a short time ago. It's a pretty high traffic area and on the edge of private property. Just as I was about to walk away I see it, in plain sight. How I missed it until then I have no idea. Then off to the next one. At this point, I was feeling pumped. Silly I guess, but on some level, I felt like those shady characters in spy movies in their long black coats deftly snatching little-hidden objects off the back of park benches in plain view of everyone.

A few minutes down the road and I find myself along a line of shrubs. Trying not to collect too much of the bush inside of my coat, I start poking around the ground just under the leaves. As I do I start thinking back to my days as a cable tech, looking for pedestals which had been grown over. Falling into this mindset I spot it. My gaze hadn't moved and yet something that was totally invisible to me just moments ago was there as plain as the nose on my face. That's when I realized that yesterday I had been looking at things all wrong. My inability to find the caches I was looking for yesterday wasn't because my GPS devices wasn't accurate enough, it was because I wasn't looking. I was trusting my equipment to show me where to look. The point of the GPS is to get me there, it was still my job to actually search. Resealing the large film canister and feeling in the zone I roll out to what I'd decided would be my last attempt of the day. Off the side of the road, in view of the interstate, I start poking around wondering if anyone zipping by at 60+MPH even notices me and if I'm about to wake up a sleeping snake I creep farther into the trees. No geocache, but did find the remains of a beer cache. Looked like it had been abandoned some time ago. A slightly broken foam cooler, and mostly empty beer cans covered by black plastic and pine needles. Again, just as I was ready to leave, out of the corner of my eye I catch something that doesn't look right. A magnetic key box tucked away from view. Another signature log and a small rubber lizard that might have been trying to be the Loch Ness Monster. Left my mark, and having very much enjoyed the morning, headed home.

I don't see myself regularly checking off five a day, even on my days off. I do see myself venturing off course every now and then, to spend a few minutes searching out a little slip of paper to scribble my name on. I may never meet any of the people whose names mine is sharing space with, but still I feel that in a way they all were there with me when I found the cache. We all saw the same thing, in the same place, just not all at the same time. I really think I'm going to enjoy this.

I like flowers, especially in HD

So I finally got around to getting the PS3 title Flower. I know, I know, I'm late to the party. It was on sale for $4.99 this weekend, so I figured even if I didn't like it not all that much lost, right?

Well, I played around with it for about 20 minutes, and now I keep thinking about it, wanting to play more. It's kinda sad, but also cool how something so simple can be so engaging. Direction and speed, that's all you get to control. There is no winning, no losing, no time limits. Just wake up the flowers along your way, and move on. Sure, if you get all of them you get rewarded, but if you don't it doesn't matter.

I tweeted about it, and a friend asked for a "Quick review/synopsis?". I responded in less than 140 characters and figured I'd come here later and really write about it. Thinking on it now I think my original tweet should do all the talking, so here it is.

Sad city flower, dreams of the country. You live the beautiful dream. Get bonuses for finishing the level 100%. Happy flower. YAY

That's it, and that's the awesome of the game. There's nothing else to say. So if you have a PS3 and you haven't played it yet, go do it. For a few more days it's still $4.99, but even at full price, I think it would be worth it.

DJ Hero - First Impression

To put my impressions in proper context a little backstory is in order, so stick with me for a moment.

Rhythm games have been around for a while, and for the most part, I have not been a fan of them. Up until Guitar Hero in 2005, the games in the US seemed to consist of button mashers which didn't really fit the gamepad for the console it was being played on. With the notable exception of Dance Dance Revolution playing rhythm games was pretty dull for me and left me wondering what all the fuss was about.

When I had first heard about Guitar Hero the idea was intriguing. A game that gave me a controller that was meant to bring me into the game. Something that I knew how to use, and could relate to. It sounded great, then I got my hands on it. The controllers were way too small and felt cheap. the fret buttons were 'unnatural' to use, and totally ruined the suspension of disbelief that the game needed to make it engaging.

A few years later Rock Band comes out, and not only did they make the same promise of engaging me with familiar controllers which were designed to be used in a way that made sense for the game, but they also offered me a chance to do more than tap a strum bar. If I wanted to rock with sticks or send the cat running in terror with my voice, Rock Band was welcoming me with open arms.

I was very skeptical. Guitar Hero was three iterations in when the first Rock Band was released, and no notable improvements had been made in the awful controllers that came with the game. They still felt cheap, still were clumsy to use, and still ruined the fret experience. Rock Band had done better. Much better, though I didn't realize it at the time because I totally ignored the game.

Don't misunderstand, the Guitar Hero software was never bad, but with the sort of title it was the software was way less than half the experience for me. The Rock Band software was also decent, but so were the controllers. Sure the guitars still felt a little cheap, and the drum kits had a nasty habit of not being able to withstand the abuse of an overzealous bandmate. It was still a step in the right direction.

Rock Band 2 comes along, and the controllers last as well as they play. O'kay the kick pedal is still a little touchy if you've got a heavy foot, but then you're not supposed to stomp on the kick pedal anyway. Guitar Hero's controllers have gotten better; I don't think they're up to par with the Rock Band 2 controllers, but that might just be my own bias as I own that game.

This all brings me to DJ Hero. I heard about this game and my heart lept a little. Now I'm no house DJ, but I'm no stranger to crossfaders and tonearms. The idea that I could 'play along' with some of my favorite DJs was appealing. I was a little worried as it was in the Hero series, but I figured the other titles in the series had seen controller improvements enough to assume that the turntable controller would be at least decent.

Tonight I found myself in my local Best Buy (probably the worst Best Buy I have ever been in, ever, BTW) and they had the game running on a PS3. I was watching a kid play it, and having a rough time of it. Was obvious he really didn't get the concept. I don't blame him, DJ'ing isn't really showcased like it was when I was a kid. Rap videos were a camera on the voice talent, a camera on the DJ, and one on the crowd. You really got to see what they were doing, and it made sense. In today's videos, you usually don't even see a record... assuming the song has real scratching in it at all.

Reading the information on the display it shows that two player local and networked based modes are available. Local two player requires either another deck or a guitar controller, though I'm not sure how that's supposed to work exactly with a guitar. I would like to see a two DJ battle game played, though. As that does have the potential to be cool. Though that just might be the DJ in me talking, and no one else but fans of the scene may care.

So the boy I was watching finished up, and no one else was in line to try, so I thought I'd give it a spin so to speak. The graphics were what I'd come to expect from modern rhythm games, with lots of flash and style. The on screen interface also was fairly familiar. It took no time at all to figure out what I was supposed to be doing, and when. The demo has a three track round with songs that are popular, and good choices for mixing. On the other had, the controller sucked ass. I'm sorry, but there is really no other way to put it.

Look, I'm wiling to forgive the single turntable interface. This is a game that is supposed to be accessible, and managing two records and a mixer is a skill that takes a long time to even get good at, let alone master. I'm willing to forgive the buttons on the platter, as you need something to make it a rhythm game, and it would make the controller overly complicated for casual gamers to add an effects board. I can not, and will not, forgive the piss poor build quality of the controller. The platter feels cheap, and unbalanced. The buttons are too small and packed too close together. The platter itself is too small and makes scratching awkward. Then there's the overall size of the deck and it's attached 'mixer' console which places the platter and the crossfader so close together that you have to be 10 years old to use it comfortably.

DJ Hero is an awesome concept, and the game itself looks to be well designed, and fun. It's a shame the errors of the past were not learned from. Per the DJ Hero website there is apparently a premium addition of the game available which includes a different and supposedly 'better' controller. Why should I have to pay more just to get a usable controller, and until I get my hands on one I am left to assume it's the same POS deck with metal crossfader and effect knobs. Until a 3rd party controller comes out that gets it right, I'm afraid what could otherwise be an awesome addition to the list of 'party games' will be nothing more than an overpriced wannabe.

Apple sent my phone to jail, and why I broke it out

I've had a cell phone for about 8 years now, and have had four different carriers (well three if you don't count when AT&T bought up Cingular which had bought up AT&T Wireless years before) and seven phones. I started with Sprint back before they merged with Nextel and brought the worst of both companies together. I was quite happy with Sprint from a technical standpoint and never had to deal with their customer support. I left them to go with T-Mobile so that I was on the same network as my then-girlfriend. The move was purely financial. It was just more cost effective to have unlimited calling with the person I called the most than to have a plan that provided enough minutes. When she left T-Mobile for Cingular over a really poorly handled customer service issue, I followed for the same reason I left Sprint for T-Mobile. I'd never had any real issue with T-Mobile's network, and never really had to deal with their customer service either. I'm a pretty good customer like that. If you don't give me a reason to call you, I don't call. Cingular became AT&T Mobility and I went long for the ride.

Through that trip, I was a pretty picky handset owner. I never took the 'free phone', because you get what you pay for in mobile handsets. I've owned two really good Samsung handsets when I was with Sprint, basic, but good. With T-Mobile, I had a Nokia 3650 which was a serious dose of awesome, and the first generation of the Motorola RAZR. To this day I still miss my 3650. When I went to Cingular I went with a Sony Ericsson W810i, which is a solid music player and has a decent FM radio. It would run a nice assortment of Java applications for using Google Maps, and a pretty good Gmail client, as well as a number of different messaging clients. It also sported a very nice 2MP camera with a very good depth of field. I still use that camera today.

I tell you all this so that you really understand where I was coming from as a handset owner. I knew what I wanted, and liked what I had. So when the iPhone first came out, it was tempting, but not tempting enough to pry me away from my W810i. The camera was bad to put it nicely, it was a 2G phone in a 3G world, and it couldn't run ANYTHING that Apple hadn't put on it to start with. My phone kicked it's ass in every way except it was also a 2G phone. The App store comes out, and the iPhone 3G. It was tempting. Very tempting. So much so that I drake the Kool-Aid and became part of the iPhone cult. I was happy with it, mostly. I still pined for the FM radio, but streaming audio took care of that, I didn't like the camera, but I still carried my W810i around to snap pictures with, so it was o'kay. Or so I thought.

Apple has always thought it knew better than it's customers what they wanted, and needed. For that most part, they've made a decent business out of it. Sure they've made some mistakes, but you don't make it as far as they have without doing something right. For all the things my new phone could do, I still felt like I was missing something, but what? Well I couldn't change the ringer to anything but Apple approved ringers, but even when they fixed that I had to pay for them. I have NEVER paid for a ringer, and I certainly wasn't going to start. That was addressed, people figured out how to make iTunes upload audio as a ringer, then Garage Band picked up the ability. I still had to deal with not being able to change ANY of the other sounds my phone made. I didn't like the SMS tone or the Mail tone. I wanted to use other sounds, but I couldn't. I wanted my phone to do other things I knew it was able to do, but Apple said no.

I wasn't the only one, though. Since the first iPhone there was a small, but growing community of people that felt the same way. This group of people who were just as much fans of the phone as I was, but much smarter, figured out how to set the handset free. Apple made no attempt to tell us what we can run on the computers they sold, yet they felt they could control what we ran on their little computers with cellular radios in them. I'm sure at least some of the restrictions they impose came from the carriers that offer their phone. That is a different topic for a different day. Some of it, though, makes no sense at all. Still, I had my iPhone 3G for nearly a year and never did more than think about jailbreaking it. Sure there were a lot of benefits, but it seemed so many people were having issues with it that it just wasn't worth it.

About two weeks ago I bought an iPhone 3Gs, and sold my 3G to a co-worker who promptly took it home, jailbroke it, and unlocked it. He is now the happy user of an iPhone 3G on T-Mobile. Sure he can only use it in EDGE mode, but he says it likes it MUCH more than the Blackberry Storm that he's been using, and I made back some of the cost of upgrading. Recently there had been more and more "Apple Rejects _insert useful application here_" stories. Some seem to be carrier pressure (so in the US that means AT&T), and some seem to be for no obvious reason at all. Since Apple won't talk about why it rejects applications, even with the people who wrote it, we can only assume they have their heads shoved squarely up their collective asses. As I said in a recent tweet which has become popular among Twitter sex spam bots, the more App Store rejection stories come out the more I think Apple has ex MPAA Ratings Board execs on staff.

The rejection of Google's own Google Voice application, and the removal of previously approved ones was the last straw. I love my phone, I've bought two versions of it. I like Apple, I currently have one desktop, one laptop, and an Apple TV (which I run Boxee on). I don't think they are the end all, be all, and I know they make mistakes. Now, as with my Apple TV which I have made 10x more useful with Boxee, I have made my iPhone more useful, and more fun by jailbreaking it. I just downloaded redsn0w followed the instructions, and within a few minutes I had my iPhone up and running just like it was before, but better. There are many apps available to make the phone do things that AT&T really doesn't want me doing, but for the most part I didn't care about those. I wanted to make my lock screen background show up as my background from the app launcher, so I installed Winterboard. This also allowed me to change my lock screen charging battery icon to the Aperture Science logo, and my WiFi signal strength icon into a pineapple, or a Triforce as my mood dictates. I also use SBSettings to enable and disable all sorts of options without having to leave an application or even unlock my screen. MobileTerminal gives me a limited but useful local terminal which I can use for remote administration as well as running nmap without having to break out my laptop. I can leave WiFi running when the phone goes to sleep, which is useful with the boxee app as I don't have to wait for it to reconnect, and my Star Trek themed sounds make me smile because I am a geek. Sure I have things on my phone that AT&T probably wishes I didn't, like Qik (though I've yet to use it) and GV the already approved then removed Google Voice app. I also installed a package that lets me fake out specific applications so that they think they're connecting over WiFi when they are actually connecting over 3G. I mostly use this with YouTube and some audio streaming apps that step down the quality over 3G. I've used it with Skype once, to test it. I might use it again, I might not. I roll 400+ minutes a month on my 450 minutes a month plan, so I'm not hurting for minutes, but there are times when Skype would be preferred. Like if I need to reach my son, who lives in front of his computer.

There was a time when I might have felt bad about getting around these restrictions, but that was when I was just being told I couldn't make my phone go bleep when it went bloop, but when I'm not allowed to use my unlimited data plan to send the data I want, or when I can't access the services I want to access the way I want to access them on a device I bought over a service I pay for, I don't feel bad for anyone but Apple and its various cell partners for thinking they can actually control their customers. Especially now that they've attracted the attention of the FCC in the US. It's coming to an end. Jailbreaking is so easy my dad could do it, and the US government is coming down on cell companies from all directions. Either the companies will back down gracefully, or they'll be regulated. It's just a shame it has had to come to this at all.

So why did I set my iPhone free? Not to 'stick it to the man', or even to hear the Star Trek communicator chirp when I get a message, but because it is just one of the many computers I own and like the others I will run what I want, when I want, and how I want. Anything else is unacceptable.

Cows MOO while MUCKing about in the MUSHy MUD

In the 90's, while the internet was starting to get pictures, most of us were still using text to describe what things look like, what they did, and what happened to them after the dog got a hold of them. There were a great many ways in which this was done; but among the more non sequitur were the MUSH, MOO, MUCK, MUX, MUD (especially of the Tiny variety) etc. Many people connected, much fun was had, and little of it made sense.

So just what are all these acronyms about, and what do they have to do with cows, pancakes, Pop-Tarts®, pennies, dirty diapers, or Gary Numan? Well the MU, for those that have a MU*, stands for Multi-User... the rest is something of a subject for debate, as most are thought to be backronyms. Generally the user base is allowed to create objects and rooms, and to one degree or another program responses to events generated by other players, objects, and rooms in one of a few purpose-built languages fashioned after or otherwise baring a resemblance to gems like Forth (in the case of TinyMUCK) or Lisp (like MUSHcode for all the MUSH variants). What about the cows et al? Well, cows, pancakes, and Pop-Tarts® are easy. They're all awesome. Pennies and dirty diapers are the same things, of course. As are pancakes for different values of pancakes. If I need to explain what Gary Numan has to do with anything you are officially banned from reading my blog from this moment on, so go away.

All the Numan dissing wannabes gone? Good. So where was I? Oh, yes... user programmable text-based social interactions. It was still largely the time of coyotes and tumbleweed on the internet, and most things worth doing were still done with a keyboard. Graphics were for single player games, and the vast majority of the clicking came from our coveted IBM Model M keyboards. Much of this clicking was spent playing combat MUDs and programming. What could be more fun? Combining the two, and tossing in large amounts of insanity, while largely taking out the combat.

There were a lot of different systems up at that time, running different versions, and with different themes, if they had one at all. I was always a fan of the loose role play systems without a defined theme. My favorite was OtherMUSH, with its awesome Toilet Adventure, heavy TMBG references, and the ever popular and often fatal Bring Your Grandparents to OtherMUSH Day.

Today many have passed on into obscurity or otherwise vanished from the face of the net. While there are a few which remain, most are strict roleplay based on sci-fi or fantasy books, movies, or TV shows.

A few weeks ago, I set out trying to find OtherMUSH. The website still lives at other.org/ but the MUSH seems to no longer be there. Discouraged, but not willing to just let it go I decided to set out on a mission to bring some of that weirdness back to the net, or at least try to as best I could. To that end, I downloaded and installed the current version of TinyMUSH on my 'do it all' server, and began to relearn how MUSHcode worked and getting back into the frame of mind that once let me describe the most mundane in very obscure ways.

The documentation provided with TinyMUSH is very useful in setting it up, and o'kay at describing commands, it isn't so good at giving useful examples of how to make the commands work with each other. So I began searching again, hoping to come across a few long-forgotten websites which might prove useful. What I found instead was that while largely out of date there were lists which contained links to many MUSH, MUD, MUCK, MOO systems which are still in operation. Most of them are still of the strict role play variety, but a few worlds which subscribe to the 'if you build it weird, they will stay' mentality still remain. Of them, the two I'm having my mind wrapped around are:

TrippyMUSH is... well... trippy. Nuff said. I'll say more, but that was enough. TrippyMUSH is a wholly wonderful place; if you find surreal worlds which take place only in your own head but made by someone else which is actually happening in an asylum which you can never escape from because you were never actually there, wonderful. If not, you soon will; the strange coloured liquid on drip in the IV in your arm will make sure of that. Sound scary? That's only the first five minutes. Just remember, you can't quit, but you can go home... or at least that's what you'll image once you pass out.

telnet to pebkac.trippy.org 7567 to stop the hallucination and accept you are an inmate just like the rest of us.

TinyTIM is NOT just a game... it's a really, really BIG game. You think you're city/town/backwater hole in the world is big? It's got nothing on the world of TIM. TIM is God, and all praise TIM. He's not paying attention, but that's o'kay, he loves us anyway. Powered by Pop-Tarts® and smelling of The Old Man of the Nexus (which is something not unlike Old Spice and nursing homes) TinyTIM is the strangest thing you've seen all week. Yes, even stranger than that. You know you want to visit... you'll never want to leave. Even if you do, TIM will be with you always. Even during your special alone time in the shower.

telnet to yay.tim.org 5440 and come see the most complicated machine in all the MUSHdom, The Clock on the Wall. You'll laugh, you'll cry, you'll wonder how you ever got through your day without TIM.

As for my MUSH. I'm still planning to subject the world to it. But it's not ready yet. Once it's half-baked I'll let everyone know.

I didn't want Apple flashing me anyway!

For those that don't know, let me set the stage:

The new uni-body MacBooks do not have DVI-I ports on them as MacBooks of past. Instead, they come with a Mini DisplayPort. The upshot of this is two-fold; one is a much smaller port allowing for a thinner body and more ports along a side, the other is a lower cost with a higher potential resolution. The downside is you now need even more adapters to use external displays on a new MacBook.

When I got my 13" MacBook in October of 2008 I picked up a Mini DisplayPort to VGA adapter for $30. I thought it was a little costly, but I honestly don't know what's inside the little box so who am I to know? I got it mostly so I can use my 32" Sony Bravia XBR4 as a second display. I used it for that during the Presidential election to have a real-time polling map. Of course, because of an issue that Apple didn't seem to want to publicly acknowledge, every five to fifteen minutes the picture would go black for a few seconds.

I was not the only one... a little searching will show a large number of people who were having the same problem. A lot of speculation was afoot about the cause, but it was my feeling that the issue was with the video driver (turns out I wasn't too far off); Apple, in normal Apple fashion, wasn't talking. At home, it wasn't too much of an issue. I could deal with the brief blank screen as it always came back very quickly, at least at home. I did, though, have one occasion where it was a problem. In the episode of Hak5 in which I covered using PHP to batch change the IP settings of a Windows computer, you can see a very brief moment of black just as Paul switched to my MacBook's display because it chose that moment to blank out. Sure it was a minor problem, but still, for something I had to pay extra for to do something I can do with even some of the cheapest of netbooks, even a minor problem is too big.

So just over six months after the adapter came out, there is a firmware update to the adapter which fixes this issue. No idea why it was released with this flaw, no idea why Apple didn't just come out and say "Yes, we know it's broke, but we're working on it.", no idea why it took over six months after release to fix, but the update is out, and I've been running it for over an hour now with no problems at all.

Thanks, Apple, for finally fixing something that there was no excuse for ever having been broken to start with.

Making GeekTool Menubar friendly

I wouldn't call this part 2 of my GeekTool post, but it is the follow up I mentioned in the last post. GeekTool needs a little tweak to make it play nice on newer systems. Do you need to do this? No... but you'll lose out on some of the features if you don't.

Who needs to do this? Well, I needed to when I installed it on my unibody 13" MacBook, which means Intel Leopard. It worked just fine on my PPC G4 iMac running Leopard without the change. So does that mean it's Intel Leopard or just Intel systems? I don't know... but if the happy little 'pizza' doesn't show up in your menu bar when you check on 'Show Menu' in the PrefPane, then this will fix you right up. In that case, read on.

So you've installed GeekTool, and you're left without pizza, so you can't access the Groups options, forced refresh, or disable/enable commands from your menu bar? The first thing you need to do is download the most recent version of MenuCracker from sourceforge.net. As of this post that would be version 1.4. Also as of this version, the .dmg seems to not actually have anything in it, so you'll want to get the file named UpgradeToUniversalMenuCracker1.4.zip.

Step 1: Download and open the file. That will give you an installer package. Don't actually run the installer.

Step 2: Right-click (control-click or two-finger tap... this is getting out of hand, Apple) the installer package and chose 'Show Package Contents'. You'll get a new Finder window with just a folder named Contents.

Step 3: Open that folder and double click on Archive.pax.gz which will give you another folder named Archive.

Step 4: Now open this folder and copy the file MenuCracker.menu into your work area of choice. The desktop works if you like. Now you can get rid of the installer package if you want, though I like to archive things like this as you never know when they'll vanish off the face of the net.

Now you need to put that file inside of the GeekTool PrefPane; which is a lot easier than it sounds. I will take this time to say that while if you do exactly what I tell you NOTHING BAD WILL HAPPEN™ if you go poking around in other files, and make other changes I will not take responsibility for loss of data, system failure, or all the Canadians bent on world domination (I know that was redundant) coming together and actually succeeding (I for one welcome our new Canadian Overlords) as a result of you not following my instructions to the letter. Come to think of it even if you do exactly what I say you're still on your own if Oh Canada becomes the world anthem.

Step 1: Locate the actual PrefPane file for GeekTool. If you installed it for all users then it will be in /Library/PreferencePanes/ from the root of your boot drive. If you installed it for just one user then it'll be in ~/Library/PreferencePanes/ (which means the Library directory in your home directory) The file is called GeekTool.prefPane and its icon will look just like it does inside of the PrefPane.

Step 2: Open the contents of the file just like you did the installer package, and open the Contents folder.

Step 3: Now open the Resources folder and locate GeekToolMenu.menu and do another Show Package Contents. (these are just directories which carry a special flag that makes them look different to the system and in Finder)

Step 4: Once again we're opening the Contents folder and then the Resources folder.

Step 5: Replace the MenuCracker.menu file with the one you copied out of the installer package. Now you should be able to just disable then enable GeekTool from within the PrefPane, but if that doesn't work a logout and login will take care of it.

You'll now have the pizza in your menu bar, and have access to some of the options without having to open the System Preferences; you'll also have faster access to the PrefPane for GeekTool.

Multi-Tools aren't the only GeekTool

Desktop customizing is about more than style; often times it's about workflow, and just being on top of what's happening on your network. Sometimes you just need to know, at a glance, what's running, how much traffic there is, or just that everything is as it should be. The best solution is usually the one that is out of the way, but ready at a moments notice... and if it can look good doing it, all the better.

I know I may have my Apple Cult Card revoked for admitting this in public, but Steve Jobs and his crew are not the best UI designers in the world. Is the Mac OS interface pretty, certainly, but is it awesome? Does it do what you want, when, and how? That's for each user to decide, and that's where customizing comes in.

Sure you can change the desktop image, move the Dock around, and in Leopard even make the menu bar translucent; when it comes to really tricking things out the best the fine folks in Cupertino did was make it very easy to change the file/folder/drive icons.

When it comes to displaying continuously updating text and images on the desktop Windows users have so many options it's hard to pick one. BSD/Linux users also have a fair amount of options for getting status information on their desktops. OS X just isn't feeling the love. Sure there are a lot of Dashboard Widgets, and there are ways to make those stay in the foreground. There are some menu bar status monitors, and even some apps to show basic info in the Dock by way of dynamic icons. That's not going to get server logs or the graphs output by tools like MRTG or RRD on your desktop.

That's where the deceptively versatile PrefPane GeekTool comes in. It's been around for a while, but it surprises me still how many long-time Mac users have never heard of it. The most current version is 2.1.2 and is meant to run on Panther and Tiger as a Universal Binary. I had no problem getting it to run on my PPC Leopard machine and only took one simple modification to make it run perfectly on my Intel Leopard laptop (I'll cover that next post), though it will run without the change.

So just what does it do? At its core GeekTool just embeds images, text files, or the output of scripts into the desktop at a defined refresh rate... but that's where its power comes from. With even the most basic of shell commands you can output a simple calendar, show how long your system has been running, or display the name of the currently logged in user. Toss in sed, awk, or grep, and now you can display CPU load, memory usage, and process information formatted in any way you like.

Ready to go beyond one or two line shell commands, point GeekTool at a shebang (or hashbang if you prefer) coded file, and run PHP, Python, or Perl (what's with all the P's anyway?) scripts too.

It works just as well with existing files as it does running commands, so showing the content of a log file, or keeping an RRD graph refreshed is just as simple.

The displayed text and background can be any colour, or font. Images can be local files or via HTTP. Both can be done borderless or with a choice of border types and drop shadows, as well as any level of transparency. Always on top can also be chosen if you want something important visible at all times.

While there is no obvious multi-display support, making use of more than one display is trivial. Items are positioned on screen by clicking and dragging them into position or by entering X, Y, Height, and Width values; X and Y can be negative numbers. So entering numbers that extend beyond the boundaries of your main display will push the item onto the display that is positioned there in your Display PrefPane.

GeekTool also allows items to be enabled and disabled in groups. So when your MacBook isn't connected to the second monitor just switch groups to one that doesn't include that monitor so those processes don't run.

So just what am I doing with it? I'm pretty boring in that way; I've got the usual CPU, memory, uptime stuff. A calendar that marks the current day. A tail of my system log and firewall log. As well as my current internal IPv4, and external IPv4 and IPv6 addresses. I think about prettying it up from time to time, but in the end, I just like seeing what's going on. I usually have far too many windows open to see my desktop anyway, so the glitz doesn't matter. I just do a quick four finger up swipe, see my desktop and all the status info, then another down swipe, and back to work. Now I do have my memory, CPU, and uptime/load averages right along the bottom edge of the screen so I can usually see them no matter what. I toy with putting disk space down there too but haven't committed to the idea just yet.

Some good references for settings and scripts to get you started down your own GeekTool powered information nirvana (and where I got most of my ideas):

Ultimate GeekTool Setup by Nick Young

GeekTool and Bash One-Liners by Rupa Deadwyler

Monitor Your Mac and More with GeekTool by Gina Trapani

Before I wrap this up, I want to impress upon you just how important the DIY nature of GeekTool is to its power. Though you can't really tell from a still image, that LED is showing me my CPU load by colour. The LED was actually a reddish yellow (because I haven't worked out the exact values for yellow just yet) because I was testing and had the threshold set to trigger all colours easily.

Since I don't plan on leaving this rig setup (because I don't have a stash of Teensy's laying around) it's running with it's own entry in GeekTool, and it's own shell script, but it wouldn't be hard to make it part of the primary CPU status script with a condition check to make sure the /dev entry for the Teensy was there.

For reference, though, and so you can't say I never gave you anything. Here is the shell script and Arduino sketch to get that last bit of fun working.


#!/bin/sh
# geektool_cpu_teensy.sh
# Trigger LED colour change based on
# CPU ldle status as read from top
# This code requires catty be installed
# http://sourceforge.net/projects/catty

idleCPU=$(top -l 2 | awk '/CPU usage/ && NR > 5 {print $12}'
 | awk -F '.' '{print $1}')

if [ $idleCPU -gt 80 ]
  then
    catty -d /dev/cu.usbmodem12341 -b 9600 -w 'Gr'
elif [ $idleCPU -gt 65 ]
  then
    catty -d /dev/cu.usbmodem12341 -b 9600 -w 'Y'
else
    catty -d /dev/cu.usbmodem12341 -b 9600 -w 'Rg'
fi


// rgb_led.pde
// Switch LED colours based on serial input

int incomingByte = 0;

byte r_pin = PIN_B7;
byte g_pin = PIN_C5;
byte b_pin = PIN_C6;

void setup() {
  Serial.begin(9600);
  pinMode(PIN_D6, OUTPUT);
  digitalWrite(PIN_D6, LOW);
  delay(1000);
  digitalWrite(PIN_D6, HIGH);
  delay(1000);
  digitalWrite(PIN_D6, LOW);
  pinMode(r_pin, OUTPUT);
  pinMode(g_pin, OUTPUT);
  pinMode(b_pin, OUTPUT);
  Serial.flush();
  digitalWrite(PIN_D6, HIGH);
}

void loop() {
  incomingByte = Serial.read();
  if (incomingByte >= 0) {
    if (char(incomingByte) == 'Y') {
      analogWrite(r_pin, 255);
      analogWrite(g_pin, 125);
    }
    else if (char(incomingByte) == 'y') {
      analogWrite(r_pin, 0);
      analogWrite(g_pin, 0);
    }
    else if (char(incomingByte) == 'u') {
      analogWrite(r_pin, 125);
      analogWrite(g_pin, 125);
    }
    else if (char(incomingByte) == 'r') {
      analogWrite(r_pin, 0);
    }
    else if (char(incomingByte) == 'R') {
      analogWrite(r_pin, 255);
    }
    else if (char(incomingByte) == 't') {
      analogWrite(r_pin, 125);
    }
    else if (char(incomingByte) == 'g') {
      analogWrite(g_pin, 0);
    }
    else if (char(incomingByte) == 'G') {
      analogWrite(g_pin, 255);
    }
    else if (char(incomingByte) == 'h') {
      analogWrite(g_pin, 125);
    }
    else if (char(incomingByte) == 'b') {
      analogWrite(b_pin, 0);
    }
    else if (char(incomingByte) == 'B') {
      analogWrite(b_pin, 255);
    }
    else if (char(incomingByte) == 'n') {
      analogWrite(b_pin, 125);
    }
  }
}


Both are Copyright Jody K Delauney 2009. Released under BSD two clause license. Full text of the license and commented sources are available for geektool_cpu_teensy.sh and rgb_led.pde.

Teensy = Arduino* (for small quantities of Arduino)

A fair amount of my free time lately has been consumed by getting back into electronics, specifically microcontrollers. I took two years of electronics in high school and dabbled with it a little after. Life kind of got in the way, and it fell so far to the back burner than it wasn't even warm anymore.

I recently became aware of the Arduino development platform, and about the same time, another little device called the Teensy. Since then my 'entertainment budget' has been funneled into the bank account of SparkFun for various transistors, switches, regulators, and the all-important LEDs; and of course to PJRC for a Teensy... but just what is a Teensy?

The result of a project by Paul Stoffregen, the Teensy is a microcontroller development board based on the Atmel AT90USB162 AVR. The Arduino, also based on Atmel AVRs, differs from the Teensy in a few important ways:

  • The Arduino is 100% open source. While almost everything about the Teensy is open, the bootloader is not.

  • Most Arduino form factors are MUCH larger than the Teensy. This is good for instant development, as most of them come with header blocks attached so you can just start plugging things in, but it can be limiting when it comes time to put your project into a case.

  • Despite most Arduinos having USB ports, it does not actually do USB communications. A USB/Serial converter is used, which limits the speed at which it can be communicated with.

  • The Teensy, using native on-chip USB can, with only a few simple commands, be made to show up as either a USB/Serial device, a mouse, a keyboard, and with a little more work a mass storage device. These can be done with the Arduino, but it's a fair bit more involved.

  • And while the Teensy's older brother Teensy++ also has analog inputs, the original Teensy lacks the Arduino's analog input options. It does have PWM output, though, just as the Arduino and one can always wire a DAC circuit in if needed.

  • So why Teensy; why didn't I go with the more popular Arduino? There are a lot of reasons I could state, but what it comes down to are two very important ones.

  • Cost... the Teensy is a little cheaper, and having more flash for code storage at less cost, it just made sense to my wallet.

  • Possibly more important... community.

  • "What? The Arduino has a huge community!" Yes, yes it does... and when I bought my Teensy I didn't know ANY OF THEM. I did, though, know someone that had a Teensy. A community of two is much more useful than one of thousands when you know each other personally, and can just show up on the other's doorstep at any time. I'm a visual learner; five minutes of watching someone else do something is worth weeks of reading about it for me, so having someone in my own little part of the world I could compare notes with if needed played a huge part in my decision.

    The best part is I am not separated from the very large and very active Arduino community. Paul is actively developing what he calls Teensyduino, a plugin for the Arduino IDE that lets most Arduino sketches (the source code for controlling an Arduino, so named because it's based off the Processing programming language whose IDE is called a sketchbook) run with only a little modification. So I get the small form factor, faster communications if I needed it, a local fellow developer, and most of the resources of the Arduino development community for $22 ($19 if you get it without header pins). That's a cost of entry I can deal with.

    Of course, it hasn't been all happiness and sunshine. Teensyduino is still in early beta, so some sketches aren't as easy to make work as I'd like just yet. I recently ran into a small issue with serial communications. Specifically the Serial.available() function. Per the Arduino website, it should return the number of characters waiting in the buffer to be read. As I don't have an actual Arduino to test the code on I can't be sure, but the example code agrees with the description. On the Teensy (at least as of Teensyduino v0.4) it returns something else, though I'm not sure just what the number means. So I had to come up with a far less elegant solution... the conversation went something like this:

    Me:
    void setup() {
      Serial.begin(9600);
    }

    void loop() {
      if (Serial.available() > 0) {
        Serial.println(Serial.read(), DEC);
      }
    }


    Teensy: -1

    Me: That shouldn't be happening, -1 means there's no data to read if there's no data Serial.available() should be 0, and you shouldn't be reading.

    Teensy: Whatever...

    Me: Don't give me any lip, I'll reflash you, and do something else.

    Teensy: As if, you're my beotch, and you'll do what I say now.

    Me:
    int receivedByte = 0;

    void setup() {
      Serial.begin(9600);
    }

    void loop() {
      receivedByte = Serial.read();
      if (receivedByte >= 0) {
        Serial.println(char(receivedByte));
      }
    }


    Teensy: I don't have anything to show you... you need to send me something.

    Me: HA!

    Teensy: Curses, foiled again!


    Yes, that's pretty much how it went... or at least that's how it went in my head. I blame Wil Wheaton... and his iTunes.

    So that's what I've been up to. That work has even fallen over into my still not released write up on GeekTool, which will be out by the end of this week. I just keep finding other things to put in it, so it's never actually done. I guess it's time for a 'feature freeze'.

    Case Sensitivity: It's not just for passwords anymore

    Me: Connect to SSID 'accesspoint' with 'this password'

    FreeBSD: I don't see SSID 'accesspoint'

    (disable encryption)

    Me: Connect to SSID 'accesspoint' without a password

    FreeBSD: I don't know what you're talking about

    (connect with another computer)

    Me: It's there, the Mac can see it

    FreeBSD: I don't care if we're related, I'm not the Mac and I don't know what you're talking about

    (verify the access point is in b/g mode)

    Me: O'kay fine, connect to the first thing you see

    FreeBSD: Connected to SSID 'Accesspoint'

    (facepalm)

    Me: I'm sorry, 'accesspoint' != 'Accesspoint'

    FreeBSD: :P

    SyFy? SRSLY?!?

    O'kay I'm usually not one to rant, (I said usually) but SciFi Channel... seriously?

    Rebrand? O'kay fine... I don't understand why, but whatever. Include more shows that aren't Sci-Fi/Fantasy? Hey, you included 'pro wrestling'... well it is fiction, so why not? Alienate your core audience by insulting half of it, and pretending the other half doesn't exist? OMGWTF?!?

    So the males of your core audience aren't really human, and the females aren't there? Every female I call friend watches the SciFi channel. huh?

    Dave Howe, president of the SciFi Channel, said: “What we love about this is we hopefully get the best of both worlds.” “We’ll get the heritage and the track record of success, and we’ll build off of that to build a broader, more open and accessible and relatable and human-friendly brand.”

    I say 'we', the demographic you're trying to distance yourself from, are human, and really don't take kindly to being marginalized by what used to be one of the new television networks that actually seemed to have a clue about what we wanted to see. We lost TechTV when G4 swallowed them up and bastardized everything that made them great. Now SciFi?

    Look, you guys killed Sliders by jumping every shark you could find, and even made a few out of paper-mâché when you ran out of real ones. I forgave you that when you took Stargate from Showtime and did it proud for a very very long time. Didn't do too bad with Atlantis either. I'm not forgiving you for Farscape, but no one is, so just accept you're getting the Ass-Hat award for that one SciFi. I can even accept wrestling, if begrudgingly, as you felt you needed to pull in a different audience that might just stick around after the show. Giving a big Frack You! to the people that made you what you are, your longtime fans is totally unforgivable, and I will not be coming back. If you happen to have anything left worth watching once BSG is over, I'll be watching it without commercials as I will not be tunning any of my cable receivers or my TiVo to your programming ever again.

    SciFi... errrr SyFy, to you I say Good Day, Sir... Good Day!

    The internet the way it should be

    The following was posted in my blog at Sony's Gamer Advisory Panel website on August 26th of last year. I was told by someone that I should post it elsewhere. So here it is in its original form.

    I just finished changing some settings on my router in an effort to make more effective use of my bandwidth when my son and I are both playing our respective games of choice. So, as I do after every change to my home network I fired up the PS3 connection test and made sure that it was still working properly. As I did I started to think about what I was looking at, and what it really meant.

    In particular, I was looking at the result of the UPnP and NAT Type tests. They came up as 'Available' and 'Type 2' respectively. Both what I expected to see, and so everything is just fine. Except it isn't. Why is the PS3 even running these tests? Why does it care? Why, over 10 years after IPv6 was defined, are we still living under the limitations of IPv4?

    For those of you that don't know, the current version of the numbering and routing system that the internet as we know it runs on is but a few short years from being totally out of addresses to hand out. We would have already run out if not for things such as NAT (Network Address Translation) which allows a single IP address to service a much larger number of systems, with some limitations. Not the least of which is that there is no trivial way to allow systems 'on the outside' to contact one of your systems. That brings me back to UPnP.

    UPnP (Univeral Plug and Play) allows another device to configure a NAT router to allow outside connections into a specific address and port for a specific reason (as well as many other nifty and happy things). Until UPnP came along if you wanted to host a game that your friend in another part of the world (or down the street) could play in you had to login to your router, and with sometimes almost intimate knowledge of how the game communicated, configure the router to forward communications to your PC/Game console. Often times this required a lot more knowledge about the router than most people had, and many times the router didn't support it properly anyway. The only other option was to directly connect to the internet, which meant that anyone else trying to use the connection in your home was now quite out of luck.

    UPnP to the rescue, yes? Sort of. Sure, new devices and new software are released with support out of the box, but it's an imperfect solution and most certainly not a fix just a tool to prolong the inevitable. Also, it has no way to authenticate the program making the request, so it is possible to use it to remove the pseudo-security that a NAT router provides. IP version 6 to the rescue? It could. With an address space so large that you could easily give an address to every person on the planet so many times over that you would lose count, everything could have it's own publicly routable, worldwide addressable, place on the net. No more worries about how to talk to another device, you just do it. Like things used to be, when the net was new, and tumbleweed was all around... or was that Gunsmoke?

    Anyway, where was I? Oh yes, IPv6. Where is it? Why isn't it here? When will it be? I don't know. By now we should be well on our way to changing over to IPv6 only communications, with 4to6 gateways scattered around the net to allow the older devices and services to be accessed until they are replaced with the latest and greatest thing since sliced bread. The operating systems that most of us use on our computers are more than capable of making use of IPv6 right out of the box, or with only minor settings changes. Windows XP just requires turning it on, and it's on and ready to go in Vista as soon as you turn it on. Even Windows 2000 can make use of it with a download from Microsoft's website (as of this post the link for it is dead). Mac OS has had it for a while now, and it is on by default since OS X 10.3. Our Linux and BSD using brothers and sisters have also had it for a while (some longer than others). So why aren't we using it? Because there is no connection available. No one wants to start the ball rolling, or more I should say those that are doing so are in a very small, very exclusive group, and they can only do but so much.

    I'm sitting on my bed, using an old Gateway laptop running FreeBSD and connected to my Mac via SSH over an IPv6 connection to prepare this. I listen to live streaming radio from the UK over an IPv6 connection within iTunes. I watch video from around the world, listen to trance and trip-hop from Germany, communicate via IRC with people all over the world all over an IPv6 connection. No thanks to my ISP, but thanks to a small group of people out of Switzerland, and others like them who offer cheap, or free IPv6 tunnels over people's existing IPv4 connections so they can start taking advantage of the still limited resources that are out there.

    Limited resources, that's the problem. There is no killer app, no holy grail that will bring the masses in line and make the IPv6 gods shine their love down upon us; but that killer app is there, just waiting. It's sitting next to your TV, beside your VCR, on your kid's dresser. Your game console. Your PS3/360/Wii/etc. There it is, just waiting for unrestricted anywhere to anywhere communications. It wants to let you host a game to people all over the planet. It wants to tune into an internet radio station hosted by one lone guy in his basement along with hundreds, or even thousands of other people while lone basement guy only sends out one stream because you all just subscribe to that one stream. It wants to make a multi-person video conference call with your sister in California, your aunt in Mexico, and your best friend forever that just moved to Australia without any of you having to know anything at all about how it works or worrying about if your NAT device will allow the connection through.

    If your console had those features, if you knew it, and knew how much easier it would be to host a server, or make that video call... if everyone had it and knew they had it. Knew what it could do, what it could mean. Then the connection providers (not just your ISP, but your ISP's ISP, and so forth) would have to give it to you, or someone else would. If you could take your laptop out on the road and still had full access to all of your resources at home, not because you knew how to set up a VPN, but because the underlying network just knew how to do it (and mobile IPv6 does) you're ISP would have to give it to you, or someone else would.

    Why does your console not have that ability? Why doesn't it get an IPv6 address if one is available? Why doesn't it use Teredo (a zero-configuration tunneling protocol that can, under the right conditions, give a single machine behind a NAT an IPv6 address without the user having to know, or do anything) when a routable IPv6 address isn't available? That question I pose to Sony, to Microsoft, to Nintendo. Sony, remote play is great, being able to access my PS3 from my PSP... but think about how much easier it would be, and how much more useful it could be, if you didn't have to punch a hole through a router, if the router will even let you? Microsoft, your pride and joy (and the bane of technical support reps everywhere) Vista is all ready and revved up to go, why isn't your game console? Oh, and Apple, why doesn't that shiny new iPhone I just bought understand IPv6 when your desktop OS has for years? Cox, Time Warner, Charter, why aren't you already using it? Comcast, why are you only deploying it for internal CMTS to cable modem use? Why does your own IPv6 deployment strategy explicitly say "Deploy IPv6 only where it is absolutely necessary, and nowhere else!" Verizon, Quest, Earthlink, and other DSL providers, why aren't you using this as a selling point over cable, which has you beat in speed in most areas so badly that it's not even funny anymore?

    Why?

    Why is no one willing to take the first step? Why are we waiting until it's too late; until there becomes an IP black market of sorts? Why are we going to wait until end users don't have public IPs anymore, and their games don't work because their console is behind two, or more NAT devices? Did we not learn anything from the Y2K issue? We waited and waited, and it was almost too late when we did anything. It cost billions to fix, and we knew it was a problem when it was created. IPv4 was never intended to be a production network protocol, it was just a case study that got let loose into the wild, but we've had the solution for a very long time yet we do nothing. Sure, Japan and China are going a long way, but it's still mostly just academic networks that use it. Sure the US government made it mandatory for their networks to be IPv6 capable by June of this year, and they did, but never said anyone had to actually use it.

    So here we are, looking at 2010-2011 (some even think 2009) as the end of the available IPv4 address pool, but we sit on our collective butts and wait for the other guy to go first. Two things drive technology. Two things always have. Entertainment and sex. So to The Great IPv6 Experiment I say godspeed to you, and to the gaming and mobile device makers I say, what are you waiting for? If not you, who, if not now, when? Soon your customers will not be able to use your products; why wait until it's too late, do something now.

    IP Renumbering w/PHP and Compilers.

    In episode 424 of Hak5 a viewer question led to Darren and Matt discussing renumbering a whole subnet of Windows machines using the netsh command in a script, but how would you specify an IP for each machine with only one script? PHP to the rescue, because it's not just for web pages anymore.

    On this week's episode of Hak5, I show off a script to do just that, as well as two different PHP runtime compilers.

    Since most Windows workstations don't have PHP installed a compiler will let you prepare your code to run on systems that don't have PHP installed.

    First, we have Roadsend PHP, which is available for Linux, FreeBSD, Mac OS X and Microsoft Windows. It's released under GNU GPL, and it's runtime libraries are GNU LGPL so compiled programs may be used for both open source and commercial projects.

    Roadsend PHP is not just to package up your PHP into nice friendly bundles, it comes with Roadsend Studio, a full development environment (IDE) with support for the Glade interface builder (*nix/Win32), to give your PHP a GUI front end.

    It supports PHP 4 and 5, and so far all the code I've compiled with it runs just as it would if launched from the command line using the PHP command. The only drawback to it is the compile process seems to take a while even on relatively small projects, and the file sizes are a little large (simple scripts weighing in at over 3MB), but if you want to stay in one environment from start to finish Roadsend will do the job.

    Second is the Bambalam PHP EXE Compiler/Embedder, which as the name implies is for Windows only. Like Roadsend PHP, Bambalam PHP is free to use as it's released under the PHP license, generates code that will run without a full PHP install, and with the use of the WindBinder library can produce programs with GUI front ends. That is about where the similarities end.

    Bambalam is small, consisting of a hand full of files, and is only for the actual building of the executable code. Bring your own editor, debugger, GUI builder, and project manager. That's not what Bambalam is for. What it is for, though, is producing small, fast programs out of any PHP that will run under PHP 4.4.4. The same +3MB code that Roadsend produced came in at just over 1MB with Bambalam, and under 700KB with compression turned on.

    The problem my code solves is how to write one script to renumber a whole group of machines without having to issue a different version of the script to each machine. As this is more of a proof of concept we will assume that only the last octet of the IP address will be changing.

    The command is issued with the following options:


    <New IP> <Subnet Mask> <Default Gateway> [DNS] [WINS]


    The new IP is given as the first three octets in xxx.xxx.xxx format, subnet, and gateway will be a full four octets a piece. IP, DNS, and WINS can each be assigned as DHCP (using DHCP for IP precludes the need for subnet and gateway). DNS and WINS can also be assigned as NONE so long as IP is not DHCP. Furthermore, specifying WINS requires that some value is given for DNS.

    If a new first three octets are given without specifying DNS or WINS and those values were already staticly assigned then the new first three octets will be used for those values as well. Also if IP is currently assigned via DHCP that can't be changed at this time.

    The following code is my first attempt at PHP, and before writing this I had never even seen PHP code before. While comments and advice are welcome, keep that in mind.

    iprenum.php

    This code is released under the BSD license (two clauses), so feel free to use it as you see fit, just don't complain to me when it plots with your cat to take over the world.

    Don't ask me how to deploy this script across a Windows network without physically accessing every machine, I don't do Windows. I have a feeling Darren has some thoughts on it, though.

    Support is more than just saying it

    I'm a big supporter of the public domain, Creative Commons, and any release other than all rights reserved. I always have been. Sure, people need to be compensated for what they do, but most of the time the license that is associated with something is far more restrictive than just 'give me props and a few pennies for my trouble'. I'm a big supporter... or am I? Sure my default publishing license on Flickr is (CC) BY-NC-SA (Creative Commons, must give attribution, non-commercial derivatives allowed, all derivatives must be shared under the same terms) but other than that I guess I really just give lip service to the whole thing.

    I realized that tonight while listening to a lecture about copyright, free culture, and the movement back to 'the way things used to be'. It's not enough to be for something to just say you support it. Support is in the doing, not the saying. Some people give time and money to organizations which seek to further the cause of a free common culture or just defend those that are being legislated out of existence for doing what should be legal in the first place. Not having the time, or the money doesn't mean you can't help. If you're reading this then you probably also create some kind of content. Maybe you're a coder or a writer of fiction. Perhaps you paint or sculpt, or maybe you blog about what your cat is doing (with your cat's permission of course). But unless you're using content which you don't have the right to let others redistribute then I ask that you consider applying a license to it that is far less restrictive than 'all rights reserved'.

    This wacky world of thoughts and ideas was built on sharing, and will only survive with sharing. It's not enough to just put it out there, let people know what they can, and can't use. Let them know what they can, and can't do. Everything I do, unless stated otherwise, is in my mind (CC) BY-NC-SA... only difference is now I'm going to make sure that's clear to the world.

    Be the change you want to see in the world or something like that.