jerakeen.org / codehttp://jerakeen.org/code/2009-07-29T16:01:37ZTom Insamtom@jerakeen.orghttp://jerakeen.orgCougar2009-06-24T11:34:32Ztag:jerakeen.org,2009:/code/cougar<p><a href="http://jerakeen.org/code/cougar/"><img src="http://jerakeen.org/files/thumbnail/url/5a1bb32ba4e9206a1a277e15984810fa_240x180.png" style="border: none"></a></p>
<p>jerakeen.org is normally powered by a hand-rolled <span class="caps">CMS</span> built with whatever bit of technology I happen to be playing with at the time. This month, it’s built on <a href="http://www.djangoproject.com/">Django</a>, and I call this project <code>cougar</code>, for no real reason.
</p>
<p>It’s got multiple page types, so I can store my blog posts, code documentation, photos and external links in a single web application. All pages share a common <a href="http://jerakeen.org/tags/">tag cloud</a> and you can get a view of <a href="http://jerakeen.org/tags/django/">all pages with a particular tag</a> easily. Any of my pages can have thumbnail images, preview images, external links and uploaded files associated with them, and visitors can comment on any page on the site (this last one comes and goes according to whim and short-term philosophy).
</p>
<p>The part I’m most proud of, however, is the photo and link syndication. Rather than put the photos into jerakeen.org itself, I use <a href="http://flickr.com/photos/jerakeen">flickr</a> and <a href="http://delicious.com/jerakeen">delicious</a> to store photos and links, and periodically sync this data into jerakeen.org. I get all the benefits of using both flickr and delicious - powerful client tools, slick web interfaces, the social aspects - but also maintain a one-stop site that contains every piece of data I produce. I also sync the tags <strike>and comments</strike> from these sites, so my flickr tag cloud contributes to the jerakeen.org tag cloud.
</p>
<p>I also syndicate my <strike><a href="http://twitter.com/jerakeen">twitter</a></strike>, <a href="http://upcoming.yahoo.com/user/123407">upcoming</a> and <a href="http://www.dopplr.com/traveller/jerakeen/">Dopplr</a> events into a <a href="http://jerakeen.org/everything/">lifestream</a> page, where hopefully you can see everything I do on the internet.
</p>
<p>Alas, the source code to this site is not properly released - I have neither the time nor the inclination to give it the level of flexibility it would need for other people to use it. Get Rails or Django and write one yourself - it’s very easy. But if you really want the code, it’s available in <a href="http://github.com/tominsam/cougar">github</a>. My syndication utilities are <a href="http://github.com/tominsam/cougar/tree/master/cougar/management/commands/">part of this project</a>. Again, these are very specific to my install, and will require considerable tweaking to work for you.
</p>
<p>I might provide help on installing cougar in your particular system, and I might accept patches that improve it, but I’m a fickle person, and will have changed <span class="caps">CMS</span> systems again in 6 months, so don’t expect a formally maintained release any time soon..
</p>
DjangoKit2007-03-28T15:48:20Zhttp://jerakeen.org/code/djangokit/<p><a href="http://jerakeen.org/code/djangokit/"><img src="http://jerakeen.org/files/thumbnail/Picture_2_.png" style="border: none"></a></p>
<p>DjangoKit is a framework that will take a <a href="http://www.djangoproject.com/">Django</a> application, and
turn it into a stand-alone MacOS application with a local database and
media files. It started as more of a thought experiment than an effort at
producing a real application, but I have it working, and you can package perfectly usable stand-alone applications with it.
</p>
<p>DjangoKit is currently hosted in a <a href="http://code.google.com/p/djangokit/">Google Code repository</a>, so go there for downloads and source, or just get the svn tree directly at <a href="http://djangokit.googlecode.com/svn/trunk/">http://djangokit.googlecode.com/svn/trunk/</a>.
</p>
DuckCall2006-11-21T12:02:47Zhttp://jerakeen.org/code/duckcall/<p><a href="http://jerakeen.org/code/duckcall/"><img src="http://jerakeen.org/files/thumbnail/duckcall.png" style="border: none"></a></p>
<p>DuckCall is a trivial little utility that I wrote once I realised that I was getting a MacBook Pro, and it had a camera built into it. It updates your iChat or Adium (requires version 1.3 or later) status picture with a shot taken from the iSight evey 30 seconds.
</p>
<p>It’s <em>very</em> crude, and consists of a PyObjC wrapper round a stand-alone binary (to get the picture from the iSight) and a bunch of AppleScript (to set the picture into iChat / Adium) - there’s no reason for it to be written in Python at all, and it’s <em>far</em> too large as a result, but PyObjC is my ‘crazy prototyping’ environment of choice.
</p>
<p>Try it. You can download what <em>should</em> be a Universal binary below, or you can <a href="https://seatbelt.jerakeen.org/svn/tomi/Projects/DuckCall/">check it out from subversion</a> and build it yourself.
</p>
EmusicR2007-12-03T22:21:56Zhttp://jerakeen.org/code/emusicr/<p><a href="http://jerakeen.org/code/emusicr/"><img src="http://jerakeen.org/files/images/emusicr.png" style="border: none"></a></p>
<p>EmusicR is a (very trivial) download manager for <a href="http://emusic.com">emusic</a>. Essentially, I was just too annoyed with the <a href="https://www.emusic.com/dlm/download.html">official emusic download manager</a> and I wanted a small project that would let me play with the <a href="http://rubycocoa.sourceforge.net/">RubyCocoa</a> that comes built-into Leopard.
</p>
<p>It requires at least MacOS X 10.5 (though it may run under 10.4 if you install PyObjC first. Not sure, try it..). It’s a universal binary.
</p>
<p>This is an early first release - it represents about an afternoon’s work, so unsurprisingly doesn’t do a lot. But it’s easily up to dogfood quality, and I now use it in preference to the ‘real’ download manager. It <em>might</em> have one major issue - it only understands <a href="http://code.google.com/p/emusicremote/wiki/EMX_File_Format">.emx files</a>. I think there are other file formats that emusic can supply (<a href="http://brandt.kurowski.net/2003/4/8/2003-04-08T15:29:56-0400/">there used to be .emp files?</a>), but I haven’t gone into any great depth here. As and when I find a file that breaks, or someone can point me at one, I’ll fix it.
</p>
<p>Let me know in the comments if there’s anything else broken.
</p>
<p>Vague todo list:
</p>
<ul>
<li>
When downloading albums, fetch and apply album art automatically (grr emusic for not selling me mp3s with art in them).
</li>
<li>
Fix the track total count part of the <span class="caps">ID3</span> tags, so tracks are ‘track 3 of 12’ rather than just ‘track 3’.
</li>
<li>
The app looks a little odd when you just run it - it opens no windows. I should open the prefs window so you have something to look at.
</li>
<li>
Any more suggestions?
</li>
</ul>
<p>You can find the source in my <span class="caps">SVN</span> repository at <https://jerakeen.org/svn/tomi/Projects/EmusicR/> or just download one of the binaries below.
</p>
Flame2000-01-01T12:00:00Zhttp://jerakeen.org/code/flame/<p><a href="http://jerakeen.org/code/flame/"><img src="http://jerakeen.org/files/thumbnail/flame.png" style="border: none"></a></p>
<p><a href="http://husk.org/apps/flame/">Flame</a> is another take on <a href="http://www.tildesoft.com/Programs.html">Rendezvous Browser</a> - <a href="http://husk.org">Paul</a> and I decided that grouping by service wasn’t particularly useful, frankly - we’d rather group by person / machine, and see all the machines on the local network, and the services that they were advertising.
</p>
<p>It’s written in Python - once upon a time there was a version written in <a href="http://camelbones.sf.net">CamelBones</a>, but it wasn’t very good, and so I used the re-write of it to learn Python and <a href="http://pyobjc.sourceforge.net/">PyObjC</a>, which is very slick indeed. It sat in my repository for waaay too long, and finally Paul and I have managed to get a release out the door. Flame 0.1 was released on 2005/03/09, and its <a href="http://husk.org/apps/flame/">official web page</a> is hosted by Paul, because he’s better at these things than me. We expect the user interface to get a lot of polish in the future - in particular, the inspector is basically just a dump of the Service object state, and could be waaay nicer. But what the hell, we wanted feedback.
</p>
<p>Although not yet under any sort of sensible license, the source is available <a href="http://jerakeen.org/svn/tomi/Projects/Flame">in the Flame section of my subversion repository</a> and will require PyObjC 1.2 or greater to build. There’s a bug in 1.2 that makes it very noisy on the console, but it’ll work fine.
</p>
<p>Flame is <a href="http://jerakeen.org/code/flame-iphone/">also available for the iPhone / iPod touch</a>.
</p>
<h3>Other pages referring to Flame</h3>
<ul>
<li>
<a href="http://2lmc.org/spool/id/4093">the spool that started it all</a>
</li>
<li>
<a href="http://husk.org/apps/flame">the husk.org apps page</a>
</li>
<li>
<a href="http://2lmc.org/spool/id/4691">the launch announcement</a>
</li>
<li>
<a href="http://jerakeen.org/blog/2005/03/09/flame-0-1">my blog</a>
</li>
<li>
<a href="http://husk.org/blog/arch/mutterings_around_a_small_flame.html">paul’s blog</a>
</li>
<li>
<a href="http://del.icio.us/url/0bfcda413e5f8fb0da6295b5b751e759">del.icio.us</a>
</li>
</ul>
<h3>ChangeLog</h3>
<p><a href="http://jerakeen.org/files/Flame-0.2.2.zip">Flame 0.2.2</a> - 2006/11/01
</p>
<ul>
<li>
Fixed some bugs where services where being de-duped too enthusiastically
</li>
<li>
0.2.2 has a Leopard-only build that uses the system PyObjC and Python, and so is <em>much</em> smaller. But it won’t work on anything other than Leopard.
</li>
</ul>
<p>Flame 0.2.1
</p>
<ul>
<li>
Added a beautiful icon from Dario Villanueva
</li>
<li>
Flame is now a Universal Binary
</li>
</ul>
<p>Flame 0.2
</p>
<ul>
<li>
We remove hosts with no listed services a few seconds after a rescan, to prevent empty host entries hanging around when you change network locations, or someone unplugs a machine.
</li>
<li>
Added a couple more recognised services, mostly to do with the Airport Express.
</li>
</ul>
<p>Flame 0.1
</p>
<ul>
<li>
First release. displays hosts on the local network. Not really any ‘changes’, per-se.
</li>
</ul>
Flame for Android2009-07-29T16:01:37Ztag:jerakeen.org,2009:/code/flame-for-android<p><a href="http://jerakeen.org/code/flame-android/"><img src="http://jerakeen.org/files/thumbnail/flame-android.png" style="border: none"></a></p>
<p>Flame is a Zeroconf network services browser. It’s also an application that
I tend to port to a lot of platforms as something simple that will let me get
a feel for the thing. So this is the Android one. Or rather it’s a <span class="caps">VERY</span> <span class="caps">ROUGH</span>
<span class="caps">OUTLINE</span> of something that might become an Android version of flame. It’s entirely
non-functional right now. I also suspect that <a href="http://code.google.com/p/android/issues/detail?id=2323">this bug</a>
might make it impossible to write at the moment. We shall see.
</p>
Flame for iPhone2008-12-02T12:14:34Ztag:jerakeen.org,2008:/code/flametouch<p><a href="http://jerakeen.org/code/flame-iphone/"><img src="http://jerakeen.org/files/images/FlameTouch.png" style="border: none"></a></p>
<p>Flame is a browser for Bonjour (also known as ZeroConf) network services. It lists the services advertised on your wireless network and you can browse them by server or by service type. When selecting a service, its advertised details are displayed.
</p>
<p>If an application on your iPhone or iPod touch can handle any of the advertised services, a command to open it right away is provided.
</p>
Flame for Java2009-07-28T21:34:49Ztag:jerakeen.org,2009:/code/flame-java<p><a href="http://jerakeen.org/code/flame-java/"><img src="http://jerakeen.org/files/thumbnail/url/115f4a07dc72441d1bf0a365670b505c_240x180.png" style="border: none"></a></p>
<p>A Java network services browser. A very simple port of <a href="/code/flame/">Flame</a> to Java, with a trivial windowing framework over the top. I’m happy with this mostly because it’s packagable simply as a cross-platform .jar file that will run happily on Windows, MacOS and linux with no problems.
</p>
FlickrHub2009-04-22T07:45:19Ztag:jerakeen.org,2009:/code/flickrhub<p><a href="http://jerakeen.org/code/flickrhub/"><img src="http://jerakeen.org/files/thumbnail/url/f47663a212fc823f3c223dbf91ef963f_240x180.png" style="border: none"></a></p>
<p>FlickrHub is a toy. I have a lot of random ideas for flickr projects, and most of them get a lot easier if I can plug them into an established application that already downloads and caches a butt-load of flick photo information. So far, the only app I implement is an <span class="caps">RSS</span> feed generator that builds a feed of the photos of your contacts, including their friends-only photos. but I have Grand Plans.
</p>
mod_js - a JavaScript Apache module2007-07-09T11:52:59Zhttp://jerakeen.org/code/mod_js/
<p><a href="http://www.modjs.org/">mod_js</a> is an Apache module written by <a href="http://perlitist.com">Ash Berlin</a> and I that embeds the SpiderMonkey JavaScript engine and lets you run JavaScript code on the server as <span class="caps">CGI</span> scripts. As you’d expect, it’s very early, but is good enough to compile scripts, run the JavaScript, and print the output to the client. mod_js is licensed under the <span class="caps">GPL3</span>.
</p>
<p>You can get the <a href="https://jerakeen.org/svn/tomi/Projects/mod_js/">source code from the subversion repository here</a>, and there’s a <a href="https://jerakeen.org/svn/tomi/Projects/mod_js/examples/test.js">trivial example <span class="caps">JS</span> script here</a>. To build mod_js, make sure that the <code>apxs</code> binary for the apache to want is in your path (or set the <span class="caps">APXS</span> environment variable to the right binary) and run:
</p>
<pre><code>$ perl make.pl
$ sudo perl make.pl install
</code></pre><p>You’ll need root to install the module, and a working perl to run make.pl. I don’t use perl for anything clever - I just prefer it to writing makefiles. Once the module is installed, edit your apache config file and add:
</p>
<pre><code>ScriptAlias /js-scripts /some/path/to/scripts
AddHandler js-script .jss
</code></pre><p>Once this is done, files in the script path ending in .jss will be run as server-side javascript files. See the <a href="https://jerakeen.org/svn/tomi/Projects/mod_js/examples/test.js">example here</a> for sample usage of server-side JavaScript.
</p>
<p>Right now you can’t do a lot in a script - ‘print’ is about it. There’s a ‘request’ object available to the script that contains the <span class="caps">CGI</span> arguments, local script environment and any data that was posted to the script, so you can write simple <span class="caps">CGI</span> scripts, but there’s no access to the local filesystem or any database drivers (SQLite is linked in, and has very limited support, but it’s not useful yet). It’s possible that this situation will never get better - see the musing <a href="http://jerakeen.org/blog/2007/07/server-side-javascript-under-apache/">here</a> for my reasoning.
</p>
PythonDaap2000-01-01T12:00:00Zhttp://jerakeen.org/code/pythondaap/
<p>PythonDaap is a (under development) <span class="caps">DAAP</span> client implemented in Python, and based on <a href="http://cvs.ucc.asn.au/cgi-bin/viewcvs.cgi/projects/pytunes/">PyTunes</a> by <a href="http://www.davyd.id.au/">Davyd Madeley</a>.
</p>
<p>It’s got a primitive object model that can download individual tracks, and has playlist support. I have a command-line shell similar to <a href="http://search.cpan.org/~rclamp/Net-DAAP-Client-0.42/examples/itshell">itshell</a> (I also called mine <a href="http://dev.jerakeen.org/svn/tomi/Projects/python-daap/examples/itshell.py">itshell</a>, just to be confusing), and it’s all quite usable. Note that, because of the endless ratchetting of the amount of crypto needed to talk to iTunes, this is best off considered a client that will <em>only</em> talk to open-source linux servers such as <a href="http://www.deleet.de/projekte/daap/daapd/">daapd</a>.
</p>
<p>Development copies of the code can be found in <a href="https://seatbelt.jerakeen.org/svn/tomi/Projects/PythonDaap">my subversion repository here</a>, or there are release tarballs avaliable below.
</p>
<p>Known users of PythonDaap:
</p>
<ul>
<li>
<a href="http://www.fluendo.com/elisa/">Elisa</a> is an OpenGL based cross-platform media center solution
</li>
<li>
<a href="http://fusedaap.sourceforge.net/news/">fusedaap</a> mounts iTunes shares as filesystems under linux
</li>
<li>
<a href="http://lsongs.com/">LSongs</a> - ‘The Ultimate All-in-One Digital Music Player for Linux!’
</li>
<li>
<a href="http://www.exaile.org/trac">Exaile</a> - Exaile is a music player aiming to be similar to <span class="caps">KDE</span>‘s Amarok, but for <span class="caps">GTK</span>+ and written in Python
</li>
</ul>
<p>Known packages of PythonDaap:
</p>
<ul>
<li>
<a href="http://packages.debian.org/unstable/python/python-daap">debian packages version 0.7</a>
</li>
<li>
<a href="http://syzygy42.tuxfamily.org/">ubuntu packages by Aren Olson</a>
</li>
<li>
<a href="http://packages.ubuntu.com/hardy/source/python-daap">Ubuntu hardy packages 0.7</a>
</li>
</ul>
rachievements2009-03-06T13:00:38Ztag:jerakeen.org,2009:/code/rachievements<p><a href="http://jerakeen.org/code/rachievements/"><img src="http://jerakeen.org/files/thumbnail/url/2a27fa7827ef1a58ab65510cc195f39b_240x180.png" style="border: none"></a></p>
<p>A Ruby server for amalgamating World of Warcraft guild achievement feeds.
</p>
<p>For what it’s worth, there’s a live version of this codebase running at <a href="http://achievements.movieos.org">http://achievements.movieos.org</a> tracking the achievements of <a href="http://www.unassignedvariable.org/">my guild</a>.
</p>
<p>Some notes cribbed from <a href="http://jerakeen.org/notes/2009/02/warcraft-guild-achievements-as-rss/">my blog entry</a>:
</p>
<p>The trick to scraping the <a href="http://eu.wowarmory.com/guild-info.xml?r=Nordrassil&n=unassigned+variable&p=1">Armoury</a> is pretending to be Firefox. If you visit as a normal web browser, they serve you a traditional <span class="caps">HTML</span> page with some Ajax, and it’s all quite normal and boring. If you visit the armoury in Firefox they return an <span class="caps">XML</span> document with an <span class="caps">XSL</span> stylesheet referenced in the header that transforms the <span class="caps">XML</span> into a web page. Why are they doing this? It must be a <em>huge</em> amount of work compared to just serving <span class="caps">HTML</span>, I don’t get it. Let’s ignore that. Fake a firefox user agent, and you can fetch lovely <span class="caps">XML</span> documents that describe things!
</p>
<p>There’s no ‘guild achievement’ page, alas, so we start by fetching the page that lists the people in the guild. The rendered web page has pagination, but the underlying <span class="caps">XML</span> seems to have all characters in a single document, so no messing around fetching multiple pages here (I’ve tried this on a guild of 350ish people).
</p>
<p>The next thing we have to do is loop over every character and fetch their achievements page. This is extremely unpleasant and slow, so the app does it in a cronjob.
</p>
<p>My biggest annoyance here is that there’s no timestamp on these things better than ‘day’, so you don’t get very good ordering when you combine them later. I could solve this by storing some state myself, remembering the first time I see each new entry, etc, etc, but in practice this falls down very badly because the Armoury is a very unreliable resource. Sometimes you just can’t fetch toons. You have to throttle requests. Just accept that the data isn’t there.
</p>
<p>Anyway, now I have a list of everyone in the guild, and their last 5 achievements (the code will also backfill for the initial load, so you can get everything). It’s pretty trivial building a list of these and outputting Atom or something. I do it using ‘print’ statements, myself, because I’m inherently evil. You can’t deep-link to the achievement itself on the Armoury, so I link to the <a href="http://www.wowhead.com/?achievement=1559">wowhead page</a> for individual achievements.
</p>
<p>Because the Armoury is unreliable, and my script is slow, I don’t use this thing to generate the data on demand. I have a crontab that fetches toons from the armoury every 3 hours. It’s throttled, doens’t try to hit everyone at once, and prioritises people we haven’t fetched in the longest, so it does a reasonable job of keeping up. If it doesn’t explode, it copies the result into the database, and the front end display it. If it <em>does</em> explode, then meh, I’ll try again in an hour. The feed isn’t exactly timely, but we’re not controlling nuclear power stations here, we’re tracking a computer game. It’ll do.
</p>
Shelf2008-01-08T10:26:28Zhttp://jerakeen.org/code/shelf/<p><a href="http://jerakeen.org/code/shelf/"><img src="http://jerakeen.org/files/thumbnail/shelf_trimmed.png" style="border: none"></a></p>
<div style="float: right; text-align: center; padding-right: 60px; padding-bottom: 20px">
<a href="http://jerakeen.org/files/Shelf_0.0.14.zip">
<img src="http://jerakeen.org/files/thumbnail/shelf_icon.png" style="border: none">
</a>
<br>Version 0.0.14
<br>Universal binary
<br>(292k zipped)
<br><a href="https://seatbelt.jerakeen.org/svn/tomi/Projects/Shelf/ChangeLog">Changelog</a>
</div>
<p>Shelf is an app for MacOS that looks at the current foreground application, and tries to figure out if what you’re looking at corresponds to a person in your Address Book. Then it’ll tell you things about them.
</p>
<h3>Using Shelf</h3>
<p>Just run it. It’ll sit in the background, and watch the foreground application. If it can tie something you’re looking at (the current url in your web browser, for instance, or the target of an open chat) to a person in your Address Book, it’ll open a window and show you their name and picture, and it’ll try to fetch <span class="caps">RSS</span> feeds for any URLs in their address card.
</p>
<p>It’s possible that you don’t have a very deep address book (most people just have email addresses, the <span class="caps">URL</span> field is hidden by default in Address Book.app). If you want a demo, just download <a href="http://jerakeen.org/files/Tom%20Insam.vcf">my VCard file</a> and import it. Then when you look at this page Shelf should figure out that you’re looking at me, and show you my recent Flickr photos, blog entries, etc.
</p>
<h3>Getting Shelf</h3>
<p>Download shelf by clicking the icon to the right there. Once installed, Shelf will update itself when there’s a new version available. It requires MacOS 10.5 ‘Leopard’ (there are no plans for a 10.4 version, sorry) and is a Universal Binary.
</p>
<p>Shelf’s <a href="https://jerakeen.org/svn/tomi/Projects/Shelf/">source code is available in subversion</a> if you’re a developer.
</p>
<h3>Other references</h3>
<ul>
<li>
<a href="http://jerakeen.org/blog/2008/01/shelf-context-for-macos/">The original Shelf blog entry / release announcement</a>
</li>
<li>
<a href="http://radar.oreilly.com/archives/2008/01/continuous_cont.html">O’Reilly Radar coverage</a>
</li>
</ul>
<h2>Context</h2>
<p>Shelf can derive context from the following applications:
</p>
<ul>
<li>
Safari - looking at the foreground url, and for microformats in the source of the current page.
</li>
<li>
Firefox / Camino / Opera - looking at the foreground url. No microformat inspection here, alas.
</li>
<li>
Mail.app - From the email address of the sender of the currently selected email.
</li>
<li>
NetNewsWire - From the homepage url of the currently selected feed item, the feed url, and microformats in the <span class="caps">HTML</span> source of the feed entry.
</li>
<li>
Twitterrific - From the homepage or twitter page urls of the currently selected tweet.
</li>
<li>
Adium - From the <span class="caps">IM</span> username of the current conversation.
</li>
<li>
iChat - From the <span class="caps">IM</span> username of the current conversation.
</li>
<li>
Address Book - The currently selected person.
</li>
</ul>
<p>Adding new data sources is very easy.
</p>
<h2>Information</h2>
<p>Shelf displays things about the foreground person, assuming it can find one.
</p>
<ul>
<li>
Basic address book data - name, email address, real-world address, web pages.
</li>
<li>
Current Twitter status.
</li>
<li>
Current location and time according to <a href="http://www.dopplr.com">Dopplr</a>.
</li>
<li>
Last 4 Flickr photos.
</li>
<li>
Recent entries on their <span class="caps">RSS</span> feeds.
</li>
<li>
Recently-played <a href="http://last.fm/">last.fm</a> tracks
</li>
<li>
Various other things
</li>
</ul>
<img src="http://jerakeen.org/files/images/shelf_addressbook.png" style="border: none">
<p>Shelf can only display these things about people if the <span class="caps">URL</span> to their homepage on the service is in their address book record. So for instance, to get Flickr photos visible for a person, put the ‘http://flickr.com/photos/{username}’ <span class="caps">URL</span> into their address book record. Likewise for Dopplr and Twitter homepages.
</p>
<p>If you’re willing to sacrifice a little privacy, Shelf can ask the <a href="http://code.google.com/apis/socialgraph/">Google Social <span class="caps">API</span></a> about the URLs that it sees, and this can make it a lot more intelligent - if the person you’re looking at has a homepage that participates in the open social graph Shelf will be able to find other pages about them and display context from them as well. But be aware that this will send URLs that you look at to Google. This may bother you. But don’t worry - it’s off by default.
</p>
Template::ModTT2000-01-01T12:00:00Zhttp://jerakeen.org/code/mod_tt/
<p>mod_tt is an apache handler that processes Template Toolkit templates natively in the apache server without the configuration overhead of a full mod_perl and Apache::Template install. Template::ModTT (this module) is the perl interface to the mod_tt hander available to you when running under mod_tt.
</p>
<p>There’s a <a href="http://jerakeen.org/files/mod_tt">snapshot tarball available here</a>.
</p>
<p>This is a very early development version. Development is ongoing in <a href="http://jerakeen.org/svn/tomi/Projects/mod_tt/">the <span class="caps">SVN</span> repository</a> - it may even work. It compiles on <em>most</em> things I’ve tried, but I get occasional weird failures, and as you may be able to tell from the module, my C isn’t up to an awful lot. Plus, all documentation everywhere sucks.
</p>
<p>There are some <em>very</em> simple examples in <a href="http://jerakeen.org/svn/tomi/Projects/mod_tt/examples/">examples</a> (that’s a subversion repository, not a working example of mod_tt, by the way)- the only one that’s even slightly interesting will be <a href="http://jerakeen.org/svn/tomi/Projects/mod_tt/examples/cookie.tt">cookie.tt</a> which does very simple cookie getting and setting. More examples will be forthcoming, I just want a release out so I feel that I’m doing something worthwhile here, and hoepfully so people will tell me what i’m doing wrong.
</p>
<h3>Installation</h3>
<p>Standard perl module stuff:
</p>
<pre><code>perl Build.PL
./Build
./Build test
sudo ./Build install
</code></pre><p>Once it’s installed, the following line in httpd.conf somewhere should make things work:
</p>
<pre><code>AddHandler tt-script .tt
</code></pre>
Timelapse2009-03-03T10:47:23Ztag:jerakeen.org,2009:/code/timelapse<p><a href="http://jerakeen.org/code/timelapse/"><img src="http://jerakeen.org/files/thumbnail/url/2a17d8aeae3bc2faf529b91375360ec1_240x180.png" style="border: none"></a></p>
<p>A python app/script for Nokia S60 phones to do time-lapse photography. Very very early days yet.
</p>
<p><span class="caps">TODO</span> (rough first cut)
</p>
<ul>
<li>
more options for photo size
</li>
<li>
create target directory on launch if it doens’t exist
</li>
<li>
error handling
</li>
<li>
upload photos to remote server if there’s network
</li>
<li>
other things
</li>
</ul>