Landing in San Francisco this morning, we had an interesting experience. We were escorted in by another plane (no, it was not an F-16). I’ve never seen, nor been a part of, a tandem landing. A bit of an odd experience, to say the least… I’ll update with a photo (I snapped a couple of shots). The two planes landed on parallel runways with about 2 seconds between them…
I’m in the Pachyderm project update meeting now, at the Grand Hyatt. Great group of folks!
Found this gem on the WordPress Wiki: Auto shutoff comments. It includes code that you can use to create a plugin to automatically close comments after a set number of days – handy for keeping those evil spam roaches at bay.
I just copied the second block of text (the one by Scott Hanson) into a file called “Autoclose.php” and uploaded it into my WordPress plugins directory. Went to my admin console and activated the plugin, and it seems to work just fine! At least this will keep the roaches confined to a small subset of posts on this weblog, instead of letting them roam unfettered over the 476 posts accumulated over the years…
Rob Reynolds has just posted an interesting piece on the coming LMS Wars. He likens it to be on par with the telecom industry’s battle with legacy/enterprise protocols (ATM) vs. upcoming anarchy-driven protocols like IP. (IP is now in the lead, by the way)
The existing LMS industry is analogous to the IT industry, and democratizing tools such as weblogs, wikis, rss, podcasting, etc… are the underdogs.
I think the LMS vendors are smart enough to try to incorporate the best of these tools if they want to survive. Because if they don’t, the subversive tools will overtake them very quickly.
I volunteered to manage an Education node of the iPodder.org podcast directory.
It’s kinda empty at the moment. If you know of any education-related podcasts, please let me know if it should be included in the directory.
David just published a great post on developing with WebObjects. He really boils down the WebObjects development experience into a few bullet points, which I will copy/paste here for searchability…
The last point is really the best one – I’ve come across this so many times on CAREO and Pachyderm. We’ll be building away and I’ll just stop and say something lame like “Wait – this is getting too complicated. There has to be an easier way…”
- Don’t fight the tool – WebObjects and EOF are very flexible and rich in capablilites. Get to know the way they work and work with them. Don’t fight them – they will win. Read the sample code from Apple and the source for Project WONDER. When you write your code emulate their style. The really good stuff is just below the surface (Key Value Coding for example). That’s where the power lives, dig a little, you will be rewarded.
- Follow the commandments – A few simple rules that will prevent a world of hurt.
- Let someone else write the code – I’ve mentioned a number of sources of WebObjects frameworks in my posts (Project WONDER, SwitchableStrings, WOCode ), they provide an amazing amount of functionality that you don’t need to implement yourself, that’s the entire point of OO design isn’t it? Also, when you build something useful, factor it out into your own reusable framework – why would you want to write something twice? Finally, use EOGenerator – no really – use it. There is no excuse not to.
- Model it right the first time – Every time I’ve been tempted to cut corners on my model, it’s come back to bite me. A strong Model will allow your App to almost write itself. My general rule of thumb: If I can’t get from one object to a “related” one via KVC, I’m going to be grumpy.
- If it is getting complicated, you’re probably doing it wrong
Please, don’t try to hack around the WebObjects architecture. i.e. If you really need multiple concurrent access to your database everywhere in your application – use something other than EOF.
- You’re fighting the tool aren’t you?
- Maybe WebObjects is the wrong tool.
I just checked the Apache logs and grepped out the lines dealing with the podcasts, and it looks like the podcasts have been downloaded a total of
1377 661 times! (see update below) Holy crap! Who is downloading this stuff? No, really. I’d love to know. If you’ve downloaded any of the experimental podcasts, please let me know!
The simple and not exactly efficient command I call to count podcatches is:
grep "/~dnorman/podcasts/" < /var/log/httpd/commons_access_log | grep "GET " | grep " 200 " | grep ".mp3" | grep -v "65536" | wc -l
The basic logic of that statement is something like: “Look in the apache log, and pull out all lines referring to files in the /~dnorman/podcasts/ directory. Of those lines, retain only those requests that were GET (ignoring HEAD requests…), and of those, retain only those that were 200 (not incomplete or file not found etc..). Of those lines, retain only those that point directly to a .mp3 file (ignoring directory listsings…), ignore the silly repeated download of files by podcatching software (which appear to download 65536 bytes of files just to check that they’re still there…)and feed what’s left into the wc (word count) command, telling it to return the number of lines left.
I’m sure there’s a more efficient and reliable way of doing this (I’m sure if I knew wtf I was doing with regular expressions that I could combine all of the piped grep statements into a single one with a more complex pattern.), but it seems to work… If I want to see how many times a particular podcast has been downloaded, I can change the last “.mp3″ grep to be the filename I’m looking for.
UPDATE: Christian let me know in the comments that the podcatch software typically does a very silly thing – it repeatedly downloads about 65K of the mp3 to see if it’s changed. They don’t do the right thing and request the HEAD, which would tell them the same thing in a few bytes of text, but instead download about 65K of the actual file and abort it. That’s so unbelievably silly that my mind reels. And it also pollutes the apache logs so it’s MUCH harder to see how many real downloads are going on. Perhaps I could modify my grep to drop lines containing the (hopefully fixed) downloads associated with podcatch pinging…
Anyway, I’m not disappointed by the lower “real” numbers – I was more freaked out by the extremely inflated “raw” numbers. Still, if you’re downloading these things, I’d love to know…
Well, they’re opening one in Toronto. Looks like the Rest of Canada has to wait until at least the middle of 2005 before more Canadian Apple Stores will be opened.
Come on Apple Store Calgary! They’re just finishing up renovations on Market Mall – that would have been perfect timing to sneak in the black barricades for construction of an Apple Store… Oh, well…
Actually, wait – that’s too close to my house. I can’t afford having an Apple Store that close. I’m still looking for a way to fund my impending addiction to the iTMSCanada…
I was hoping to use GarageBand instead of Audacity as part of my recording suite, but the stars aren’t aligned…
The only mic I have on my desktop G4 is my iSight camera, which sounds pretty good, but runs at 48KHz. GarageBand only likes 44.1KHz sources, so it doesn’t work.
Doh. Looks like I’ll be sticking with Audacity. There wasn’t a real reason to switch, just that I like GarageBand a lot
Time for another brain dump. This time, I talk about the Pachyderm development process. listen in.
- Format of this podcast – not just barfing out links today – maybe next episode
- Pachyderm development
- Josh was in town for the week
- VNC + Projector + couple of extra keyboards on USB
- Spent much time on:
- generation process
- apollo integration
- interface implementation – d2w
- XCode really needs a “collaboration” mode – someone sets their XCode to be a “server” and other developers connect to it, and edit code (something like SubEthaEdit), and share a single project file. This would be much more efficient than just Subversion or CVS to sync changes
- BBEdit 8 is really nice – and don’t forget to install the command line tools and set bbedit as the EDITOR so you can use it for Subversion or CVS commits instead of vi/emacs
- EduPodcast Aggregator – could do the same thing in Bloglines, but this is more edutech-oriented