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&#8217;s built on <a href="http://www.djangoproject.com/">Django</a>, and I call this project <code>cougar</code>, for no real&nbsp;reason. </p> <p>It&#8217;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&nbsp;philosophy). </p> <p>The part I&#8217;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&nbsp;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&nbsp;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&#8217;s very easy. But if you really want the code, it&#8217;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&nbsp;you. </p> <p>I might provide help on installing cougar in your particular system, and I might accept patches that improve it, but I&#8217;m a fickle person, and will have changed <span class="caps">CMS</span> systems again in 6 months, so don&#8217;t expect a formally maintained release any time&nbsp;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&nbsp;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&nbsp;seconds. </p> <p>It&#8217;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&#8217;s no reason for it to be written in Python at all, and it&#8217;s <em>far</em> too large as a result, but PyObjC is my &#8216;crazy prototyping&#8217; environment of&nbsp;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&nbsp;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&nbsp;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&#8217;s a universal&nbsp;binary. </p> <p>This is an early first release - it represents about an afternoon&#8217;s work, so unsurprisingly doesn&#8217;t do a lot. But it&#8217;s easily up to dogfood quality, and I now use it in preference to the &#8216;real&#8217; 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&#8217;t gone into any great depth here. As and when I find a file that breaks, or someone can point me at one, I&#8217;ll fix&nbsp;it. </p> <p>Let me know in the comments if there&#8217;s anything else&nbsp;broken. </p> <p>Vague todo&nbsp;list: </p> <ul> <li> When downloading albums, fetch and apply album art automatically (grr emusic for not selling me mp3s with art in&nbsp;them). </li> <li> Fix the track total count part of the <span class="caps">ID3</span> tags, so tracks are &#8216;track 3 of 12&#8217; rather than just &#8216;track&nbsp;3&#8217;. </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&nbsp;at. </li> <li> Any more&nbsp;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&nbsp;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&#8217;t particularly useful, frankly - we&#8217;d rather group by person / machine, and see all the machines on the local network, and the services that they were&nbsp;advertising. </p> <p>It&#8217;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&#8217;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&#8217;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&nbsp;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&#8217;s a bug in 1.2 that makes it very noisy on the console, but it&#8217;ll work&nbsp;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&nbsp;Flame</h3> <ul> <li> <a href="http://2lmc.org/spool/id/4093">the spool that started it&nbsp;all</a> </li> <li> <a href="http://husk.org/apps/flame">the husk.org apps&nbsp;page</a> </li> <li> <a href="http://2lmc.org/spool/id/4691">the launch&nbsp;announcement</a> </li> <li> <a href="http://jerakeen.org/blog/2005/03/09/flame-0-1">my&nbsp;blog</a> </li> <li> <a href="http://husk.org/blog/arch/mutterings_around_a_small_flame.html">paul&#8217;s&nbsp;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> -&nbsp;2006/11/01 </p> <ul> <li> Fixed some bugs where services where being de-duped too&nbsp;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&#8217;t work on anything other than&nbsp;Leopard. </li> </ul> <p>Flame&nbsp;0.2.1 </p> <ul> <li> Added a beautiful icon from Dario&nbsp;Villanueva </li> <li> Flame is now a Universal&nbsp;Binary </li> </ul> <p>Flame&nbsp;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&nbsp;machine. </li> <li> Added a couple more recognised services, mostly to do with the Airport&nbsp;Express. </li> </ul> <p>Flame&nbsp;0.1 </p> <ul> <li> First release. displays hosts on the local network. Not really any &#8216;changes&#8217;,&nbsp;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&#8217;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&#8217;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&#8217;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&nbsp;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&nbsp;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&nbsp;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&#8217;m happy with this mostly because it&#8217;s packagable simply as a cross-platform .jar file that will run happily on Windows, MacOS and linux with no&nbsp;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&nbsp;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&#8217;d expect, it&#8217;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&#8217;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&nbsp;run: </p> <pre><code>$ perl make.pl $ sudo perl make.pl install </code></pre><p>You&#8217;ll need root to install the module, and a working perl to run make.pl. I don&#8217;t use perl for anything clever - I just prefer it to writing makefiles. Once the module is installed, edit your apache config file and&nbsp;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&nbsp;JavaScript. </p> <p>Right now you can&#8217;t do a lot in a script - &#8216;print&#8217; is about it. There&#8217;s a &#8216;request&#8217; 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&#8217;s no access to the local filesystem or any database drivers (SQLite is linked in, and has very limited support, but it&#8217;s not useful yet). It&#8217;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&nbsp;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&#8217;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&#8217;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&nbsp;below. </p> <p>Known users of&nbsp;PythonDaap: </p> <ul> <li> <a href="http://www.fluendo.com/elisa/">Elisa</a> is an OpenGL based cross-platform media center&nbsp;solution </li> <li> <a href="http://fusedaap.sourceforge.net/news/">fusedaap</a> mounts iTunes shares as filesystems under&nbsp;linux </li> <li> <a href="http://lsongs.com/">LSongs</a> - &#8216;The Ultimate All-in-One Digital Music Player for&nbsp;Linux!&#8217; </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>&#8216;s Amarok, but for <span class="caps">GTK</span>+ and written in&nbsp;Python </li> </ul> <p>Known packages of&nbsp;PythonDaap: </p> <ul> <li> <a href="http://packages.debian.org/unstable/python/python-daap">debian packages version&nbsp;0.7</a> </li> <li> <a href="http://syzygy42.tuxfamily.org/">ubuntu packages by Aren&nbsp;Olson</a> </li> <li> <a href="http://packages.ubuntu.com/hardy/source/python-daap">Ubuntu hardy packages&nbsp;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&nbsp;feeds. </p> <p>For what it&#8217;s worth, there&#8217;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&amp;n=unassigned+variable&amp;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&#8217;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&#8217;t get it. Let&#8217;s ignore that. Fake a firefox user agent, and you can fetch lovely <span class="caps">XML</span> documents that describe&nbsp;things! </p> <p>There&#8217;s no &#8216;guild achievement&#8217; 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&#8217;ve tried this on a guild of 350ish&nbsp;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&nbsp;cronjob. </p> <p>My biggest annoyance here is that there&#8217;s no timestamp on these things better than &#8216;day&#8217;, so you don&#8217;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&#8217;t fetch toons. You have to throttle requests. Just accept that the data isn&#8217;t&nbsp;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&#8217;s pretty trivial building a list of these and outputting Atom or something. I do it using &#8216;print&#8217; statements, myself, because I&#8217;m inherently evil. You can&#8217;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&nbsp;achievements. </p> <p>Because the Armoury is unreliable, and my script is slow, I don&#8217;t use this thing to generate the data on demand. I have a crontab that fetches toons from the armoury every 3 hours. It&#8217;s throttled, doens&#8217;t try to hit everyone at once, and prioritises people we haven&#8217;t fetched in the longest, so it does a reasonable job of keeping up. If it doesn&#8217;t explode, it copies the result into the database, and the front end display it. If it <em>does</em> explode, then meh, I&#8217;ll try again in an hour. The feed isn&#8217;t exactly timely, but we&#8217;re not controlling nuclear power stations here, we&#8217;re tracking a computer game. It&#8217;ll&nbsp;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&#8217;re looking at corresponds to a person in your Address Book. Then it&#8217;ll tell you things about&nbsp;them. </p> <h3>Using&nbsp;Shelf</h3> <p>Just run it. It&#8217;ll sit in the background, and watch the foreground application. If it can tie something you&#8217;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&#8217;ll open a window and show you their name and picture, and it&#8217;ll try to fetch <span class="caps">RSS</span> feeds for any URLs in their address&nbsp;card. </p> <p>It&#8217;s possible that you don&#8217;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&#8217;re looking at me, and show you my recent Flickr photos, blog entries,&nbsp;etc. </p> <h3>Getting&nbsp;Shelf</h3> <p>Download shelf by clicking the icon to the right there. Once installed, Shelf will update itself when there&#8217;s a new version available. It requires MacOS 10.5 &#8216;Leopard&#8217; (there are no plans for a 10.4 version, sorry) and is a Universal&nbsp;Binary. </p> <p>Shelf&#8217;s <a href="https://jerakeen.org/svn/tomi/Projects/Shelf/">source code is available in subversion</a> if you&#8217;re a&nbsp;developer. </p> <h3>Other&nbsp;references</h3> <ul> <li> <a href="http://jerakeen.org/blog/2008/01/shelf-context-for-macos/">The original Shelf blog entry / release&nbsp;announcement</a> </li> <li> <a href="http://radar.oreilly.com/archives/2008/01/continuous_cont.html">O&#8217;Reilly Radar&nbsp;coverage</a> </li> </ul> <h2>Context</h2> <p>Shelf can derive context from the following&nbsp;applications: </p> <ul> <li> Safari - looking at the foreground url, and for microformats in the source of the current&nbsp;page. </li> <li> Firefox / Camino / Opera - looking at the foreground url. No microformat inspection here,&nbsp;alas. </li> <li> Mail.app - From the email address of the sender of the currently selected&nbsp;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&nbsp;entry. </li> <li> Twitterrific - From the homepage or twitter page urls of the currently selected&nbsp;tweet. </li> <li> Adium - From the <span class="caps">IM</span> username of the current&nbsp;conversation. </li> <li> iChat - From the <span class="caps">IM</span> username of the current&nbsp;conversation. </li> <li> Address Book - The currently selected&nbsp;person. </li> </ul> <p>Adding new data sources is very&nbsp;easy. </p> <h2>Information</h2> <p>Shelf displays things about the foreground person, assuming it can find&nbsp;one. </p> <ul> <li> Basic address book data - name, email address, real-world address, web&nbsp;pages. </li> <li> Current Twitter&nbsp;status. </li> <li> Current location and time according to <a href="http://www.dopplr.com">Dopplr</a>. </li> <li> Last 4 Flickr&nbsp;photos. </li> <li> Recent entries on their <span class="caps">RSS</span>&nbsp;feeds. </li> <li> Recently-played <a href="http://last.fm/">last.fm</a>&nbsp;tracks </li> <li> Various other&nbsp;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 &#8216;http://flickr.com/photos/{username}&#8217; <span class="caps">URL</span> into their address book record. Likewise for Dopplr and Twitter&nbsp;homepages. </p> <p>If you&#8217;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&#8217;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&#8217;t worry - it&#8217;s off by&nbsp;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&nbsp;mod_tt. </p> <p>There&#8217;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&#8217;ve tried, but I get occasional weird failures, and as you may be able to tell from the module, my C isn&#8217;t up to an awful lot. Plus, all documentation everywhere&nbsp;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&#8217;s a subversion repository, not a working example of mod_tt, by the way)- the only one that&#8217;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&#8217;m doing something worthwhile here, and hoepfully so people will tell me what i&#8217;m doing&nbsp;wrong. </p> <h3>Installation</h3> <p>Standard perl module&nbsp;stuff: </p> <pre><code>perl Build.PL ./Build ./Build test sudo ./Build install </code></pre><p>Once it&#8217;s installed, the following line in httpd.conf somewhere should make things&nbsp;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&nbsp;yet. </p> <p><span class="caps">TODO</span> (rough first&nbsp;cut) </p> <ul> <li> more options for photo&nbsp;size </li> <li> create target directory on launch if it doens&#8217;t&nbsp;exist </li> <li> error&nbsp;handling </li> <li> upload photos to remote server if there&#8217;s&nbsp;network </li> <li> other&nbsp;things </li> </ul>