[Valid RSS] This is a valid RSS feed.


This feed is valid, but interoperability with the widest range of feed readers could be improved by implementing the following recommendations.


  1. <rss version="2.0"><channel><title>THOK Python Projects Aggregation</title><description>&lt;p&gt;All projects under &lt;a href=""&gt;;/a&gt; unified into a
  2. single common feed.  (Individual projects all have their own distinct
  3. feeds as well.)&lt;/p&gt;</description><link></link><item><title>exif: Tue Dec  2 22:22:00 2014</title><description>&lt;p&gt;Just noticed an actual "stuttering" repeat upload caused by the &lt;code&gt;flickr&lt;/code&gt;/&lt;code&gt;flickd&lt;/code&gt; processing mishandling duplicated file (one md5sum, 3 "file" names and it would re-upload the last one but tag the first one as &lt;code&gt;flickd&lt;/code&gt;...) After fixing the immediate problem by hand (deleting the duplicates on Flickr itself, then moving the &lt;code&gt;flickd&lt;/code&gt; tags around with emacs) I tried to measure the scope of the problem:&lt;/p&gt;
  4. &lt;pre class="codehilite"&gt;&lt;code&gt;import kimdaba_album
  5. album = kimdaba_album.parse(kimdaba_album.kimdaba_default_album())
  6. km = {}
  7. for img in album.findall("images/image"):
  8.  mm = img.get("md5sum")
  9.  ff = img.get("file")
  10.  km[mm] = km.get(mm, []) + [ff]
  11. print len([k for k,v in km.items() if len(v) &amp;gt; 1])&lt;/code&gt;&lt;/pre&gt;
  14. &lt;p&gt;Turns out there are 289 distinct images that each have multiple paths - one of which is the less-surprising 18 zero-length files, primarily from old cellphones, one is the 3-way that caused the problem, and the rest are duplicates of various kinds.  Not &lt;em&gt;much&lt;/em&gt; of a mess given that there are 131446 entries total, but it still caused a visible problem and needs fixing.&lt;/p&gt;
  16. </description><guid isPermaLink="true"></guid><pubDate>Wed, 03 Dec 2014 08:22:00 GMT</pubDate></item><item><title>Yay, youtube takes care of this now</title><description>&lt;p&gt;In 2012, Google
  17. &lt;a href=""&gt;added video stabilization to youtube&lt;/a&gt;
  18. under &lt;code&gt;Edit -&amp;gt; Enhancements&lt;/code&gt; so I fed it the hawk video and applied it;
  19. &lt;a href=""&gt;;/a&gt; shows that it works quite
  20. nicely, and saves me the effort of doing any packaging work on this
  21. code.  (They've also included much more advanced techniques like
  22. &lt;a href=""&gt;Rolling Shutter removal&lt;/a&gt;
  23. which I hadn't even considered as a solvable problem.)&lt;/p&gt;
  25. </description><guid isPermaLink="true"></guid><pubDate>Mon, 17 Feb 2014 15:27:00 GMT</pubDate></item><item><title>newthing: Mon Aug  5 12:34:00 2013</title><description>&lt;p&gt;A year later and &lt;em&gt;that&lt;/em&gt; clearly worked well.  Let's try again, maybe with something simple like&lt;/p&gt;
  26. &lt;ul&gt;
  27. &lt;li&gt;
  28. &lt;code&gt;Makefile&lt;/code&gt;s (gnu is fine, esp. with guile support :-)&lt;/li&gt;
  29. &lt;li&gt;split &lt;code&gt;;/code&gt; into snippets&lt;/li&gt;
  30. &lt;li&gt;basic styling, even if not bootstrap...&lt;/li&gt;
  31. &lt;/ul&gt;
  32. &lt;p&gt;(In practice, it turns out that getting the &lt;em&gt;existing&lt;/em&gt; tools running again under Raring has taken a couple of evenings, but at least it is producing output, so maybe I shouldn't be even that ambitious :-)&lt;/p&gt;
  34. </description><guid isPermaLink="true"></guid><pubDate>Mon, 05 Aug 2013 21:34:00 GMT</pubDate></item><item><title>zephyr_page: Sat Oct 15 01:47:00 2011</title><description>&lt;p&gt;&lt;code&gt;;/code&gt; has been vaguely useful, but the web interface didn't really go anywhere, and I mostly use &lt;code&gt;barnowl&lt;/code&gt; as a backlog reader (along with my traditional logger.) Recent thoughts inspired a new architecture:&lt;/p&gt;
  35. &lt;ul&gt;
  36. &lt;li&gt;
  37. &lt;code&gt;couchdb&lt;/code&gt; holding zephyrgrams&lt;ul&gt;
  38. &lt;li&gt;so split out the subscribing part of &lt;code&gt;;/code&gt; into a "&lt;code&gt;tzc&lt;/code&gt; with JSON instead of S-expressions"&lt;/li&gt;
  39. &lt;li&gt;then we can run multiple subscribers, letting couchdb eliminate duplicates&lt;/li&gt;
  40. &lt;li&gt;then a &lt;code&gt;barnowl&lt;/code&gt; backend can be a couchdb client&lt;/li&gt;
  41. &lt;li&gt;continuity over upgrades is handled by extra &lt;code&gt;couchdb&lt;/code&gt; instances, &lt;em&gt;and&lt;/em&gt; extra subscribers&lt;/li&gt;
  42. &lt;li&gt;same db can hold "read this" and "liked/saved this" info&lt;/li&gt;
  43. &lt;li&gt;an IMAP interface can work with all that, allowing K-9 to be a mobile client...&lt;/li&gt;
  44. &lt;li&gt;a JSON interface to the couchdb can be the "remote" part, either by getting a backlog stream from the dbs, or looking at a freshly-instantiated local mirror&lt;/li&gt;
  45. &lt;/ul&gt;
  46. &lt;/li&gt;
  47. &lt;/ul&gt;
  49. </description><guid isPermaLink="true"></guid><pubDate>Sat, 15 Oct 2011 10:47:00 GMT</pubDate></item><item><title>toodledo: Sat Jan 29 02:22:00 2011</title><description>&lt;p&gt;While I still have hundreds of personal todo items filed in &lt;code&gt;hiveminder&lt;/code&gt;, the exposed-perl-guts API has kept me from getting very far with my own client code - and the limited number of other non-web clients suggests that I'm not alone in this.  Looking for other apps that I can cleanly use on my (Android) phone, and after some failures with &lt;code&gt;RememberTheMilk&lt;/code&gt; (in particular, somehow tasks filed from clients were only visible to other clients, not on the website) and some uninspired efforts at writing my own, I came across ToodleDo; there were multiple iOS and Android clients, several of which took the approach of doing their own "model" for tasks, but also pushing them to ToodleDo, rather than being specifically ToodleDo clients.  ToodleDo's API docs seem to encourage this some by talking explicitly about synchronization.&lt;/p&gt;
  50. &lt;p&gt;Turns out that once you get past the slightly odd (and not particularly secure) ToodleDo authentication step, you can write commandline apps for it using &lt;code&gt;curl&lt;/code&gt; and &lt;code&gt;xmlstarlet&lt;/code&gt; - I don't recommend it, but &lt;/p&gt;
  51. &lt;pre class="codehilite"&gt;&lt;code&gt;curl -s "&amp;lt;;key=$short_term_key"&amp;gt; | xmlstarlet sel -T -t -m contexts/context -s T:-:- '*' -v 'text()' -n&lt;/code&gt;&lt;/pre&gt;
  54. &lt;p&gt;did actually work.  Of course I went from there directly to python, again getting distracted with messing around with the authentication steps... finally I took another look and found &lt;code&gt;poodledo&lt;/code&gt;, a simple python API wrapper that is unmaintained but functional, and since one of my left-over resolutions from 2009 was to put more effort into using other people's code instead of writing it from scratch, I took a shot at it.&lt;/p&gt;
  55. &lt;p&gt;This turns out to work just fine, at least for various filtered versions of &lt;code&gt;getTasks&lt;/code&gt;. A simple task-adder is next, probably similar to my hiveminder &lt;code&gt;;/code&gt; tool.  Turns out I went a little overboard with a class that stashes key-value-expiration into a sqlite db in one's homedir, for things like remembering the username, password, and short-term api key (4 hour expiration) - that's something that is common enough that there should be &lt;em&gt;some&lt;/em&gt; existing version to use, but I'm not sure what to actually call it so I can search for it :-)  I suppose the right answer is to store the password with &lt;code&gt;python-keyring&lt;/code&gt; but that still leaves a host of other user-specific data to store, so it doesn't actually simplify the code at all to use it.&lt;/p&gt;
  56. &lt;p&gt;(Not actually posting the code here until I implement a few more features and actually use them for a bit, but since I was checking it in, I figured I'd blog about it a bit too.)&lt;/p&gt;
  57. &lt;ul&gt;
  58. &lt;li&gt;hiveminder &lt;a href=""&gt;;/a&gt;
  59. &lt;/li&gt;
  60. &lt;li&gt;iMinder &lt;a href=""&gt;;/a&gt; (but note that with 700+ tasks, it falls over pretty quickly on the iPad)&lt;/li&gt;
  61. &lt;li&gt;RememberTheMilk &lt;a href=""&gt;;/a&gt;
  62. &lt;/li&gt;
  63. &lt;li&gt;ToodleDo &lt;a href=""&gt;;/a&gt;
  64. &lt;/li&gt;
  65. &lt;li&gt;ToodleDo API &lt;a href=""&gt;;/a&gt;
  66. &lt;/li&gt;
  67. &lt;li&gt;poodledo python wrapper &lt;a href=""&gt;;/a&gt;
  68. &lt;/li&gt;
  69. &lt;/ul&gt;
  71. </description><guid isPermaLink="true"></guid><pubDate>Sat, 29 Jan 2011 12:22:00 GMT</pubDate></item><item><title>usb: Thu Oct  8 00:42:00 2009</title><description>&lt;p&gt;A few years back I picked up a Radio Shack USB Electronic Scale, on clearance, on the theory that it might work someday - or else I'd get at least that much value out of taking it apart...&lt;/p&gt;
  72. &lt;p&gt;I found it on a shelf today, plugged it in, did a google search for the USB id, and found user-space code that talked to &lt;code&gt;hiddev0&lt;/code&gt; and turned the events into weights.  As much for the practice as anything, I converted it to python - handling &lt;code&gt;ioctl&lt;/code&gt;s isn't particularly tricky, but it took some poking to determine that the event values were sign-extended bytes, and the multiple reassignments to different variables in the C code actually &lt;em&gt;mattered&lt;/em&gt;.&lt;/p&gt;
  73. &lt;ul&gt;
  74. &lt;li&gt;forum thread about the scale &lt;a href=""&gt;;/a&gt;
  75. &lt;/li&gt;
  76. &lt;li&gt;bkubes C code &lt;a href=""&gt;;/a&gt;
  77. &lt;/li&gt;
  78. &lt;li&gt;my python version &lt;a href=""&gt;;/a&gt;
  79. &lt;/li&gt;
  80. &lt;/ul&gt;
  81. &lt;p&gt;The python code probably needs to run as &lt;code&gt;root&lt;/code&gt; unless you do some &lt;code&gt;udev&lt;/code&gt; tweaking; fire it up with the scale empty, when you get the prompt, put something on it, hit enter, and read the weight in grams.  Not terribly exciting... but the next step might be to keep reading until the new value stabilizes.  Ultimately I'd like to put this in the kitchen, maybe hooked to a chumby, with code that lets you set a target weight, then beeps in one tone when you get close, and another when you hit the actual value (or something more sophisticated.)  Basically to let me look at what I'm &lt;em&gt;pouring&lt;/em&gt; rather than at the display... could also do multiple targets for mixing, have it even "speak" the next item to add (or for things that are strictly proportional, adjust later measurements based on the initial one, though that seems like it might not be that useful compared to just being accurate.)&lt;/p&gt;
  82. &lt;p&gt;&lt;em&gt;note added 20140224&lt;/em&gt; I wonder if the app attached to the &lt;a href=""&gt;Adaptics&lt;/a&gt; "Drop" connected-scale will include that, it at least does &lt;a href=""&gt;sophisticated recipe integration...&lt;/a&gt;&lt;/p&gt;
  84. </description><guid isPermaLink="true"></guid><pubDate>Thu, 08 Oct 2009 09:42:00 GMT</pubDate></item><item><title>ztwit: Wed Dec 10 00:15:00 2008</title><description>&lt;p&gt;Got one negative comment about the flickr updates, decided to interpret it as "make them more interesting" rather than actually &lt;em&gt;stopping&lt;/em&gt; them (after all, playing with the tools is more than half of what this is about - I'm not trying to find strangers here, or anything...)&lt;/p&gt;
  85. &lt;p&gt;The flickr updates now include as many tags as they can, sorted by popularity and length, so the latest one says &lt;code&gt;[Concord,Great Meadows National Wildlife Refuge,Massachusetts,ice,sunshine,winter,marsh...]&lt;/code&gt; which perhaps gives the reader an idea of what pictures they'll find.  (Granted, most of my readers are local, so knowing me and knowing the weather is probably sufficient to guess :-)  Not realizing that python's sort is stable in 2.4 and later, I counted tags and used a key of &lt;code&gt;tag_popularity[tag] - 1/float(len(tag))&lt;/code&gt; (the value itself is the major key, putting everything into integer buckets, and the tag length reduces that - the shorter the tag, the more it reduces, so the closer to the start of the list of tags that length, but bounded between 1/1 and 1/longest-tag-len, approaching zero, so the values fit.  Of course we want high popularity first, so this is a reverse sort, so we're actually favoring longer tags, based on them likely having more inherent detail.)  This is what we call "excessively clever" - given a stable sort, we could just sort the list twice:&lt;/p&gt;
  86. &lt;pre class="codehilite"&gt;&lt;code&gt;tags = sorted(tag_popularity, key=len)
  87. tags = sorted(tags, key=tag_popularity.__getitem__)&lt;/code&gt;&lt;/pre&gt;
  90. &lt;p&gt;and then &lt;code&gt;reverse&lt;/code&gt; the whole thing.  (Notice that sort-stability is the place where &lt;code&gt;sorted(reverse=True)&lt;/code&gt; is different from &lt;code&gt;reversed(sorted())&lt;/code&gt; - the former reverses the direction of the current key, but preserves the order of things that were equal; the later reverses everything.)&lt;/p&gt;
  91. &lt;p&gt;Future directions could include&lt;/p&gt;
  92. &lt;ul&gt;
  93. &lt;li&gt;saving 18 characters by shortening the reference (oh, I can save 11 of those just by using flickr's own shortcuts, &lt;em&gt;done&lt;/em&gt;)&lt;/li&gt;
  94. &lt;li&gt;keeping track of &lt;em&gt;all&lt;/em&gt; tags and using global popularity (to support expressing both "what this set is mostly about" and "what distinct cool things are in here" at the same time, chopping out the middle...)  This may have to wait until I re-unify all of my photo data sets into one master gallery, though.  (Cheap storage scaling may make that happen sooner than later, even if I do take over 20G/year of pictures &lt;em&gt;now&lt;/em&gt;...)&lt;/li&gt;
  95. &lt;/ul&gt;
  97. </description><guid isPermaLink="true"></guid><pubDate>Wed, 10 Dec 2008 10:15:00 GMT</pubDate></item><item><title>blogthing: Wed Dec 10 00:02:00 2008</title><description>&lt;p&gt;I've gone another year without significant change to the blogging
  98. software; I did just add &lt;a href=""&gt;;/a&gt; pinging to go along
  99. with the year-old google-pinging support (embarassingly, the only
  100. difference between the two is the noise they return on success, and I
  101. just print that anyway; I was just reminded because it showed up on
  102. &lt;a href=""&gt;;/a&gt; recently.)&lt;/p&gt;
  103. &lt;p&gt;I have been putting a little time into using Sphinx to build one of my
  104. documentation/ranting sites, though, because Sphinx sites actually
  105. look pretty nice as-is, and maybe it's time to clean up the look
  106. around here a bit (especially code display.)  It looks like I'll be
  107. able to use the existing parsers to do at least a rough draft
  108. automatic conversion to RST, which is nice - though I'm seriously
  109. considering WikiCreole as well, it looks like RST still wins on tools.&lt;/p&gt;
  110. &lt;p&gt;Footnotes:&lt;/p&gt;
  111. &lt;ul&gt;
  112. &lt;li&gt;google api &lt;a href=""&gt;;/a&gt;
  113. &lt;/li&gt;
  114. &lt;li&gt;verisign/ api &lt;a href=""&gt;;/a&gt;
  115. &lt;/li&gt;
  116. &lt;li&gt;sphinx &lt;a href=""&gt;;/a&gt;
  117. &lt;/li&gt;
  118. &lt;li&gt;RST - reStructured Text - &lt;a href=""&gt;;/a&gt;
  119. &lt;/li&gt;
  120. &lt;li&gt;WikiCreole &lt;a href=""&gt;;/a&gt;
  121. &lt;/li&gt;
  122. &lt;/ul&gt;
  124. </description><guid isPermaLink="true"></guid><pubDate>Wed, 10 Dec 2008 10:02:00 GMT</pubDate></item><item><title>local_tasks: Wed Dec  3 02:03:00 2008</title><description>&lt;p&gt;Need a local task manager, to handle work-paranoia about external data leaks.  It should still have cheap external &lt;em&gt;inputs&lt;/em&gt;, as long as reading it requires "internal" access.&lt;/p&gt;
  125. &lt;p&gt;Hiveminder of course provides a lot of inspiration; key differences are&lt;/p&gt;
  126. &lt;ul&gt;
  127. &lt;li&gt;should tie directly in to existing intranet systems (RT, viewsvn, moinmoin, news) via links&lt;/li&gt;
  128. &lt;li&gt;should be faster in the face of large numbers of items&lt;/li&gt;
  129. &lt;/ul&gt;
  130. &lt;p&gt;Strictly speaking it doesn't need a web interface, though that'll make it easier to spread it to other people.&lt;/p&gt;
  131. &lt;p&gt;I considered just making it a roundup instance, but I'm not sure that actually buys us anything - &lt;code&gt;local_task&lt;/code&gt; doesn't even need to be multi-user, so much of the infrastructure goes away; it probably doesn't need more than basic locking...&lt;/p&gt;
  133. </description><guid isPermaLink="true"></guid><pubDate>Wed, 03 Dec 2008 12:03:00 GMT</pubDate></item><item><title>thokalbum: Sun Sep 14 23:46:00 2008</title><description>&lt;p&gt;Realized when half-awake this morning that the album-search cache was wrong at an entirely different level - reloading the album needs to invalidate all prior searches, where instead the code was just reloading the one that was in progress when we noticed the base album was stale.  This is also the first hint that, at 900 lines of code, I already need bugtracking; given my offline working mode, I should probably look at SD - having a bug list that can be checked in with the code makes a lot of sense, especially if it still supports real management tools and isn't just a free form list.&lt;/p&gt;
  134. &lt;p&gt;Pushed the change out as 0.2a after testing.  (Still needs to be made "pure functional with caching" to eliminate some other rarely-seen problems.  Also need to think about adding this album to nagaina monitoring...)&lt;/p&gt;
  135. &lt;p&gt;Footnotes: &lt;/p&gt;
  136. &lt;ul&gt;
  137. &lt;li&gt;sd syncable bug tracking &lt;a href=""&gt;;/a&gt;
  138. &lt;/li&gt;
  139. &lt;li&gt;nagaina &lt;a href=""&gt;;/a&gt;
  140. &lt;/li&gt;
  141. &lt;/ul&gt;
  143. </description><guid isPermaLink="true"></guid><pubDate>Mon, 15 Sep 2008 08:46:00 GMT</pubDate></item><item><title>vernier: Sat Mar 29 00:31:00 2008</title><description>&lt;p&gt;Thanks to Federico Grau (for going back and forth with Vernier) for
  144. finding a calibration mechanism, but also for noting that Greg Kroah
  145. Hartman's tutorial and example code (in particular, the user-space
  146. &lt;code&gt;get_temp&lt;/code&gt; wrapper) actually multiplies by the cryptic-looking
  147. value 0.0078125 to get Celsius values.&lt;/p&gt;
  148. &lt;p&gt;Thanks also to &lt;code&gt;johnl&lt;/code&gt; for pointing out that his device was
  149. calibrated in units of 128ths of a degree, instead of 100ths; when he
  150. pointed that out, I went back and looked at the cryptic-looking
  151. number, and realized that my "computational numerology" skills had
  152. failed me - 0.0078125 &lt;em&gt;is&lt;/em&gt; 1/128 (my original 1/100 was an entirely
  153. unjustified guess.)&lt;/p&gt;
  154. &lt;p&gt;(Also, thanks to Dave Vernier for his feedback, which hasn't yet been
  155. incorporated into the code - that's right, Vernier isn't just a clever
  156. name for a measurement company, it's an actual person :-)&lt;/p&gt;
  157. &lt;p&gt;Footnotes:&lt;/p&gt;
  158. &lt;ul&gt;
  159. &lt;li&gt;"Stainless Steel Temperature Probe (Order Code TMP-BTA)"  &lt;a href=""&gt;;/a&gt;
  160. &lt;/li&gt;
  161. &lt;li&gt;Greg Kroah-Hartman's driver tutorial &lt;a href=";amp;do=get&amp;amp;target=celf_2006_tutorial.pdf"&gt;;amp;do=get&amp;amp;target=celf_2006_tutorial.pdf&lt;/a&gt;
  162. &lt;/li&gt;
  163. &lt;li&gt;ldusb reader with the (now-obvious) correction &lt;a href=""&gt;;/a&gt;
  164. &lt;/li&gt;
  165. &lt;/ul&gt;
  167. </description><guid isPermaLink="true"></guid><pubDate>Sat, 29 Mar 2008 09:31:00 GMT</pubDate></item><item><title>pyfox: Wed Mar 26 22:46:00 2008</title><description>&lt;p&gt;Footnotes:&lt;/p&gt;
  168. &lt;ul&gt;
  169. &lt;li&gt;
  170. &lt;a href=""&gt;;/a&gt;&lt;ul&gt;
  171. &lt;li&gt;assumes you've read &lt;a href=""&gt;;/a&gt;
  172. &lt;/li&gt;
  173. &lt;/ul&gt;
  174. &lt;/li&gt;
  175. &lt;li&gt;all of the book reviews point to &lt;a href=""&gt;;/a&gt;
  176. &lt;/li&gt;
  177. &lt;/ul&gt;
  179. </description><guid isPermaLink="true"></guid><pubDate>Thu, 27 Mar 2008 07:46:00 GMT</pubDate></item><item><title>usgs: Thu Mar 20 00:33:00 2008</title><description>&lt;p&gt;As part of the &lt;code&gt;libremap&lt;/code&gt; project, the entire 24k scale USGS quads were
  180. acquired and made available on &lt;code&gt;;/code&gt; (by gathering donations for
  181. a complete set of media.)&lt;/p&gt;
  182. &lt;p&gt;The top level "collection page" (&lt;code&gt;maps_usgs&lt;/code&gt;) has links to individual
  183. states (like &lt;code&gt;usgs_ma&lt;/code&gt;.) These then have "this just in" links (like
  184. &lt;code&gt;usgs_drg_ma_41070_e8&lt;/code&gt;) which are detail pages, with text metadata, xml
  185. metadata, &lt;code&gt;tfw&lt;/code&gt; files (georeferences) and the actual tif files.&lt;/p&gt;
  186. &lt;ul&gt;
  187. &lt;li&gt;the project &lt;a href=""&gt;;/a&gt;
  188. &lt;/li&gt;
  189. &lt;li&gt;the published collection page &lt;a href=""&gt;;/a&gt;
  190. &lt;/li&gt;
  191. &lt;li&gt;MA &lt;a href=""&gt;;/a&gt;
  192. &lt;/li&gt;
  193. &lt;li&gt;selected MA map &lt;a href=""&gt;;/a&gt;
  194. &lt;/li&gt;
  195. &lt;/ul&gt;
  196. &lt;p&gt;It may be more useful to use a collection search, and walk the "next"
  197. links, once we have the list of collection names.&lt;/p&gt;
  198. &lt;ul&gt;
  199. &lt;li&gt;&lt;a href=""&gt;;/a&gt;&lt;/li&gt;
  200. &lt;li&gt;&lt;a href=""&gt;;/a&gt;&lt;/li&gt;
  201. &lt;/ul&gt;
  203. </description><guid isPermaLink="true"></guid><pubDate>Thu, 20 Mar 2008 09:33:00 GMT</pubDate></item><item><title>toys: Tue Feb 26 01:20:00 2008</title><description>&lt;p&gt;&lt;a href=""&gt;;/a&gt; is an exploration of words with ambiguous T9 (phone
  204. text interface) encodings.  The interesting bit is the scaling
  205. issue... or lack of one: it handled a 230K wordlist, producing 10k
  206. result sets, in about 30 seconds... on an EEEpc.  Completely naive
  207. implementation, no optimization (and thus no &lt;em&gt;wasted&lt;/em&gt; optimization :-)
  208. I did use &lt;code&gt;string.maketrans&lt;/code&gt; and &lt;code&gt;string.translate&lt;/code&gt; but that
  209. was more because I'd used them before and they're actually a pretty
  210. natural fit for this task.  (I did switch from lists to sets, but that
  211. wasn't performance-related either - the wordlist I was working from
  212. had a variety of entries that weren't unique when downcased, and it
  213. didn't occur to me to just use &lt;code&gt;sort -fu&lt;/code&gt; on it.)&lt;/p&gt;
  214. &lt;p&gt;Footnotes:&lt;/p&gt;
  215. &lt;ul&gt;
  216. &lt;li&gt;T9 appears to be a trademark of Nuance Communications, Inc. &lt;a href=""&gt;;/a&gt;
  217. &lt;/li&gt;
  218. &lt;li&gt;The specific EEEpc tested is a 900mhz celeron M with 1G of useful RAM.&lt;/li&gt;
  219. &lt;/ul&gt;
  221. </description><guid isPermaLink="true"></guid><pubDate>Tue, 26 Feb 2008 11:20:00 GMT</pubDate></item><item><title>hm: Sun Feb 24 20:46:00 2008</title><description>&lt;p&gt;Minor fixes to &lt;a href=""&gt;;/a&gt; today;&lt;/p&gt;
  222. &lt;ul&gt;
  223. &lt;li&gt;broken return-value handling in &lt;code&gt;but_first&lt;/code&gt;
  224. &lt;/li&gt;
  225. &lt;li&gt;
  226. &lt;code&gt;list&lt;/code&gt; didn't report errors (&lt;code&gt;;/code&gt; has the same bug, patch sent upstream)&lt;/li&gt;
  227. &lt;li&gt;improved &lt;code&gt;sid&lt;/code&gt;-cookie handling&lt;/li&gt;
  228. &lt;/ul&gt;
  229. &lt;p&gt;(I'm using defer-until-task enough that I should make it an actual subcommand :-)&lt;/p&gt;
  231. </description><guid isPermaLink="true"></guid><pubDate>Mon, 25 Feb 2008 06:46:00 GMT</pubDate></item><item><title>calendar: Tue Jan 29 02:36:00 2008</title><description>&lt;p&gt;&lt;code&gt;;/code&gt; might be a better answer to all of this.  See also &lt;code&gt;stfl&lt;/code&gt;.&lt;/p&gt;
  233. </description><guid isPermaLink="true"></guid><pubDate>Tue, 29 Jan 2008 12:36:00 GMT</pubDate></item><item><title>xscreensaver: Mon Jan 21 00:40:00 2008</title><description>&lt;p&gt;New project space for xscreensaver modules in python.  The most recent
  234. experiments have been in the area of vector text;
  235. &lt;a href=""&gt;;/a&gt; isn't much to look at, and fairly retro,
  236. but it has a compact notation for pseudo-multi-segment characters and
  237. can draw a randomly selected word across the top of the screen.  Not
  238. exciting, just another piece (and I may replace it with real text with
  239. fonts later.)&lt;/p&gt;
  240. &lt;p&gt;One interesting note: the version of python-xlib I have has a typo, a
  241. call to &lt;code&gt;PolSegment&lt;/code&gt; instead of &lt;code&gt;PolySegment&lt;/code&gt;.  Fixed on
  242. sourceforge... back in 2003 :-) but the one in Debian didn't get
  243. updated until April 2007 (post-etch.)  If you have 0.12-5.1, read the
  244. comments in &lt;a href=""&gt;;/a&gt; for details, or just make the
  245. obvious change.&lt;/p&gt;
  246. &lt;p&gt;Footnotes:&lt;/p&gt;
  247. &lt;ul&gt;
  248. &lt;li&gt;debian update to &lt;code&gt;python-xlib&lt;/code&gt; &lt;a href=""&gt;;/a&gt;
  249. &lt;/li&gt;
  250. &lt;/ul&gt;
  252. </description><guid isPermaLink="true"></guid><pubDate>Mon, 21 Jan 2008 10:40:00 GMT</pubDate></item><item><title>Mon Jan 14 22:47:00 2008</title><description>&lt;p /&gt;
  253. &lt;p&gt;The README-blog has enough content that it is starting to pick up
  254. traffic about random topics, even with only email and zephyr
  255. backchannels.  femtocomment got sidetracked into being an OpenID
  256. playground, which made sense a year ago, but looking at
  257. &lt;a href=""&gt;;/a&gt; today, it's a lot more real, and I should start
  258. focusing on the &lt;i&gt;comment&lt;/i&gt; side of the story again.&lt;/p&gt;
  259. &lt;p&gt;(I'll probably start with something that works off of a simple
  260. hand-set cookie just to get it off the ground, but that's not
  261. inconsistent with having an OpenID interface, it's just a shortcut
  262. path.)&lt;/p&gt;
  263. &lt;h3&gt;Inputs:&lt;/h3&gt;
  264. &lt;ul&gt;&lt;li&gt; the comment itself&lt;/li&gt;&lt;li&gt; the authentication metadata&lt;/li&gt;&lt;li&gt; the context of the comment&lt;/li&gt;&lt;ul&gt;&lt;li&gt; replying to what posting&lt;/li&gt;&lt;li&gt; (later) replying to what comment&lt;/li&gt;&lt;li&gt; when&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;
  265. &lt;p /&gt;
  266. &lt;h3&gt;Outputs:&lt;/h3&gt;
  267. &lt;ul&gt;&lt;li&gt; rendering of comments (threads) on each topic page&lt;/li&gt;&lt;li&gt; global comment-review page&lt;/li&gt;&lt;ul&gt;&lt;li&gt; site-wide, for the administrator (me)&lt;/li&gt;&lt;li&gt; comment deletion&lt;/li&gt;&lt;li&gt; cookie revocation / (later) id blocking&lt;/li&gt;&lt;/ul&gt;&lt;li&gt; (later) RSS feeds for comment threads you're in&lt;/li&gt;&lt;li&gt; (later) email for comments&lt;/li&gt;&lt;/ul&gt;
  268. &lt;p /&gt;
  269. &lt;h3&gt;Constraints:&lt;/h3&gt;
  270. &lt;ul&gt;&lt;li&gt; Can't be generated offline the way the blog is&lt;/li&gt;&lt;ul&gt;&lt;li&gt; README-blog can insert a "talk to the service" bit, though&lt;/li&gt;&lt;li&gt; maybe README-blog can pull static copies of threads, so the service bit is only the freshest stuff?&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;
  271. &lt;p /&gt;
  272. &lt;p&gt;This is probably enough to start slinging bits around and see what it
  273. looks like :-)&lt;/p&gt;
  274. &lt;h3&gt;Footnotes:&lt;/h3&gt;
  275. &lt;ul&gt;&lt;li&gt; OpenID DevCamp &lt;a href=""&gt;;/a&gt;&lt;/li&gt;&lt;li&gt; OpenID standards &lt;a href=""&gt;;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description><guid isPermaLink="true"></guid><pubDate>Tue, 15 Jan 2008 03:47:00 GMT</pubDate></item><item><title>meterstone: Mon Dec  3 03:16:00 2007</title><description>&lt;p&gt;Codemonth is over, and while I didn't get as much done as I'd hoped, I
  276. did make some real progress... and while stuffing more software into
  277. the EEEpc and configuring it has been a major distraction, it just now
  278. gave something back - turns out that there &lt;em&gt;is&lt;/em&gt; a useful outline
  279. editor in debian after all, called &lt;code&gt;treeline&lt;/code&gt; (found during a
  280. mis-aimed &lt;code&gt;apt-cache search&lt;/code&gt; for "python doc".)  It's an outline
  281. editor that can make a fair guess at arbitrary XML files; it loaded
  282. meterstone's one sample file immediately - and was able to "export" it
  283. back (as "Generic" XML) to a file that meterstone could read
  284. (treeline's save format is somewhat different, though.)&lt;/p&gt;
  285. &lt;p&gt;A related search also turned up &lt;code&gt;tcm&lt;/code&gt;, the "Toolkit for Conceptual
  286. Modeling", which looks like it's trying to cover what would be the
  287. overall task breakdown part problem in more detail, without actually
  288. looking at estimation at all.  It's also a &lt;em&gt;very&lt;/em&gt; retro-looking
  289. &lt;code&gt;lesstif&lt;/code&gt; app, which apparently hasn't been touched since 2003, so
  290. I'm not sure it will actually help, but it seemed worth noting.&lt;/p&gt;
  291. &lt;p&gt;Footnotes:&lt;/p&gt;
  292. &lt;ul&gt;
  293. &lt;li&gt;codemonth &lt;a href=""&gt;;/a&gt;
  294. &lt;/li&gt;
  295. &lt;li&gt;treeline &lt;a href=""&gt;;/a&gt;
  296. &lt;/li&gt;
  297. &lt;li&gt;tcm &lt;a href=""&gt;;/a&gt;
  298. &lt;/li&gt;
  299. &lt;/ul&gt;
  301. </description><guid isPermaLink="true"></guid><pubDate>Mon, 03 Dec 2007 13:16:00 GMT</pubDate></item><item><title>krbvert: Sat Nov  3 23:55:00 2007</title><description>&lt;p&gt;I gave in and built my own &lt;code&gt;SLAB&lt;/code&gt; kernel and modules; I'm not too
  302. happy with the result (suspend works but I've had some lockups that
  303. I'm blaming the video driver for for now) but I'm going to move
  304. forward with it anyway.&lt;/p&gt;
  305. &lt;p&gt;Had a near miss with noticing that Gutsy's &lt;code&gt;ssh&lt;/code&gt; supports setting
  306. &lt;code&gt;GSSAPITrustDns=no&lt;/code&gt; but the documentation points out that this
  307. just means passing the value &lt;em&gt;to&lt;/em&gt; GSSAPI... which then goes back out
  308. to DNS to (mis)canonicalize it anyway, which misses the point, and
  309. lets me get back to work on this project :-)&lt;/p&gt;
  310. &lt;p&gt;A bunch of grinding, and discovering the need to copy the &lt;code&gt;struct
  311. addrinfo&lt;/code&gt; &lt;em&gt;and&lt;/em&gt; the contained &lt;code&gt;ai_addr&lt;/code&gt; in the cache, and I've got a
  312. successful, if crude, tool...&lt;/p&gt;
  313. &lt;p&gt;Given &lt;code&gt;strdup&lt;/code&gt; I'm sort of surprised not to find a corresponding
  314. &lt;code&gt;memdup&lt;/code&gt;, so I put one in.  (The code would be more readable with
  315. a gnu-style &lt;code&gt;xstrdup&lt;/code&gt; and &lt;code&gt;xmemdup&lt;/code&gt; so maybe I'll add those
  316. later; for now the debugging code still gets in the way...)&lt;/p&gt;
  317. &lt;p&gt;Current state: grabs the IPv4 address that the first &lt;code&gt;getaddrinfo&lt;/code&gt;
  318. call returns, as it goes by, and saves it; when &lt;code&gt;getnameinfo&lt;/code&gt; is
  319. called with that address, stuff the originally-supplied name in the
  320. result, over the result that actually came back.&lt;/p&gt;
  321. &lt;p&gt;Future enhancements:&lt;/p&gt;
  322. &lt;ul&gt;
  323. &lt;li&gt;build a map from &lt;em&gt;all&lt;/em&gt; &lt;code&gt;getaddrinfo&lt;/code&gt; calls&lt;/li&gt;
  324. &lt;li&gt;handle IPv4 and IPv6 addresses&lt;/li&gt;
  325. &lt;li&gt;for that matter, handle all addresses that come back&lt;/li&gt;
  326. &lt;li&gt;package it for Debian&lt;/li&gt;
  327. &lt;li&gt;package it for FreeBSD (whatever that means)&lt;/li&gt;
  328. &lt;li&gt;investigate &lt;code&gt;getnameinfo&lt;/code&gt; flags more carefully&lt;/li&gt;
  329. &lt;li&gt;don't assume that &lt;code&gt;getnameinfo&lt;/code&gt; gets &lt;em&gt;any&lt;/em&gt; valid answer - if we get a match, return it directly without even calling the upstream function&lt;/li&gt;
  330. &lt;/ul&gt;
  331. &lt;p&gt;However, those can wait until I get some feedback - it now
  332. accomplishes the primary goal, which was to let me drop my
  333. hack-and-slash patches to ssh and just maintain a separate module.
  334. Think of it as "Aspect Oriented Programming... in C" :-)&lt;/p&gt;
  335. &lt;ul&gt;
  336. &lt;li&gt;Aspect Oriented Programming &lt;a href=""&gt;;/a&gt;
  337. &lt;/li&gt;
  338. &lt;/ul&gt;
  340. </description><guid isPermaLink="true"></guid><pubDate>Sun, 04 Nov 2007 08:55:00 GMT</pubDate></item><item><title>firefox: Tue Jul 24 01:50:00 2007</title><description>&lt;p&gt;I did try the search-through-HTML approach to strip the Conkeror
  341. link-numbers (since I have the cut&amp;amp;paste selection with contamination,
  342. and the raw HTML of the page, I can search for one to find the other.)
  343. My results were fuzzier than I liked, and refining the effort didn't
  344. really hold my attention.&lt;/p&gt;
  345. &lt;p&gt;I found something simpler:&lt;/p&gt;
  346. &lt;pre class="codehilite"&gt;&lt;code&gt;function strip_numbers_hard()
  347. {
  348.   removeExisting(document.commandDispatcher.focusedWindow.document);
  349. }&lt;/code&gt;&lt;/pre&gt;
  352. &lt;p&gt;If I run that before the cut&amp;amp;paste, I lose the numbered-links
  353. entirely, and the existing code should just work...&lt;/p&gt;
  355. </description><guid isPermaLink="true"></guid><pubDate>Tue, 24 Jul 2007 10:50:00 GMT</pubDate></item><item><title>Sun Jul  1 16:06:00 2007</title><description>&lt;p /&gt;
  356. &lt;p&gt;More experimentation in the past week leads me to believe that
  357. &lt;tt&gt;GL_POLYGON&lt;/tt&gt; and &lt;tt&gt;GL_QUAD_STRIP&lt;/tt&gt; and the like do triangular
  358. decomposition... and get it wrong, somehow, because only &lt;i&gt;some&lt;/i&gt; parts
  359. of various polygons go away with &lt;tt&gt;GL_CULL_FACE&lt;/tt&gt; but some obvious
  360. triangles remain that clearly shouldn't.  This seems to be consistent
  361. with accelerated and non-accelerated OpenGL in the server (discovered
  362. the latter when rolling back from a 2.6.22 kernel to 2.6.20, and
  363. forgetting to roll back the &lt;tt&gt;xorg-driver-fglrx&lt;/tt&gt; package.)  I'll
  364. have to try newer libraries.&lt;/p&gt;
  365. &lt;p&gt;The approach I'm taking for the moment is to simply draw a unit radius
  366. blue sphere, and then draw the continents over it; using
  367. &lt;tt&gt;GL_CULL_FACE&lt;/tt&gt; to cull polygons with backwards winding was
  368. supposed to make this do the right thing.&lt;/p&gt;
  369. &lt;p&gt;An alternate approach is suggested by some of the "NeHe" tutorial/demo
  370. programs - create a texture out of the polygons, and then map it on to
  371. the sphere.  This should make the rotation and other navigation
  372. stunningly fast, but departs rather a lot from the original program's
  373. concept...&lt;/p&gt;
  374. &lt;h3&gt;Footnotes:&lt;/h3&gt;
  375. &lt;ul&gt;&lt;li&gt; NeHe tutorials &lt;a href=""&gt;;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description><guid isPermaLink="true"></guid><pubDate>Sun, 01 Jul 2007 20:06:00 GMT</pubDate></item><item><title>Thu Jun 21 22:04:00 2007</title><description>&lt;p /&gt;
  376. &lt;p&gt;Found a better vcard parser, in &lt;tt&gt;pycocumalib/;/tt&gt; - PyCoCuMa
  377. (Pythonic Contact and Customer Management) is a somewhat dated-looking
  378. (Tk and XML-RPC based) pure-vcf contact manager.  Produced a simple
  379. &lt;tt&gt;;/tt&gt; script that does a "good" match... fills in a
  380. &lt;tt&gt;&amp;lt;Contact&amp;gt;&lt;/tt&gt; with the obvious mapping from vcard fields.  Not
  381. attempting to sync, this is a one-way translation, and doesn't yet
  382. flag data that gets lost; AddressBook has a fair number of fields that
  383. aren't reflected in RFC 2426, like Profession, Spouse, and
  384. Pronunciation fields; likewise vcard has TZ, GEO, LOGO, and X-&lt;i&gt;
  385. extension fields that aren't mapped.  The next version of this should
  386. probably report any "leftover" data that doesn't get sent over, but I
  387. think this is a good start.&lt;/i&gt;&lt;/p&gt;
  388. &lt;h3&gt;Footnotes:&lt;/h3&gt;
  389. &lt;ul&gt;&lt;li&gt; PyCoCuMa upstream &lt;a href=""&gt;;/a&gt; 0.4.5-6 (2005-09-13 23:25 CET) is the latest upstream&lt;/li&gt;&lt;li&gt; &lt;a href=""&gt;;/a&gt;&lt;/li&gt;&lt;li&gt; RFC 2426 &lt;a href=""&gt;;/a&gt;&lt;/li&gt;&lt;/ul&gt;</description><guid isPermaLink="true"></guid><pubDate>Fri, 22 Jun 2007 02:04:00 GMT</pubDate></item><item><title>distributed-photography: Thu Apr 26 21:11:00 2007</title><description>&lt;p&gt;So many people have digital cameras, pretty much everywhere... but
  390. there's no infrastructure to &lt;em&gt;harness&lt;/em&gt; that.  Flickr Maps
  391. &lt;a href=""&gt;;/a&gt; can be used to find &lt;em&gt;pictures&lt;/em&gt; in many
  392. places, but only those that have already been taken &lt;em&gt;and&lt;/em&gt; geolocated
  393. (often manually.)  (Flickr claims 15 million geolocated pictures, out
  394. of around 450 million.)&lt;/p&gt;
  395. &lt;p&gt;That gives us a standard set of Web 2.0 ingredients:&lt;/p&gt;
  396. &lt;ul&gt;
  397. &lt;li&gt;geography/locality&lt;/li&gt;
  398. &lt;li&gt;social/community&lt;/li&gt;
  399. &lt;li&gt;photos&lt;/li&gt;
  400. &lt;li&gt;realtime&lt;/li&gt;
  401. &lt;li&gt;subvert mainstream media&lt;/li&gt;
  402. &lt;li&gt;user developed content&lt;/li&gt;
  403. &lt;li&gt;mashup&lt;/li&gt;
  404. &lt;/ul&gt;
  406. </description><guid isPermaLink="true"></guid><pubDate>Fri, 27 Apr 2007 06:11:00 GMT</pubDate></item><item><title>distractme: Sun Apr 15 13:01:00 2007</title><description>&lt;p&gt;I did a little more hacking here - a simple python script to figure
  407. out what's the top window and log it, using &lt;code&gt;subprocess.Popen&lt;/code&gt; to
  408. call &lt;code&gt;xwininfo&lt;/code&gt; and &lt;code&gt;xprop&lt;/code&gt;.&lt;/p&gt;
  409. &lt;p&gt;This turned up some interesting tidbits:&lt;/p&gt;
  410. &lt;ul&gt;
  411. &lt;li&gt;
  412. &lt;code&gt;xterm&lt;/code&gt; already has &lt;code&gt;WM_NAME&lt;/code&gt; set via an old &lt;code&gt;$PS1&lt;/code&gt; setting&lt;/li&gt;
  413. &lt;li&gt;
  414. &lt;code&gt;emacs&lt;/code&gt; only puts the buffer in the title for multiple frames; &lt;code&gt;(setq frame-title-format "%b")&lt;/code&gt; fixes this.&lt;/li&gt;
  415. &lt;li&gt;
  416. &lt;code&gt;firefox&lt;/code&gt; (using the &lt;code&gt;conkeror&lt;/code&gt; extension) puts the "buffer" (page/tab) name in the title; it turned out to be easy to change this to the URL with a scattering of &lt;code&gt;document.title = document.commandDispatcher.focusedWindow.location.href;&lt;/code&gt; statements.&lt;/li&gt;
  417. &lt;/ul&gt;
  418. &lt;p&gt;Since I was having some reliability issues with figuring out the "top
  419. window", I tried using &lt;code&gt;ratpoison -c 'windows %s%i'&lt;/code&gt; but something
  420. about running that 3 times/second (or possibly about using c-c to
  421. interrupt it) crashed ratpoison (1.4.0-beta4 ubuntu) which I'll try
  422. and diagnose later.&lt;/p&gt;
  423. &lt;p&gt;In the meantime, a discussion about some of my old perl code (the fact
  424. that I still set my X desktop with code that uses my pure-perl Xlib
  425. implementation,
  426. &lt;a href=""&gt;;/a&gt; was pointed
  427. out as one of the last chunks of perl in my life, since my
  428. "conversion" to python) inspired me to look at &lt;code&gt;python-xlib&lt;/code&gt; again.
  429. Turns out that &lt;code&gt;python-xlib&lt;/code&gt; has a nicely rich interface (windows
  430. as objects with methods, rather than a thin mapping to the C bindings,
  431. while still being appropriately close to the wire.) &lt;code&gt;python-xlib&lt;/code&gt;
  432. gave me a number of advantages:&lt;/p&gt;
  433. &lt;ul&gt;
  434. &lt;li&gt;X errors (due to the transient nature of these particular windows) turn into &lt;code&gt;Xlib.error.BadWindow&lt;/code&gt; exceptions, which I can handle cleanly&lt;/li&gt;
  435. &lt;li&gt;it takes less code to ask for the particular property via &lt;code&gt;topwin.get_wm_name()&lt;/code&gt; than to parse them out of &lt;code&gt;xprop&lt;/code&gt; output&lt;/li&gt;
  436. &lt;li&gt;once I lost the extra baggage of parsing code, it was easier to see simpler ways to look at the overall structure&lt;/li&gt;
  437. &lt;li&gt;using the interactive python interpreter to poke at window state directly made it much easier to decide that &lt;code&gt;child.get_attributes().override_redirect&lt;/code&gt; was worth checking (turns out that were override-redirect windows which were higher on the list, but still not the "real" top window.)&lt;/li&gt;
  438. &lt;/ul&gt;
  439. &lt;p&gt;The current version &lt;a href=""&gt;;/a&gt; still has a little debugging
  440. info, and only covers the &lt;em&gt;logging&lt;/em&gt; and data-gathering parts of the
  441. effort.  It doesn't cover actually mapping this information to what
  442. project I'm actually working on; I want to start out by collecting
  443. evidence, and after a few days of that will come back and figure out
  444. how to analyze it.&lt;/p&gt;
  446. </description><guid isPermaLink="true"></guid><pubDate>Sun, 15 Apr 2007 22:01:00 GMT</pubDate></item><item><title>Thu Feb 22 21:28:00 2007</title><description>&lt;p /&gt;
  447. &lt;p&gt;Another random item.&lt;/p&gt;
  448. &lt;p&gt;&lt;tt&gt;*&lt;/tt&gt; should be just a star...&lt;/p&gt;</description><guid isPermaLink="true"></guid><pubDate>Fri, 23 Feb 2007 02:28:00 GMT</pubDate></item><item><title>nagaina: Fri Feb  9 02:19:00 2007</title><description>&lt;p&gt;Still running multihomed, clearly need to do at least some tests in a
  449. channel-specific manner.  The easy thing to start with is &lt;code&gt;probe_ping&lt;/code&gt;,
  450. since it has a &lt;code&gt;-S&lt;/code&gt; option for source address, which should do the right
  451. thing when combined with our iprules.  However, since this is testing
  452. the interface, not the remote resource, it isn't an option to
  453. &lt;code&gt;probe_ping&lt;/code&gt;, but a new &lt;code&gt;probe_interface&lt;/code&gt; or something like that.&lt;/p&gt;
  454. &lt;p&gt;Later versions should probably do similar tests with TCP.&lt;/p&gt;
  456. </description><guid isPermaLink="true"></guid><pubDate>Fri, 09 Feb 2007 12:19:00 GMT</pubDate></item><item><title>bluetooth: Sun Dec 17 19:23:00 2006</title><description>&lt;p&gt;Inspired by &lt;a href=""&gt;;/a&gt; I dug out the Flic Cordless
  457. bluetooth scanner again.  I have notes from a coworker who borrowed it
  458. and figured out how to talk to it; there's a registration-required SDK
  459. that I will probably grab if I have any trouble (I thought I had a
  460. copy already, but I haven't found it.)&lt;/p&gt;
  461. &lt;pre class="codehilite"&gt;&lt;code&gt;sudo rfcomm connect hci0 "00:A0:96:04:D2:B2" 1 &amp;amp;
  462. screen /dev/rfcomm0
  463. it sends:
  464. 79013400800202FD
  465. sent 02fd^f
  466. 09736154967502FE
  467. send 02fe^f
  468. got 3-tone downwards sequence (for "done"...)
  470. W&amp;lt;RET&amp;gt;
  471. Microvision&amp;#174; Flic&amp;#174; Barcode Scanner, ID: 4117271B, FW: 2.8.0, BT: 1.20M
  472. W0000000000000000590000004117271BFFFF020800
  473. T1&amp;lt;RET&amp;gt; just beeps
  474. T9&amp;lt;RET&amp;gt; low-beeps&lt;/code&gt;&lt;/pre&gt;
  476. </description><guid isPermaLink="true"></guid><pubDate>Mon, 18 Dec 2006 05:23:00 GMT</pubDate></item><item><title>bookstuff: Thu Dec 14 01:06:00 2006</title><description>&lt;p&gt;Tried uploading Delicious Library's xml file directly to library
  477. thing.  Seems like it was a little too aggressive in that I got 900+
  478. books, many of which I clearly don't own; I think it doesn't know
  479. about the recommendations field.  But that's what &lt;code&gt;cElementTree&lt;/code&gt; is for...&lt;/p&gt;
  480. &lt;p&gt;Ah, much better: "LibraryThing found 161 unique ISBNs. 138 of them are
  481. new (not already in your library)." (I entered a small pile of books
  482. by looking around the room, and then clicking through suggestions and
  483. authors and going "oh, I have that one" :-)&lt;/p&gt;
  484. &lt;p&gt;&lt;a href=""&gt;;/a&gt; is the (entirely trivial) extractor.&lt;/p&gt;
  486. </description><guid isPermaLink="true"></guid><pubDate>Thu, 14 Dec 2006 11:06:00 GMT</pubDate></item><item><title>todont: Wed Nov 22 01:41:00 2006</title><description>&lt;p&gt;Requirements, probably conflicting:&lt;/p&gt;
  487. &lt;ul&gt;
  488. &lt;li&gt;fast UI&lt;ul&gt;
  489. &lt;li&gt;ie. faster than the hiveminder web ui; probably faster than &lt;em&gt;any&lt;/em&gt; web UI, start with curses and emacs&lt;/li&gt;
  490. &lt;/ul&gt;
  491. &lt;/li&gt;
  492. &lt;li&gt;widely accessible UI&lt;ul&gt;
  493. &lt;li&gt;for me that means it needs a palm app&lt;/li&gt;
  494. &lt;li&gt;and probably a web app even if it is slow&lt;/li&gt;
  495. &lt;/ul&gt;
  496. &lt;/li&gt;
  497. &lt;li&gt;rich UI&lt;ul&gt;
  498. &lt;li&gt;while "review" and "only current doable" are useful pages, I clearly also need&lt;/li&gt;
  499. &lt;li&gt;show everything&lt;/li&gt;
  500. &lt;li&gt;show tree of dependencies (somehow, but especially in the form "what can I do to unsnarl the most")&lt;/li&gt;
  501. &lt;li&gt;What should I do next is quite reasonably based more on what it unlocks, not just what I can see&lt;/li&gt;
  502. &lt;li&gt;effort vs. payoff&lt;/li&gt;
  503. &lt;/ul&gt;
  504. &lt;/li&gt;
  505. &lt;li&gt;dependencies&lt;ul&gt;
  506. &lt;li&gt;and-then/but-first are a good simplification&lt;/li&gt;
  507. &lt;li&gt;at the same time, it needs to be easy to &lt;em&gt;find&lt;/em&gt; existing tasks to attach&lt;/li&gt;
  508. &lt;li&gt;"any of" or "choose among" is another path&lt;/li&gt;
  509. &lt;/ul&gt;
  510. &lt;/li&gt;
  511. &lt;li&gt;time/size recognition&lt;ul&gt;
  512. &lt;li&gt;sometimes I really am looking for "what's a 1/2 hour task I can do now"&lt;/li&gt;
  513. &lt;li&gt;making estimates &lt;em&gt;and recording the results later&lt;/em&gt; is good training&lt;/li&gt;
  514. &lt;li&gt;picking highest payoff tasks is sometimes the right strategy&lt;/li&gt;
  515. &lt;/ul&gt;
  516. &lt;/li&gt;
  517. &lt;/ul&gt;
  518. &lt;p&gt;That's certainly enough; it may be too much to do up front, but it's a
  519. description of the show-off point at least.&lt;/p&gt;
  521. </description><guid isPermaLink="true"></guid><pubDate>Wed, 22 Nov 2006 11:41:00 GMT</pubDate></item><item><title>zephyr: Thu Nov 16 03:07:00 2006</title><description>&lt;p&gt;After ignoring the zephyr code for a while (the logger has Just Worked
  522. for rather a while, barring network outages, and it restarts well
  523. enough after those) I took another look at &lt;code&gt;ctypes&lt;/code&gt;.  One key difference
  524. is that pyrex imports the &lt;em&gt;abstract&lt;/em&gt; (as much as C ever is) structure
  525. definitions... so you can define fields by name based on what's
  526. visible and part of the API... because under the covers it is
  527. compiling against the header files; with &lt;code&gt;ctypes&lt;/code&gt;, you have to duplicate
  528. the &lt;em&gt;physical&lt;/em&gt; C structure, because it isn't compiling at all, just
  529. building up the same thing in memory.&lt;/p&gt;
  530. &lt;p&gt;Given that, it still only took 95 lines of code to cook up the notice
  531. type, initialize one, and send it (unauthenticated).  I still need to
  532. wrap it up in a more &lt;em&gt;useful&lt;/em&gt; interface, but this convinces me that it
  533. works for a library like this... next step is authentication, and then
  534. maybe gssapi...&lt;/p&gt;
  536. </description><guid isPermaLink="true"></guid><pubDate>Thu, 16 Nov 2006 13:07:00 GMT</pubDate></item><item><title>openafs: Wed Nov  1 01:53:00 2006</title><description>&lt;p&gt;Wrapup:&lt;/p&gt;
  537. &lt;p&gt;These were an interesting exercise - but it turned out that my
  538. appetite for disk space was, after all, satiable; all of the volumes
  539. have been moved to a single Dell PE830 with mirrored 500G SATA drives.
  540. At this time the database servers still need moving, but the clever
  541. volume management issue no longer matters at this scale.&lt;/p&gt;
  542. &lt;p&gt;(The desktop minitowers are trailing-edge enough that it may be
  543. harmful to donate them; the martian box is now a wireless print server
  544. running Ubuntu Edgy Eft, and the HushPC is now a dvd-only MythTV
  545. box... so both still have life due to their specialized nature, namely
  546. "quiet enough (and small enough) to share space with humans in a
  547. civilized manner".)&lt;/p&gt;
  549. </description><guid isPermaLink="true"></guid><pubDate>Wed, 01 Nov 2006 11:53:00 GMT</pubDate></item><item><title>backup: Tue Oct 17 16:27:00 2006</title><description>&lt;p&gt;Hmm.  The commandline (exclusion) args should probably get stashed in
  550. &lt;code&gt;.backup_metadata&lt;/code&gt;.  For now put them here:&lt;/p&gt;
  551. &lt;pre class="codehilite"&gt;&lt;code&gt;time ./  --path /home/eichin --prep --exclude tmp --exclude metacarta --exclude acid --exclude bigdig --exclude .svk --exclude PIX --exclude .kde/share/apps/akregator/Archive --exclude .mozilla/firefox/x2mkyrlv.default/Cache --exclude .snownews/cache&lt;/code&gt;&lt;/pre&gt;
  554. &lt;p&gt;&lt;code&gt;akgregator&lt;/code&gt; and &lt;code&gt;snownews&lt;/code&gt; are excluded because of Joliet issues.
  555. &lt;code&gt;firefox&lt;/code&gt; is excluded because it's running and expiring live.&lt;/p&gt;
  557. </description><guid isPermaLink="true"></guid><pubDate>Wed, 18 Oct 2006 01:27:00 GMT</pubDate></item><item><title>vnc: Thu Oct 12 04:39:00 2006</title><description>&lt;p&gt;While looking for a Mac OS X VNC Server (to remote-sysadmin a Eudora
  558. problem that seemed impervious to ssh) I stumbled across "eggplant
  559. purple", a visually oriented, rather polished, GUI test harness based
  560. on VNC (so, while a Mac product, it can test pretty much anything.)
  561. The primary takeaway from the video demo was that GUI testing could be
  562. broken down into two simple abstractions:&lt;/p&gt;
  563. &lt;ul&gt;
  564. &lt;li&gt;find things to push&lt;/li&gt;
  565. &lt;li&gt;script how to push them&lt;/li&gt;
  566. &lt;/ul&gt;
  567. &lt;p&gt;They had a nice script-building GUI for this; basically a pass-through
  568. overlay on a VNC client where you could simply run the app under test
  569. (or even start with a blank desktop and &lt;em&gt;find&lt;/em&gt; it), making you break
  570. down "just click on that icon" into "trace the icon, optionally adjust
  571. the hotspot, click" which then became a saved TIFF off the icon, and a
  572. line of script "click name-of-tiff".&lt;/p&gt;
  573. &lt;p&gt;This made simple things look simple, and you could also see how to do
  574. more complex stuff from there.  An interesting bit that took a while
  575. to sink in was that failures automatically saved a screen shot of the
  576. last thing attempted - so it could be used to set up scripted
  577. screenshot generation simply as a side effect of tests with impossible
  578. end conditions. &lt;/p&gt;
  580. </description><guid isPermaLink="true"></guid><pubDate>Thu, 12 Oct 2006 13:39:00 GMT</pubDate></item><item><title>boston-massacre: Mon Jan  9 17:37:00 2006</title><description>&lt;p&gt;A friend suggested a scheme that he uses to more effectively identify
  581. and contain spam sourced mail; some searching/riffing on his name lead
  582. me to
  583. &lt;a href=""&gt;;/a&gt;
  584. and thus the name of this project.&lt;/p&gt;
  585. &lt;p&gt;Basic concept: mechanically generate reply addresses.  When spam
  586. starts arriving by one, drop it.&lt;/p&gt;
  587. &lt;p&gt;Uses:&lt;/p&gt;
  588. &lt;ul&gt;
  589. &lt;li&gt;
  590. &lt;p&gt;personal mail: people mostly reply anyway, so that works; or they can
  591.    add one particular one to their address book, and as long as they
  592.    don't end up getting leaked, they keep working.&lt;/p&gt;
  593. &lt;/li&gt;
  594. &lt;li&gt;
  595. &lt;p&gt;list mail: doesn't work for mailman, membership-post-only addresses,
  596.    without some further kludging.  Perhaps always post from a bucket
  597.    address or a list-specific address in those cases.&lt;/p&gt;
  598. &lt;/li&gt;
  599. &lt;li&gt;
  600. &lt;p&gt;strangers: they come in via a generic address, and maybe don't get
  601.    in.&lt;/p&gt;
  602. &lt;/li&gt;
  603. &lt;li&gt;
  604. &lt;p&gt;existing correspondants: hunt them down and get them to update.&lt;/p&gt;
  605. &lt;/li&gt;
  606. &lt;/ul&gt;
  608. </description><guid isPermaLink="true"></guid><pubDate>Tue, 10 Jan 2006 03:37:00 GMT</pubDate></item><item><title>sheetwork: Thu Dec 29 00:29:00 2005</title><description>&lt;dl&gt;
  609. &lt;dt&gt;sheetwork&lt;/dt&gt;
  610. &lt;dd&gt;A term used in edition binding for the binding operations
  611. of folding, tipping, gathering, endsheeting, sewing, and smashing.
  612. -- &lt;a href=""&gt;;/a&gt;
  613. &lt;/dd&gt;
  614. &lt;/dl&gt;
  615. &lt;p&gt;sheetwork is a tool for producing web pages.  Not an entire blog, but
  616. a single page article, possibly for inclusion in an outer framework
  617. which is a blog or album structure.  A page, an article, a journal
  618. day....  Not, perhaps, a good match for the term.&lt;/p&gt;
  619. &lt;ul&gt;
  620. &lt;li&gt;needs to work well with emacs&lt;/li&gt;
  621. &lt;li&gt;
  622. &lt;code&gt;bzero&lt;/code&gt; provides some possible inspirations...&lt;/li&gt;
  623. &lt;li&gt;an external tool for adding notation for objects, like images&lt;/li&gt;
  624. &lt;li&gt;commandline cooking tools (like tex, too)&lt;/li&gt;
  625. &lt;li&gt;scribe's &lt;code&gt;@documentstyle&lt;/code&gt; was a good idea&lt;/li&gt;
  626. &lt;li&gt;nroff's command notation isn't bad for commands, but is bad for flow
  627.   in text&lt;/li&gt;
  628. &lt;li&gt;we've already got lots of wiki stuff, why not use it?&lt;/li&gt;
  629. &lt;li&gt;"kid" is cool, if we end up with anything template-like&lt;/li&gt;
  630. &lt;li&gt;rfc822 isn't bad as a low-end representation, at least for leading
  631.   metadata, but doesn't handle body stuff&lt;/li&gt;
  632. &lt;li&gt;must end up with an emacs mode, but not be doomed without it&lt;/li&gt;
  633. &lt;/ul&gt;
  635. </description><guid isPermaLink="true"></guid><pubDate>Thu, 29 Dec 2005 10:29:00 GMT</pubDate></item><item><title>deli: Mon Dec 12 00:41:00 2005</title><description>&lt;p&gt;&lt;a href=""&gt;;/a&gt;
  636. needs a new maintainer... but might be a better thing to leverage&lt;/p&gt;
  638. </description><guid isPermaLink="true"></guid><pubDate>Mon, 12 Dec 2005 10:41:00 GMT</pubDate></item><item><title>rss: Sun Nov 27 01:02:00 2005</title><description>&lt;p&gt;I need a better reader than snownews, more text-oriented (and
  639. linux-friendly) than nnw.  (Though images in messages were nice; it
  640. might suffice to use w3m as a renderer and hack w3m img...)&lt;/p&gt;
  642. </description><guid isPermaLink="true"></guid><pubDate>Sun, 27 Nov 2005 11:02:00 GMT</pubDate></item><item><title>comics: Sun Nov 27 00:16:00 2005</title><description>&lt;p&gt;Most recently, switched to conkeror+firefox, and now hit c-c c-n in
  643. the web browser to get the next comic.  The same queue is fed by a
  644. one-liner in &lt;code&gt;~/.snownews/browser&lt;/code&gt;:&lt;/p&gt;
  645. &lt;pre class="codehilite"&gt;&lt;code&gt;curl -Hurl:\ %s -d "" &amp;lt;http://localhost:3383/push_url&amp;gt;&lt;/code&gt;&lt;/pre&gt;
  648. &lt;p&gt;so urls from that are queued up the same way (see ../firefox.)&lt;/p&gt;
  649. &lt;p&gt;Still should do some kind of auto-training; the simplest algorithm is
  650. to fetch the whole page, then fetch it small-T (an hour? 5m?) later,
  651. and see what changed, and ignore it.  Keep a record (vector?) of the
  652. whittling, and use that instead of &lt;code&gt;check_maybe&lt;/code&gt;.  Possibly pick a
  653. threshold of change and display it to me - and let me vote on same
  654. vs. different...&lt;/p&gt;
  656. </description><guid isPermaLink="true"></guid><pubDate>Sun, 27 Nov 2005 10:16:00 GMT</pubDate></item><item><title>todo-prodder: Wed Nov  3 03:08:00 2004</title><description>&lt;p&gt;higher level stuff&lt;/p&gt;
  657. &lt;pre class="codehilite"&gt;&lt;code&gt;- produce list of whole-items, with date + subitems
  658. - filter out [done]s or at least identify them&lt;/code&gt;&lt;/pre&gt;
  660. </description><guid isPermaLink="true"></guid><pubDate>Wed, 03 Nov 2004 13:08:00 GMT</pubDate></item><item><title>topicmaster: Sat Sep 11 03:03:00 2004</title><description>&lt;p&gt;Another one - "virtual topic" of "all stufflogs mentioning chocolate
  661. or cocoa in the clip itself"&lt;/p&gt;
  662. &lt;p&gt;Then a metaproject of "chocolate printing"&lt;/p&gt;
  664. </description><guid isPermaLink="true"></guid><pubDate>Sat, 11 Sep 2004 12:03:00 GMT</pubDate></item><item><title>filthy-assistant: Wed Jun 30 00:00:00 2004</title><description>&lt;p&gt;I need to get back to the collection-of-interest-topics model, so that
  665. short lived things like "getting passport" get pulled in, bigger
  666. things like "accepted advertiser mail" do too...&lt;/p&gt;
  668. </description><guid isPermaLink="true"></guid><pubDate>Wed, 30 Jun 2004 10:00:00 GMT</pubDate></item></channel></rss>

If you would like to create a banner that links to this page (i.e. this validation result), do the following:

  1. Download the "valid RSS" banner.

  2. Upload the image to your own server. (This step is important. Please do not link directly to the image on this server.)

  3. Add this HTML to your page (change the image src attribute if necessary):

If you would like to create a text link instead, here is the URL you can use:

Copyright © 2002-9 Sam Ruby, Mark Pilgrim, Joseph Walton, and Phil Ringnalda