God, I hate to say it, but the first thing I think of when someone says CARS is no longer that amazingly funny site that John Moltz runs. Yeah, I’ve been at Disney just long enough to get really messed up that way. Even still, when I caught the news that he was shutting things down, I was pretty bummed. It was a daily read. Or maybe a weekly read where I went through each day, but I still made sure to read each day anyway because I’d be snickering, chuckling, or something. Maybe coughing. Hard to tell sometimes.
And yes, Gus did actually make me get him an autographed copy of a picture of The Entity. Speaking of which, John hasn’t been up here in a while. Maybe we should invite him to another Xcoder after-meeting to make sure he remembers why he doesn’t want to be a programmer…
A long time ago, on a server that was probably far, far away… there lived a little project called UnitKit. I’m not trying to resurrect it or anything – although I still think it’s form was nicer than Sen:te OCUnit that Apple adopted. (I really liked the macro mechanisms and the choice of phrases – it just gelled with me). It recently came to my attention that you basically couldn’t find it out on the net anywhere anymore.Â
Â Well, I had a copy of the last trunk (not the revisions or a backup of the SVN repository) tucked away. I’ve madeÂ a ZIP archive of UnitKit (844KB)Â and it’s available if you’re looking. I honestly didn’t contribute all that much to the project, but I really liked it. So of course, I kept it.
I’ve been walking to work since the new year… or trying to. I started developing a blister on the back of my left heel, but I ignored it. That’s works right? uh, no. So I’ve been off the heavy walking regime for the past several days, trying to let it heal up. I got some blister-special bandages, and I’m trying to two-layers of socks things too. I got half-way to work today before I had to give in and switch to a bus. I’ve kicked off my shoes now, but I’m still really annoyed that I didn’t make it all the way here today.
Turns out Jeremy Dunck is in town, visiting and doing some work related tidbits here. John and I caught up with him this evening and grabbed dinner and a couple of beers at Elysian Brewery. He gave me a rash of WTF! for not getting to PyCon this year. Very reasonably, mind you. I would like to get there and see what it’s all about. I’m secretly enamored of all the cool and somewhat twisted stuff they’re doing in the PyPy project, and it’s almost always a topic.
For now, I’ll have to settle for going on a wonderful vacation shortly before PyCon ’08. I understand the aim is to have PyCon ’09 in the chicago area as well, so it’s tentatively on the books for next year.
Please index this so when I run into this again, I can find it.
So I just spent the past 6 hours debugging an esoteric problem with using the p4 command through python, taking advantage of the “-G” option to marshal the data directly back into python objects. p4 is the command line client for perforce. Pretty good client, even if perforce annoys me half the time. It has a really nice feature in that you can ask for the results of commands to be handed back as marshaled objects for either python or ruby using the “-G” or “-R” option respectively. Fantastic for accessing perforce through a script. I’ve been using python…
It turns out that if you invoke the
p4 -G where command with a path, you can get back somewhat inconsistent results when that path is a directory and not a file. For example, “p4 -G where //depot/dir/project” is how I’ve been using the command for quite a while. Worked pretty darn well. I iterate through the results, and get the dictionary of the paths – use them in a script. What I found is that there are some directory structures which this doesn’t work – but using “p4 -G //depot/dir/project/…” does work. In my simple case, I get an EOFException when trying to unmarshal the data from one of these special directories. I’m not even sure what makes it a special directory – just that there are some that we’ve found that don’t work.
For the curious, here’s my quick test code:
from subprocess import *
trouble_path = '//depot_name/Projects/Shared'
print "TROUBLE PATH"
cmd = "p4 -G where %s" % (trouble_path,)
print "invoking cmd %s" % cmd
f = os.popen(cmd)
d = marshal.load(f)
OK_path = '//depot_name/Projects/Shared/...'
print "OK PATH"
cmd = "p4 -G where %s" % (OK_path,)
print "invoking cmd %s" % cmd
f = os.popen(cmd)
d = marshal.load(f)
And yes, I know about Robert Cowham’s really nice libraries. I won’t even explain why I can’t use them because I’ll just start foaming at the mouth and using obscenities. I’m working with perforce through my own scripts, using the -G option, and for the most part its working very nicely. This was just one of those places where it wasn’t. I take the results of the p4 where command and strip the “/…” or “\…” off the end to get what I want for desktop client paths, and I’m good to go.
It’s newsworthy – snow isn’t that common in Seattle, and the more newsworthy part – Seattle goes absolutely insane when there is any significant snow (or god forbid – ice) around the place. Last night we got a wet dusting blowing from the south that made some really pretty impressions. Buses were late and somewhat screwed up today, so it took a while to get into work. Time enough to take some pictures to post them up here before I finally found a bus and got downtown.
After having read through the high-level guides onÂ Core AnimationÂ yesterday, I was inspired to go dive intoÂ Quartz Composer. There are a lot of things you can plug into the Core Animation frame – everything from still images, videos, to OpenGL views. And one of those things is a composition from quartz composer.
So the first thing I learned is that a visual “programming language” (which Quartz Composer uses), requires a hell of a lot more screen real-estate than even a 15″ MacBook Pro easily provides. I just started digging into some of the read-made samples to get a sense of how other compositions were put together, and found myself scrolling and scrolling around to try and find everything. The creators of this setup have done a nice job with making “macros” for the visual language too – the visual complexity of all the various components on one screen would require at least four 30″ monitors side by side and be just tremendously overwhelming. It’d be cool – I’m all for doing it – but I’m not sure we can drive four 30″ monitors with a single computer quite as yet.I’d had an idea of displaying an RSS feed out in a visual timeline view – thought that would be interesting. I’m pretty sure I can do it with it QC… but for me it may well be faster just coding it all by hand with a text-based language. At least working from my laptop.Â
I think what may be most fascinating about Quartz Composer is that someone can make a complete applicationÂ with Quartz Composer on Leopard. With the additions that have been tucked in, you canÂ create an interface in Interface Builder that hooks up to Quartz ComposerÂ and basically never have to write a line of code to get an incredible graphic display application. If you’re willing to write a little code, you can write your patches into Quartz Composer – and the possibilities of visual display start going overwhelming again.
I’ve been flipping throughÂ Visualizing DataÂ recently – it’s mostly focused on usingÂ ProcessingÂ to do it’s stuff, but I can easily see roaming into the realm of using Quartz Composer for the same kinds of effects.Â I’m not the only oneÂ that had that thought, andÂ some folks have even hacked the two to work together. There’sÂ also been some updates that allow Quartz Composer to communicate over the networkÂ (with more than an RSS feed reader) – so you can have multiple quartz composer applications “talking” with each other.
I’ve spent most of the afternoon re-aquainting myself with Mac programming idioms, and generally getting myself into a veritable froth of possibilityand over-imagination about theÂ CoreAnimation technologies.
Outside of that, I finally backtracked into the world of Ruby on Rails to figure out why all the examples in the books were completely screwed up for me. It turns out that a basic stepping stone in most of those tutorials is the “dynamic scaffolding” bit. In the world of the Django frameworks, this is sort of a cross between the Admin functionality that’s implied from all models there and a “insta-crud” framework that’s for a general user’s benefit.
Regardless, when I got to that point in the rails world, the demos just all broke and went to hell – and as a rank newbie, I hadn’t a freakin’ clue of what was going on and how to fix it.Today I finally pinned it down. Taking some time away from it gave me a little perspective (as in I wasn’t muttering about how this rails thing sucks) and I got the skinny on the ruby forums. In a nutshell,Â dynamic scaffolding doesn’t exist in Rails 2.x – butÂ you can generate a static scaffoldingÂ with rails generator code.
I’m certainly not quite used to “script/generate …” which seems to frequent the rails world of newbie examples. It does get a hell of a lot done for you, but I sort of feel like I’m missing the boat on what’s actually happening and what the defaults/conventions of rails are. Just working through it, I guess, is the best way to learn.
I’ve had ads running on this site as a lazy experiment for the better part of 18 months now. I haven’t done anything to really push the ads other than prominently display them. My take home was roughly $2.50 each month – which just isn’t worth the annoyance of seeing ads up there, so I’ve ripped that done. All told, my earnings haven’t broken $50, so to hell with it. I typically get between 2500 and 3000 pageviews a month – just not enough to mess with advertising for even simple cash.
Away go the ads.
I gaveÂ the presentationÂ to Xcoders group last night – a short overview of the new features of Xcode 3. If you get a copy of the presentation, you’ll need VoodooPad to view it. If you don’t already have it, you can get a free/lite version atÂ http://flyingmeat.com/voodoopad/voodoopadlite.html. There’s a bit up on the Xcoders’s blogÂ as well.