[Valid Atom 1.0] This is a valid Atom 1.0 feed.


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


  1. <?xml version="1.0" encoding="utf-8"?>
  2. <feed xmlns="" xml:base="en">
  3. <title>Massively Parallel Procrastination</title>
  4. <subtitle>I used to write more</subtitle>
  5. <link href="" rel="self"/>
  6. <link href=""/>
  7. <updated>2024-04-21T00:00:00Z</updated>
  8. <id></id>
  9. <author>
  10. <name>Jesse Vincent</name>
  11. <email></email>
  12. </author>
  13. <entry>
  14. <title>Letting the LLM draft my commit messages</title>
  15. <link href=""/>
  16. <updated>2024-04-21T00:00:00Z</updated>
  17. <id></id>
  18. <content type="html">&lt;p&gt;My friend harper built a neat tool to &lt;a href=&quot;;&gt;let the llm draft your commit messages&lt;/a&gt;.&lt;/p&gt;
  19. &lt;p&gt;I ended up tweaking his code a bit for my own use. I wanted commit messages that were a bit more...boring. And I wasn&#39;t really happy with how the original code put together the &#39;why&#39; of the commit message.&lt;/p&gt;
  20. &lt;p&gt;I made changes to harper&#39;s prompt to try to rein things in just a bit and also hacked up his git hook to tweak the model&#39;s &amp;quot;temperature&amp;quot; and to provide full-file context to the llm to give it a bit more to go on when writing a commit message.&lt;/p&gt;
  21. &lt;p&gt;I find that with this setup, I do need to edit my commit messages about 90% of the time, but that those edits are relatively minor and that I&#39;m ending up with better, more detailed commit messages. (Also, I am generally much more productive when I&#39;m hacking up something bad than when I&#39;m staring at a blank screen.)&lt;/p&gt;
  22. &lt;p&gt;Although, having said that, when I added the first version of this post to the git repo for my blog, it generated this commit message, which I accepted unchanged:&lt;/p&gt;
  23. &lt;pre&gt;&lt;code&gt;Add blog post and update CSS for code blocks
  25. - Added a new blog post &amp;quot;Letting the LLM draft my commit messages&amp;quot; in `content/blog/2024/`. This post discusses the use of a tool for generating commit messages with LLM and includes modifications to the original tool for better context understanding and message generation.
  26. - Updated `public/css/index.css` to improve the styling of `&amp;lt;pre&amp;gt;` tags. Changes include setting the font size to 0.8em, adding a background color of #dedede, enabling horizontal scrolling for overflow content, and adding padding for better readability of code blocks.
  27. &lt;/code&gt;&lt;/pre&gt;
  28. &lt;p&gt;You should refer to harper&#39;s post for context about what the heck this tool does and also how to set it up.&lt;/p&gt;
  29. &lt;p&gt;My &lt;code&gt;prepare-commit-msg&lt;/code&gt; script:&lt;/p&gt;
  30. &lt;pre&gt;&lt;code&gt;#!/bin/sh
  32. # Exit if the `SKIP_LLM_GITHOOK` environment variable is set
  33. if [ ! -z &amp;quot;$SKIP_LLM_GITHOOK&amp;quot; ]; then
  34.  exit 0
  35. fi
  37. # ANSI color codes for styling the output
  38. RED=&#39;&#92;033[0;31m&#39;    # Sets text to red
  39. GREEN=&#39;&#92;033[0;32m&#39;  # Sets text to green
  40. YELLOW=&#39;&#92;033[0;33m&#39; # Sets text to yellow
  41. BLUE=&#39;&#92;033[0;34m&#39;   # Sets text to blue
  42. NC=&#39;&#92;033[0m&#39;        # Resets the text color to default, no color
  45. # Function to display a spinning animation during the LLM processing
  46. spin_animation() {
  47.  # Array of spinner characters for the animation
  48.  spinner=(&amp;quot;⠋&amp;quot; &amp;quot;⠙&amp;quot; &amp;quot;⠹&amp;quot; &amp;quot;⠸&amp;quot; &amp;quot;⠼&amp;quot; &amp;quot;⠴&amp;quot; &amp;quot;⠦&amp;quot; &amp;quot;⠧&amp;quot; &amp;quot;⠇&amp;quot; &amp;quot;⠏&amp;quot;)
  49.  # Infinite loop to keep the animation running
  50.  while true; do
  51.    for i in &amp;quot;${spinner[@]}&amp;quot;; do
  52.      tput civis  # Hide the cursor to enhance the animation appearance
  53.      tput el1    # Clear the line from the cursor to the beginning to display the spinner
  54.      printf &amp;quot;&#92;&#92;r${YELLOW}%s${NC} Generating LLM commit message...&amp;quot; &amp;quot;$i&amp;quot;  # Print the spinner and message
  55.      sleep 0.1   # Delay to control the speed of the animation
  56.      tput cub 32 # Move the cursor back 32 columns to reset the spinner position
  57.    done
  58.  done
  59. }
  61. # Check if the commit is a merge commit based on the presence of a second argument
  62. if [ -n &amp;quot;$2&amp;quot; ]; then
  63.  exit 0  # Exit script if it&#39;s a merge commit, no custom message needed
  64. fi
  66. # Check if the `llm` command is installed
  67. if ! command -v llm &amp;amp;&amp;gt; /dev/null; then
  68.  echo &amp;quot;${RED}Error: &#39;llm&#39; command is not installed. Please install it and try again.${NC}&amp;quot;
  69.  exit 1
  70. fi
  72. # Start the spinning animation in the background
  73. spin_animation &amp;amp;
  74. spin_pid=$!  # Capture the process ID of the spinning animation
  76. # Generate the commit message using `git diff` piped into `llm` command
  77. # The LLM command takes a system prompt from a file as input
  78. if ! commit_msg=$(git diff -U999999 --cached | llm -t commit-message  --option temperature 0.02 --option seed 1); then
  79.  # Stop the spinning animation by killing its process
  80.  kill $spin_pid
  81.  wait $spin_pid 2&amp;gt;/dev/null  # Wait for the process to terminate and suppress error messages
  83.  # Finalizing output
  84.  tput cnorm  # Show the cursor again
  85.  printf &amp;quot;&#92;&#92;n&amp;quot;  # Move the cursor to the next line
  87.  printf &amp;quot;${RED}Error: &#39;llm&#39; command failed to generate the commit message:&#92;&#92;n${commit_msg}${NC}&#92;&#92;n&#92;&#92;nManually set the commit message&amp;quot;
  88.  exit 1
  89. fi
  91. # Stop the spinning animation by killing its process
  92. kill $spin_pid
  93. wait $spin_pid 2&amp;gt;/dev/null  # Wait for the process to terminate and suppress error messages
  95. # Finalizing output
  96. tput cnorm  # Show the cursor again
  97. echo  # Move the cursor to the next line
  99. # Display the generated commit message with color-coded headings
  100. echo &amp;quot;${BLUE}=== Generated Commit Message ===${NC}&amp;quot;
  101. echo &amp;quot;${GREEN}$commit_msg${NC}&amp;quot;
  102. echo &amp;quot;${BLUE}=================================${NC}&amp;quot;
  103. echo
  105. # Write the generated commit message to the specified file (usually the commit message file in .git)
  106. echo &amp;quot;$commit_msg&amp;quot; &amp;gt; &amp;quot;$1&amp;quot;
  107. &lt;/code&gt;&lt;/pre&gt;
  108. &lt;p&gt;My prompt lives inside llm&#39;s &amp;quot;prompt templates&amp;quot; feature at &lt;code&gt;~/Library/Application Support/io.datasette.llm/templates/commit-message.yaml&lt;/code&gt;&lt;/p&gt;
  109. &lt;pre&gt;&lt;code&gt;model: gpt-4-turbo
  110. system: &amp;gt;
  112.    Write a concise, informative commit message for these changes:
  114.    - Review the whole context of the diff carefully to see what effect the change would have on the rest of the code and explain that. Be specific about the effect.
  115.    - Do not guess about intent.
  116.    - The goal of this commit message is that someone familiar with the codebase, but not with these changes would understand why the changes were made and what was changed.
  117.    - The first line should be a short summary of the intent of the changes
  118.    - Remember to mention the files that were changed, and what was changed
  119.    - Keep the summary under 50 characters
  120.    - Use bullet points for multiple changes
  121.    - Reference related issues or tickets, but only if you are 100% sure the ticket numbers are correct.
  122.    - If the change is just to documentation, state that.
  123.    - If there are no changes, or the input is blank - then return a blank string
  125.    Think carefully about what would be most helpful to someone trying to understand the intent of this commit before you write your commit message. Your commit message will be used as an example to train other team members about the content of a good commit message.
  127.    What you write will be passed to git commit -m &amp;quot;[message]&amp;quot;
  129.    The output format should be:
  131.    Summary of changes&#92;n
  132.    &#92;n
  133.    - change&#92;n
  134.    - change&#92;n
  135.    ..and so on.
  137. &lt;/code&gt;&lt;/pre&gt;
  138. </content>
  139. </entry>
  140. <entry>
  141. <title>Fab out</title>
  142. <link href=""/>
  143. <updated>2024-01-19T00:00:00Z</updated>
  144. <id></id>
  145. <content type="html">&lt;p&gt;A couple years back, I put a ton of effort into building a tool that would let me create KiCAD fabrication outputs (gerber files, pick and place docs, schematics) from the commandline.  What started as a hacky perl script became a 500 megabyte Docker image and &lt;a href=&quot;;&gt;a conference talk&lt;/a&gt;.&lt;/p&gt;
  146. &lt;p&gt;At the time, getting KiCAD to generate Gerber files was...just barely possible through their Python API. But when it came to generating a schematic or a BOM, the simplest, most straightforward option was to spin up a headless X server in a virtual machine and write a bit of code to open the GUI, tab through UI widgets and &amp;quot;click&amp;quot; on the output options.&lt;/p&gt;
  147. &lt;p&gt;It was slow and incredibly clunky. But it worked.&lt;/p&gt;
  148. &lt;p&gt;Flash forward to last week when the first Release Candidate for KiCAD 8 dropped.&lt;/p&gt;
  149. &lt;p&gt;This shell script, largely written for me by an LLM, just does everything my tool used to.&lt;/p&gt;
  150. &lt;pre&gt;&lt;code&gt;#!/bin/bash
  152. KICAD_CLI_PATH=/Applications/KiCad/
  153. kicad_cli_path=&amp;quot;${KICAD_CLI_PATH:-$HOME/kicad/bin/kicad-cli}&amp;quot;
  155. project_name=$(basename &amp;quot;$PWD&amp;quot;)
  156. project_path=&amp;quot;$PWD&amp;quot;
  157. output_dir=&amp;quot;output&amp;quot;
  158. current_date=$(date &#39;+%Y-%m-%d-%H:%M:%S&#39;)
  159. export_name=&amp;quot;$project_name-$current_date&amp;quot;
  160. project_output_dir=&amp;quot;$output_dir/$export_name&amp;quot;
  162. if [ ! -d &amp;quot;$project_output_dir&amp;quot; ]; then
  163.  mkdir -p &amp;quot;$project_output_dir&amp;quot;
  164. fi
  166. export_description_file=&amp;quot;$project_output_dir/export-version-info.txt&amp;quot;
  167. gerbers_output_dir=&amp;quot;$project_output_dir/gerbers&amp;quot;
  168. step_output_dir=&amp;quot;$project_output_dir/3d&amp;quot;
  169. schematic_output_dir=&amp;quot;$project_output_dir/schematic&amp;quot;
  170. pos_output_dir=&amp;quot;$project_output_dir/pos&amp;quot;
  171. bom_output_dir=&amp;quot;$project_output_dir/bom&amp;quot;
  172. if [ ! -d &amp;quot;$gerbers_output_dir&amp;quot; ]; then
  173.  mkdir &amp;quot;$gerbers_output_dir&amp;quot;
  174. fi
  175. if [ ! -d &amp;quot;$step_output_dir&amp;quot; ]; then
  176.  mkdir &amp;quot;$step_output_dir&amp;quot;
  177. fi
  178. if [ ! -d &amp;quot;$schematic_output_dir&amp;quot; ]; then
  179.  mkdir &amp;quot;$schematic_output_dir&amp;quot;
  180. fi
  181. if [ ! -d &amp;quot;$bom_output_dir&amp;quot; ]; then
  182.  mkdir &amp;quot;$bom_output_dir&amp;quot;
  183. fi
  184. if [ ! -d &amp;quot;$pos_output_dir&amp;quot; ]; then
  185.  mkdir &amp;quot;$pos_output_dir&amp;quot;
  186. fi
  189. echo &amp;quot;exporting git version information&amp;quot;
  190. echo &amp;quot;Git describe output: &amp;quot; &amp;gt;&amp;gt; $export_description_file
  191. git describe &amp;gt;&amp;gt; $export_description_file
  192. echo &amp;quot;Export date and time: ${date}&amp;quot; &amp;gt;&amp;gt; $export_description_file
  195. echo &amp;quot;Exporting gerbers&amp;quot;
  196. &amp;quot;$kicad_cli_path&amp;quot; pcb export gerbers --output=&amp;quot;$gerbers_output_dir&amp;quot; &amp;quot;$project_path/$project_name.kicad_pcb&amp;quot;
  198. echo &amp;quot;Export schematic as PDF&amp;quot;
  199. &amp;quot;$kicad_cli_path&amp;quot; sch export pdf --output=&amp;quot;$schematic_output_dir/$project_name.pdf&amp;quot; &amp;quot;$project_path/$project_name.kicad_sch&amp;quot;
  201. echo &amp;quot;Export BOM&amp;quot;
  202. &amp;quot;$kicad_cli_path&amp;quot; sch export bom --output=&amp;quot;$bom_output_dir/$project_name.csv&amp;quot; &amp;quot;$project_path/$project_name.kicad_sch&amp;quot;
  204. echo &amp;quot;Export position file&amp;quot;
  205. &amp;quot;$kicad_cli_path&amp;quot; pcb export pos --output=&amp;quot;$pos_output_dir/$project_name.pos&amp;quot; &amp;quot;$project_path/$project_name.kicad_pcb&amp;quot;
  207. echo &amp;quot;Export 3D model&amp;quot;
  208. &amp;quot;$kicad_cli_path&amp;quot; pcb export step --output=&amp;quot;$step_output_dir/$project_name.step&amp;quot; &amp;quot;$project_path/$project_name.kicad_pcb&amp;quot;
  210. echo &amp;quot;Export drill files&amp;quot;
  211. &amp;quot;$kicad_cli_path&amp;quot; pcb export drill --output=&amp;quot;$gerbers_output_dir/&amp;quot; &amp;quot;$project_path/$project_name.kicad_pcb&amp;quot;
  213. cd $output_dir
  214. zip -r $ $export_name
  216. echo &amp;quot;Created $output_dir/$;quot;
  217. &lt;/code&gt;&lt;/pre&gt;
  218. </content>
  219. </entry>
  220. <entry>
  221. <title>Imperfect-Board</title>
  222. <link href=""/>
  223. <updated>2024-01-07T00:00:00Z</updated>
  224. <id></id>
  225. <content type="html">&lt;p&gt;This morning, while I was hanging out with the kiddo while he was assembling LEGO and we were watching the Animaniacs, &lt;a href=&quot;;&gt;Trevor Flowers&lt;/a&gt; &lt;a href=&quot;;&gt;posted that he couldn&#39;t find his favorite no-jumper Perfboard anymore&lt;/a&gt;.&lt;/p&gt;
  226. &lt;p&gt;I figured that &lt;em&gt;somebody&lt;/em&gt; ought to be making them, but my Google-fu failed me. And then I, foolishly, speculated that they ought to be pretty easy to knock together in KiCAD.&lt;/p&gt;
  227. &lt;p&gt;Reader, I nerd-sniped myself.&lt;/p&gt;
  228. &lt;img src=&quot;; style=&quot;max-width: 90%;&quot;&gt;
  229. &lt;p&gt;&lt;a href=&quot;;&gt;;/a&gt;.&lt;/p&gt;
  230. </content>
  231. </entry>
  232. <entry>
  233. <title>Copying HEIC images as JPEGS on macOS</title>
  234. <link href=""/>
  235. <updated>2023-12-13T00:00:00Z</updated>
  236. <id></id>
  237. <content type="html">&lt;p&gt;For the last couple years, I keep getting hit with an annoying bit of friction when sharing images from my phone online.&lt;/p&gt;
  238. &lt;p&gt;My iPhone defaults to saving photos in &#39;HEIC&#39; format, which is a not-quite-proprietary Apple image format that&#39;s more efficient than the JPEGs we all know and love. That&#39;s mostly good. I get better-looking photos that take up a little less space than they might otherwise.&lt;/p&gt;
  239. &lt;p&gt;The problem comes when I try to upload one of those files or to paste it into a browser.&lt;/p&gt;
  240. &lt;p&gt;Just about nobody implements support for HEIC images, so I need to do this dumb dance of converting the HEIC to a JPEG just to share it online.&lt;/p&gt;
  241. &lt;p&gt;This morning, I finally figured out how to create a &amp;quot;copy as JPEG&amp;quot; action for Finder in Automator.&lt;/p&gt;
  242. &lt;p&gt;You can download my &amp;quot;copy as JPEG&amp;quot; workflow &lt;a href=&quot;;&gt;from here&lt;/a&gt;. I &lt;em&gt;think&lt;/em&gt; that when you unzip it and double-click it, it&#39;ll load it up in Automator to let you install it.&lt;/p&gt;
  243. &lt;p&gt;Once you do that, you&#39;ll see something like this in the command-click menu in Finder:&lt;/p&gt;
  244. &lt;img src=&quot;; style=&quot;max-width: 90%;&quot;&gt;
  245. </content>
  246. </entry>
  247. <entry>
  248. <title>No, I&#39;m not actually blogging again</title>
  249. <link href=""/>
  250. <updated>2023-12-08T00:00:00Z</updated>
  251. <id></id>
  252. <content type="html">&lt;p&gt;This morning, I got asked where someone should point a link to &amp;quot;me&amp;quot;, so I told them to just point it at;/p&gt;
  253. &lt;p&gt;And then I &lt;em&gt;looked&lt;/em&gt; at, which has been my personal homepage since people had personal homepages.&lt;/p&gt;
  254. &lt;p&gt;The blog that was supposed to show up there was literally just showing a javascript error. And half the social sites in my linkroll (is that even what you call that thing?) were dead. I mean, and weren&#39;t there anymore. But Twitter was still at the top of the list. And my Google Plus link was up there. And oh god. Talk about link rot.&lt;/p&gt;
  255. &lt;p&gt;So I figured it was time to finally shave that elephant-sized yak that&#39;s been sitting around in the room for the last five-plus years and move my blog onto some modern static site generator. I mean, I&#39;ve posted there in the past decade. But the way I posted there was to...log into TypePad and put content into their WYSIWYG editor.&lt;/p&gt;
  256. &lt;p&gt;While I was at it, I rolled in all my old posts from my Livejournal, because yeah, a lot of my blogging life lived there too. And then I finally integrated &lt;a href=&quot;;&gt;a bunch of letters&lt;/a&gt; home that I wrote to a mailing list of people who wanted to hear from me while I was studying abroad in Moscow 27 years. ago.&lt;/p&gt;
  257. &lt;p&gt;And now I&#39;m trying to get my Twitter archive pushed up to &lt;a href=&quot;;&gt;;/a&gt;, because it&#39;s Friday evening and this is what sounds like fun on a Friday night these days.&lt;/p&gt;
  258. &lt;p&gt;But hey, now that blogging is &amp;quot;put a text file in a directory and type an arcane command&amp;quot; instead of &amp;quot;log into a website and press buttons with gradient backgrounds&amp;quot;, maybe I&#39;ll actually write a bit more?&lt;/p&gt;
  259. &lt;p&gt;Nah.&lt;/p&gt;
  260. </content>
  261. </entry>
  262. <entry>
  263. <title>How to reboot an Arduino Leonardo / Micro into the bootloader.</title>
  264. <link href=""/>
  265. <updated>2014-08-28T01:55:58Z</updated>
  266. <id></id>
  267. <content type="html">&lt;p&gt;One of the things we&amp;#039;re building for the Keyboardio Model 01 is an interactive keyboard shell that I&amp;#039;ve provisionally named &amp;quot;quiche&amp;quot;.&amp;#160;&lt;/p&gt;
  268. &lt;p&gt;Today, I implemented functionality to allow the user to reboot the ATmega32U4 inside the keyboard into the Caterina bootloader so the user can upload new firmware.&lt;/p&gt;
  269. &lt;p&gt;It took a lot more time than it should have to find the right magic incantations to get the bootloader to stay in firmware upload mode. (In the end, it was just a matter of looking at CDC.c inside the Arduino core.)&lt;/p&gt;
  270. &lt;p&gt;So that nobody else has to stumble through this as I have, I&amp;#039;ve pasted my solution below.&lt;/p&gt;
  271. &lt;pre&gt;&lt;span style=&quot;font-family:&amp;#039;&quot;&gt;&lt;br&gt;#include &amp;lt;avr/wdt.h&amp;gt;&lt;br&gt;// [...]&lt;br&gt;// Set the magic bits to get a Caterina-based device
  272. // to reboot into the bootloader and stay there, rather
  273. // than run move onward
  274. //
  275. // These values are the same as those defined in
  276. // Caterina.c
  277. uint16_t bootKey = 0x7777;
  278. uint16_t *const bootKeyPtr = (uint16_t *)0x0800;
  279. // Stash the magic key
  280. *bootKeyPtr = bootKey;
  281. // Set a watchdog timer
  282. wdt_enable(WDTO_120MS);
  283. while(1) {} // This infinite loop ensures nothing else
  284. // happens before the watchdog reboots us&lt;br&gt;&lt;/span&gt;&lt;/pre&gt;
  285. &lt;p&gt;Solutions that didn&amp;#039;t work for for me included:&lt;/p&gt;
  286. &lt;ul&gt;
  287. &lt;li&gt;Writing raw assembler like:&lt;/li&gt;
  288. &lt;/ul&gt;
  289. &lt;p&gt;&lt;span style=&quot;font-family:&amp;#039;&quot;&gt;asm volatile&amp;#160;(&amp;quot;jmp 0x7800&amp;quot;); // This address also happens to be bootloader-size dependent&lt;/span&gt;&lt;/p&gt;
  290. &lt;ul&gt;
  291. &lt;li&gt;Tweaking&amp;#160;&lt;span style=&quot;font-family:&amp;#039;&quot;&gt;MCUSR&lt;/span&gt; to try to convince the bootloader that an external reset had been initiated.&lt;/li&gt;
  292. &lt;/ul&gt;
  293. &lt;p&gt;&amp;#160;&lt;/p&gt;
  294. </content>
  295. </entry>
  296. <entry>
  297. <title>Model 00</title>
  298. <link href=""/>
  299. <updated>2013-12-23T06:08:07Z</updated>
  300. <id></id>
  301. <content type="html">&lt;p&gt;&lt;a class=&quot;postlink&quot; href=&quot;;&gt;&lt;img alt=&quot;Image&quot; class=&quot;reimg-width&quot; height=&quot;551&quot; src=&quot;; width=&quot;734&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  302. &lt;div class=&quot;content&quot;&gt;The Model 00 is very similar to the Mark 13 I mentioned over at &lt;a class=&quot;postlink&quot; href=&quot;;&gt;;/a&gt;, though it (finally) uses a PCB I designed and had Seeed Studio make me 10 copies of (for $200, including FedEx Next Day shipping from China!) and has a shell made from stained, polyurothane-coated birch plywood rather than acrylic sheets. It&amp;#039;s pretty close to a &amp;quot;final&amp;quot; layout for the keyboard we&amp;#039;re hoping to Kickstarter.&lt;p&gt;&lt;/p&gt;
  303. &lt;p&gt;So far, we&amp;#039;ve built out four of our 10 PCBs. Two of them are for us. The other two are being sent to unsuspecting beta testers tomorrow. (They won&amp;#039;t get there in time for Christmas, but what can you do?) We&amp;#039;re not 100% sure what we&amp;#039;re doing with the other six, but if we sell any of them, we&amp;#039;ll tell&amp;#160;&lt;a href=&quot;; target=&quot;_self&quot; title=&quot;the launch page&quot;&gt;the mailing list&lt;/a&gt;.&lt;/p&gt;
  304. &lt;p&gt; &lt;a class=&quot;postlink&quot; href=&quot;;&gt;&lt;img alt=&quot;Image&quot; class=&quot;reimg-width&quot; height=&quot;551&quot; src=&quot;; width=&quot;734&quot;&gt;&lt;/a&gt;&lt;br&gt; &lt;a class=&quot;postlink&quot; href=&quot;;&gt;&lt;img alt=&quot;Image&quot; class=&quot;reimg-width&quot; height=&quot;551&quot; src=&quot;; width=&quot;734&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;postlink&quot; href=&quot;;&gt;&lt;img alt=&quot;Image&quot; class=&quot;reimg-width&quot; height=&quot;551&quot; src=&quot;; width=&quot;734&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;a class=&quot;postlink&quot; href=&quot;;&gt;&lt;img alt=&quot;Image&quot; class=&quot;reimg-width&quot; height=&quot;551&quot; src=&quot;; width=&quot;734&quot;&gt;&lt;/a&gt;&lt;br&gt; &lt;a class=&quot;postlink&quot; href=&quot;;&gt;&lt;img alt=&quot;Image&quot; class=&quot;reimg-width&quot; height=&quot;734&quot; src=&quot;; width=&quot;734&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;
  305. &lt;div class=&quot;content&quot;&gt;&amp;#160;&lt;/div&gt;
  306. &lt;div class=&quot;content&quot;&gt;&amp;#160;&lt;/div&gt;
  307. &lt;div class=&quot;content&quot;&gt;You can find more &lt;a href=&quot;; target=&quot;_self&quot; title=&quot;photos of the Model 00&quot;&gt;photos of the Model 00&lt;/a&gt; on Flickr.&lt;/div&gt;
  308. </content>
  309. </entry>
  310. <entry>
  311. <title>Better and better keyboards.</title>
  312. <link href=""/>
  313. <updated>2013-12-12T02:27:41Z</updated>
  314. <id></id>
  315. <content type="html">&lt;p&gt;It&amp;#039;s been a while since I&amp;#039;ve written about my keyboard-building adventures....apparently, I haven&amp;#039;t blogged about keyboards since April of this year. I&amp;#039;ve been too busy designing keyboards.&lt;/p&gt;
  316. &lt;p&gt;The first thing I should get out of the way is that you&amp;#039;re going to be able to buy one. We&amp;#039;re working hard to finalize a design and find manufacturing partners. If you want to know when we&amp;#039;re ready to take your money, head on over to &lt;a href=&quot;;&gt;;/a&gt; and sign up for our announcement list.&lt;/p&gt;
  317. &lt;p&gt;When I last wrote about keyboards here, I&amp;#039;d just completed my first fully homebrew design - the Mark 2 keyboard. From my phrasing, it was pretty clear that I intended to tell you about the Mark 3 that I&amp;#039;d already built.&lt;/p&gt;
  318. &lt;p&gt;&lt;a href=&quot;; title=&quot;Homebrew Mark 3 Prototype by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Homebrew Mark 3 Prototype&quot; height=&quot;600&quot; src=&quot;; width=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  319. &lt;p&gt;&lt;em&gt;Mark 3 Keyboard&lt;/em&gt;&lt;/p&gt;
  320. &lt;p&gt;The Mark 3 was an attempt to build the most compact, yet reasonably ergonomic keyboard I could. It was also the first time I got to drive the lasercutter myself. As such, the folks at Danger!Awesome had me use plywood rather than acrylic.&lt;/p&gt;
  321. &lt;p&gt;The keys were arranged in what&amp;#039;s known as a &amp;#039;symmetric stagger&amp;#039; It was quite compact. And I didn&amp;#039;t like it at all. Among other things, the thumb keys just weren&amp;#039;t as comfortable as I wanted.&lt;/p&gt;
  322. &lt;p&gt;&lt;a href=&quot;; title=&quot;mark 4 keyboard prototype by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;mark 4 keyboard prototype&quot; height=&quot;600&quot; src=&quot;; width=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  323. &lt;p&gt;&lt;em&gt;Mark 4 Keyboard&lt;/em&gt;&lt;/p&gt;
  324. &lt;p&gt;The Mark 4 was the first thing that started to feel right. It was also my first foray into &lt;a href=&quot;;&gt;TRON&lt;/a&gt;-style thumb keys. I loved them. And hated them. I got the angles and positioning wrong. And my brilliant idea of having two rows per-thumb was a total bust. They just made it harder to hit either row. But it looked cool. Man did it look cool.&lt;/p&gt;
  325. &lt;p&gt;&lt;a href=&quot;; title=&quot;Mark 5 Keyboard by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Mark 5 Keyboard&quot; height=&quot;600&quot; src=&quot;; width=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  326. &lt;p&gt;&lt;em&gt;Mark 5 Keyboard&lt;/em&gt;&lt;/p&gt;
  327. &lt;p&gt;The Mark 5, I finished just in time for Valentine&amp;#039;s Day. A friend remarked that it looked kind of like a heart. So I made it look a lot like a heart. It was actually pretty good, but had a couple fatal flaws.&lt;/p&gt;
  328. &lt;p&gt;I was late for my lasercutting appointment when I decided to place the heart...and I misaligned it. I ended up having to dremel notches into a couple of the number-row keys in order to get everything to fit. The thumb keys with a shared central diamond seemed like a great idea when I was designing it, but in practice it was a pain to use. It was really hard to hit the top key in the diamond. For the keymap I was using at the time, that was the Control key. Emacs-using friends absolutely hated it. I got enough time typing on the Mark 5 that I finally started getting comfortable...except that I found my pinkies just sort of hanging out over the edges of the keyboard much of the time. It took a little while, but at Kaia&amp;#039;s urging, I added an extra column for each pinkie on later models. This dramatically improved the usability and comfort for me.&lt;/p&gt;
  329. &lt;p&gt;&lt;a href=&quot;; title=&quot;A study for the Mark 6 Keyboard Prototype. by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;A study for the Mark 6 Keyboard Prototype.&quot; height=&quot;800&quot; src=&quot;; width=&quot;600&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  330. &lt;p&gt;This was right around when my 3D printer finally showed up. I spent most of a month teaching myself the rudiments of 3D modeling with OpenSCAD. It took a lot of tweaking to be able to reliably generate keyboard &amp;#039;plates&amp;#039; that would reliably seat keyswitches without being so tight they caused the switches to bind or so loose the switches popped out.&lt;/p&gt;
  331. &lt;p&gt;&lt;a href=&quot;; title=&quot;Mark 6 Keyboard by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Mark 6 Keyboard&quot; height=&quot;600&quot; src=&quot;; width=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  332. &lt;p&gt;&lt;em&gt;Mark 6 Keyboard&lt;/em&gt;&lt;/p&gt;
  333. &lt;p&gt;The interesting things about the Mark 6 were:&lt;/p&gt;
  334. &lt;ul&gt;
  335. &lt;li&gt;It was 3D printed. Each of the &amp;#039;hand&amp;#039; plates took 3-4 hours to print. The bottom shell took about 12.&lt;/li&gt;
  336. &lt;li&gt;The key columns were splayed to better line up with where your fingers end up when you reach&lt;/li&gt;
  337. &lt;li&gt;It was tented -- The middle of the keyboard was just slightly taller than either side.&lt;/li&gt;
  338. &lt;li&gt;It had a rather significant negative slope -- the part of the keyboard under your wrists was higher than the part further away from you.&lt;/li&gt;
  339. &lt;li&gt;The keyplates were separate from the shell of the keyboard. This made it really easy to iterate on key layout separately from keyboard shape.&lt;/li&gt;
  340. &lt;/ul&gt;
  341. &lt;p&gt;The things that sucked about the Mark 6 were:&lt;/p&gt;
  342. &lt;ul&gt;
  343. &lt;li&gt;The column splaying was far too wide. I could reach everything, but it wasn&amp;#039;t particularly comfortable.&lt;/li&gt;
  344. &lt;li&gt;The negative slope was far too pronounced. It was just uncomfortable to use with the bottom of the keyboard flat on the desk.&lt;/li&gt;
  345. &lt;li&gt;I still hadn&amp;#039;t added the extra columns Kaia had suggested.&lt;/li&gt;
  346. &lt;/ul&gt;
  347. &lt;p&gt;&lt;a href=&quot;; title=&quot;Mark 7 Keyboard by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Mark 7 Keyboard&quot; height=&quot;600&quot; src=&quot;; width=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  348. &lt;p&gt;&lt;em&gt;Mark 7 Keyboard&lt;/em&gt;&lt;/p&gt;
  349. &lt;p&gt;The Mark 7 was a fairly straight forward iteration from the Mark 6. Neat things about the Mark 7 included:&lt;/p&gt;
  350. &lt;ul&gt;
  351. &lt;li&gt;Splitting the thumb and finger keys onto two different plates. This let me slightly change the angle between them.&lt;/li&gt;
  352. &lt;li&gt;Switching from a 5 key arc of thumb keys to a four key arc with a key above the arc and a new &amp;#039;palm&amp;#039; key. The palm key, in particular, turned out to be pretty amazing. I use it to enable an additional layer of keys. Arrow keys live under HJKL. {}[] live under YUIO, and so on.&lt;/li&gt;
  353. &lt;li&gt;Slightly reducing inter-column finger splaying.&lt;/li&gt;
  354. &lt;li&gt;Finally adding the extra columns of pinky keys. These meant that the ` = &amp;#039; - keys no longer needed to be hidden away on the second layer.&lt;/li&gt;
  355. &lt;/ul&gt;
  356. &lt;p&gt;What didn&amp;#039;t work so well in the Mark 7:&lt;/p&gt;
  357. &lt;ul&gt;
  358. &lt;li&gt;The keyboard shape was still pretty boxy&lt;/li&gt;
  359. &lt;li&gt;The inter-column finger splay was still too wide&lt;/li&gt;
  360. &lt;li&gt;The thumb keys were a bit too far away from the rest of the keyboard.&lt;/li&gt;
  361. &lt;/ul&gt;
  362. &lt;p&gt;&lt;a href=&quot;; title=&quot;2013-07-23 11.20.05 by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;2013-07-23 11.20.05&quot; height=&quot;452&quot; src=&quot;; width=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  363. &lt;p&gt;&lt;em&gt;Mark 8 Keyboard&lt;/em&gt;&lt;/p&gt;
  364. &lt;p&gt;The Mark 8 was my first attempt to make a thin keyboard. It was identical to the Mark 7, except it was printed as two pieces -- a single key plate and a single bottom shell.&lt;/p&gt;
  365. &lt;p&gt;The biggest issues with the Mark 8 were that its shell wasn&amp;#039;t structurally sound and that the front edge of the keyboard was sharp and ended up right in the middle of the user&amp;#039;s palms.&lt;/p&gt;
  366. &lt;p&gt;&lt;a href=&quot;; title=&quot;2013-07-22 12.01.10 by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;2013-07-22 12.01.10&quot; height=&quot;452&quot; src=&quot;; width=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  367. &lt;p&gt;&lt;em&gt;Mark 9 Keyboard&lt;/em&gt;&lt;/p&gt;
  368. &lt;p&gt;I spent a full week teaching myself how to design and 3D-print ball joints for the Mark 9. Two of those days were spent figuring out how to print all the parts of a ball joint as a fully assembled unit. Once I had it pretty well worked out, I realized that I was actually better off printing the two halves separately.&lt;/p&gt;
  369. &lt;p&gt;&lt;a href=&quot;; title=&quot;2013-07-18 18.33.09 by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;2013-07-18 18.33.09&quot; height=&quot;452&quot; src=&quot;; width=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  370. &lt;p&gt;&lt;em&gt;Mark 9 Keyboard, in two pieces&lt;/em&gt;&lt;/p&gt;
  371. &lt;p&gt;Things that were really cool about the Mark 9:&lt;/p&gt;
  372. &lt;ul&gt;
  373. &lt;li&gt;It had a ball joint!&lt;/li&gt;
  374. &lt;li&gt;You could position the two halves independently!&lt;/li&gt;
  375. &lt;li&gt;It was thin!&lt;/li&gt;
  376. &lt;li&gt;It had rounded corners and edges!&lt;/li&gt;
  377. &lt;li&gt;It was the first keyboard I managed to print in ABS rather than PLA. As such, it just felt a lot nicer. Also, the colors were more exciting. (If pushed, I&amp;#039;ll admit that the color choices were dictated by when I ran out of each spool of filament.)&lt;/li&gt;
  378. &lt;li&gt;I slightly reduced the inter-column finger splay. It was starting to feel reasonable.&lt;/li&gt;
  379. &lt;/ul&gt;
  380. &lt;p&gt;Things that could have been better about the Mark 9:&lt;/p&gt;
  381. &lt;ul&gt;
  382. &lt;li&gt;It was basically impossible to use in my lap or tented on a desk -- The balljoint didn&amp;#039;t work well enough to use unless the keyboard was on a flat surface.&lt;/li&gt;
  383. &lt;li&gt;The cables I used between the two halves were too brittle and unwieldy.&lt;/li&gt;
  384. &lt;li&gt;It suffered from the same problem as every other 3D-printed keyboard I&amp;#039;d made to date - When I showed it to someone, they got really excited about the fact that I had a 3D printer. In contrast, whenever I showed someone one of the layered acrylic prototype keyboards I&amp;#039;d built, they got excited about the keyboard.&lt;/li&gt;
  385. &lt;/ul&gt;
  386. &lt;p&gt;&lt;a href=&quot;; title=&quot;2013-08-30 22.56.12 by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;2013-08-30 22.56.12&quot; height=&quot;800&quot; src=&quot;; width=&quot;452&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  387. &lt;p&gt;&lt;em&gt;Mark 10 Keyboard&lt;/em&gt;&lt;/p&gt;
  388. &lt;p&gt;The Mark 10. I don&amp;#039;t have a lot to say about the Mark 10.&lt;/p&gt;
  389. &lt;p&gt;Things that sucked about the Mark 10:&lt;/p&gt;
  390. &lt;ul&gt;
  391. &lt;li&gt;While trying to print it, my 3D printer caught on fire.&lt;/li&gt;
  392. &lt;/ul&gt;
  393. &lt;p&gt;Things that were great about the Mark 10:&lt;/p&gt;
  394. &lt;ul&gt;
  395. &lt;li&gt;I was forced to switch back to layering sheets of lasercut acrylic. While frustrating at the time, it was ultimately really, really good.&lt;/li&gt;
  396. &lt;/ul&gt;
  397. &lt;p&gt;&lt;a href=&quot;; title=&quot;2013-09-18 01.40.18 by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;2013-09-18 01.40.18&quot; height=&quot;452&quot; src=&quot;; width=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  398. &lt;p&gt;&lt;em&gt;Mark 11 Keyboard&lt;/em&gt;&lt;/p&gt;
  399. &lt;p&gt;I built the Mark 11 to take to XOXO. I&amp;#039;d had a lot of time to think and play since I&amp;#039;d made the Mark 9. And the Mark 9 just wasn&amp;#039;t a usable keyboard for me. I procrastinated just a little bit too much and didn&amp;#039;t have enough time to lasercut it myself. I ended up paying the nice folks at Danger Awesome a rush fee to get it cut within 24 hours after I emailed them my EPS files. Like the earlier lasercut keyboards, it was made out of stacked layers of acrylic. I went back to the completely-clear acrylic I&amp;#039;d used in the Mark 3, except this time I made the topmost plate thicker to better protect the key edges as I slid it in and out of my bag and to slightly raise the typist&amp;#039;s hands into a more neutral position. The heart shape didn&amp;#039;t work well with the palm keys -- playing around a little bit, I cut out a medium arc around the palm keys. It looked a little bit like a butterfly.&lt;/p&gt;
  400. &lt;p&gt;In general, I really liked the Mark 11. It was the design in a while that I was actually able to use as my primary keyboard. People I showed it to also liked it. This made me pretty happy. The comment that most blew me away was &amp;quot;If you made a commercial keyboard just like this, you could sell it in the MoMA Shop.&amp;quot;&lt;/p&gt;
  401. &lt;p&gt;There were a few things about the Mark 11 that didn&amp;#039;t work:&lt;/p&gt;
  402. &lt;ul&gt;
  403. &lt;li&gt;It was really heavy. Really, really heavy. It turns out that a 9&amp;quot;x13&amp;quot; sheet of 1/2&amp;quot; thick acrylic is heavy. Who knew?&lt;/li&gt;
  404. &lt;li&gt;The sheet of acrylic that served as the keyplate started cracking pretty quickly. I&amp;#039;d seen that a little bit on earlier designs, but for whatever reason, the the Mark 11 was doing a pretty good imitation of a spiderweb.&lt;/li&gt;
  405. &lt;li&gt;The top layer of acrylic (the one in the butterfly shape) did a really good job of putting not one, but two sharp edges under each palm. On top of that, the positions I&amp;#039;d chosen for the screws that held the keyboard together put screws in a perfect place to bite into your palms.&lt;/li&gt;
  406. &lt;/ul&gt;
  407. &lt;p&gt;&lt;a href=&quot;; title=&quot;2013-10-19 00.16.56 by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;2013-10-19 00.16.56&quot; height=&quot;452&quot; src=&quot;; width=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  408. &lt;p&gt;&lt;em&gt;Mark 12 Keyboard&lt;/em&gt;&lt;/p&gt;
  409. &lt;p&gt;In an effort to cut down size and weight, the Mark 12 changed up the design just a little bit. I made the butterfly shape, now quite intentional, the outer edge of the keyboard. I did my best to keep the footprint the same size as an 11&amp;quot; MacBook Air. To help cut down on weight, I made the bottom layer of the keyboard a bit thinner. To better support the keyplate layer (and cut down on cracking), I made the electronics-wiring layer of the keyboard a full sheet with specific cutouts, rather than a wide outline. To further cut down on cracking, I changed most of the right angle cuts on the keyplate to gently rounded corners. (They may be somewhat out of vogue for web design, but rounded corners are really useful for lasercutting.) I moved the screws so they wouldn&amp;#039;t bite into a typist&amp;#039;s palms. To give it just a little bit more personality (and to make interlayer dust slightly less obvious, I cut the electronics-wiring layer out of translucent orange acrylic. After assembled, I softened the sharp edge under the typist&amp;#039;s palms with a hand file. The layout didn&amp;#039;t change much from the Mark 11. Just about the only thing I did was to tighten the inter-column finger splay just a bit more. Based on a study at Berkeley that claims any key spacing of 17mm or more doesn&amp;#039;t increase error rate or typing pain for large-handed users, I tightened the baseline inter-key spacing to exactly 18mm. (I&amp;#039;d have tried 17mm, but knew that my current keycaps were just too big.)&lt;/p&gt;
  410. &lt;p&gt;The Mark 12 was good. Really good. I liked it. It felt nice to type on. It was fairly compact. It was totally manufacturable. The only real issues I had with it were that the palmrests were about half an inch too small for my hands and I&amp;#039;d misguessed on the lower bound of key spacing I could get away with -- they would sometimes scrape against each other as I pressed them.&lt;/p&gt;
  411. &lt;p&gt;&lt;a href=&quot;; title=&quot;2013-11-01 19.04.55 by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;2013-11-01 19.04.55&quot; height=&quot;452&quot; src=&quot;; width=&quot;800&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  412. &lt;p&gt;&lt;em&gt;Mark 13 Keyboard&lt;/em&gt;&lt;/p&gt;
  413. &lt;p&gt;I&amp;#039;m typing this on the Mark 13 keyboard. I feel more comfortable on it than on any other keyboard at this point. While I&amp;#039;d like the Model 01 to have 17mm or 18mm key spacing, I bumped the spacing on the Mark 13 up to 18.5mm to improve the typing experience with the commodity keycaps I have access to. The Mark 13 also improved the palm rest shape and played around a little bit with the butterfly shape to make it slightly prettier. The biggest change in the Mark 13 is inside. I&amp;#039;m still using the same solder and wire-wrap technique I&amp;#039;ve been using for most of the past year, but the Mark 13 is the first keyboard powered by an Arduino Micro rather than a Teensy.&lt;/p&gt;
  414. &lt;p&gt;The Teensy is a fantastic prototyping platform. And there are several very, very nice opensource keyboard drivers available for it. As I&amp;#039;ve been starting to look at my options for putting the keyboard into production, I&amp;#039;ve been trying to figure out what I want to use for a microcontroller. The Teensy is based on the Atmel ATMega32u4. It&amp;#039;s a neat little single-chip solution that has enough pins to drive a keyboard and a few other peripherals and has native support for acting as a USB device. Unfortunately, the Teensy&amp;#039;s bootloader is proprietary. That means that if I wanted to ship a &amp;quot;Teensy-compatible&amp;quot; keyboard, I&amp;#039;d need to either actually put a Teensy inside the keyboard or license the Teensy bootloader. Neither of those felt right.&lt;/p&gt;
  415. &lt;p&gt;The Arduino Micro has very similar capabilities to the Teensy. It&amp;#039;s based on the same ATMega32u4 microcontroller. It has a comparable (thought slightly reduced) pin count. It costs about the same amount of money. The differences are in the development environment, the bootloader and in the license. As an Arduino, it&amp;#039;s programmable directly in the vanilla Arduino IDE. It even includes native support for &amp;#039;emulating&amp;#039; a USB keyboard and mouse. The bootloader is an AVR109 compatible Arduino bootloader. It&amp;#039;s free to use and modify. The hardware design is &lt;em&gt;also&lt;/em&gt; free to use and modify. So, while an Arduino Micro is around $25, putting all the parts of a Micro on our PCB will cost considerably less. And it&amp;#039;ll be programmable with the Arduino IDE.&lt;/p&gt;
  416. &lt;p&gt;There was one teensy little problem. (Sorry, couldn&amp;#039;t resist.) Nobody had, as far as I could tell, ever released a full keyboard driver for Arduino. But Arduino C was, I was told, really easy to pick up. I hadn&amp;#039;t actually written any C in well over 15 years and the closest to embedded development I&amp;#039;d ever gotten was writing Java for Android. But hey, how hard could it be?&lt;/p&gt;
  417. &lt;p&gt;I wrote the first fully functioning version of &lt;a href=&quot;;&gt;KeyboardioFirmware&lt;/a&gt; in an hour and a half. While watching a movie. While tipsy. It turns out that Arduino really &lt;span style=&quot;text-decoration:underline;&quot;&gt;is&lt;/span&gt; easy to develop for. Since then, I&amp;#039;ve added support for keyboard-driven mouse emulation, multiple keymaps, rudimentary macros and dramatically improved reliability and memory efficiency.&lt;/p&gt;
  418. &lt;p&gt;The big issues I have with the Mark 13 are that it&amp;#039;s heavy and that acrylic scratches and cracks easily. It also traps dust between layers and shows fingerprints and smudges like you wouldn&amp;#039;t believe.&lt;/p&gt;
  419. &lt;p&gt;So, you ask, if the Mark 13 is basically the keyboard I want to ship, what&amp;#039;s next?&lt;/p&gt;
  420. &lt;p&gt;Well, none of the techniques and technologies I&amp;#039;ve been using to prototype are going to work for a production run.&lt;/p&gt;
  421. &lt;p&gt;I&amp;#039;ve been talking to a few potential production partners in Taiwan and China, but folks are being slow to engage.&lt;/p&gt;
  422. &lt;p&gt;It&amp;#039;s time to learn about D4M. (Design for Manufacturing)&lt;/p&gt;
  423. &lt;p&gt;The first and most obvious issue to solve is the circuit board. To date, every single keyboard I&amp;#039;ve built has been hand wired key by key and diode by diode. My friends who are electrical engineers recoil in horror when I tell them that. &amp;quot;But Jesse, it&amp;#039;s so much easier to just design and fab a PCB,&amp;quot; they say. Truth be told, circuit board design terrified me. I had absolutely no idea where to start.&lt;/p&gt;
  424. &lt;p&gt;Most of the Maker movement seems to have standardized on CadSoft EAGLE. It&amp;#039;s relatively user friendly. And I mean relatively. It&amp;#039;s awful, obtuse and incredibly dated. But compared to other CAD packages, it&amp;#039;s astonishingly clean and intuitive. It&amp;#039;s free to use if you&amp;#039;re building open hardware and your board size is below a few inches square. A commercial license of EAGLE that lifts these restrictions is a few thousand dollars. That wasn&amp;#039;t really going to work for me.&lt;/p&gt;
  425. &lt;p&gt;Over the past year, I&amp;#039;ve tried to design a keyboard PCB every few months. It was never really all that pressing and I&amp;#039;d invariably give up in frustration after banging my head against the CAD software for a while. I tried gEDA, KiCAD,, and a host of other packages that don&amp;#039;t spring readily to mind. After some encouragement at a conference in early november, I gave another shot. It worked great, up to a point. By the time I&amp;#039;d built a grid of about 20 keys, their webui was so slow that Chrome would throw the &amp;quot;Kill the naughty page?&amp;quot; dialog after every operation. But I&amp;#039;d designed enough of a circuit that I thought I might understand what to do next.&lt;/p&gt;
  426. &lt;p&gt;I decided to give Upverter a shot next. It was slightly less polished and friendly than, but it coped just fine with the schematic for the entire keyboard. I even managed to get a basic PCB laid out. The problem came in when I was trying to move and angle the keys. Each change took some manual calculation and a relatively large number of clicks. It just wasn&amp;#039;t quite done enough for this project. That said, Upverter was actually pretty nice to use. And when I tried to use their &amp;#039;live chat&amp;#039; feature to ask some how-to questions about the product late on a Friday night, one of the developers walked me through my issues and helped me find workarounds for features they didn&amp;#039;t have yet. This was for a user with a free account. I&amp;#039;ve since upgraded to a paid account. If Upverter can handle what you&amp;#039;re doing, it&amp;#039;s a great choice for circuit design.&lt;/p&gt;
  427. &lt;p&gt;From there, I decided it was time to give KiCAD another shot. Previous attempts at KiCAD failed for a variety of reasons:&lt;/p&gt;
  428. &lt;ul&gt;
  429. &lt;li&gt;I had no idea what I was trying to do&lt;/li&gt;
  430. &lt;li&gt;I was trying to use KiCAD in a Linux VM on a Mac, without an external 3 button mouse&lt;/li&gt;
  431. &lt;li&gt;I had no idea what I was trying to do&lt;/li&gt;
  432. &lt;/ul&gt;
  433. &lt;p&gt;This time things were different:&lt;/p&gt;
  434. &lt;ul&gt;
  435. &lt;li&gt;I had the vaguest idea of what I was trying to do&lt;/li&gt;
  436. &lt;li&gt;I was trying to use KiCAD in a Linux VM on a Mac, with an external 3 button mouse&lt;/li&gt;
  437. &lt;/ul&gt;
  438. &lt;p&gt;Starting with the matrix I&amp;#039;d designed in Upverter and the component definitions from KiCAD-Keyboard-Tutorial, I managed to piece together a keyboard schematic and PCB design. KiCAD&amp;#039;s rotation and placement UI isn&amp;#039;t a whole lot better than Upverter&amp;#039;s, but it&amp;#039;s better enough that I managed to actually get a board designed. All in all, it took me about 4 days. Much of that was tweaking and learning. When I tried redesigning the board from scratch, I had it done in about 4 hours. Lest you think &amp;quot;Ok, he now has a production PCB design. Where&amp;#039;s my damn keyboard?&amp;quot; I should admit that the PCBs I&amp;#039;ve designed to date have a slot for a commercially produced Arduino Micro. The production PCB will need to have an Arduino Micro (including a few surface-mounted components) cloned onto it. I either need to further level up in circuit design or enlist some professional help.&lt;/p&gt;
  439. &lt;p&gt;Once I had what I thought was a reasonable board design, I exported Gerber and Drill files and started shopping them around to PCB prototyping houses. Most of these companies gave me a &amp;quot;quick quote&amp;quot; after I gave them a little bit of metadata and uploaded my Gerbers and drill files. With the exception of Seeed Studio, everybody had a process that involved me interacting with a sales person before my boards got made. Quotes I got back were all over the map. I think the most expensive I got back was a cost of $270 for a single prototype board and 50 for each additional copy. Most were on the order of $100 for the first board and $25 for each additional board with prices falling off the more I ordered. Turnaround times quoted to me ranged from &amp;quot;We can FedEx overnight the boards to you tomorrow, if you&amp;#039;re willing to give us your firstborn child&amp;quot; to &amp;quot;How about we think about making them in two weeks and then put them on a boat?&amp;quot;&lt;/p&gt;
  440. &lt;p&gt;Pretty much everybody had an intro/prototyping offer that would have been a lot cheaper. And pretty much everybody said I wasn&amp;#039;t eligible for it because my boards were way, way too big.&lt;/p&gt;
  441. &lt;p&gt;Golden Phoenix were the most responsive vendor and their sales person actually flagged a technical issue with the Gerber files I&amp;#039;d submitted to them. They weren&amp;#039;t the most cost effective vendor for the quantity of boards I was ordering. That honor went to Seeed Studio&amp;#039;s &amp;quot;Propagate&amp;quot; offering.&lt;/p&gt;
  442. &lt;p&gt;Seeed Studio&amp;#039;s minimum order is 5 boards. As I ran the numbers, it turned out that getting 10 boards would be only a few dollars more than getting 5. So, for $150 in product cost and $50 in FedEx shipping, I have 10 prototype boards that are currently &amp;quot;In Production&amp;quot; and should soon be &amp;quot;Shipped&amp;quot;. I have no illusions about having my first board design actually &lt;span style=&quot;text-decoration:underline;&quot;&gt;work&lt;/span&gt;, but I&amp;#039;m hopeful.&lt;/p&gt;
  443. &lt;p&gt;Once we have our PCB sorted out and our design finalized, we intend to do the whole Kickstarter thing. If you want to know when we&amp;#039;re ready to take your money, head on over to &lt;a href=&quot;;&gt;;/a&gt; and sign up for our announcement list.&lt;/p&gt;
  444. </content>
  445. </entry>
  446. <entry>
  447. <title>Shanghai, late 2013. Day One. (The Electronic Component Market)</title>
  448. <link href=""/>
  449. <updated>2013-12-06T04:47:43Z</updated>
  450. <id></id>
  451. <content type="html">&lt;p&gt;&lt;a href=&quot;; title=&quot;The Bund, As seen from Pudong by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;1024&quot; height=&quot;185&quot; alt=&quot;The Bund, As seen from Pudong&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  452. &lt;p&gt;This was my third trip to Shanghai. The first one was in 1993. The second was in 2010. Things had changed less between the two most recent trips than between the first two trips. That&#39;s hardly surprising. &lt;/p&gt;
  453. &lt;p&gt;The first time I flew into Shanghai, My dad and I flew into Hongiao Airport, took a taxi to the decaying Peace Hotel on the Bund and crashed out for 12 hours. Across the river was &lt;a href=&quot;;&gt;the Oriental Pearl TV Tower&lt;/a&gt; ...and not much else.&lt;/p&gt;
  454. &lt;p&gt;When we woke up, we started making our way through the legions of blue-grey-suited pedestrians and cyclists thronging Nanjing Road.&lt;/p&gt;
  455. &lt;p&gt;We found ourselves in front of a crowded little dumpling place on a side street. After observing for a bit, we figured out the system: hand over some cash and get issued plastic tokens. Push your way through the crowd to the kitchen counter and hand over your tokens in exchange for delicious looking fried dumplings. We were starving. So we pantomimed that we wanted six dumplings. (&lt;a href=&quot;;&gt;Counting on your fingers in Chinese is different than in English.&lt;/a&gt; You can get to 10 on one hand.) We got our six tokens. They were an impossibly cheap 20 cents or so. We pushed our way up to the counter and handed them over. The cook started shoveling little greasy fried balls of pork and deliciousness into a paper bag. He didn&#39;t stop at 6. He didn&#39;t stop at 7. He didn&#39;t stop at 8. Eventually we figured out that we&#39;d bought six orders of four dumplings. Despite our best efforts, we only got through about 20 of them before sharing our bounty with a homeless guy in a park.&lt;/p&gt;
  456. &lt;p&gt;I remember wandering through dusty, sleepy department stores on Nanjing Road. I found the electronics counter tucked away on the 2nd or 3rd floor.  A small box caught my eye. It looked a little like the Gameboy I&#39;d left at home. I was delighted to discover that it was an unlicensed implementation of Tetris that I could &lt;i&gt;almost&lt;/i&gt; fit in my pocket.&lt;/p&gt;
  457. &lt;p&gt;From Shanghai, we set out across what felt like a very broad swath of Eastern China by hard-seat train. My only memory of Shanghai&#39;s main train station is one of low ceilings, signs showing that explosives and fireworks were prohibited on trains and big X-Ray machines for EVERY piece of luggage. The security staff gestured that we didn&#39;t need to scan our bags and just waved us through.&lt;/p&gt;
  458. &lt;p&gt;The second time I was in Shanghai was Christmas 2010. Kaia and I flew into the giant super-modern PuDong airport. From there, we paid a pittance to take the Maglev train into downtown PuDong - the mega-city that the Chinese government built by fiat in what had basically been rice paddies on my first trip to Shanghai.&lt;/p&gt;
  459. &lt;p&gt;We stayed at what was nominally a new-construction Sheraton in Pudong. They upgraded us to a two-room suite on a high floor with a glorious view of the bridges spanning the river and the Bund.&lt;/p&gt;
  460. &lt;p&gt;At one point, I went looking for &#39;interesting&#39; electronics. The recommendation I got put me at what I can only describe as an electronics fake market. I was looking for an interesting Android tablet or something. When I asked about Android phones, I was handed an &#39;Android iPhone! Dual-SIM!&#39; - It looked sort of like an iPhone. The OS it was running was a dumbphone OS upgraded with ripped icons from iOS and support for a resistive touchscreen. The only Android 2.x tablet I was shown...did not boot. Nor did any of the 4 others they took out of plastic wrap to try to demo. Eventually, the salesperson apologized and said she couldn&#39;t show me a working one. In general, though, there was relatively wide availability of high-end tech. When we visited the Super Brand Mall, Best Buy had the relatively complete, if uninspiring selection of gear you&#39;d expect to find at a Best Buy. An underground Apple Store (that wouldn&#39;t look out of place in New York or San Francisco) was situated in the next mall over. Across the street from the two malls was the Oriental Pearl TV Tower. Underneath the tower was a sort of awesome but incredibly kitschy museum of the history of Shanghai.&lt;/p&gt;
  461. &lt;p&gt;Locals were fairly brand-conscious. Sure, I was offered a fake Rolex, but the tout offering it had stationed himself in front of the Rolex shop on Nanjing Road, a few blocks from American Apparel&#39;s China flagship store.&lt;/p&gt;
  462. &lt;p&gt;The phrase I use to sum up my impressions of late 2010 Shanghai is &#39;Starbucks across the street from another Starbucks.&#39;&lt;/p&gt;
  463. &lt;p&gt;But this was supposed to be my 2013 Shanghai travelogue.&lt;/p&gt;
  464. &lt;p&gt;&lt;a href=&quot;; title=&quot;IMG_20131114_064205.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;1024&quot; height=&quot;579&quot; alt=&quot;IMG_20131114_064205.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  465. &lt;p&gt;&lt;i&gt;The view from the airport lounge where I scrambled to install Chrubuntu on my Chromebook.&lt;/i&gt;&lt;/p&gt;
  466. &lt;p&gt;I&#39;m going to skip over the gory details of my IT setup for this trip -- that&#39;s a subject for another post. The very short version is that I arrived with a Google-flavored HTC One with my regular T-Mobile SIM and an ARM Chromebook running Chrubuntu. On my phone, I had access to Twitter and Foursquare. Both devices were signed into a throwaway Google account.&lt;/p&gt;
  467. &lt;p&gt;I arrived, somewhat bedraggled, at PuDong airport. I turned on my phone and was greeted by an SMS telling me that international data roaming in China would be rate-limited to EDGE speeds but would be free. Yay T-Mobile!&lt;/p&gt;
  468. &lt;p&gt;The next thing my phone told me was that in the 14 hours I&#39;d been offline on my way to china, updates for a dozen or so Google apps had been uploaded to the Play Store. It was almost certainly a coincidence.&lt;/p&gt;
  469. &lt;p&gt;I decided that given how tired I was, I could treat myself to a taxi. I spent a few minutes stumbling around the arrivals hall of the airport looking for an ATM. A liveried driver hanging out at an official looking &#39;Ground Transfers&#39; desk tried to convince me that she&#39;d offer me a much better rate to the hotel than the hotel&#39;s airport transfer service. She quoted a number approximately 3x what a cab was supposed to cost. When I told her what a cab cost, she looked a little disappointed, said &#39;taxis are downstairs&#39; and wandered off.&lt;/p&gt;
  470. &lt;p&gt;&lt;a href=&quot;; title=&quot;IMG_20131115_163654.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;579&quot; height=&quot;1024&quot; alt=&quot;IMG_20131115_163654.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  471. &lt;p&gt;&lt;i&gt;Dear San Franciscans - the Shanghainese have developed artificial fog technology and may soon put @carlthefog out of business&lt;/i&gt;&lt;/p&gt;
  472. &lt;p&gt;Stepping out of the airport, I walked into a wall of air. At least it felt that way. It was insanely smoggy. I didn&#39;t find out until later that it had been &#39;keep the kids and grandparents inside, halt construction projects and ban fireworks&#39; smoggy. The cab ride was uneventful. I&#39;d printed a copy of the Chinese-language driving directions from the airport to my hotel during my downtime at the airport in Chicago.&lt;/p&gt;
  473. &lt;p&gt;&lt;a href=&quot;; title=&quot;IMG_20131115_160557.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;579&quot; height=&quot;1024&quot; alt=&quot;IMG_20131115_160557.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  474. &lt;p&gt;&lt;i&gt;Some of the drive from PuDong to Shanghai felt like driving through a megalopolis. Some of it felt like driving through a post-apocalyptic wasteland.&lt;/i&gt;&lt;/p&gt;
  475. &lt;p&gt;I spent the trip splitting my attention between marveling at the endless tracts of buildings across PuDong, Friday afternoon traffic and an email conversation with &lt;a href=&quot;;&gt;Thomas Yao&lt;/a&gt;,the leader of the Shanghai Linux Users&#39; Group. I was pretty shattered, but Thomas talked me into going out for dinner with him later in the evening.&lt;/p&gt;
  476. &lt;p&gt;The cab pulled up at the Sheraton Hongkou, which I&#39;d picked because it had an astonishing promo rate and was located across the street from a subway station on the Shanghai side of the river. What I hadn&#39;t realized at the time was that it was a brand new skyscraper in an area that was otherwise completely un-redeveloped.&lt;/p&gt;
  477. &lt;p&gt;The Sheraton was...well, it was a very, very nice Sheraton. From the bedroom-sized shower with a claw-foot tub and a view of downtown Shanghai to the heated marble floor by the sink and the french press for coffee and the $10 bottle of Evian, it was what you&#39;d expect.&lt;/p&gt;
  478. &lt;p&gt;Heading out for dinner with Thomas, I asked the front desk if the RFID transit card I had in my wallet was a Shanghai subway pass. He told me he thought it was, but wasn&#39;t sure. It didn&#39;t work, so I bought a 40 cent subway ticket to Thomas&#39; office on the Pudong side of the river.&lt;/p&gt;
  479. &lt;p&gt;Coming out of the subway, there was a small flea-market, consisting of sweaters, nuts, roasted snacks and iPhone cases. So many iPhone cases.&lt;/p&gt;
  480. &lt;p&gt;I walked into the GitCafe office to find Thomas and one of his coworkers playing XBox soccer on a giant wallscreen. They finished up their game, we chatted a bit and Thomas and I headed off for dinner. I asked him about the RFID card the clerk thought might be a Shanghai subway card. Thomas pointed out the large text that said &#39;北京&#39; (Beijing) before helping me buy an actual Shanghai subway pass.&lt;/p&gt;
  481. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB180482.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;600&quot; height=&quot;800&quot; alt=&quot;PB180482.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  482. &lt;p&gt;&lt;i&gt;The old TV tower got a new lease on life as the host of the hourly laser show.&lt;/i&gt;&lt;/p&gt;
  483. &lt;p&gt;We had dinner at &lt;a href=&quot;;&gt;代官山&lt;/a&gt;, one of Thomas&#39; favorite restaurants at Super Brand Mall. Very few parts of dinner were things I recognized, but everything was tasty. One of the oddest bits was the drinks, which were some sort of Coca-Cola and citrus concoction with tiny little citrus fruits served in glass bottles heavy enough to kill someone. As we were leaving the mall, the Oriental Pearl TV Tower lit up with a laser light show. Green laserbeams started hitting nearby buildings and giant laser-projected horses stampeded across the tower&#39;s base.&lt;/p&gt;
  484. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB180522.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;PB180522.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  485. &lt;p&gt;&lt;i&gt;Some of the local cafe chains have made fascinating branding choices.&lt;/i&gt;&lt;/p&gt;
  486. &lt;p&gt;We made plans to meet up Wednesday evening at &lt;a href=&quot;;&gt;XinCheJian&lt;/a&gt;, the local hackerspace. From there, I headed home and passed out until morning.&lt;/p&gt;
  487. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB150003.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;600&quot; height=&quot;800&quot; alt=&quot;PB150003.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  488. &lt;p&gt;&lt;i&gt;Consumerism!&lt;/i&gt;&lt;/p&gt;
  489. &lt;p&gt;Saturday, I set off to find the Beijing Street electronic components market Thomas had recommended to me. It was fairly near Nanjing Road, so I hopped on the subway and popped up in front of the Sony Store and a gigantic Forever 21. Across the street was the first block of the Nanjing Road pedestrian mall. As soon as I set foot on the pedestrian mall, the touts hit. &quot;Hey Mister. You want a watch?&quot; &quot;No.&quot; &quot;You want a handbag?&quot; &quot;No.&quot; &quot;Massage?&quot; &quot;No.&quot; &quot;Lady massage? Very sexy girls.&quot; &quot;No.&quot; And it didn&#39;t let up. From there on in, if I was on Nanjing Road, a tout was trying to sell me a Rolex, a designer handbag or a happy-ending massage. Some of the touts were men. Some were women. All were reasonably young. Some were more aggressive about it than others. Some only got in a single question as I walked past. Others followed me for half a block. That&#39;s the last I&#39;ll mention of the touts.&lt;/p&gt;
  490. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB150005.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;PB150005.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  491. &lt;p&gt;&lt;i&gt;Just like home!&lt;/i&gt;&lt;/p&gt;
  492. &lt;p&gt;I walked down Nanjing Road for a couple blocks -- past a mobbed Apple Store, a gourmet grocery store, Gucci and a bunch of other high-end western shops. Guided by Google Maps, I took a right toward Beijing Road. Things quickly became more chaotic. Sidewalks and traffic lights became more...advisory than anything else.   The side street was lined with small local shops, restaurants and...sort of ramshackle holes where there should be more shops.&lt;/p&gt;
  493. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB150012.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;PB150012.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  494. &lt;p&gt;&lt;i&gt;Seconds before, this shop window had been shilling for DeWalt&lt;/i&gt;&lt;/p&gt;
  495. &lt;p&gt;As I hit Beijing Street, things changed again. Apparently that section of Beijing Street is known as &#39;Hardware street.&#39; On the corner as I walked up was a sort of micromall of power tools, hand tools and gas generators. Some of the stuff there was from Chinese brands I&#39;d never heard of like Dongcheng, but there was just as much stuff (and advertising) from DeWalt, Craftsman and Milwaukee.&lt;/p&gt;
  496. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB150025.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;PB150025.jpg&quot;&gt;&lt;/a&gt;
  497. &lt;/p&gt;&lt;p&gt;&lt;i&gt;Plumbing supplies on Beijing Street&lt;/i&gt;&lt;/p&gt;
  498. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB150045.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;PB150045.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  499. &lt;p&gt;&lt;i&gt;Perhaps I could interest you in some industrial springs in a range of festive colors?&lt;/i&gt;&lt;/p&gt;
  500. &lt;p&gt;Walking down Beijing Street, there were whole stretches of shops that sold nothing but magnets or bearings, tubing, connectors or brushes. Across the street, I found the 7 story &lt;a href=&quot;;amp;hl=en&quot;&gt;&quot;Technology Jingcheng Electron Market&quot;&lt;/a&gt;.&lt;/p&gt;
  501. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB150092.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;PB150092.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  502. &lt;p&gt;&lt;i&gt;Every kiosk also sold a range of diodes, capacitors, oscillators and so on, but they weren&#39;t nearly as photogenic.&lt;/i&gt;&lt;/p&gt;
  503. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB150063.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;PB150063.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  504. &lt;p&gt;&lt;i&gt;See. Told you so.&lt;/i&gt;&lt;/p&gt;
  505. &lt;p&gt;I started by wandering in the front door. A few dozen kiosks filled almost all available floor space. The kiosks had demos of the various LEDs they had for sale. They also appeared to sell everything else. Under glass various kiosks had piles of different sorts of switches, diodes, ICs, power adaptors, LCDs and a variety of other parts.&lt;/p&gt;
  506. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB150071.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;PB150071.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  507. &lt;p&gt;&lt;i&gt;Some of the kiosks were filled with unstable stacks of partial reels of surface-mount components.&lt;/i&gt;&lt;/p&gt;
  508. &lt;p&gt;And kids. Kids everwhere. It was Saturday, so everyone just brought their babies, toddlers and 10 year-olds to hang out.&lt;/p&gt;
  509. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB150058.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;PB150058.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  510. &lt;p&gt;&lt;i&gt;Every kiosk had one display case on wheels that served as a door..of sorts.&lt;/i&gt;&lt;/p&gt;
  511. &lt;p&gt;Heading downstairs into the basement, I found more of the same, but also a little more work being done. A few shopkeepers had customers laptops open and were attacking their motherboards with soldering irons. Things in the basement were generally a bit better organized than on the first floor. &lt;/p&gt;
  512. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB160158.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;PB160158.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  513. &lt;p&gt;&lt;i&gt;If you need custom faceplates for your milking machines, this is the place to go.&lt;/i&gt;&lt;/p&gt;
  514. &lt;p&gt;The second floor was...probably about 50% bigger than the first floor and connected to the next building over.  As I was doing the tour of shops that sold nothing but spools of surface-mount microcontrollers (and there were probably about 20 of them), women with small sheafs of paper listing the parts their clients needed would dart in an out of various shops placing or picking up orders.&lt;/p&gt;
  515. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB160125.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;600&quot; height=&quot;800&quot; alt=&quot;PB160125.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  516. &lt;p&gt;&lt;i&gt;At some point, a guy on a powered self-balancing unicycle zoomed past me.&lt;/i&gt;&lt;/p&gt;
  517. &lt;p&gt;I wouldn&#39;t realize it was odd until days later, but not a single person on any of the 5 occupied floors of the component market said a single word to me without me trying to start a conversation first. And I only did that twice.&lt;/p&gt;
  518. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB160157.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;PB160157.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  519. &lt;p&gt;&lt;i&gt;I seriously considered trying to bring one of these soldering station microscopes home in my suitcase.&lt;/i&gt;&lt;/p&gt;
  520. &lt;p&gt;&lt;a href=&quot;;&gt;I make keyboards&lt;/a&gt;. I hadn&#39;t really thought about buying keyboard parts on this trip. Had I planned ahead, I could have gotten someone at the electronics market to design me a PCB for my next model. As I was walking around, I kept an eye on the keyswitches that were being offered for sale, on the off chance that someone had a good deal on the switches I use (or interesting alternatives). Somewhere on the third floor, I finally found someone selling Cherry keyswitches.  The vendor didn&#39;t speak any English (and, to a first approximation, I speak no Chinese.) Using Google Translate, I explained that I wanted to know how much 200 of those keyswitches would cost. One of the two folks behind the counter picks up the switch I wanted and ran off. About 10 minutes later, he turned up again and wrote down a price...which was easily twice what they should cost. I wrote down what I wanted to pay. He shook his head, made an X with his arms and turned away from me. As I walked away, he was taking cameraphone pictures of the keyswitch.&lt;/p&gt;
  521. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB160134.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;PB160134.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  522. &lt;p&gt;&lt;i&gt;Very, very few of the vendors had posted price lists like this one.&lt;/i&gt;&lt;/p&gt;
  523. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB150102.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;PB150102.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  524. &lt;p&gt;&lt;i&gt;There were three of these shops in a row&lt;/i&gt;&lt;/p&gt;
  525. &lt;p&gt;The higher floors of the central market held more and more &#39;finished&#39; goods. The shops in the secondary building tended to sell only a single sort of thing. There were bubblewrap shops. There were X86 CPU shops. There were packaging shops. There were shops that only made faceplates. There were cabling shops. You get the idea.&lt;/p&gt;
  526. &lt;p&gt;I got all the way to the top of the market without finding another vendor selling keyswitches. There had to be one -- the merchant with the high price really clearly hadn&#39;t left the building when he&#39;d run off to get me a price. But it was lunch time and I was a little burned out on electronic components.&lt;/p&gt;
  527. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB160129.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;PB160129.jpg&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  528. &lt;p&gt;&lt;i&gt;If I&#39;d been planning ahead, I probably could have gotten some keyboard PCBs made while I waited.&lt;/i&gt;&lt;/p&gt;
  529. &lt;p&gt;As I was walking across the second or third floor to get to the escalator, I noticed a tiny, tiny little kiosk (maybe 3 feet square) that had some keycaps on their &quot;what we sell&quot; board. Looking closer, they had an awful photocopy of the data sheet for Cherry keyswitches taped to the front of their display case. Getting into a conversation with the seller, it turned out that she had a pretty reasonable selection of Cherry keyswitches and keycaps. Her pricing for keyswitches was among the best I&#39;ve found anywhere, though I know she was still making a decent profit. Her pricing on keycaps was astonishingly good for what she was selling. So I can find it later, her email is and her phone is 021-53083556. The website on her business card doesn&#39;t exist. I walked out about $60 poorer, but 200 Cherry keyswitches and about 700 keycaps richer.&lt;/p&gt;
  530. &lt;p&gt;&lt;a href=&quot;; title=&quot;PB150084.jpg by Jesse Vincent, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;800&quot; height=&quot;600&quot; alt=&quot;PB150084.jpg&quot;&gt;&lt;/a&gt;
  531. &lt;/p&gt;&lt;p&gt;&lt;i&gt;Over the course of the morning, I became a big fan of the Beijing-lu Electronic components market.&lt;/i&gt;&lt;/p&gt;
  532. &lt;p&gt;It was time for lunch.&lt;/p&gt;
  533. </content>
  534. </entry>
  535. <entry>
  536. <title>Airplane Mode for Glass</title>
  537. <link href=""/>
  538. <updated>2013-06-21T04:46:56Z</updated>
  539. <id></id>
  540. <content type="html">&lt;p&gt;I&amp;#039;ve built my first little piece of software for Google Glass.&lt;/p&gt;
  541. &lt;p&gt;I flew home from SF yesterday and realized that there was no way (short of installing a very crashy Settings.apk) to enable Airplane Mode on my Glass.&lt;/p&gt;
  542. &lt;p&gt;That seemed like a reasonable enough &amp;quot;small&amp;quot; starter project.&lt;/p&gt;
  543. &lt;p&gt;This is really, really only for folks who are already comfortable running third party apps on their Glass. If you don&amp;#039;t know how to sideload apps with adb, please don&amp;#039;t install this.&amp;#160;&lt;/p&gt;
  544. &lt;p&gt;You can grab the initial build at:&lt;/p&gt;
  545. &lt;p&gt;&lt;a href=&quot;; target=&quot;_blank&quot; title=&quot;;&gt;;br&gt;&lt;/a&gt;&lt;br&gt;Source lives at&amp;#160;&lt;a href=&quot;; target=&quot;_blank&quot; title=&quot;;&gt;;/a&gt;&lt;/p&gt;
  546. &lt;p&gt;Patches welcome!&lt;/p&gt;
  547. </content>
  548. </entry>
  549. <entry>
  550. <title>Recon MOD Live - a hackable $300 Android wearable (sort of)</title>
  551. <link href=""/>
  552. <updated>2013-05-29T05:30:59Z</updated>
  553. <id></id>
  554. <content type="html">&lt;p&gt;I got a MOD Live HUD from Recon Instruments today.&lt;br&gt;It is, indeed, running Gingerbread.&lt;/p&gt;
  555. &lt;p&gt;As it turns out, if you can get it to install an, it won&amp;#039;t check the signatures. Which means it&amp;#039;s pretty easy to root :)&lt;/p&gt;
  556. &lt;p&gt;Cracking it open, the display is a Kopin, though I don&amp;#039;t yet know which model.&lt;/p&gt;
  557. &lt;p&gt;It&amp;#039;s designed as a look-around display. The prism has a mirrored backing and is wrapped in black plastic. The mirror coating on the prism comes off quite easily with a bit of rubbing alcohol.&lt;/p&gt;
  558. &lt;p&gt;So yeah, rootable Android (2.3) wearable computer. $300.&lt;/p&gt;
  559. &lt;p&gt;More details as the story develops.&lt;/p&gt;
  560. </content>
  561. </entry>
  562. <entry>
  563. <title>Google I/O 2013 &amp; Google Glass</title>
  564. <link href=""/>
  565. <updated>2013-05-19T03:21:12Z</updated>
  566. <id></id>
  567. <content type="html">&lt;div class=&quot;wm Ob8Frf VC&quot;&gt;[crossposted from Google+]&lt;/div&gt;
  568. &lt;div class=&quot;wm Ob8Frf VC&quot;&gt;[tl;dr $300 Android wearable computer with a HUD. Has been shipping for quite some time]&lt;p&gt;&lt;/p&gt;
  569. &lt;p&gt;Growing up and hanging out near Cambridge, MA, I was always fascinated by the &amp;quot;mediaborgs&amp;quot; - the folks around the Media Lab who were building and &lt;strong&gt;using&lt;/strong&gt; wearable computers. I spent a lot of time trying to figure out how I could get myself a rig. At the time, the $1000+ for a heads-up display was more than I could pull off. I played around with sticking the tiniest laptop I could find (and even a bit of PC104 kit) in a bag and using a Twiddler and Emacs with T.V. Raman &amp;#039;s &amp;#160;emacspeak to have a walking-around computing environment with an audio interface. It was pretty neat, but incredibly clunky. I never really got the hang of it.&amp;#160;&lt;/p&gt;
  570. &lt;p&gt;Over the years, I made a bunch of half-hearted attempts to get my hands on head mounted display that was functional enough to use and small enough to actually wear. I&amp;#039;d occasionally look around to see if anyone was selling something that seemed workable. Occasionally, I&amp;#039;d poke at &lt;a class=&quot;ot-anchor&quot; href=&quot;; rel=&quot;nofollow&quot;&gt;;/a&gt; to see if there was anything that looked reasonable. Generally, though, the cheap options cost around $1000 and are really intended for immersive video or gaming experiences. (Or they&amp;#039;re upwards of $10,000 and intended for defense and industrial applications.)&amp;#160;&lt;/p&gt;
  571. &lt;p&gt;Needless to say, Google Glass somewhat piqued my interest. Google aren&amp;#039;t yet making Glass available to folks like me who played the &lt;a class=&quot;ot-hashtag&quot; href=&quot;;&gt;#ifihadglass&lt;/a&gt; game. It sounds like they&amp;#039;re just getting a handle on the initial production run for folks who were at Google I/O last year.&lt;/p&gt;
  572. &lt;p&gt;I got to try Glass pretty early in the conference. The friend demoing it for me was pretty happy with his, but the functionality he was able to show me was...very basic. To a first approximation, all you can do with the current &amp;quot;Mirror&amp;quot; API is to push snippets of text or HTML+CSS to be displayed in the upper-right corner of the wearer&amp;#039;s vision.&lt;/p&gt;
  573. &lt;p&gt;At one of the early Glass talks at I/O, the speaker mentioned that a &amp;quot;GDK&amp;quot; to allow native development was coming soon. Glass is, indeed, Android under the hood. (4.0.x for now) Suddenly, this was looking a little more interesting.&lt;/p&gt;
  574. &lt;p&gt;A couple weeks ago, +Jay Freeman (@saurik) made news by finding an exploit that allowed him to gain root on his Glass. Since then, there&amp;#039;s been a bit of a of a hacker scene growing up around Glass. At dinner on Thursday, I &amp;#160;saw a demo of a patched version of Glass Home running on an Android phone. I&amp;#039;ve heard reports of a homebrew Glass lock-screen app with an improved guest mode, too.&lt;/p&gt;
  575. &lt;p&gt;The one session at I/O that I was not going to miss was &lt;span class=&quot;proflinkWrapper&quot;&gt;&lt;span class=&quot;proflinkPrefix&quot;&gt;+&lt;/span&gt;&lt;a class=&quot;proflink&quot; href=&quot;;&gt;Hyunyoung Song&lt;/a&gt;&lt;/span&gt;&amp;#160; &amp;amp; &lt;span class=&quot;proflinkWrapper&quot;&gt;&lt;span class=&quot;proflinkPrefix&quot;&gt;+&lt;/span&gt;&lt;a class=&quot;proflink&quot; href=&quot;;&gt;P.Y. Laligand&lt;/a&gt;&lt;/span&gt;&amp;#160; talk on &amp;quot;Voiding your warranty: Hacking glass&amp;quot; ( Linked below, since I can&amp;#039;t figure out how to inline it in G+.) Having been shut out of a few over-full sessions earlier in the conference, I went and sat second-row center at the previous session in the same room -- and learned a bunch of useful stuff about what&amp;#039;s coming in Google Analytics. (During the GA session, I was seated next to a guy who looked to be trying to get his new Chromebook Pixel into developer mode. I...tried to be helpful. I was a little bit embarrassed to realize that &amp;#160;he was none other than &lt;span class=&quot;proflinkWrapper&quot;&gt;&lt;span class=&quot;proflinkPrefix&quot;&gt;+&lt;/span&gt;&lt;a class=&quot;proflink&quot; href=&quot;;&gt;Liam McLoughlin&lt;/a&gt;&lt;/span&gt;&amp;#160; (@hexxeh), who, uh, knows a little bit about ChromeOS.&amp;#160;&lt;/p&gt;
  576. &lt;p&gt;Getting there early was a good call. The session was packed. &amp;#160;Really packed.&lt;/p&gt;
  577. &lt;p&gt;H.Y. and P.Y. demoed how to use adb to push a launcher app and a settings app to your Glass and how to pair a Bluetooth HID device (which just works) and talked a little bit about what one can do by treating Glass as just a &amp;quot;regular&amp;quot; Android device. Porting &lt;span class=&quot;proflinkWrapper&quot;&gt;&lt;span class=&quot;proflinkPrefix&quot;&gt;+&lt;/span&gt;&lt;a class=&quot;proflink&quot; href=&quot;;&gt;K-9 Mail&lt;/a&gt;&lt;/span&gt;&amp;#160; looks incredibly plausible. I&amp;#039;m really glad we never gave up on QVGA support.&lt;/p&gt;
  578. &lt;p&gt;Then they got into the good stuff. How to unlock and root your Glass. It&amp;#039;s.. really easy. And exactly how you&amp;#039;d assume you&amp;#039;d do it.&amp;#160;&lt;br&gt;&lt;a class=&quot;ot-anchor&quot; href=&quot;; rel=&quot;nofollow&quot;&gt;;/a&gt; is cameraphone shot of the slide from their deck.&lt;/p&gt;
  579. &lt;p&gt;To explain just how far one could go, H.Y and P.Y. demoed that one could use one of the Linux Installers on the Play Store to install an Ubuntu chroot on Glass. They said that they&amp;#039;d gotten the idea for the demo from &lt;span class=&quot;proflinkWrapper&quot;&gt;&lt;span class=&quot;proflinkPrefix&quot;&gt;+&lt;/span&gt;&lt;a class=&quot;proflink&quot; href=&quot;;&gt;Greg Priest-Dorman&lt;/a&gt;&lt;/span&gt;&amp;#160; who &amp;quot;does his development in Emacs on Glass.&amp;quot;&amp;#160;&lt;/p&gt;
  580. &lt;p&gt;The world of computing is a very small place. I remember corresponding with Greg when he was at Vassar in the late &amp;#039;90s. If I recall correctly, my friend &lt;span class=&quot;proflinkWrapper&quot;&gt;&lt;span class=&quot;proflinkPrefix&quot;&gt;+&lt;/span&gt;&lt;a class=&quot;proflink&quot; href=&quot;;&gt;Dave Barker&lt;/a&gt;&lt;/span&gt;&amp;#160;mentioned to Greg that I had a Twiddler I hadn&amp;#039;t fallen in love with. He was hoping to get to try out and I was a flaky Wesleyan undergrad, though I&amp;#039;m pretty sure we met and he showed me his wearable when I finally got up to visit friends at Vassar.&lt;/p&gt;
  581. &lt;p&gt;Chatting with a few other Googlers, it sounds like there&amp;#039;s a fair contingent of Glass developers who use emacs (and possibly emacspeak) on Glass.&lt;/p&gt;
  582. &lt;p&gt;So yeah, after the Hacking Glass session, I..really, really want to get back to wearables stuff. As soon as I can get my hands on a Glass, I will.&lt;/p&gt;
  583. &lt;p&gt;I think I&amp;#039;ve found something to tide me over.&lt;/p&gt;
  584. &lt;p&gt;On more than one occasion, Artur Bergman has told me how amazingly amazing his ski goggles with a heads-up display are. They have a bunch of skiing-related sensors. I just sort of assumed that they had some little microcontroller and a custom OLED superimposed on the faceplate.&lt;/p&gt;
  585. &lt;p&gt;I was wrong. The folks who make the goggles, &lt;a class=&quot;ot-anchor&quot; href=&quot;; rel=&quot;nofollow&quot;&gt;;/a&gt;, &amp;#160;were exhibiting at I/O. Their next gen product, &amp;quot;Jet&amp;quot;, &amp;#160;is a Glass-esque setup with (not-see-through) HMD, an HD camera, bluetooth, wifi, a gigahertz ARM chip running what they say will be a fully unlocked build of Jellybean capable of running regular Android apps. It&amp;#039;s going to ship &amp;quot;later in 2013&amp;quot; for &amp;quot;less than a thousand dollars.&amp;quot;&lt;/p&gt;
  586. &lt;p&gt;So, that&amp;#039;s pretty cool. But I can&amp;#039;t have one today. As I talked to them a bit more about their existing product, I found out that it was...not quite what I expected. It&amp;#039;s a QVGA (320x240) display that they say looks like a 14&amp;quot; screen 5 feet away. It&amp;#039;s powered by...a device running (the slightly dated) Android&amp;#160;Gingerbread. (In a previous version of this post, I accidentally said it was running Froyo)&amp;#160;&lt;/p&gt;
  587. &lt;p&gt;Me: &amp;quot;So, I could buy a set of your ski goggles for $449 and rip them apart and get a wearable computer running Android with a heads up display.&amp;quot;&lt;/p&gt;
  588. &lt;p&gt;Guy from Recon: &amp;quot;Well, you could.The HUD is designed to be taken out of one set of ski goggles and put in new goggles when you upgrade. Bu&lt;br&gt;
  589. t, that&amp;#039;s kind of a pain in the neck. It&amp;#039;d be easier and cheaper just to buy the HUD from our webshop as a standalone unit. It&amp;#039;s $300.&amp;quot;&lt;/p&gt;
  590. &lt;p&gt;Me: &amp;quot;...&amp;quot;&lt;/p&gt;
  591. &lt;p&gt;Me: &amp;quot;...&amp;quot;&lt;/p&gt;
  592. &lt;p&gt;Me: &amp;quot;And this is shipping? I can order it today and you already have them in stock?&amp;quot;&lt;/p&gt;
  593. &lt;p&gt;Recon: &amp;quot;Oh yeah, I mean this &lt;em&gt;is&lt;/em&gt; the old model. It&amp;#039;s been out for a while. We&amp;#039;ve actually discounted it from $400 to $300. It&amp;#039;s running Froyo. The new one is much nicer and will be out later this year.&amp;quot;&lt;/p&gt;
  594. &lt;p&gt;Me: &amp;quot;Please take my money&amp;quot;&lt;/p&gt;
  595. &lt;p&gt;So yeah. $300 wearable Android device. Has been shipping for quite a while. You can buy one today. I ordered mine before blogging about it. I&amp;#039;ll report back once I&amp;#039;ve gotten to play with it.&lt;/p&gt;
  596. &lt;p&gt;To answer the obvious question:&lt;/p&gt;
  597. &lt;p&gt;Yes, I will be building a version of K-9 Mail for heads up displays.&lt;/p&gt;
  598. &lt;p&gt;To answer the other obvious question:&lt;/p&gt;
  599. &lt;p&gt;Yes, I&amp;#039;m going to be playing with building a Bluetooth input device or two for Android wearables.&lt;/p&gt;&lt;/div&gt;
  600. </content>
  601. </entry>
  602. <entry>
  603. <title>Mark 2 Keyboard</title>
  604. <link href=""/>
  605. <updated>2013-04-27T19:22:18Z</updated>
  606. <id></id>
  607. <content type="html">&lt;p&gt;It&amp;#039;s been quite a while since I&amp;#039;ve written about my keyboard hacking project.&lt;/p&gt;
  608. &lt;p&gt;Since I wrote up the Mark 1 keyboard, I&amp;#039;ve made 5 more keyboards. I&amp;#039;ve learned a bunch about soldering, I&amp;#039;ve learned how to operate a laser cutter and I&amp;#039;ve learned a bit about 3D printing. I&amp;#039;ve also learned a bit about ergonomics and keyboard design.&lt;/p&gt;
  609. &lt;p&gt;I&amp;#039;m going to take this chronologically, even though that means I&amp;#039;m going to tell you about stuff that I later discovered was...not so right. So, bear with me through some clunky keyboard prototypes. It gets better. This post documents work from January, 2013.&lt;/p&gt;
  610. &lt;p&gt;To recap, the Mark 1 keyboard was based on the shell from the &lt;a href=&quot;;&gt;ErgoDox&lt;/a&gt;. It was a two-hand split layout, which turns out not to work well when you type with your keyboard in your lap. I had the ErgoDox 3D printed by &lt;a href=&quot;;&gt;ShapeWays&lt;/a&gt;. It was very expensive. Expensive enough that buying a 3D printer didn&amp;#039;t sound like a bad idea. It actually sounded like a vaguely plausible idea. The 3D printer I ordered, an Aluminatus from &lt;a href=&quot;;&gt;Trinity Labs&lt;/a&gt; was going to take a while to ship, so I started looking around for other options. (They have since started shipping. The production units are more expensive than the beta version I got.)&lt;/p&gt;
  611. &lt;p&gt;It turns out that Cambridge, MA is home to &lt;a href=&quot;;&gt;danger!awesome&lt;/a&gt;, a storefront lasercutter shop. Yeah. It&amp;#039;s as awesome as it sounds. It isn&amp;#039;t particularly dangerous, though. I&amp;#039;m not complaining.&lt;/p&gt;
  612. &lt;p&gt;To get a lasercutter to do its thing. you need to feed it a vector file describing the cuts you want it to make.&lt;/p&gt;
  613. &lt;p&gt;To design the Mark 2 keyboard, I used my favorite vector drawing package -- Omingraffle. I drew a bunch of 14mm holes in a pattern that seemed to make sense and sent Danger Awesome an eps file.&lt;/p&gt;
  614. &lt;p&gt;&lt;a class=&quot;asset-img-link&quot; href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Mark2-as-shipped&quot; class=&quot;asset  asset-image at-xid-6a00d83456074b69e201901ba1aa0c970b&quot; src=&quot;; title=&quot;Mark2-as-shipped&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  615. &lt;p&gt;Two days later, I dropped by their shop and picked up an 11&amp;quot;x17&amp;quot; sheet of green acrylic with a bunch of 14mm square holes cut out of it.  The nice folks at danger!awesome weren&amp;#039;t quite sure what I was up to, so they saved all the little 14mm square munchkins they&amp;#039;d cut out of the plate.&lt;/p&gt;
  616. &lt;p&gt;&lt;a href=&quot;; title=&quot;With key caps. by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;With key caps.&quot; height=&quot;375&quot; src=&quot;; width=&quot;500&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  617. &lt;p&gt;I brought the sheet home and started sticking Cherry keyswitches into the holes. I quickly discovered that my acrylic sheet was too thick for the keyswitches to stay in place when I pushed them into the holes. It turns out that Cherry keyswitches have cute little clips designed to fit into 1.5mm thick plates. I quickly hit upon a solution that eventually turned out to have been a really bad idea. I...painted superglue around the edge of each key. This had the intended effect of making the keyswitches stay put. It also had the unintended effect of making the keyswitches somewhat...scratchy feeling.&lt;/p&gt;
  618. &lt;p&gt;I soldered up the Mark 2 very similarly to how I did the Mark 1. It...took a lot less time, though. Probably only 10-12 hours. (Since then, I&amp;#039;ve gotten much faster and more accurate. And have better ways of wiring everything up.)&lt;/p&gt;
  619. &lt;p&gt;&lt;a href=&quot;; title=&quot;Matrix fully wired. (Next up: wire in the controller) by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Matrix fully wired. (Next up: wire in the controller)&quot; height=&quot;375&quot; src=&quot;; width=&quot;500&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  620. &lt;p&gt;Rather than use the prototyping wires I used to connect the &lt;a href=&quot;; target=&quot;_blank&quot; title=&quot;Teensy&quot;&gt;Teensy&lt;/a&gt; in the Mark 1 to the keyboard, I decided to try a ribbon cable. I happened to have a bunch of old IDE cables hanging around, so I chopped one end off a cable and started soldering. All in all, it worked pretty well.&lt;/p&gt;
  621. &lt;p&gt;&lt;a href=&quot;; title=&quot;Wired up. Tomorrow: debugging by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Wired up. Tomorrow: debugging&quot; height=&quot;375&quot; src=&quot;; width=&quot;500&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  622. &lt;p&gt;I then had a working least as long as I carefully held it in the air so nothing crushed the key wiring.  I needed a case. The right thing to do was probably to have more parts lasercut, but I was impatient.&lt;/p&gt;
  623. &lt;p&gt;I hopped on my bike and pedaled down to the neighborhood Michael&amp;#039;s to look for something I could use for a case. After a bit of wandering around, I found something that worked reasonably well...A picture frame designed for 11&amp;quot;x17&amp;quot; photographs. That got me enough height to make sure my keys and wiring weren&amp;#039;t crushed. I let them keep the glass from the frame &amp;amp; had them cut a matte to the outside dimensions of the frame rather than the inside dimensions. Yeah, my keyboard had a paper back. Not great for a production keyboard, but just fine for a prototype.&lt;/p&gt;
  624. &lt;p&gt;&lt;a href=&quot;; title=&quot;Homebrew Mark 2 by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Homebrew Mark 2&quot; height=&quot;375&quot; src=&quot;; width=&quot;500&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  625. &lt;p&gt;Within a couple days, it became clear that the keyboard was..not perfect.&lt;/p&gt;
  626. &lt;p&gt;I&amp;#039;d designed the hand layouts with a nice finger staggering. but each laid out..straight in front of me. It was a little bit like a flat Kinesis or Maltron. It was typeable, but not amazing.&lt;/p&gt;
  627. &lt;p&gt;The key column layout wasn&amp;#039;t right.&lt;/p&gt;
  628. &lt;p&gt;The keyboard was big.&lt;/p&gt;
  629. &lt;p&gt;The picture frame shell was...heavy.&lt;/p&gt;
  630. &lt;p&gt;It was a reasonble prototype, but I could do better.&lt;/p&gt;
  631. &lt;p&gt;Next up would be the Mark 3. It wasn&amp;#039;t right, either.&lt;/p&gt;
  632. </content>
  633. </entry>
  634. <entry>
  635. <title>Pinkies and your brain.</title>
  636. <link href=""/>
  637. <updated>2013-01-08T21:12:16Z</updated>
  638. <id></id>
  639. <content type="html">&lt;p&gt;Your pinkies are not exactly your most...adept fingers. I don&amp;#039;t mean to imply that I&amp;#039;d be happy to lose mine, but I&amp;#039;m also not exactly happy that the standard QWERTY keyboard sticks keys like Shift, Return, Delete, Tab and Escape out of the way where you need to stretch your pinkies to whack them. If you&amp;#039;re an emacs user and have remapped Caps Lock to Control, things don&amp;#039;t exactly get easier for your poor left pinkie.&lt;/p&gt;
  640. &lt;p&gt;As I&amp;#039;ve been starting to research keyboard design, I came across a tidbit about the placement of the Shift keys -- The earliest Remington typewriters (the ones by the guy who devised QWERTY) were strictly uppercase affairs. The competition added lowercase through a simple if somewhat...brute force hack. They added a second keyboard. Remington contrived something else - they welded lowercase type to the same hammers as as the uppercase letters and contrived a mechanism to literally shift the typewriter&amp;#039;s platen up so the lowercase type would make an impression rather than the uppercase type.&lt;/p&gt;
  641. &lt;p&gt;As you might guess from that sort of a solution, there was an engineer involved. Apparently, an engineer who didn&amp;#039;t want to spend time reengineering something they&amp;#039;d already built. So, when they went looking for a place to put their new platen shift keys, guess what they did with em? They bolted them on the side and a little out of the way.&amp;#160;&lt;/p&gt;
  642. &lt;p&gt;And that, my friends, is why Shift lives where it does.&lt;/p&gt;
  643. &lt;p&gt;Another paper I was reading alluded to a study that said that one can not properly touch type on a keyboard with more than 50 keys. Looking down at my macbook air&amp;#039;s keyboard...yeah. A few more than 50.&lt;/p&gt;
  644. &lt;p&gt;&lt;a class=&quot;asset-img-link&quot; href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Macbook_air_laptop_key_13_keyboard&quot; border=&quot;0&quot; class=&quot;asset  asset-image at-xid-6a00d83456074b69e2017d3fa324e6970c image-full&quot; src=&quot;; title=&quot;Macbook_air_laptop_key_13_keyboard&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  645. &lt;p&gt;Even a happy hacking has more keys than that:&lt;/p&gt;
  646. &lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;;&gt;&lt;/p&gt;
  647. &lt;p&gt;So I set about trying to figure out a keyboard layout that wouldn&amp;#039;t put so much emphasis on your least awesome fingers. I&amp;#039;m working from the ErgoDox keyboard design I wrote about earlier.&lt;/p&gt;
  648. &lt;p&gt;&amp;#160;&lt;/p&gt;
  649. &lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;;&gt;&lt;/p&gt;
  650. &lt;p&gt;Those of you who are big into counting might count just over 75 keys there. But the basic layout of the keyboard is what I currently have to work with.&lt;/p&gt;
  651. &lt;p&gt;The layout I&amp;#039;m currently using is pictured below. What I&amp;#039;ve done is to eliminate all but a single column for each pinkie in favor of an additional &amp;quot;blue shift&amp;quot; layer. So far, I&amp;#039;m finding it fairly comfortable and getting used to it pretty quickly. I&amp;#039;d love comments and questions, though.&lt;/p&gt;
  652. &lt;p&gt;
  653. &lt;a href=&quot;; title=&quot;A reduced travel keyboard layout by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;A reduced travel keyboard layout&quot; height=&quot;281&quot; src=&quot;; width=&quot;500&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  654. &lt;p&gt;(Yes, I&amp;#039;m at 52 keys, not 50)&lt;/p&gt;
  655. </content>
  656. </entry>
  657. <entry>
  658. <title>A pound of Sculpey</title>
  659. <link href=""/>
  660. <updated>2013-01-03T21:30:46Z</updated>
  661. <id></id>
  662. <content type="html">&lt;p&gt;I&#39;m starting to play around with what my first fully-homebrew keyboard design might look like.&amp;nbsp;&lt;/p&gt;
  663. &lt;p&gt;This is my first pass at the left half of a keyboard:&lt;/p&gt;
  664. &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  665. &lt;p&gt;&lt;a href=&quot;; title=&quot;Keyboard Mock-up by jesse, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;375&quot; height=&quot;500&quot; alt=&quot;Keyboard Mock-up&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  666. </content>
  667. </entry>
  668. <entry>
  669. <title>Building a Keyboard: Part 2</title>
  670. <link href=""/>
  671. <updated>2012-12-09T21:24:27Z</updated>
  672. <id></id>
  673. <content type="html">&lt;h3&gt;An explanation of what I&amp;#039;m trying to do by writing this up&lt;/h3&gt;
  674. &lt;p&gt;When I started in on this project, I was a complete electronics newbie. I had no memory of holding a soldering iron. (Though as soon as that rosin core got hot, I recognized the smell. I&amp;#039;m pretty sure I must have soldered as a kid or in a past life or something.) I made...a number of mistakes as I built my first keyboard, but in the end I have a fully working keyboard. I&amp;#039;m attempting to recount, from memory, everything I did. Especially everything I did wrong. If you know what you&amp;#039;re doing, you probably laughed or cried a fair bit as you read part 1 of this writeup. If you &lt;em&gt;don&amp;#039;t&lt;/em&gt; know what you&amp;#039;re doing, it&amp;#039;s my hope that this writeup shows you just how easy it is to build something that you might otherwise consider out of reach.&lt;/p&gt;
  675. &lt;h3&gt;Wiring up the left hand side for testing&lt;/h3&gt;
  676. &lt;p&gt;As I finished off Part 1 yesterday, I&amp;#039;d just managed to get the matrix on the left hand side of the keyboard wired up. From there, I wired up some temporary leads to the rows and columns on the left side. I used adapted breadboard wires from &lt;a href=&quot;;&gt;Adafruit&lt;/a&gt;. These have the advantage of plugging directly into the pins on the Teensy++ microcontroller. If I was working from a PCB, this wouldn&amp;#039;t be necessary, but, since I didn&amp;#039;t have a PCB to work from I was doing this freehand.&lt;/p&gt;
  677. &lt;p&gt;Once I got the rows and columns connected to the Teensy, I found some bad solder joints. I used the solder sucker to undo my bad joints and redid them.&lt;/p&gt;
  678. &lt;h3&gt;Weird interference issues&lt;/h3&gt;
  679. &lt;p&gt;Even once I&amp;#039;d debugged the bad solder joints, I was still seeing...weird behavior. Some areas of the keyboard weren&amp;#039;t generating keystrokes. My first assumption was that I just had a few bad solder joints in a row. So I redid them. That didn&amp;#039;t really help. Sometimes, it &lt;em&gt;changed&lt;/em&gt; the failures a bit, but it didn&amp;#039;t actually fix things. &amp;quot;I know what this is! I must have toasted some of the diodes by shorting or melting them during some of my ham-fisted soldering.&amp;quot; So I replaced the diodes. Nope.&lt;/p&gt;
  680. &lt;p&gt;I unplugged the keyboard from the Teensy and started poking around with the multimeter. I couldn&amp;#039;t find anything wrong at all. I went back and tested the &amp;quot;bad&amp;quot; diodes with the multimeter (like I should have done in the first place). They were all fine.&lt;/p&gt;
  681. &lt;p&gt;I plugged the left hand back into the Teensy. A different region of the keyboard was now misbehaving. Finally, I realized that certain leads from the matrix to the Teensy were misbehaving when they were plugged in next to each other. What was going on is likely obvious to anyone who understands electricity. My assumption is *mumble* *mumble* interference *mumble* shoddy wiring *mumble*.  Rejiggering the wires made the problem go away. Not exactly a shining example of root cause analysis, I know.&lt;/p&gt;
  682. &lt;p&gt;At this point, it was time to try to wire the two halves of the keyboard together. I just needed to find a 13 wire cable.&lt;/p&gt;
  683. &lt;h3&gt;Explanation of my keyboard matrix&lt;/h3&gt;
  684. &lt;p&gt;13 wires, you ask?&lt;/p&gt;
  685. &lt;p&gt;Yes. 13 wires. On &lt;strong&gt;my&lt;/strong&gt; wiring of the ErgoDox shells, I have 5 rows of up to 8 columns.&lt;/p&gt;
  686. &lt;p&gt;&lt;a class=&quot;asset-img-link&quot; href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Keyboard-matrix&quot; border=&quot;0&quot; class=&quot;asset  asset-image at-xid-6a00d83456074b69e2017c346cdd77970b image-full&quot; src=&quot;; title=&quot;Keyboard-matrix&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  687. &lt;p&gt;Normal keyboards are typically wired in something like a 6x18 matrix. Because the ErgoDox is a split layout, it&amp;#039;s effectively wired as two separate mini-keyboards. The &amp;quot;real&amp;quot; ErgoDox design sticks an IO Expander on one of the hands&amp;#039; PCB so it can be connected to the other one by an 1/8 inch headphone-style cable. That&amp;#039;s slightly more advanced than I&amp;#039;m capable of at this point, so I went for the hacky solution - just back-hauling the entire matrix from the left hand over to the right hand side where the Teensy lives.&lt;/p&gt;
  688. &lt;p&gt;There was just one small problem. Finding a 13 wire cable.&lt;/p&gt;
  689. &lt;h3&gt;Trying to find a 13 conductor cable&lt;/h3&gt;
  690. &lt;p&gt;An 8 connector cable is no problem. Easy to find. You can even go up a bit from there. But try as I might, I couldn&amp;#039;t find a reasonable cable with enough wires for me. Then I hit upon an idea.&lt;/p&gt;
  691. &lt;h3&gt;HDMI!&lt;/h3&gt;
  692. &lt;p&gt;Big, thick, heavy HDMI cables. They have lots of pins, right? And lots of conductors inside. A quick check of wikipedia confirmed that there were enough wires inside for me. I briefly looked at adding HDMI ports to each side of the keyboard, but couldn&amp;#039;t find female HDMI ports with suitable solderable headers. (They&amp;#039;re generally fiddly little surface mount components designed to be placed and soldered by a machine, rather than a 30-something just learning basic soldering technique.)&lt;/p&gt;
  693. &lt;p&gt;So I pulled out my wire cutters and &lt;strong&gt;*snip*&lt;/strong&gt;, I had a 13+ connector cable that I could solder to both sides of my keyboard.&lt;/p&gt;
  694. &lt;p&gt;In the end, I actually soldered the matrix on the left hand side of the keyboard directly to the formerly-HDMI cable. On the righthand side, I soldered each wire of the cable to a strand of the breadboard patch cable I bought from Adafruit. (The female ends on each strand of the patch cables comfortably seats one pin from the Teensy and means I don&amp;#039;t have to mess around much when I realize I&amp;#039;ve screwed up and need to rewire things.)&lt;/p&gt;
  695. &lt;p&gt;I  connected both halves of my keyboard to the Teensy and plugged the Teensy into my desktop machine. I hit some keys on the right hand. Everything looked fine. I hit some keys on the left side. And...nothing. Nothing at all.&lt;/p&gt;
  696. &lt;h3&gt;All wires are not the same&lt;/h3&gt;
  697. &lt;p&gt;It turns out that HDMI cables are made of twisted pairs of various gauges of wires. That fail for this application in exactly the same way as my own twisted rats&amp;#039; nest of cabling did.&lt;/p&gt;
  698. &lt;p&gt;&lt;a href=&quot;;&gt;&lt;img alt=&quot;&quot; src=&quot;;&gt;&lt;/a&gt;&lt;/p&gt;
  699. &lt;p&gt;In the end, I took some of the jumper wire I got from Adafruit and just used it as a ribbon cable. I tried chaining it, so I could have a 20&amp;quot; cable rather than an 8&amp;quot; cable, but things started misbehaving.&lt;/p&gt;
  700. &lt;p&gt;I threaded the jumper cable from the left hand to the right and got it connected to the Teensy. What I had at this point wasn&amp;#039;t &lt;em&gt;ideal&lt;/em&gt;, but it did &lt;em&gt;work&lt;/em&gt;.&lt;/p&gt;
  701. &lt;h3&gt;Time to put together the keyboard&lt;/h3&gt;
  702. &lt;p&gt;It was time for final assembly. That sounded so nice. &amp;quot;final&amp;quot;. Ha ha ha. No. At a guess, I ended up taking the keyboard shell apart and putting it back together about 20 times after this point.&lt;/p&gt;
  703. &lt;p&gt;So, I grabbed the back halves of the keyboard shell and carefully aligned them on top of the front halves. I grabbed some screws I had lying about and....they didn&amp;#039;t fit. The screw heads were just a little bit too big to fit in the screw holes printed into the back shell of the ErgoDox.&lt;/p&gt;
  704. &lt;p&gt;In Part 1, I described the SLS (Selective Laser Sintering) process Shapeways used to 3D print my keyboard shell. What I ended up with is just white plastic -- It&amp;#039;s fairly easy to customize. In this case, I started my customization by picking up my Leatherman and starting to carve out the edges of the screw holes one at a time.  This technique was good enough to get the right hand side of the keyboard fully put together.  During my initial final assembly, I managed to over-tighten one of the screws causing the plastic on the bottom side of the case to snap, leaving me down one screw hole. Thankfully, Dox (and/or his co-conspirators) nicely over-provisioned the keyboard shell with screws. Being down one screw isn&amp;#039;t a significant hardship.&lt;/p&gt;
  705. &lt;p&gt;I flipped the keyboard over and connected it up to my desktop and started testing each of the keys....and found that I had a few new key failures. I unscrewed all the screws I&amp;#039;d just managed to tighten and set to work with the multimeter and soldering iron. Mostly, it seems I managed to stress the solder joints connecting the column wires to the keyswitches. A little bit of work with the solder sucker and soldering iron and I was ready for reassembly. I managed to repeat this process a few times. I&amp;#039;m now...rather better at freehand solder joints than I was when I started this project. None of this would have been an issue with a PCB to mount my keyswitches in.&lt;/p&gt;
  706. &lt;p&gt;Now that the right hand was behaving, I was ready to screw the left side together. My screws still didn&amp;#039;t fit in the holes I needed to sink them into.&lt;br&gt;
  707. The correct solution would have been to wait until the next morning and walk down to the hardware store and buy properly sized screws. As you can tell from what I&amp;#039;ve already written, I haven&amp;#039;t exactly done everything...correctly.&lt;/p&gt;
  708. &lt;p&gt;Rather than whittle out the screw holes on the left side, I hit upon a technique that seemed to work for me, but is probably quite dangerous and prone to catastrophe. Kids, don&amp;#039;t try this at home until and unless an expert weighs in and says I&amp;#039;m just being overly dramatic.&lt;/p&gt;
  709. &lt;p&gt;The shell of my keyboard is made from plastic. Sure, it&amp;#039;s not injection-molded like most plastic you&amp;#039;ll find in a commercial product, but it has most of the properties of regular plastic. I already described how it snaps when it&amp;#039;s subjected to too much stress. It also melts when it gets hot. Perhaps you see where I&amp;#039;m going?&lt;/p&gt;
  710. &lt;p&gt;I carefully aligned the back shell of the left hand on top of the front shell. I picked up one of my slightly-too-big screws. I placed the screw in the hole I wanted to secure. It did not seat itself properly because the screw head had a larger diameter than the hole I intended it to fill. I turned the temperature of my soldering iron way up. (As I said in the previous paragraph: &lt;strong&gt;Kids, don&amp;#039;t try this at home.&lt;/strong&gt;) I rested the tip of the soldering iron on the screw I hoped to sink. I applied a small amount of pressure with the soldering iron. As it became warm, the screw began to sink into the plastic. As it became warm, the plastic began to emit a noxious odor. When the screw appeared to be properly seated, I removed the soldering iron. This seemed to work quite well and I used the same technique for the remainder of the screws.&lt;/p&gt;
  711. &lt;h3&gt;I can&amp;#039;t press the reset button&lt;/h3&gt;
  712. &lt;p&gt;I think I mentioned earlier that the way one uploads new firmware to the Teensy is by tapping a little black reset button.&lt;/p&gt;
  713. &lt;p&gt;&lt;a href=&quot;; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;;&gt;&lt;/a&gt;&lt;/p&gt;
  714. &lt;p&gt;That button drops the Teensy into upload mode so you can blow new firmware into its tiny little brain.  When you&amp;#039;re using a Teensy on a breadboard, this is nice and easy. You can use a finger or a small screwdriver or a tweezer or just about anything to tap that little black button. When it&amp;#039;s sealed away inside your keyboard, it&amp;#039;s a little bit harder to press. I really, really, really didn&amp;#039;t want to have to disassemble my keyboard every time I wanted to reprogram it. So I took advantage of one of the properties of plastic I&amp;#039;ve already written about. I did something that would probably get me kicked out of electronics class, especially if it&amp;#039;s not done in a well ventilated area.&lt;/p&gt;
  715. &lt;p&gt;One should never plunge one&amp;#039;s soldering iron into plastic. One should never then hold one&amp;#039;s soldering iron inside a piece of plastic and slowly melt out a groove of plastic. When one is finished doing things one should never do, one should carefully clean one&amp;#039;s soldering iron while it&amp;#039;s still hot.&lt;/p&gt;
  716. &lt;p&gt;That completed, I could now easily tap the Teensy&amp;#039;s reset button with the keyboard fully assembled.&lt;/p&gt;
  717. &lt;h3&gt;Time to switch to the production firmware!&lt;/h3&gt;
  718. &lt;p&gt;I carefully tapped each key on my keyboard. Finally, every key registered. Each key only registered once. I was ready to switch the &lt;a href=&quot;; target=&quot;_blank&quot;&gt;Humble Hacker firmware&lt;/a&gt; from &amp;quot;matrix discovery mode&amp;quot; to keyboard mode. That way, rather than each key telling me its coordinates in the matrix, it would instead, you know, generate a keystroke. I&amp;#039;m told this is a desirable property in a keyboard.&lt;/p&gt;
  719. &lt;h3&gt;Keys aren&amp;#039;t registering. WTF?&lt;/h3&gt;
  720. &lt;p&gt;I realize I should step back a bit and describe the firmware build environment, at least a little bit.&lt;/p&gt;
  721. &lt;p&gt;Getting the keyboard firmware built was fairly straightforward, though it did involve a bit of cobbling things together. The Humble Hacker firmware seemed to be the most flexible option for &amp;quot;new keyboard, new matrix&amp;quot; (as opposed to &amp;quot;upgrade an old keyboard&amp;quot;), though there were a number of other options available. At some point, the author broke apart a single &amp;quot;keyboard&amp;quot; repository into a set of repositories - &amp;quot;firmware&amp;quot;, &amp;quot;hardware&amp;quot;, &amp;quot;remapper&amp;quot; and &amp;quot;kspec&amp;quot;. I actually had the most luck following the instructions from the &amp;quot;keyboard&amp;quot; repository which is marked as &amp;quot;DEAD&amp;quot;.&lt;/p&gt;
  722. &lt;p&gt;In addition to the Humble Hacker source, I needed to install the &lt;a href=&quot;; target=&quot;_blank&quot;&gt;Teensy Loader&lt;/a&gt; in order to blow firmware into the Teensy.&lt;/p&gt;
  723. &lt;p&gt;To build that firmware, I needed a crosscompiler toolchain. The &lt;a href=&quot;;&gt;last time&lt;/a&gt; I needed a cross-compiler toolchain, I had to commit unspeakable acts involving multiple bootstrapping builds of &lt;tt&gt;gcc&lt;/tt&gt;, insane sets of shell scripts and &lt;a href=&quot;; target=&quot;_blank&quot;&gt;a summoning grid&lt;/a&gt;. It was bad enough that I ended up just installing a compiler on a &lt;a href=&quot;; target=&quot;_blank&quot;&gt;Nokia N800&lt;/a&gt; and building things there.&lt;/p&gt;
  724. &lt;p&gt;Thankfully, things are easier these days.&lt;/p&gt;
  725. &lt;p&gt;I downloaded &lt;a href=&quot;; target=&quot;_blank&quot;&gt;an installable cross-compiler toolchain&lt;/a&gt;. It took about 10 minutes. No lurking horrors needed to be placated with the offering of a child-to-be-born. No contracts in blood. No bootstrap compiler. Not even a shell script.&lt;/p&gt;
  726. &lt;p&gt;I recall a little bit of futzing around to try to get the &lt;tt&gt;kspec&lt;/tt&gt; tool to build from the Humble Hacker repository. In the end &lt;a href=&quot;; target=&quot;_blank&quot;&gt;I just used a prebuilt version&lt;/a&gt;.&lt;/p&gt;
  727. &lt;p&gt;So, back to the keyboard build-out.&lt;/p&gt;
  728. &lt;p&gt;I turned off the &amp;quot;matrix discovery mode&amp;quot; in the humble hacker firmware. I did the bare minimum I needed to get the &amp;quot;Q&amp;quot; key to print a &amp;quot;Q&amp;quot; on screen. I rebuilt the firmware, tapped the little black button on the Teensy with a screwdriver and flashed the new firmware.&lt;/p&gt;
  729. &lt;p&gt;Ready for glory, I tapped &amp;quot;Q&amp;quot; and...nothing.&lt;/p&gt;
  730. &lt;p&gt;I reflashed the firmware and tried again. Nothing.&lt;/p&gt;
  731. &lt;p&gt;I turned matrix discovery mode back on. Everything was great.&lt;/p&gt;
  732. &lt;p&gt;I reflashed the firmware and tried again. Nothing.&lt;/p&gt;
  733. &lt;h3&gt;UTSL&lt;/h3&gt;
  734. &lt;p&gt;I opened up the source to the Humble Hacker firmware and started reading code.  Apparently, it&amp;#039;s more common to wire your diodes on the columns, rather than the rows.&lt;/p&gt;
  735. &lt;p&gt;Oops.&lt;/p&gt;
  736. &lt;p&gt;At this point, I was pretty good at rewiring the keyboard. I was also pretty sick of rewiring the keyboard. But there was an easier way.&lt;/p&gt;
  737. &lt;h3&gt;Lie to the firmware&lt;/h3&gt;
  738. &lt;p&gt;&lt;em&gt;Why yes, Mr. Firmware. My keyboard does have 10 columns and 14 rows.&lt;/em&gt; (Astute readers will note that doesn&amp;#039;t jibe very well with my claim of an a 5x8 matrix on each hand. It turned out to be a little bit easier to give each hand 5x7 to itself and then to double up on one &amp;quot;row&amp;quot;.)&lt;/p&gt;
  739. &lt;h3&gt;Success.&lt;/h3&gt;
  740. &lt;p&gt;My &amp;quot;Q&amp;quot; registered just fine.&lt;/p&gt;
  741. &lt;p&gt;I filled in more of the kspec matrix.&lt;/p&gt;
  742. &lt;pre&gt;&lt;span style=&quot;font-family:&amp;#039;&quot;&gt;Keyboard:Doxy
  743. Matrix:
  744. /*  F4      F3      F7      F5      F6      D4      D3      D2      D1      D0                  */
  745. /*  0       1       2       3       4       5       6       7       8       9                   */
  746. Row:  EQUAL   TAB     CAPS    LSHIFT  BLQ     --      --      RALT    PGUP    PGDN      /*  0  C7 */
  747. Row:  1       Q       A       Z       LBRKT   --      --      --      --      --        /*  1  C3 */
  748. Row:  2       W       S       X       RBRKT   --      --      --      --      --        /*  2  C4 */
  749. Row:  3       E       D       C       LFING1  --      --      --      --      --        /*  3  C6 */
  750. Row:  4       R       F       V       LFING2  --      --      --      --      --        /*  4  C5 */
  751. Row:  5       T       G       B       BKSP    --      --      --      --      --        /*  5  C1 */
  752. Row:  HOME    LIDX2   LIDX3   LCTRL   DELETE  --      --      --      --      --        /*  6  C0 */
  753. Row:  --      --      LORDER  LGRN2   LFUNC   --      --      --      --      --        /*  6  C2 */
  754. Row:  --      --      --      --      --      RIDX1   RIDX2   RIDX3   RCTRL   ENTER     /*  7  B1 */
  755. Row:  --      --      --      --      --      6       Y       H       N       SPACE     /*  8  B2 */
  756. Row:  --      --      --      --      --      7       U       J       M       LARROW    /*  9  B4 */
  757. Row:  --      --      --      --      --      8       I       K       COMMA   DARROW    /*  10 B3 */
  758. Row:  --      --      --      --      --      9       O       L       PERIOD  UARROW    /*  11 B5 */
  759. Row:  --      --      --      --      --      0       P       SEMI    SLASH   RARROW    /*  12 B7 */
  760. Row:  --      --      --      --      --      MINUS   BSLASH  QUOTE   RSHIFT  INS       /*  13 B0 */
  761. /*       0   1   2   3   4   5   6   7   8   9   */
  762. ColPins:PF4 PF3 PF7 PF5 PF6 PD4 PD3 PD2 PD1 PD0
  763. /*       0   1   2   3   4   5   6   7   8   9   10  11  12  13  14 */
  764. RowPins:PC7 PC3 PC4 PC6 PC5 PC1 PC0 PC2 PB1 PB2 PB4 PB3 PB5 PB7 PB0&lt;/span&gt;
  765. &lt;/pre&gt;
  766. &lt;p&gt;I filled in the matrix-to-keys table. I&amp;#039;ll spare you the bulk of that table, but to give you the flavor of things, it looks like this:&lt;/p&gt;
  767. &lt;pre&gt;&lt;span style=&quot;font-family:&amp;#039;&quot;&gt;  Key:Q Map:q_and_Q                                    tl:&amp;quot;Q&amp;quot;
  768. Key:W Map:w_and_W                                    tl:&amp;quot;W&amp;quot;
  769. Key:E Map:e_and_E                                    tl:&amp;quot;E&amp;quot;
  770. Key:R Map:r_and_R                                    tl:&amp;quot;R&amp;quot;
  771. Key:T Map:t_and_T                                    tl:&amp;quot;T&amp;quot;
  772. Key:Y Map:y_and_Y                                    tl:&amp;quot;Y&amp;quot;&lt;/span&gt;
  773. &lt;/pre&gt;
  774. &lt;p&gt;The Humble Hacker firmware has support for multiple (toggleable) keyboard layers. You can do just about anything you want. Native Dvorak keyboard? No problem. Native Colemak keyboard? Sure thing. Design your own. You can do that if you want. You can&amp;#039;t reprogram the keyboard without installing a firmware update, but there&amp;#039;s no reason you couldn&amp;#039;t write firmware that could do that.&lt;/p&gt;
  775. &lt;h3&gt;Keycaps I ordered from WASD&lt;/h3&gt;
  776. &lt;p&gt;Knowing (hoping) that I would eventually have a keyboard I needed to type on, I had ordered a set of keycaps from &lt;a href=&quot;; target=&quot;_blank&quot;&gt;WASD Keyboards&lt;/a&gt; earlier in the year. I&amp;#039;d ordered, basically, &amp;quot;one keyboard&amp;quot; of keys. &lt;/p&gt;
  777. &lt;h3&gt;Keycap shapes&lt;/h3&gt;
  778. &lt;p&gt;I set about placing the right keycaps on the right keys. Just click em in place, right? Not so much. If you look at most modern keyboards (other than laptop or ultra-thin keyboards), you&amp;#039;ll see that the keys have a pleasing sculpted shape. Each row has its own shape.&lt;/p&gt;
  779. &lt;p&gt;&lt;a href=&quot;; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;;&gt;&lt;/a&gt;&lt;/p&gt;
  780. &lt;p&gt;The ErgoDox shape isn&amp;#039;t exactly the same as your typical desktop keyboard. Nor does it have all the same keys. It needs a couple weird-shaped vertical keys and a whole slew of slightly-wider-than-normal keys. Once I got a full set of keys on the keyboard, it felt...weird. The shapes just didn&amp;#039;t fit.&lt;/p&gt;
  781. &lt;h3&gt;Now, where have I seen this layout before?&lt;/h3&gt;
  782. &lt;p&gt;I hadn&amp;#039;t payed incredibly close attention to the layout of the ErgoDox - It had some properties I really cared about (like keys aligned in columns and clusters of keys designed to be pressed with your thumbs). Past that, it was just the first thing that looked even vaguely plausible.&lt;/p&gt;
  783. &lt;p&gt;Once I actually thought about it, I realized where I&amp;#039;d seen a layout like that before. It was, in fact, glaringly obvious. I just hadn&amp;#039;t realized &lt;strong&gt;how&lt;/strong&gt; glaringly obvious it was.&lt;/p&gt;
  784. &lt;p&gt;The ErgoDox Keyboard&lt;/p&gt;
  785. &lt;p&gt;&lt;a href=&quot;; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;;&gt;&lt;/a&gt;&lt;/p&gt;
  786. &lt;p&gt;The Kinesis Contoured Keyboard&lt;/p&gt;
  787. &lt;p&gt;&lt;a href=&quot;; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;;&gt;&lt;/a&gt;&lt;/p&gt;
  788. &lt;p&gt;It just so happened that I had an old, dead Kinesis lying around. (Everybody does, right?) I harvested its keycaps and started pulling the keys I&amp;#039;d bought from WASD off of the ErgoDox. As I did so, I managed to yank one of the keyswitches up. After a small detour to the soldering station, I was back in business. (While I had the keyboard open, I locked down most of the keys by painting the edges of the keyswitches with superglue.)I was rather more careful as I pulled the remaining keycaps. I&amp;#039;d been using my fingers for the first few.&lt;/p&gt;
  789. &lt;p&gt;&amp;#160;&lt;/p&gt;
  790. &lt;p&gt;After the accident, I switched to a key-puller. Yep, there&amp;#039;s a specialized tool for pulling keys off a keyboard. A basic key-puller looks like this:&lt;/p&gt;
  791. &lt;p&gt;&amp;#160;&lt;/p&gt;
  792. &lt;p&gt;&lt;a href=&quot;; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;;&gt;&lt;/a&gt;&lt;/p&gt;
  793. &lt;p&gt;That&amp;#039;s what I started with. As I continued, I managed to dislodge another few keys, so I dug out a higher-end key-puller that WASD had sent me free with my keycap order:&lt;/p&gt;
  794. &lt;p&gt;&lt;a href=&quot;; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;;&gt;&lt;/a&gt;&lt;/p&gt;
  795. &lt;h3&gt;Finally, the working keyboard&lt;/h3&gt;
  796. &lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;;&gt;&lt;/p&gt;
  797. &lt;h3&gt;Thanksgiving&lt;/h3&gt;
  798. &lt;p&gt;I spent Thanksgiving in northern Virginia with family. I&amp;#039;d brought along my new keyboard. TSA at Logan were....curious about my keyboard. And surprised I don&amp;#039;t work at MIT. But totally comfortable with weird hardware with lots of bad solder joints.&lt;/p&gt;
  799. &lt;p&gt;Shortly after getting to Virginia, I noticed that my &amp;quot;A&amp;quot; key was frequently generating two &amp;quot;A&amp;quot; characters each time I tapped it. I wasn&amp;#039;t 100% sure what was wrong, but based on past experience, I was willing to go with my gut. I would have been willing to bet money that it was a bad solder joint.&lt;/p&gt;
  800. &lt;p&gt;My father-in-law was quite accommodating and I soon found myself at the kitchen table warming up his soldering rig.&lt;/p&gt;
  801. &lt;p&gt;Five minutes later, I had an A key that generated only a single &amp;quot;A&amp;quot;.&lt;/p&gt;
  802. &lt;h3&gt;All told, It took me nearly 40 hours of work&lt;/h3&gt;
  803. &lt;p&gt;How do I know how long this took, you ask? I spent a number of years in consulting and am careful to run a timer for everything I do so I can charge appropriately. No, wait. That&amp;#039;s not it. I&amp;#039;ve never been much good at time accounting. I didn&amp;#039;t think very hard about how long it was taking me to build my first keyboard. I didn&amp;#039;t really want to think very hard about it. I sort of wish I didn&amp;#039;t know how long it took. But I do. &lt;/p&gt;
  804. &lt;p&gt;Remember how, back in Part 1, I said that as I sat down for my first soldering experiment I started the pilot of Community on Hulu? Well, as I was futzing with the firmware, I ran out of Community to watch. That&amp;#039;d be 71 half-hour episodes. To have _something_ on as I was finishing up, I put on the pilot of Modern Family. I...did not enjoy that and will not be repeating the mistake.&lt;/p&gt;
  805. &lt;h3&gt;So, do I like it?&lt;/h3&gt;
  806. &lt;p&gt;Yes. It&amp;#039;s not quite my ideal keyboard or keyboard layout and is different enough than everything I&amp;#039;ve ever spent time typing on that I&amp;#039;m still getting somewhat fatigued using it for more than a short period if time, but I&amp;#039;m getting better.&lt;/p&gt;
  807. &lt;p&gt;It&amp;#039;s nicely portable. I quite like being able to fold it in half and tuck it away for transport.&lt;/p&gt;
  808. &lt;p&gt;I know how it works. A friend commented that this is one keyboard I&amp;#039;d hate to spill something into. Thinking about it, I realized that I&amp;#039;m actually less worried about something bad happening to this keyboard. I&amp;#039;m confident that, given minimal (and fairly ubiquitous) tools I could repair it without too much effort.&lt;/p&gt;
  809. &lt;h3&gt;Where am I headed next?&lt;/h3&gt;
  810. &lt;p&gt;I have...ideas for some novel keyboard designs that I&amp;#039;d like to try out. When I&amp;#039;m back from holiday travel, I&amp;#039;m going to start in on an original design. I&amp;#039;m not 100% sure what I&amp;#039;m going to build, but it might be something with a layout like this:&lt;/p&gt;
  811. &lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;;&gt;&lt;/p&gt;
  812. </content>
  813. </entry>
  814. <entry>
  815. <title>Building a Keyboard: Part 1</title>
  816. <link href=""/>
  817. <updated>2012-12-08T23:39:23Z</updated>
  818. <id></id>
  819. <content type="html">&lt;p&gt;In early 2012, I ran across a fascinating project on the keyboard forums at The ErgoDox is a project by some gifted hobbyists to build a split ergonomic keyboard inspired by &lt;a href=&quot;; target=&quot;_blank&quot;&gt;the Key64 Project&lt;/a&gt;. The Key64, in turn, counts the µTron, TypeMatrix, Maltron and Kinesis keyboards among its influences. The right place to read up on the ErgoDox is probably &lt;a href=&quot;; target=&quot;_blank&quot;&gt;this thread on;/a&gt;, since &lt;a href=&quot;; target=&quot;_blank&quot;&gt;;/a&gt; is still fairly spartan.&lt;/p&gt;
  820. &lt;p&gt;As soon as I saw it, I signed up to buy an ErgoDox kit when the folks designing it were ready to start the group-buy process. Being somewhat mechanically disinclined (I&amp;#039;m a software guy), I said that I&amp;#039;d pay extra to have someone else solder it together for me. And then I waited. And waited. And waited. Don&amp;#039;t get me wrong -- It&amp;#039;s a free, open-source project. My impatience is not a reason for someone else to work any faster. But I was excited.&lt;/p&gt;
  821. &lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;;&gt;&lt;br&gt;
  822. &lt;img alt=&quot;&quot; src=&quot;;&gt;&lt;/p&gt;
  823. &lt;p&gt;Right away, I ordered roughly 80 Cherry &amp;quot;blue-stem&amp;quot; MX keyswitches and 1N4148 diodes from &lt;a href=&quot;; target=&quot;_blank&quot;&gt;Digikey&lt;/a&gt; or &lt;a href=&quot;; target=&quot;_blank&quot;&gt;Mouser&lt;/a&gt;. I don&amp;#039;t recall which. Both are great vendors. (Generally, I find that I prefer keyboards with brown-stem Cherry keyswitches, but I was curious about the clickier-sounding blues. They&amp;#039;re not bad, but from here on in, I&amp;#039;m back to brown-stem switches.)&lt;/p&gt;
  824. &lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;;&gt;&lt;/p&gt;
  825. &lt;p&gt;I went out and bought a &lt;a href=&quot;;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B000BRC2XU&amp;amp;linkCode=as2&amp;amp;tag=fsck-20&quot; target=&quot;_blank&quot;&gt;Weiler WES51 soldering iron&lt;/a&gt;. (Disclosure: That&amp;#039;s an Amazon affiliate link. I earn money when you buy things through it.) At the same time, I picked up some solder, a pair of pliers, some de-soldering braid, &lt;a href=&quot;;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B005C789EU&amp;amp;linkCode=as2&amp;amp;tag=fsck-20&quot;&gt;a brass-wire sponge soldering iron cleaner and some &lt;/a&gt;&lt;a href=&quot;;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B000RB38X8&amp;amp;linkCode=as2&amp;amp;tag=fsck-20&quot;&gt;helping hands&lt;/a&gt;.&lt;/p&gt;
  826. &lt;p&gt;I bought a pair of &lt;a href=&quot;; target=&quot;_blank&quot;&gt;Teensy++ microcontrollers&lt;/a&gt; from PJRC. Initially, I opted for the ones with pins. I later regretted that. Still later, I unregretted it. The Teensy is a tiny little circuit board built around an 8bit Amtel AVR processor and a MiniUSB port. It has an Arduino compatibility mode, but I&amp;#039;ve only worked with it in its native personality. PJRC provides Mac, Linux and Windows versions of a tool to install new firmware onto the Teensy over USB. You just hit the &amp;quot;reset&amp;quot; button and the Teensy reboots into program mode.&lt;/p&gt;
  827. &lt;p&gt;Over the course of a week, everything showed up at my doorstep. I played a little bit with the soldering iron. I wired up four keyswitches to a breadboard, loaded the sample &amp;quot;USB Keyboard demo&amp;quot; firmware from PJRC&amp;#039;s website onto the teensy and made letters show up on the screen. Neat! I then put everything on the shelf and didn&amp;#039;t really touch it for months.&lt;/p&gt;
  828. &lt;p&gt;In September, I noticed that 3D designs for a prototype shell for the keyboard had shown up on Designs for the PCBs were (intentionally) absent. For a variety of reasons, the project&amp;#039;s creators didn&amp;#039;t want to ship PCB designs before they were ready. Nonetheless, I downloaded the .stl files for the keyboard&amp;#039;s shell and made my way over to &lt;a href=&quot;; target=&quot;_blank&quot;&gt;Shapeways&lt;/a&gt;. I uploaded the .stl files and a few minutes later, Shapeways told me that if I chose their standard laser-sintered white plastic, I was looking at a cost of about $230. This was...slightly pricier than I&amp;#039;d expected. Because I wasn&amp;#039;t actually sure that I was going to be able to do anything useful without those PCBs, I only ordered the top sides of the keyboards. I made a deal with myself: If I managed to wire up at least one side of the keyboard and get it to output characters, I&amp;#039;d buy the bottoms, too.&lt;/p&gt;
  829. &lt;p&gt;Still, the folks designing the ErgoDox (mostly Dox himself) hadn&amp;#039;t released their PCB designs, though they&amp;#039;d done an initial run of prototype boards to validate their design. But I was impatient.&lt;/p&gt;
  830. &lt;p&gt;Two weeks later, I got a package in the mail from Shapeways containing the top halves of an ErgoDox shell. They were...dusty. (The way Shapeways&amp;#039; 3D printing tech of choice works is that they fire a laser mounted on a plotter into a big tub of plastic dust. It traces one (very, very thin) layer of your design in the plastic dust. Then platform holding the object being printed drops a tiny, tiny bit into the bin and the laser melts the next layer of dust onto your design.) I rinsed off the shells and started popping 70-odd keyswitches into 70-odd 4mm x 4mm holes. Then I put keycaps on top of the keyswitches. I had an incredibly high-quality non-working fake plastic keyboard!&lt;/p&gt;
  831. &lt;p&gt;It took another week or two, but I decided I wasn&amp;#039;t going to wait for the ErgoDox team. I set up a soldering station at my desk, pulled out the right-hand side of the keyboard. Inspired by lowpoly&amp;#039;s &lt;a href=&quot;; target=&quot;_blank&quot;&gt;Apple M0110 Today&lt;/a&gt;, I decided I&amp;#039;d try to wire the keyboard freehand. That sounds fairly hardcore. It&amp;#039;s not. (It&amp;#039;s nowhere near as hardcore as designing a PCB.)&lt;/p&gt;
  832. &lt;p&gt;It turns out that Keyboards are really, really simple. A keyboard is just a matrix of keys. You wire up the rows to one set of analog lines on a microcontroller. You wire up the columns to another set. If your rows are A,B,C,D and E, your columns will be 1,2,3,4,5 and so on. Typically, &amp;quot;Esc&amp;quot; is in the upper left-hand corner of your keyboard. That&amp;#039;d be the A1 position in your matrix. When you tap Esc, the keyswitch momentarily connects the &amp;quot;A&amp;quot; IO to the &amp;quot;1&amp;quot; IO. On some keyboards, you&amp;#039;ll find the &amp;quot;Tab&amp;quot; key. That&amp;#039;s connected to B and to 1. The &amp;quot;1&amp;quot; key would be connected to A and to 2. The astute reader might now ask &amp;quot;So, what if I hit 1 and &amp;quot;Tab&amp;quot; at the same time. Is that going to generate a spurious &amp;quot;Esc&amp;quot;? Or maybe a &amp;quot;Q&amp;quot;? Yep. Well, it will if you&amp;#039;ve wired up your matrix without &lt;a href=&quot;;&gt;diodes&lt;/a&gt;. That&amp;#039;s called &amp;quot;ghosting&amp;quot;. I remember making my Apple //e ghost when I&amp;#039;d finally learned to type fast enough that I was sometimes hitting keys at almost the same time. Rather than attempt to explain how diodes let you build a matrix that doesn&amp;#039;t ghost, I&amp;#039;ll refer you to &lt;a href=&quot;; target=&quot;_blank&quot;&gt;someone who actually understands how this works&lt;/a&gt;.&lt;/p&gt;
  833. &lt;p&gt;I got out my pliers and my diodes and my keyswitches. It was at this point that I realized that I didn&amp;#039;t actually have any wire to wire my keyboard with. So, I did what any self-respecting geek would do. If it were 1985. I walked into a Radio Shack. Voluntarily. It turns out that behind the Beats By Dre®, displays full of Blackberries®, and low quality iPhone® accessories, they still sell some DIY supplies. I could have bought my diodes there. For only a few orders of magnitude more money than they&amp;#039;re worth. They even sell Arduino kits now. I picked up a spool of copper wire and was on my way back home within a few minutes.&lt;/p&gt;
  834. &lt;p&gt;Once at home, I made a few startling discoveries. 1) I did not own wire cutters. 2) The wire I&amp;#039;d bought was way, way too stiff to work with very easily. As I was getting settled, I started up the pilot of &lt;em&gt;Community&lt;/em&gt; on Hulu. (I&amp;#039;d never seen it.) and started wiring the diodes in series across the rows of keyswitches. It took a while, but I got all the keys on the right-hand wired up. After that, I started cutting tiny little lengths of wire and stripping the ends with a pair of nail clippers. I wired up all the columns of keys with tiny little hops of green wire. And horrible, horrible drippy solder joints.&lt;/p&gt;
  835. &lt;p&gt;I stuck the Teensy into a breadboard and wired up a couple rows and columns to a few of its IO pins. I grabbed the best, most flexible USB Keyboard driver I could find for the Teensy -- The firmware for the &lt;a href=&quot;; target=&quot;_blank&quot;&gt;Humble Hacker Keyboard&lt;/a&gt;. It&amp;#039;s designed to support multiple &amp;quot;layers&amp;quot; of keys you can access by holding down modifiers. It&amp;#039;s fully programmable. It&amp;#039;s well commented. And it has a &amp;quot;matrix discovery&amp;quot; mode. You don&amp;#039;t need to actually know what pins you&amp;#039;ve wired things up to. You just connect your rows and columns to the Teensy&amp;#039;s various IO ports (The ports have letter+number identifiers like A1 and F6. Those aren&amp;#039;t the same as the examples I used in the keyboard matrix earlier. Then you hit a key and it will print things like &lt;tt&gt;(A1,E2)&lt;/tt&gt;. Then you know that that key&amp;#039;s row is connected to the &lt;tt&gt;A1&lt;/tt&gt; IO line and its column is connected to the &lt;tt&gt;E2&lt;/tt&gt; line.&lt;/p&gt;
  836. &lt;p&gt;At least, that&amp;#039;s how it&amp;#039;s supposed to work.&lt;/p&gt;
  837. &lt;p&gt;Once I got the Humble Hacker firmware installed on the Teensy, I was able to hit a key and have it register as a keypress. Sometimes. I started to triage what was going wrong. Many of my problems were just bad solder joints. As I repaired those, I started to notice that I was only able to generate keypress events for half the keyboard or so. I eventually figured out what I&amp;#039;d done wrong. I&amp;#039;d wired my diodes in series. They&amp;#039;re supposed to be wired in parallel. If I actually understood anything about electronics, this would have been blisteringly obvious.&lt;/p&gt;
  838. &lt;p&gt;I desoldered everything, using copper braid to try to suck up my waste solder.&lt;/p&gt;
  839. &lt;p&gt;Then I started again. I wired up the diodes in parallel -- Each key connected to one side of a diode and the other side of each diode bridged to its neighbors in the row. Rather than using little wires to hop from key to key on the columns, I stripped longer lengths of wire and bent it so that I could solder one length of wire to each key in a column. This proved much less fiddly to solder and much, much more robust.&lt;/p&gt;
  840. &lt;p&gt;Now the matrix barely worked at all. I&amp;#039;d managed to misidentify which direction the diodes should be connected in.(Diodes are directional)&lt;/p&gt;
  841. &lt;p&gt;So I undid everything and started again. I ordered a bunch more diodes. They&amp;#039;re cheap and I was clearly not very good at this.&lt;/p&gt;
  842. &lt;p&gt;
  843. &lt;a class=&quot;asset-img-link&quot; href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Keyboard-matrix&quot; border=&quot;0&quot; class=&quot;asset  asset-image at-xid-6a00d83456074b69e2017c346cdd77970b image-full&quot; src=&quot;; title=&quot;Keyboard-matrix&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  844. &lt;p&gt;Eventually, I was able to get every single key on the right hand side to generate a keypress event. That was good enough for me to go ahead and order the bottom shells for the keyboard. I also ordered a bunch of very useful stuff from &lt;a href=&quot;;&gt;Adafruit&lt;/a&gt;. I bought some very nice tweezers, which made wiring up the diodes a lot easier. I bought proper wire strippers. I bought good pliers. I bought ribbon cable with breadboard-compatible pins on the end. And I bought a &lt;a href=&quot;; target=&quot;_blank&quot;&gt;Solder Sucker&lt;/a&gt;. Best $5 I&amp;#039;ve spent in a long time. Rather than trying to sop up excess solder with copper braid, the Solder Sucker just...vacuums up the hot solder. I also bought a multimeter, which made finding wiring faults much easier. (I&amp;#039;d previously been using an LED soldered to a pair of wires and a battery. Not recommended.&lt;/p&gt;
  845. &lt;p&gt;I started in on the second half of the keyboard. The basic matrix wiring went much quicker. I still screwed it up and redid the entire matrix at least once. I was finally ready to wire the two halves of the keyboard together.&lt;/p&gt;
  846. &lt;p&gt;&lt;em&gt;To be continued&lt;/em&gt;&lt;/p&gt;
  847. </content>
  848. </entry>
  849. <entry>
  850. <title>Keyboards</title>
  851. <link href=""/>
  852. <updated>2012-12-08T20:15:13Z</updated>
  853. <id></id>
  854. <content type="html">&lt;p&gt;I&#39;ve been typing since 2rd grade or so, when my parents bought an Apple ][e.  I started taking notes on a laptop in 8th grade. I tried to take a keyboarding class in 9th grade, since I&#39;d never learned to type properly. Unfortunately, I typed well enough that I actually got kicked out of class.&lt;/p&gt;
  855. &lt;p&gt;These days, I spend a lot of my time writing software. When I&#39;m not doing that, I spend my time making trouble on the Internet. To say that I spend much of my time at a keyboard would be somewhat of an understatement.&lt;/p&gt;
  856. &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  857. &lt;p&gt;&lt;img src=&quot;; alt=&quot;&quot;&gt;&lt;/p&gt;
  858. &lt;p&gt;For many, many years, I was a happy user of the Microsoft Natural Elite keyboards. I say &quot;keyboards&quot; rather than &quot;keyboard&quot; because that particular model is...somewhat inexpensively constructed. It&#39;s the only keyboard I&#39;ve ever met with water-soluble traces. That is to say that getting even a small amount of moisture into it would result in permanent hardware failure.  Its saving grace was that replacements were cheap. Particularly if you bought them in 5-packs. Attempting to find a reasonable link to Amazon, it appears that these keyboards may finally have been discontinued.&lt;/p&gt;
  859. &lt;p&gt;I was visiting family during the week between Christmas and the New Year - and ran across this post by Jeff Atwood on &lt;a href=&quot;;&gt;the Keyboard Cult&lt;/a&gt;. From there, I found my way to &lt;a href=&quot;;&gt;;/a&gt; and eventually to &lt;a href=&quot;;&gt;;/a&gt;.&lt;/p&gt;
  860. &lt;p&gt;
  861. &lt;a class=&quot;asset-img-link&quot; style=&quot;display:inline;&quot; href=&quot;;&gt;&lt;img class=&quot;asset  asset-image at-xid-6a00d83456074b69e2017c346b36bf970b&quot; title=&quot;Colemak&quot; src=&quot;; alt=&quot;Colemak&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  862. &lt;p&gt;It turns out there&#39;s a huge keyboard otaku subculture. People fetishize their favorite obscure keyboard or hyperoptimized key layout. I&#39;d like to claim that I mined their FAQs for recommendations and went on my merry way. But I can&#39;t. I got sucked in. I spent months learning about keyboards. In my bid for typing nirvana, I&#39;ve amassed a fair collection of obscure keyboards. Some of them could easily be mistaken for &quot;normal&quot; keyboards but feature interesting keyswitches or some specialized bit of technology. A few of them are genuinely special.&lt;/p&gt;
  863. &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  864. &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  865. &lt;p&gt;&lt;img src=&quot;; alt=&quot;&quot;&gt;&lt;/p&gt;
  866. &lt;p&gt;Early this spring, I met a Taiwanese keyboard designer and got to play with his latest prototypes while sitting on the polished marble floor of Academica Sinica in Taipei. What I saw there was one of his designs, the VorTex &quot;Pure&quot; 60% keyboard. I&#39;m typing this on a Pure I cajoled out of him shortly thereafter. The Pure uses brown-stemmed Cherry mechanical keyswitches. Unlike the keys on your laptop or a typical modern desktop keyboard, you don&#39;t have to bottom out Cherry keyswitches. They have a subtle &quot;bump&quot; about 2/3 of the way down as you depress them. Once you&#39;ve felt the bump, you can let go. The keys don&#39;t feel as good as an IBM M-series keyboard, but they&#39;re still so much nicer on my hands than most of what I&#39;ve been typing on for the last several decades. The Pure is what&#39;s known as a &quot;60%&quot; keyboard - It has full size keys, but is 60% of the width of a standard 104-key desktop keyboard. It doesn&#39;t have a number pad or a separate section for arrow keys. (If you want arrow keys but no number pad, you&#39;re looking for a &quot;tenkeyless&quot; or &quot;TKL&quot; keyboard.)  The Pure, like the Happy Hacking, puts many of the keys you&#39;d normally reach for on a second layer you access by holding down a function key. For example, the arrows live under the O/J/K/L keys.&lt;/p&gt;
  867. &lt;p&gt;&lt;img src=&quot;; alt=&quot;&quot;&gt;&lt;/p&gt;
  868. &lt;p&gt;Because many of today&#39;s high-quality keyboards are targeted at the gamer market, they have a few features that I&#39;d ordinarily pass on...but secretly enjoy. For example, my Pure has a mode where every single key is lit up with a purple LED backlight. The Pure is a damn fine keyboard. And Justin, its designer, is hard at work on what sounds to be an even nicer successor. But it&#39;s not quite my ideal keyboard. Its layout is startlingly traditional and, like most keyboards, forces my hands to contort in a slightly unnatural way as I type.&lt;/p&gt;
  869. &lt;p&gt;&lt;a href=&quot;;&gt;&lt;img src=&quot;; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  870. &lt;p&gt;Sometime in May or June, I hunted down a 20-year old IBM M-15 adjustable split keyboard. The M-15 is just like those big old IBM keyboards that sound like machine guns. Except it&#39;s split down the middle -- held together with a ball joint that lets you set the two halves at whatever angle you want. You can split it like a butterfly. You can tent the two halves. With a couple more turns of the knob, you can actually split the two halves and type with your hands in much more natural resting positions. It feels stellar to type on, but it&#39;s loud. Loud enough that you can&#39;t use one in public. It&#39;s also heavier than my laptop. (Admittedly, I have a very light laptop.)  It&#39;s also nearly unobtainable - They only made it for two years in the mid-1990s and it wasn&#39;t terribly popular. When it was new, you could buy one from IBM for $179. These days, the few used M15s that show up on eBay sell for between $400 and $900.&lt;/p&gt;
  871. &lt;p&gt;&lt;a href=&quot;;&gt;&lt;img src=&quot;; alt=&quot;&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  872. &lt;p&gt;In September, I found myself on the 14th floor of a Tokyo office building paying rather a large amount of cash for an incredibly obscure µTron ergonomic keyboard. The µTron is the most lovingly designed keyboards I&#39;ve ever seen. It uses the same Topre keyswitches as the famous Happy Hacking keyboard. Unlike the HHKB, it&#39;s got a split &quot;symmetric&quot; staggered layout that&#39;s much less harsh on your left hand than the keyboards you&#39;re used to. It adds a few extra keys designed to be pressed with your thumbs.  The thumb keys have sculpted edges -- The keys you hit on the side have sculpted sides. The keys you hit from the bottom have gently sloping bottom edges. The keys you hit at an angle have a gentle slope originating _on a corner_. When I asked why the µTron is so hard to buy - Why it&#39;s not really sold in stores or outside Japan - the answer I got back was a nice formulation of Catch-22: &quot;Well, it&#39;s very expensive because it&#39;s not mass-produced, so not many people will buy it.&quot;&lt;/p&gt;
  873. &lt;p&gt;I&#39;ve skipped over the Kinesis, the Maltron, the Access-IS POS keyboard, the TypeMatrix (which, even before the Coding Horror blog post, primed me to start thinking about keyboards), the TrulyErgonomic, the KBT Race and the KBC Poker. Each is interesting in its own right and each has a story, but none are the story I&#39;m trying to get to. Tune in next time for &quot;How I came to find myself buying keyswitches and diodes in bulk, ordering 3D prints from ShapeWays and learning to solder freehand.&quot;&lt;/p&gt;
  874. &lt;p&gt;&lt;img src=&quot;; alt=&quot;&quot;&gt;&lt;/p&gt;
  875. </content>
  876. </entry>
  877. <entry>
  878. <title>Today</title>
  879. <link href=""/>
  880. <updated>2012-10-17T19:15:58Z</updated>
  881. <id></id>
  882. <content type="html">&lt;p&gt;For the past couple of months, I&amp;#039;ve been tinkering with Yet Another Todo App. Currently called &amp;quot;Today&amp;quot;, it&amp;#039;s designed to emulate a behavior that turns me from productivity-Clark Kent to productivity-Superman.&amp;#160;&lt;/p&gt;
  883. &lt;p&gt;On days when I&amp;#039;m productive, I start out my morning by writing out a list of everything I need to do. Sometimes, I&amp;#039;ve done that on paper. Sometimes, I&amp;#039;ve done that in a text file. The precise medium doesn&amp;#039;t &lt;strong&gt;really&lt;/strong&gt; matter.&amp;#160;&lt;/p&gt;
  884. &lt;p&gt;There are two things that &lt;strong&gt;do&lt;/strong&gt; matter:&amp;#160;&lt;/p&gt;
  885. &lt;ul&gt;
  886. &lt;li&gt;Before I get sidetracked by life, I start my day by writing out a list.&lt;/li&gt;
  887. &lt;li&gt;At the end of the day, I&amp;#039;m &lt;strong&gt;done&lt;/strong&gt;. No matter how far I&amp;#039;ve gotten, I retire my list at the end of the day. It&amp;#039;s ok if I don&amp;#039;t cross off every task. It&amp;#039;s ok (but not ideal) if I don&amp;#039;t check off any tasks.&lt;/li&gt;
  888. &lt;/ul&gt;
  889. &lt;p&gt;The next day, I do it again. Lists should start from a blank page every single day. Never carry over yesterday&amp;#039;s list to tomorrow.&amp;#160;&lt;/p&gt;
  890. &lt;p&gt;Tasks should:&lt;/p&gt;
  891. &lt;ul&gt;
  892. &lt;li&gt;Be actionable. If you can&amp;#039;t actually &lt;strong&gt;do&lt;/strong&gt; something, it doesn&amp;#039;t belong on a list of things to do.&lt;/li&gt;
  893. &lt;li&gt;Take less than 20 minutes or so&lt;/li&gt;
  894. &lt;/ul&gt;
  895. &lt;p&gt;Today is a tiny little micro-application. As of now, you don&amp;#039;t need to log in or identify yourself to use it. When you first visit the app, you see a big textarea. Treat it like your legal pad or scratch buffer. Jot down what needs doing today. Once you&amp;#039;ve gotten everything out of your head, click the big blue button.&lt;/p&gt;
  896. &lt;p&gt;Presto! Your lines of text have turned into a todo list.&amp;#160;&amp;#160;&lt;/p&gt;
  897. &lt;p&gt;As you check things off, Today keeps track of the amount of time since your last checkmark. (Right now, I&amp;#039;m running a little behind - I&amp;#039;m at 25:27.)&lt;/p&gt;
  898. &lt;p&gt;On the side of the screen, you&amp;#039;ll find little a progress bar, a place to write down new tasks that come up throughout the day and a place to set your email address.&lt;/p&gt;
  899. &lt;p&gt;Here&amp;#039;s where the real magic happens - 18 hours after you start work, Today emails you a final copy of your list and stops letting you check things off. &amp;#160;&lt;/p&gt;
  900. &lt;p&gt;The next day, Today is ready for you to start a new list.&lt;/p&gt;
  901. &lt;p&gt;There are a lot of task tracking systems out there. I&amp;#039;ve written more than a few of &amp;#039;em myself, but this one seems to actually make me productive more consistently than anything else I&amp;#039;ve built to date. And it doesn&amp;#039;t get heavier the longer I use it.&amp;#160;&lt;/p&gt;
  902. &lt;p&gt;If you&amp;#039;ve read this far and think that my crazy productivity hack might work for you, drop me a line at and tell me you&amp;#039;d like to try Today.&lt;/p&gt;
  903. </content>
  904. </entry>
  905. <entry>
  906. <title>3G Web Browsing on the Kindle Paperwhite</title>
  907. <link href=""/>
  908. <updated>2012-10-06T02:05:16Z</updated>
  909. <id></id>
  910. <content type="html">&lt;p&gt;Last night, I was playing around with my new &lt;a href=&quot;;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B008UB7DU6&amp;amp;linkCode=as2&amp;amp;tag=fsck-20&quot; target=&quot;_blank&quot; title=&quot;Kindle Paperwhite 3G&quot;&gt;3G Kindle Paperwhite&lt;/a&gt;. (I earn a few bucks if you buy from Amazon after clicking links to Amazon in this blog post)&amp;#160;&lt;/p&gt;
  911. &lt;p&gt;(It is, in fact, the nicest kindle I have ever owned. The new screen is gorgeous. The touch screen is responsive. Large parts of the UI are just HTML5 apps, which means that the system is quite flexible. Sometimes more flexible than intended. When the Kindle Touch first got pwned, it was through the music player app, which didn&amp;#039;t escape JavaScript in ID3 tags.)&lt;/p&gt;
  912. &lt;p&gt;One of the things that bums me out about the Kindle Touch and Kindle Paperwhite is that they don&amp;#039;t support browsing over 3G. It&amp;#039;s a feature I used rarely on my Kindle 2 and Kindle 3. But when I needed it, I really, really needed it.&lt;/p&gt;
  913. &lt;p&gt;So yeah. Last night, I was playing with my new &lt;a href=&quot;;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B008UB7DU6&amp;amp;linkCode=as2&amp;amp;tag=fsck-20&quot; target=&quot;_blank&quot; title=&quot;Kindle Paperwhite 3G&quot;&gt;Kindle Paperwhite 3G&lt;/a&gt;. &lt;/p&gt;
  914. &lt;p&gt;&lt;a href=&quot;; title=&quot;Home Screen by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Home Screen&quot; height=&quot;500&quot; src=&quot;; width=&quot;375&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  915. &lt;p&gt;&amp;#160;&lt;/p&gt;
  916. &lt;p&gt;I clicked the menu button.&lt;/p&gt;
  917. &lt;p&gt;&lt;a href=&quot;; title=&quot;Main menu by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Main menu&quot; height=&quot;500&quot; src=&quot;; width=&quot;375&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  918. &lt;p&gt;I clicked &amp;quot;Settings&amp;quot;&lt;/p&gt;
  919. &lt;p&gt;&lt;a href=&quot;; title=&quot;Settings by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Settings&quot; height=&quot;500&quot; src=&quot;; width=&quot;375&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  920. &lt;p&gt;I clicked &amp;quot;Reading Options&amp;quot;&lt;/p&gt;
  921. &lt;p&gt;Then I clicked on &amp;quot;Social networks&amp;quot;&lt;/p&gt;
  922. &lt;p&gt;&lt;a href=&quot;; title=&quot;Social Networks by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Social Networks&quot; height=&quot;500&quot; src=&quot;; width=&quot;375&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  923. &lt;p&gt;Then I clicked on &amp;quot;Link my account to Twitter&amp;quot; and got a very familiar OAuth login page.&lt;/p&gt;
  924. &lt;p&gt;&lt;a href=&quot;; title=&quot;Link to Twitter by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Link to Twitter&quot; height=&quot;500&quot; src=&quot;; width=&quot;375&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  925. &lt;p&gt;It was at about this point that I remembered what I&amp;#039;d seen poking around inside the Kindle Touch&amp;#039;s UI toolkit. Different applications were basically implemented as little webkit containers with different local and remote permissions. The browser&amp;#039;s container was, for example, configured to let you reach Amazon and Wikipedia over 3G and to require WIFI for everything else.&lt;/p&gt;
  926. &lt;p&gt;Now, this &amp;quot;Manage Your Social Networks&amp;quot; app pretty clearly lets you get to Twitter and Facebook (and Amazon), but how locked down is it? &lt;/p&gt;
  927. &lt;p&gt;To make a long story short, it&amp;#039;s about as locked down as a 1999-era web kiosk.&lt;/p&gt;
  928. &lt;p&gt;Back in the early days of the web, people didn&amp;#039;t have web browsers in their pockets, so &amp;quot;web kiosks&amp;quot; were a frequent sight in forward-thinking public locales like libraries and corporate lobbies. They were invariably locked down. You couldn&amp;#039;t launch Telnet or download a copy of Snood. In fact, they were mostly set up to only let you browse a single website. The usual mechanism for this fascist policy was to use a hacked up web browser without a URL bar. Sometimes, you were just out of luck. More often, you got to demonstrate your l33t sk1llz at a game called &amp;quot;clicks to Yahoo!&amp;quot; or its more nefarious sibling -- &amp;quot;clicks to porn.&amp;quot; Somewhere on every website is a link to another website. Back in the day, an easy target was a &amp;quot;best viewed in Netscape 3.0&amp;quot; or &amp;quot;Best viewed in Internet Explorer&amp;quot; button - from, you could get &lt;strong&gt;anywhere&lt;/strong&gt;.&lt;/p&gt;
  929. &lt;p&gt;Today, well, today you have many options. My first path through this game led me from to to to From reddit, you can get just about anywhere, though you might have to endure more mindless yammering than you&amp;#039;d like. For my proper demo, I went for something a bit more useful (if via a slightly more circuitous route.)&lt;/p&gt;
  930. &lt;p&gt;Rather than signing in to Twitter to let Amazon tweet on your behalf, break the flow by clicking the little bird in the upper left corner.&lt;/p&gt;
  931. &lt;p&gt;&lt;a href=&quot;; title=&quot;Sign up for twitter by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Sign up for twitter&quot; height=&quot;500&quot; src=&quot;; width=&quot;375&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  932. &lt;p&gt;Then click &amp;quot;Sign in&amp;quot;&lt;/p&gt;
  933. &lt;p&gt;&lt;a href=&quot;; title=&quot;Log into twitter by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Log into twitter&quot; height=&quot;500&quot; src=&quot;; width=&quot;375&quot;&gt;&lt;/a&gt;&lt;br&gt;
  934. &lt;a href=&quot;; title=&quot;Free 3G Twitter by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Free 3G Twitter&quot; height=&quot;500&quot; src=&quot;; width=&quot;375&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  935. &lt;p&gt;Scroll to the bottom of the page and search for @google&lt;/p&gt;
  936. &lt;p&gt;&lt;a href=&quot;; title=&quot;Search for @google by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;Search for @google&quot; height=&quot;500&quot; src=&quot;; width=&quot;375&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  937. &lt;p&gt;Click on @google&amp;#039;s profile&lt;/p&gt;
  938. &lt;p&gt;&lt;a href=&quot;; title=&quot;See @google&amp;#039;s profile by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;See @google&amp;#039;s profile&quot; height=&quot;500&quot; src=&quot;; width=&quot;375&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  939. &lt;p&gt;Click on the URL to get to Google Support.&lt;/p&gt;
  940. &lt;p&gt;&lt;a href=&quot;; title=&quot; by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;; height=&quot;500&quot; src=&quot;; width=&quot;375&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  941. &lt;p&gt;Scroll to the bottom of the page and click &amp;quot;Google Home&amp;quot;&lt;/p&gt;
  942. &lt;p&gt;&lt;a href=&quot;; title=&quot;The ballgame by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;The ballgame&quot; height=&quot;500&quot; src=&quot;; width=&quot;375&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  943. &lt;p&gt;Google something.&lt;/p&gt;
  944. &lt;p&gt;Now, I don&amp;#039;t mean to suggest that this turns the Kindle Paperlight into a &lt;strong&gt;useful&lt;/strong&gt; 3G web browser, but when you&amp;#039;re desperate, you&amp;#039;re desperate.&lt;/p&gt;
  945. &lt;p&gt;(Also, if you&amp;#039;re just trying to read Twitter or Facebook, it&amp;#039;s actually not that painful.)&lt;/p&gt;
  946. &lt;p&gt;Enjoy!&lt;/p&gt;
  947. </content>
  948. </entry>
  949. <entry>
  950. <title>Project: Rei Toei</title>
  951. <link href=""/>
  952. <updated>2012-08-10T03:51:59Z</updated>
  953. <id></id>
  954. <content type="html">&lt;p&gt;I&amp;#039;ve been messing around with a few new projects. Over the past couple months, I&amp;#039;ve become increasingly fascinated by the state of the art in what one might call &amp;quot;conversational UI&amp;quot;. I&amp;#039;m mostly an Android person -- I&amp;#039;ve been vaguely jealous of Apple&amp;#039;s Siri since I first got to play with her on &lt;a href=&quot;;&gt;Dan Kogai&lt;/a&gt;&amp;#039;s iPhone 4S at &lt;a href=&quot;;&gt;YAPC::Asia&lt;/a&gt; in Tokyo last year.&lt;/p&gt;
  955. &lt;p&gt;There are a dozen+ Siri competitors for Android. They have various levels of platform integration, but none of them are Really Excellent. And they&amp;#039;re all proprietaryish products put out by companies trying to make a buck. I haven&amp;#039;t yet found one of them that&amp;#039;s end-user extensible. Not even Google Now. (Google Now is actually excellent, but it&amp;#039;s not extensible. I can&amp;#039;t make it smarter. Also, it has the personality of a textarea.)&lt;/p&gt;
  956. &lt;p&gt;At the same time, many of us have been living with IRC bots of various flavors for well over a decade. Some of our bots are cute little Markov chainers that babble incessantly about whatever they&amp;#039;ve been fed. Some of them are call-and-response creatures - they have a database of factoids and know only that when you say &amp;quot;What is 42?&amp;quot; they should say &amp;quot;The answer to life, the universe and everything&amp;quot;.  Other bots let developers write plugins that do a bit of computation or know how to fetch answers by asking a search engine or grabbing the first entry from an RSS feed. Some of our bots can do all of these things. By and large, the bots are actually useful little beasts. And they&amp;#039;re ours.&lt;/p&gt;
  957. &lt;p&gt;A couple weeks ago, I started playing around with &lt;a href=&quot;;&gt;PhoneGap&lt;/a&gt;. Inside of an hour, I built myself a little JavaScript parrot that could listen to whatever it was that I said, parse it and repeat it back to me. It totalled up at about 5 lines of JS. I briefly considered dropping Eliza or Adventure into the runloop before realizing that what I really wanted was a personal bot on my phone whom I could make more personal.&lt;/p&gt;
  958. &lt;p&gt;Thanks to an excellent suggestion from &lt;a href=&quot;;&gt;Kaia&lt;/a&gt;, the bot ended up getting named Rei Toei after the idoru in Gibson&amp;#039;s &lt;em&gt;Idoru&lt;/em&gt;. Rei Toei was a virtual Japanese popstar who was always your personal ideal of her. Our Rei should grow to know you and to help you in ways that are useful to you. Writing a plugin to give Rei a new superpower is a few lines of JavaScript. Right now, she can learn your name, tell you about current weather conditions and tomorrow&amp;#039;s forecast and learn X is Y facts, but she&amp;#039;s learning and growing.&lt;/p&gt;
  959. &lt;p&gt;Rei is stll very, very young. I could use lots and lots of help. Right now, the codebase is very, very simplistic. (That means it&amp;#039;s a great time to get involved.) &lt;a href=&quot;;&gt;Schuyler&lt;/a&gt;&amp;#039;s been helping get some NLP going, so that Rei can make choices about how to reply to you something a little more advanced than a lookup table of regexes. &lt;a href=&quot;;&gt;Yoz&lt;/a&gt; got us the beginings of a test suite, so Rei keeps getting smarter and keeps working.&lt;/p&gt;
  960. &lt;p&gt;At this point, any help that anyone cares to give would be awesome. We need folks to write plugins to teach Rei about the world. We need folks to help Rei understand people. We need folks to test Rei and suggest how she can be better.  If you&amp;#039;re looking to code, all you really need is a willingness to learn a bit of JavaScript.&lt;/p&gt;
  961. &lt;p&gt;You can find &lt;a href=&quot;;&gt;the codebase&lt;/a&gt; over at GitHub. You can also find &lt;a href=&quot;;&gt;a bit of documentation&lt;/a&gt; about the mailing list and where on IRC you can talk to people about Rei (though Rei herself isn&amp;#039;t yet ready to make a public appearance on IRC).&lt;/p&gt;
  962. </content>
  963. </entry>
  964. <entry>
  965. <title>Computing Environment - Late Summer 2012 Edition</title>
  966. <link href=""/>
  967. <updated>2012-07-29T01:17:21Z</updated>
  968. <id></id>
  969. <content type="html">&lt;p&gt;Blog Post. Take 2!&lt;/p&gt;
  970. &lt;p&gt;I wrote a reasonably eloquent bit about my current ~computing environment. And then TypePad managed to not save me from a mistaken keystroke and ate it. (Yes, I get to claim it was eloquent. If you can recover the content and disprove me, I will be thrilled.)&lt;/p&gt;
  971. &lt;p&gt;So now, here I am in a nice 80x25 with a trusty vim executable autosaving every keystroke and backing up what I write...without really giving me any say at all.&lt;/p&gt;
  972. &lt;p&gt;Before I was so rudely interrupted, I was attempting to document the contents of my portable &amp;quot;office&amp;quot; (Late Summer 2012 Edition)&lt;/p&gt;
  973. &lt;p&gt;Kaia and I are in SF for the summer - She has a summer internship at a tech company in the South Bay. I&amp;#039;m spending my summer hanging out with a laptop in cafes in the Mission pretending (not?) to be a hipster.&lt;/p&gt;
  974. &lt;p&gt;I get asked about my computing setup fair bit. (Often, 3-4 times a day. More, even, than I get asked for help connecting to cafe wifi.) My blog&amp;#039;s been feeling somewhat neglected. Documenting the bits of my cafe-haxx0ring setup seems like it might be a reasonable solution to help me kill several birds with one hunk of text.&lt;/p&gt;
  975. &lt;p&gt;(ObDisclosure: The links mostly go to Amazon. I get points (dollars) when you click through.)&lt;/p&gt;
  976. &lt;p&gt;The laptop is a &lt;a href=&quot;;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B0074721BI&amp;amp;linkCode=as2&amp;amp;tag=fsck-20&quot; target=&quot;_blank&quot; title=&quot;Retina MBP&quot;&gt;Retina MBP&lt;/a&gt;. It is, indeed just a little bit unweildy. If they&amp;#039;d come out with a 13&amp;quot; Retina Air, I&amp;#039;d have bought that. Yes, the screen is gorgeous. It&amp;#039;s got a lot of very small pixels. It&amp;#039;s fairly glare-y, but nowhere near as bad as a last-gen 15&amp;quot; MBP. It&amp;#039;s nice to have the screen real-estate, so I can keep a regular-size browser and a terminal up next to each other, which was a little tight on the Air that&amp;#039;s now pretending to be an Apple TV.&lt;/p&gt;
  977. &lt;p&gt;The new machine is blisteringly fast. (No, it runs fairly cool. It&amp;#039;s not actually blistering. Just blisteringly fast.)  I haven&amp;#039;t actually managed to max out the machine&amp;#039;s physical memory just yet. And with a comfortable environment set up, I still have well over a terabyte of space left.&lt;/p&gt;
  978. &lt;p&gt;Somewhat tellingly, I find that I still mostly work with a single window maximized. More often than not, it&amp;#039;s an &lt;a href=&quot;; target=&quot;_blank&quot; title=&quot;iTerm 2&quot;&gt;iTerm 2&lt;/a&gt;. Admittedly, it&amp;#039;s a terminal with incredibly crisp text. &lt;/p&gt;
  979. &lt;p&gt;I developed serious (but SERIOUS) RSI at a relatively early age. Spending a lot of time on a laptop keyboard seems to do me in pretty quickly. Consequently, I&amp;#039;ve been traveling with a separate keyboard for quite a while. I&amp;#039;ve been through just about every ergonomic keyboard known to humanity as well as a few that nobody&amp;#039;s ever heard of, but that&amp;#039;s a topic for another day. &lt;/p&gt;
  980. &lt;p&gt;&lt;/p&gt;
  981. &lt;p&gt;&lt;a href=&quot;; title=&quot;R6081141.jpg by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;R6081141.jpg&quot; height=&quot;375&quot; src=&quot;; width=&quot;500&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  982. &lt;p&gt;Right now, I travel with a KBT Pure keyboard, made by VorTex in Taiwan. It&amp;#039;s a happy-hacking-esque reduced footprint keyboard with Cherry Brown keyswitches. Thanks to the small size, nothing is ever very hard to reach. The keys also light up purple, but that&amp;#039;s neither here nor there. It&amp;#039;s well made and incredibly comfortable to type on. I have some quibbles with the default key layout, but they&amp;#039;re nothing that can&amp;#039;t be solved with some judicious remapping.&lt;/p&gt;
  983. &lt;p&gt;The most important change I made was a trick I picked up from the emacs set -- That key to the left of the A. You know. The one typically used only when someone is WRONG ON THE INTERNET. Some folks remap it to another Control key. I&amp;#039;m perfectly happy with Control living down toward the bottom of the keyboard. About 3 months ago, I remapped Caps Lock to Escape and I haven&amp;#039;t looked back. It&amp;#039;s great.&lt;/p&gt;
  984. &lt;p&gt;In general, I find the most comfortable place to type is with my hands resting in my lap. The Pure is small enough that I can&amp;#039;t easily balance it on my legs. A little bit of poking around Amazon turned up a...well, it&amp;#039;s a piece of aluminum with neoprene on it. It turns out to be pretty much ideal. (It&amp;#039;s a&amp;#160;&lt;a href=&quot;;amp;tag=fsck-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B004SOMAWA&quot;&gt;Grifiti Deck 13 Lap Desk&lt;/a&gt;.) They also make a decent wrist-rest sized perfectly for the Pure: &lt;a href=&quot;;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B004DANDN4&amp;amp;linkCode=as2&amp;amp;tag=bestpractical-20&quot;&gt;Grifiti wrist rests&lt;/a&gt;.&lt;/p&gt;
  985. &lt;p&gt;&lt;a href=&quot;;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B000H3F28A&amp;amp;linkCode=as2&amp;amp;tag=fsck-20&quot; target=&quot;_blank&quot; title=&quot;IMAK SmartGloves&quot;&gt;IMAK SmartGloves&lt;/a&gt; help keep my hands in a reasonable semblance of the right position for typing without losing feeling in my pinkies. I&amp;#039;ve been wearing them when typing fairly religiously for...a lot of years now. I&amp;#039;m pretty sure that &lt;a href=&quot;; target=&quot;_blank&quot; title=&quot;Artur&quot;&gt;Artur&lt;/a&gt; was the one who turned me onto them.&lt;/p&gt;
  986. &lt;p&gt;The laptop tends to live on a table. The keyboard is often a bit hard to see when it&amp;#039;s hidden away under the table. I&amp;#039;m told that I look like I&amp;#039;m typing with THE POWER OF MY MIND when I&amp;#039;m focused.  Sadly, it&amp;#039;s just the power of mechanical keyswitches and a USB cable.&lt;/p&gt;
  987. &lt;p&gt;The laptop is usually propped up. Just a couple of inches makes typing on a laptop much less of a pain in the neck.&lt;/p&gt;
  988. &lt;p&gt;&lt;a class=&quot;asset-img-link&quot; href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Cricket&quot; border=&quot;0&quot; class=&quot;asset  asset-image at-xid-6a00d83456074b69e2017743b1c42a970d&quot; src=&quot;; title=&quot;Cricket&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  989. &lt;p&gt;My go-to laptop stand has been a Cricket (or one of the &lt;a href=&quot;;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B003KGZTKW&amp;amp;linkCode=as2&amp;amp;tag=fsck-20&quot;&gt;cheap knockoffs available on Amazon&lt;/a&gt;) for the last 5 or so years. The name comes from the fact that the original was a pastel green and when mostly folded up, it looked...well, ok. It looked a little bit like a stylized reproduction of a cricket.&lt;/p&gt;
  990. &lt;p&gt;&lt;a class=&quot;asset-img-link&quot; href=&quot;;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B002L31GZW&amp;amp;linkCode=as2&amp;amp;tag=fsck-20&quot; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Latosta&quot; border=&quot;0&quot; class=&quot;asset  asset-image at-xid-6a00d83456074b69e2017743b1c164970d&quot; src=&quot;; title=&quot;Latosta&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  991. &lt;p&gt;Lately, I&amp;#039;ve been test-driving &lt;a href=&quot;;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B002L31GZW&amp;amp;linkCode=as2&amp;amp;tag=fsck-20&quot;&gt;a pair of small pieces of aluminum made by Latosta.&lt;/a&gt;&amp;#160;&amp;#160;&amp;#160;&lt;/p&gt;
  992. &lt;p&gt;They&amp;#039;re much, much lighter than a Cricket. And they&amp;#039;re more portable. The big downside is that out of the box, they don&amp;#039;t raise the laptop nearly as far as the Cricket does. I suspect I&amp;#039;ll either mod them or find myself back in cricket-land soon. (And, in fact in the 24 hours since I wrote the first draft of this post, I&amp;#039;m back to the Cricket and my neck is much happier.&lt;/p&gt;
  993. &lt;p&gt;Well this certainly turned out to be a bit of a product shilling, which wasn&amp;#039;t what I...actually, yes, it&amp;#039;s &lt;em&gt;exactly&lt;/em&gt;&amp;#160;what I intended.&lt;/p&gt;
  994. &lt;p&gt;I haven&amp;#039;t talked about the tablet, phone, tabletphone hybrid, headphones, backpack, chargers, pen, paper notebook, keyboard case or the pound of cables and adaptors I cart around. If enough people prod me, I&amp;#039;m happy to do so.&lt;/p&gt;
  995. </content>
  996. </entry>
  997. <entry>
  998. <title>In which our hero travels from Tokyo to Boston in a single bound</title>
  999. <link href=""/>
  1000. <updated>2012-04-24T17:55:36Z</updated>
  1001. <id></id>
  1002. <content type="html">&lt;p&gt;&lt;a href=&quot;; title=&quot;R6081324.jpg by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;R6081324.jpg&quot; height=&quot;375&quot; src=&quot;; width=&quot;500&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  1003. &lt;p&gt;Last week, I was in Taipei for &lt;a href=&quot;; target=&quot;_blank&quot; title=&quot;;&gt;;/a&gt;. As usual the conference was well put together and had lots of tasty food.&amp;#160; After the conference, Audrey, Luke and I spent a few days working on new features for &lt;a href=&quot;; target=&quot;_blank&quot; title=&quot;Checkmarkable&quot;&gt;Checkmarkable&lt;/a&gt;, my startup Prime Radiant&amp;#039;s product. I also met one of the guys behind &lt;a href=&quot;; target=&quot;_blank&quot; title=&quot;Vortex Keyboards&quot;&gt;Vortex keyboards&lt;/a&gt; and scored myself a sexy new KBT Pure 60% keyboard, but more on that another day.&lt;/p&gt;
  1004. &lt;p&gt;&amp;#160;I spend a lot of time on airplanes. Specifically, I spend a lot of time on Oneworld airplanes.&amp;#160; Typically, I visit Taiwan once or twice a year. Nobody flies directly from Boston to Taipei. The most convenient flights for me to get from Boston to Taipei have historically been Boston-Chicago, Chicago-Tokyo and then Tokyo-Taipei.&amp;#160; I like having a convenient excuse to visit friends in Tokyo.&lt;/p&gt;
  1005. &lt;p&gt;&amp;#160;As I was booking this year&amp;#039;s trip to OSDC, I started fiddling with dates to see if I could shave a few hundred bucks off the somewhat heart-stopping fare that first popped up.&amp;#160; When I added a 3 day layover in Tokyo, the flights that came up were a little different than usual. Tokyo-Boston travel time was shorter by about 4 hours and the flight that popped up was a codeshare on JAL. (That it showed up as a direct flight wasn&amp;#039;t the first thing that caught my eye. AA 154 shows up as NRT-BOS, but involves a layover, customs clearance and a plane change at O&amp;#039;Hare.)&lt;/p&gt;
  1006. &lt;p&gt;&amp;#160;And then I noticed the equipment it said JAL would use for the flight - 787 - Boeing&amp;#039;s new Dreamliner. I started poking around&lt;a href=&quot;; target=&quot;_blank&quot; title=&quot;flyertalk&quot;&gt; flyertalk&lt;/a&gt; and yep, JAL was coming to Boston - using the 787 for the first regularly scheduled route between Asia and Boston.&amp;#160; I dithered for a couple days and managed to miss getting a seat on the inaugural flight. As soon as _that_ happened, I clicked the &amp;quot;buy&amp;quot; button so I wouldn&amp;#039;t miss my seat on the second 787 flight to Boston.&lt;/p&gt;
  1007. &lt;p&gt;&amp;#160;Usually, I try really hard to fly on American Airlines &amp;quot;metal&amp;quot; for longhaul international travel -- The frequent flyer perks they give me every year include a few free upgrades for just about any flight, so long as it&amp;#039;s on one of American&amp;#039;s planes.&amp;#160; 12+ hours in coach is typically a pretty brutal affair, but I was willing to make an exception...just this once.&lt;/p&gt;
  1008. &lt;p&gt;&amp;#160;Because it was booked as a codeshare, I couldn&amp;#039;t find any way to select my seat online. It seemed like it wouldn&amp;#039;t matter very much even if I could -- JAL hadn&amp;#039;t posted the &lt;a href=&quot;; target=&quot;_blank&quot; title=&quot;seatmap for the 787&quot;&gt;seatmap for the 787&lt;/a&gt; yet. (They wouldn&amp;#039;t actually take delivery of the planes until March 27th.)&amp;#160; With a little bit of digging, I found out something interesting about how JAL assigns row numbers. &lt;a href=&quot;; target=&quot;_blank&quot; title=&quot;Row 45 is always the exit row&quot;&gt;Row 45 is always the exit row&lt;/a&gt;.&lt;/p&gt;
  1009. &lt;p&gt;&amp;#160;So I called American.&lt;/p&gt;
  1010. &lt;blockquote&gt;
  1011. &lt;p&gt;&amp;quot;Hi, I&amp;#039;m flying on JAL 8 on April 23. Is there any way you can assign me a seat now?&amp;quot;&lt;/p&gt;
  1012. &lt;p&gt;&amp;#039;Sometimes they let us. Sometimes they don&amp;#039;t. I&amp;#039;d be happy to try for you, Mr Vincent.&amp;#039;&lt;/p&gt;
  1013. &lt;p&gt;&amp;quot;Great! Is there any chance that there&amp;#039;s a window seat in Row 45?&amp;quot;&lt;/p&gt;
  1014. &lt;p&gt;&amp;#039;How&amp;#039;s 45A?&amp;#039;&lt;/p&gt;
  1015. &lt;p&gt;&lt;em&gt;stunned silence&lt;/em&gt;&lt;/p&gt;
  1016. &lt;p&gt;&amp;quot;...ok. That&amp;#039;d be great!&amp;quot;&lt;/p&gt;
  1017. &lt;/blockquote&gt;
  1018. &lt;p&gt;This was the second flight of JAL&amp;#039;s new 787 service to Boston. It was already mostly full. JAL&amp;#039;s frequent flyers can book these seats online. And nobody had picked the exit row window.&lt;/p&gt;
  1019. &lt;p&gt;Several weeks passed. I flew to Taipei. I spent a couple days in Tokyo. I saw Karen and Marty. I ate a bunch of incredibly tasty food.&amp;#160; I wandered around Akihabara. &amp;#160;&lt;/p&gt;
  1020. &lt;p&gt;JAL lets you check in online up to 72 hours before your flight. American and JAL use different reservation networks, so my flight had an American PNR (Passenger Name Record - that 6 letter record locator code) and a JAL PNR. My American PNR wasn&amp;#039;t letting me check in on I called up American and got my JAL PNR. That didn&amp;#039;t work either.&lt;/p&gt;
  1021. &lt;p&gt;This is when the most impressive and astonishing part of my travel experience happened. Sunday night, I opened up to confirm my flight details for the next morning and noticed the &amp;quot;Check in online&amp;quot; button at the bottom of the screen. This button has almost never worked for me for international flights on American. And this was a codeshare. I knew that pressing this button would show me a nice error message about how my flight wasn&amp;#039;t actually eligible to check in online. When I clicked the button, nothing happened. I clicked it again. Nothing happened again. And then I noticed the &amp;quot;Popup blocked&amp;quot; message in the browser&amp;#039;s URL bar. I allowed chrome to show me the error popup.&lt;/p&gt;
  1022. &lt;p&gt;It wasn&amp;#039;t an error popup.&amp;#160;&lt;/p&gt;
  1023. &lt;p&gt; redirected me to and checked me in online and then emailed me a boarding pass. Airline IT isn&amp;#039;t actually supposed to _work_.&lt;/p&gt;
  1024. &lt;p&gt;Scrutinizing the boarding pass, I noticed my sequence number. (Most airline boarding passes show a number indicating the order in which passengers checked in)&lt;/p&gt;
  1025. &lt;p&gt;&amp;#160; &amp;#160;&lt;span style=&quot;font-family:&amp;#039;&quot;&gt;SEQ: 186&lt;/span&gt;&lt;/p&gt;
  1026. &lt;p&gt;So, I was the 186th person to check in for the flight, a good 14 hours before departure. On most longhaul international flights, that number wouldn&amp;#039;t be exceptional. On JAL&amp;#039;s 787, it&amp;#039;s a little surprising - It is a 186 seat aircraft. I haven&amp;#039;t gone digging too deeply - It may just have been a bug or some nuance of JAL sequence #s I&amp;#039;m not aware of. Or I might indeed have been the last passenger to check in for the flight.&lt;/p&gt;
  1027. &lt;p&gt;It took me...9 minutes from stepping off the Skyliner at Narita to the JAL Lounge.&lt;/p&gt;
  1028. &lt;p&gt;I got to the gate about an hour before departure. Sure, I could have hung out in JAL&amp;#039;s lounge longer, but DREAMLINER!&amp;#160; The departure area was already half full. And our plane was already at the gate, which wasn&amp;#039;t too surprising. JAL 787 #1 wasn&amp;#039;t actually back from its maiden flight to Boston yet. This plane was brand new.&lt;/p&gt;
  1029. &lt;p&gt;It was parked next to a BA 777. Compared to the gorgeous curved wings of the 787, the 777 just looked...clunky and dated.&lt;/p&gt;
  1030. &lt;p&gt;&lt;a href=&quot;; title=&quot;R6081370.jpg by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;R6081370.jpg&quot; height=&quot;375&quot; src=&quot;; width=&quot;500&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  1031. &lt;p&gt;More people were taking pictures of the departure board than the plane. Go figure.&lt;/p&gt;
  1032. &lt;p&gt;Boarding started about 10 minutes late. The fabled arched entryway of the 787 was...nice, but nothing to write home about. . o O { Though I suppose I just have }&lt;/p&gt;
  1033. &lt;p&gt;&lt;a href=&quot;; title=&quot;R6081350.jpg by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;R6081350.jpg&quot; height=&quot;500&quot; src=&quot;; width=&quot;375&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  1034. &lt;p&gt;I walked back through Business and the first bit of economy to seat 45A. Before I got there, I didn&amp;#039;t really know what to expect. I could have had a cold, cramped little seat with no window. That sometimes happens in exit rows. But no. The seat was fairly roomy (very roomy for JAL). It reclined. The video monitor and tray were in the armrest.&lt;/p&gt;
  1035. &lt;p&gt;&lt;a href=&quot;; title=&quot;R6081387.jpg by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;R6081387.jpg&quot; height=&quot;500&quot; src=&quot;; width=&quot;375&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  1036. &lt;p&gt;And if I stretched my legs out as far as I could, I could just barely use the emergency exit door as a footrest.&lt;/p&gt;
  1037. &lt;p&gt;The 787&amp;#039;s windows don&amp;#039;t have shades. They have a dimmer that lets you set 5 levels of blue-tinted transparency.&amp;#160; I immediately started playing with the window&amp;#039;s controls. The windows don&amp;#039;t go all the way opaque, but the darkest setting is enough to keep the interior pretty dark, even in bright sunlight.&lt;/p&gt;
  1038. &lt;p&gt;Speaking of windows - They promised us a window in the bathroom. That one &lt;em&gt;does&lt;/em&gt; have a shade...when it exists. No such luck in JAL Economy.&lt;/p&gt;
  1039. &lt;p&gt;&lt;a href=&quot;; title=&quot;R6081390.jpg by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;R6081390.jpg&quot; height=&quot;500&quot; src=&quot;; width=&quot;375&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  1040. &lt;p&gt;The interior of the plane definitely felt roomier and airier than a 767, though not much more spacious than a 777. Not bad for a plane with 10 rows of Business and 17-odd rows of Economy.&amp;#160; Boarding was mercifully quick - the plane was full, but there just weren&amp;#039;t that many passengers.&lt;/p&gt;
  1041. &lt;p&gt;Before we took off, a flight attendant brought over the &amp;quot;responsibilities of passengers in the exit row&amp;quot; cards and asked if we&amp;#039;d be willing to follow crew-member instructions in the unlikely event of an Japanese. Apparently, I nodded well enough.&lt;/p&gt;
  1042. &lt;p&gt;Our taxi out to the runway took 20+ minutes. On the ground, the 787&amp;#039;s wings are incredibly bouncy. I know they&amp;#039;ve passed some impressive wing-break tests, but it was just slightly terrifying.&lt;/p&gt;
  1043. &lt;p&gt;It was a gray, rainy day - takeoff was a little bit bumpy and the flight didn&amp;#039;t really even out for about 45 minutes.&lt;/p&gt;
  1044. &lt;p&gt;Inside, the 787 is quiet, but not astonishingly so. You can&amp;#039;t forget you&amp;#039;re on an airplane.&lt;/p&gt;
  1045. &lt;p&gt;JAL&amp;#039;s inflight entertainment system was..decent. It was snappy and actually registered touches when you touched the screen. The interactive maps were pretty and responsive.&amp;#160; The &amp;quot;I&amp;#039;m working&amp;quot; watch cursor made it pretty obvious that (like many IFE systems) it was running X (and presumably Linux.)&amp;#160; Unfortunately, I&amp;#039;d already seen every movie I wanted to of their relatively thin selection.&lt;/p&gt;
  1046. &lt;p&gt;The IFE had a feature I&amp;#039;ve never seen anywhere else....ebooks. In this case, branded as &amp;quot;JAL Sky Manga&amp;quot; - They say that they&amp;#039;re working on an English version, but for now, it&amp;#039;s all in Japanese. They had a few dozen manga to choose from, divided into general interest, Boys&amp;#039; Manga and Girls&amp;#039; Manga. I think the most surreal part of it was the pageturn navigation -- To go to the next page, you click the left arrow on your remote. To go to the previous page, you click the right arrow. It makes perfect sense. Japanese books start from what I, as an American cultural absolutist would call the &amp;quot;back&amp;quot; of the book.&lt;/p&gt;
  1047. &lt;p&gt;In coach, we were fed 3 times. The first meal was a choice between chicken curry and something described to me as &amp;quot;Japanese Pork&amp;quot; - In general, the flight attendants spoke to me in Japanese. I know enough food words that this wasn&amp;#039;t actually a big deal (and I know they spoke to other Western passengers in English. Go figure) Desert after the first meal was a &amp;quot;Boston 1955&amp;quot; Mr Donut ice cream sandwich.&amp;#160; The ice cream was light and airy and a little bit too frozen.&amp;#160;&lt;/p&gt;
  1048. &lt;p&gt;The second food service was a cup of soup and a Danish.&lt;/p&gt;
  1049. &lt;p&gt;The third food service was...clam chowder and &amp;quot;AIR MISDO&amp;quot; - I know you&amp;#039;re all dying to know if JAL can pull off a competent New England Clam Chowder.&amp;#160; I&amp;#039;m a bad New Englander - I don&amp;#039;t really like chowder on the best of days. I chose to skip the airplane chowder.&amp;#160; I&amp;#039;m sorry I&amp;#039;ve let you down.&lt;/p&gt;
  1050. &lt;p&gt;&lt;a href=&quot;; title=&quot;R6081489.jpg by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;R6081489.jpg&quot; height=&quot;375&quot; src=&quot;; width=&quot;500&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  1051. &lt;p&gt;AIR MISDO was...reasonably decent. A pair of small, cakey donuts. One with chocolate and sprinkles. One plain.&lt;/p&gt;
  1052. &lt;p&gt;I spent most of the flight coding. If you know me, that should tell you just about everything you need to know about the flight&amp;#039;s comfort. The 787 has in-seat universal sockets at every seat. Mine cut out for 30-90 seconds every 20 minutes or so, but on the whole behaved itself.&lt;/p&gt;
  1053. &lt;p&gt;One of the cool things about the 787 is that, because it&amp;#039;s made of carbon fiber instead of aluminum, they can keep it pressurized to something that approximates sea level much more closely than any plane you&amp;#039;ve ever flown on. Coming off the plane, &lt;a href=&quot;; target=&quot;_blank&quot; title=&quot;@rasmus&quot;&gt;@rasmus&lt;/a&gt; asked me if I&amp;#039;d noticed the difference. Indeed I had. Usually, I feel fairly...freeze-dried after 13 hours in a small tube in the sky. I felt a lot less shattered than usual after this flight.&lt;/p&gt;
  1054. &lt;p&gt;As we were disembarking, the staff were handing us each a card:&lt;/p&gt;
  1055. &lt;p&gt;&lt;a href=&quot;; title=&quot;R6081504.jpg by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;R6081504.jpg&quot; height=&quot;375&quot; src=&quot;; width=&quot;500&quot;&gt;&lt;/a&gt; &lt;a href=&quot;; title=&quot;R6081502.jpg by jesse, on Flickr&quot;&gt;&lt;img alt=&quot;R6081502.jpg&quot; height=&quot;375&quot; src=&quot;; width=&quot;500&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  1056. &lt;p&gt;Arriving at Logan, we appeared to be the ONLY plane at the international part of Terminal E. 11:30AM isn&amp;#039;t exactly a common time for flights to and from Europe&amp;#160; and nobody else is flying from Boston to Asia. A quick Global Entry scan and I was through passport control and down at the baggage claim. The siren started screeching, the conveyor started rolling bag was the first one to drop onto the belt.&lt;/p&gt;
  1057. &lt;p&gt;From there, I made my way to Terminal B and had lunch with &lt;a href=&quot;;&gt;@schwern&lt;/a&gt; and &lt;a href=&quot;;&gt;@noirinp&lt;/a&gt;, who were on their way to PDX by way of DFW.&lt;/p&gt;
  1058. &lt;p&gt;After lunch, I collapsed into a cab and made my way home to a pair of very cross cats who quickly forgave me for my long absence and a very, very long afternoon before finally collapsing into bed at a respectable 10pm.&lt;/p&gt;
  1059. &lt;p&gt;Overall, I was really quite impressed by the 787. It&amp;#039;s a nice, comfortable modern aircraft. I&amp;#039;d totally fly to Tokyo in Economy on JAL&amp;#039;s 787 service again.&lt;/p&gt;
  1060. &lt;p&gt;&lt;a href=&quot;; target=&quot;_blank&quot; title=&quot;I have a few more pictures up on Flickr&quot;&gt;I have a few more pictures up on Flickr&lt;/a&gt;.&lt;/p&gt;
  1061. &lt;p&gt;&amp;#160;&lt;/p&gt;
  1062. </content>
  1063. </entry>
  1064. <entry>
  1065. <title>WaffleTodos - An app for the Kindle Touch</title>
  1066. <link href=""/>
  1067. <updated>2011-12-13T03:30:40Z</updated>
  1068. <id></id>
  1069. <content type="html">&lt;p&gt;I had a nice long plane flight to mess around with the Kindle Touch today.&amp;#160;&lt;/p&gt;
  1070. &lt;p&gt;Its an interesting beast. Much of its user interface is built in HTML5. (The browser &amp;quot;application&amp;quot; itself is just some JavaScript, HTML and CSS wrapped around the platform&amp;#039;s built-in WebKit rendering engine running full-screen in X11.&lt;/p&gt;
  1071. &lt;p&gt;Yesterday, Yifan Lu ( released a tool to allow Kindle Touch owners to gain root access to their devices. This tool took&amp;#160;advantage of the fact that the MP3 player app on the Kindle Touch&amp;#160;renders the titles of .mp3 files as HTML.&lt;/p&gt;
  1072. &lt;p&gt;I spent a bit of time poking around my Kindle Touch last night - I found all sorts of neat stuff. One item stood out - &amp;quot;waf&amp;quot;, the Kindle&amp;#039;s client-side Web Application Framework. &amp;#160;Amazon have used it to build their updated on-device Kindle Store, as well as some other bits and pieces.&lt;/p&gt;
  1073. &lt;p&gt;On a lark, I cobbled together enough bits to run the &amp;quot;Todo list&amp;quot; demo that ships with bootstrap.js. It ran. It even ran reasonably well.&lt;/p&gt;
  1074. &lt;p&gt;Using Yifan&amp;#039;s &amp;quot;Musical Launcher&amp;quot; technique, I&amp;#039;ve polished up this todo list demo to the point where it should run fine on any Kindle Touch (rooted or not). The only changes it makes to the Kindle&amp;#039;s internal filesystems is to add three required entries to an application registration database. I don&amp;#039;t believe that this is likely to brick your Kindle Touch. If it does, please email me and I&amp;#039;ll see what I can do. Bear in mind, however, that I may not be able to help you out and won&amp;#039;t replace your Kindle if something goes wrong.&lt;/p&gt;
  1075. &lt;p&gt;This package consists of two pieces:&lt;/p&gt;
  1076. &lt;p&gt;&amp;#160; &amp;#160; music/Todos.mp3 - Drop this file in your Kindle&amp;#039;s &amp;quot;music&amp;quot; folder.&lt;br&gt;&amp;#160; &amp;#160; WaffleApps - Drop this file in the toplevel directory on you Kindle&lt;/p&gt;
  1077. &lt;p&gt;After that:&lt;/p&gt;
  1078. &lt;ul&gt;
  1079. &lt;li&gt;&amp;#160;Disconnect your Kindle from your computer &amp;#160;&amp;#160;&lt;/li&gt;
  1080. &lt;li&gt;Click the &amp;quot;home&amp;quot; button &amp;#160;&amp;#160;&lt;/li&gt;
  1081. &lt;li&gt;Click on the &amp;quot;menu&amp;quot; button &amp;#160;&amp;#160;&lt;/li&gt;
  1082. &lt;li&gt;Select &amp;quot;Experimental&amp;quot; from the menu &amp;#160;&amp;#160;&lt;/li&gt;
  1083. &lt;li&gt;Select &amp;quot;MP3 Player&amp;quot; &amp;#160;&amp;#160;&lt;/li&gt;
  1084. &lt;li&gt;Click on &amp;quot;Launch Todos&amp;quot; &amp;#160;&amp;#160;&lt;/li&gt;
  1085. &lt;li&gt;Get stuff done&lt;/li&gt;
  1086. &lt;/ul&gt;
  1087. &lt;p&gt;The actual Todos app is the backbone.js clientside Todo list app demo, prettied up a bit for the Kindle. There&amp;#039;s nothing really fancy there. But this should make a decent starting point for more ambitious app development.&lt;/p&gt;
  1088. &lt;p&gt;You can download the binary package from github:&amp;#160;&lt;a href=&quot;; target=&quot;_self&quot; title=&quot;;&gt;;/a&gt;&lt;/p&gt;
  1089. &lt;p&gt;If you&amp;#039;re interested in building other HTML5 apps for the Kindle Touch,&amp;#160;&lt;a href=&quot;; target=&quot;_self&quot; title=&quot; &quot;&gt;;/a&gt; wouldn&amp;#039;t be the worst place to start.&lt;/p&gt;
  1090. &lt;p&gt;&amp;#160;&lt;/p&gt;
  1091. </content>
  1092. </entry>
  1093. <entry>
  1094. <title>Come hack Perl for Best Practical! (We&#39;re hiring)</title>
  1095. <link href=""/>
  1096. <updated>2011-06-15T01:09:49Z</updated>
  1097. <id></id>
  1098. <content type="html">&lt;h2&gt;&lt;span style=&quot;font-size:13px;&quot;&gt;About us&lt;/span&gt;&lt;/h2&gt;
  1099. &lt;p&gt;We&amp;#039;re Best Practical Solutions, a small software company located in Somerville, MA. We build software and sell support, training, consulting, and custom development. Our main product, RT (Request Tracker), is the premiere open source issue tracking system. We&amp;#039;ve been around since the fall of 2001 and are entirely self-funded. We&amp;#039;re currently hard at work on our next new product. Things just keep getting busier.&lt;/p&gt;
  1100. &lt;h3&gt;About the job&lt;/h3&gt;
  1101. &lt;p&gt;We&amp;#039;re looking for a Perl Hacker to help us enhance and refine our products, and help us be excellent to our customers. You&amp;#039;ll be responsible for everything from implementing new features across all our products to testing and applying user-contributed patches to our released software. In a typical week, you&amp;#039;ll probably spend about half your time working on customer projects and half working on internal and open source projects.&lt;/p&gt;
  1102. &lt;p&gt;The hours are flexible and we all telecommute some of the time...though we work from our office in the heart of Davis Sq, Somerville, most days. We do just about EVERYTHING online and on the phone. You should be comfortable using email and instant messaging systems to collaborate and get work done.&lt;/p&gt;
  1103. &lt;h3&gt;About you&lt;/h3&gt;
  1104. &lt;p&gt;You should be a self-starter who has some experience with Perl, as well as a bit of experience with at least a few of the following:&lt;/p&gt;
  1105. &lt;ul&gt;
  1106. &lt;li&gt;Open source development practices&lt;/li&gt;
  1107. &lt;li&gt;Distributed source control&lt;/li&gt;
  1108. &lt;li&gt;Test driven development&lt;/li&gt;
  1109. &lt;li&gt;User interface design&lt;/li&gt;
  1110. &lt;li&gt;Documentation&lt;/li&gt;
  1111. &lt;li&gt;Javascript&lt;/li&gt;
  1112. &lt;li&gt;SQL databases&lt;/li&gt;
  1113. &lt;li&gt;Optimization, profiling, and debugging&lt;/li&gt;
  1114. &lt;li&gt;UNIX systems administration&lt;/li&gt;
  1115. &lt;/ul&gt;
  1116. &lt;p&gt;It&amp;#039;s okay if you don&amp;#039;t know everything out of the gate, but you should be able to learn on the fly and be comfortable asking questions when you get in over your head. RT is a large codebase to dive into, so you should be prepared to work with a project that&amp;#039;s too big to hold in your head at once. If you want to see what sort of trouble you&amp;#039;re getting yourself into, you can find all of our open source code&amp;#160;&lt;a href=&quot;;&gt;&lt;/a&gt;&lt;a href=&quot;;&gt;;/a&gt;.&lt;/p&gt;
  1117. &lt;p&gt;We&amp;#039;re a small company and the boss is typically overextended. You should be comfortable working both independently and in small teams, prioritizing tasks on your own, and juggling tasks and projects.&lt;/p&gt;
  1118. &lt;h3&gt;Compensation&lt;/h3&gt;
  1119. &lt;p&gt;DOE - This is a full-time salaried position, but the details are negotiable. We&amp;#039;re a small, self funded company. The standard benefits apply, of course: health insurance, dental insurance, and junk food to make that dental insurance worthwhile.&lt;/p&gt;
  1120. &lt;h3&gt;How to apply&lt;/h3&gt;
  1121. &lt;p&gt;Send something approximating a cover letter, and a resume in plain text, HTML or PDF, and a sample of some code you&amp;#039;ve written to&amp;#160;&lt;a href=&quot;;&gt;;/a&gt;. If you&amp;#039;re involved in open source development of one kind or another, please tell us about it. If you have a CPAN ID, tell us what it is. We won&amp;#039;t consider applications without a code sample. We&amp;#039;ll be paying particular attention to the readability, comments and tests.&lt;/p&gt;
  1122. &lt;p&gt;&amp;#160;&lt;/p&gt;
  1123. </content>
  1124. </entry>
  1125. <entry>
  1126. <title>An untitled post</title>
  1127. <link href=""/>
  1128. <updated>2011-06-15T01:07:45Z</updated>
  1129. <id></id>
  1130. <content type="html">&lt;p&gt;Wow. It&amp;#039;s been rather a long time since I&amp;#039;ve posted anything. Terribly sorry about that folks. Things are...kind of busy.&lt;/p&gt;
  1131. &lt;p&gt;Between RT 4.0, Perl 5.14.0, K-9 Mail 3.8 and Kaiten Mail 1.1, I&amp;#039;ve been a bit busy on the software side of things. More on all of that later. For now,&lt;/p&gt;
  1132. </content>
  1133. </entry>
  1134. <entry>
  1135. <title>K-9 Mail 3.600 for Android</title>
  1136. <link href=""/>
  1137. <updated>2011-02-03T06:06:10Z</updated>
  1138. <id></id>
  1139. <content type="html">&lt;p&gt;It gives me great pleasure to announce the release of version 3.600 of K-9 Mail. &amp;#160;Notable in this release are significant performance improvements and proper support for replying to / forwarding HTML mail.&lt;/p&gt;
  1140. &lt;p&gt;While K-9 was originally &amp;quot;my fault&amp;quot;, its continued success wouldn&amp;#039;t be possible without the hard work of a number of contributors and committers. &amp;#160;At the risk of accidentally leaving out any recent contributor, I&amp;#039;d particularly like to thank (in alphabetical order):&amp;#160;&lt;/p&gt;
  1141. &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;achen.code, cketti, fiouzy,&amp;#160;hiranotaka,&amp;#160;jca02266,&amp;#160;kris.p.wong, and marcus.wolschon&lt;/p&gt;
  1142. &lt;p&gt;Their bug triage and commits are a big part of why K-9 is as wonderful as it is.&lt;/p&gt;
  1143. &lt;p&gt;A rough changelog of &amp;quot;important&amp;quot; updates in K-9 3.6 follows:&lt;/p&gt;
  1144. &lt;h2&gt;Settings&lt;/h2&gt;
  1145. &lt;ul&gt;
  1146. &lt;li&gt;Restore &amp;quot;only vibrate once&amp;quot; vibration notification option.&lt;/li&gt;
  1147. &lt;li&gt;Add a setting to enable Outlook-style message quoting.&lt;/li&gt;
  1148. &lt;li&gt;Add a setting to allow users to always show email addresses instead of the &amp;quot;friendly&amp;quot; parts of email addresses.&lt;/li&gt;
  1149. &lt;li&gt;Add a setting to disable unread count in notification bar.&lt;/li&gt;
  1150. &lt;li&gt;Add a setting to change the font size of the message preview in the message list. Fixes&amp;#160;&lt;a href=&quot;; title=&quot;Configurable preview font size&quot;&gt;&amp;#160;issue 2788&amp;#160;&lt;/a&gt;&lt;/li&gt;
  1151. &lt;/ul&gt;
  1152. &lt;h2&gt;&lt;a name=&quot;User_Interface&quot;&gt;&lt;/a&gt;User Interface&lt;/h2&gt;
  1153. &lt;ul&gt;
  1154. &lt;li&gt;Round account color chips&lt;/li&gt;
  1155. &lt;li&gt;Be a little more graceful when scrolling horizontally in a (vertical) scroll view. Not quite to the point of diagonal scrolling, but hopefully closer.&lt;/li&gt;
  1156. &lt;li&gt;Visual cleanup to Message Lists, Message views&lt;/li&gt;
  1157. &lt;li&gt;Stop showing &amp;quot;Not polling&amp;quot; in the status header. Most of the time, this is because Push mail is enabled.&lt;/li&gt;
  1158. &lt;li&gt;Improve the first page of the wizard on tablet-scale devices&lt;/li&gt;
  1159. &lt;/ul&gt;
  1160. &lt;h2&gt;&lt;a name=&quot;I18N&quot;&gt;&lt;/a&gt;I18N&lt;/h2&gt;
  1161. &lt;ul&gt;
  1162. &lt;li&gt;Added a Brazilian Portugese translation from Marcio Viterbo&lt;/li&gt;
  1163. &lt;li&gt;Updated Italian translation from Giuseppe Arrigo and Paolo Maccione. Fixes&amp;#160;&lt;a href=&quot;; title=&quot;Italian localization file&quot;&gt;&amp;#160;issue 2778&amp;#160;&lt;/a&gt;&lt;/li&gt;
  1164. &lt;li&gt;Updated Czech translation from lubekgc. Fixes&amp;#160;&lt;a href=&quot;; title=&quot;Czech localization update&quot;&gt;&amp;#160;issue 2808&amp;#160;&lt;/a&gt;&lt;/li&gt;
  1165. &lt;li&gt;Updated German translation with slightly modified version of the patch provided by OliverMe&lt;a href=&quot;;&gt;?&lt;/a&gt;;/li&gt;
  1166. &lt;li&gt;Updated Italian translation from paolo.maccione&lt;/li&gt;
  1167. &lt;li&gt;Updated Spanish translation from Adolfo Gutiérrez Ocaña&lt;/li&gt;
  1168. &lt;/ul&gt;
  1169. &lt;ul&gt;
  1170. &lt;li&gt;Improved emoji support for a wide variety of carriers. HIRANO Takahito&lt;/li&gt;
  1171. &lt;li&gt;Support for emoji in message subjects. HIRANO Takahito&lt;/li&gt;
  1172. &lt;li&gt;Allow emoji input on Japanese devices. HIRANO Takahito&lt;/li&gt;
  1173. &lt;li&gt;Implement phonetic search of Contacts on Eclair and earlier.&lt;/li&gt;
  1174. &lt;/ul&gt;
  1175. &lt;h2&gt;&lt;a name=&quot;Internals&quot;&gt;&lt;/a&gt;Internals&lt;/h2&gt;
  1176. &lt;ul&gt;
  1177. &lt;li&gt;Upgrade to a newer version of MIME4J to gain significant performance improvements from the past few years of development&lt;/li&gt;
  1178. &lt;li&gt;Enable Strict Mode when a new &amp;quot;developer mode&amp;quot; is enabled and we&amp;#039;re running on 2.3 or newer&lt;/li&gt;
  1179. &lt;li&gt;Update URL regexes by importing from AOSP and then from IANA&lt;/li&gt;
  1180. &lt;li&gt;Initial implementation of folder attributes on the folder, rather than in preferences&lt;/li&gt;
  1181. &lt;li&gt;Improve generation of plain text versions of HTML mail&lt;/li&gt;
  1182. &lt;li&gt;Improve generation of message previews&lt;/li&gt;
  1183. &lt;/ul&gt;
  1184. &lt;h2&gt;&lt;a name=&quot;Performance&quot;&gt;&lt;/a&gt;Performance&lt;/h2&gt;
  1185. &lt;ul&gt;
  1186. &lt;li&gt;Improve performance of account statistics generation.&lt;/li&gt;
  1187. &lt;li&gt;Call the routine to convert emoji to images only when a message actually contains emoji.&lt;/li&gt;
  1188. &lt;li&gt;Batch storing of unsynced messages to speed up DB update (chunk size set to 5).&lt;/li&gt;
  1189. &lt;li&gt;Execute LocalMessage&lt;a href=&quot;;&gt;?&lt;/a&gt;.appendMessage() &amp;amp; LocalMessage&lt;a href=&quot;;&gt;?&lt;/a&gt;.setFlag() in the same transaction for small message storing in order to speed up DB update.&lt;/li&gt;
  1190. &lt;/ul&gt;
  1191. &lt;h2&gt;&lt;a name=&quot;Security&quot;&gt;&lt;/a&gt;Security&lt;/h2&gt;
  1192. &lt;ul&gt;
  1193. &lt;li&gt;Disable webview cache and javascript.&lt;/li&gt;
  1194. &lt;/ul&gt;
  1195. &lt;h2&gt;&lt;a name=&quot;Notifications&quot;&gt;&lt;/a&gt;Notifications&lt;/h2&gt;
  1196. &lt;ul&gt;
  1197. &lt;li&gt;When mail is sent successfully, cancel the &amp;quot;couldn&amp;#039;t send mail&amp;quot; notification&lt;/li&gt;
  1198. &lt;li&gt;Don&amp;#039;t notify for new mail in a designated spam folder&lt;/li&gt;
  1199. &lt;li&gt;Prevent new mail notifications for IMAP messages older than our most recent message.&lt;/li&gt;
  1200. &lt;li&gt;Use a heuristic to try to avoid notifying POP3 users about older mail messages&lt;/li&gt;
  1201. &lt;/ul&gt;
  1202. &lt;h2&gt;&lt;a name=&quot;Sending_mail&quot;&gt;&lt;/a&gt;Sending mail&lt;/h2&gt;
  1203. &lt;ul&gt;
  1204. &lt;li&gt;Preserve HTML formatting when replying to or forwarding HTML mail&lt;/li&gt;
  1205. &lt;li&gt;Clean up the display of quoted messages on the mail composition screen.&lt;/li&gt;
  1206. &lt;li&gt;When editing a previously saved draft, only show the BCC field if it has entries other than the auto-bcc for that account.&lt;/li&gt;
  1207. &lt;li&gt;Switch from generating X-User-Agent to User-Agent headers. Fixes&amp;#160;&lt;a href=&quot;; title=&quot;Missing User-Agent: header in outgoing mails&quot;&gt;&amp;#160;issue 1917&amp;#160;&lt;/a&gt;&lt;/li&gt;
  1208. &lt;/ul&gt;
  1209. &lt;h2&gt;&lt;a name=&quot;Account_setup&quot;&gt;&lt;/a&gt;Account setup&lt;/h2&gt;
  1210. &lt;ul&gt;
  1211. &lt;li&gt;Use full email addresses as usernames for alternate Yahoo! domains.&lt;/li&gt;
  1212. &lt;li&gt;Add support for other Yahoo! domains (,;/li&gt;
  1213. &lt;li&gt;Set up some reasonableish defaults for which folders to sync when creating a new account.&lt;/li&gt;
  1214. &lt;/ul&gt;
  1215. &lt;h2&gt;&lt;a name=&quot;IMAP&quot;&gt;&lt;/a&gt;IMAP&lt;/h2&gt;
  1216. &lt;ul&gt;
  1217. &lt;li&gt;Correctly encode/escape strings when used in IMAP commands. Fixes&amp;#160;&lt;a href=&quot;; title=&quot;hierarchy delimiter backslash is not properly handled&quot;&gt;&amp;#160;issue 2832&amp;#160;&lt;/a&gt;&lt;/li&gt;
  1218. &lt;li&gt;Escape backslashes in IMAP mailbox names&lt;/li&gt;
  1219. &lt;li&gt;Fix for the &amp;quot;K9 skips every 101st message when fetching on IMAP&amp;quot; bug by e-t172 &amp;lt;;gt;. Fixes&amp;#160;&lt;a href=&quot;; title=&quot;K9 skips every 101st message when fetching on IMAP&quot;&gt;&amp;#160;Issue 2819&amp;#160;&lt;/a&gt;&lt;/li&gt;
  1220. &lt;li&gt;Better handle the case where a list in an IMAP response is prematurely ended by CRLF. Fixes&amp;#160;&lt;a href=&quot;; title=&quot;UID COPY command timing out on client, completing on server&quot;&gt;&amp;#160;issue 2852&amp;#160;&lt;/a&gt;&lt;/li&gt;
  1221. &lt;/ul&gt;
  1222. &lt;h2&gt;&lt;a name=&quot;SMTP&quot;&gt;&lt;/a&gt;SMTP&lt;/h2&gt;
  1223. &lt;ul&gt;
  1224. &lt;li&gt;Changed SMTP code to handle reply codes without additional text. Fixes&amp;#160;&lt;a href=&quot;; title=&quot;Unable to open connection to SMTP server&quot;&gt;&amp;#160;issue 2801&amp;#160;&lt;/a&gt;&lt;/li&gt;
  1225. &lt;li&gt;Try using IP addresses for EHLO if the local hostname is unavailable. Only use a default hostname if the IP address is unavailable. ref&amp;#160;&lt;a href=&quot;;&gt;r2958&lt;/a&gt;,&amp;#160;&lt;a href=&quot;; title=&quot;501 #5.0.0 EHLO requires domain address upon setting up outgoing server&quot;&gt;&amp;#160;issue 2750&amp;#160;&lt;/a&gt;.&lt;/li&gt;
  1226. &lt;/ul&gt;
  1227. &lt;p&gt;&amp;#160;&lt;/p&gt;
  1228. &lt;h2&gt;&lt;a name=&quot;Exchange&quot;&gt;&lt;/a&gt;Exchange&lt;/h2&gt;
  1229. &lt;ul&gt;
  1230. &lt;li&gt;Fix usage of &amp;#039;advanced&amp;#039; exchange settings.&lt;/li&gt;
  1231. &lt;li&gt;Fix form based re-authentication when logon cookies had expired.&lt;/li&gt;
  1232. &lt;/ul&gt;
  1233. &lt;h2&gt;&lt;a name=&quot;Behavior&quot;&gt;&lt;/a&gt;Behavior&lt;/h2&gt;
  1234. &lt;ul&gt;
  1235. &lt;li&gt;Don&amp;#039;t reset visible limits every time K-9 is opened, only when the user changes how many messages they want to be synced.&lt;/li&gt;
  1236. &lt;/ul&gt;
  1237. &lt;p&gt;&amp;#160;&lt;/p&gt;
  1238. &lt;p&gt;&amp;#160;&lt;/p&gt;
  1239. </content>
  1240. </entry>
  1241. <entry>
  1242. <title>Froyo for nookcolor</title>
  1243. <link href=""/>
  1244. <updated>2010-12-05T20:00:15Z</updated>
  1245. <id></id>
  1246. <content type="html">&lt;p&gt;&lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Froyo&quot; class=&quot;asset  asset-image at-xid-6a00d83456074b69e20148c66efe13970c&quot; src=&quot;; title=&quot;Froyo&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  1247. &lt;p&gt;&amp;#160;&lt;/p&gt;
  1248. &lt;p&gt;&amp;#160;&lt;/p&gt;
  1249. &lt;p&gt;If you&amp;#039;ve read my blog for a while, you&amp;#039;ve probably seen my unfortunate interactions with Barnes and Noble trying to buy a nook last Christmas.  You&amp;#039;ve also probably seen some of my Kindle hacking and Android development work.&lt;/p&gt;
  1250. &lt;p&gt;The big takeaway from last Christmas was &amp;quot;don&amp;#039;t by a nook&amp;quot;&lt;/p&gt;
  1251. &lt;p&gt;The nookcolor is B&amp;amp;N&amp;#039;s latest - a 7 inch eReader.&lt;/p&gt;
  1252. &lt;p&gt;Calling it an eReader is somewhat disingenuous.  It&amp;#039;s somewhat different from the original nook:&lt;/p&gt;
  1253. &lt;ul&gt;
  1254. &lt;li&gt;No 3G &lt;/li&gt;
  1255. &lt;li&gt;No E Ink screen &lt;/li&gt;
  1256. &lt;li&gt;50% heavier than the original nook &lt;/li&gt;
  1257. &lt;/ul&gt;
  1258. &lt;p&gt;Like the original nook, it&amp;#039;s running Android. It has a microSD slot. And it&amp;#039;s been rooted. (Not by me.)&lt;/p&gt;
  1259. &lt;p&gt;I&amp;#039;ve been on the road for work a lot lately. That usually means I have rather a lot of time to kill in the evenings. Last Wednesday night, I found myself in a Barnes &amp;amp; Noble store in Northern Virginia.  I wanted to check out the new nookcolor, but, well, I wasn&amp;#039;t about to give Barnes &amp;amp; Noble any more of my money.&lt;/p&gt;
  1260. &lt;p&gt;I walked in the front door to find one of the booksellers standing in front of the nook kisok messing around with the nookcolor.  I asked if  I could play with it for a moment.&lt;/p&gt;
  1261. &lt;p&gt;As I popped into the Setttings menu, she started to tell me about the device. I&amp;#039;m...not quite sure how it happened, but some of the first words out of her mouth were &amp;quot;It&amp;#039;s been rooted, you know.&amp;quot;&lt;/p&gt;
  1262. &lt;p&gt;I guess I look the part.&lt;/p&gt;
  1263. &lt;p&gt;I played with the device for a while. It felt reasonably solid and was impressively speedy.  The bookseller (I&amp;#039;ve forgotten her name :/) started talking about how much she was looking forward to a community port of Froyo.&lt;/p&gt;
  1264. &lt;p&gt;My resolve began to weaken, but I knew that I knew &lt;span style=&quot;text-decoration:underline;&quot;&gt;nothing&lt;/span&gt;&amp;#160;about the internals of the device and I wasn&amp;#039;t about to buy another Android tablet with an anemic CPU. (I bought a ZT-180 from China and dropped my PixelQi display into it, just to see if it would work. I bought a Viewsonic G Tablet a couple weeks ago with the same intent, but haven&amp;#039;t fully disassembled it to get to the display yet.)&lt;/p&gt;
  1265. &lt;p&gt;I played my get out of jail free card: &amp;quot;So, uh, I suspect that this isn&amp;#039;t the typical sort of question you get about the nookcolor, but how fast is the CPU?&amp;quot;&lt;/p&gt;
  1266. &lt;p&gt;&amp;quot;It&amp;#039;s 800MHz.&amp;quot;&lt;/p&gt;
  1267. &lt;p&gt;I bought one. And sat down in the B&amp;amp;N cafe.  I used their free wifi to download nooter from nookdevs.&lt;/p&gt;
  1268. &lt;p&gt;15 minutes later, I had ADW.Launcher, Angry Birds and K-9 Mail installed. Angry Birds was remarkably smooth.&lt;/p&gt;
  1269. &lt;p&gt;Like everyone else, I spent some time messing around on the device, which identified itself as a &amp;quot;LogicPD zoom2&amp;quot; internally.&lt;/p&gt;
  1270. &lt;p&gt;&amp;quot;Wow. This is a pretty standard Android device. I wonder how hard a vanilla Android build would be.&amp;quot;&lt;/p&gt;
  1271. &lt;p&gt;Flash forward to Friday.&lt;/p&gt;
  1272. &lt;p&gt;B&amp;amp;N finally shipped bootloader and kernel source.  The source distribution was  a zip file containing &amp;quot;Documents and Settings/awu/Desktop/distro.tar&amp;quot;&lt;/p&gt;
  1273. &lt;p&gt;The content inside the tarball left a bit to be desired. I haven&amp;#039;t yet found enough markers to figure out what kernel tree and tag was used as the branchpoint, so I don&amp;#039;t know precisely what the local changes are.&lt;/p&gt;
  1274. &lt;p&gt;I have made reasonable headway on figuring that out, though.&lt;/p&gt;
  1275. &lt;p&gt;I started reading up on the relevant bits.&lt;/p&gt;
  1276. &lt;p&gt;Meanwhile, this YouTube video was NOT posted by me:  &lt;a href=&quot;;&gt;;/a&gt;&lt;/p&gt;
  1277. &lt;p&gt;Over the past couple days, with help from [mbm] on #nookcolor (who did all this before I did ;),  I&amp;#039;ve cobbled together a basic working Froyo userland.&lt;/p&gt;
  1278. &lt;p&gt;Below is a first pass braindump of what I&amp;#039;ve done. I&amp;#039;m 100% sure I&amp;#039;m missing steps - and what I have running so far is hardly something I&amp;#039;d want to run full time on my device.&lt;/p&gt;
  1279. &lt;p&gt;Per usual, what you&amp;#039;re doing could turn your device into an expensive paperweight. (It&amp;#039;s too flat to make a decent doorstop.)&lt;/p&gt;
  1280. &lt;p&gt;As nooter (the nookcolor rooting tool) showed us, the nookcolor can boot from SD. In fact, it&amp;#039;s set to prefer to boot from SD. This makes development rather  less painful than it might otherwise be.&lt;/p&gt;
  1281. &lt;p&gt;I initially started building a full cleanroom filesystem, but [mbm] convinced me that it&amp;#039;s a bit easier to start off with the working nookcolor filesystem image and customize from there. Long term, this is obviously not the right plan.&lt;/p&gt;
  1282. &lt;p&gt;Root your nookcolor (nc) with nooter.&lt;/p&gt;
  1283. &lt;p&gt;Download a full filesystem image from the nc.  There are a few ways to do this. The fastest is to dd to a local filesystem on the flash card. and mount that on your workstation. The most trivial is:&lt;/p&gt;
  1284. &lt;pre&gt;adb pull /dev/block/mmcblk0 ./nook-8-gig-raw-filesystem&lt;/pre&gt;
  1285. &lt;p&gt;You&amp;#039;ll need a MicroSD card of at least 8 gigs to drop this filesystem onto.  This will (sort of obviously) obliterate every single bit on that MicroSD.&lt;/p&gt;
  1286. &lt;pre&gt;dd &amp;lt; nook-8-gig-raw-filesystem &amp;gt; /dev/sdX&lt;/pre&gt;
  1287. &lt;p&gt;When you pop the MicroSD out and re-insert it, you&amp;#039;ll likely see a whole bunch of partitions automount.&lt;/p&gt;
  1288. &lt;p&gt;Be careful not to distribute this SD image, as the factory partition contains a zip file including a full (proprietary) OS image and the rom partition includes personal device details.&lt;/p&gt;
  1289. &lt;p&gt;If you stick this into your nc, it should boot to the regular nook image using the boot partition on the MicroSD card.&lt;/p&gt;
  1290. &lt;p&gt;Right now, the one you REALLY care about is &amp;quot;boot&amp;quot; (On ubuntu, it&amp;#039;ll mount as /media/boot).  It&amp;#039;s a VFAT filesystem on partition 1.&lt;/p&gt;
  1291. &lt;p&gt;For now, what we care about on that filesystem is uRamdisk, the boot ramdisk.  As of this moment, it&amp;#039;s set up to mount the nook&amp;#039;s internal flash and continue boot from there.&lt;/p&gt;
  1292. &lt;p&gt;Make a backup of uRamdisk.&lt;/p&gt;
  1293. &lt;p&gt;uRamdisk is a u-boot filesystem.&lt;/p&gt;
  1294. &lt;p&gt;You need to unpack it, twiddle some bits and repack it. I have some tools for this, which I&amp;#039;ll publish to github as soon as I untangle them from the rest of the nook image in my local repo (Which contains B&amp;amp;N code I can&amp;#039;t distribute because it&amp;#039;s not obviously under an opensource license).&lt;/p&gt;
  1295. &lt;p&gt;There&amp;#039;s likely a &lt;span style=&quot;text-decoration:underline;&quot;&gt;correct&lt;/span&gt; way to do this, but the quick-and-dirty way was a bit easier for me to sort out. u-boot ramdisks are gzipped cpio archives with a 64 byte header.&lt;/p&gt;
  1296. &lt;p&gt;My &amp;quot;unpack&amp;quot; script looks like this:&lt;/p&gt;
  1297. &lt;pre&gt; #!/bin/sh
  1298. IMAGE=$1
  1299. mkdir work-$$
  1300. dd if=$IMAGE of=/tmp/image.cpio.gz bs=64 skip=1
  1301. zcat /tmp/image.cpio.gz &amp;gt; work-$$.cpio
  1302. cd work-$$
  1303. cpio -i -F ../work-$$.cpio
  1304. echo &amp;quot;Unpacked ramdisk is in work-$$&amp;quot;
  1305. &lt;/pre&gt;
  1306. &lt;p&gt;The two files you really care about right now are env.txt and init.rc&lt;/p&gt;
  1307. &lt;p&gt;Right now, all we care about is twiddling pointers to partitions.&lt;/p&gt;
  1308. &lt;p&gt;&lt;span style=&quot;text-decoration:line-through;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
  1309. &lt;p&gt;env.txt should look like this:&lt;/p&gt;
  1310. &lt;pre&gt;
  1311. bootdelay=1
  1312. bootargs=console=ttyS0,115200n8 androidboot.console=ttyS0 root=/dev/mmcblk1p2 rw rootdelay=1 mem=512M init=/init videoout=omap24xxvout omap_vout.video1_numbuffers=6 omap_vout.vid1_static_vrfb_alloc=y omapfb.vram=0:8M
  1313. bootcmd=mmc 0 read 0x800 0x81c00000 ${kernel_size}; bootm 81c00000
  1314. recovery=echo recovery mode
  1315. &lt;/pre&gt;
  1316. &lt;p&gt;I&amp;#039;ve altered the bootcmd&amp;#039;s pointer from &amp;quot;mmc 1&amp;quot; to &amp;quot;mmc 0&amp;quot; - this is very much cargo-culting based on the TI docs and not something I&amp;#039;ve looked at.&lt;/p&gt;
  1317. &lt;p&gt;Similarly, I&amp;#039;ve flipped the &amp;quot;root&amp;quot; argument of &amp;quot;bootargs&amp;quot; from mmcblk0p2 to mmcblk1p2. It shouldn&amp;#039;t really matter.&lt;/p&gt;
  1318. &lt;p&gt;&lt;/p&gt;
  1319. &lt;p&gt;&lt;strong&gt;EDIT: Turns out this isn&amp;#039;t strictly necessary&lt;/strong&gt;&lt;/p&gt;
  1320. &lt;p&gt;In init.rc, anywhere the mmcblk0 is mentioned, make it mmcblk1&lt;/p&gt;
  1321. &lt;p&gt;I also forced adb to always start, just for ease of development.&lt;/p&gt;
  1322. &lt;p&gt;Now you&amp;#039;ll want to repack the ramdisk. My &amp;quot;repack&amp;quot; script looks like this:&lt;/p&gt;
  1323. &lt;pre&gt;
  1324. #!/bin/sh
  1325. DIR=&amp;quot;$( basename `pwd`)&amp;quot;
  1326. cpio -i -t -F ../${DIR}.cpio | cpio -o -H newc -O ../ramdisk-repacked-${DIR}.cpio
  1327. cd ..
  1328. gzip ramdisk-repacked-${DIR}.cpio
  1329. ./mkimage  -A ARM -O Linux -T RAMDisk -C gzip -n Image -d ramdisk-repacked-${DIR}.cpio.gz uRamdisk-${DIR}
  1330. &lt;/pre&gt;
  1331. &lt;p&gt;mkimage is a standard tool from the u-boot tools directory shipped as part of the B&amp;amp;N nookcolor sourcedrop. I&amp;#039;d assume that the mkimage from any copy of u-boot would be fine.&lt;/p&gt;
  1332. &lt;p&gt;Once you repack the ramdisk, put it back on the boot partition as uRamdisk.&lt;/p&gt;
  1333. &lt;p&gt;Umount all the filesystems on the MicroSD, eject the MicroSD and drop it in your nc.&lt;/p&gt;
  1334. &lt;p&gt;Boot your nc. It should boot normally.&lt;/p&gt;
  1335. &lt;p&gt;Once it&amp;#039;s booted, use adb shell to check that filesystems are mounted from mmcblk1 and not mmcblk0&lt;/p&gt;
  1336. &lt;p&gt;You can now shutdown your nook.&lt;/p&gt;
  1337. &lt;p&gt;You have a full OS image on SD.&lt;/p&gt;
  1338. &lt;p&gt;It&amp;#039;s now time for the interesting bit, building Android.&lt;/p&gt;
  1339. &lt;p&gt;I built from TI&amp;#039;s omapzoom branch of Android - They&amp;#039;re the folks who make the innermost parts of the nc.  &lt;a href=&quot;;&gt;;/a&gt;&amp;#160;should tell you everything you need to know about using repo to clone the repositories, check out froyo and build.&lt;/p&gt;
  1340. &lt;p&gt;You&amp;#039;ll need a crosscompiler. TI recommend:&lt;/p&gt;
  1341. &lt;p&gt;&lt;a href=&quot;;&gt;;/a&gt;&lt;/p&gt;
  1342. &lt;p&gt;Follow the instructions for zoom2&lt;/p&gt;
  1343. &lt;p&gt;Once the build is done, put your MicroSD card back in the nc. This time, you&amp;#039;re looking for the system partition (sdX5).&lt;/p&gt;
  1344. &lt;p&gt;You have two options. You can either wipe out B&amp;amp;N&amp;#039;s Android build entirely and install the pristine zoom2 build or you can overlay the zoom2 build on top of B&amp;amp;N&amp;#039;s build of Eclair.&lt;/p&gt;
  1345. &lt;p&gt;I went for the former, though [mbm] had better luck with the latter, as it means you won&amp;#039;t have to pick out proprietary libraries and tools and install them one by one.&lt;/p&gt;
  1346. &lt;p&gt;Obviously, if you use any of the B&amp;amp;N bits, you MUST not distribute your filesystem image.  It appears that TI publishes just about every proprietary bit we could possibly want on their GForge instance, though I haven&amp;#039;t actually dug in too deep just yet.&lt;/p&gt;
  1347. &lt;p&gt;You&amp;#039;ll want to neuter etc/vold.* on the system partition once you&amp;#039;ve installed the new image, as it tries to mount an sd card that&amp;#039;s now... otherwise occupied.&lt;/p&gt;
  1348. &lt;p&gt;Once you&amp;#039;re done with this, it&amp;#039;s time to go back to work on your uRamdisk image, since froyo wants somewhat different startup bits than eclair.&lt;/p&gt;
  1349. &lt;p&gt;I ended up with something a bit wonky causing mount failures as I was migrating init.rc to froyo.  Again, this is courtesy of [mbm]:&lt;/p&gt;
  1350. &lt;pre&gt; --- ../work-20413/init.rc   2010-12-05 11:22:40.514818375 -0500
  1351. +++ init.rc 2010-12-04 21:34:36.209385337 -0500
  1352. @@ -1,4 +1,3 @@
  1353. -# init.rc used on Encore hardware
  1354. on early-init
  1355. # Give the kernel time to enumerate the internal and external MMC/SD cards
  1356. @@ -16,7 +15,8 @@
  1357. export ANDROID_ROOT /system
  1358. export ANDROID_ASSETS /system/app
  1359. export ANDROID_DATA /data
  1360. -    export EXTERNAL_STORAGE /sdcard
  1361. +    export EXTERNAL_STORAGE /mnt/sdcard
  1362. +    export ASEC_MOUNTPOINT /mnt/asec
  1363. export INTERNAL_STORAGE /media
  1364. export BOOTCLASSPATH /system/framework/core.jar:/system/framework/ext.jar:/system/framework/framework.jar:/system/framework/android.policy.jar:/system/framework/services.jar
  1365. export DSP_PATH /system/lib/dsp
  1366. @@ -37,16 +37,39 @@
  1367. # Backward compatibility
  1368. symlink /system/etc /etc
  1369. -# create mountpoints and mount tmpfs on sqlite_stmt_journals
  1370. +# create mountpoints
  1371. +    mkdir /mnt 0775 root system
  1372. +    mkdir /mnt/sdcard 0000 system system
  1373. +
  1374. +# Create cgroup mount point for cpu accounting
  1375. +    mkdir /acct
  1376. +    mount cgroup none /acct cpuacct
  1377. +    mkdir /acct/uid
  1378. +
  1379. +# Backwards Compat - XXX: Going away in G*
  1380. +    symlink /mnt/sdcard /sdcard
  1381. +
  1382. mkdir /system
  1383. -    mkdir /tmp 0777
  1384. mkdir /data 0771 system system
  1385. mkdir /cache 0770 system cache
  1386. mkdir /media 0777 system system
  1387. -    mkdir /sdcard 0777 system system
  1388. -    mkdir /sqlite_stmt_journals 01777 root root
  1389. mkdir /rom 0777 root root
  1390. -    mount tmpfs tmpfs /sqlite_stmt_journals size=4m
  1391. +
  1392. +    mkdir /config 0500 root root
  1393. +
  1394. +    # Directory for putting things only root should see.
  1395. +    mkdir /mnt/secure 0700 root root
  1396. +
  1397. +    # Directory for staging bindmounts
  1398. +    mkdir /mnt/secure/staging 0700 root root
  1399. +
  1400. +    # Directory-target for where the secure container
  1401. +    # imagefile directory will be bind-mounted
  1402. +    mkdir /mnt/secure/asec  0700 root root
  1403. +
  1404. +    # Secure container public mount points.
  1405. +    mkdir /mnt/asec  0700 root system
  1406. +    mount tmpfs tmpfs /mnt/asec mode=0755,gid=1000
  1407. mount rootfs rootfs / ro remount
  1408. @@ -55,6 +78,46 @@
  1409. write /proc/cpu/alignment 4
  1410. write /proc/sys/kernel/sched_latency_ns 10000000
  1411. write /proc/sys/kernel/sched_wakeup_granularity_ns 2000000
  1412. +    write /proc/sys/kernel/sched_compat_yield 1
  1413. +    write /proc/sys/kernel/sched_child_runs_first 0
  1414. +
  1415. +# Create cgroup mount points for process groups
  1416. +    mkdir /dev/cpuctl
  1417. +    mount cgroup none /dev/cpuctl cpu
  1418. +    chown system system /dev/cpuctl
  1419. +    chown system system /dev/cpuctl/tasks
  1420. +    chmod 0777 /dev/cpuctl/tasks
  1421. +    write /dev/cpuctl/cpu.shares 1024
  1422. +
  1423. +    mkdir /dev/cpuctl/fg_boost
  1424. +    chown system system /dev/cpuctl/fg_boost/tasks
  1425. +    chmod 0777 /dev/cpuctl/fg_boost/tasks
  1426. +    write /dev/cpuctl/fg_boost/cpu.shares 1024
  1427. +
  1428. +    mkdir /dev/cpuctl/bg_non_interactive
  1429. +    chown system system /dev/cpuctl/bg_non_interactive/tasks
  1430. +    chmod 0777 /dev/cpuctl/bg_non_interactive/tasks
  1431. +    # 5.0 %
  1432. +    write /dev/cpuctl/bg_non_interactive/cpu.shares 52
  1433. +
  1434. +    # Create dump dir and collect dumps.
  1435. +    # Do this before we mount cache so eventually we can use cache for
  1436. +    # storing dumps on platforms which do not have a dedicated dump partition.
  1437. +
  1438. +    mkdir /data/dontpanic
  1439. +    chown root log /data/dontpanic
  1440. +    chmod 0750 /data/dontpanic
  1441. +
  1442. +    # Collect apanic data, free resources and re-arm trigger
  1443. +    copy /proc/apanic_console /data/dontpanic/apanic_console
  1444. +    chown root log /data/dontpanic/apanic_console
  1445. +    chmod 0640 /data/dontpanic/apanic_console
  1446. +
  1447. +    copy /proc/apanic_threads /data/dontpanic/apanic_threads
  1448. +    chown root log /data/dontpanic/apanic_threads
  1449. +    chmod 0640 /data/dontpanic/apanic_threads
  1450. +
  1451. +    write /proc/apanic_console 1
  1452. # mount MMC partitions
  1453. mount vfat /dev/block/mmcblk1p2 /rom sync noatime nodiratime uid=1000,gid=1000,fmask=117,dmask=007
  1454. @@ -382,8 +445,8 @@
  1455. service vold /system/bin/vold
  1456. socket vold stream 0660 root mount
  1457. -#service mountd /system/bin/mountd
  1458. -#    socket mountd stream 0660 root mount
  1459. +service netd /system/bin/netd
  1460. +    socket netd stream 0660 root system
  1461. service debuggerd /system/bin/debuggerd
  1462. @@ -396,10 +459,13 @@
  1463. service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server
  1464. socket zygote stream 666
  1465. onrestart write /sys/android_power/request_state wake
  1466. +    onrestart write /sys/power/state on
  1467. +    onrestart restart media
  1468. service media /system/bin/mediaserver
  1469. user media
  1470. -    group system audio camera graphics inet net_bt net_bt_admin
  1471. +    group system audio camera graphics inet net_bt net_bt_admin net_raw
  1472. +    ioprio rt 4
  1473. service fw3a /system/bin/fw3a_core
  1474. user root
  1475. @@ -421,6 +487,37 @@
  1476. user bluetooth
  1477. group bluetooth net_bt_admin
  1478. +service bluetoothd /system/bin/bluetoothd -n
  1479. +    socket bluetooth stream 660 bluetooth bluetooth
  1480. +    socket dbus_bluetooth stream 660 bluetooth bluetooth
  1481. +    # init.rc does not yet support applying capabilities, so run as root and
  1482. +    # let bluetoothd drop uid to bluetooth with the right linux capabilities
  1483. +    group bluetooth net_bt_admin misc
  1484. +    disabled
  1485. +
  1486. +service hfag /system/bin/sdptool add --channel=10 HFAG
  1487. +    user bluetooth
  1488. +    group bluetooth net_bt_admin
  1489. +    disabled
  1490. +    oneshot
  1491. +
  1492. +service hsag /system/bin/sdptool add --channel=11 HSAG
  1493. +    user bluetooth
  1494. +    group bluetooth net_bt_admin
  1495. +    disabled
  1496. +    oneshot
  1497. +
  1498. +service opush /system/bin/sdptool add --channel=12 OPUSH
  1499. +    user bluetooth
  1500. +    group bluetooth net_bt_admin
  1501. +    disabled
  1502. +    oneshot
  1503. +
  1504. +service pbap /system/bin/sdptool add --channel=19 PBAP
  1505. +    user bluetooth
  1506. +    group bluetooth net_bt_admin
  1507. +    disabled
  1508. +    oneshot
  1509. service installd /system/bin/installd
  1510. socket installd stream 600 system system
  1511. @@ -432,8 +529,6 @@
  1512. disabled
  1513. oneshot
  1514. -
  1515. -
  1516. service ifcfg_ti /system/bin/ifconfig tiwlan0 up
  1517. disabled
  1518. oneshot
  1519. @@ -447,6 +542,19 @@
  1520. disabled
  1521. oneshot
  1522. +service racoon /system/bin/racoon
  1523. +    socket racoon stream 600 system system
  1524. +    # racoon will setuid to vpn after getting necessary resources.
  1525. +    group net_admin
  1526. +    disabled
  1527. +    oneshot
  1528. +
  1529. +service mtpd /system/bin/mtpd
  1530. +    socket mtpd stream 600 system system
  1531. +    user vpn
  1532. +    group vpn net_admin net_raw
  1533. +    disabled
  1534. +    oneshot
  1535. service keystore /system/bin/keystore /data/misc/keystore
  1536. user keystore
  1537. @@ -463,5 +571,7 @@
  1538. service debuglog /system/bin/
  1539. user root
  1540. -
  1541. -
  1542. +service dumpstate /system/bin/dumpstate -s
  1543. +    socket dumpstate stream 0660 shell log
  1544. +    disabled
  1545. +    oneshot
  1546. &lt;/pre&gt;
  1547. &lt;p&gt;At this point, (assuming I haven&amp;#039;t forgotten anything), you should have a MicroSD that will boot froyo on a nookcolor.&lt;/p&gt;
  1548. &lt;p&gt;...and then immediately shut down, ostensibly due to power issues. My sneaking suspicion is that this is because the kernel the nc is booting from is B&amp;amp;N&amp;#039;s original 2.6.29 image and there&amp;#039;s been a bit of skew in how it reads some bit of information out of /proc.&lt;/p&gt;
  1549. &lt;p&gt;The correct next step is to go and build a proper kernel for the device.&lt;/p&gt;
  1550. &lt;p&gt;The easy next step is to perform a brutal hackjob on android&amp;#039;s batteryservice.&lt;/p&gt;
  1552. &lt;h2&gt;Edit: I have no reason to believe that this is actually likely. But it&amp;#039;d be double-plus irresponsible of me to suggest that turning off a hardware safety feature was a good idea.&lt;/h2&gt;
  1553. &lt;p&gt;&amp;#160;&lt;/p&gt;
  1554. &lt;pre&gt; jesse@puppy ~/android-omapzoom/frameworks/base/services ((6c81cb0...) *) $ git diff
  1555. diff --git a/services/java/com/android/server/ b/services/java/com/android/server/
  1556. index 5cf61bd..bf96479 100644
  1557. --- a/services/java/com/android/server/
  1558. +++ b/services/java/com/android/server/
  1559. @@ -176,8 +176,8 @@ class BatteryService extends Binder {
  1560. void systemReady() {
  1561. // check our power situation now that it is safe to display the shutdown dialog.
  1562. -        shutdownIfNoPower();
  1563. -        shutdownIfOverTemp();
  1564. +        //shutdownIfNoPower();
  1565. +       // shutdownIfOverTemp();
  1566. }
  1567. private final void shutdownIfNoPower() {
  1568. @@ -210,8 +210,8 @@ class BatteryService extends Binder {
  1569. boolean logOutlier = false;
  1570. long dischargeDuration = 0;
  1571. -        shutdownIfNoPower();
  1572. -        shutdownIfOverTemp();
  1573. +      //  shutdownIfNoPower();
  1574. +        //shutdownIfOverTemp();
  1575. mBatteryLevelCritical = mBatteryLevel &amp;lt;= CRITICAL_BATTERY_LEVEL;
  1576. if (mAcOnline) {
  1577. &lt;/pre&gt;
  1578. &lt;p&gt;Once you&amp;#039;ve rebuilt the android core and reinstalled it on your system partition, you should now have something that boots froyo on your nook.&lt;/p&gt;
  1579. &lt;p&gt;This froyo is VERY MUCH not ready for primetime. Don&amp;#039;t expect WIFI, Bluetooth, Google Apps, reasonable performance, sensor access, etc.&lt;/p&gt;
  1580. &lt;p&gt;TI distributes wifi drivers and all the hardware acceleration you could possibly want:      &lt;a href=&quot;;&gt;;/a&gt; &lt;a href=&quot;;&gt;;/a&gt;&lt;/p&gt;
  1581. &lt;p&gt;This all would have taken me a great deal longer without [mbm]&amp;#039;s assistance and advice.&lt;/p&gt;
  1582. &lt;p&gt;My next steps will (probably) be to try to build a modern kernel from source and see what that does for driver support.&lt;/p&gt;
  1583. &lt;p&gt;Please note that I don&amp;#039;t plan to build a distributable ROM or to port Cyanogenmod, though I&amp;#039;d be thrilled to see someone pick up the torch and do so.&lt;/p&gt;
  1584. &lt;p&gt;I can&amp;#039;t distribute the OS image I have, as it contains a mix of free stuff and proprietary stuff pulled off of my nookcolor&amp;#039;s system partitions.&lt;/p&gt;
  1585. &lt;p&gt;If you&amp;#039;re looking to chatter with folks about development for the nookcolor, I&amp;#039;d recommend #nookcolor on;/p&gt;
  1586. </content>
  1587. </entry>
  1588. <entry>
  1589. <title>On privacy</title>
  1590. <link href=""/>
  1591. <updated>2010-09-04T03:45:00Z</updated>
  1592. <id></id>
  1593. <content type="html">&lt;p&gt;Not that I&#39;m really posting here much these days, but I don&#39;t expect you to limit your responses to me to LJ. If you want to spam your tweeps and faces with your replies to my posts, be my guest.&lt;/p&gt;
  1594. </content>
  1595. </entry>
  1596. <entry>
  1597. <title>OSI Model of the Internet - circa 2010</title>
  1598. <link href=""/>
  1599. <updated>2010-07-06T17:24:26Z</updated>
  1600. <id></id>
  1601. <content type="html">&lt;p&gt;&lt;a href=&quot;; title=&quot;OSI Model of the Internet circa 2010 by jesse, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;466&quot; height=&quot;500&quot; alt=&quot;OSI Model of the Internet circa 2010&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  1602. &lt;p&gt;&lt;em style=&quot;font-weight:bold;font-style:normal;&quot;&gt;&lt;br&gt;&lt;/em&gt;&lt;/p&gt;
  1603. &lt;p&gt;(With apologies to Evi Nemeth.)&lt;/p&gt;
  1604. </content>
  1605. </entry>
  1606. <entry>
  1607. <title>Pixel Qi</title>
  1608. <link href=""/>
  1609. <updated>2010-07-02T21:04:52Z</updated>
  1610. <id></id>
  1611. <content type="html">&lt;p&gt;Last weekend at foo camp, I got the opportunity to see a Pixel Qi display in person. Yesterday morning, they went up for sale on the &lt;a href=&quot;; target=&quot;_blank&quot;&gt;Maker Shed&lt;/a&gt;. I clicked buy. I bit the bullet and paid for overnight shipping. Last night I popped over to Microcenter and picked up a Samsung N135.&lt;/p&gt;
  1612. &lt;p&gt;This morning, FedEx delivered a box from Sebastapol.&lt;/p&gt;
  1613. &lt;p&gt;&lt;a href=&quot;; title=&quot;P7021954 by jesse, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;P7021954&quot;&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  1614. &lt;p&gt;8 screws and some fiddly plastic bits later, I have a netbook I can use outside. The display is Wow. Just Wow.&lt;/p&gt;
  1615. &lt;p&gt;&lt;a href=&quot;; title=&quot;P7021960 by jesse, on Flickr&quot;&gt;&lt;img src=&quot;; width=&quot;500&quot; height=&quot;375&quot; alt=&quot;P7021960&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  1616. &lt;p&gt;Inside, it&#39;s a normal laptop display. Outside, it&#39;s almost as bright as a Kindle (eInk) screen. Yes, it plays video just fine.&lt;br&gt;
  1618. &lt;/p&gt;&lt;p class=&quot;asset asset-video&quot; style=&quot;display:block;margin:0 auto;&quot; align=&quot;center&quot;&gt;&lt;/p&gt;
  1619. &lt;p&gt;&lt;/p&gt;
  1620. </content>
  1621. </entry>
  1622. <entry>
  1623. <title>Mixapp</title>
  1624. <link href=""/>
  1625. <updated>2010-06-04T20:48:38Z</updated>
  1626. <id></id>
  1627. <content type="html">&lt;p&gt;Some friends of mine have been hard at work on a social music app called &lt;a href=&quot;; target=&quot;_blank&quot;&gt;;MixApp&lt;/a&gt; for...a good long time now. They&#39;ve recently made the jump from desktop clients to a completely in-browser experience. This makes it a lot easier for new users to get started with it.&lt;/p&gt;
  1628. &lt;p&gt;Since the new UI is all-HTML, it means I can mess around with it using javascript bookmarklets. &amp;nbsp;If you&#39;re a mixapp user and you want a &quot;mini&quot; desktop player, just drag this link to your bookmarks bar. When you&#39;re logged into MixApp and click it, the player will minimise.&lt;/p&gt;
  1629. &lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;a href=&quot;javascript:jQuery(&#39;#player-left-column&#39;).hide();jQuery(&#39;#client-footer-container&#39;).hide();jQuery(&#39;#client&#39;).css(&#39;min-width&#39;,0);jQuery(&#39;#client&#39;).css(&#39;min-height&#39;,0);jQuery(&#39;#player-container&#39;).css(&#39;min-height&#39;,0);jQuery(&#39;#player-container&#39;).css(&#39;min-width&#39;,0);jQuery(&#39;#client-container&#39;).css(&#39;min-height&#39;,0);jQuery(&#39;#client-container&#39;).css(&#39;width&#39;,&#39;auto&#39;);jQuery(&#39;#player-main-column&#39;).css(&#39;left&#39;,&#39;13em&#39;);jQuery(&#39;#client-container&#39;).css(&#39;height&#39;,&#39;inherit&#39;);jQuery(&#39;#client-container&#39;).css(&#39;position&#39;,&#39;static&#39;);jQuery(&#39;#client-header&#39;).hide();jQuery(&#39;#uservoice-feedback&#39;).hide();jQuery(&#39;#client-header-container&#39;).hide();jQuery(&#39;#client&#39;).css(&#39;border&#39;,0);jQuery(&#39;#client&#39;).css(&#39;padding&#39;,&#39;0&#39;);jQuery(&#39;#room-list-container&#39;).hide();jQuery(&#39;#room-detail-container&#39;).hide();jQuery(&#39;#bottom-bar-container&#39;).hide();jQuery(&#39;#player-title&#39;).css(&#39;max-height&#39;,&#39;1.2em&#39;);jQuery(&#39;#player-title&#39;).css(&#39;overflow&#39;,&#39;hidden&#39;);jQuery(&#39;#player-title&#39;).css(&#39;text-overflow&#39;,&#39;ellipsis&#39;);jQuery(&#39;#player-title&#39;).css(&#39;white-space&#39;,&#39;nowrap&#39;);&quot;&gt;Mixapp Miniplayer&lt;/a&gt;&lt;/p&gt;
  1630. </content>
  1631. </entry>
  1632. <entry>
  1633. <title>Perl 5.12.1</title>
  1634. <link href=""/>
  1635. <updated>2010-05-18T18:35:43Z</updated>
  1636. <id></id>
  1637. <content type="html">&lt;blockquote&gt;&quot;Now suppose,&quot; chortled Dr. Breed, enjoying himself, &quot;that there were&lt;br&gt;
  1638. many possible ways in which water could crystallize, could freeze.&lt;br&gt;
  1639. Suppose that the sort of ice we skate upon and put into highballs&amp;mdash;&lt;br&gt;
  1640. what we might call ice-one&amp;mdash;is only one of several types of ice.&lt;br&gt;
  1641. Suppose water always froze as ice-one on Earth because it had never&lt;br&gt;
  1642. had a seed to teach it how to form ice-two, ice-three, ice-four&lt;br&gt;
  1643. ... And suppose,&quot; he rapped on his desk with his old hand again,&lt;br&gt;
  1644. &quot;that there were one form, which we will call ice-nine&amp;mdash;a crystal as&lt;br&gt;
  1645. hard as this desk&amp;mdash;with a melting point of, let us say, one-hundred&lt;br&gt;
  1646. degrees Fahrenheit, or, better still, a melting point of one-hundred-&lt;br&gt;
  1647. and-thirty degrees.&quot;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;
  1648. &lt;div align=&quot;right&quot;&gt;-- Kurt Vonnegut, &lt;i&gt;Cat&#39;s Cradle&lt;/i&gt;&lt;/div&gt;
  1649. &lt;p&gt;It gives me great pleasure to announce Perl 5.12.1, the second stable&lt;br&gt;
  1650. release of Perl 5.12.&lt;/p&gt;
  1651. &lt;p&gt;You can download Perl 5.12.1 from your favorite CPAN mirror or from:&lt;/p&gt;
  1652. &lt;p&gt;&lt;a href=&quot;;&gt;;/a&gt;&lt;/p&gt;
  1653. &lt;p&gt;SHA1 digests for this release are:&lt;/p&gt;
  1654. &lt;pre&gt;
  1655. 75a8a17cec15d68c6bb959b0aa9879d2ded6f90d  perl-5.12.1.tar.bz2
  1656. 83b99f08379782dc06594a85eeb279edc5b0ca44  perl-5.12.1.tar.gz
  1657. &lt;/pre&gt;
  1658. &lt;p&gt;This release contains minor bug fixes and updates of several core modules, as well as minor documentation updates.  It should be fully backward compatible with Perl 5.12.0.&lt;/p&gt;
  1659. &lt;p&gt;Perl 5.12.1 is a recommended upgrade for all users of Perl 5.12.&lt;/p&gt;
  1660. &lt;p&gt;You can find a full list of changes in the file &quot;perl5121delta.pod&quot; located in the &quot;pod&quot; directory inside the release and on the web at:&lt;/p&gt;
  1661. &lt;p&gt;&lt;a href=&quot;;&gt;;/a&gt;&lt;/p&gt;
  1662. &lt;p&gt;Perl 5.12.1 represents approximately four weeks of development since Perl 5.12.0 and contains approximately 4,000 lines of changes across 142 files from 28 authors.&lt;/p&gt;
  1663. &lt;p&gt;Perl continues to flourish into its third decade thanks to a vibrant community of users and developers.  The following people are known to have contributed the improvements that became Perl 5.12.1:&lt;/p&gt;
  1664. &lt;p&gt;Ævar Arnfjörð Bjarmason, Chris Williams, chromatic, Craig A. Berry,&lt;br&gt;
  1665. David Golden, Father Chrysostomos, Florian Ragwitz, Frank Wiegand,&lt;br&gt;
  1666. Gene Sullivan, Goro Fuji, H.Merijn Brand, James E Keenan, Jan Dubois,&lt;br&gt;
  1667. Jesse Vincent, Josh ben Jore, Karl Williamson, Leon Brocard, Michael&lt;br&gt;
  1668. Schwern, Nga Tang Chan, Nicholas Clark, Niko Tyni, Philippe Bruhat,&lt;br&gt;
  1669. Rafael Garcia-Suarez, Ricardo Signes, Steffen Mueller, Todd Rinaldo,&lt;br&gt;
  1670. Vincent Pit and Zefram.&lt;/p&gt;
  1671. &lt;p&gt;We expect to release Perl 5.12.2 in mid-August 2010, followed by Perl&lt;br&gt;
  1672. 5.12.3 in mid-November.  The next major release of Perl 5, 5.14.0 should&lt;br&gt;
  1673. appear in spring 2011.&lt;/p&gt;
  1674. </content>
  1675. </entry>
  1676. <entry>
  1677. <title>Goodbye, old friend.</title>
  1678. <link href=""/>
  1679. <updated>2010-03-23T04:13:28Z</updated>
  1680. <id></id>
  1681. <content type="html">&lt;pre&gt;Broadcast message from root@diesel (pts/1) (Mon Mar 22 21:04:25 2010):
  1682. is being decommissioned.
  1683. The system is going down for system halt NOW!
  1684. Shared connection to closed.
  1685. &lt;/pre&gt;
  1686. </content>
  1687. </entry>
  1688. <entry>
  1689. <title>K-9 Mail 2.400 for Android</title>
  1690. <link href=""/>
  1691. <updated>2010-01-24T02:25:51Z</updated>
  1692. <id></id>
  1693. <content type="html">&lt;p&gt;It gives me great pleasure to announce K-9 Mail 2.400. &amp;#160;This release&amp;#160;represents a significant improvement on K-9 Mail 2.000, released in&amp;#160;early December.&lt;/p&gt;
  1694. &lt;p&gt;
  1695. &lt;/p&gt;&lt;p&gt;K-9 Mail is an open-source email client for Android-powered devices.&amp;#160;Originally based on the client shipped with Android 1.0, K-9 Mail has&amp;#160;seen extensive development by a community of developers around the world&amp;#160;over the past 15 months.&lt;/p&gt;
  1696. &lt;p&gt;
  1697. &lt;/p&gt;&lt;p&gt;Major new features in this release include full-text search of mail,&amp;#160;&amp;quot;starring&amp;quot; of messages, the ability to perform actions on multiple&amp;#160;messages at once, a much more robust and efficient IMAP push mail&amp;#160;implementation, significant performance improvements and a new icon&amp;#160;designed by Vincent Lum.&lt;/p&gt;
  1698. &lt;p&gt;
  1699. &lt;/p&gt;&lt;p&gt;You can download K-9 Mail 2.400 from or from&amp;#160;the Android Market.&lt;/p&gt;
  1700. &lt;p&gt;
  1701. &lt;/p&gt;&lt;p&gt;Other user-visible changes include:&lt;/p&gt;
  1702. &lt;p&gt;
  1703. &lt;/p&gt;&lt;p&gt;&amp;#160;&amp;#160;* Guess mime type (when not specified) of attachments of received messages using file name extension so that we can open them - baolongnt&lt;/p&gt;
  1704. &lt;p&gt;&amp;#160;&amp;#160;* Headers in Accounts, Folder List and Message List now show unread count and background processing activity -- danapple0&lt;/p&gt;
  1705. &lt;p&gt;&amp;#160;&amp;#160;* Added a new &amp;quot;touch friendly&amp;quot; style with message previews - jessev&lt;/p&gt;
  1706. &lt;p&gt;&amp;#160;&amp;#160;* Made it possible to enable or disable &amp;quot;stars&amp;quot; for flagged messages - jessev&lt;/p&gt;
  1707. &lt;p&gt;&amp;#160;&amp;#160;* Added swipe-to-select for operations on multiple messages - jessev&lt;/p&gt;
  1708. &lt;p&gt;&amp;#160;&amp;#160;* There is now an Expunge action in the option menu. - danapple0&lt;/p&gt;
  1709. &lt;p&gt;&amp;#160;&amp;#160;* A new &amp;quot;Batch ops&amp;quot; option menu in Message List. &amp;#160;Provides star/unstar, mark as read/unread and delete and select/deselect all. &amp;#160;Move and copy are partially implemented, but disabled. -danapple0&lt;/p&gt;
  1710. &lt;p&gt;&amp;#160;&amp;#160;* The &amp;quot;Sort by...&amp;quot; menu now toggles ascending/descending when the currently selected sort mode is clicked. -danapple0&lt;/p&gt;
  1711. &lt;p&gt;&amp;#160;&amp;#160;* Eliminate carriage returns from reply and forward text. &amp;#160;(Fixes Issue 518) - danapple0&lt;/p&gt;
  1712. &lt;p&gt;&amp;#160;&amp;#160;* Add a global preference for enabling animations, beyond those that are necessary. &amp;#160;Defaults to &amp;quot;enabled.&amp;quot; -danapple0&lt;/p&gt;
  1713. &lt;p&gt;&amp;#160;&amp;#160;* 250, 500 and 1000 messages may now be synced per folder. - jessev&lt;/p&gt;
  1714. &lt;p&gt;&amp;#160;&amp;#160;* Allow user to set a limit on the number of folders to be handled with push technology. - danapple0&lt;/p&gt;
  1715. &lt;p&gt;&amp;#160;&amp;#160;* Initial implementation of CRAM-MD5 support for IMAP and SMTP. (Patch contributed by Russ Weeks &amp;lt;;gt; ) - jessev&lt;/p&gt;
  1716. &lt;p&gt;&amp;#160;&amp;#160;* For IMAP accounts, it is now possible to disable the copying of deleted messages to the Trash folder, by setting the Trash folder to -NONE-. - danapple0&lt;/p&gt;
  1717. &lt;p&gt;&amp;#160;&amp;#160;* Each IMAP account can be set to expunge messages in a folder as soon as a move or delete is performed on the folder (&amp;quot;immediately&amp;quot;), each time the folder is polled, or only when executed manually. - danapple0&lt;/p&gt;
  1718. &lt;p&gt;&amp;#160;&amp;#160;* For WebDAV accounts, the user can now choose the server-side equivalents of the special folders, just like for IMAP. - danapple0&lt;/p&gt;
  1719. &lt;p&gt;&amp;#160;&amp;#160;* Implemented delete intent broadcast using a modified patch from stephane.lajeunesse - baolongnt&lt;/p&gt;
  1720. &lt;p&gt;&amp;#160;&amp;#160;* Implementation of a Receiver and Service to provide for the capability to accept control from other Android applications. &amp;#160;Allows for changing both Account-level and global settings. &amp;#160;Account-level settings can be applied to a single Account or to all Accounts. - danapple0&lt;/p&gt;
  1721. &lt;p&gt;&amp;#160;&amp;#160;* Overhaul our setup wizard to have a more reasonable bottom bar and to reuse that layout code where possible; standardize the id of the &amp;#039;next&amp;#039; button - jessev&lt;/p&gt;
  1722. &lt;p&gt;&amp;#160;&amp;#160;* &amp;quot;Starred&amp;quot; messages in MessageList and Message views - jessev&lt;/p&gt;
  1723. &lt;p&gt;&amp;#160;&amp;#160;* Bulk-star, delete and &amp;quot;mark as read&amp;quot; for messages - baolongnt,danapple0,jessev&lt;/p&gt;
  1724. &lt;p&gt;&amp;#160;&amp;#160;* Implement References/In-Reply-To/X-User-Agent headers. Patch from e.w.stemle - jessev&lt;/p&gt;
  1725. &lt;p&gt;&amp;#160;&amp;#160;* You can now &amp;quot;swipe&amp;quot; left or right in the Message view to go to the previous or next message, respectively - jessev&lt;/p&gt;
  1726. &lt;p&gt;&amp;#160;&amp;#160;* First pass at stopping the &amp;quot;Sending messages&amp;quot; notification when there&amp;#039;s nothing to send. - jessev&lt;/p&gt;
  1727. &lt;p&gt;&amp;#160;&amp;#160;* fix the header background color to not ignore theme in horizontal mode - jessev&lt;/p&gt;
  1728. &lt;p&gt;&amp;#160;&amp;#160;* Add double-tap at top or bottom of a message to jump to the top or bottom of the message - jessev&lt;/p&gt;
  1729. &lt;p&gt;&amp;#160;&amp;#160;* Improvements to render quality of plaintext messages. - jessev&lt;/p&gt;
  1730. &lt;p&gt;&amp;#160;&amp;#160;* Added a message-flip animation. - jessev&lt;/p&gt;
  1731. &lt;p&gt;&amp;#160;&amp;#160;* New sort-by and reverse-sort icons by Vincent Lum - jessev&lt;/p&gt;
  1732. &lt;p&gt;&amp;#160;&amp;#160;* Deleting messages in messageView now preserves the direction the user was &amp;quot;travelling&amp;quot; in before the delete - jessev&lt;/p&gt;
  1733. &lt;p&gt;&amp;#160;&amp;#160;* Provide additional date format display options in Preferences - danapple0&lt;/p&gt;
  1734. &lt;p&gt;
  1735. &lt;/p&gt;&lt;p&gt;For a full set of release notes, please visit:&lt;/p&gt;
  1736. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;&lt;a href=&quot;;&gt;;/a&gt;&lt;/p&gt;
  1737. </content>
  1738. </entry>
  1739. <entry>
  1740. <title>Learn from my misery: Don&#39;t buy a nook.</title>
  1741. <link href=""/>
  1742. <updated>2010-01-23T03:33:18Z</updated>
  1743. <id></id>
  1744. <content type="html">&lt;h3&gt;The short version&lt;/h3&gt;
  1745. &lt;p&gt;Barnes &amp;amp; Noble&amp;#160;have, without a doubt, the worst customer service of&lt;br&gt;
  1746. any company I have dealt with in the past decade.&lt;/p&gt;
  1747. &lt;p&gt;They&amp;#039;ve made repeated promises to me that they&amp;#039;ve failed to keep and&lt;br&gt;
  1748. told me that it&amp;#039;s my fault. They&amp;#039;ve put out _press releases_ about how&lt;br&gt;
  1749. generously they were taking care of the customers whose nooks failed to&lt;br&gt;
  1750. arrive for Christmas and then turned around and flatly refused to honor&lt;br&gt;
  1751. that promise.&lt;/p&gt;
  1752. &lt;p&gt;If you want a hackable linux-based ebook reader with a great user experience and great customer support, &lt;a href=&quot;;&gt;buy a Kindle&lt;/a&gt;.&lt;/p&gt;
  1753. &lt;p&gt;&lt;strong&gt;Update - January 26:&lt;/strong&gt; It took the Internet four days to do what B&amp;amp;N never managed - Y&amp;#039;all have bought enough stuff from amazon after clicking that &amp;quot;buy a kindle&amp;quot; link above to net me $100 in referral fees (That&amp;#039;s 3 kindles and some assorted other stuff.) Thank you! In turn, I&amp;#039;ll be making a $100 donation to the EFF.&lt;/p&gt;
  1754. &lt;p&gt;&lt;strong&gt;Update - Feb 2: &lt;/strong&gt;Last Monday, around lunchtime, I got voicemail from Melanie at B&amp;amp;N. &amp;#160;We didn&amp;#039;t manage to actually connect on the phone until Wednesday. She was friendly and apologetic. &amp;#160;Somewhat differently than all my previous interactions, she told me that the reason I didn&amp;#039;t the promised compensation was that she had denied the request. And that she and made a mistake. She said she was sorry. The gift card showed up a few hours later and the shipping charges were refunded on Friday. All told, still not exactly the smoothest shopping experience. But it&amp;#039;s over.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  1755. &lt;h3&gt;The long, ranty version&lt;/h3&gt;
  1756. &lt;p&gt;On &lt;strong&gt;November 9th&lt;/strong&gt;, I ordered a nook from Barnes &amp;amp; Noble. It&lt;br&gt;
  1757. promised to be the most awesomest ebook-reading experience ever. With&lt;br&gt;
  1758. Wifi and 3G connectivity, it was clearly going to be better than the&lt;br&gt;
  1759. Kindle I had to &lt;a href=&quot;;&gt;hack to network overseas&lt;/a&gt;. With native support for ePub&lt;br&gt;
  1760. and PDF, I wasn&amp;#039;t going to need to go and &lt;a href=&quot;;&gt;gain root on the device&lt;/a&gt; and&lt;br&gt;
  1761. then &lt;a href=&quot;;&gt;spend weeks creating document conversion software like I did for the Kindle&lt;/a&gt;. Best of all, it was going to run Android, so I&amp;#039;d be able to &lt;a href=&quot;;&gt;write custom software for it&lt;/a&gt; with relative ease.&lt;/p&gt;
  1762. &lt;p&gt;When I placed my order on &lt;strong&gt;November 9th&lt;/strong&gt;, Barnes &amp;amp; Noble promised&lt;br&gt;
  1763. me a ship date of &lt;strong&gt;December 11th&lt;/strong&gt;. Oof. I waited patiently...&lt;/p&gt;
  1764. &lt;p&gt;On &lt;strong&gt;December 11th&lt;/strong&gt;, no nook arrived. Instead, I got email from&lt;br&gt;
  1765. Barnes &amp;amp; Noble:&lt;/p&gt;
  1766. &lt;blockquote&gt;&lt;pre&gt;From: Barnes &amp;amp; Noble &amp;lt;;gt;
  1767. To:
  1768. Subject: Here Comes Your nook
  1769. This is to confirm that your nook is about to ship. Although your
  1770. shipment has been slightly delayed, we&amp;#039;ve upgraded you to overnight
  1771. shipping to ensure you&amp;#039;ll receive your nook by December 18.
  1772. &lt;/pre&gt;
  1773. &lt;/blockquote&gt;
  1774. &lt;p&gt;On &lt;strong&gt;December 13th&lt;/strong&gt;, I was warned that accessories might hold up my order and that if I really wanted my nook, I should cancel the light and warranty I&amp;#039;d ordered along with my nook. In reply to my clicks, I got email from Barnes &amp;amp; Noble confirming that I had cancelled the booklight and warranty they sold me and that my nook had already entered the shipping process and was not cancelled.&lt;/p&gt;
  1775. &lt;p&gt;On &lt;strong&gt;December 17th&lt;/strong&gt;, I spoke to Barnes &amp;amp; Noble customer&lt;br&gt;
  1776. service. They confirmed that my nook had not shipped yet and that I would&lt;br&gt;
  1777. not receive it on the 18th. In fact, she told me that it would ship &lt;strong&gt;on&lt;/strong&gt;&lt;br&gt;
  1778. &lt;strong&gt;December 21st&lt;/strong&gt; and that it hadn&amp;#039;t been upgraded to overnight shipping - that&lt;br&gt;
  1779. it would show up on Christmas Eve. This was somewhat frustrating to me&lt;br&gt;
  1780. as this was now the _second_ missed ship date for my order. I wrote to&lt;br&gt;
  1781. customer service that night. Their autoreply told me they&amp;#039;d get back&lt;br&gt;
  1782. to me within 48 hours. They didn&amp;#039;t.&lt;/p&gt;
  1783. &lt;p&gt;On &lt;strong&gt;December 21st&lt;/strong&gt;, I called up Barnes &amp;amp; Noble to ask when my nook might&lt;br&gt;
  1784. ship. The first tier customer service rep was....actively hostile until&lt;br&gt;
  1785. after he put me on hold and read through my order. When he came back on&lt;br&gt;
  1786. the line, he said &amp;quot;Oh. You&amp;#039;re on a third delay. Hold please.&amp;quot; I believe&lt;br&gt;
  1787. that it was at this point that I was first told that if they blew their&lt;br&gt;
  1788. &lt;strong&gt;December 24th&lt;/strong&gt; delivery date, they were going to give me a $100 gift card.&lt;/p&gt;
  1789. &lt;p&gt;Later in the day on &lt;strong&gt;December 21st&lt;/strong&gt;, I got this mail from Barnes &amp;amp; Noble:&lt;/p&gt;
  1790. &lt;blockquote&gt;&lt;pre&gt;From: service &amp;lt;;gt;
  1791. To: jesse &amp;lt;;gt;
  1792. Subject: Re: Help! multiple nook delays and broken promises
  1793. Dear Customer,
  1794. We apologize for any confusion. You are set to receive the order on
  1795. 12/24.
  1796. &lt;/pre&gt;
  1797. &lt;/blockquote&gt;
  1798. &lt;p&gt;On &lt;strong&gt;December 24th&lt;/strong&gt;, I got this mail from Barnes &amp;amp; Noble:&lt;/p&gt;
  1799. &lt;blockquote&gt;&lt;pre&gt;Date: Thu, 24 Dec 2009 10:34:23 -0500 (EST)
  1800. From: service &amp;lt;;gt;
  1801. To: jesse &amp;lt;;gt;
  1802. Subject: Re: Help! multiple nook delays and broken promises
  1803. Dear Jesse Vincent,
  1804. Thank you for shopping with us.
  1805. Despite our efforts, we are unable to ship your order #xxxxxxxx in the
  1806. expected timeframe. We sincerely apologize for the multiple delays with
  1807. you item. We see that you have made contact with our customer service
  1808. center and you have been provided of the steps we are taking with your
  1809. order. We thank you for your patience and appreciate you working with us
  1810. in this matter.
  1811. &lt;/pre&gt;
  1812. &lt;/blockquote&gt;
  1813. &lt;p&gt;The &amp;quot;steps&amp;quot; the customer service rep alluded to were, of course,&lt;br&gt;
  1814. the promise made by Barnes &amp;amp; Noble the previous day - If I didn&amp;#039;t get&lt;br&gt;
  1815. my nook by Christmas, they were going to give me a $100 gift card.&lt;/p&gt;
  1816. &lt;p&gt;I replied to this mail within a few hours and heard nothing back by email for a week.&lt;/p&gt;
  1817. &lt;p&gt;On &lt;strong&gt;December 28th&lt;/strong&gt;, while waiting for a flight from Boston to San&lt;br&gt;
  1818. Francisco, I called Barnes &amp;amp; Noble&amp;#039;s customer service line again to&lt;br&gt;
  1819. ask when I might, you know, see my nook and the $100 they&amp;#039;d promised&lt;br&gt;
  1820. me. I was immediately transferred to a supervisor. The supervisor was&lt;br&gt;
  1821. friendly and apologetic. (Everyone I&amp;#039;ve spoken to at Barnes &amp;amp; Noble has&lt;br&gt;
  1822. been personally friendly and apologetic. Their call-center staff have&lt;br&gt;
  1823. _excellent_ empathy training.) The supervisor put me on hold and read&lt;br&gt;
  1824. over my order. When he came back on the line, he apologized again and&lt;br&gt;
  1825. confirmed that yes, something was wrong and that yes, Barnes &amp;amp; Noble owed&lt;br&gt;
  1826. me $100. He told me that I would receive email with a $100 Barnes &amp;amp; Noble&lt;br&gt;
  1827. gift card within 24 hours and that he was personally starting an inquiry&lt;br&gt;
  1828. into what the heck happened to my nook. He promised I&amp;#039;d get email back&lt;br&gt;
  1829. from him within a day. At that point, I was pretty happy that someone was&lt;br&gt;
  1830. finally being responsive and that this was basically all sorted out. &lt;/p&gt;
  1831. &lt;p&gt;About &lt;strong&gt;6 hours later&lt;/strong&gt;, I got off the plane at SFO and checked&lt;br&gt;
  1832. my email. I had mail from Barnes &amp;amp; Noble! It was not the mail I&lt;br&gt;
  1833. expected:&lt;/p&gt;
  1834. &lt;blockquote&gt;
  1835. &lt;pre&gt;Dear jesse vincent ,
  1836. As you requested, your order #xxxxxxxxxx been canceled.
  1837. &lt;/pre&gt;
  1838. &lt;/blockquote&gt;
  1839. &lt;p&gt;At this point, Barnes &amp;amp; Noble customer service was closed for the&lt;br&gt;
  1840. night. Some friends joked that perhaps Barnes &amp;amp; Noble felt so bad about&lt;br&gt;
  1841. how badly they&amp;#039;d jerked me around that they&amp;#039;d cancelled the order because&lt;br&gt;
  1842. they were sending me a free nook. That would have been nice. Sadly,&lt;br&gt;
  1843. it was not what had happened.&lt;/p&gt;
  1844. &lt;p&gt;I called the next day (&lt;strong&gt;December 29&lt;/strong&gt;) and related the&lt;br&gt;
  1845. newly updated tale of woe. I was put on hold and transferred to a&lt;br&gt;
  1846. supervisor. The supervisor was friendly and apologetic. She told&lt;br&gt;
  1847. me that the only thing she could do was to start an inquiry into my&lt;br&gt;
  1848. order with operations and that it would take up to three business days.&lt;br&gt;
  1849. Someone would get back to me before those three days were out and tell&lt;br&gt;
  1850. me what happened.&lt;/p&gt;
  1851. &lt;p&gt;Three business days came and went. No call from Barnes &amp;amp; Noble.&lt;/p&gt;
  1852. &lt;p&gt;Meanwhile, on &lt;strong&gt;January 1st&lt;/strong&gt;, I got email back from Barnes &amp;amp; Noble&lt;br&gt;
  1853. in reply to the email I sent them on &lt;strong&gt;December 24th&lt;/strong&gt;. It read:&lt;/p&gt;
  1854. &lt;blockquote&gt;
  1855. &lt;pre&gt;Dear Customer,
  1856. Thank you for your e-mail.
  1857. We recently received an email from you. However, the email did not
  1858. include a text message. Kindly re-send your inquiry with a text message
  1859. so that we may respond to your request.
  1860. &lt;/pre&gt;
  1861. &lt;/blockquote&gt;
  1862. &lt;p&gt;...followed by &lt;em&gt;the full text of the message I&amp;#039;d sent them.&lt;/em&gt;&lt;/p&gt;
  1863. &lt;p&gt;A day later, on &lt;strong&gt;January 2nd&lt;/strong&gt;, they sent me another reply to the same message:&lt;/p&gt;
  1864. &lt;blockquote&gt;
  1865. &lt;pre&gt;Dear Customer,
  1866. Thank you for inquiring about your order with We&amp;#039;ve
  1867. changed our order inquiry policy to futher strengthen the privacy and
  1868. security needs of our customers.
  1869. To respond to your request, we must ask you to provide your order
  1870. number, which you can find in the subject line of your order
  1871. confirmation email or shipping confirmation email.
  1872. &lt;/pre&gt;
  1873. &lt;/blockquote&gt;
  1874. &lt;p&gt;...followed by &lt;em&gt;the full text of the mail I&amp;#039;d sent them, including the exchange I&amp;#039;d had with Barnes &amp;amp; Noble customer service staff dating back to &lt;strong&gt;December 21st&lt;/strong&gt;.&lt;/em&gt; This included the ticket number we&amp;#039;d been corresponding on throughout this time, as well as my name, address, phone number, email address and, of course, the order number.&lt;/p&gt;
  1875. &lt;p&gt;On &lt;strong&gt;January 3rd&lt;/strong&gt;, I called up Barnes &amp;amp; Noble customer service&lt;br&gt;
  1876. again. Once I provided my order number and an abbreviated sob story, I&lt;br&gt;
  1877. was transferred to Regillio, a supervisor. He was polite and apologetic.&lt;br&gt;
  1878. He put me on hold and read through the notes on my order. When he got&lt;br&gt;
  1879. back on the phone, he told me that he was going to have to research this&lt;br&gt;
  1880. issue and get back to me.&lt;/p&gt;
  1881. &lt;p&gt;On &lt;strong&gt;January 4th&lt;/strong&gt;, he called me back. The man deserves a medal.&lt;br&gt;
  1882. He told me that yes, something had cancelled my order, but that it&lt;br&gt;
  1883. was clearly in error. Unfortunately, there was no way to resurrect&lt;br&gt;
  1884. the order. He could, however, enter a new order and bump it to the&lt;br&gt;
  1885. front of the queue. Regillio did assure me that he was waiving the&lt;br&gt;
  1886. shipping charges on this new order and that I should ignore any shipping&lt;br&gt;
  1887. charges on the invoice. With shipping and tax, the order totalled out&lt;br&gt;
  1888. at &lt;strong&gt;$278.19&lt;/strong&gt;.&lt;/p&gt;
  1889. &lt;p&gt;On &lt;strong&gt;January 5th&lt;/strong&gt;, my nook shipped...via some sort of process that&lt;br&gt;
  1890. involved an off-brand delivery service from New Jersey shipping my nook to&lt;br&gt;
  1891. a USPS depot in Massachusetts and then having the postal service deliver&lt;br&gt;
  1892. my nook. It took 3 or 4 days to arrive. No, they didn&amp;#039;t honor their previous promise to upgrade my&lt;br&gt;
  1893. order to overnight shipping. It was only a few more days of delay,&lt;br&gt;
  1894. but it was another broken promise.&lt;/p&gt;
  1895. &lt;p&gt;As of &lt;strong&gt;January 22nd&lt;/strong&gt;, my credit card statement shows that Barnes&lt;br&gt;
  1896. &amp;amp; Noble charged me &lt;strong&gt;$278.19&lt;/strong&gt;. No, Barnes &amp;amp; Noble did&amp;#039;t refund the&lt;br&gt;
  1897. shipping charges like they&amp;#039;d promised. It&amp;#039;s not a lot of money in the&lt;br&gt;
  1898. grand scheme of things, but it was yet another broken promise.&lt;/p&gt;
  1899. &lt;p&gt;On &lt;strong&gt;January 7th&lt;/strong&gt;, Angie from Barnes &amp;amp; Noble emailed me to say&lt;br&gt;
  1900. they needed another 24-48 hours before they could tell me what happened&lt;br&gt;
  1901. to my gift card.&lt;/p&gt;
  1902. &lt;p&gt;On &lt;strong&gt;January 15th&lt;/strong&gt;, I called up Barnes &amp;amp; Noble&amp;#039;s customer&lt;br&gt;
  1903. service line to see if they&amp;#039;d managed to figure out why they hadn&amp;#039;t&lt;br&gt;
  1904. yet sent me the gift card they&amp;#039;d promised or called me back to explain&lt;br&gt;
  1905. what had gone wrong. I read my order number to the first-tier customer&lt;br&gt;
  1906. service rep. She told me that she was transferring me to a supervisor.&lt;br&gt;
  1907. The supervisor, Wendy, was polite and apologetic. She told me that my&lt;br&gt;
  1908. order&amp;#039;s notes showed that Barnes &amp;amp; Noble corporate had rescinded their&lt;br&gt;
  1909. promise to send me a $100 gift card because I&amp;#039;d cancelled my order.&lt;br&gt;
  1910. She then commented that this must clearly be in error because the notes&lt;br&gt;
  1911. also indicated that for weeks after I&amp;#039;d purportedly cancelled my order I&amp;#039;d&lt;br&gt;
  1912. been told, every several days, that my nook would ship in several days.&lt;br&gt;
  1913. She told me that she would petition management to un-rescind their&lt;br&gt;
  1914. promise to me. She promised to get back to me by the &lt;strong&gt;end of the day&lt;br&gt;
  1915. or the following Monday&lt;/strong&gt;.&lt;/p&gt;
  1916. &lt;p&gt;Nobody called me on Monday, &lt;strong&gt;January 18th&lt;/strong&gt;.&lt;/p&gt;
  1917. &lt;p&gt;On &lt;strong&gt;January 20th&lt;/strong&gt;, I called Barnes &amp;amp; Noble to ask what had&lt;br&gt;
  1918. ever happened to that $100 they promised me. The first-tier customer&lt;br&gt;
  1919. service rep spent a few minutes reading the notes on my order before&lt;br&gt;
  1920. telling me that &amp;quot;oh, yeah. I see here we said we&amp;#039;d get back to you by&lt;br&gt;
  1921. Monday. And I don&amp;#039;t see any notation that we ever got back to you.&amp;quot;&lt;br&gt;
  1922. I waited on hold for a supervisor for 15 or so minutes. The supervisor&lt;br&gt;
  1923. was friendly and apologetic. She told me that they would investigate&lt;br&gt;
  1924. what happened and get back to me in 3 business days. I explained to her&lt;br&gt;
  1925. (politely, I promise!) why that wasn&amp;#039;t going to be ok. She transferred&lt;br&gt;
  1926. me to her supervisor, Tiffany. Tiffany was even more friendly and even&lt;br&gt;
  1927. more apologetic. Tiffany promised to call me back on Friday to tell me&lt;br&gt;
  1928. what had really happened and how Barnes &amp;amp; Noble was going to fix it.&lt;/p&gt;
  1929. &lt;p&gt;Today is &lt;strong&gt;January 22nd&lt;/strong&gt;. Tiffany called me back about an hour&lt;br&gt;
  1930. ago and told me that &lt;strong&gt;Melanie, a Vice President of&lt;br&gt;
  1931. Customer Care&lt;/strong&gt; had instructed her to tell me that, despite repeated&lt;br&gt;
  1932. assurances to the contrary, Barnes &amp;amp; Noble wasn&amp;#039;t going to be able to&lt;br&gt;
  1933. honor their promise to me because their computers showed that my order&lt;br&gt;
  1934. had been cancelled.&lt;/p&gt;
  1935. &lt;h3&gt;Where do I go from here?&lt;/h3&gt;
  1936. &lt;p&gt;At this point, I have little hope of ever seeing any sort of&lt;br&gt;
  1937. compensation from Barnes &amp;amp; Noble. They&amp;#039;ve strung me out past the limit&lt;br&gt;
  1938. of their 14-day return policy, so I couldn&amp;#039;t even return the device.&lt;/p&gt;
  1939. &lt;p&gt;I don&amp;#039;t really know what&amp;#039;s next for me and the nook. I can tell you&lt;br&gt;
  1940. that Barnes &amp;amp; Noble are never getting another dime of my money. I hope&lt;br&gt;
  1941. you think twice before giving them any of yours.&lt;/p&gt;
  1942. &lt;p&gt;Somewhat coincidentally, Amazon announced the Official Kindle SDK this week. If you want a hackable linux-based ebook reader with a great user experience and great customer support, &lt;a href=&quot;;&gt;buy a Kindle&lt;/a&gt;. (Yes, I make money if you click that link. Actually, if just four people buy Kindles because of this post, I end up with the $100 Barnes &amp;amp; Noble stiffed me.)&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  1943. &lt;p&gt;&lt;strong&gt;Update - January 26: &lt;/strong&gt;It took the Internet four days to do what B&amp;amp;N never managed - Y&amp;#039;all have bought enough stuff from amazon after clicking that &amp;quot;buy a kindle&amp;quot; link above to net me $100 in referral fees. (That&amp;#039;s 3 kindles and some assorted other stuff.) Thank you! In turn, I&amp;#039;ll be making a $100 donation to the EFF.&lt;/p&gt;
  1944. &lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-weight:normal;&quot;&gt;&lt;strong&gt;Update - Feb 2:&amp;#160;&lt;/strong&gt;Last Monday, around lunchtime, I got voicemail from Melanie at B&amp;amp;N. &amp;#160;We didn&amp;#039;t manage to actually connect on the phone until Wednesday. She was friendly and apologetic. &amp;#160;Somewhat differently than all my previous interactions, she told me that the reason I didn&amp;#039;t the promised compensation was that she had denied the request. And that she and made a mistake. She said she was sorry. The gift card showed up a few hours later and the shipping charges were refunded on Friday. All told, still not exactly the smoothest shopping experience. But it&amp;#039;s over.&lt;/span&gt;&lt;br&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  1945. </content>
  1946. </entry>
  1947. <entry>
  1948. <title>Tentative 2009 travel</title>
  1949. <link href=""/>
  1950. <updated>2010-01-01T23:02:00Z</updated>
  1951. <id></id>
  1952. <content type="html">&lt;p&gt;&lt;a href=&quot;;amp;RANGE=&amp;amp;PATH-COLOR=red&amp;amp;PATH-UNITS=mi&amp;amp;PATH-MINIMUM=&amp;amp;SPEED-GROUND=&amp;amp;SPEED-UNITS=kts&amp;amp;RANGE-STYLE=best&amp;amp;RANGE-COLOR=navy&amp;amp;MAP-STYLE=&quot;&gt;&lt;img src=&quot;,bos-ord-nrt-tpe-nrt-jfk-bos,bos-dfw-hnl-dfw-hnl,bos-ord-cmi-ord-bos,bos-ord-pit-ord-bos,bos-sfo-lax-bos,bos-lhr-lis-lhr-bos,bos-sfo-bos,bos-jfk-nrt-jfk-bos,bos-lhr-mad-lhr-bos&amp;amp;PATH-COLOR=red&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  1953. &lt;p&gt;Exceedingly tentative 2009 travel schedule.&lt;/p&gt;
  1954. &lt;p&gt;Initial estimate: 75736 miles&lt;/p&gt;
  1955. &lt;p&gt;Current total estimate: 82264&lt;/p&gt;
  1956. &lt;p&gt;Miles flown to date: 36228&lt;/p&gt;
  1957. </content>
  1958. </entry>
  1959. <entry>
  1960. <title>NYE at 23i</title>
  1961. <link href=""/>
  1962. <updated>2009-12-27T22:10:00Z</updated>
  1963. <id></id>
  1964. <content type="html">&lt;p&gt;Hi! &lt;/p&gt;
  1965. &lt;p&gt;As we get ever-better at just-in-time party planning, we&#39;re able to defer planning, announcing or even inviting people to parties until the last minute. This year, we&#39;ve managed a new record - New Year&#39;s Eve is less than a week away and this is the first you&#39;re hearing about our party. That doesn&#39;t mean we don&#39;t want to see you, just that we&#39;re VERY good at procrastination.&lt;/p&gt;
  1966. &lt;p&gt;If you find yourself in the Western hemisphere on December 31, we&#39;d love to see you. &lt;/p&gt;
  1967. &lt;p&gt;We&#39;ll have the requisite snacks, booze and non-booze. We also have a limited amount of crash space. If you know you&#39;ll want a place to sleep, please don&#39;t hesitate to ask.&lt;/p&gt;
  1968. &lt;p&gt;23 Ibbetson St, Somerville MA&lt;br&gt;
  1969. +1 617 319 5823&lt;/p&gt;
  1970. </content>
  1971. </entry>
  1972. <entry>
  1973. <title>An untitled post</title>
  1974. <link href=""/>
  1975. <updated>2009-12-22T22:16:41Z</updated>
  1976. <id></id>
  1977. <content type="html">&lt;blockquote&gt;Say -- I&amp;#039;m going in a swimming, I am. Don&amp;#039;t you wish you could? But of&lt;br&gt;
  1978. course you&amp;#039;d druther work -- wouldn&amp;#039;t you? Course you would!&amp;quot;&lt;br&gt;
  1979. Tom contemplated the boy a bit, and said: &amp;quot;What do you call work?&amp;quot;&lt;br&gt;
  1980. &amp;quot;Why ain&amp;#039;t that work?&amp;quot;&lt;br&gt;
  1981. Tom resumed his whitewashing, and answered carelessly: &amp;quot;Well, maybe it&lt;br&gt;
  1982. is, and maybe it aint. All I know, is, it suits Tom Sawyer.&amp;quot;&lt;br&gt;
  1983. &amp;quot;Oh come, now, you don&amp;#039;t mean to let on that you like it?&amp;quot;&lt;br&gt;
  1984. The brush continued to move. &amp;quot;Like it? Well I don&amp;#039;t see why I oughtn&amp;#039;t&lt;br&gt;
  1985. to like it. Does a boy get a chance to whitewash a fence every day?&amp;quot;&lt;br&gt;
  1986. That put the thing in a new light. Ben stopped nibbling his apple. Tom&lt;br&gt;
  1987. swept his brush daintily back and forth—stepped back to note the effect&lt;br&gt;
  1988. -- added a touch here and there-criticised the effect again -- Ben&lt;br&gt;
  1989. watching every move and getting more and more interested, more and more&lt;br&gt;
  1990. absorbed. Presently he said: &amp;quot;Say, Tom, let me whitewash a little.&amp;quot;
  1991. &lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;
  1992. &lt;p style=&quot;text-align:right;&quot;&gt;Mark Twain, &lt;em&gt;The Adventures of Tom Sawyer&lt;/em&gt;&lt;/p&gt;
  1993. &lt;p&gt;It gives me great pleasure to announce the release of Perl 5.11.3.&lt;/p&gt;
  1994. &lt;p&gt;This is the fourth DEVELOPMENT release in the 5.11.x series leading to a&lt;br&gt;
  1995. stable release of Perl 5.12.0. You can find a list of high-profile changes&lt;br&gt;
  1996. in this release in the file &amp;quot;perl5113delta.pod&amp;quot; inside the distribution.&lt;/p&gt;
  1997. &lt;p&gt;Perl 5.11.3 is, hopefully, the last release of Perl 5.11.x before&lt;br&gt;
  1998. code freeze for Perl 5.12.0. At that point, we will only make changes&lt;br&gt;
  1999. which fix regressions from previous released versions of Perl or which&lt;br&gt;
  2000. resolve issues we believe would make a stable release of Perl 5.12.0&lt;br&gt;
  2001. inadvisable.&lt;/p&gt;
  2002. &lt;p&gt;You can (or will shortly be able to) download the 5.11.3 release from:&lt;/p&gt;
  2003. &lt;p&gt;
  2004. &lt;a href=&quot;;&gt;;/a&gt;&lt;/p&gt;
  2005. &lt;p&gt;The release&amp;#039;s SHA1 signatures are:&lt;br&gt;
  2006. &lt;br&gt;
  2007. &lt;font face=&quot;Courier&quot;&gt;MD5: 0051020f8ae2a89c9d624e01ed56b02c   perl-5.11.3.tar.bz2&lt;br&gt;
  2008. SHA1: 7fe87005437002f0b515d983429d0bfba36398ac perl-5.11.3.tar.bz2&lt;br&gt;
  2009. &lt;/font&gt;&lt;/p&gt;
  2010. &lt;p&gt;
  2011. This release corresponds to commit 9c3f2640bc in Perl&amp;#039;s git repository.&lt;br&gt;
  2012. It is tagged as &amp;#039;v5.11.3&amp;#039;.&lt;/p&gt;
  2013. &lt;p&gt;We welcome your feedback on this release. If you discover issues&lt;br&gt;
  2014. with Perl 5.11.3, please use the &amp;#039;perlbug&amp;#039; tool included in this&lt;br&gt;
  2015. distribution to report them. If Perl 5.11.3 works well for you, please&lt;br&gt;
  2016. use the &amp;#039;perlthanks&amp;#039; tool included with this distribution to tell the&lt;br&gt;
  2017. all-volunteer development team how much you appreciate their work.&lt;/p&gt;
  2018. &lt;p&gt;If you write software in Perl, it is particularly important that you test&lt;br&gt;
  2019. your software against development releases. While we strive to maintain&lt;br&gt;
  2020. source compatibility with prior stable versions of Perl wherever possible,&lt;br&gt;
  2021. it is always possible that a well-intentioned change can have unexpected&lt;br&gt;
  2022. consequences. If you spot a change in a development version which breaks&lt;br&gt;
  2023. your code, it&amp;#039;s much more likely that we will be able to fix it before the&lt;br&gt;
  2024. next stable release. If you only test your code against stable releases&lt;br&gt;
  2025. of Perl, it may not be possible to undo a backwards-incompatible change&lt;br&gt;
  2026. which breaks your code.&lt;/p&gt;
  2027. &lt;p&gt;Perl 5.11.3 represents approximately one month of development since&lt;br&gt;
  2028. Perl 5.11.2 and contains 61407 lines of changes across 396 files&lt;br&gt;
  2029. from 40 authors and committers:&lt;/p&gt;
  2030. &lt;p&gt;Abigail, Alex Davies, Alexandr Ciornii, Andrew Rodland, Andy&lt;br&gt;
  2031. Dougherty, Bram, brian d foy, Chip Salzenberg, Chris Williams, Craig&lt;br&gt;
  2032. A. Berry, Daniel Frederick Crisman, David Golden, Dennis Kaarsemaker,&lt;br&gt;
  2033. Eric Brine, Father Chrysostomos, Gene Sullivan, Gerard Goossen, H.&lt;br&gt;
  2034. Merijn Brand, Hugo van der Sanden, Jan Dubois, Jerry D. Hedden,&lt;br&gt;
  2035. Jesse Vincent, Jim Cromie, Karl Williamson, Leon Brocard, Max&lt;br&gt;
  2036. Maischein, Michael Breen, Moritz Lenz, Nicholas Clark, Rafael&lt;br&gt;
  2037. Garcia-Suarez, Reini Urban, Ricardo Signes, Stepan Kasal, Steve&lt;br&gt;
  2038. Hay, Steve Peters, Tim Bunce, Tony Cook, Vincent Pit and Zefram.&lt;/p&gt;
  2039. &lt;p&gt;Many of the changes included in this version originated in the CPAN&lt;br&gt;
  2040. modules included in Perl&amp;#039;s core. We&amp;#039;re grateful to the entire CPAN&lt;br&gt;
  2041. community for helping Perl to flourish.&lt;/p&gt;
  2042. &lt;p&gt;Notable changes in this release:&lt;/p&gt;
  2043. &lt;ul&gt;
  2044. &lt;li&gt;Perl is shipped with Unicode version 5.2, itself released in October&lt;br&gt;
  2045. 2009.
  2046. &lt;/li&gt;
  2047. &lt;li&gt;Perl can now handle every Unicode character property.
  2048. &lt;/li&gt;
  2049. &lt;li&gt;The experimental &amp;#039;legacy&amp;#039; pragma, introduced with Perl 5.11.2 has been&lt;br&gt;
  2050. removed. Its functionality has been replaced with the &amp;#039;feature&amp;#039; pragma.
  2051. &lt;/li&gt;
  2052. &lt;li&gt;Numerous CPAN &amp;quot;toolchain&amp;quot; modules have been updated to what we hope&lt;br&gt;
  2053. are the final release versions for Perl 5.12.0.
  2054. &lt;/li&gt;
  2055. &lt;li&gt;Many crashing bugs or regressions from earlier releases of Perl were fixed&lt;br&gt;
  2056. for this release.
  2057. &lt;/li&gt;
  2058. &lt;/ul&gt;
  2059. &lt;p&gt;Development versions of Perl are released monthly on or about the 20th&lt;br&gt;
  2060. of the month by a monthly &amp;quot;release manager&amp;quot;. You can expect following&lt;br&gt;
  2061. upcoming releases:&lt;/p&gt;
  2062. &lt;ul&gt;
  2063. &lt;li&gt;January 20  - Ricardo Signes
  2064. &lt;/li&gt;
  2065. &lt;li&gt;February 20 - Steve Hay
  2066. &lt;/li&gt;
  2067. &lt;li&gt;March 20 - Ask Bjørn Hansen
  2068. &lt;/li&gt;
  2069. &lt;/ul&gt;
  2070. </content>
  2071. </entry>
  2072. <entry>
  2073. <title>Buy for Free?</title>
  2074. <link href=""/>
  2075. <updated>2009-12-08T01:02:33Z</updated>
  2076. <id></id>
  2077. <content type="html">&lt;p&gt;I got to play with a nook today.&lt;/p&gt;
  2078. &lt;p&gt;
  2079. &lt;/p&gt;&lt;p&gt;At lunch, I called the local B&amp;amp;N-operated college book store and asked if they had a nook. They confirmed that they had one and that I could take a bit of time to play with it.&lt;/p&gt;
  2080. &lt;p&gt;
  2081. &lt;/p&gt;&lt;p&gt;Showing up, I saw a nook on its stand and second nook just headed off into the back room with a manager. &amp;#160;The display nook was just powering up.&amp;#160;&lt;/p&gt;
  2082. &lt;p&gt;
  2083. &lt;/p&gt;&lt;p&gt;Boot time felt a little longer than the Kindle, but I didn&amp;#039;t have mine around for comparison.&lt;/p&gt;
  2084. &lt;p&gt;
  2085. &lt;/p&gt;&lt;p&gt;First up. The UI. &amp;#160;Aside from paging, all your interaction takes place on the touch display...and it&amp;#039;s a little weird. In about 20 minutes of playing around, I didn&amp;#039;t feel like I &amp;quot;got&amp;quot; the user interaction paradigm. Sometimes scrolling lists were in the UI. Sometimes they were on the eInk display. &amp;#160;I found myself really missing the Kindle&amp;#039;s joystick.&lt;/p&gt;
  2086. &lt;p&gt;
  2087. &lt;/p&gt;&lt;p&gt;Wifi bookstore browsing was a little spotty. I didn&amp;#039;t get a good feel for how the experience is &amp;quot;supposed&amp;quot; to feel.&lt;/p&gt;
  2088. &lt;p&gt;
  2089. &lt;/p&gt;&lt;p&gt;I decided to try to &amp;quot;share&amp;quot; one of the books that the demo nook had &amp;quot;bought&amp;quot; with myself. Adding contacts is really easy. You just type in a username and an email address on the touchscreen. &amp;#160;I didn&amp;#039;t make a single typo. The keyboard isn&amp;#039;t quite the standard Android keyboard - there&amp;#039;s actually _less_ visual feedback. But it worked pretty well.&lt;/p&gt;
  2090. &lt;p&gt;
  2091. &lt;/p&gt;&lt;p&gt;When I couldn&amp;#039;t find any way to &amp;quot;loan&amp;quot; me one of the demo unit&amp;#039;s books, I asked the B&amp;amp;N staffer. He told me that for now, &amp;quot;only a very limited number of books are actually available to loan.&amp;quot; &amp;#160;We tried to find one we could loan me. We couldn&amp;#039;t.&lt;/p&gt;
  2092. &lt;p&gt;
  2093. &lt;/p&gt;&lt;p&gt;It was at about this time that I casually asked if it might be possible to &amp;quot;try one of the ebooks from my laptop.&amp;quot; &amp;#160;I was dispatched to the Information Desk to ask permission. &amp;#160;The local staff weren&amp;#039;t aware of a policy, but decided that it was too risky for now and told me to check back in a day or two after they talk to corporate.&lt;/p&gt;
  2094. &lt;p&gt;
  2095. &lt;/p&gt;&lt;p&gt;So, dear readers, no &amp;quot;adb logtrace&amp;quot; output for you...yet.&amp;#160;&lt;/p&gt;
  2096. &lt;p&gt;
  2097. &lt;/p&gt;&lt;p&gt;While I was there, a couple 20-something guys came in and chatted up the B&amp;amp;N staffer for a bit. One of them said to the other - &amp;quot;Man, when my girlfriend gets hers, I&amp;#039; am so hacking it.&amp;quot; They went on to mention that it looked like it would be a lot easier to hack than the Kindle. &amp;#160;I kept my mouth shut.&lt;/p&gt;
  2098. &lt;p&gt;
  2099. &lt;/p&gt;&lt;p&gt;Next, the PDF reader. &amp;#160;It came as a surprise to the B&amp;amp;N staffer that there were already a couple PDFs on the Nook. &amp;#160;The good news: Reflow is there. Font size and typeface are user-selectable. &amp;#160;The bad news - Zoom and Pan-n-Scan were nowhere to be found.&lt;/p&gt;
  2100. &lt;p&gt;
  2101. &lt;/p&gt;&lt;p&gt;Random tidbits: &amp;#160;the back is removable. The B&amp;amp;N staffer claimed that nooks will come with several covers in different hues. &amp;#160;I wasn&amp;#039;t allowed to see the user-changeable battery. &amp;#160;Every nook has an email address - Presumably that works the same way as Amazon&amp;#039;s &amp;quot;mail your docs here&amp;quot; service.&amp;#160;&lt;/p&gt;
  2102. &lt;p&gt;
  2103. &lt;/p&gt;&lt;p&gt;The B&amp;amp;N staffer kept trying to push me to coverflow mode and away from &amp;quot;list the titles and authors of your books on the big, easily readable screen&amp;quot; mode. &amp;#160;I&amp;#039;m not really a fan of the coverflow UI for &amp;quot;pick between my 10 books.&amp;quot;&lt;/p&gt;
  2104. &lt;p&gt;
  2105. &lt;/p&gt;&lt;p&gt;The book-buying experience was pretty seamless, though it felt like there was less discoverability in the bookstore compared to Amazon&amp;#039;s on-device store. &amp;#160;Maybe I was just doing it wrong. &amp;#160;I did find and download several free books that came from Google Books. &amp;#160;They warned that they were uncorrected scans, but the quality was pretty reasonable. &amp;#160;They contained a mix of text and images and were quite readable. &amp;#160;The weirdest bit was trying to download a free book from the Google Books corpus: I had to click a big &amp;quot;Buy for free?&amp;quot; button and then confirm that I really wanted the book.&lt;/p&gt;
  2106. </content>
  2107. </entry>
  2108. <entry>
  2109. <title>K-9 Mail 2.000 for Android</title>
  2110. <link href=""/>
  2111. <updated>2009-12-04T04:37:05Z</updated>
  2112. <id></id>
  2113. <content type="html">&lt;p&gt;&lt;span style=&quot;font-family:arial;line-height:normal;&quot;&gt;I&amp;#039;m pleased to announce the release of K-9 Mail version 2.000. This release represents several months of development and about 7000 lines of code changes.
  2114. &lt;p&gt;The biggest &amp;quot;exciting new thing&amp;quot; in this release is Dan Applebaum&amp;#039;s work to bring us true Push Mail using IMAP IDLE. I&amp;#039;ve been using it for about a month now and can no longer live without it. On top of that, we&amp;#039;ve closed about 50 bugs across all aspects of the application. &amp;#160;I&amp;#039;ve included a list of bugs known to be resolved, as well as an abbreviated change list below.&amp;#160;&lt;/p&gt;
  2115. &lt;p&gt;
  2116. &lt;/p&gt;&lt;p&gt;You can download K-9 2.0 from the Android market. (There&amp;#039;s a good chance that you&amp;#039;re already using a 2.0 release candidate if you&amp;#039;ve been regularly updating K-9 from the market.)&lt;/p&gt;
  2117. &lt;p&gt;
  2118. &lt;/p&gt;&lt;p&gt;As always, we welcome your feedback. The best place to report issues is at The best place to discuss K-9 is the k-9-mail mailinglist at&amp;#160;;/p&gt;
  2119. &lt;p&gt;
  2120. &lt;/p&gt;&lt;p&gt;Changes in K-9 2.000 (since 1.011)&lt;/p&gt;
  2121. &lt;p&gt;
  2122. &lt;/p&gt;&lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* *Push mail for IMAP accounts* using IMAP IDLE - danapple0&lt;/p&gt;
  2123. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Accelerated message list loading using pipelined architecture - danapple0&lt;/p&gt;
  2124. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* More efficient background queue processing - danapple0&lt;/p&gt;
  2125. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Improved unread-count tracking - danapple0&lt;/p&gt;
  2126. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Improved threading model in MessagingController for higher efficiency and better responsiveness - danapple0&lt;/p&gt;
  2127. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Disable polling and pushing when no network is available - danapple0&lt;/p&gt;
  2128. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Provide explicit menu items to send messages from the Outbox - danapple0&lt;/p&gt;
  2129. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Restore operation of hot keys and zoom when viewing a message - danapple0&lt;/p&gt;
  2130. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Restore detection of hard keyboard to control display of navigation buttons when viewing a message - danapple0&lt;/p&gt;
  2131. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Persist a copy of the message list when rotating for faster response - danapple0&lt;/p&gt;
  2132. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Better deletion of IMAP messages and logging when deletion failures occur - danapple0&lt;/p&gt;
  2133. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* WebDAV / MS Exchange improvements: move, copy, delete and mark as unread now work. - danapple0&lt;/p&gt;
  2134. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Fixes for WebDAV connection problems. - danapple0&lt;/p&gt;
  2135. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Fixed bug where wrong messages is displayed after screen rotation (issue 556) - baolongnt&lt;/p&gt;
  2136. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Respect global &amp;#039;Background data&amp;#039; preference and provide ability to turn of all synchronization. - danapple0&lt;/p&gt;
  2137. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Fixes for running on Android 2.0 - danapple0, jessev&lt;/p&gt;
  2138. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* SMTP and IMAP protocol fixes - danapple0&lt;/p&gt;
  2139. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* &amp;quot;Delete from server&amp;quot; is now the default for IMAP andxzz WebDAV accounts - danapple0&lt;/p&gt;
  2140. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* New sort-by and reverse-sort icons by Vincent Lum&lt;/p&gt;
  2141. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Made the date column a bit wider to fully view time timestamp and view more of the date in landscape mode - baolongnt&lt;/p&gt;
  2142. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* We now accept all mime types when handling the android.intent.action.SEND intent - baolongnt&lt;/p&gt;
  2143. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Normalize padding in setup widgets; turn off &amp;quot;fading edges&amp;quot; in setup widgets - jessev&lt;/p&gt;
  2144. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Added content-type detection using file name extension (This adds better integration with OI File Manager which implements the ACTION_GET_CONTENT intent) - baolongnt&lt;/p&gt;
  2145. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Remove duplicated &amp;quot;make this account the default&amp;quot; option during setup - jessev&lt;/p&gt;
  2146. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Give the user the choice of whether to enable Push as they create a new IMAP account. - jessev&lt;/p&gt;
  2147. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Make the status messages for folders that are being synced with push a bit prettier - jessev&lt;/p&gt;
  2148. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Don&amp;#039;t show folder choosers before we have a working account -jessev&lt;/p&gt;
  2149. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Reorganize the Account Settings page, regrouping options by &amp;quot;what a reasonable user might want to change at the same time&amp;quot; - jessev&lt;/p&gt;
  2150. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Make our use of email/mail consistent. It&amp;#039;s &amp;quot;mail&amp;quot; except for &amp;quot;Email address&amp;quot; - jessev&lt;/p&gt;
  2151. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Rephrase a number of unclear or oddly phrased messages (many dating from AOSP) - jessev&lt;/p&gt;
  2152. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Slightly better MessageView fit-to-screen and scrollbar flow - jessev&lt;/p&gt;
  2153. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* First pass attempt at fixing the &amp;quot;Android 2.0 breaks contacts lookup&amp;quot; issue&lt;/p&gt;
  2154. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* K-9 now targets Android 1.6 (with 1.5 support) to support QVGA devices - jessev &amp;#160; &amp;#160;&lt;/p&gt;
  2155. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* K-9 now &amp;#160;provides 2 - 24 poll check periods - danapple0&lt;/p&gt;
  2156. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Account setup UI overhaul - jessev&amp;#160;&lt;/p&gt;
  2157. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Record permanent failures into K9mail-errors -danapple0&lt;/p&gt;
  2158. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* K-9 now detects &amp;quot;Aw:&amp;quot; as being the same as &amp;quot;Re:&amp;quot; - jessev&lt;/p&gt;
  2159. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Enable fast scroll in message view, list view and &amp;quot;pick a folder&amp;quot; dialogs -jessev&lt;/p&gt;
  2160. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Sort the &amp;quot;NONE&amp;quot; folder to the top of the &amp;quot;auto-expand folder&amp;quot; list -jessev&lt;/p&gt;
  2161. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* All our layouts now use dip instead of px, for great weird-resolution weird-screen-size justice - jessev&lt;/p&gt;
  2162. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Better italian translation - tauromenion&lt;/p&gt;
  2163. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Fixed issue with reply icon in subject in message view screen not being set properly when navigating around using up and down arrows - baolongnt&lt;/p&gt;
  2164. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Displays a warning and allows K-9 to continue in some situations that otherwise cause a crash. &amp;#160;-danapple0&lt;/p&gt;
  2165. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Eliminate secret debug preferences activity. &amp;#160;Add debug preferences to global preferences. - danapple0&lt;/p&gt;
  2166. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* WebDAV: Automatically add / separators if not supplied by user. &amp;#160;-danapple0&lt;/p&gt;
  2167. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* WebDAV: Set authentication header for downloading and sending messages, so that those functions work with sites using Basic authentication. -danapple0&lt;/p&gt;
  2168. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* WebDAV: Don&amp;#039;t swallow log Exceptions. &amp;#160;Instead, allow Exceptions to percolate up to higher levels so that they can be logged into K9mail-errors. - danapple0&lt;/p&gt;
  2169. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* WebDAV: Provide appendMessages function, so that Drafts get stored on the server - danapple0&lt;/p&gt;
  2170. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Prevent a crash and put up a Toast when invalid data is entered early in the new-account setup workflow - danapple0&lt;/p&gt;
  2171. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* MessageListener.synchronizeMailboxNewMessage() does not requires a context to be passed anymore. -baolongnt&lt;/p&gt;
  2172. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* We use the application as context when broadcasting message received intents - baolongnt&lt;/p&gt;
  2173. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Refactored intent constant classes - baolongnt&lt;/p&gt;
  2174. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Better icon for the About menu item - baolongnt&lt;/p&gt;
  2175. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Added intent for viewing individial messages - baolongnt&lt;/p&gt;
  2176. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;* Issues fixed in since 1.0x:&lt;/p&gt;
  2177. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 4 - danapple0&lt;/p&gt;
  2178. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 44 - baolongnt&lt;/p&gt;
  2179. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 59 - danapple0&lt;/p&gt;
  2180. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 133 - danapple0&lt;/p&gt;
  2181. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 290 - danapple0&lt;/p&gt;
  2182. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 448 - danapple0&lt;/p&gt;
  2183. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 482 - danapple0&lt;/p&gt;
  2184. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 538 - danapple0&lt;/p&gt;
  2185. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 551 - danapple0&lt;/p&gt;
  2186. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 556 - baolongnt&lt;/p&gt;
  2187. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 573 - mpredo&lt;br&gt;
  2188. sin&lt;/p&gt;
  2189. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 574 - danapple0&lt;/p&gt;
  2190. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 577 - danapple0&lt;/p&gt;
  2191. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 587 - danapple0&lt;/p&gt;
  2192. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 587 - danapple0&lt;/p&gt;
  2193. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 589 - baolongnt&lt;/p&gt;
  2194. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 589 - baolongnt&lt;/p&gt;
  2195. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 606 - mark.himsley&lt;/p&gt;
  2196. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 607 - baolongnt&lt;/p&gt;
  2197. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 628 - danapple0&lt;/p&gt;
  2198. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 650 - danapple0&lt;/p&gt;
  2199. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 651 - danapple0&lt;/p&gt;
  2200. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 654 - danapple0&lt;/p&gt;
  2201. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 656 - danapple0&lt;/p&gt;
  2202. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 657 - danapple0&lt;/p&gt;
  2203. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 668 - danapple0&lt;/p&gt;
  2204. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 673 - danapple0&lt;/p&gt;
  2205. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 675 - danapple0&lt;/p&gt;
  2206. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 682 - danapple0&lt;/p&gt;
  2207. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 696 - danapple0&lt;/p&gt;
  2208. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 708 - themaninthesuitcase (updated by danapple0)&lt;/p&gt;
  2209. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 710 - baolongnt&lt;/p&gt;
  2210. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 712 - danapple0&lt;/p&gt;
  2211. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 722 - danapple0&lt;/p&gt;
  2212. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 733 - danapple0&lt;/p&gt;
  2213. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 737 - danapple0&lt;/p&gt;
  2214. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 738 - danapple0&lt;/p&gt;
  2215. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 742 - danapple0&lt;/p&gt;
  2216. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 742 - danapple0&lt;/p&gt;
  2217. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 744 - jesse&lt;/p&gt;
  2218. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 747 - danapple0&lt;/p&gt;
  2219. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 752 - danapple0&lt;/p&gt;
  2220. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 753 - baolongnt&lt;/p&gt;
  2221. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 761 - baolongnt&lt;/p&gt;
  2222. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160; &amp;#160;* Issue 762 - baolongnt&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2223. &lt;p&gt;&lt;/p&gt;
  2224. </content>
  2225. </entry>
  2226. <entry>
  2227. <title>Kindle 2 users - HEADS UP!</title>
  2228. <link href=""/>
  2229. <updated>2009-11-24T23:31:11Z</updated>
  2230. <id></id>
  2231. <content type="html">&lt;p&gt;Today, Amazon shipped an update for your Kindle 2 (and for the DX and The Kindle 2 International). It adds PDF support. With reflow. &amp;#160;This is awesome and obsoletes a big part of what I was trying to do with savory.&lt;/p&gt;
  2232. &lt;p&gt;Now for the bad news. It looks like today&amp;#039;s firmware update locks down your device such that it will only take signed firmware updates. &amp;#160;I&amp;#039;m sure some enterprising haxx0r over at will homebrew up an alternate version of the updater that doesn&amp;#039;t screw you over. But you might want to leave your wireless turned off if the latest update hasn&amp;#039;t already been pushed on you.&lt;/p&gt;
  2233. </content>
  2234. </entry>
  2235. <entry>
  2236. <title>Odds and ends</title>
  2237. <link href=""/>
  2238. <updated>2009-11-10T06:22:11Z</updated>
  2239. <id></id>
  2240. <content type="html">&lt;p&gt;It&amp;#039;s been a while since I&amp;#039;ve blogged about Kindle stuff. I just pushed up the little bit of custom code from my cobbled together Ubuntu/X11 on Kindle hack.&amp;#160; You can find it at &lt;a href=&quot;;&gt; &lt;/a&gt;&lt;/p&gt;
  2241. &lt;p&gt;Making use of that is still a bit of work. You need to install a copy of Jaunty Jackalope (or possibly Karmic) for ARM into a QEmu emulator. Then grab that ext2 filesystem image, copy it over to your kindle (2, DX, etc) and mount it somewhere locally and then chroot into it.&amp;#160; From there, you can use the patch at the google code link above to build a copy of that will actually work on the Kindle&amp;#039;s display (and doesn&amp;#039;t depend on having a tty).&amp;#160; The various support scripts I used for my various demos are all up there as well.&amp;#160; This isn&amp;#039;t nearly as polished as Savory, but, well, it&amp;#039;s not really an end-user thing at this point ;)&lt;/p&gt;
  2242. &lt;p&gt;I don&amp;#039;t think I&amp;#039;m going to spend a whole lot more time on this, but you never know.&lt;/p&gt;
  2243. &lt;p&gt;I&amp;#039;ve been spending a bunch of my time on this &amp;quot;Perl&amp;quot; thing of late. Apparently,&lt;a href=&quot;;&gt; I volunteered myself to get Perl 5.12 out&lt;/a&gt;. Now I&amp;#039;m responsible for it or something.&lt;/p&gt;
  2244. &lt;p&gt;-j&lt;/p&gt;
  2245. </content>
  2246. </entry>
  2247. <entry>
  2248. <title>Oops! I did it again - Perl 5.11.1</title>
  2249. <link href=""/>
  2250. <updated>2009-10-20T22:48:29Z</updated>
  2251. <id></id>
  2252. <content type="html">&lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
  2253. &lt;blockquote&gt;&lt;p&gt;Milo had been caught red-handed in the act of plundering his countrymen, and, as a result, his stock had never been higher. He proved good as his word when a rawboned major from Minnesota curled his lip in rebellious disavowal and demanded his share of the syndicate Milo kept saying everybody owned. Milo met the challenge by writing the words &amp;quot;A Share&amp;quot; on the nearest scrap of paper and handing it away with a virtuous disdain that won the envy and admiration of almost everyone who knew him. His glory was at a peak, and Colonel Cathcart, who knew and admired his war record, was astonished by the deferential humility with which Milo presented himself at Group Headquarters and made his fantastic appeal for more hazardous assignment.&lt;/p&gt;&lt;/blockquote&gt;
  2254. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2255. &lt;p style=&quot;text-align:right;&quot;&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;- Joseph Heller, &lt;em&gt;Catch-22&lt;/em&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;
  2256. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;
  2257. &lt;p style=&quot;text-align:right;&quot;&gt;&amp;#160;&lt;/p&gt;
  2258. &lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;/p&gt;
  2259. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;It gives me great pleasure to announce the release of Perl 5.11.1.&lt;/span&gt;&lt;/p&gt;
  2260. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;This is the second DEVELOPMENT release in the 5.11.x series leading to a stable release of Perl 5.12.0. You can find a list of high-profile changes in this release in the file &amp;quot;perl5111delta.pod&amp;quot; inside the distribution.&lt;/span&gt;&lt;/p&gt;
  2261. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;You can (or will shortly be able to) download the 5.11.1 release from:&lt;/span&gt;&lt;/p&gt;
  2262. &lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre;&quot;&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;&lt;a href=&quot;; target=&quot;_blank&quot;&gt;;/a&gt;&lt;/span&gt;&lt;/p&gt;
  2263. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;The release&amp;#039;s SHA1 signatures are:&lt;/span&gt;&lt;/p&gt;
  2264. &lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre;&quot;&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;4eb796d28849ea21466166cea0b580d98163564f &amp;#160;perl-5.11.1.tar.bz2&lt;/span&gt;&lt;/p&gt;
  2265. &lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre;&quot;&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;aa4ca3b0cffa1bbcbcdb09e81c6ece759112ce14 &amp;#160;perl-5.11.1.tar.gz&lt;/span&gt;&lt;/p&gt;
  2266. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;We welcome your feedback on this release. If you discover issues with Perl 5.11.1, please use the &amp;#039;perlbug&amp;#039; tool included in this distribution to report them. If Perl 5.11.1 works well for you, please use the &amp;#039;perlthanks&amp;#039; tool included with this distribution to tell the all-volunteer development team how much you appreciate their work.&lt;/span&gt;&lt;/p&gt;
  2267. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;If you write software in Perl, it is particularly important that you test your software against development releases. While we strive to maintain source compatibility with prior stable versions of Perl wherever possible, it is always possible that a well-intentioned change can have unexpected consequences. If you spot a change in a development version which breaks your code, it&amp;#039;s much more likely that we will be able to fix it before the next stable release. If you only test your code against stable releases of Perl, it may not be possible to undo a backwards-incompatible change which breaks your code.&lt;/span&gt;&lt;/p&gt;
  2268. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;In the release announcement for 5.11.0, I asked readers to test the new version of Perl with their in-house applications and CPAN modules. &amp;#160;Among other things, that testing turned up previously undiscovered issues in a change to Perl&amp;#039;s Regular Expression semantics which we were able to defang in time for 5.11.1.&lt;/span&gt;&lt;/p&gt;
  2269. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;&#92;Notable changes in this release:&lt;/span&gt;&lt;/p&gt;
  2270. &lt;p&gt;&lt;a href=&quot;;&gt;&lt;/a&gt;&lt;/p&gt;
  2271. &lt;ul&gt;
  2272. &lt;li&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;Package declarations can now include a version number.&amp;#160;&lt;/span&gt;&lt;/li&gt;
  2273. &lt;li&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;suidperl is no longer available as part of perl. If your code depends on suidperl, you need to find an alternate solution. (This was actually true as of 5.11.0)&lt;/span&gt;&lt;/li&gt;
  2274. &lt;li&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;Over the years a number of language constructs and interpreter features have been deprecated and will eventually be removed. As of this release, Perl enables deprecation warnings by default.&lt;/span&gt;&lt;/li&gt;
  2275. &lt;li&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;Perl&amp;#039;s tests are now aware of (and work around) a bug in Mac OS X 10.6 locales.&lt;/span&gt;&lt;/li&gt;
  2276. &lt;li&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;Support for Windows 95, 98, ME and NT4 has officially ended.&amp;#160;&lt;/span&gt;&lt;/li&gt;
  2277. &lt;/ul&gt;
  2278. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;This release represents approximately 3 weeks development since Perl 5.11.0, containing 22,000 lines of changes across 396 files from 26 authors and committers:&lt;/span&gt;&lt;/p&gt;
  2279. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;Abigail, Alex Vandiver, brian d foy, Chris Williams, Craig A. Berry, David Fifield, David Golden, demerphq, Eric Brine, Geoffrey T. Dairiki, George Greer, H.Merijn Brand, Jan Dubois, Jerry D. Hedden, Jesse Vincent, Josh ben Jore, Max Maischein, Nicholas Clark, Rafael Garcia-Suarez, Simon Schubert, Sisyphus, Smylers, Steve Hay, Steve Peters, Vincent Pit and Yves Orton.&lt;/span&gt;&lt;/p&gt;
  2280. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;Many of the changes included in this version originated in the CPAN modules included in Perl&amp;#039;s core. We&amp;#039;re grateful to the entire CPAN community for helping Perl to flourish.&lt;/span&gt;&lt;/p&gt;
  2281. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/p&gt;
  2282. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;Yves Orton will release Perl 5.11.2 on November 20, 2009.&lt;/span&gt;&lt;/p&gt;
  2283. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;Leon Brocard will release Perl 5.11.3 on December 20, 2009.&lt;/span&gt;&lt;/p&gt;
  2284. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;Ricardo Signes will release Perl 5.11.4 on January 20, 2010.&lt;/span&gt;&lt;/p&gt;
  2285. </content>
  2286. </entry>
  2287. <entry>
  2288. <title>Perl 5.11.0</title>
  2289. <link href=""/>
  2290. <updated>2009-10-05T17:29:44Z</updated>
  2291. <id></id>
  2292. <content type="html">&lt;p&gt;&lt;strong&gt;I played hooky from work for a few days last week to help get Perl 5.11.0 released. I did a little bit of cat-herding, a few hours of copy-editing and some test building. The end result was that we now have an unstable (&amp;quot;blead&amp;quot;) release of the next major version of Perl and a plan to keep making them happen.&lt;/strong&gt;&lt;/p&gt;
  2293. &lt;hr&gt;
  2294. &lt;p style=&quot;font-size:11px;&quot;&gt;
  2295. &lt;/p&gt;&lt;p style=&quot;font-size:11px;&quot;&gt;&amp;#160;&amp;#160; &amp;#160;Whispers of an &amp;quot;evil power&amp;quot; were heard in lines at dairy&amp;#160;shops, in streetcars, stores, arguments, kitchens, suburban&amp;#160;and long-distance trains, at stations large and small,&amp;#160;in dachas and on beaches. &amp;#160;Needless to say, truly mature&amp;#160;and cultured people did not tell these stories about an&amp;#160;evil power&amp;#039;s visit to the capital. In fact, they even made fun of them and tried to talk sense into those who&amp;#160;told them. Nevertheless, facts are facts, as they say,&amp;#160;and cannot simply be dismissed without explanation:&amp;#160;somebody had visited the capital. The charred cinders&amp;#160;of Griboyedov alone, and many other things besides,&amp;#160;confirmed it. &amp;#160;Cultured people shared the point of view&amp;#160;of the investigating team: it was the work of a gang of&amp;#160;hypnotists and ventriloquists magnificently skilled in&amp;#160;their art.&lt;/p&gt;
  2296. &lt;p&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre;&quot;&gt; &lt;/span&gt;- M. Bulgakov, The Master and Margarita&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2297. &lt;p&gt;It gives me great pleasure to announce the release of Perl 5.11.0.&amp;#160;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2298. &lt;p&gt;Perl 5.11.0 is a DEVELOPMENT release. We&amp;#039;re making it available to you today to make it easy for you to test your software on what will eventually become Perl 5.12.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2299. &lt;p&gt;This release is the result of over two years of development by a global community of developers. You can find a list of high-profile changes in this release in the file &amp;quot;perl5110delta.pod&amp;quot; inside the release.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2300. &lt;p&gt;You can download the 5.11.0 tarball from:;/p&gt;&lt;p&gt;&lt;/p&gt;
  2301. &lt;p&gt;The release&amp;#039;s SHA1 signatures are:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2302. &lt;p&gt;&amp;#160;0d436577386c668161e3dad385d233c383bf4c9d &amp;#160;perl-5.11.0.tar.bz2&lt;/p&gt;
  2303. &lt;p&gt;&amp;#160;3137486cfe00094d1cd9a00e6e61f152f8fdb26e &amp;#160;perl-5.11.0.tar.gz&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2304. &lt;p&gt;We welcome your feedback on this release. If you discover issues with Perl 5.11.0, please use the &amp;#039;perlbug&amp;#039; tool included in this distribution to report them. If Perl 5.11.0 works well for you, please use the &amp;#039;perlthanks&amp;#039; tool included with this distribution to tell the all-volunteer development team how much you appreciate their work.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2305. &lt;p&gt;If you write software in Perl, it is particularly important that you test your software against development releases. While we strive to maintain source compatibility with prior releases wherever possible, it is always possible that a well-intentioned change can have unexpected consequences. If you spot a change in a development release which breaks your code, it&amp;#039;s much more likely that we will be able to fix it before the next stable release. If you only test your code against stable releases of Perl, it may not be possible to undo a backwards-incompatible change which breaks your code.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2306. &lt;p&gt;Today marks a major change in how we&amp;#039;ll be releasing development versions of Perl.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2307. &lt;p&gt;Historically, a single individual, the Perl &amp;quot;pumpking&amp;quot; has been personally responsible for all aspects of the Perl development process - ranging from direction setting, dispute resolution and deep hacking to mentoring, patch application and release engineering.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2308. &lt;p&gt;Over the years, we&amp;#039;ve been blessed with a series of extraordinary leaders. These hackers have eschewed fame, fortune and many nights&amp;#039; sleep for the good of Perl.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2309. &lt;p&gt;To help ensure that we don&amp;#039;t burn out our best diplomats and brightest coders, our release process is changing. I have recruited the first few volunteer release managers. Each month, on the 20th, the next release engineer in rotation will cut a new development release.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2310. &lt;p&gt;Today&amp;#039;s release of 5.11.0 is a transitional release to test our release machinery and process. The schedule for the near future is as follows:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2311. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;2009&lt;/p&gt;
  2312. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;====&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2313. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;October 2 &amp;#160; &amp;#160; &amp;#160; - &amp;#160;5.11.0 &amp;#160;- &amp;#160; Jesse Vincent&lt;/p&gt;
  2314. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;October 20 &amp;#160; &amp;#160; &amp;#160;- &amp;#160;5.11.1 &amp;#160;- &amp;#160; Jesse Vincent&lt;/p&gt;
  2315. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;November 20 &amp;#160; &amp;#160; - &amp;#160;5.11.2 &amp;#160;- &amp;#160; Yves Orton&lt;/p&gt;
  2316. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;December 20 &amp;#160; &amp;#160; - &amp;#160;5.11.3 &amp;#160;- &amp;#160; Leon Brocard&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2317. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;2010&lt;/p&gt;
  2318. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;====&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2319. &lt;p&gt;&amp;#160;&amp;#160; &amp;#160;January 20 &amp;#160; &amp;#160; &amp;#160;- &amp;#160;5.11.4 &amp;#160;- &amp;#160; Ricardo Signes&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2320. &lt;p&gt;If you&amp;#039;re interested in volunteering to join the release-engineer rotation, please contact me off-list and I&amp;#039;ll add you to our talent pool. It&amp;#039;s not a particularly lucrative job - The only perks are your name in perlhist, the chance to choose the epigram for a release announcement and the warm feeling you get from bringing a new version of Perl into the world.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2321. </content>
  2322. </entry>
  2323. <entry>
  2324. <title>Prophet and SD 0.7 (Cavil) are now available (What I&#39;ve been up to at work)</title>
  2325. <link href=""/>
  2326. <updated>2009-08-26T21:54:51Z</updated>
  2327. <id></id>
  2328. <content type="html">&lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;&lt;a href=&quot;; style=&quot;float:right;&quot;&gt;&lt;img alt=&quot;Picture 11&quot; class=&quot;at-xid-6a00d83456074b69e20120a578093c970c &quot; src=&quot;; style=&quot;margin:0 0 5px 5px;&quot;&gt;&lt;/a&gt; Prophet is a lightweight schemaless database designed for peer to peer replication and disconnected operation. Prophet keeps a full copy of your data and (history) on your laptop, desktop or server. Prophet syncs when you want it to, so you can use Prophet-backed applications whether or not you have network.&lt;/span&gt;&lt;/p&gt;
  2329. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;SD (Simple Defects) is a peer-to-peer issue tracking system built on top of Prophet. In addition to being a full-fledged distributed bug tracker, SD can also bidirectionally sync with your RT, Hiveminder, Trac, GitHub or Google Code issue tracker.&amp;#160;&lt;/span&gt;&lt;/p&gt;
  2330. &lt;p&gt;&lt;span style=&quot;background-color:#ffffff;&quot;&gt;To learn more about Prophet and SD, visit &lt;a href=&quot;;&gt;;/a&gt; or read the &lt;a href=&quot;;&gt;full announcement&lt;/a&gt; over on the corporate blog&lt;/span&gt;&lt;/p&gt;
  2331. </content>
  2332. </entry>
  2333. <entry>
  2334. <title>Boston - Sunday - Dim Sum - China Pearl - 11:30AM</title>
  2335. <link href=""/>
  2336. <updated>2009-08-16T00:23:00Z</updated>
  2337. <id></id>
  2338. <content type="html">&lt;p&gt;Come have dimsum :)&lt;/p&gt;
  2339. </content>
  2340. </entry>
  2341. <entry>
  2342. <title>Things I ought to be blogging about</title>
  2343. <link href=""/>
  2344. <updated>2009-07-28T01:07:10Z</updated>
  2345. <id></id>
  2346. <content type="html">&lt;p&gt;I just got back from OSCON. &amp;#160;I gave &lt;a href=&quot;; target=&quot;_blank&quot;&gt;an Ignite talk about my Kindle hacking&lt;/a&gt;, a &amp;quot;regular&amp;quot; 45 minute talk about &lt;a href=&quot;;&gt;SD, the p2p bug tracker that I work on&lt;/a&gt; and a half-day talk on &lt;a href=&quot;;&gt;RT&lt;/a&gt;. &amp;#160;OSCON, as always, was amazing. I think I only made it to a half-dozen actual sessions - the hallway track kept me that busy.&lt;/p&gt;
  2347. &lt;p&gt;About a dozen people yelled at me for not doing more to publicize some of the projects I&amp;#039;m involved with. Each and every one of these deserves a whole series of blog posts. Maybe by listing them here, I&amp;#039;ll embarass myself into writing a bit more. &amp;#160;&lt;/p&gt;
  2348. &lt;p&gt;I&amp;#039;ve had a busy year. &amp;#160;I didn&amp;#039;t realize how busy until I wrote this post. &amp;#160;Below are some of the projects I&amp;#039;ve been involved with / instigated. In almost every case, I&amp;#039;ve had fantastic collaborators who have helped make the tools a reality. But the projects are all my fault ;)&lt;/p&gt;
  2349. &lt;p&gt;&lt;a href=&quot;;&gt;SD&lt;/a&gt; is a peer to peer bug tracker (think git for bugs) that can also sync to RT, Hiveminder, Google Code, GitHub, Trac. Read-only support for syncing with RedMine is available today, with full two-way sync coming soon. Sync plugins are only a few hundred lines of code once you have a CPAN module to talk to an app. &amp;#160;For now, you can check out &lt;a href=&quot;;&gt;the talk I gave at OSCON&lt;/a&gt;.&lt;/p&gt;
  2350. &lt;p&gt;&lt;a href=&quot;;&gt;K-9&lt;/a&gt; is an opensource email client for Android. &amp;#160;I founded the project when I forked the core android &amp;quot;Email&amp;quot; app to get some needed bugfixes onto user devices quickly. Since then, K-9 has added features and fixes at a pretty rapid pace. Best of all, other folks do a lot of the work :)&lt;/p&gt;
  2351. &lt;p&gt;&lt;a href=&quot;;&gt;Shipwright&lt;/a&gt; is a build and distribution system for applications. It has special features designed to tame Perl&amp;#039;s CPAN, but it works well for non-Perl apps too. &amp;#160;It lets you build a versioned source archive of your application and all its dependencies. It comes with tools to help you distribute buildable source archives with an app and all its dependencies (down to libc if you swing that way) with a single installation tool. &amp;#160;The resulting binary packages have a bit of magic to make them magically relocatable. Just recently, we also released support for multi-architecture binary distributions.&lt;/p&gt;
  2352. &lt;p&gt;&lt;a href=&quot;;&gt;Changelogger&lt;/a&gt; is a tool we&amp;#039;ve been working on at Best Practical to ease the ordinarily tedious process of creating a human-readable changelog for your software package out of the version control system&amp;#039;s commit log. &amp;#160;It lets you open the change categorization and tidying process to a community of developers who can vote on rephrasings and categorization of changelog entries. The tool let Nicholas Clark slice through the 2500 changes included in Perl 5.10.1 in about 7 hours. &amp;#160;Once we get a few more issues cleaned up, we&amp;#039;ll be running a changelogger as a public service.&lt;/p&gt;
  2353. &lt;p&gt;Kindle hacking. &amp;#160;At this point, I have an ubuntu Jaunty Jackalope chroot with working X server, Keyboard and 5-pad. &amp;#160;I need to fix an X server bug, then I&amp;#039;ll build a downloadable installer and let the rest of the world start playing around.&lt;/p&gt;
  2354. &lt;p&gt;I&amp;#039;ve done a bit of minor javascript hacking to make Twitter&amp;#039;s web view more palatable to me:&amp;#160;&lt;a href=&quot;;&gt;;/a&gt; and &lt;a href=&quot;;&gt;;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2355. &lt;p&gt;&lt;a href=&quot;; style=&quot;float:left;&quot;&gt;&lt;img alt=&quot;Picture 22&quot; class=&quot;at-xid-6a00d83456074b69e201157148f303970c &quot; src=&quot;; style=&quot;margin:0 5px 5px 0;&quot;&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2356. &lt;p&gt;At YAPC::US last month, I came up with a pair of 20 line scripts which let me read twitter in Mutt. I get keyboard bindings, proper threading, lightning fast searching AND I can keep it running in screen ;) It&amp;#039;s actually just a replacement for /usr/bin/sendmail and some goo to turn tweets into maildir messages. &amp;#160;My plan with this is to clean it up and add RSS feeds, Facebook and a few other activity streams. I may then try to package it up or set it up as a service. The code&amp;#039;s all in &lt;a href=&quot;;&gt;my github account&lt;/a&gt;.
  2357. &lt;/p&gt;&lt;p&gt;A half-dozen other things I tried out died on the vine: A postgres-based email archival tool, A ground-up rewrite of RT (don&amp;#039;t worry, RT4 is alive and well, but that&amp;#039;s another post), cleanup of MobiPerl and...well, I&amp;#039;ve blocked out my memories of the rest of them.&lt;/p&gt;
  2358. </content>
  2359. </entry>
  2360. <entry>
  2361. <title>A new definition of wrong</title>
  2362. <link href=""/>
  2363. <updated>2009-07-09T04:43:22Z</updated>
  2364. <id></id>
  2365. <content type="html">&lt;p style=&quot;margin:0;line-height:15px;font:13px Trebuchet MS;&quot;&gt;I haven&#39;t been blogging about the Kindle for a while...mostly because I haven&#39;t hacked on the Kindle in a while. &amp;nbsp;The release of the DX got me excited about what&#39;s possible with a device like the Kindle. I spent a bunch of time trying to get native framebuffer applications working on my Kindle 2. Yesterday, I struck upon an awful, awful idea.&lt;/p&gt;
  2366. &lt;p style=&quot;margin:0;line-height:15px;font:13px Trebuchet MS;min-height:15px;&quot;&gt;
  2367. &lt;/p&gt;&lt;p style=&quot;margin:0;line-height:15px;font:13px Trebuchet MS;&quot;&gt;Ubuntu Jaunty has an ARM target. &amp;nbsp;It&#39;s a fairly similar linux to the OS shipped on the Kindle 2 and the Kindle DX. A little bit of fiddling and an NFS export later, I was able to &lt;span style=&quot;font:13px Courier;&quot;&gt;chroot&lt;/span&gt; into an Ubuntu environment on my Kindle.&amp;nbsp;&lt;/p&gt;
  2368. &lt;p style=&quot;margin:0;line-height:15px;font:13px Trebuchet MS;min-height:15px;&quot;&gt;
  2369. &lt;/p&gt;&lt;p style=&quot;margin:0;line-height:15px;font:13px Trebuchet MS;&quot;&gt;That&amp;nbsp;was&amp;nbsp;when&amp;nbsp;I&amp;nbsp;discovered&amp;nbsp;that&amp;nbsp;Lab126&amp;nbsp;have&amp;nbsp;built&amp;nbsp;the&amp;nbsp;Kindle&#39;s&amp;nbsp;kernel&amp;nbsp;without&amp;nbsp;&lt;span style=&quot;font:13px Courier;&quot;&gt;CONFIG_VT&lt;/span&gt;...and &lt;em&gt;really&lt;/em&gt; wants a tty or virtual terminal, but not for any particularly good reason.&lt;/p&gt;
  2370. &lt;p style=&quot;margin:0;line-height:15px;font:13px Trebuchet MS;min-height:15px;&quot;&gt;
  2371. &lt;/p&gt;&lt;p style=&quot;margin:0;line-height:15px;font:13px Trebuchet MS;&quot;&gt;This evening, I managed to bludgeon into submission and found myself face to face with everybody&#39;s favorite checkerboard background.&lt;/p&gt;
  2372. &lt;p style=&quot;margin:0;line-height:15px;font:13px Trebuchet MS;min-height:15px;&quot;&gt;
  2373. &lt;/p&gt;&lt;p style=&quot;margin:0;line-height:15px;font:13px Trebuchet MS;&quot;&gt;After that, it was just a hop, skip and an apt-get until I was watching the mesmerizing transitions of &lt;span style=&quot;font:13px Courier;&quot;&gt;xdaliclock.&lt;/span&gt;&lt;/p&gt;
  2374. &lt;p style=&quot;margin:0;line-height:15px;font:13px Trebuchet MS;&quot;&gt;&lt;span style=&quot;font-family:Courier, Verdana, sans-serif;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/p&gt;
  2375. &lt;p style=&quot;margin:0;line-height:15px;font:13px Trebuchet MS;&quot;&gt;&lt;span style=&quot;font-family:Courier, Verdana, sans-serif;&quot;&gt;&lt;br&gt;&lt;/span&gt;&lt;/p&gt;
  2376. &lt;p style=&quot;margin:0;line-height:15px;font:13px Trebuchet MS;min-height:15px;&quot;&gt;
  2377. &lt;/p&gt;&lt;div style=&quot;text-align:center;&quot;&gt;[flickr video=3702221011 show_info=true secret=8959480e1e w=400 h=327]&lt;/div&gt;
  2378. &lt;p style=&quot;text-align:center;line-height:15px;font:normal normal normal 13px/normal &#39;Trebuchet MS&#39;;margin:0;&quot;&gt;
  2379. &lt;/p&gt;&lt;p style=&quot;margin:0;line-height:15px;font:13px Trebuchet MS;&quot;&gt;&lt;/p&gt;
  2380. &lt;p&gt;(Yes, I know it&#39;s incredibly blurry. I haven&#39;t managed to get the pinhole camera on my DX calibrated yet)&lt;/p&gt;
  2381. &lt;p style=&quot;margin:0;line-height:15px;font:13px Trebuchet MS;&quot;&gt;Clearly this is &lt;span style=&quot;text-decoration:line-through;&quot;&gt;the killer app for the Kindle&lt;/span&gt; just a stepping stone. I still don&#39;t have the Keyboard or 5way hooked up and what I do have working is incredibly brittle.&amp;nbsp; But &lt;span style=&quot;font:13px Courier;&quot;&gt;xpdf&lt;/span&gt; (and lots of other stuff) runs unmodified.&lt;/p&gt;
  2382. </content>
  2383. </entry>
  2384. <entry>
  2385. <title>Boston - China Pearl - Sunday - 11am</title>
  2386. <link href=""/>
  2387. <updated>2009-06-20T06:20:00Z</updated>
  2388. <id></id>
  2389. <content type="html">&lt;p&gt;So, Sunday&#39;s my birthday.  I&#39;m traveling enough that I failed to sort out a birthday party.  Instead, come have dimsum on Sunday!&lt;/p&gt;
  2390. &lt;p&gt;Drop me a line if you think you might be coming, so I can keep a vague count.&lt;/p&gt;
  2391. </content>
  2392. </entry>
  2393. <entry>
  2394. <title>Improved PDF rendering for Savory</title>
  2395. <link href=""/>
  2396. <updated>2009-04-11T06:06:26Z</updated>
  2397. <id></id>
  2398. <content type="html">&lt;p&gt;Now with better default fonts (Google&amp;#039;s free Droid fonts) and border cropping.&lt;/p&gt;
  2399. &lt;p&gt;&lt;a href=&quot;;&gt;;/a&gt;&lt;/p&gt;
  2400. </content>
  2401. </entry>
  2402. <entry>
  2403. <title>Savory Screenshots</title>
  2404. <link href=""/>
  2405. <updated>2009-04-07T05:29:19Z</updated>
  2406. <id></id>
  2407. <content type="html">&lt;p&gt;&lt;span style=&quot;font-size:15px;font-family:Trebuchet MS;&quot;&gt;&lt;br&gt;&lt;span style=&quot;font-size:13px;font-family:Trebuchet MS;&quot;&gt;Over the past day, a few readers have asked me what converted PDFs look like on the &lt;a href=&quot;;amp;tag=fsck-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B00154JDAI&quot;&gt;Kindle 2&lt;/a&gt; and how readable they are. (One of you even said you&amp;#039;ll &lt;a href=&quot;;amp;tag=fsck-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B00154JDAI&quot;&gt;buy a Kindle 2&lt;/a&gt; if I post some screenshots.) And yes, Amazon pays me a referral fee for every Kindle 2 I sell. So far, I&amp;#039;ve lured two of you in ;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
  2408. &lt;p&gt;&lt;span style=&quot;font-size:15px;font-family:Trebuchet MS;&quot;&gt;&lt;span style=&quot;font-size:13px;font-family:Trebuchet MS;&quot;&gt;All the screenshots below have been reduced. Click on them to see full-size versions.&lt;br&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
  2409. &lt;p&gt;&lt;span style=&quot;font-size:15px;font-family:Trebuchet MS;&quot;&gt;&lt;br&gt;The Savory conversion process&lt;/span&gt;&lt;/p&gt;
  2410. &lt;p&gt;&amp;#160;
  2411. &lt;/p&gt;&lt;p&gt;&lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Screen_shot-20144&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e201156ff71099970b &quot; src=&quot;; title=&quot;Screen_shot-20144&quot;&gt;&lt;/a&gt; &amp;#160;&lt;br&gt;
  2412. &lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Screen_shot-20145&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e201156f000718970c &quot; src=&quot;; title=&quot;Screen_shot-20145&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  2413. &lt;p&gt;&lt;span style=&quot;font-size:15px;font-family:Trebuchet MS;&quot;&gt;A scientific paper, converted from PDF&lt;/span&gt;&lt;/p&gt;
  2414. &lt;p&gt;&lt;strong&gt;Fit to screen:&lt;/strong&gt;&lt;br&gt;&lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Screen_shot-20146&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e201156ff7137b970b &quot; src=&quot;; title=&quot;Screen_shot-20146&quot;&gt;&lt;/a&gt;&lt;br&gt;&lt;strong&gt;&lt;br&gt;Fit to height (yeah, height. It&amp;#039;s rotated)&lt;/strong&gt;:&lt;br&gt;&lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Screen_shot-20149&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e201156ff71732970b &quot; src=&quot;; title=&quot;Screen_shot-20149&quot;&gt;&lt;/a&gt; &lt;/p&gt;
  2415. &lt;p&gt;&lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Screen_shot-20148&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e201156ff71670970b &quot; src=&quot;; title=&quot;Screen_shot-20148&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  2416. &lt;p&gt;&lt;strong&gt;&lt;span style=&quot;font-size:13px;font-family:Trebuchet MS;&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
  2417. &lt;p&gt;&lt;/p&gt;
  2418. &lt;table border=&quot;0&quot;&gt;
  2419. &lt;tbody&gt;
  2420. &lt;tr&gt;
  2421. &lt;td valign=&quot;top&quot;&gt;
  2422. Fit to screen&lt;p&gt;&lt;/p&gt;
  2423. &lt;p&gt;&lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Screen_shot-25732&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e201156f001163970c &quot; src=&quot;; title=&quot;Screen_shot-25732&quot;&gt;&lt;/a&gt;&amp;#160;
  2424. &lt;/p&gt;&lt;/td&gt;
  2425. &lt;td valign=&quot;top&quot;&gt;
  2426. Full size:&lt;p&gt;&lt;/p&gt;
  2427. &lt;p&gt;&lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Screen_shot-25733&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e201156ff72755970b &quot; src=&quot;; title=&quot;Screen_shot-25733&quot;&gt;&lt;/a&gt;
  2428. &lt;/p&gt;&lt;/td&gt;
  2429. &lt;/tr&gt;
  2430. &lt;/tbody&gt;
  2431. &lt;/table&gt;
  2432. &lt;p&gt;&lt;strong&gt;&lt;br&gt;Fit to height:&lt;/strong&gt;&lt;/p&gt;
  2433. &lt;p&gt;&lt;a href=&quot;;&gt;&lt;img alt=&quot;Screen_shot-25734&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e201156f000dca970c &quot; src=&quot;; title=&quot;Screen_shot-25734&quot;&gt;&lt;/a&gt;&lt;br&gt;
  2434. &lt;a href=&quot;;&gt;&lt;img alt=&quot;Screen_shot-25735&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e201156ff71bca970b &quot; src=&quot;; title=&quot;Screen_shot-25735&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  2435. </content>
  2436. </entry>
  2437. <entry>
  2438. <title>Playing to the crowd</title>
  2439. <link href=""/>
  2440. <updated>2009-04-06T16:40:44Z</updated>
  2441. <id></id>
  2442. <content type="html">&lt;p&gt;From the bits of feedback I&amp;#039;ve gotten on Savory&amp;#039;s initial release on Friday, it seems pretty clear that people want to be able to view rendered PDFs that look &amp;quot;like they&amp;#039;re supposed to&amp;quot;&amp;#160;&lt;/p&gt;
  2443. &lt;p&gt;
  2444. &lt;/p&gt;&lt;div&gt;Savory&amp;#039;s initial release used a PDF-to-HTML converter that extracts the text from a PDF and turns it into a reflowable ebook. &amp;#160;If your PDFs are generated from text by modern tools. this is great. &amp;#160;Most PDFs aren&amp;#039;t.&lt;/div&gt;
  2445. &lt;p&gt;
  2446. &lt;/p&gt;&lt;div&gt;Over the weekend, I put together a PDF renderer for Savory build on Poppler and the Kindle&amp;#039;s built in Manga support (If you have a .zip or .cbz file full of images, the Kindle will display the images like a book)&lt;/div&gt;
  2447. &lt;p&gt;
  2448. &lt;/p&gt;&lt;div&gt;For now, every PDF is converted twice. Once to text and once to a set of rendered images. So far, it&amp;#039;s working pretty well for me. I&amp;#039;d love some feedback on&amp;#160;&lt;a href=&quot;;&gt;;/a&gt;&amp;#160;from anyone who&amp;#039;s game. &amp;#160;Just replace your regular savory image with it and reboot the kindle.&lt;/div&gt;
  2449. </content>
  2450. </entry>
  2451. <entry>
  2452. <title>What&#39;s next for Savory</title>
  2453. <link href=""/>
  2454. <updated>2009-04-05T00:48:44Z</updated>
  2455. <id></id>
  2456. <content type="html">&lt;ul&gt;
  2457. &lt;li&gt;&lt;strong&gt;Good&lt;/strong&gt; conversions of image-heavy or image-based PDFs. (I just need to build Ghostscript on the )&lt;/li&gt;
  2458. &lt;li&gt;A revised installer/uninstaller based on some suggestions from the folks at Blog Kindle (Who have a Unicode font mod for the K2 up at &lt;a href=&quot;;&gt;;/a&gt;)&lt;/li&gt;
  2459. &lt;li&gt;Tracking down slightly a few unreliable ebook conversions/installations I&amp;#039;ve noticed.&lt;/li&gt;
  2460. &lt;/ul&gt;
  2461. </content>
  2462. </entry>
  2463. <entry>
  2464. <title>Savory</title>
  2465. <link href=""/>
  2466. <updated>2009-04-04T00:00:14Z</updated>
  2467. <id></id>
  2468. <content type="html">&lt;p&gt;&lt;b&gt;UPDATED 5 April 2009 - 11:16 EDT&lt;/b&gt;: Pointers changed to Savory installer and uninstaller 0.06 which provide minor run-time reliability and book-detection fixes. If you are running 0.05, you should uninstall the old version and install 0.06.&lt;/p&gt;
  2469. &lt;p&gt;&lt;b&gt;UPDATED 6 April 2009 - 9:41 EDT&lt;/b&gt;: I put together beta-quality support for picture-perfect PDF production. &lt;a href=&quot;;&gt;You can try it out if you promise to report back&lt;/a&gt;&lt;/p&gt;
  2470. &lt;p&gt;&lt;b&gt;UPDATED 6 April 2009 - 22:44 EDT&lt;/b&gt;:&lt;a href=&quot;;&gt;Screenshots of savory&#39;s improved PDF converter&lt;/a&gt;.&lt;/p&gt;
  2471. &lt;hr&gt;
  2472. &lt;p&gt;Over the past few weeks, I&#39;ve spent much of my spare time with my new Kindle2...When I bought it, I was excited to have a gorgeous, solidly built ebook reader backed by Amazon&#39;s catalog. I figured I&#39;d end up reading a bit more than I already did and spending a bit more money on books than I already did. Both turned out to be true. What I didn&#39;t count on was finding a new hobby.&lt;/p&gt;
  2473. &lt;p&gt;Hi, I&#39;m Jesse and I have a software problem.&lt;/p&gt;
  2474. &lt;p&gt;When I get a new bit of hardware, I often end up writing software for it. In 2001, when I got one of Canon&#39;s first Digital SLRs, I found myself writing code to extract usable images from the &quot;RAW&quot; image files the camera produced. This fall, I picked up a new T-Mobile G1 to replace an iPhone...and found the email client lacking. The Android platform that the G1 runs on is free and open. So I dusted off some long-unused Java experience and created &lt;a href=&quot;;&gt;K9&lt;/a&gt;, an enhanced version of Android&#39;s email client.&lt;/p&gt;
  2475. &lt;p&gt;I really didn&#39;t think this would happen with the Kindle. I was wrong.&lt;/p&gt;
  2476. &lt;h2&gt;What is Savory?&lt;/h2&gt;
  2477. &lt;p&gt;Savory is a native ebook conversion package for the Kindle 2.&lt;br&gt;
  2478. It lets you download and read PDFs and ePubs on the Kindle without&lt;br&gt;
  2479. a manual conversion step. &lt;/p&gt;
  2480. &lt;h2&gt;So, you hacked the Kindle?&lt;/h2&gt;
  2481. &lt;p&gt;No. There have actually been a number of other user-generated&lt;br&gt;
  2482. Kindle updates. &lt;a href=&quot;;&gt;igorsk&lt;/a&gt;&lt;br&gt;
  2483. created the toolset which generates Kindle and Kindle2 updates.&lt;br&gt;
  2484. Other members of the Kindle community have created Kindle2 updates&lt;br&gt;
  2485. which change the Kindle&#39;s fonts to support books in non-western&lt;br&gt;
  2486. language, let you set your own screensavers and a bunch more. These&lt;br&gt;
  2487. packages already contain everything a technically savvy user would&lt;br&gt;
  2488. need to install software on the Kindle. What I did was to port an&lt;br&gt;
  2489. ebook-conversion package to run reasonably efficiently on a 500mhz&lt;br&gt;
  2490. ARM with 128 megabytes of system memory and to write a small program&lt;br&gt;
  2491. which watches for new ebooks in a few chosen formats and run those&lt;br&gt;
  2492. through the conversion tool.&lt;/p&gt;
  2493. &lt;h2&gt;Does Savory let me decrypt books Amazon has protected with DRM?&lt;/h2&gt;
  2494. &lt;p&gt;No&lt;/p&gt;
  2495. &lt;h2&gt;So this is like KindlePid?&lt;/h2&gt;
  2496. &lt;p&gt;Nope. Not at all. KindlePid is a tool for reverse-engineering&lt;br&gt;
  2497. your Kindle&#39;s &quot;Mobipocket Pid.&quot; KindlePid lets you buy DRM-protected&lt;br&gt;
  2498. ebooks from providers other than Amazon. Savory converts PDFs and&lt;br&gt;
  2499. ePubs that you download to your Kindle over WhisperNet or 3G into&lt;br&gt;
  2500. unprotected .mobi documents. There are web-based and desktop tools&lt;br&gt;
  2501. which can do everything Savory can do. Savory just brings these&lt;br&gt;
  2502. features directly to your Kindle 2.&lt;/p&gt;
  2503. &lt;h2&gt;Does Savory let me read DRMed ebooks?&lt;/h2&gt;
  2504. &lt;p&gt;&lt;strong&gt;No. Savory does not include support for ebooks protected by&lt;br&gt;
  2505. DRM.&lt;/strong&gt; DRM is an incredibly &quot;hot&quot; topic in the ebook world right&lt;br&gt;
  2506. now. There are varying opinions on its efficacy. My opinions on the&lt;br&gt;
  2507. matter aren&#39;t relevant, except to say that I am not touching the&lt;br&gt;
  2508. topic with a 10 foot pole. It will not convert DRM-protected ebooks&lt;br&gt;
  2509. into a format the Kindle will read. It will not add or remove DRM&lt;br&gt;
  2510. from any ebook.&lt;/p&gt;
  2511. &lt;h2&gt;Does Savory let me do anything Amazon didn&#39;t already let me do for free?&lt;/h2&gt;
  2512. &lt;p&gt;No. It just makes some things that are a little cumbersome out&lt;br&gt;
  2513. of the box simple and transparent. It&#39;s already possible to use&lt;br&gt;
  2514. desktop and web based services to transcode ePub and PDF documents&lt;br&gt;
  2515. into the Kindle-compatible Mobipocket format. Amazon also provides&lt;br&gt;
  2516. both free and for-pay email-based conversion services you can&lt;br&gt;
  2517. use.&lt;/p&gt;
  2518. &lt;h2&gt;Does Savory work with the Kindle 1?&lt;/h2&gt;
  2519. &lt;p&gt;No.&lt;/p&gt;
  2520. &lt;h2&gt;Why did you create Savory?&lt;/h2&gt;
  2521. &lt;p&gt;I&#39;m in love with my Kindle. I&#39;ve been reading ebooks on screens&lt;br&gt;
  2522. of various sorts for many years, but the Kindle2 is the first device&lt;br&gt;
  2523. that I actually &lt;strong&gt;enjoy&lt;/strong&gt; reading as much as I enjoy reading&lt;br&gt;
  2524. paper books. I&#39;ve tried other ebook readers, but for a variety of&lt;br&gt;
  2525. reasons, they just don&#39;t work for me. My goal is to make it easier&lt;br&gt;
  2526. for readers to read more free content on the Kindle.&lt;/p&gt;
  2527. &lt;p&gt;I got the idea after reading Tim O&#39;Reilly&#39;s &lt;a href=&quot;;&gt;editorial&lt;br&gt;
  2528. in Forbes&lt;/a&gt; about why the Kindle platform will be more successful&lt;br&gt;
  2529. if it&#39;s more open. My first experiments were actually in server-based&lt;br&gt;
  2530. transcoders to convert PDFs and epubs to Kindle-compatible Mobipocket&lt;br&gt;
  2531. books, but I quickly realized that running the converter locally&lt;br&gt;
  2532. on the Kindle would result in a much better user experience and&lt;br&gt;
  2533. make the Kindle more useful. And yeah, it seemed like an interesting&lt;br&gt;
  2534. project.&lt;/p&gt;
  2535. &lt;h2&gt;What document formats does Savory let me read?&lt;/h2&gt;
  2536. &lt;p&gt;Savory allows you to read .epub and .pdf files on your Kindle.&lt;br&gt;
  2537. It does this by converting these documents to Mobipocket format&lt;br&gt;
  2538. ebooks using &lt;a href=&quot;;&gt;Calibre&lt;/a&gt;.&lt;br&gt;
  2539. &lt;strike&gt;You should note that the version of Calibre Savory uses only works&lt;br&gt;
  2540. with text-based PDFs. If you have image-based or scanned PDFs,&lt;br&gt;
  2541. conversion will fail. (Images &lt;em&gt;in&lt;/em&gt; your PDFS are ok. There&lt;br&gt;
  2542. just needs to be some text to extract.)&lt;/strike&gt; Updated: &lt;a href=&quot;;&gt;Screenshots&lt;/a&gt; of the &lt;a href=&quot;;&gt;new and improved PDF converter&lt;/a&gt;.&lt;/p&gt;
  2543. &lt;h2&gt;How does Savory work?&lt;/h2&gt;
  2544. &lt;h3&gt;Plain-english version&lt;/h3&gt;
  2545. &lt;p&gt;Savory installs a small program which runs on your Kindle and&lt;br&gt;
  2546. watches for new files in the &#39;Documents&#39; directory with names ending&lt;br&gt;
  2547. in &#39;.epub&#39; and &#39;.pdf&#39;. When the system notifies Savory that a&lt;br&gt;
  2548. document has shown up, it wakes up and runs an open-source file&lt;br&gt;
  2549. conversion program called &lt;a href=&quot;;&gt;Calibre&lt;/a&gt;. Savory also updates&lt;br&gt;
  2550. your Kindle2&#39;s browser configuration file to tell it that the Kindle&lt;br&gt;
  2551. can now handle .pdf and .epub documents.&lt;/p&gt;
  2552. &lt;h3&gt;Technical version&lt;/h3&gt;
  2553. &lt;p&gt;Savory changes the browser configuration file to allow download of pdf&lt;br&gt;
  2554. and epub documents. It adds a new &quot;init&quot; script which tries to mount&lt;br&gt;
  2555. savory-image.ext3 on boot. If that succeeds, it runs bin/savory_daemon&lt;br&gt;
  2556. from within the image mentioned above. savory_daemon is a Python&lt;br&gt;
  2557. script that watches the documents/ directory and invokes a converter based on Calibre when it sees something that looks right.&lt;/p&gt;
  2558. &lt;h2&gt;Is Savory supported by Amazon?&lt;/h2&gt;
  2559. &lt;p&gt;&lt;strong&gt;No. If you have a problem with Savory, DO NOT CONTACT AMAZON.&lt;/strong&gt; This isn&#39;t software they wrote. They&#39;re not responsible for it. Please don&#39;t bother them about it.&lt;/p&gt;
  2560. &lt;p&gt;If the nice folks at Amazon contact me (you can find my email&lt;br&gt;
  2561. address at the bottom of this FAQ) and ask me to stop distributing&lt;br&gt;
  2562. Savory, I will do so. My goal isn&#39;t to &quot;hack&quot; the Kindle, deprive&lt;br&gt;
  2563. Amazon of revenue or place an increased support burden on Amazon&#39;s&lt;br&gt;
  2564. Kindle team. I just want to make the Kindle2 an even more useful&lt;br&gt;
  2565. reader than it already is.&lt;/p&gt;
  2566. &lt;h2&gt;Does Savory void my warranty?&lt;/h2&gt;
  2567. &lt;p&gt;I don&#39;t know. If you&#39;re not comfortable with the possibility, &lt;strong&gt;do not install Savory&lt;/strong&gt;.&lt;/p&gt;
  2568. &lt;h2&gt;Does Savory come with any guarantee or warranty?&lt;/h2&gt;
  2569. &lt;p&gt;I guarantee that Savory will not give you the ability to fly or&lt;br&gt;
  2570. to see through walls. Past that, no. Savory comes with no warranty&lt;br&gt;
  2571. or guarantee OF ANY KIND. If it causes your Kindle to burst into&lt;br&gt;
  2572. flames or gives your pets the ability to read, you are ENTIRELY ON&lt;br&gt;
  2573. YOUR OWN. By downloading and installing Savory, you accept full&lt;br&gt;
  2574. responsibility for anything it does.&lt;/p&gt;
  2575. &lt;p&gt;Savory is distributed under the MIT license:&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2576. &lt;p&gt;Permission is hereby granted, free of charge, to any person&lt;br&gt;
  2577. obtaining a copy of this software and associated documentation files&lt;br&gt;
  2578. (the &quot;Software&quot;), to deal in the Software without restriction,&lt;br&gt;
  2579. including without limitation the rights to use, copy, modify, merge,&lt;br&gt;
  2580. publish, distribute, sublicense, and/or sell copies of the Software,&lt;br&gt;
  2581. and to permit persons to whom the Software is furnished to do so,&lt;br&gt;
  2582. subject to the following conditions:&lt;/p&gt;
  2583. &lt;p&gt;The above copyright notice and this permission notice shall be&lt;br&gt;
  2584. included in all copies or substantial portions of the Software.&lt;/p&gt;
  2585. &lt;p&gt;THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,&lt;br&gt;
  2592. &lt;h2&gt;What do I do if Savory breaks my Kindle?&lt;/h2&gt;
  2593. &lt;p&gt;Head on over to the &lt;a href=&quot;;&gt;MobileRead&lt;/a&gt; Kindle forums and post your sob story. Hopefully, someone there can help figure out what went wrong and help you get back to a working state. Remember that Savory comes with &lt;strong&gt;absolutely no warranty&lt;/strong&gt; and everybody on MobileRead who might help you out is a volunteer.&lt;/p&gt;
  2594. &lt;h2&gt;How do I install Savory?&lt;/h2&gt;
  2595. &lt;p&gt;&lt;font color=&quot;red&quot;&gt;Installing Savory or any other third-party update on your Kindle may destroy your Kindle. If that happens, you will have a $360 paper weight. &lt;strong&gt;DO NOT INSTALL SAVORY UNLESS YOU&#39;RE WILLING TO END UP WITH A DEAD KINDLE.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;
  2596. &lt;p&gt;You&#39;ll need to download three files:&lt;/p&gt;
  2597. &lt;p&gt;&lt;a href=&quot;;&gt;;/a&gt;&lt;/p&gt;
  2598. &lt;p&gt;This file contains Savory&#39;s file-conversion system and assorted tools.&lt;/p&gt;
  2599. &lt;p&gt;Download and unzip this file. Then, mount your Kindle2 on your desktop with USB and drag savory-image.ext3 into the &quot;system&quot; folder on your Kindle2.&lt;/p&gt;
  2600. &lt;p&gt;&lt;a href=&quot;;&gt;update_RemoveSavory-0.06.bin&lt;/a&gt;&lt;/p&gt;
  2601. &lt;p&gt;This file is a Kindle update which will remove an installed copy of Savory from your Kindle. Please keep a copy of this file handy in case you ever need it.&lt;/p&gt;
  2602. &lt;p&gt;&lt;a href=&quot;;&gt;update_Savory-0.06.bin&lt;/a&gt;&lt;/p&gt;
  2603. &lt;p&gt;This file is a Kindle update.&lt;/p&gt;
  2604. &lt;p&gt;You should copy this file to the root directory of your Kindle. After you do that, unmount the kindle and click the &quot;Menu&quot; button, select &quot;Settings&quot;, click the &quot;Menu&quot; button and click &quot;Update Your Kindle&quot; This will apply the update. &lt;/p&gt;
  2605. &lt;p&gt;If &quot;Update Your Kindle&quot; is greyed out, mount the Kindle on your desktop again and &lt;strong&gt;DELETE the update file&lt;/strong&gt;. Then, unmount the Kindle. If you&#39;re not already on the Settings page, click &quot;Menu&quot; and select &quot;Settings&quot;.&lt;br&gt;
  2606. Make sure your Kindle is plugged into your computer with the USB cable.&lt;br&gt;
  2607. Click &quot;Menu&quot; and select &quot;Restart&quot;. The Kindle will boot up and immediately enter USB mode. Copy the update file to the Kindle again and follow the instructions above.&lt;/p&gt;
  2608. &lt;p&gt;I&#39;ve found that the Kindle is much happier recognizing update files if you&lt;br&gt;
  2609. reboot the Kindle while it&#39;s connected to your computer with USB and copy the update to the Kindle before the Kindle&#39;s UI comes up at all&lt;/p&gt;
  2610. &lt;p&gt;If you copy the file to your kindle and reboot&lt;br&gt;
  2611. without applying the update, it will end up in a reboot loop - I haven&#39;t&lt;br&gt;
  2612. figured out why yet. If that happens, hold down the &quot;Home&quot; button while&lt;br&gt;
  2613. booting to get into recovery mode. From there, you can mount the Kindle&lt;br&gt;
  2614. on your desktop with USB, delete the .bin file and try again.&lt;/p&gt;
  2615. &lt;h2&gt;How do I turn Savory off temporarily?&lt;/h2&gt;
  2616. &lt;p&gt;Mount your Kindle on your computer with USB. Rename the&lt;br&gt;
  2617. savory-image.ext3 file in the Kindle&#39;s &quot;System&quot; folder. Then, unmount&lt;br&gt;
  2618. your Kindle, click &quot;Menu&quot;, select &quot;Settings&quot;, click &quot;Menu&quot; and click&lt;br&gt;
  2619. &quot;Restart your Kindle.&quot; When you later want to re-enable Savory,&lt;br&gt;
  2620. repeat the process, naming the file back to &quot;savory-image.ext3&quot;&lt;/p&gt;
  2621. &lt;h2&gt;How do I remove Savory completely?&lt;/h2&gt;
  2622. &lt;p&gt;If you&#39;ve decided that Savory isn&#39;t for you or you need to remove&lt;br&gt;
  2623. Savory to perform an Amazon-provided system update, it&#39;s a two step process.&lt;br&gt;
  2624. First, you&#39;ll need to follow the instructions above about how to temporarily turn off Savory. Then, download and run the &quot;&lt;a href=&quot;;&gt;update_RemoveSavory-0.06.bin&lt;/a&gt;&quot; system update and&lt;br&gt;
  2625. apply it just like you applied the original system update.&lt;/p&gt;
  2626. &lt;p&gt;&lt;strong&gt;Amazon&#39;s system updates very carefully check each and every file&lt;br&gt;
  2627. they&#39;re about to update to make sure that they are exactly as Amazon&lt;br&gt;
  2628. left them. This ensures that a system update doesn&#39;t unexpectedly&lt;br&gt;
  2629. corrupt an &quot;important&quot; file.&lt;/strong&gt; Savory updates the Kindle&#39;s browser&lt;br&gt;
  2630. configuration to allow download of pdf and epub files, adds an &quot;init&lt;br&gt;
  2631. script&quot; to start up the savory daemon which watches for new files&lt;br&gt;
  2632. to convert and modifies the Kindle&#39;s &quot;version.txt&quot; file. This way,&lt;br&gt;
  2633. anyone doing support for your Kindle will know it&#39;s not running a&lt;br&gt;
  2634. stock system image and &lt;strong&gt;NOT ELIGIBLE FOR SUPPORT FROM AMAZON.&lt;/strong&gt;&lt;/p&gt;
  2635. &lt;p&gt;Savory copies each file it modifies before making changes. All files Savory modifies are saved with the file suffix &quot;-beforesavory&quot;. When you uninstall Savory, it restores the pristine versions of these files.&lt;/p&gt;
  2636. &lt;h2&gt;What does Savory do to my battery life?&lt;/h2&gt;
  2637. &lt;p&gt;It makes it shorter. So far, it doesn&#39;t feel like it makes it &lt;em&gt;much&lt;/em&gt; shorter. Comparisons and benchmarks would be appreciated&lt;/p&gt;
  2638. &lt;h2&gt;What does Savory do with the &quot;originals&quot; of ebooks it converts?&lt;/h2&gt;
  2639. &lt;p&gt;You&#39;ll find the originals of any book Savory converts (or fails to convert) in the savory-archive folder on your Kindle when you browse it from your computer.&lt;/p&gt;
  2640. &lt;h2&gt;Where can I get the source code to Savory?&lt;/h2&gt;
  2641. &lt;p&gt;Savory is hosted on Google Code: &lt;a href=&quot;;&gt;;/a&gt;&lt;/p&gt;
  2642. &lt;h2&gt;What software does Savory use?&lt;/h2&gt;
  2643. &lt;p&gt;Savory wouldn&#39;t have been possible without kindle-update-maker, created by &lt;a href=&quot;;&gt;Igor Skochinsky&lt;/a&gt;.&lt;/p&gt;
  2644. &lt;p&gt;Savory is about 200 lines of Bourne Shell and Python, built to drive a modified copy of Kovid Goyal&#39;s open-source Calibre ebook conversion and management suite.&lt;/p&gt;
  2645. &lt;p&gt;The disk image containing the Savory daemon and the modified version of Calibre contains a number of dependencies, listed below. You can download &lt;a href=&quot;;&gt;all of these source tarballs from;/a&gt;.&lt;/p&gt;
  2646. &lt;p&gt;The patches to Calibre are available in the same source repository as the rest of Savory. All other packages are unmodified.&lt;/p&gt;
  2647. &lt;pre&gt; Revision 2689&lt;br&gt; Revision: 370&lt;br&gt;;br&gt;;br&gt;;br&gt;;amp;use_mirror=voxel&amp;amp;filename=rtf2xml-1.33.tar.gz&amp;amp;a=75791959&lt;br&gt;;br&gt;;br&gt;;br&gt;;br&gt;;br&gt;;br&gt;;br&gt;;br&gt;;a=snapshot;h=HEAD;sf=tgz as of 2009-03-30 - pyinotify-0.8.1-py2.6.egg-info&lt;br&gt;;amp;use_mirror=voxel&amp;amp;filename=pdftohtml-0.39.tar.gz&amp;amp;a=40219524&lt;br&gt;;br&gt;;br&gt;;br&gt;;br&gt;;br&gt;;br&gt;;amp;use_mirror=voxel&amp;amp;filename=rtf2xml-1.33.tar.gz&amp;amp;a=50591281&lt;br&gt;;br&gt;;br&gt;;br&gt;;br&gt;&lt;/pre&gt;
  2648. &lt;h2&gt;How much code is Savory?&lt;/h2&gt;
  2649. &lt;p&gt;The unique parts of Savory are about 85 lines of shell script and 135 lines of Python.&lt;/p&gt;
  2650. &lt;h2&gt;Why&#39;s the Savory disk image nearly 90 megabytes uncompressed?&lt;/h2&gt;
  2651. &lt;p&gt;Savory uses Calibre, a free and open ebook conversion suite. In turn, Calibre uses Python, Qt and some other libraries. While I&#39;ve slimmed down the requirements by hand, we have a long way to go before Savory fits in 5 or 10 megabytes.&lt;/p&gt;
  2652. &lt;h2&gt;What license is Savory under?&lt;/h2&gt;
  2653. &lt;p&gt;The original code in Savory is available under the terms of the &lt;a href=&quot;;&gt;MIT License&lt;/a&gt;. The various components bundled with Savory are all free or open software, but they&#39;re not all released under the same license.&lt;/p&gt;
  2654. &lt;h2&gt;I want to be able to use my Kindle to read books in some other format. How do I make that happen?&lt;/h2&gt;
  2655. &lt;p&gt;Savory supports a subset of the conversions provided by &lt;a href=&quot;;&gt;Calibre&lt;/a&gt;. If you contribute&lt;br&gt;
  2656. to Calibre, Savory should be able to take advantage of those&lt;br&gt;
  2657. improvements.&lt;/p&gt;
  2658. &lt;h2&gt;Can I run other software on my Kindle?&lt;/h2&gt;
  2659. &lt;p&gt;I don&#39;t know. Can you?&lt;/p&gt;
  2660. &lt;h2&gt;Can you help me run other software on my Kindle?&lt;/h2&gt;
  2661. &lt;p&gt;No.&lt;/p&gt;
  2662. &lt;h2&gt;The Kindle has a 3G modem in it. Can I use that to get free internet access for my laptop?&lt;/h2&gt;
  2663. &lt;p&gt;&lt;strong&gt;Don&#39;t even think about it.&lt;/strong&gt; The Kindle&#39;s 3G internet access is currently provided gratis to all Kindle users for the purpose of browsing the web and downloading ebooks. Amazon could choose to start charging for this &quot;experimental&quot; feature at any time. On top of that, Amazon knows where you live, has your credit card number and, thanks to the Kindle&#39;s GPS, knows where you are &lt;em&gt;right now&lt;/em&gt;.&lt;/p&gt;
  2664. &lt;h2&gt;Where can I get support for Savory?&lt;/h2&gt;
  2665. &lt;p&gt;The &lt;a href=&quot;;&gt;MobileRead forums&lt;/a&gt; are probably the right place to start.&lt;/p&gt;
  2666. &lt;h2&gt;So, why is it called Savory?&lt;/h2&gt;
  2667. &lt;p&gt;When I first got a my Kindle2, I experimented with a web-based transcoding proxy which lets you download ePub and PDF files to the Kindle using a tool running on a server. I called the project an &quot;unsavory ePub hack.&quot; This new tool is a good deal more elegant and easier to use. It&#39;s no longer unsavory. That must mean it&#39;s Savory&lt;/p&gt;
  2668. &lt;h2&gt;Savory is awesome! Now I want a Kindle!&lt;/h2&gt;
  2669. &lt;p&gt;Great! That&#39;s the kind of thing I like to hear. Savory is (and will always be) 100% free. BUT!&lt;br&gt;
  2670. &lt;strong&gt;Shameless plug warning&lt;/strong&gt;&lt;br&gt;
  2671. If you &lt;a href=&quot;;amp;tag=fsck-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=9325&amp;amp;creativeASIN=B00154JDAI&quot;&gt;buy a kindle (or anything else) from Amazon&lt;/a&gt;&lt;img alt=&quot;&quot; src=&quot;;amp;l=as2&amp;amp;o=1&amp;amp;a=B00154JDAI&quot; style=&quot;border:medium none !important;margin:0!important;display:none;&quot; border=&quot;0&quot; height=&quot;1&quot; width=&quot;1&quot;&gt;, I&#39;ll earn a referral fee which goes to feed my ebook habit. Buying a Kindle 2 from Amazon through this site helps us tell Amazon that we want the Kindle to support open formats. If more than a few of you buy a Kindle through this blog, I&#39;ll post a running tally.&lt;/p&gt;
  2672. &lt;h2&gt;Who created Savory?&lt;/h2&gt;
  2673. &lt;p&gt;I&#39;m Jesse Vincent. You can reach me at jesse - at - Please don&#39;t contact me directly for help with Savory, even if it sets your dog on fire or you&#39;re sure that I&#39;ll make an exception for you.&lt;/p&gt;
  2674. &lt;p&gt;If you need help with Savory, I refer you to the forums at (See above)&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2675. </content>
  2676. </entry>
  2677. <entry>
  2678. <title>Yes, I am teasing you. But why am I building Qt on my Kindle?</title>
  2679. <link href=""/>
  2680. <updated>2009-03-24T06:28:38Z</updated>
  2681. <id></id>
  2682. <content type="html">&lt;pre&gt;USER    PID %CPU %MEM  VSZ  RSS TTY   STAT START  TIME COMMAND&lt;br&gt;root     1 0.0 0.2  1484  300 ?    Ss  Mar22  0:03 init [5]   &lt;br&gt;root     2 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:00 [kthreadd]&lt;br&gt;root     3 0.0 0.0   0   0 ?    SN  Mar22  0:00 [ksoftirqd/0]&lt;br&gt;root     4 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:00 [watchdog/0]&lt;br&gt;root     5 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:24 [events/0]&lt;br&gt;root     6 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:00 [khelper]&lt;br&gt;root    37 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:00 [kblockd/0]&lt;br&gt;root    38 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:00 [cqueue/0]&lt;br&gt;root    40 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:11 [mxc_spi.1]&lt;br&gt;root    58 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:00 [kmmcd]&lt;br&gt;root    76 0.0 0.0   0   0 ?    S  Mar22  0:12 [pdflush]&lt;br&gt;root    77 0.0 0.0   0   0 ?    S  Mar22  0:05 [pdflush]&lt;br&gt;root    78 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:24 [kswapd0]&lt;br&gt;root    79 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:00 [aio/0]&lt;br&gt;root    101 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:01 [mtdblockd]&lt;br&gt;root    136 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:00 [kondemand/0]&lt;br&gt;root    146 0.1 0.0   0   0 ?    S&amp;lt;  Mar22  3:33 [mmcqd]&lt;br&gt;root    156 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:00 [kjournald]&lt;br&gt;root    190 0.0 0.1  1520  208 ?    S&amp;lt;s Mar22  0:06 udevd --daemon&lt;br&gt;root    384 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:02 [eink_fb_bt]&lt;br&gt;root    386 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:00 [eink_fb_pt]&lt;br&gt;root    390 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:00 [eink_fb_sst]&lt;br&gt;root    394 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:00 [pnlcd_animate]&lt;br&gt;root    583 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:01 [kjournald]&lt;br&gt;root    696 0.0 0.4  1948  616 ?    Ss  Mar22  1:02 /usr/sbin/syslog-ng&lt;br&gt;root   1023 0.1 0.0   0   0 ?    S&amp;lt;  Mar22  1:57 [loop0]&lt;br&gt;root   1043 2.7 4.5 205616 5832 ?    Ssl Mar22 52:00 fsp /mnt/base-us /mnt/us -o rw&lt;br&gt;92    1332 0.0 0.3  2236  504 ?    Ss  Mar22  0:04 /usr/bin/dbus-daemon --system&lt;br&gt;root   1367 7.9 0.4 19080  520 ?    Ssl Mar22 147:54 /usr/bin/powerd&lt;br&gt;root   1466 0.0 0.0  1468  120 ?    Ss  Mar22  0:00 /usr/sbin/tphserver&lt;br&gt;root   1526 0.0 0.1 19012  244 ?    Ssl Mar22  0:00 /usr/sbin/volumd -d /dev/mmcblk0p4&lt;br&gt;root   1605 0.0 0.1  2652  140 ?    Ss  Mar22  0:00 /bin/sh /usr/bin/;br&gt;root   1644 0.0 0.3  2648  396 ?    Ss  Mar22  0:00 /usr/sbin/crond -c /etc/crontab/&lt;br&gt;root   1757 0.0 0.1  2648  188 ?    S  Mar22  0:00 /bin/sh /opt/amazon/ebook/bin/;br&gt;root   1793 0.0 0.1  2652  188 ?    S  Mar22  0:00 /bin/sh /opt/amazon/ebook/bin/;br&gt;root   1795 0.0 0.1  2652  152 ?    S  Mar22  0:00 logger -p local2.debug&lt;br&gt;root   1821 2.8 22.2 390176 28280 ?    SLl Mar22 52:31 /usr/java/bin/cvm -Xmx16m -Xbootclasspath/a:/usr/java/lib/localedata.jar:/usr/java/lib/charsets.jar -Dsun.boot.library.path=/usr/java/lib:/usr/java/lib -cp :/opt/amazon/ebook/lib/MobiCore-impl.jar:/opt/amazon/ebook/lib/MobipocketCoreReader.jar:/opt/amazon/ebook/lib/ReaderSDK.jar:/opt/amazon/ebook/lib/SearchSDK.jar:/opt/amazon/ebook/lib/booklet.jar:/opt/amazon/ebook/lib/cd.jar:/opt/amazon/ebook/lib/framework-api.jar:/opt/amazon/ebook/lib/framework-impl.jar:/opt/amazon/ebook/lib/jdbm.jar:/opt/amazon/ebook/lib/json.jar:/opt/amazon/ebook/lib/kxml2.jar:/opt/amazon/ebook/lib/xyml.jar:/opt/amazon/ebook/booklet/AudiblePlayer.jar:/opt/amazon/ebook/booklet/AudioPlayer.jar:/opt/amazon/ebook/booklet/Browser.jar:/opt/amazon/ebook/booklet/Demo.jar:/opt/amazon/ebook/booklet/Experimental.jar:/opt/amazon/ebook/booklet/Home.jar:/opt/amazon/ebook/booklet/MobiReader.jar:/opt/amazon/ebook/booklet/PictureViewer.jar:/opt/amazon/ebook/booklet/Search.jar:/opt/amazon/ebook/booklet/TestSwitches.jar:/opt/amazon/ebook/booklet/XymlBooklet.jar:/opt/amazon/ebook/booklet/msp.jar:/usr/java/lib/libjnisystem.jar -Ddebug=1 -Dcheck_comm_stack=true -Dhttp.keepalive.timeout=60000 -Dhttp.maxConnections=16 -Dallow_demo=false -Dawt_fb_enable=0 -Dextkeyboard=false -Dconfig=/opt/amazon/ebook/config/framework.mario.conf -DPLATFORM_CLASS_FILE=/opt/amazon/ebook/config/platform.conf -DENABLE_SEARCH_INDEXING_THREAD=true;br&gt;root   1892 0.0 0.1  2100  188 ?    Ss  Mar22  0:19 /usr/local/bin/telnetd -p 2323 -l /bin/sh&lt;br&gt;root   1929 0.0 0.1  1056  176 ?    Ss  Mar22  0:00 /opt/local/unsavory/sbin/dropbear -d /opt/local/unsavory/etc/dropbear_dss_host_key -p 22&lt;br&gt;root   1959 0.0 0.1  2652  148 ttymxc/0 Ss+ Mar22  0:00 /sbin/getty -L 115200 ttymxc0 -l /bin/login&lt;br&gt;root   2365 0.1 0.0   0   0 ?    S&amp;lt;  Mar23  0:29 [rpciod/0]&lt;br&gt;root   5155 0.0 0.4  2652  584 pts/5  Ss  00:54  0:00 /bin/sh&lt;br&gt;root   6826 0.2 0.6  2824  880 pts/5  S+  02:40  0:05 /bin/sh ./configure --prefix=/opt/savory -qt-freetype -no-cups -no-nis -qt-libjpeg -qt-libpng -qt-libtiff -no-opengl -depths 1,4 -no-qt3support -no-webkit&lt;br&gt;root   7707 0.0 0.0   0   0 ?    S&amp;lt;  Mar23  0:05 [loop5]&lt;br&gt;root   7708 0.0 0.0   0   0 ?    S&amp;lt;  Mar23  0:00 [kjournald]&lt;br&gt;root   8503 0.0 0.0   0   0 ?    S&amp;lt;  Mar23  0:00 [loop3]&lt;br&gt;root   8617 0.0 0.0   0   0 ?    S&amp;lt;  Mar23  0:00 [loop4]&lt;br&gt;root   11603 0.1 1.0 28336 1392 ?    Ssl 02:57  0:02 /usr/bin/monit -Ic /etc/monitrc&lt;br&gt;root   11856 0.0 0.3  1460  408 ?    Ss  02:58  0:00 /usr/sbin/watchdogd&lt;br&gt;root   12366 0.0 0.9 84160 1188 ?    Sl  Mar22  0:01 audioServer -I&lt;br&gt;root   12484 0.1 0.7  3656  956 ?    Ss  02:59  0:01 /opt/local/unsavory/sbin/dropbear -d /opt/local/unsavory/etc/dropbear_dss_host_key -p 22&lt;br&gt;root   12485 0.0 0.5  2652  720 pts/0  Ss  02:59  0:00 -sh&lt;br&gt;root   12489 0.0 0.7  3668  924 pts/0  S+  02:59  0:00 /mnt/us/unsavory/bin/screen-4.0.3 -x&lt;br&gt;root   12490 0.0 0.5  2652  712 pts/1  Ss  02:59  0:00 /bin/sh&lt;br&gt;root   15956 0.0 0.0   0   0 ?    S&amp;lt;  Mar22  0:09 [charger/0]&lt;br&gt;root   23310 0.0 0.5  2652  712 pts/2  Ss+ 03:09  0:00 /bin/sh&lt;br&gt;root   23469 0.0 0.5  2652  720 pts/3  Ss  03:09  0:00 /bin/sh&lt;br&gt;root   23598 0.0 0.0   0   0 ?    S&amp;lt;  Mar23  0:00 [loop1]&lt;br&gt;root   24135 0.0 0.0   0   0 ?    S&amp;lt;  Mar23  0:00 [loop2]&lt;br&gt;root   25652 0.0 0.5  2652  716 pts/4  Ss  03:14  0:00 /bin/sh&lt;br&gt;root   26479 0.2 0.7  2532  960 pts/4  S+  03:15  0:00 make&lt;br&gt;root   26482 0.0 0.4  2648  584 pts/4  S+  03:15  0:00 /bin/sh -c cd src/tools/bootstrap/ &amp;amp;&amp;amp; make -f Makefile &lt;br&gt;root   26483 0.1 0.8  2572 1068 pts/4  S+  03:15  0:00 make -f Makefile&lt;br&gt;root   28838 0.0 0.4  1888  628 pts/4  S+  03:21  0:00 g++ -c -pipe -g -fno-exceptions -O2 -fPIC -Wall -W -DQT_BOOTSTRAPPED -DQT_LITE_UNICODE -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_CODECS -DQT_NO_DATASTREAM -DQT_NO_GEOM_VARIANT -DQT_NO_LIBRARY -DQT_NO_QOBJECT -DQT_NO_STL -DQT_NO_SYSTEMLOCALE -DQT_NO_TEXTSTREAM -DQT_NO_THREAD -DQT_NO_UNICODETABLES -DQT_NO_USING_NAMESPACE -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE -I../../../mkspecs/qws/linux-generic-g++ -I. -I../../../include -I../../../include/QtCore -I../../../include/QtXml -I../../3rdparty/zlib -I.uic/release-shared-emb-generic -o .obj/release-static-emb-generic/qiodevice.o ../../corelib/io/qiodevice.cpp&lt;br&gt;root   28839 49.5 24.5 36116 31160 pts/4  R+  03:21  0:09 /mnt/us/savory-toolchain-4.1.2/bin/../libexec/gcc/arm-unknown-linux-gnueabi/4.1.2/cc1plus -quiet -I../../../mkspecs/qws/linux-generic-g++ -I. -I../../../include -I../../../include/QtCore -I../../../include/QtXml -I../../3rdparty/zlib -I.uic/release-shared-emb-generic -iprefix /mnt/us/savory-toolchain-4.1.2/bin/../lib/gcc/arm-unknown-linux-gnueabi/4.1.2/ -D_GNU_SOURCE -DQT_BOOTSTRAPPED -DQT_LITE_UNICODE -DQT_NO_CAST_FROM_ASCII -DQT_NO_CAST_TO_ASCII -DQT_NO_CODECS -DQT_NO_DATASTREAM -DQT_NO_GEOM_VARIANT -DQT_NO_LIBRARY -DQT_NO_QOBJECT -DQT_NO_STL -DQT_NO_SYSTEMLOCALE -DQT_NO_TEXTSTREAM -DQT_NO_THREAD -DQT_NO_UNICODETABLES -DQT_NO_USING_NAMESPACE -D_LARGEFILE64_SOURCE -D_LARGEFILE_SOURCE ../../corelib/io/qiodevice.cpp -quiet -dumpbase qiodevice.cpp -mcpu=arm1136jf-s -auxbase-strip .obj/release-static-emb-generic/qiodevice.o -g -O2 -Wall -W -fno-exceptions -fPIC -o -&lt;br&gt;root   28840 0.5 3.5  5828 4536 pts/4  S+  03:21  0:00 /mnt/us/savory-toolchain-4.1.2/bin/../lib/gcc/arm-unknown-linux-gnueabi
  2683. /4.1.2/../../../../arm-unknown-linux-gnueabi/bin/as -mcpu=arm1136jf-s -meabi=4 -o .obj/release-static-emb-generic/qiodevice.o&lt;br&gt;root   28994 0.0 1.7  7404 2248 pts/5  R+  03:21  0:00 /var/tmp/maemo-build/src/qt-embedded-linux-opensource-src-4.5.0/bin/qmake -spec /var/tmp/maemo-build/src/qt-embedded-linux-opensource-src-4.5.0/mkspecs/qws/linux-generic-g++ -o /var/tmp/maemo-build/src/qt-embedded-linux-opensource-src-4.5.0/./examples/network/fortuneserver /var/tmp/maemo-build/src/qt-embedded-linux-opensource-src-4.5.0/examples/network/fortuneserver/;br&gt;root   28995 0.0 0.7  2644  992 pts/1  R+  03:21  0:00 ps auxwww&lt;br&gt;root   32292 0.2 1.0  3896 1272 ?    Ss  Mar23  1:15 /mnt/us/unsavory/bin/SCREEN-4.0.3&lt;br&gt;&lt;/pre&gt;
  2684. </content>
  2685. </entry>
  2686. <entry>
  2687. <title>More fascinating Kindle 2 tidbits</title>
  2688. <link href=""/>
  2689. <updated>2009-03-16T00:25:47Z</updated>
  2690. <id></id>
  2691. <content type="html">&lt;p&gt;There appear to be on-board PPP configurations for both Sprint and AT&amp;amp;T (though of course the Kindle&amp;#039;s EVDO modem will only talk to Sprint).&lt;/p&gt;
  2692. &lt;p&gt;As indicated by a previous anonymous commenter, it&amp;#039;s not actually that hard to turn on the 3G modem while USB networking is on.&lt;/p&gt;
  2693. &lt;p&gt;&lt;strong&gt;Sorry, kids. It&amp;#039;s my sad duty to report that Amazon and Lab126 are neither inept nor stupid. You can&amp;#039;t get much of anywhere except for Amazon or their web proxies. Your dreams of a magic, free internet dongle the size of a paperback book that works anywhere in the US will have to wait. &lt;/strong&gt;&lt;/p&gt;
  2694. &lt;p&gt;One slightly terrifying thing I noted in the NetFront configuration file on the Kindle 2 - All traffic is proxied through, Amazon&amp;#039;s Kindle web proxy. HTTP and HTTPS alike are proxied on port 80. &lt;strong&gt;Amazon can see what you&amp;#039;re downloading, even if you &amp;quot;use SSL.&amp;quot;&lt;/strong&gt; (As could anybody who could sniff your EVDO traffic, but I&amp;#039;m told that&amp;#039;s something that&amp;#039;s only easy if the attacker is running MovieOS).&amp;#160; I know there are solid technical reasons for this decision on Amazon&amp;#039;s part. It doesn&amp;#039;t exactly make me comfortable.&lt;/p&gt;
  2695. &lt;p&gt;What else did I discover during my week away? This is a rough first pass at a list.&lt;/p&gt;
  2696. &lt;p&gt;There&amp;#039;s code infrastructure for iphone-esque orientation switching, though I&amp;#039;m not seeing anything that suggests that the backend for that exists...yet.&lt;/p&gt;
  2697. &lt;p&gt;Building an entire GCC toolchain that can run natively on the Kindle (don&amp;#039;t ask why just yet) is a real pain in the ass, but thanks to the Fedora ARM nfs-root instructions, the Ubuntu ARM root filesystem and crosstool-ng, I think I may have something stable and reproducible soon.&lt;/p&gt;
  2698. &lt;p&gt;I&amp;#039;d previously cross-compiled gcc, binutils, glibc and coreutils by-hand, but it&amp;#039;s turned out not so stable.&amp;#160; Getting somewhat desperate before I managed to find the right incantation to overcome Q-emu/ARM&amp;#039;s weird SCSI lockup problems, I actually got enough of a dev environment up on my N810 to build an ARM-native Perl linked against the ~right glibc such that it runs ok on the Kindle.&lt;/p&gt;
  2699. </content>
  2700. </entry>
  2701. <entry>
  2702. <title>Gone Fishin&#39;</title>
  2703. <link href=""/>
  2704. <updated>2009-03-07T11:17:11Z</updated>
  2705. <id></id>
  2706. <content type="html">&lt;p&gt;As a heads up, I&amp;#039;m going to be in the UK for the next week for work, so you shouldn&amp;#039;t expect to hear much out of me on the Kindle front.&lt;/p&gt;
  2707. &lt;p&gt;I have a plan, but don&amp;#039;t really want to say anything until I can prove to myself that the plan will work. Maybe if you corner me in an epub over a pint.&lt;/p&gt;
  2708. </content>
  2709. </entry>
  2710. <entry>
  2711. <title>The most interesting content I&#39;ve found on my Kindle 2 so far...</title>
  2712. <link href=""/>
  2713. <updated>2009-03-06T08:35:36Z</updated>
  2714. <id></id>
  2715. <content type="html">&lt;p&gt;from rcS.d/S05video_primary_init:&lt;/p&gt;
  2716. &lt;div style=&quot;margin-left:40px;&quot;&gt;_PANEL_SIZE_6_0_INCH=6&lt;br&gt;_PANEL_SIZE_9_7_INCH=9&lt;/div&gt;
  2717. &lt;p&gt;&lt;/p&gt;
  2718. </content>
  2719. </entry>
  2720. <entry>
  2721. <title>root</title>
  2722. <link href=""/>
  2723. <updated>2009-03-06T07:13:02Z</updated>
  2724. <id></id>
  2725. <content type="html">&lt;p&gt;So yes, I have a root shell on the Kindle 2. No, I&amp;#039;m not going to post a step-by-step HOWTO. (See my post from earlier today if you&amp;#039;re wondering why.) &lt;/p&gt;
  2726. &lt;p&gt;My next step is the armel virtual machine to make cross-compilation a breeze.&lt;/p&gt;
  2727. &lt;p&gt;If you&amp;#039;re interested in voiding the warranty on your Kindle 2, my writeup about USB Networking,&amp;#160; igorsk&amp;#039;s posts from 2007, the Kindle 2.0.1 update, a copy of the right build of busybox and a little bit of hackery will get you your very own login on a cute little ARM Linux box with 128 megs of RAM.&lt;/p&gt;
  2728. </content>
  2729. </entry>
  2730. <entry>
  2731. <title>PSA</title>
  2732. <link href=""/>
  2733. <updated>2009-03-06T06:22:00Z</updated>
  2734. <id></id>
  2735. <content type="html">&lt;p&gt;I&#39;ve moved my technical blogging over to &lt;a href=&quot;;&gt;;/a&gt;. &lt;/p&gt;
  2736. &lt;p&gt;Right now, I&#39;m going on and on about getting a shell on my Kindle 2&lt;/p&gt;
  2737. </content>
  2738. </entry>
  2739. <entry>
  2740. <title>A productive evening so far.</title>
  2741. <link href=""/>
  2742. <updated>2009-03-06T05:14:26Z</updated>
  2743. <id></id>
  2744. <content type="html">&lt;p&gt;First, the bad news: the busybox Amazon ships the Kindle with doesn&#39;t have telnetd compiled in.&lt;/p&gt;
  2745. &lt;p&gt;And now for the good news: Linux ARM binaries work just fine. Like the nice static build of busybox for Android I had laying around.&lt;/p&gt;
  2746. &lt;p&gt;As of about 2 hours ago, I was treated to this lovely sight:&lt;/p&gt;
  2747. &lt;pre&gt;
  2748. # telnet 2323
  2749. Trying
  2750. Connected to
  2751. Escape character is &#39;^]&#39;.
  2752. kindle login:
  2753. &lt;/pre&gt;
  2754. &lt;p&gt;By now, the utility of USB networking to the Kindle should be clear to most readers&lt;/p&gt;
  2755. </content>
  2756. </entry>
  2757. <entry>
  2758. <title>An ethical quandary</title>
  2759. <link href=""/>
  2760. <updated>2009-03-05T20:00:54Z</updated>
  2761. <id></id>
  2762. <content type="html">&lt;p&gt;It looks like I&amp;#039;m pretty close to being able to start a telnetd on the Kindle2 and build an update package so that others could do the same.&amp;#160; From comments on engadget, hackaday and other news sites reporting on me showing users how to type a few debug commands, it&amp;#039;s become really clear that many users want to try to get free 3G broadband using their Kindle as a modem.&lt;/p&gt;
  2763. &lt;p&gt;That&amp;#039;s not a behavior I want to encourage or be responsible for.&lt;/p&gt;
  2764. &lt;p&gt;How can I help advance the state of the Kindle homebrew ecosystem without encouraging/enabling behaviour that will cause Amazon to lock the Kindle down like an iPhone?&amp;#160;&amp;#160; &lt;/p&gt;
  2765. </content>
  2766. </entry>
  2767. <entry>
  2768. <title>A couple quick updates</title>
  2769. <link href=""/>
  2770. <updated>2009-03-05T06:24:33Z</updated>
  2771. <id></id>
  2772. <content type="html">&lt;p&gt;When I said the K2 wasn&amp;#039;t listening on any TCP ports, I was somewhat mistaken.&lt;/p&gt;
  2773. &lt;p&gt;&lt;span style=&quot;font-family:Courier;&quot;&gt;PORT&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; STATE SERVICE&lt;/span&gt;&lt;br&gt;&lt;span style=&quot;font-family:Courier;&quot;&gt;2812/tcp&amp;#160; open&amp;#160; unknown&lt;/span&gt;&lt;br&gt;&lt;span style=&quot;font-family:Courier;&quot;&gt;28082/tcp open&amp;#160; unknown&lt;/span&gt;&lt;br&gt;&lt;span style=&quot;font-family:Courier;&quot;&gt;40317/tcp open&amp;#160; unknown&lt;/span&gt;&lt;/p&gt;
  2774. &lt;p&gt;2812 is monit. And isn&amp;#039;t in the list of&amp;#160; addresses authorized to connect. I can connect to port 40317 and spew at it all I want, but the Kindle doesn&amp;#039;t acknowledge my input.&lt;/p&gt;
  2775. &lt;p&gt;I only got it listening on 40317 after I...did some stuff I&amp;#039;m not going to talk about yet. That currently hands me an &amp;quot;ACCESS DENIED&amp;quot; upon connect.&lt;/p&gt;
  2776. &lt;p&gt;I&amp;#039;ve also got the Kindle 2 accepting my hand-rolled firmware updates, not that I&amp;#039;ve managed anything useful with them yet. (Hint to interested parties: igorsk&amp;#039;s tools are still useful on the Kindle 2, but unlike the K1, it actually cares about some of the metadata his header writer skips)&lt;/p&gt;
  2777. </content>
  2778. </entry>
  2779. <entry>
  2780. <title>Tethering your Kindle 2</title>
  2781. <link href=""/>
  2782. <updated>2009-03-04T02:24:52Z</updated>
  2783. <id></id>
  2784. <content type="html">&lt;p&gt;&lt;strong&gt;UPDATE: There&amp;#039;s now a bunch more at &lt;a href=&quot;;&gt;;/a&gt;, including bits about how you might get yourself a telnetd, root shell and other fun bits.&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2785. &lt;p&gt;As I mentioned in my previous post, I&amp;#039;ve spent far too much of the past week playing with my lovely new &lt;a href=&quot;;amp;tag=bestpractical-20&amp;amp;linkCode=as2&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=B00154JDAI&quot;&gt;Kindle 2&lt;/a&gt;.&lt;/p&gt;
  2786. &lt;p&gt;As I&amp;#039;ve been exploring the device, I ran across &lt;a href=&quot;; target=&quot;_blank&quot;&gt;igorsk&amp;#039;s blog post&lt;/a&gt; about the debugging commands on the first Kindle.&amp;#160; They&amp;#039;re still there....with a few additions. One of those additions is a command to enable USB networking.&amp;#160; It seems fairly clear to me that it&amp;#039;s there as a debugging and development aid.&lt;/p&gt;
  2787. &lt;p&gt;If you follow the steps outlined below, you should be be able to set up your Kindle to use your laptop or desktop computer&amp;#039;s internet connection. Please don&amp;#039;t be surprised if Amazon remove this feature (or make it more easily accessible) in a future Kindle firmware update. If you follow my instructions and your Kindle bursts into flames or shatters into a million pieces, please accept my condolences, but don&amp;#039;t think for even a moment that I&amp;#039;m responsible for you breaking your new toy. ;)&amp;#160; &lt;/p&gt;
  2788. &lt;p&gt;&lt;strong&gt;This is not a tutorial about how to use the Kindle 2&amp;#039;s Sprint connection from your computer&lt;/strong&gt;. I don&amp;#039;t know that it&amp;#039;s possible to do so without making changes to the Linux installation on the Kindle. I do know that abusing the Kindle&amp;#039;s Sprint modem like that would upset Amazon a great deal.&amp;#160; Bear in mind also that Amazon know where you live. They know your Kindle&amp;#039;s serial number and thanks to the built in GPS, they know where you are right now. &lt;/p&gt;
  2789. &lt;p&gt;Now that I have the cranky-sounding warnings out of the way, it&amp;#039;s time to get down to business.&lt;/p&gt;
  2790. &lt;p&gt;For today&amp;#039;s experiment, you will need:&lt;/p&gt;
  2791. &lt;ul&gt;
  2792. &lt;li&gt;One Amazon Kindle 2&lt;/li&gt;
  2793. &lt;li&gt;One computer (the instructions assume you&amp;#039;re using a mac)&lt;/li&gt;
  2794. &lt;li&gt;One Amazon Kindle MicroUSB cable&lt;/li&gt;
  2795. &lt;/ul&gt;
  2796. &lt;p&gt;Make sure your Kindle is not connected to your computer.&lt;/p&gt;
  2797. &lt;p&gt;Reboot your Kindle:&lt;/p&gt;
  2798. &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; First, Click &amp;quot;Menu&amp;quot;, then pick &amp;quot;Settings&amp;quot;&lt;br&gt;&amp;#160;&amp;#160;&amp;#160; Now, Click &amp;quot;Menu&amp;quot;, then pick &amp;quot;Restart&amp;quot;&lt;/p&gt;
  2799. &lt;p&gt;Enable debug mode:&lt;/p&gt;
  2800. &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; From the Kindle&amp;#039;s home screen, type something to get the search box to pop up.&lt;br&gt;&amp;#160;&amp;#160;&amp;#160; Hit the &lt;strong&gt;DEL&lt;/strong&gt; key to clear the content of the search box.&lt;br&gt;&amp;#160;&amp;#160;&amp;#160; Hit &lt;strong&gt;Sym&lt;/strong&gt; and select the Semicolon (;) using the 5-pad.&lt;br&gt;&amp;#160;&amp;#160;&amp;#160; Type &lt;strong&gt;debugOn&lt;/strong&gt;&lt;br&gt;&amp;#160;&amp;#160;&amp;#160; (You should now see ;debugOn)&lt;br&gt; &amp;#160;&amp;#160;&amp;#160; Click the enter key.&lt;/p&gt;
  2801. &lt;p&gt;Congratulations. You&amp;#039;ve turned on Debug mode. From here on in, you can probably do all sorts of things to render your Kindle 2 useless.&lt;/p&gt;
  2802. &lt;p&gt;To verify that debug mode is on, run the private debug tools &amp;quot;help&amp;quot; command.&lt;/p&gt;
  2803. &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; From the Kindle&amp;#039;s home screen, type something to get the search box to pop up.&lt;br&gt;
  2804. &amp;#160;&amp;#160;&amp;#160; Hit the &lt;strong&gt;DEL&lt;/strong&gt; key to clear the content of the search box.&lt;br&gt;
  2805. &amp;#160;&amp;#160;&amp;#160; Hit &lt;strong&gt;Sym&lt;/strong&gt; and select the ` using the 5-pad. (It&amp;#039;s the next-to-last thing on the middle row)&lt;br&gt;
  2806. &amp;#160;&amp;#160;&amp;#160; Type &lt;strong&gt;help&lt;br&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; (You should now see `help)&lt;br&gt;&amp;#160;&amp;#160;&amp;#160; Hit the enter key&lt;/p&gt;
  2807. &lt;p&gt;You should now see a list of commands. We&amp;#039;re interested in two of them: `usbNetwork and `usbQa.&lt;br&gt;Click to close the menu.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
  2808. &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; From the Kindle&amp;#039;s home screen, type something to get the search box to pop up.&lt;br&gt;
  2809. &amp;#160;&amp;#160;&amp;#160; Hit the &lt;strong&gt;DEL&lt;/strong&gt; key to clear the content of the search box.&lt;br&gt;
  2810. &amp;#160;&amp;#160;&amp;#160; Hit &lt;strong&gt;Sym&lt;/strong&gt; and select the ` using the 5-pad. (It&amp;#039;s the next-to-last thing on the middle row)&lt;br&gt;
  2811. &amp;#160;&amp;#160;&amp;#160; Type &lt;strong&gt;usbNetwork&lt;br&gt;
  2812. &lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; (You should now see `usbNetwork)&lt;br&gt;
  2813. &amp;#160;&amp;#160;&amp;#160; Hit the enter key&lt;br&gt;&lt;strong&gt;&lt;br&gt;&lt;em&gt;If you were to stop here, the Kindle would be in USB network mode but wouldn&amp;#039;t be set up to try to talk to the Internet over that interface&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
  2814. &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; Type something to get the search box to pop up.&lt;br&gt;
  2815. &amp;#160;&amp;#160;&amp;#160; Hit the &lt;strong&gt;DEL&lt;/strong&gt; key to clear the content of the search box.&lt;br&gt;
  2816. &amp;#160;&amp;#160;&amp;#160; Hit &lt;strong&gt;Sym&lt;/strong&gt; and select the ` using the 5-pad. (It&amp;#039;s the next-to-last thing on the middle row)&lt;br&gt;
  2817. &amp;#160;&amp;#160;&amp;#160; Type &lt;span style=&quot;font-weight:bold;&quot;&gt;usbQa&lt;/span&gt;&lt;strong&gt;&lt;br&gt;
  2818. &lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160; (You should now see `usbQa)&lt;br&gt;
  2819. &amp;#160;&amp;#160;&amp;#160; Hit the enter key&lt;/p&gt;
  2820. &lt;p&gt;Now it&amp;#039;s time to plug your Kindle 2 into your Computer. If I have to talk you through plugging in a USB cable, you should probably stop reading here.&lt;/p&gt;
  2821. &lt;p&gt;Once you plug in your Kindle 2, you should see something like this:&lt;br&gt;&lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Picture 1&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e2011168a7fd4e970c &quot; src=&quot;; title=&quot;Picture 1&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  2822. &lt;p&gt;Click Network Preferences. (Adjust accordingly for Linux or Windows)&lt;/p&gt;
  2823. &lt;p&gt;Next, you should see something like this:&lt;/p&gt;
  2824. &lt;p&gt;&lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Picture 2&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e2011168a7fe94970c image-full &quot; src=&quot;; title=&quot;Picture 2&quot;&gt;&lt;/a&gt;&lt;br&gt;
  2825. &lt;br&gt;Configure your computer with a static (manual) IP Address:&lt;br&gt;&amp;#160;&amp;#160;&amp;#160; Type &lt;strong&gt;;/strong&gt; into the IP Address field.&lt;br&gt;&amp;#160;&amp;#160;&amp;#160; Click &amp;quot;Apply&amp;quot; in the lower right-hand corner.&lt;/p&gt;
  2826. &lt;p&gt;Congratulations. You&amp;#039;ve set up a network connection between your computer and your Kindle 2.&lt;/p&gt;
  2827. &lt;p&gt;You can test the local network connection by popping up a terminal and using &lt;strong&gt;ping&lt;/strong&gt;&lt;br&gt;&amp;#160;&amp;#160;&amp;#160; Type ping &lt;strong&gt;;/strong&gt;&lt;/p&gt;
  2828. &lt;p&gt;If things are working right, you should see something like this:&lt;br&gt;&lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Picture 3&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e20112791c72fe28a4 image-full &quot; src=&quot;; title=&quot;Picture 3&quot;&gt;&lt;/a&gt;&lt;br&gt;
  2829. &lt;br&gt;Assuming that&amp;#039;s working right for you, the last step is to set up Internet Sharing so that the Kindle can use your computer&amp;#039;s network connection to talk to the outside world.&amp;#160; On a Mac, that&amp;#039;s pretty straight forward. Open up &lt;strong&gt;System Preferences&lt;/strong&gt; and click on &lt;strong&gt;Sharing&lt;/strong&gt;. You&amp;#039;ll want to set up a config something like this:&lt;/p&gt;
  2830. &lt;p&gt;&lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Picture 4&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e2011168a8021c970c image-full &quot; src=&quot;; title=&quot;Picture 4&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  2831. &lt;p&gt;And that&amp;#039;s about it. If you open up the Kindle Store, you&amp;#039;ll be able to browse and buy books. (You&amp;#039;ll also note that the Kindle&amp;#039;s wireless indicator shows empty boxes. The EVDO is turned off automatically as you bring up USB networking).&lt;/p&gt;
  2832. &lt;p&gt;When you want to use the Kindle 2 in disk mode again, you&amp;#039;ll need to get it out of USB Network mode. There&amp;#039;s likely a way to get the device back onto wireless without restarting, but restarting is easy enough that I haven&amp;#039;t gone exploring.&lt;/p&gt;
  2833. &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; First, Click &amp;quot;Menu&amp;quot;, then pick &amp;quot;Settings&amp;quot;&lt;br&gt;
  2834. &amp;#160;&amp;#160;&amp;#160; Now, Click &amp;quot;Menu&amp;quot;, then pick &amp;quot;Restart&amp;quot;&lt;br&gt;&lt;strong&gt;&lt;br&gt;&lt;/strong&gt;Good luck!&lt;/p&gt;
  2835. </content>
  2836. </entry>
  2837. <entry>
  2838. <title>Notes on the Kindle 2</title>
  2839. <link href=""/>
  2840. <updated>2009-03-03T20:27:19Z</updated>
  2841. <id></id>
  2842. <content type="html">&lt;p&gt;As I&amp;#039;ve been playing around with the Kindle 2, I&amp;#039;ve discovered a few interesting things that I haven&amp;#039;t yet found documented elsewhere. (That&amp;#039;s not to say they&amp;#039;re not documented elsewhere, just that I haven&amp;#039;t found them).&lt;/p&gt;
  2843. &lt;p&gt;Table support - The K2 supports basic HTML Tables in mobipocket ebooks. I haven&amp;#039;t done extensive testing. But, unlike the Kindle 1, the support is there.&lt;/p&gt;
  2844. &lt;p&gt;Proxies - Amazon proxies all web traffic for your Kindle and restricts which ports on remote servers you can connect to.&lt;/p&gt;
  2845. &lt;p&gt;USB Networking - &lt;a href=&quot;;&gt;;/a&gt; is the place to go to learn about Kindle reverse engineering. One of the things that Igor mentions is the &amp;quot;extra&amp;quot; shortcuts baked into the Kindle.&lt;br&gt;One of the commands Igor mentions is &amp;quot;;debugOn&amp;quot; - This turns on the Kindle&amp;#039;s extra commands. This works the same on the K2.&amp;#160; Once you&amp;#039;ve done that &amp;#039;`help&amp;#039; will show you a list of private commands.&amp;#160; There are a couple private commands which appear to be new for the K2:&amp;#160; &amp;#039;`usbNetwork&amp;#039; and &amp;#039;`usbQa&amp;#039;.&amp;#160; Being the sort of guy I am, my eyes lit up when I saw these commands. So I plugged my K2 into my trusty Macbook Air and ran them. ...and got nothing.&lt;/p&gt;
  2846. &lt;p&gt;As you can see from my previous post, I&amp;#039;ve been a bit busy on other K2 related hackery. I moved on and mentally filed the `qa command away for later.&lt;/p&gt;
  2847. &lt;p&gt;The next day, I plugged the K2 into the MacBook to download a test book. The Kindle didn&amp;#039;t go into disk mode. Just as I started to wonder what had gone wrong, the MacBook popped up a dialog telling me that a new USB Ethernet device had been detected and would I like to configure it now.&lt;/p&gt;
  2848. &lt;p&gt;A few minutes with tcpdump later, I&amp;#039;d set up the MacBook as and could ping the Kindle on No, the Kindle is not listening on any ports out of the box.&lt;/p&gt;
  2849. &lt;p&gt;Since I know a few of you are asking, no, the Kindle is not acting as a gateway to the outside world. You can&amp;#039;t (and shouldn&amp;#039;t) use it as a 3G modem for your laptop.&amp;#160; Amazon is almost certainly paying by the byte for your traffic. If you figure out how to start abusing the Kindle&amp;#039;s network, 1) it will be very easy for Amazon to catch you and 2) Amazon knows who you are and where you live. (and where you are right now thanks to the Kindle&amp;#039;s GPS) &lt;/p&gt;
  2850. &lt;p&gt;It&amp;#039;s pretty clear to me that this USB networking mode is primarily intended for testing, debugging and development. I look forward to seeing some interesting testing, debugging and development.&lt;/p&gt;
  2851. </content>
  2852. </entry>
  2853. <entry>
  2854. <title>Kindle 2</title>
  2855. <link href=""/>
  2856. <updated>2009-03-03T20:09:26Z</updated>
  2857. <id></id>
  2858. <content type="html">&lt;p&gt;A couple months ago, I bought a Sony 700-series reader.&amp;#160; I returned it after about an hour of use. It was unreadably bad.&amp;#160; Last Tuesday, UPS delivered a Kindle 2 to my house. &lt;/p&gt;
  2859. &lt;p&gt;The first night, I stayed up until 4am reading a novel in its entirety.&lt;/p&gt;
  2860. &lt;p&gt;Over the course of the past year, I read a fair bit on an iPhone with Stanza. I thought it was pretty good. I really like my new Kindle. It actually makes a pretty good reading device. I can read things much more quickly on the e-Ink screen than I could on the iPhone.&lt;/p&gt;
  2861. &lt;p&gt;Unfortunately, when I get new hardware, I tend to pick up new hobbies.&amp;#160; When I got an Android phone last fall, I discovered just how awful the built in IMAP client was. I ended up learning some Java and &lt;a href=&quot;;&gt;forking the mail client&lt;/a&gt;.&lt;/p&gt;
  2862. &lt;p&gt;I thought I&amp;#039;d be safe this time. The Kindle is ostensibly a closed platform. I was...wrong.&lt;/p&gt;
  2863. &lt;p&gt;The first thing I went reaching for was a way to get .&lt;a href=&quot;;&gt;epubs&lt;/a&gt; onto the Kindle wirelessly.&amp;#160; Pretty much all the available options involved transcoding on the desktop and tethering or sending the epubs through Amazon&amp;#039;s closed conversion service.&lt;/p&gt;
  2864. &lt;p&gt;There&amp;#039;s lovely a opensource desktop app called &lt;a href=&quot;; target=&quot;_blank&quot;&gt;Calibre&lt;/a&gt; which can autofetch feeds and do conversion to the .mobi (mobipocket) format the Kindle speaks, but it&amp;#039;s a big heavy ball of Python which I found near-impossible to build on OSX.&amp;#160; Their .mobi output has been improving by leaps and bounds recently, but it was still a little not-right for me.&lt;/p&gt;
  2865. &lt;p&gt;mobiperl is a set of libraries for generating .mobi ebooks. It&amp;#039;s not really designed for library use and it&amp;#039;s&amp;#160; early-90s perl. I started playing with and tidying up the code.&lt;/p&gt;
  2866. &lt;p&gt;As far as I could tell, there was no reasonable ePub reader in perl.&amp;#160; So I spent about a day over the course of the past week reverse engineering an ePub parser from sample books. Yes. It&amp;#039;s an open standard. Yes, I could have read the spec. (And yes, I did end up referring to the docs here and there.)&amp;#160; Before I started, I looked at Threepress Consulting&amp;#039;s &lt;a href=&quot;; target=&quot;_blank&quot;&gt;Bookworm&lt;/a&gt;.&amp;#160;&amp;#160; One thing became abundantly clear: Tools don&amp;#039;t actually author books that meet ePub spec.&amp;#160;&amp;#160; I don&amp;#039;t want to validate ePubs, I want to get at&amp;#160; their content. Which means that a proper reader for compliant books was 100% out of the question.&lt;/p&gt;
  2867. &lt;p&gt;It was probably only 4-5 hours hacking to get something that could take a zip file that purports to be an ePub, dig through it for metadata, extract the content and build out a document with a table of contents and a reasonably well rendered body. I grabbed Bookworm&amp;#039;s test corpus of strangely-broken ePubs. After an hour or two, I managed to get the toolchain to turn all of them into readable HTML.&lt;/p&gt;
  2868. &lt;p&gt;As I mentioned before, the Kindle reads .mobi. (Amazon&amp;#039;s proprietary .azw format is a slightly extended .mobi.&amp;#160; If you subscribe to an unencrypted periodical on your Kindle -- something like BoingBoing -- you&amp;#039;ll find that any reader that reads .mobis can read it just fine once you rename it from .azw to .mobi.) Conveniently .mobi is based around an extended subset of HTML 3.2.&amp;#160; It only took a little bit of digging to downconvert things like XHTML entities to something reasonable for the Kindle, add metadata to make the Kindle understand where the Table of Contents, Cover and start of content were.&lt;/p&gt;
  2869. &lt;p&gt;And as if by magic, I had reinvented epub2mobi...and had the start of a useful toolchain for further publishing hackery.&lt;/p&gt;
  2870. &lt;p&gt;The next step was to wire it up to a trivial webapp.&amp;#160; is that trivial webapp.&lt;br&gt;If you visit  &lt;strong&gt;;/strong&gt; from your Kindle&amp;#039;s browser, it will download a copy of that ePub converted to the .mobi format so the Kindle can read it.&lt;/p&gt;
  2871. &lt;p&gt;&lt;em&gt;Please note that is a quick hack that has had minimal testing and is currently &amp;quot;a quick hack for me and my friends.&amp;quot;&amp;#160; Don&amp;#039;t expect support. Don&amp;#039;t expect it to work. Don&amp;#039;t expect it to stick around. Please do feel free to play with it and leave me comments here.&amp;#160; I expect to keep working on it, as I rather enjoy reading on my Kindle.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  2872. &lt;p&gt;&lt;em&gt;&lt;strong&gt;For the moment, I am archiving ALL CONTENT passed through this system. Do NOT use it for anything sensitive or private. I reserve the right to add any difficult-to-transcode .epubs to my test suite.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
  2873. &lt;p&gt;There&amp;#039;s a second tool I&amp;#039;m working on. The current version is similar to a trivial version of Instapaper. I think Instapaper is a fantastic tool, but wanted something that was opensource with better Kindle integration. (Of course, now that I have something working, I&amp;#039;ve discovered that Marco is working to add Kindle support to Instapaper.)&lt;/p&gt;
  2874. &lt;p&gt;Right now, the service lets you generate an account id by visiting &lt;a href=&quot;; target=&quot;_blank&quot;&gt;;/a&gt;. Once you&amp;#039;ve done that, you&amp;#039;ll see a .mobi you can download to your Kindle (either OTA or by downloading it to your desktop and copying it across) and a bookmarklet you can use to save webpages to a personal library for later download to the Kindle.&lt;/p&gt;
  2875. &lt;p&gt;Once you have the .mobi on your Kindle, just pop it open and click the link to open up your library.&amp;#160; Click to download any of the content you&amp;#039;ve saved for easy offline reading.&lt;/p&gt;
  2876. &lt;p&gt;Right now, I&amp;#039;m not doing _anything_ to make the web pages you download more readable. Instapaper is a good deal cleverer.&amp;#160; But now I can click a button in my bookmark bar and read a copy on my Kindle later.&lt;/p&gt;
  2877. &lt;p&gt;The next set of features for this toy are probably: &lt;/p&gt;
  2878. &lt;ul&gt;
  2879. &lt;li&gt;Improved HTML transcoding&lt;/li&gt;
  2880. &lt;li&gt;One-click download of all new content to Kindle&lt;/li&gt;
  2881. &lt;li&gt;Ability to delete articles from your library&lt;/li&gt;
  2882. &lt;li&gt;Support for additional content-types in your library (starting with .ePub)&lt;/li&gt;
  2883. &lt;/ul&gt;
  2884. &lt;p&gt;While I&amp;#039;ve been messing around, I&amp;#039;ve learned some interestingish things about the Kindle 2, but this post has grown long enough. I&amp;#039;ll post those seperately.&lt;/p&gt;
  2885. </content>
  2886. </entry>
  2887. <entry>
  2888. <title>Kindle owners?</title>
  2889. <link href=""/>
  2890. <updated>2009-03-02T21:45:00Z</updated>
  2891. <id></id>
  2892. <content type="html">&lt;p&gt;Are you a Kindle owner? Do you have any interest in reading ePub books on your Kindle?&lt;br&gt;
  2893. Ping me.&lt;/p&gt;
  2894. &lt;p&gt;(Update made friends only because I&#39;m not posting the URL publicly)&lt;/p&gt;
  2895. </content>
  2896. </entry>
  2897. <entry>
  2898. <title>Down to 82 deps.</title>
  2899. <link href=""/>
  2900. <updated>2009-02-22T07:38:31Z</updated>
  2901. <id></id>
  2902. <content type="html">&lt;p&gt;&lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Sd-deps&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e20111688e6e97970c image-full&quot; src=&quot;; title=&quot;Sd-deps&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  2903. </content>
  2904. </entry>
  2905. <entry>
  2906. <title>An hour of hacking later, SD&#39;s down 22% of its recursive dependencies</title>
  2907. <link href=""/>
  2908. <updated>2009-02-20T06:41:34Z</updated>
  2909. <id></id>
  2910. <content type="html">&lt;p&gt;&lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Swdeps&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e2011278fd867128a4 image-full&quot; src=&quot;; title=&quot;Swdeps&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  2911. </content>
  2912. </entry>
  2913. <entry>
  2914. <title>Dependency Discovery and Management</title>
  2915. <link href=""/>
  2916. <updated>2009-02-19T23:53:08Z</updated>
  2917. <id></id>
  2918. <content type="html">&lt;p&gt;One of the more common complaints about deploying software written in Perl is the occasionally tangled nest of dependencies one must install from CPAN. Given the complexity of the system and the incredibly tenuous level of collaboration between various CPAN module authors, the system works astonishingly well.&lt;/p&gt;
  2919. &lt;p&gt;
  2920. &lt;/p&gt;&lt;div&gt;That being said, I want to be able to ship software to clients and other users without worrying about an author uploading a new, untested version of a module next week or a user having to recurse through dependencies 10 deep to be able to get my software installed.&lt;/div&gt;
  2921. &lt;p&gt;
  2922. &lt;/p&gt;&lt;div&gt;I really want to be able to ship one big tarball with a single install command which I know will do the right thing. &amp;#160;To that end, we&amp;#039;ve built &lt;a href=&quot;; target=&quot;_blank&quot;&gt;Shipwright&lt;/a&gt;. &amp;#160;I&amp;#039;ve talked about Shipwright before, but I&amp;#039;ve spent a big chunk of the past week working with &lt;a href=&quot;; target=&quot;_blank&quot;&gt;Sunnavy&lt;/a&gt; to smooth out many rough edges and to deal with all sorts of fun edge and corner cases in the code we use to ensure isolated, reproducible builds.&lt;/div&gt;
  2923. &lt;p&gt;
  2924. &lt;/p&gt;&lt;div&gt;Once you untangle the dependency graph, you&amp;#039;ll discover &lt;a href=&quot;; target=&quot;_blank&quot;&gt;SD&lt;/a&gt; currently has 123 dependencies which weren&amp;#039;t core in Perl 5.8.5. They clock in as 8 MB of gzipped distribution files including source code, tests and documentation. &amp;#160;Shipwright knows &lt;span class=&quot;at-xid-6a00d83456074b69e201116887bdbc970c&quot;&gt;&lt;a href=&quot;;&gt;&lt;span class=&quot;at-xid-6a00d83456074b69e201116887bf6d970c&quot;&gt;the exact order&lt;/span&gt;&lt;/a&gt;&amp;#160;they need to be installed in, how to build them and how to wrap them so that the compiled package can be installed in any directory the user wants. &amp;#160;The Shipwright &amp;quot;vessel&amp;quot; is built from a script&amp;#160;&lt;a href=&quot;;&gt;&lt;span class=&quot;at-xid-6a00d83456074b69e2011278fcb92d28a4&quot;&gt;a script&lt;/span&gt;&lt;/a&gt;&amp;#160;on OSX and builds and passes all of SD&amp;#039;s tests, as well as the tests for each of those 123 dependencies on an older version on Debian Linux.&amp;#160;&lt;/span&gt;&lt;/div&gt;
  2925. &lt;p&gt;
  2926. &lt;/p&gt;&lt;div&gt;123 dependencies is too many, even if it&amp;#039;s relatively straight forward to install them with a single command. Over the past few days, I&amp;#039;ve poked at the vessel&amp;#039;s order files to try to see what I might be able to pare away with a bit of coding or tweaking. &amp;#160;It...wasn&amp;#039;t easy or pleasant work. I made some progress, but only because I know far too much about many of the libraries we depend on and made some good guesses.&lt;/div&gt;
  2927. &lt;p&gt;
  2928. &lt;/p&gt;&lt;div&gt;I spent a bit of this afternoon hacking up Shipwright to output a graph of all dependencies in a format that GraphViz understands. Now I have pretty pictures.&lt;/div&gt;
  2929. &lt;p&gt;
  2930. &lt;/p&gt;&lt;div&gt;&lt;a href=&quot;; style=&quot;display:inline;&quot;&gt;&lt;img alt=&quot;Swdeps&quot; border=&quot;0&quot; class=&quot;at-xid-6a00d83456074b69e201116887bcc5970c image-full &quot; src=&quot;; title=&quot;Swdeps&quot;&gt;&lt;/a&gt;&lt;br&gt;
  2931. &lt;/div&gt;
  2932. &lt;p&gt;
  2933. &lt;/p&gt;&lt;div&gt;I now understand SD&amp;#039;s dependency tree much better and have some good ideas about how to dramatically reduce its dependency graph.&lt;/div&gt;
  2934. &lt;p&gt;
  2935. &lt;/p&gt;&lt;div&gt;Just for kicks, I ran Shipwright against &lt;a href=&quot;;&gt;MojoMojo&lt;/a&gt;. The graph is &lt;span class=&quot;at-xid-6a00d83456074b69e201116887c368970c&quot;&gt;&lt;a href=&quot;;&gt;a bit bigger&lt;/a&gt;. ;)&lt;/span&gt;&lt;/div&gt;
  2936. </content>
  2937. </entry>
  2938. <entry>
  2939. <title>Rantings about The Cloud</title>
  2940. <link href=""/>
  2941. <updated>2009-01-30T02:02:57Z</updated>
  2942. <id></id>
  2943. <content type="html">&lt;p&gt;&lt;em&gt;I ran into &lt;a href=&quot;;&gt;Nat&lt;/a&gt; on my way to OSCON this summer and he asked me what was new and exciting in my world, which gave me the perfect opening for my rant about why cloud-hosted services are essentially modern sharecropping.&lt;br&gt;
  2944. I ended up typing up a copy of my rantings for him, but never got around to publishing it. (If you&#39;d rather listen to me rant than read me rant, &lt;a href=&quot;;&gt; has links to slides and a video of roughly the same material&lt;/a&gt;.&lt;br&gt;
  2945. &lt;/em&gt;&lt;br&gt;
  2946. Social computing is a good thing. Being able to share data easily has led to astounding advances in what we all think of as the web over the past few years. It&#39;s unlikely that I&#39;d need to tell anyone in the greater O&#39;Reilly Media sphere about all the cool stuff Web 2.0 has brought with it. What&#39;s been worrying me is how the current generation of Internet technology has increasingly centralized control of just about everything into very few hands. What we&#39;ve seen is essentially a return to a sharecropping model where users neither own their tools nor the computers those tools run on.&lt;br&gt;
  2947. Back in the &quot;bad old days,&quot; access to computing resources was tightly controlled. A small cadre of acolytes made decisions about who could use computing resources, which programs could be run and how much computing time a given user had access to. If a user were particularly unlucky, the entire system would be managed by an outside provider who took care of all the upgrades, whether a user wanted them or not.&lt;br&gt;
  2948. In the 1980s, things started to get better. Desktop computers meant that users could make their own decisions about what software they used, when they upgraded it, how carefully they protected their data and so on. As the open source ecosystem matured, things got even rosier. Users gained the freedom to fix their own bugs, add their own features. Not many people took advantage of that freedom directly, but having it at all gave users more flexibility and control.&lt;br&gt;
  2949. We&#39;ve stepped back into the mainframe era. Users are encouraged to use hosted services for even the most sensitive of tasks with very little control over what actually happens to their data once the providers get ahold of it. It&#39;s not unheard of for a provider to start charging for access, change or remove features, stop accepting new signups or even sell out their users to the secret police. And users have no recourse. Open APIs are one of the scarier forms of seduction. APIs give users nominal access to their data without actually giving them a way to make use of that data. An API isn&#39;t going to help users unless they actually have applications which can use the data and provide the highly networked features the users have grown accustomed to.&lt;br&gt;
  2950. For the past couple months [Since April 2008], I&#39;ve been working on a peer-to-peer database called Prophet. It&#39;s designed to allow &quot;offline&quot; replication of databases between people who want or need to share data. There don&#39;t need to be any servers, though you can share databases over HTTP as easily as over sneakernet. A user can publish all the changes he&#39;s made to a database and his peers can choose if and when to incorporate his updates.&lt;br&gt;
  2951. The first app we&#39;ve built is a peer-to-peer bug tracker which can sync to RT and Hiveminder (and shortly to trac and google code). You can find out more about SD and Prophet at &lt;a href=&quot;;&gt;;/a&gt;&lt;br&gt;
  2952. &lt;em&gt;I&#39;ll be posting more about SD and Prophet in the nearish future.&lt;/em&gt;&lt;/p&gt;
  2953. </content>
  2954. </entry>
  2955. <entry>
  2956. <title>First Post</title>
  2957. <link href=""/>
  2958. <updated>2009-01-29T18:22:47Z</updated>
  2959. <id></id>
  2960. <content type="html">&lt;p&gt;Right then. Maybe if I try using a local blog-posting client, rather than using a textarea on a web page, I&#39;ll have better luck at actually writing a blog.&lt;br&gt;
  2961. Don&#39;t count on it, though.&lt;br&gt;
  2962. -jesse&lt;/p&gt;
  2963. </content>
  2964. </entry>
  2965. <entry>
  2966. <title>If LJ goes under...</title>
  2967. <link href=""/>
  2968. <updated>2009-01-06T22:19:00Z</updated>
  2969. <id></id>
  2970. <content type="html">&lt;p&gt;I will be more productive.&lt;/p&gt;
  2971. </content>
  2972. </entry>
  2973. <entry>
  2974. <title>2008 Travel</title>
  2975. <link href=""/>
  2976. <updated>2008-12-31T09:01:00Z</updated>
  2977. <id></id>
  2978. <content type="html">&lt;p&gt;&lt;a href=&quot;,bos-sfo-ord-bos,bos-iad-bos%0D%0A&amp;amp;RANGE=&amp;amp;PATH-COLOR=red&amp;amp;PATH-UNITS=mi&amp;amp;PATH-MINIMUM=&amp;amp;MARKER=1&amp;amp;SPEED-GROUND=&amp;amp;SPEED-UNITS=kts&amp;amp;RANGE-STYLE=best&amp;amp;RANGE-COLOR=navy&amp;amp;MAP-STYLE=&amp;amp;MAP-CENTER=OPO&quot;&gt;&lt;br&gt;
  2979. &lt;img src=&quot;,bos-sfo-ord-bos,bos-ord-day-ord-bos,bos-ord-iah-dfw-bos,bos-lax-hnl-dfw-bos,bos-lhr-ams-lhr-bos,bos-jfk-nrt-tpe-nrt-jfk-bos,bos-dfw-nrt-icn-hkg-lhr-ist-bud-fra-lhr-bos,bos-dfw-pdx-dfw-bos,bos-lhr-cph-lhr-bos,bos-lax-ord-bos,bos-mia-mex-mia-bos,bos-lhr-cph-lhr-bos,bos-sfo-bos,bos-jfk-nrt-pek-nrt-ord-bos,bos-lhr-mad-lhr-bos,bos-sfo-ord-bos,bos-iad-bos&amp;amp;MAP-CENTER=OPO&amp;amp;PATH-COLOR=red&amp;amp;MARKER=1&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  2980. &lt;p&gt;As currently planned: 140657 miles. Updated 12/12/08.&lt;/p&gt;
  2981. </content>
  2982. </entry>
  2983. <entry>
  2984. <title>K-9 - An android mutt</title>
  2985. <link href=""/>
  2986. <updated>2008-10-28T10:03:00Z</updated>
  2987. <id></id>
  2988. <content type="html">&lt;p&gt;I swore to myself that I wouldn&#39;t get a T-Mobile G1.  That..didn&#39;t work so well.  I picked mine up after lunch on release day.&lt;/p&gt;
  2989. &lt;p&gt;I knew I wasn&#39;t going to be happy with the stock mail client, but I had no idea how....not ready it was.&lt;/p&gt;
  2990. &lt;p&gt;The total dealbreaker for me was that it didn&#39;t have keybindings for simple things like delete. &lt;/p&gt;
  2991. &lt;p&gt;&quot;No problem. I&#39;ll just build a patched copy and submit the changes upstream,&quot; I thought.  So, I dusted off my Java, hauled down the SDK and the source for the core Email application.  Once I got it to build, it was really only about 15 minutes of fiddling around until I could reliably crash the application on the emulator by hitting the delete key.  5 more minutes and I had what I wanted. &lt;/p&gt;
  2992. &lt;p&gt;...and then I discovered that the Email application doesn&#39;t yet know how to propagate message deletion back to an IMAP server.&lt;/p&gt;
  2993. &lt;p&gt;15 more minutes of hacking and that, too, was sorted out.&lt;/p&gt;
  2994. &lt;p&gt;The moment of truth arrived. I tried to install it on my phone. &lt;/p&gt;
  2995. &lt;p&gt;No go.  &lt;/p&gt;
  2996. &lt;p&gt;It turns out you can&#39;t replace system applications.&lt;/p&gt;
  2997. &lt;p&gt;So, I did what any self-respecting hacker would. &lt;a href=&quot;; target=&quot;_blank&quot;&gt;I complained about it on twitter&lt;/a&gt;....and then I registered for the Android Marketplace.  It took 5 minutes and cost $25.&lt;/p&gt;
  2998. &lt;p&gt;I set up a google code project, checked in the &#39;Email&#39; app&#39;s original source code and started in with a regex-shaped chainsaw.  When I was done &lt;a href=&quot;;&gt;K-9 was born&lt;/a&gt;. &lt;/p&gt;
  2999. &lt;p&gt;While I hope to eventually get some fixes contributed back to the core Android &#39;Email&#39; app, I want to get a bit of active development going on a more usable mail application &lt;i&gt;right now&lt;/i&gt;.  And yeah, there&#39;s a bit of me that&#39;s curious about how the community is going to handle forked bits of the core Android platform.  If you&#39;d like a commit bit, just ask.&lt;/p&gt;
  3000. &lt;p&gt;Right now, K-9 has reasonable keybindings for message lists and individual messages as well as the delete fixes I mentioned. I&#39;ve released 3 versions in the span of 6 hours.  It&#39;s been downloaded by about 200 people.&lt;/p&gt;
  3001. &lt;p&gt;Tomorrow, I expect to add a setting to let me set an always-Bcc address....unless one of you beat me to it.&lt;/p&gt;
  3002. </content>
  3003. </entry>
  3004. <entry>
  3005. <title>San Francisco People - Dinner Thursday or Friday?</title>
  3006. <link href=""/>
  3007. <updated>2008-10-23T00:32:00Z</updated>
  3008. <id></id>
  3009. <content type="html">&lt;p&gt;I&#39;m in SF for work on Friday. I&#39;d love to see folks for dinner on Thursday and/or Friday night.&lt;/p&gt;
  3010. &lt;p&gt;If you&#39;re free, drop me a line and we&#39;ll figure out plans.&lt;/p&gt;
  3011. </content>
  3012. </entry>
  3013. <entry>
  3014. <title>London, Copenhagen, Lund</title>
  3015. <link href=""/>
  3016. <updated>2008-10-08T22:24:00Z</updated>
  3017. <id></id>
  3018. <content type="html">&lt;p&gt;If you are in London, we should have breakfast on Monday. (And, possibly, you should let me sleep on your spare bed Sunday night)&lt;/p&gt;
  3019. &lt;p&gt;If you are in Copenhagen, we should have a beer at the Globe on Monday evening.&lt;/p&gt;
  3020. &lt;p&gt;If you are in Lund, Sweden, I&#39;ll be there next tuesday, wednesday and thursday. We should hang out.&lt;/p&gt;
  3021. </content>
  3022. </entry>
  3023. <entry>
  3024. <title>This is CNN</title>
  3025. <link href=""/>
  3026. <updated>2008-09-15T20:32:00Z</updated>
  3027. <id></id>
  3028. <content type="html">&lt;p&gt;&lt;a href=&quot;;&gt;&lt;img src=&quot;; width=&quot;193&quot; height=&quot;240&quot; border=&quot;0&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  3029. &lt;p&gt;So. 4 counts Palin. 4 counts Ike. 4 counts Lehman. 2 counts Bush. 1 count telephone dog. 1 count dancing stormtrooper. (Not shown: 1 count OJ. &lt;small&gt;Ok. one count armed robbery&lt;/small&gt;).&lt;/p&gt;
  3030. &lt;p&gt;I&#39;d like my news cycle back. Perhaps even some good news.&lt;/p&gt;
  3031. </content>
  3032. </entry>
  3033. <entry>
  3034. <title>European Travel Early Warning System</title>
  3035. <link href=""/>
  3036. <updated>2008-09-15T08:26:00Z</updated>
  3037. <id></id>
  3038. <content type="html">&lt;p&gt;So, I need to be in Madrid on 24 and 25 November.&lt;/p&gt;
  3039. &lt;p&gt;It appears that it&#39;s a good deal cheaper and more comfortable for me to leave the US on Friday, 21 November.&lt;/p&gt;
  3040. &lt;p&gt;My time on the 22nd and 23rd is entirely unscheduled at the moment.&lt;/p&gt;
  3041. &lt;p&gt;It appears that it would cost about the same to:&lt;/p&gt;
  3042. &lt;p&gt;Spend two nights in the UK&lt;br&gt;
  3043. Spend a night in the UK and an night day in Madrid&lt;br&gt;
  3044. Spend a night in the UK and a night in Lisbon&lt;br&gt;
  3045. Spend a night in the UK and a night in Barcelona &lt;/p&gt;
  3046. &lt;p&gt;...and probably cost about the same to spend a night elsewhere in Europe on my way to Madrid.&lt;/p&gt;
  3047. &lt;p&gt;So. Where shall I go?&lt;/p&gt;
  3048. </content>
  3049. </entry>
  3050. <entry>
  3051. <title>Boston - Saturday - Birthday Dimsum</title>
  3052. <link href=""/>
  3053. <updated>2008-06-19T05:31:00Z</updated>
  3054. <id></id>
  3055. <content type="html">&lt;p&gt;This Saturday (June 21) is my birthday.  I&#39;m turning 32. Kaia and I are getting on an airplane at 6am on Sunday, so I can&#39;t quite quite pull off a proper party on Saturday night.  Instead, please join me for &lt;b&gt;Dim Sum&lt;/b&gt; at &lt;b&gt;China Pearl&lt;/b&gt; at &lt;b&gt;11:30 AM&lt;/b&gt; on &lt;b&gt;Saturday&lt;/b&gt;.&lt;/p&gt;
  3056. &lt;p&gt;There&#39;s no need to bring presents or anything and I&#39;d rather you show up than not, but if you can RSVP by Friday morning, I can do my best to make sure we don&#39;t have to wait for a table.&lt;/p&gt;
  3057. &lt;p&gt;See you Saturday!&lt;/p&gt;
  3058. </content>
  3059. </entry>
  3060. <entry>
  3061. <title>I&#39;m voting republican because...</title>
  3062. <link href=""/>
  3063. <updated>2008-06-11T21:35:00Z</updated>
  3064. <id></id>
  3065. <content type="html">
  3066. </content>
  3067. </entry>
  3068. <entry>
  3069. <title>Web 2.0 is Sharecropping</title>
  3070. <link href=""/>
  3071. <updated>2008-05-30T05:33:00Z</updated>
  3072. <id></id>
  3073. <content type="html">&lt;p&gt;I gave a 5 minute talk at Ignite Boston this evening. The basic premise, for those of you who don&#39;t do flash or don&#39;t feel like clicking through is this: &lt;b&gt;If you don&#39;t own your tools, you&#39;re going to be in a whole mess of trouble.&lt;/b&gt; Maybe not today. Maybe not tomorrow. But one day, you&#39;re going to be very, very unhappy with the fact that you&#39;ve given up your right to software self-determination.&lt;/p&gt;
  3074. &lt;div id=&quot;__ss_436358&quot; style=&quot;width:425px;text-align:left;&quot;&gt;
  3075. &lt;div style=&quot;font-size:11px;font-family:tahoma, arial;height:26px;padding-top:2px;&quot;&gt;&lt;a href=&quot;;&gt;&lt;img alt=&quot;SlideShare&quot; style=&quot;border:0 none;margin-bottom:-5px;&quot; src=&quot;;&gt;&lt;/a&gt; | &lt;a title=&quot;View Web 2.0 is Sharecropping on SlideShare&quot; href=&quot;;&gt;View&lt;/a&gt;&lt;/div&gt;
  3076. &lt;/div&gt;
  3077. </content>
  3078. </entry>
  3079. <entry>
  3080. <title>An untitled post</title>
  3081. <link href=""/>
  3082. <updated>2008-05-08T01:35:00Z</updated>
  3083. <id></id>
  3084. <content type="html">&lt;p&gt;I&#39;m looking to get a quick read of what folks are using for bug tracking. I&#39;m NOT looking for advocacy and this has nothing to do with getting anybody to &#39;switch&#39; bug trackers.&lt;/p&gt;
  3085. </content>
  3086. </entry>
  3087. <entry>
  3088. <title>My t-shirt runs your company.</title>
  3089. <link href=""/>
  3090. <updated>2008-04-24T15:01:00Z</updated>
  3091. <id></id>
  3092. <content type="html">&lt;p&gt;See photo: &lt;a href=&quot;;&gt;;/a&gt;.&lt;/p&gt;
  3093. </content>
  3094. </entry>
  3095. <entry>
  3096. <title>Earth Day!</title>
  3097. <link href=""/>
  3098. <updated>2008-04-23T04:35:00Z</updated>
  3099. <id></id>
  3100. <content type="html">&lt;p&gt;Today is Earth Day. I did my part by flying from Amsterdam to Boston, burning approximately 1 ton of CO2.&lt;/p&gt;
  3101. </content>
  3102. </entry>
  3103. <entry>
  3104. <title>London, Amsterdam: Breakfast?</title>
  3105. <link href=""/>
  3106. <updated>2008-04-16T06:02:00Z</updated>
  3107. <id></id>
  3108. <content type="html">&lt;p&gt;I&#39;m going to be in London for breakfast on Friday. If you&#39;re free, ping me in comments and I&#39;ll shoot you mail with details.&lt;/p&gt;
  3109. &lt;p&gt;I&#39;m going to be in Amsterdam for the weekend. If you&#39;re interested in Dim Sum on Sunday, leave me a comment and I&#39;ll make sure to tell you what the plan is. &lt;/p&gt;
  3110. &lt;p&gt;If you&#39;re in London or Amsterdam (or will be this weekend) and feel like meeting up, but neither of these quite works, tell me and we&#39;ll figure something else out.&lt;/p&gt;
  3111. </content>
  3112. </entry>
  3113. <entry>
  3114. <title>Spring break</title>
  3115. <link href=""/>
  3116. <updated>2008-04-06T12:03:00Z</updated>
  3117. <id></id>
  3118. <content type="html">&lt;p&gt;CL and I went to Hawaii for spring break. We spent 10 hours a day sitting in a cafe coding, averaging about one thousand lines of code per day for a week. It was, without a doubt, the best spring break ever.  And I&#39;m bringing home the best souvenir ever:  a peer-to-peer replicated database with near-magical conflict resolution.&lt;/p&gt;
  3119. </content>
  3120. </entry>
  3121. <entry>
  3122. <title>pseudotweet</title>
  3123. <link href=""/>
  3124. <updated>2008-04-06T11:59:00Z</updated>
  3125. <id></id>
  3126. <content type="html">&lt;p&gt;I can use livejournal as if it were Twitter!&lt;/p&gt;
  3127. </content>
  3128. </entry>
  3129. <entry>
  3130. <title>ENOTWITTER</title>
  3131. <link href=""/>
  3132. <updated>2008-04-06T11:58:00Z</updated>
  3133. <id></id>
  3134. <content type="html">&lt;p&gt;Oh no! Twitter is down. However will I post my one-line life updates?&lt;/p&gt;
  3135. </content>
  3136. </entry>
  3137. <entry>
  3138. <title>ISO Office Manager</title>
  3139. <link href=""/>
  3140. <updated>2008-03-10T23:49:00Z</updated>
  3141. <id></id>
  3142. <content type="html">&lt;p&gt;&lt;font size=&quot;4&quot;&gt;&lt;font size=&quot;2&quot;&gt;(This goes to craigslist tomorrow, but I&#39;d rather end up with a referral from a friend than with a total stranger)&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;
  3143. &lt;p&gt;&lt;br&gt;ABOUT US&lt;/p&gt;
  3144. &lt;p&gt;We&#39;re a small software company located in Somerville, Mass. Our primary product is RT (Request Tracker), an open-source issue tracking system.&amp;nbsp; It&#39;s used by thousands of organizations around the world.&amp;nbsp; We also make a distributed version control system called SVK and a web-based todo list system called Hiveminder ( We make software and sell support, training, consulting and custom development. &lt;/p&gt;
  3145. &lt;p&gt;We&#39;ve been around since fall of 2001 and are entirely bootstrap funded. Things just keep getting busier.&lt;/p&gt;
  3146. &lt;p&gt;&lt;font size=&quot;4&quot;&gt;ABOUT THE JOB&lt;/font&gt;&lt;/p&gt;
  3147. &lt;p&gt;Our beloved office manager is leaving us this spring to pursue a career in massage therapy. We&#39;re looking for a bright, talented individual to help keep us organized. It&#39;s very important that you be able to keep on top of both long-term projects and day-to-day details without someone looking over your shoulder. On the other hand, you need to know when to ask for help or direction.&lt;/p&gt;
  3148. &lt;p&gt;You&#39;ll report directly to the corporate boss-type-person. As his assistant, you&#39;ll be responsible for making sure that things get dealt with - everything from making sure the office stays clean and well stocked with copy-paper and free snacks to doing payroll.&lt;/p&gt;
  3149. &lt;p&gt;Day-to-day, you&#39;ll be dealing with staff (not all of whom are local or even in the country), vendors and customers. You need excellent written and verbal communications skills (for dealing with customers) even if most of the time you&#39;re slumming with the rest of us who aren&#39;t so hot with our capitalization and punctuation.&lt;/p&gt;
  3150. &lt;p&gt;We&#39;re a small company and the boss is typically overextended. He travels a fair bit and when he&#39;s not traveling, he can be pretty busy. You should be comfortable working independently, prioritizing tasks on your own, and juggling tasks &amp;amp; projects. We know that we&#39;re not going to find an office manager who reads minds, but if you can fake it well enough to make sure that things get done before they become crises, we&#39;ll be thrilled (that means you should be proactive).&lt;/p&gt;
  3151. &lt;p&gt;You need to be comfortable using a computer running Mac OS X or some variant of Unix. You should know how to use an email client, a web browser, a spreadsheet, a word processor and Quickbooks.&amp;nbsp;&amp;nbsp; We do just about everything online and on the phone. You should be comfortable using email and instant messaging systems to collaborate and get work done.&lt;/p&gt;
  3152. &lt;p&gt;You shouldn&#39;t be frustrated by computers or computer geeks. Just about everyone here is a computer geek (though we all have other interests). You don&#39;t need to know how to program in Perl or have a shelf full of O&#39;Reilly books, but it&#39;s helpful if you already know that Perl is a programming language and that O&#39;Reilly books are the ones with animals on the cover.&lt;/p&gt;
  3153. &lt;p&gt;Most of the time, you&#39;ll be working from our office in lovely Davis Sq, Somerville, though you&#39;ll end up swinging by the boss&#39;s house in Porter once or twice a week to deal with bills and other minor home-office arcana.&lt;/p&gt;
  3154. &lt;p&gt;&lt;font size=&quot;4&quot;&gt;RESPONSIBILITIES&lt;/font&gt;&lt;/p&gt;
  3155. &lt;p&gt;Below, you&#39;ll find a rough breakdown of what the job entails. This breakdown is over the course of the year, not what you&#39;ll have to do every week. Being a small company, things do shift around and new things will come up, but this should be a pretty good snapshot.&lt;/p&gt;
  3156. &lt;p&gt;&lt;b&gt;Financial Management - about a third of your time&lt;/b&gt;&lt;/p&gt;
  3157. &lt;p&gt;* Accounts Payable - pay vendor bills&lt;br&gt;* Accounts Receivable - invoice customers; process incoming payments&lt;br&gt;* Payroll – submit payroll to specialists &amp;amp; pay independent contractors&lt;br&gt;* Bank account reconciliation&lt;br&gt;* Maintenance of records&lt;br&gt;* Tax preparation for accountant&lt;/p&gt;
  3158. &lt;p&gt;&lt;b&gt;Office Management - maybe a third of your time&lt;/b&gt;&lt;/p&gt;
  3159. &lt;p&gt;* Pick up mail from post office box in Davis Sq.&lt;br&gt;* Open and organize mail&lt;br&gt;* Correspondence - email, fax, and letters&lt;br&gt;* Mail/ship correspondence &amp;amp; packages&lt;br&gt;* Order office/computer supplies&lt;br&gt;* Keep Office and Bathroom Clean&lt;br&gt;* Stock Office with drinks, snacks and necessities&lt;br&gt;* Oversee all non-sales contracts&lt;/p&gt;
  3160. &lt;p&gt;&lt;b&gt;Special Projects - a small bit&lt;/b&gt;&lt;/p&gt;
  3161. &lt;p&gt;* Research&lt;br&gt;* Setting up new employees&lt;br&gt;* Assist the Sales Team&lt;/p&gt;
  3162. &lt;p&gt;&lt;b&gt;Event Planning - less than a quarter of your time&lt;/b&gt;&lt;/p&gt;
  3163. &lt;p&gt;* Research and select hotels for training sessions around the world&lt;br&gt;* Coordinate with hotels&lt;br&gt;* Communicate with attendees&lt;br&gt;* Invoice attendees, track payments, issue receipts&lt;br&gt;* Order books&lt;/p&gt;
  3164. &lt;p&gt;&lt;b&gt;Household Management - little bits here and there&lt;/b&gt;&lt;/p&gt;
  3165. &lt;p&gt;* Open and organize mail&lt;br&gt;* Pay bills&lt;br&gt;* Collect rent &lt;/p&gt;
  3166. &lt;p&gt;&lt;b&gt;Other - as needed&lt;/b&gt;&lt;/p&gt;
  3167. &lt;p&gt;* Arrange travel for the boss-type person&lt;br&gt;* Manage relationships with independent contractors&lt;br&gt;* Deal with things that need dealing with&lt;/p&gt;
  3168. &lt;p&gt;&lt;font size=&quot;4&quot;&gt;BENEFITS AND COMPENSATION&lt;/font&gt;&lt;/p&gt;
  3169. &lt;p&gt;The position is full-time.&lt;br&gt;Salary: $30,000 - $35,000 per year, depending on experience&lt;br&gt;Health, dental from day 1. &lt;br&gt;Fairly liberal vacation policy.&lt;br&gt;MacBook. Work cellphone.&lt;br&gt;Flexible hours &amp;amp; a little bit of telecommuting.&lt;br&gt;Relaxed office atmosphere - No dress code. &lt;/p&gt;
  3170. &lt;p&gt;&lt;font size=&quot;4&quot;&gt;HOW TO APPLY FOR THE JOB&lt;/font&gt;&lt;/p&gt;
  3171. &lt;p&gt;Please send a cover letter and resume to:;/p&gt;
  3172. &lt;p&gt;Real people will read your cover letter. We&#39;d love to know a bit about who you are, where you went to college, where you&#39;ve worked and what sorts of things you&#39;re interested in, rather than just that you&#39;ve seen our job posting and are sure that you&#39;d be a fine match for the position. If you have a website or blog you&#39;d like to share with us, please send a link.&lt;/p&gt;
  3173. &lt;p&gt;While we can probably read any resume format you can throw at us, we&#39;d appreciate it a lot if you can send it as plain text or HTML. If you can&#39;t do that, PDF. If you can&#39;t generate a PDF, Word is okay.&lt;/p&gt;
  3174. </content>
  3175. </entry>
  3176. <entry>
  3177. <title>Perlish goodness</title>
  3178. <link href=""/>
  3179. <updated>2008-02-08T10:14:00Z</updated>
  3180. <id></id>
  3181. <content type="html">&lt;p&gt;We have a new build and distribution tool called &#39;Shipwright.&#39; It basically takes the pain out of distributing perl applications with all their dependencies. (It also lets you version the dependencies, build relocatable binary distributions with one command and actually imports packages and their dependencies into version control with a single command).&lt;/p&gt;
  3182. &lt;p&gt;&lt;!--more So, this is what Hiveminder&amp;#039;s Shipwright repository looks like. It took me 3 commands to check all of these into version control:--&gt;&lt;/p&gt;
  3183. &lt;p&gt;So, this is what Hiveminder&amp;#039;s Shipwright repository looks like. It took me 3 commands to check all of these into version control&lt;/p&gt;
  3184. &lt;p&gt;AnyEvent/&lt;br&gt;
  3185. App-CLI/&lt;br&gt;
  3186. Archive-Tar/&lt;br&gt;
  3187. Array-Compare/&lt;br&gt;
  3188. BTDT/&lt;br&gt;
  3189. Bit-Vector/&lt;br&gt;
  3190. Business-CreditCard/&lt;br&gt;
  3191. Business-OnlinePayment/&lt;br&gt;
  3192. Business-OnlinePayment-AuthorizeNet/&lt;br&gt;
  3193. Business-OnlinePayment-AuthorizeNet-AIM-ErrorCodes/&lt;br&gt;
  3194. CGI-Cookie-Splitter/&lt;br&gt;
  3195. CGI-Simple/&lt;br&gt;
  3197. CSS-Squish/&lt;br&gt;
  3198. Cache-Cache/&lt;br&gt;
  3199. Cache-Simple-TimedExpiry/&lt;br&gt;
  3200. Calendar-Simple/&lt;br&gt;
  3201. Carp-Assert/&lt;br&gt;
  3202. Carp-Assert-More/&lt;br&gt;
  3203. Carp-Clan/&lt;br&gt;
  3204. Chatbot-Eliza/&lt;br&gt;
  3205. Class-Accessor/&lt;br&gt;
  3206. Class-Accessor-Chained/&lt;br&gt;
  3207. Class-Container/&lt;br&gt;
  3208. Class-Data-Inheritable/&lt;br&gt;
  3209. Class-Factory-Util/&lt;br&gt;
  3210. Class-InsideOut/&lt;br&gt;
  3211. Class-Inspector/&lt;br&gt;
  3212. Class-ReturnValue/&lt;br&gt;
  3213. Class-Singleton/&lt;br&gt;
  3214. Class-Trigger/&lt;br&gt;
  3215. Clone/&lt;br&gt;
  3216. Color-Calc/&lt;br&gt;
  3217. Color-Library/&lt;br&gt;
  3218. Compress-PPMd/&lt;br&gt;
  3219. Compress-Raw-Zlib/&lt;br&gt;
  3220. Compress-Zlib/&lt;br&gt;
  3221. Config-General/&lt;br&gt;
  3222. Coro/&lt;br&gt;
  3223. Crypt-Blowfish/&lt;br&gt;
  3224. Crypt-CBC/&lt;br&gt;
  3225. Crypt-Rijndael/&lt;br&gt;
  3226. DBD-Pg/&lt;br&gt;
  3227. DBD-SQLite/&lt;br&gt;
  3228. DBI/&lt;br&gt;
  3229. DBIx-DBSchema/&lt;br&gt;
  3230. DBM-Deep/&lt;br&gt;
  3231. Data-Denter/&lt;br&gt;
  3232. Data-ICal/&lt;br&gt;
  3233. Data-OptList/&lt;br&gt;
  3234. Data-Page/&lt;br&gt;
  3235. Data-Serializer/&lt;br&gt;
  3236. Data-Taxi/&lt;br&gt;
  3237. Data-UUID/&lt;br&gt;
  3238. Date-Calc/&lt;br&gt;
  3239. Date-Extract/&lt;br&gt;
  3240. Date-ICal/&lt;br&gt;
  3241. Date-Leapyear/&lt;br&gt;
  3242. Date-Manip/&lt;br&gt;
  3243. DateTime/&lt;br&gt;
  3244. DateTime-Format/&lt;br&gt;
  3245. DateTime-Format-Builder/&lt;br&gt;
  3246. DateTime-Format-Mail/&lt;br&gt;
  3247. DateTime-Format-Natural/&lt;br&gt;
  3248. DateTime-Format-Strptime/&lt;br&gt;
  3249. DateTime-Locale/&lt;br&gt;
  3250. DateTime-TimeZone/&lt;br&gt;
  3251. Devel-StackTrace/&lt;br&gt;
  3252. Devel-Symdump/&lt;br&gt;
  3253. Digest/&lt;br&gt;
  3254. Digest-SHA/&lt;br&gt;
  3255. EV/&lt;br&gt;
  3256. Email-Abstract/&lt;br&gt;
  3257. Email-Address/&lt;br&gt;
  3258. Email-Date-Format/&lt;br&gt;
  3259. Email-Folder/&lt;br&gt;
  3260. Email-FolderType/&lt;br&gt;
  3261. Email-LocalDelivery/&lt;br&gt;
  3262. Email-MIME/&lt;br&gt;
  3263. Email-MIME-Attachment-Stripper/&lt;br&gt;
  3264. Email-MIME-ContentType/&lt;br&gt;
  3265. Email-MIME-CreateHTML/&lt;br&gt;
  3266. Email-MIME-Creator/&lt;br&gt;
  3267. Email-MIME-Encodings/&lt;br&gt;
  3268. Email-MIME-Modifier/&lt;br&gt;
  3269. Email-MessageID/&lt;br&gt;
  3270. Email-Reply/&lt;br&gt;
  3271. Email-Send/&lt;br&gt;
  3272. Email-Simple/&lt;br&gt;
  3273. Email-Simple-Creator/&lt;br&gt;
  3274. Error/&lt;br&gt;
  3275. Event/&lt;br&gt;
  3276. Exception-Class/&lt;br&gt;
  3277. Exporter-Lite/&lt;br&gt;
  3278. ExtUtils-CBuilder/&lt;br&gt;
  3279. ExtUtils-Command/&lt;br&gt;
  3280. ExtUtils-MakeMaker/&lt;br&gt;
  3281. ExtUtils-ParseXS/&lt;br&gt;
  3282. File-Find-Rule/&lt;br&gt;
  3283. File-MMagic/&lt;br&gt;
  3284. File-Path-Expand/&lt;br&gt;
  3285. File-Policy/&lt;br&gt;
  3286. File-ShareDir/&lt;br&gt;
  3287. File-Slurp/&lt;br&gt;
  3288. FileHandle-Fmode/&lt;br&gt;
  3289. FreezeThaw/&lt;br&gt;
  3290. GD/&lt;br&gt;
  3291. Graphics-ColorNames/&lt;br&gt;
  3292. Graphics-ColorNames-WWW/&lt;br&gt;
  3293. HTML-Lint/&lt;br&gt;
  3294. HTML-Mason/&lt;br&gt;
  3295. HTML-Parser/&lt;br&gt;
  3296. HTML-Scrubber/&lt;br&gt;
  3297. HTML-TagCloud/&lt;br&gt;
  3298. HTML-Tagset/&lt;br&gt;
  3299. HTML-TokeParser-Simple/&lt;br&gt;
  3300. HTML-Truncate/&lt;br&gt;
  3301. HTTP-Server-Simple/&lt;br&gt;
  3302. HTTP-Server-Simple-Recorder/&lt;br&gt;
  3303. Hash-Merge/&lt;br&gt;
  3304. Hook-LexWrap/&lt;br&gt;
  3305. IO-AIO/&lt;br&gt;
  3306. IO-All/&lt;br&gt;
  3307. IO-Compress-Base/&lt;br&gt;
  3308. IO-Compress-Zlib/&lt;br&gt;
  3309. IO-Socket-SSL/&lt;br&gt;
  3310. IO-String/&lt;br&gt;
  3311. IO-Tee/&lt;br&gt;
  3312. IO-Zlib/&lt;br&gt;
  3313. IO-stringy/&lt;br&gt;
  3314. IPC/&lt;br&gt;
  3315. IPC-Cmd/&lt;br&gt;
  3316. IPC-PubSub/&lt;br&gt;
  3317. JSON/&lt;br&gt;
  3318. JSON-Any/&lt;br&gt;
  3319. Jifty/&lt;br&gt;
  3320. Jifty-DBI/&lt;br&gt;
  3321. Lingua-EN-Inflect/&lt;br&gt;
  3322. Lingua-EN-Numbers-Ordinate/&lt;br&gt;
  3323. List-MoreUtils/&lt;br&gt;
  3324. Locale-Maketext-Lexicon/&lt;br&gt;
  3325. Locale-Maketext-Simple/&lt;br&gt;
  3326. Log-Log4perl/&lt;br&gt;
  3327. Log-Trace/&lt;br&gt;
  3328. MIME-Types/&lt;br&gt;
  3329. Module-Build/&lt;br&gt;
  3330. Module-CoreList/&lt;br&gt;
  3331. Module-Load/&lt;br&gt;
  3332. Module-Load-Conditional/&lt;br&gt;
  3333. Module-Loaded/&lt;br&gt;
  3334. Module-Pluggable/&lt;br&gt;
  3335. Module-Refresh/&lt;br&gt;
  3336. Module-ScanDeps/&lt;br&gt;
  3337. Module-Signature/&lt;br&gt;
  3338. Net-IMAP-Server/&lt;br&gt;
  3339. Net-IMAP-Simple/&lt;br&gt;
  3340. Net-IMAP-Simple-SSL/&lt;br&gt;
  3341. Net-SSLeay/&lt;br&gt;
  3342. Net-Server/&lt;br&gt;
  3343. Net-Server-Coro/&lt;br&gt;
  3344. Net-Twitter/&lt;br&gt;
  3345. Number-Compare/&lt;br&gt;
  3346. Number-RecordLocator/&lt;br&gt;
  3347. Object-Declare/&lt;br&gt;
  3348. PHP-Serialization/&lt;br&gt;
  3349. PadWalker/&lt;br&gt;
  3350. Params-Check/&lt;br&gt;
  3351. Params-Util/&lt;br&gt;
  3352. Params-Validate/&lt;br&gt;
  3353. PathTools/&lt;br&gt;
  3354. Pod-Coverage/&lt;br&gt;
  3355. Pod-Escapes/&lt;br&gt;
  3356. Pod-Readme/&lt;br&gt;
  3357. Pod-Simple/&lt;br&gt;
  3358. Pod-Strip/&lt;br&gt;
  3359. Proc-ProcessTable/&lt;br&gt;
  3360. Regexp-Common/&lt;br&gt;
  3361. Regexp-Common-Email-Address/&lt;br&gt;
  3362. Return-Value/&lt;br&gt;
  3363. SQL-ReservedWords/&lt;br&gt;
  3364. Scalar-Defer/&lt;br&gt;
  3365. Spiffy/&lt;br&gt;
  3366. String-Koremutake/&lt;br&gt;
  3367. Sub-Exporter/&lt;br&gt;
  3368. Sub-Install/&lt;br&gt;
  3369. Sub-Override/&lt;br&gt;
  3370. Sub-Uplevel/&lt;br&gt;
  3371. Task-Weaken/&lt;br&gt;
  3372. Template-Declare/&lt;br&gt;
  3373. TermReadKey/&lt;br&gt;
  3374. Test-Assertions/&lt;br&gt;
  3375. Test-Base/&lt;br&gt;
  3376. Test-Deep/&lt;br&gt;
  3377. Test-Dependencies/&lt;br&gt;
  3378. Test-Distribution/&lt;br&gt;
  3379. Test-Exception/&lt;br&gt;
  3380. Test-HTTP-Server-Simple/&lt;br&gt;
  3381. Test-Log4perl/&lt;br&gt;
  3382. Test-LongString/&lt;br&gt;
  3383. Test-Manifest/&lt;br&gt;
  3384. Test-Mock-LWP/&lt;br&gt;
  3385. Test-MockObject/&lt;br&gt;
  3386. Test-MockTime/&lt;br&gt;
  3387. Test-NoWarnings/&lt;br&gt;
  3388. Test-Pod/&lt;br&gt;
  3389. Test-Pod-Coverage/&lt;br&gt;
  3390. Test-Portability-Files/&lt;br&gt;
  3391. Test-Simple/&lt;br&gt;
  3392. Test-Tester/&lt;br&gt;
  3393. Test-WWW-Mechanize/&lt;br&gt;
  3394. Test-WWW-Selenium/&lt;br&gt;
  3395. Test-Warn/&lt;br&gt;
  3396. Test-use-ok/&lt;br&gt;
  3397. Text-Autoformat/&lt;br&gt;
  3398. Text-CSV_XS/&lt;br&gt;
  3399. Text-FixEOL/&lt;br&gt;
  3400. Text-Glob/&lt;br&gt;
  3401. Text-Markdown/&lt;br&gt;
  3402. Text-Password-Pronounceable/&lt;br&gt;
  3403. Text-Quoted/&lt;br&gt;
  3404. Text-Reform/&lt;br&gt;
  3405. Text-Tags/&lt;br&gt;
  3406. Text-vFile-asData/&lt;br&gt;
  3407. Tie-IxHash/&lt;br&gt;
  3408. Tie-Sub/&lt;br&gt;
  3409. Time-Duration/&lt;br&gt;
  3410. Time-Piece/&lt;br&gt;
  3411. Time-modules/&lt;br&gt;
  3412. Tree-DAG_Node/&lt;br&gt;
  3413. UNIVERSAL-can/&lt;br&gt;
  3414. UNIVERSAL-isa/&lt;br&gt;
  3415. UNIVERSAL-require/&lt;br&gt;
  3416. URI/&lt;br&gt;
  3417. WWW-Mechanize/&lt;br&gt;
  3418. XML-Atom/&lt;br&gt;
  3419. XML-Dumper/&lt;br&gt;
  3420. XML-LibXML/&lt;br&gt;
  3421. XML-LibXML-Common/&lt;br&gt;
  3422. XML-NamespaceSupport/&lt;br&gt;
  3423. XML-Parser/&lt;br&gt;
  3424. XML-SAX/&lt;br&gt;
  3425. XML-Simple/&lt;br&gt;
  3426. XML-Writer/&lt;br&gt;
  3427. XML-XPath/&lt;br&gt;
  3428. YAML/&lt;br&gt;
  3429. YAML-Syck/&lt;br&gt;
  3430. libwww-perl/&lt;br&gt;
  3431. parent/&lt;br&gt;
  3432. podlators/&lt;br&gt;
  3433. rpm-build-perl/&lt;br&gt;
  3434. version/&lt;/p&gt;
  3435. &lt;p&gt;And this is the order they need to be built in: (It took 0  manual commands to work that out)&lt;br&gt;
  3436. ---&lt;br&gt;
  3437. - ExtUtils-MakeMaker&lt;br&gt;
  3438. - EV&lt;br&gt;
  3439. - AnyEvent&lt;br&gt;
  3440. - Event&lt;br&gt;
  3441. - IO-AIO&lt;br&gt;
  3442. - Coro&lt;br&gt;
  3443. - Net-Server&lt;br&gt;
  3444. - Net-Server-Coro&lt;br&gt;
  3445. - Tree-DAG_Node&lt;br&gt;
  3446. - Test-Simple&lt;br&gt;
  3447. - Module-Signature&lt;br&gt;
  3448. - Pod-Escapes&lt;br&gt;
  3449. - Pod-Simple&lt;br&gt;
  3450. - podlators&lt;br&gt;
  3451. - Regexp-Common&lt;br&gt;
  3452. - Test-Pod&lt;br&gt;
  3453. - Test-Portability-Files&lt;br&gt;
  3454. - Devel-Symdump&lt;br&gt;
  3455. - Pod-Coverage&lt;br&gt;
  3456. - Test-Pod-Coverage&lt;br&gt;
  3457. - Pod-Readme&lt;br&gt;
  3458. - version&lt;br&gt;
  3459. - ExtUtils-CBuilder&lt;br&gt;
  3460. - IO-Compress-Base&lt;br&gt;
  3461. - Compress-Raw-Zlib&lt;br&gt;
  3462. - IO-Compress-Zlib&lt;br&gt;
  3463. - Compress-Zlib&lt;br&gt;
  3464. - IO-Zlib&lt;br&gt;
  3465. - Archive-Tar&lt;br&gt;
  3466. - ExtUtils-ParseXS&lt;br&gt;
  3467. - Module-Build&lt;br&gt;
  3468. - Sub-Uplevel&lt;br&gt;
  3469. - Test-Exception&lt;br&gt;
  3470. - Array-Compare&lt;br&gt;
  3471. - Test-Warn&lt;br&gt;
  3472. - Net-SSLeay&lt;br&gt;
  3473. - IO-Socket-SSL&lt;br&gt;
  3474. - Email-MIME-ContentType&lt;br&gt;
  3475. - Class-Accessor&lt;br&gt;
  3476. - Email-Simple&lt;br&gt;
  3477. - Email-Address&lt;br&gt;
  3478. - Email-MIME-Encodings&lt;br&gt;
  3479. - MIME-Types&lt;br&gt;
  3480. - Email-MIME&lt;br&gt;
  3481. - Net-IMAP-Server&lt;br&gt;
  3482. - Params-Validate&lt;br&gt;
  3483. - DateTime-Locale&lt;br&gt;
  3484. - Class-Singleton&lt;br&gt;
  3485. - DateTime-TimeZone&lt;br&gt;
  3486. - DateTime&lt;br&gt;
  3487. - IO-stringy&lt;br&gt;
  3488. - Class-Trigger&lt;br&gt;
  3489. - Sub-Override&lt;br&gt;
  3490. - Object-Declare&lt;br&gt;
  3491. - Clone&lt;br&gt;
  3492. - Hash-Merge&lt;br&gt;
  3493. - Cache-Simple-TimedExpiry&lt;br&gt;
  3494. - UNIVERSAL-require&lt;br&gt;
  3495. - Lingua-EN-Inflect&lt;br&gt;
  3496. - DBI&lt;br&gt;
  3497. - DBD-SQLite&lt;br&gt;
  3498. - Exporter-Lite&lt;br&gt;
  3499. - Class-InsideOut&lt;br&gt;
  3500. - Scalar-Defer&lt;br&gt;
  3501. - Class-Accessor-Chained&lt;br&gt;
  3502. - Data-Page&lt;br&gt;
  3503. - Devel-StackTrace&lt;br&gt;
  3504. - Class-ReturnValue&lt;br&gt;
  3505. - YAML-Syck&lt;br&gt;
  3506. - Task-Weaken&lt;br&gt;
  3507. - Class-Factory-Util&lt;br&gt;
  3508. - DateTime-Format-Strptime&lt;br&gt;
  3509. - DateTime-Format-Builder&lt;br&gt;
  3510. - Module-CoreList&lt;br&gt;
  3511. - Text-Glob&lt;br&gt;
  3512. - Number-Compare&lt;br&gt;
  3513. - File-Find-Rule&lt;br&gt;
  3514. - Test-Distribution&lt;br&gt;
  3515. - DateTime-Format&lt;br&gt;
  3516. - FreezeThaw&lt;br&gt;
  3517. - DBIx-DBSchema&lt;br&gt;
  3518. - Class-Data-Inheritable&lt;br&gt;
  3519. - Jifty-DBI&lt;br&gt;
  3520. - YAML&lt;br&gt;
  3521. - Locale-Maketext-Lexicon&lt;br&gt;
  3522. - Module-Pluggable&lt;br&gt;
  3523. - Locale-Maketext-Simple&lt;br&gt;
  3524. - App-CLI&lt;br&gt;
  3525. - Sub-Install&lt;br&gt;
  3526. - Params-Util&lt;br&gt;
  3527. - Data-OptList&lt;br&gt;
  3528. - Sub-Exporter&lt;br&gt;
  3529. - SQL-ReservedWords&lt;br&gt;
  3530. - Email-MessageID&lt;br&gt;
  3531. - Email-MIME-Modifier&lt;br&gt;
  3532. - Exception-Class&lt;br&gt;
  3533. - Error&lt;br&gt;
  3534. - Digest&lt;br&gt;
  3535. - Cache-Cache&lt;br&gt;
  3536. - Class-Container&lt;br&gt;
  3537. - HTML-Tagset&lt;br&gt;
  3538. - HTML-Parser&lt;br&gt;
  3539. - HTML-Mason&lt;br&gt;
  3540. - ExtUtils-Command&lt;br&gt;
  3541. - URI&lt;br&gt;
  3542. - HTTP-Server-Simple&lt;br&gt;
  3543. - Crypt-CBC&lt;br&gt;
  3544. - Module-Refresh&lt;br&gt;
  3545. - Data-UUID&lt;br&gt;
  3546. - FileHandle-Fmode&lt;br&gt;
  3547. - DBM-Deep&lt;br&gt;
  3548. - IPC-PubSub&lt;br&gt;
  3549. - File-Path-Expand&lt;br&gt;
  3550. - Email-FolderType&lt;br&gt;
  3551. - Email-LocalDelivery&lt;br&gt;
  3552. - Log-Trace&lt;br&gt;
  3553. - Email-Date-Format&lt;br&gt;
  3554. - Email-Simple-Creator&lt;br&gt;
  3555. - Email-MIME-Creator&lt;br&gt;
  3556. - HTML-TokeParser-Simple&lt;br&gt;
  3557. - Digest-SHA&lt;br&gt;
  3558. - Data-Taxi&lt;br&gt;
  3559. - Compress-PPMd&lt;br&gt;
  3560. - XML-NamespaceSupport&lt;br&gt;
  3561. - XML-SAX&lt;br&gt;
  3562. - XML-Simple&lt;br&gt;
  3563. - Crypt-Blowfish&lt;br&gt;
  3564. - JSON&lt;br&gt;
  3565. - libwww-perl&lt;br&gt;
  3566. - XML-Parser&lt;br&gt;
  3567. - XML-Dumper&lt;br&gt;
  3568. - PHP-Serialization&lt;br&gt;
  3569. - Config-General&lt;br&gt;
  3570. - Data-Denter&lt;br&gt;
  3571. - Data-Serializer&lt;br&gt;
  3572. - Test-Assertions&lt;br&gt;
  3573. - File-Slurp&lt;br&gt;
  3574. - File-Policy&lt;br&gt;
  3575. - Email-MIME-CreateHTML&lt;br&gt;
  3576. - Date-Manip&lt;br&gt;
  3577. - HTML-Lint&lt;br&gt;
  3578. - Template-Declare&lt;br&gt;
  3579. - UNIVERSAL-can&lt;br&gt;
  3580. - UNIVERSAL-isa&lt;br&gt;
  3581. - Test-MockObject&lt;br&gt;
  3582. - Test-Mock-LWP&lt;br&gt;
  3583. - Test-WWW-Selenium&lt;br&gt;
  3584. - Calendar-Simple&lt;br&gt;
  3585. - Class-Inspector&lt;br&gt;
  3586. - File-ShareDir&lt;br&gt;
  3587. - Test-LongString&lt;br&gt;
  3588. - XML-XPath&lt;br&gt;
  3589. - IPC&lt;br&gt;
  3590. - WWW-Mechanize&lt;br&gt;
  3591. - String-Koremutake&lt;br&gt;
  3592. - Log-Log4perl&lt;br&gt;
  3593. - File-MMagic&lt;br&gt;
  3594. - XML-Writer&lt;br&gt;
  3595. - IO-Tee&lt;br&gt;
  3596. - Test-HTTP-Server-Simple&lt;br&gt;
  3597. - HTTP-Server-Simple-Recorder&lt;br&gt;
  3598. - Return-Value&lt;br&gt;
  3599. - Email-Send&lt;br&gt;
  3600. - Email-Folder&lt;br&gt;
  3601. - PathTools&lt;br&gt;
  3602. - Lingua-EN-Numbers-Ordinate&lt;br&gt;
  3603. - Test-Log4perl&lt;br&gt;
  3604. - Module-ScanDeps&lt;br&gt;
  3605. - Spiffy&lt;br&gt;
  3606. - Test-Base&lt;br&gt;
  3607. - PadWalker&lt;br&gt;
  3608. - Carp-Assert&lt;br&gt;
  3609. - Carp-Assert-More&lt;br&gt;
  3610. - Test-WWW-Mechanize&lt;br&gt;
  3611. - Test-Manifest&lt;br&gt;
  3612. - Crypt-Rijndael&lt;br&gt;
  3613. - Hook-LexWrap&lt;br&gt;
  3614. - CSS-Squish&lt;br&gt;
  3615. - CGI-Simple&lt;br&gt;
  3616. - Test-use-ok&lt;br&gt;
  3617. - CGI-Cookie-Splitter&lt;br&gt;
  3618. -;br&gt;
  3619. - Jifty&lt;br&gt;
  3620. - Number-RecordLocator&lt;br&gt;
  3621. - Net-IMAP-Simple&lt;br&gt;
  3622. - GD&lt;br&gt;
  3623. - Business-OnlinePayment-AuthorizeNet-AIM-ErrorCodes&lt;br&gt;
  3624. - Module-Loaded&lt;br&gt;
  3625. - Module-Load&lt;br&gt;
  3626. - Color-Library&lt;br&gt;
  3627. - Tie-Sub&lt;br&gt;
  3628. - Graphics-ColorNames&lt;br&gt;
  3629. - Graphics-ColorNames-WWW&lt;br&gt;
  3630. - Color-Calc&lt;br&gt;
  3631. - List-MoreUtils&lt;br&gt;
  3632. - Text-Markdown&lt;br&gt;
  3633. - HTML-Truncate&lt;br&gt;
  3634. - Net-IMAP-Simple-SSL&lt;br&gt;
  3635. - Regexp-Common-Email-Address&lt;br&gt;
  3636. - HTML-TagCloud&lt;br&gt;
  3637. - Time-modules&lt;br&gt;
  3638. - Proc-ProcessTable&lt;br&gt;
  3639. - DateTime-Format-Mail&lt;br&gt;
  3640. - Business-OnlinePayment&lt;br&gt;
  3641. - Text-Password-Pronounceable&lt;br&gt;
  3642. - Time-Piece&lt;br&gt;
  3643. - Test-MockTime&lt;br&gt;
  3644. - TermReadKey&lt;br&gt;
  3645. - Text-Reform&lt;br&gt;
  3646. - Text-Autoformat&lt;br&gt;
  3647. - Email-MIME-Attachment-Stripper&lt;br&gt;
  3648. - XML-LibXML-Common&lt;br&gt;
  3649. - XML-LibXML&lt;br&gt;
  3650. - XML-Atom&lt;br&gt;
  3651. - Date-Leapyear&lt;br&gt;
  3652. - Date-ICal&lt;br&gt;
  3653. - Text-Quoted&lt;br&gt;
  3654. - Test-Tester&lt;br&gt;
  3655. - Test-NoWarnings&lt;br&gt;
  3656. - Text-vFile-asData&lt;br&gt;
  3657. - Data-ICal&lt;br&gt;
  3658. - Email-Abstract&lt;br&gt;
  3659. - Email-Reply&lt;br&gt;
  3660. - parent&lt;br&gt;
  3661. - Carp-Clan&lt;br&gt;
  3662. - Bit-Vector&lt;br&gt;
  3663. - Date-Calc&lt;br&gt;
  3664. - DateTime-Format-Natural&lt;br&gt;
  3665. - Date-Extract&lt;br&gt;
  3666. - Business-CreditCard&lt;br&gt;
  3667. - HTML-Scrubber&lt;br&gt;
  3668. - Text-Tags&lt;br&gt;
  3669. - Text-FixEOL&lt;br&gt;
  3670. - Time-Duration&lt;br&gt;
  3671. - Pod-Strip&lt;br&gt;
  3672. - rpm-build-perl&lt;br&gt;
  3673. - Params-Check&lt;br&gt;
  3674. - Module-Load-Conditional&lt;br&gt;
  3675. - IPC-Cmd&lt;br&gt;
  3676. - Test-Dependencies&lt;br&gt;
  3677. - IO-String&lt;br&gt;
  3678. - IO-All&lt;br&gt;
  3679. - Tie-IxHash&lt;br&gt;
  3680. - Text-CSV_XS&lt;br&gt;
  3681. - Business-OnlinePayment-AuthorizeNet&lt;br&gt;
  3682. - DBD-Pg&lt;br&gt;
  3683. - Test-Deep&lt;br&gt;
  3684. - JSON-Any&lt;br&gt;
  3685. - Net-Twitter&lt;br&gt;
  3686. - Chatbot-Eliza&lt;br&gt;
  3687. - BTDT&lt;/p&gt;
  3688. </content>
  3689. </entry>
  3690. <entry>
  3691. <title>Hiveminder Pro launches today!</title>
  3692. <link href=""/>
  3693. <updated>2008-01-16T22:56:00Z</updated>
  3694. <id></id>
  3695. <content type="html">&lt;h1&gt;Hiveminder Pro launches today&lt;/h1&gt;
  3696. &lt;p&gt;Today, we&#39;re releasing Hiveminder Pro, a major update to our online task management system. Here at Best Practical, we&#39;re addicted to Hiveminder&#39;s slick, simple task tracking and sharing, but that&#39;s not too surprising-- we built Hiveminder to be the shared todo list we always wanted.You don&#39;t have to take it from us, though.  Sarah Linder of the Austin American-Statesman writes:&lt;/p&gt;
  3697. &lt;blockquote&gt;&lt;p&gt;&quot;I am crazy about Hiveminder. I started using the online to-do list a little more than a year ago, and we&#39;re very content together. I had been lost, adrift -- trying different ways to track my stuff, but never settling down. Hiveminder made me less flaky, less absent-minded, less likely to wake up at 3 a.m. realizing I had forgotten something important. Hiveminder, you complete me.&quot; &lt;/p&gt;&lt;/blockquote&gt;
  3698. &lt;div class=&quot;ljcut&quot;&gt;If you&#39;ve never used Hiveminder, let me take a moment to run through some of what I think are its most interesting features:&lt;p&gt;&lt;/p&gt;
  3699. &lt;h2&gt;Braindump&lt;/h2&gt;
  3700. &lt;p&gt;You&#39;ve got a lot on your mind. Getting all the stuff you need to do out of your head and into a trusted tool like Hiveminder can make the difference between a good day and a day struggling to get anything done. With Braindump, you can just type out a list of what you need to do - just like writing it up on paper or in Notepad. Hiveminder will turn your notes into a todo list, looking for email addresses, due dates, categories and hints that something might be important. There&#39;s a braindump box on every page, but you can focus in on braindump at &lt;a href=&quot;;&gt;;/a&gt;&lt;br&gt;
  3701. &lt;/p&gt;&lt;h2&gt;Task Review&lt;/h2&gt;
  3702. &lt;p&gt;If you&#39;re like me, you have a few hundred items on your todo list. Some of them are work tasks that I really need to get to today and some are little home repair tasks that I can put off for another few months. Task Review walks you through everything on your todo list one at a time. You get to make some simple decisions about each task: Is it done? Can I do it today? Can I get someone else to do it? How long should I hide it away for? At the end of the review, you&#39;re left with a pared down list of things you can get done today. Do a review and declutter your list:&lt;a href=&quot;;&gt;;/a&gt;&lt;br&gt;
  3703. &lt;/p&gt;&lt;h2&gt;History&lt;/h2&gt;
  3704. &lt;p&gt;Just as important as knowing what you do is knowing what you&#39;ve already done. Hiveminder keeps track of all the changes you make to your tasks, so you can get a full history of an individual task later. That means we can also show you what&#39;s happened to your tasks today, yesterday or any day in the past. You can get a peek of what your tasks have been up to today at: &lt;a href=&quot;;&gt;;/a&gt;&lt;br&gt;
  3705. &lt;/p&gt;&lt;h2&gt;Sharing&lt;/h2&gt;
  3706. &lt;p&gt;One of the strengths of any web-based application is how easy it becomes to share things. Hiveminder is no exception. We built it from the ground up to make it easy to share one task or thousands. You can easily assign a task to another person just by setting the task&#39;s owner field to their email address. Hiveminder will make sure they get email telling them that you need them to do something. They don&#39;t even have to be a Hiveminder user. We&#39;ll send them a URL which lets them access their task without signing up. Once you have a few more tasks to share or a few people you regularly share tasks with, you can create a group and invite other users to join you. Everybody in the group can see all the group&#39;s tasks (though you can control who can edit them), you can assign tasks to individual users and everybody can share a list of what needs doing.&lt;br&gt;
  3707. &lt;/p&gt;&lt;h2&gt;Hiveminder integrates with everything&lt;/h2&gt;
  3708. &lt;p&gt;Whether you&#39;re a Googleista using the iGoogle and Google Calendar widgets, a Mac user browsing your todos with our iCal feeds or reading a feed of tasks in Bloglines or Google Reader, your tasks are always at your fingertips. If you live in your IM client, HMTasks is always around to chat with. The friendly little bot can tell you about what you need to do today and take notes when something new comes to mind. Browser search box integration for Firefox and IE7 lets you search Hiveminder and even braindump new tasks, no matter where on the web you are. I haven&#39;t even gotten into our commandline tools or Web API, but if that&#39;s what you&#39;re into, you can find out more at &lt;a href=&quot;;&gt;;/a&gt;&lt;br&gt;
  3709. &lt;/p&gt;&lt;h2&gt;...and more&lt;/h2&gt;
  3710. &lt;p&gt;I haven&#39;t mentioned tags, our innovative &quot;but first...and then&quot; organizational system, printing support, incoming email addresses, the mobile and mini user interfaces or any of a host of other features, but if you visit &lt;a href=&quot;;&gt;;/a&gt; today, you can find out more about them.&lt;br&gt;Last February, PC World Magazine ranked Hiveminder as one of the best Todo list apps on the web. Since then, we&#39;ve been hard at work to make Hiveminder even better:
  3711. &lt;/p&gt;&lt;ul&gt;
  3712. &lt;li&gt; We&#39;ve improved performance across the board &lt;/li&gt;
  3713. &lt;li&gt; We&#39;ve added new Google Calendar and iGoogle integrations &lt;/li&gt;
  3714. &lt;li&gt; We&#39;ve added new AOL IM and Jabber chat interfaces &lt;/li&gt;
  3715. &lt;li&gt; We&#39;ve significantly improved the API (more on that in the next few weeks) &lt;/li&gt;
  3716. &lt;li&gt; We&#39;ve added integrations with Firefox and IE7 &lt;/li&gt;
  3717. &lt;li&gt; We&#39;ve cleaned up and streamlined the interface &lt;/li&gt;
  3718. &lt;li&gt; We&#39;ve made repeating tasks easier to use ...and a whole bunch more&lt;/li&gt;
  3719. &lt;/ul&gt;
  3720. &lt;p&gt;Today, we&#39;re launching Hiveminder Pro. It&#39;s $30/year (but read on to find out how to save a few bucks.) For your money, you get:&lt;br&gt;
  3721. &lt;/p&gt;&lt;h2&gt;Reports&lt;/h2&gt;
  3722. &lt;p&gt;Pretty charts and graphs are a great motivator and they can provide useful input about how you work. One of the folks here at Best Practical found out that he tends to get more work done on Wednesday than on every other day of the week combined and that his most productive times are when everyone else is out of the office at lunch. Of course, Hiveminder Pro reports are also available for your groups, so you can see who&#39;s overloaded, who&#39;s slacking off and whether you&#39;re getting ahead or falling behind. To turn on graphs and charts, visit &lt;a href=&quot;;&gt;;/a&gt;&lt;br&gt;
  3723. &lt;/p&gt;&lt;h2&gt;Attachments&lt;/h2&gt;
  3724. &lt;p&gt;Many of you who use Hiveminder to collaborate with team members both inside and outside your organization have told us that you&#39;d really like to use Hiveminder to share documents related to your tasks. The wait is over. As of today, each Pro user has a 500MB task attachment quota. You can work with attachments through the Web UI or simply attach them to tasks you create by email. Attachments you sent in before we created Pro accounts will magically appear when you upgrade at &lt;a href=&quot;;&gt;;/a&gt; &lt;br&gt;
  3725. &lt;/p&gt;&lt;h2&gt;Saved lists&lt;/h2&gt;
  3726. &lt;p&gt;Hiveminder makes it easy to search and sort your task list. But until today, you needed to redo your searches day after day. Hiveminder Pro gives you a &quot;Save list&quot; link on every task list. It&#39;s easy to build a list of all items tagged &quot;shopping&quot; or everything you need to do for your boss. We have a bunch more things you&#39;ll be able to do with your saved lists soon, too! To start saving your lists, visit &lt;a href=&quot;;&gt;;/a&gt;&lt;br&gt;
  3727. &lt;/p&gt;&lt;h2&gt;SSL Security&lt;/h2&gt;
  3728. &lt;p&gt; On today&#39;s wider web, protecting your information from prying eyes is increasingly important to many of you. Hiveminder has always protected your password when you log in, but today we&#39;ve enabled SSL (https) encrypted logins for ALL Hiveminder users. Pro users can choose to protect all their interactions with Hiveminder by visiting &lt;a href=&quot;;&gt;;/a&gt; to log in. To protect your account with SSL, visit &lt;a href=&quot;;&gt;;/a&gt;&lt;br&gt;
  3729. &lt;/p&gt;&lt;h2&gt;;/h2&gt;
  3730. &lt;p&gt;I&#39;ve saved my favorite for last. Hiveminder has always made it easy for you to create incoming addresses so others can send you tasks by email, but until today it was still hard to assign a task to someone else from your email client. Today, we&#39;re introducing a never-before-seen way to talk to an application from any email client.&lt;br&gt; Once you set up your secret code in your Hiveminder Pro settings, you can send a task to anyone on the planet by appending &quot;; to their email address. You don&#39;t need to do anything to configure your email client.&lt;br&gt; If I wanted to ask the president to give me a balanced budget, I&#39;d open up my email client and dash off a note like this:&lt;br&gt;
  3731. &lt;/p&gt;&lt;blockquote&gt;
  3732. &lt;pre&gt;To: &lt;br&gt;Subject: Balanced budget, please?&lt;br&gt;&lt;br&gt;It would be great if you could take care of this next week!&lt;br&gt;&lt;br&gt;Thanks, &lt;br&gt;Jesse&lt;/pre&gt;
  3733. &lt;/blockquote&gt;
  3734. &lt;p&gt; Hiveminder Pro will make a task and notify the President that I&#39;ve assigned him a task. If he&#39;s an existing Hiveminder user, the task will pop into his todo list. If not, he&#39;ll get an email with a URL to view and reply to the task I assigned him. To get started assigning&lt;br&gt; tasks by email, just visit &lt;a href=&quot;;&gt;;/a&gt;&lt;/p&gt;
  3735. &lt;h2&gt;It&#39;s time to go Pro!&lt;/h2&gt;
  3736. &lt;p&gt;&lt;b&gt;Hiveminder Pro accounts are just $30/year&lt;/b&gt;, but since you&#39;re a friend of ours (or a friend of a friend), we&#39;d like to offer you (and your friends) &lt;b&gt;an additional $5 discount&lt;/b&gt;. Just enter &lt;b&gt;LAUNCHCODE&lt;/b&gt; at &lt;a href=&quot;;&gt;;/a&gt;. The coupon is good through February 1.&lt;/p&gt;
  3737. &lt;p&gt;If you know someone (or many someones) who could use the gift of productivity, you can use your coupon to give them Hiveminder Pro at &lt;a href=&quot;;&gt;;/a&gt;&lt;/p&gt;
  3738. &lt;p&gt;In the coming weeks and months, we&#39;ll be adding a number of other really cool features to Hiveminder and Hiveminder Pro. We&#39;d love to hear your feature suggestions. Just drop them in the &quot;feedback&quot; box on the left-hand side of every page on the site.&lt;/p&gt;
  3739. &lt;p&gt;Be Productive,&lt;br&gt;Jesse, for Hiveminder&lt;/p&gt;&lt;/div&gt;
  3740. </content>
  3741. </entry>
  3742. <entry>
  3743. <title>The MacBook Air</title>
  3744. <link href=""/>
  3745. <updated>2008-01-16T07:52:00Z</updated>
  3746. <id></id>
  3747. <content type="html">&lt;p&gt;The last time I saw the blogosphere slinging crap about an apple keynote-announced product like this...well, &lt;a href=&quot;;&gt;it wasn&#39;t pretty&lt;/a&gt;.&lt;/p&gt;
  3748. </content>
  3749. </entry>
  3750. <entry>
  3751. <title>eichin, on the acquisition of LJ by SUP</title>
  3752. <link href=""/>
  3753. <updated>2007-12-03T06:37:00Z</updated>
  3754. <id></id>
  3755. <content type="html">&lt;p&gt;I think this makes a wonderful privacy-cautionary-tale example. &#39;Suppose your diary...was *bought* by the KGB?&#39;&lt;br&gt;&lt;i&gt;--&lt;a href=&quot;; class=&quot;lj-user&quot;&gt;eichin&lt;/a&gt;&lt;/i&gt;&lt;/p&gt;
  3756. </content>
  3757. </entry>
  3758. <entry>
  3759. <title>An open letter to the studios and the writers</title>
  3760. <link href=""/>
  3761. <updated>2007-11-14T07:47:00Z</updated>
  3762. <id></id>
  3763. <content type="html">&lt;p&gt;The last time there was a WGA strike, we got &quot;America&#39;s Funniest Home Videos&quot; and &quot;Cops.&quot;&lt;/p&gt;
  3764. &lt;p&gt;I can&#39;t begin to imagine what horrors this strike will unleash if allowed to continue.&lt;/p&gt;
  3765. &lt;p&gt;End the strike now...or the terrorists will have won.&lt;/p&gt;
  3766. </content>
  3767. </entry>
  3768. <entry>
  3769. <title>I hate Web 2.0</title>
  3770. <link href=""/>
  3771. <updated>2007-10-31T06:42:00Z</updated>
  3772. <id></id>
  3773. <content type="html">&lt;p&gt;Google Calendar is down. But only for me. I log in and get a 404. Nobody else I know gets a 404.&lt;/p&gt;
  3774. &lt;p&gt;I want my software local, damn it.  And sync. I want sync.&lt;/p&gt;
  3775. </content>
  3776. </entry>
  3777. <entry>
  3778. <title>LONDON - Saturday - Dim Sum</title>
  3779. <link href=""/>
  3780. <updated>2007-10-19T18:31:00Z</updated>
  3781. <id></id>
  3782. <content type="html">&lt;p&gt;Join me and other assorted trouble-makers for Dim Sum at Royal China (Queensway) at noon on Saturday.&lt;/p&gt;
  3783. &lt;p&gt;&lt;a href=&quot;;&gt;Map, if you need it&lt;/a&gt;.&lt;/p&gt;
  3784. &lt;p&gt;RSVPs aren&#39;t required but can be kind of useful.&lt;/p&gt;
  3785. </content>
  3786. </entry>
  3787. <entry>
  3788. <title>London cafes</title>
  3789. <link href=""/>
  3790. <updated>2007-10-18T08:05:00Z</updated>
  3791. <id></id>
  3792. <content type="html">&lt;p&gt;I find myself in need of a good cafe for sitting in and hacking in London. Something like a Diesel or a Ritual. Where do I want to go?&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
  3793. </content>
  3794. </entry>
  3795. <entry>
  3796. <title>Dim Sum. China Pearl. Noon. Saturday</title>
  3797. <link href=""/>
  3798. <updated>2007-09-29T00:19:00Z</updated>
  3799. <id></id>
  3800. <content type="html">&lt;p&gt;RSVP so I know you&#39;re coming. &lt;/p&gt;
  3801. &lt;p&gt;&lt;font size=&quot;1&quot;&gt;But come even if you don&#39;t RSVP.&lt;br&gt;&lt;/font&gt;&lt;/p&gt;
  3802. </content>
  3803. </entry>
  3804. <entry>
  3805. <title>Looking for a web designer</title>
  3806. <link href=""/>
  3807. <updated>2007-09-27T19:31:00Z</updated>
  3808. <id></id>
  3809. <content type="html">&lt;p&gt;I have a small web app I&#39;m putting together which could _really_ use some designer help. We&#39;re no venture-backed startup, but I could likely swing a bit of cash or a couple working dinners or something. And you&#39;d get your name in lights.&lt;/p&gt;
  3810. &lt;p&gt;Anybody interested?&lt;/p&gt;
  3811. </content>
  3812. </entry>
  3813. <entry>
  3814. <title>Hey! We&#39;re having a party (cuz we got married) on August 11 in Somerville, MA</title>
  3815. <link href=""/>
  3816. <updated>2007-08-03T22:04:00Z</updated>
  3817. <id></id>
  3818. <content type="html">&lt;p&gt;So! Kaia and I ran off and got married about a month ago. &lt;/p&gt;
  3819. &lt;p&gt;We&#39;re having a party on Saturday, August 11 from about 7pm onwards. &lt;/p&gt;
  3820. &lt;pre&gt;&lt;br&gt;    7pm until late on Saturday, August 11&lt;br&gt;    -------------------------------------&lt;br&gt;&lt;br&gt;    23 Ibbetson St, Somerville MA 02143&lt;br&gt;    ===================================&lt;br&gt;&lt;/pre&gt;
  3821. &lt;p&gt;If you&#39;d like you&#39;re welcome to consider this party our wedding&lt;br&gt;reception. However, you should be aware that it&#39;s just a good excuse to&lt;br&gt;have a party.  There&#39;s no need to dress up, bring gifts. There won&#39;t be &lt;br&gt;any cake-in-face antics (well, not any that Jesse or Kaia will&lt;br&gt;participate in) and we&#39;re fairly confident there won&#39;t be tables with&lt;br&gt;namecards or a live band playing bad covers of popular wedding music.&lt;/p&gt;
  3822. &lt;p&gt;All that being said, it&#39;s a party! Parties are fun. There will be cake.&lt;br&gt;There will be snack food. There will be booze. There wil be neat people&lt;br&gt;(at least as long as you show up).&lt;/p&gt;
  3823. &lt;p&gt;How to get here:&lt;/p&gt;
  3824. &lt;p&gt;Ibbetson is off of Somerville Ave, conveniently located near the &quot;Porter&lt;br&gt;Square&quot; Red Line stop. If you&#39;re coming from Porter Square, it&#39;s just&lt;br&gt;a few blocks down on the left. There&#39;s a &quot;Pet Spa&quot; on the corner.&lt;/p&gt;
  3825. &lt;p&gt;#23 is about half way up the street on the right. It&#39;s the only house&lt;br&gt;with a pine tree in first.&lt;/p&gt;
  3826. &lt;p&gt;If you get lost, you can call Jesse at +1 617 319 5823 or Kaia at +1 857&lt;br&gt;928 8332.&lt;/p&gt;
  3827. &lt;p&gt;Limited crash space is available. Some of it even comes with pillows and&lt;br&gt;blankets. All of it comes with towels.&lt;/p&gt;
  3828. &lt;p&gt;RSVPs are not required, but would be appreciated.&lt;/p&gt;
  3829. &lt;p&gt;We&#39;re looking forward to seeing you!&lt;/p&gt;
  3830. &lt;p&gt;    Jesse and Kaia&lt;/p&gt;
  3831. </content>
  3832. </entry>
  3833. <entry>
  3834. <title>New experience today...</title>
  3835. <link href=""/>
  3836. <updated>2007-06-24T01:15:00Z</updated>
  3837. <id></id>
  3838. <content type="html">&lt;p&gt;...I got married in a Catholic church.&lt;/p&gt;
  3839. &lt;p&gt;&lt;img alt=&quot;&quot; src=&quot;;&gt;&lt;/p&gt;
  3840. </content>
  3841. </entry>
  3842. <entry>
  3843. <title>Dim Sum. China Pearl. Sunday. Noon.</title>
  3844. <link href=""/>
  3845. <updated>2007-05-26T03:33:00Z</updated>
  3846. <id></id>
  3847. <content type="html">&lt;p&gt;You know you want to.&lt;/p&gt;
  3848. </content>
  3849. </entry>
  3850. <entry>
  3851. <title>The definition of hubris</title>
  3852. <link href=""/>
  3853. <updated>2007-05-12T05:48:00Z</updated>
  3854. <id></id>
  3855. <content type="html">&lt;blockquote&gt;This page can be found by searching the Web for the 23-letter string alllamportspubsontheweb.  Please do not put this string in any document that might appear on the Web-including email messages and Postscript, PDF, and Word documents.  One way to refer to it in Web documents is &quot;the string obtained by removing the - characters from the string alllam-portspu-bsonth-eweb.&quot;&lt;p&gt;&lt;/p&gt;&lt;/blockquote&gt;
  3856. </content>
  3857. </entry>
  3858. <entry>
  3859. <title>PSA: lolz are not just for cats.</title>
  3860. <link href=""/>
  3861. <updated>2007-05-09T21:10:00Z</updated>
  3862. <id></id>
  3863. <content type="html">&lt;p&gt;Remember the &lt;a href=&quot;;&gt;LJ mojo meme&lt;/a&gt;?&lt;/p&gt;
  3864. &lt;p&gt;&lt;a href=&quot;;&gt;Part two&lt;/a&gt; is up.&lt;/p&gt;
  3865. &lt;p&gt;All, I can say is: &lt;/p&gt;
  3866. &lt;h1&gt;&lt;a href=&quot;;&gt;Ha. Ha. Ha. Told you so.&lt;/a&gt;&lt;/h1&gt;
  3867. &lt;p&gt;&lt;i&gt;Also, not all of you who claim to have dated me actually did.&lt;/i&gt;&lt;/p&gt;
  3868. &lt;p&gt;
  3869. (Repeated here, so you don&#39;t need to click)&lt;/p&gt;
  3870. &lt;h1&gt;
  3871. &lt;br&gt;&lt;b&gt;Anything you ever type into a web browser will be read by your:&lt;/b&gt;&lt;br&gt;parents, grandparents, children (I don&#39;t care if they won&#39;t exist for the next 20 years), teachers, students, bosses, coworkers, direct reports, doctors, lawyers, accountants, grocers, pharmacists, drug dealers, bookmakers, boyfriends, girlfriends, spouses and the random guy you meet next week.&lt;p&gt;&lt;/p&gt;
  3872. &lt;p&gt; Unless, of course, it&#39;s important to you that they see whatever it is that you&#39;ve written. Then they&#39;ll never see it.&lt;/p&gt;
  3873. &lt;p&gt;This includes anything you post to Livejournal. I don&#39;t care if it&#39;s a friends-only post. I don&#39;t care if it&#39;s locked down to a friends group containing only you and your cat. SixApart does have a financial incentive to not violate your trust, but well, it is the internet. Anything could happen.&lt;br&gt;
  3874. &lt;/p&gt;&lt;/h1&gt;
  3875. </content>
  3876. </entry>
  3877. <entry>
  3878. <title>lolquinn</title>
  3879. <link href=""/>
  3880. <updated>2007-05-04T02:35:00Z</updated>
  3881. <id></id>
  3882. <content type="html">&lt;p&gt;I blame &lt;a href=&quot;;&gt;gnat and joshua&lt;/a&gt;.&lt;/p&gt;
  3883. &lt;p&gt;&lt;a href=&quot;;&gt;&lt;img src=&quot;;&gt;&lt;/a&gt;&lt;br&gt;
  3884. (Image from yog&#39;s flickrstream)&lt;/p&gt;
  3885. </content>
  3886. </entry>
  3887. <entry>
  3888. <title>Chiropractor in Camberville?</title>
  3889. <link href=""/>
  3890. <updated>2007-04-30T05:34:00Z</updated>
  3891. <id></id>
  3892. <content type="html">&lt;p&gt;Can anyone recommend a chiropractor in camberville? I think my time in airplane seats is catching up with me.&lt;/p&gt;
  3893. </content>
  3894. </entry>
  3895. <entry>
  3896. <title>Flights planned for the next 30 days</title>
  3897. <link href=""/>
  3898. <updated>2007-04-27T02:40:00Z</updated>
  3899. <id></id>
  3900. <content type="html">&lt;p&gt;&lt;!--more--&gt;None&lt;/p&gt;
  3901. &lt;p&gt;&lt;a href=&quot;;amp;RANGE=&amp;amp;PATH-COLOR=&amp;amp;PATH-UNITS=mi&amp;amp;SPEED-GROUND=&amp;amp;SPEED-UNITS=kts&amp;amp;RANGE-STYLE=best&amp;amp;RANGE-COLOR=&amp;amp;MAP-STYLE=&quot;&gt;But this is May-July.&lt;/a&gt;&lt;/p&gt;
  3902. </content>
  3903. </entry>
  3904. <entry>
  3905. <title>Car.</title>
  3906. <link href=""/>
  3907. <updated>2007-04-13T20:25:00Z</updated>
  3908. <id></id>
  3909. <content type="html">&lt;p&gt;&lt;!-- You can write your own intro after this line --&gt;&lt;/p&gt;
  3910. &lt;p&gt;It&#39;s time for a new car. (Ok, That time is well past. But I&#39;m actually in the country this weekend).&lt;/p&gt;
  3911. &lt;p&gt;&lt;!-- WARNING: Leave everything after this line alone --&gt;&lt;/p&gt;
  3912. &lt;blockquote&gt;&lt;p&gt;I need to buy a car&lt;/p&gt;
  3913. &lt;/blockquote&gt;
  3914. &lt;div class=&quot;hidden&quot;&gt;&lt;/div&gt;
  3915. &lt;p style=&quot;border-top:1px dashed #999;margin-top:15px;padding-bottom:5px;padding-top:5px;&quot;&gt;
  3916. &lt;/p&gt;&lt;div align=&quot;center&quot; class=&quot;choice&quot;&gt;
  3917. &lt;div style=&quot;position:relative;width:100%;overflow:hidden;&quot;&gt;
  3918. &lt;div style=&quot;width:49%;float:left;padding-bottom:1em;border-right:1px dashed #999;&quot;&gt;
  3919. &lt;p style=&quot;margin-left:5px;&quot;&gt;Prius, even though it has a horrible rear window
  3920.        &lt;/p&gt;
  3921. &lt;p&gt;&lt;span class=&quot;preamble  &quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
  3922. &lt;div style=&quot;width:50%;float:right;padding-bottom:1em;&quot;&gt;
  3923. &lt;p style=&quot;margin-left:5px;&quot;&gt;Civic. Maybe a hybrid, even though it doesn&amp;#039;t get great gas mileage for a hybrid.
  3924.        &lt;/p&gt;
  3925. &lt;p&gt;&lt;span class=&quot;preamble  &quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
  3926. &lt;p&gt;&lt;/p&gt;&lt;/div&gt;
  3927. &lt;p&gt;&lt;/p&gt;&lt;/div&gt;
  3928. &lt;div class=&quot;single_button&quot;&gt;
  3929. &lt;p style=&quot;margin-top:10px;&quot;&gt;&lt;span class=&quot;preamble  &quot;&gt;&lt;/span&gt;&lt;/p&gt;
  3930. &lt;p&gt;&lt;/p&gt;&lt;/div&gt;
  3931. &lt;p style=&quot;border-top:1px dashed #999;margin-top:15px;padding-top:5px;&quot;&gt;
  3932. &lt;/p&gt;&lt;div class=&quot;form_field argument-comments&quot;&gt;
  3933. &lt;span class=&quot;preamble  argument-comments&quot;&gt;&lt;/span&gt;&lt;br&gt;
  3934. Comments?&lt;p&gt;&lt;/p&gt;
  3935. &lt;p&gt;&lt;span class=&quot;hints  argument-comments&quot;&gt;&lt;/span&gt;&lt;br&gt;
  3936. &lt;span class=&quot;error  argument-comments&quot; id=&quot;errors-J:A:F-comments-vote&quot;&gt;&lt;/span&gt;&lt;br&gt;
  3937. &lt;span class=&quot;warning  argument-comments&quot; id=&quot;warnings-J:A:F-comments-vote&quot;&gt;&lt;/span&gt;&lt;br&gt;
  3938. &lt;span class=&quot;canonicalization_note  argument-comments&quot; id=&quot;canonicalization_note-J:A:F-comments-vote&quot;&gt;&lt;/span&gt;
  3939. &lt;/p&gt;&lt;/div&gt;
  3940. &lt;p&gt;Before you click, give us some idea of &lt;i&gt;why&lt;/i&gt; you feel that way.
  3941.      &lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  3942. &lt;p style=&quot;margin-top:0;&quot;&gt;[&lt;a href=&quot;;&gt;Comments&lt;/a&gt;]&lt;/p&gt;
  3943. &lt;div style=&quot;text-align:right;&quot;&gt;
  3944. &lt;a href=&quot;;&gt;&lt;img src=&quot;; alt=&quot;Doxory&quot; style=&quot;border:0;&quot;&gt;&lt;/a&gt;
  3945. &lt;/div&gt;
  3946. </content>
  3947. </entry>
  3948. <entry>
  3949. <title>Help me choose!</title>
  3950. <link href=""/>
  3951. <updated>2007-04-08T12:36:00Z</updated>
  3952. <id></id>
  3953. <content type="html">&lt;p&gt;&lt;!-- You can write your own intro here --&gt;&lt;/p&gt;
  3954. &lt;p&gt;&lt;!-- WARNING: Leave the rest of this post alone to post your question --&gt;&lt;/p&gt;
  3955. &lt;blockquote&gt;
  3956. &lt;p&gt;I&#39;ve got one night left at the YAPC::Asia hackathon&lt;/p&gt;
  3957. &lt;/blockquote&gt;
  3958. &lt;div class=&quot;hidden&quot;&gt;&lt;/div&gt;
  3959. &lt;p style=&quot;border-top:1px dashed #999;margin-top:15px;padding-bottom:5px;padding-top:5px;&quot;&gt;
  3960.      &lt;strong&gt;Help me choose!&lt;br&gt;
  3961.      &lt;/strong&gt;
  3962.     &lt;/p&gt;
  3963. &lt;div align=&quot;center&quot; class=&quot;choice&quot;&gt;
  3964. &lt;div style=&quot;position:relative;width:100%;overflow:hidden;&quot;&gt;
  3965. &lt;div style=&quot;width:49%;float:left;padding-bottom:1em;border-right:1px dashed #999;&quot;&gt;
  3966. &lt;p style=&quot;margin-left:5px;&quot;&gt;Hack on Doxory
  3967.        &lt;/p&gt;
  3968. &lt;p&gt;&lt;span class=&quot;preamble  &quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
  3969. &lt;div style=&quot;width:50%;float:right;padding-bottom:1em;&quot;&gt;
  3970. &lt;p style=&quot;margin-left:5px;&quot;&gt;Hack on syncable databases
  3971.        &lt;/p&gt;
  3972. &lt;p&gt;&lt;span class=&quot;preamble  &quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
  3973. &lt;p&gt;&lt;/p&gt;&lt;/div&gt;
  3974. &lt;p&gt;&lt;/p&gt;&lt;/div&gt;
  3975. &lt;div class=&quot;single_button&quot;&gt;
  3976. &lt;p style=&quot;margin-top:10px;&quot;&gt;&lt;span class=&quot;preamble  &quot;&gt;&lt;/span&gt;&lt;/p&gt;
  3977. &lt;p&gt;&lt;/p&gt;&lt;/div&gt;
  3978. &lt;p style=&quot;border-top:1px dashed #999;margin-top:15px;padding-top:5px;&quot;&gt;
  3979. &lt;/p&gt;&lt;div class=&quot;form_field argument-comments&quot;&gt;
  3980. &lt;span class=&quot;preamble  argument-comments&quot;&gt;&lt;/span&gt;&lt;br&gt;
  3981. Comments?&lt;p&gt;&lt;/p&gt;
  3982. &lt;p&gt;&lt;span class=&quot;hints  argument-comments&quot;&gt;&lt;/span&gt;&lt;br&gt;
  3983. &lt;span class=&quot;error  argument-comments&quot; id=&quot;errors-J:A:F-comments-vote&quot;&gt;&lt;/span&gt;&lt;br&gt;
  3984. &lt;span class=&quot;warning  argument-comments&quot; id=&quot;warnings-J:A:F-comments-vote&quot;&gt;&lt;/span&gt;&lt;br&gt;
  3985. &lt;span class=&quot;canonicalization_note  argument-comments&quot; id=&quot;canonicalization_note-J:A:F-comments-vote&quot;&gt;&lt;/span&gt;
  3986. &lt;/p&gt;&lt;/div&gt;
  3987. &lt;p&gt;Before you click, give us some idea of &lt;i&gt;why&lt;/i&gt; you feel that way.
  3988.      &lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  3989. &lt;p style=&quot;margin-top:0;&quot;&gt;
  3990. [&lt;a href=&quot;;&gt;Comments&lt;/a&gt;]
  3991.            &lt;/p&gt;
  3992. &lt;div style=&quot;text-align:right;&quot;&gt;
  3993. &lt;a href=&quot;;&gt;&lt;img src=&quot;; alt=&quot;Doxory&quot; style=&quot;border:0;&quot;&gt;&lt;/a&gt;
  3994. &lt;/div&gt;
  3995. </content>
  3996. </entry>
  3997. <entry>
  3998. <title>Doxory can post to LJ!</title>
  3999. <link href=""/>
  4000. <updated>2007-04-07T11:48:00Z</updated>
  4001. <id></id>
  4002. <content type="html">&lt;p&gt;&lt;!-- You can write your own intro here --&gt;&lt;br&gt;In celebration, I need some help making a decision:&lt;!-- You can write your own intro after this line --&gt;&lt;/p&gt;
  4003. &lt;p&gt;&lt;!-- WARNING: Leave everything after this line alone --&gt;&lt;/p&gt;
  4004. &lt;blockquote&gt;&lt;p&gt;Time to do something to my hair&lt;/p&gt;
  4005. &lt;/blockquote&gt;
  4006. &lt;div class=&quot;hidden&quot;&gt;&lt;/div&gt;
  4007. &lt;p style=&quot;border-top:1px dashed #999;margin-top:15px;padding-bottom:5px;padding-top:5px;&quot;&gt;
  4008.      &lt;strong&gt;Help me choose!&lt;br&gt;
  4009.      &lt;/strong&gt;
  4010.     &lt;/p&gt;
  4011. &lt;div align=&quot;center&quot; class=&quot;choice&quot;&gt;
  4012. &lt;div style=&quot;position:relative;width:100%;overflow:hidden;&quot;&gt;
  4013. &lt;div style=&quot;width:49%;float:left;padding-bottom:1em;border-right:1px dashed #999;&quot;&gt;
  4014. &lt;p style=&quot;margin-left:5px;&quot;&gt;Cut it
  4015.        &lt;/p&gt;
  4016. &lt;p&gt;&lt;span class=&quot;preamble  &quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
  4017. &lt;div style=&quot;width:50%;float:right;padding-bottom:1em;&quot;&gt;
  4018. &lt;p style=&quot;margin-left:5px;&quot;&gt;Turn it purple
  4019.        &lt;/p&gt;
  4020. &lt;p&gt;&lt;span class=&quot;preamble  &quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;
  4021. &lt;p&gt;&lt;/p&gt;&lt;/div&gt;
  4022. &lt;p&gt;&lt;/p&gt;&lt;/div&gt;
  4023. &lt;div class=&quot;single_button&quot;&gt;
  4024. &lt;p style=&quot;margin-top:10px;&quot;&gt;&lt;span class=&quot;preamble  &quot;&gt;&lt;/span&gt;&lt;/p&gt;
  4025. &lt;p&gt;&lt;/p&gt;&lt;/div&gt;
  4026. &lt;p style=&quot;border-top:1px dashed #999;margin-top:15px;padding-top:5px;&quot;&gt;
  4027. &lt;/p&gt;&lt;div class=&quot;form_field argument-comments&quot;&gt;
  4028. &lt;span class=&quot;preamble  argument-comments&quot;&gt;&lt;/span&gt;&lt;br&gt;
  4029. Comments?&lt;p&gt;&lt;/p&gt;
  4030. &lt;p&gt;&lt;span class=&quot;hints  argument-comments&quot;&gt;&lt;/span&gt;&lt;br&gt;
  4031. &lt;span class=&quot;error  argument-comments&quot; id=&quot;errors-J:A:F-comments-vote&quot;&gt;&lt;/span&gt;&lt;br&gt;
  4032. &lt;span class=&quot;warning  argument-comments&quot; id=&quot;warnings-J:A:F-comments-vote&quot;&gt;&lt;/span&gt;&lt;br&gt;
  4033. &lt;span class=&quot;canonicalization_note  argument-comments&quot; id=&quot;canonicalization_note-J:A:F-comments-vote&quot;&gt;&lt;/span&gt;
  4034. &lt;/p&gt;&lt;/div&gt;
  4035. &lt;p&gt;Before you click, give us some idea of &lt;i&gt;why&lt;/i&gt; you feel that way.
  4036.      &lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  4037. &lt;p style=&quot;margin-top:0;&quot;&gt;[&lt;a href=&quot;;&gt;Comments&lt;/a&gt;]&lt;/p&gt;
  4038. &lt;div style=&quot;text-align:right;&quot;&gt;
  4039. &lt;a href=&quot;;&gt;&lt;img src=&quot;; alt=&quot;Doxory&quot; style=&quot;border:0;&quot;&gt;&lt;/a&gt;
  4040. &lt;/div&gt;
  4041. </content>
  4042. </entry>
  4043. <entry>
  4044. <title>Off to Japan in the morning.</title>
  4045. <link href=""/>
  4046. <updated>2007-04-01T07:59:00Z</updated>
  4047. <id></id>
  4048. <content type="html">&lt;p&gt;Madrid next week.&lt;br&gt;
  4049. Calgary the week after that.&lt;/p&gt;
  4050. &lt;p&gt;I wish I were kidding.&lt;/p&gt;
  4051. </content>
  4052. </entry>
  4053. <entry>
  4054. <title>SF: Saturday, 3/31 - 11:30 AM - Dim Sum in SOMA</title>
  4055. <link href=""/>
  4056. <updated>2007-03-29T21:31:00Z</updated>
  4057. <id></id>
  4058. <content type="html">&lt;p&gt;Canton Dim Sum &amp;amp; Seafood Restaurant&lt;/p&gt;
  4059. &lt;p&gt;;/p&gt;
  4060. &lt;p&gt;RSVPs appreciated, so we know to save a seat for you.&lt;/p&gt;
  4061. </content>
  4062. </entry>
  4063. <entry>
  4064. <title>SF: Saturday, 3/31 - Dim Sum</title>
  4065. <link href=""/>
  4066. <updated>2007-03-18T03:50:00Z</updated>
  4067. <id></id>
  4068. <content type="html">&lt;p&gt;Lunchish. Probably somewhere in Chinatown. Details forthcoming. Rough RSVPs appreciated.&lt;/p&gt;
  4069. </content>
  4070. </entry>
  4071. <entry>
  4072. <title>In search of: The GBBS Pro ACOS manual.</title>
  4073. <link href=""/>
  4074. <updated>2007-03-05T08:17:00Z</updated>
  4075. <id></id>
  4076. <content type="html">&lt;p&gt;Lazyweb, help me re-live my youth!&lt;/p&gt;
  4077. </content>
  4078. </entry>
  4079. <entry>
  4080. <title>Too Much Joy. Live Show. Early May.</title>
  4081. <link href=""/>
  4082. <updated>2007-02-27T18:31:00Z</updated>
  4083. <id></id>
  4084. <content type="html">&lt;p&gt;&lt;a href=&quot;;&gt;Details are here&lt;/a&gt;, but Tommy Vinton is retiring from the police.  TMJ haven&#39;t played live in. Well, a VERY LONG TIME.  And I don&#39;t know if we&#39;ll ever get to hear them live again. &lt;/p&gt;
  4085. &lt;p&gt;I wouldn&#39;t miss it for the world.&lt;/p&gt;
  4086. </content>
  4087. </entry>
  4088. <entry>
  4089. <title>Thursday. BPS HQ. Hackathon.</title>
  4090. <link href=""/>
  4091. <updated>2007-02-20T01:26:00Z</updated>
  4092. <id></id>
  4093. <content type="html">&lt;p&gt;Come hang out at our glorious headquarters from ~7pm to ~Midnight this thursday evening and hack on your favorite project. We&#39;ll provide net, music and a bit of food. You should bring something exciting to hack on.&lt;/p&gt;
  4094. &lt;p&gt;If you want to hack on a BPS project, like Jifty or SVK or our Object Pony, so much the better. But whatever you want to hack on is fair game.&lt;/p&gt;
  4095. &lt;p&gt;If you need the address or directions, ping me. RSVPs by mail or comment are appreciated.&lt;/p&gt;
  4096. </content>
  4097. </entry>
  4098. <entry>
  4099. <title>Travel. January-July (as currently scheduled)</title>
  4100. <link href=""/>
  4101. <updated>2007-02-17T04:34:00Z</updated>
  4102. <id></id>
  4103. <content type="html">&lt;p&gt;&lt;a href=&quot;;amp;PATH-UNITS=mi&quot;&gt;&lt;img alt=&quot;&quot; src=&quot;,bos-lhr-mad-lhr-bos,bos-dfw-yvr-dfw-bos,bos-lhr-ams-lhr-bos,bos-ywg-bos,bos-san-bos,bos-dfw-nrt-dfw-bos,bos-lon-bcn-lon-bos,bos-ord-pdx-ord-bos&quot;&gt;&lt;/a&gt;&lt;/p&gt;
  4104. &lt;p&gt;&lt;!--more Cut for 83,000 odd miles of itinerary--&gt;&lt;/p&gt;
  4105. &lt;table width=&quot;100%&quot; cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot;&gt;
  4106. &lt;tbody&gt;
  4107. &lt;tr valign=&quot;top&quot;&gt;
  4108. &lt;td&gt;
  4109. &lt;p&gt;
  4110. &lt;/p&gt;&lt;table border=&quot;0&quot;&gt;
  4111. &lt;tbody&gt;
  4112. &lt;tr valign=&quot;bottom&quot;&gt;
  4113. &lt;th colspan=&quot;2&quot;&gt;&lt;u&gt;From&lt;/u&gt;&lt;/th&gt;
  4114. &lt;td width=&quot;8&quot; rowspan=&quot;999&quot;&gt; &lt;/td&gt;
  4115. &lt;th&gt;&lt;u&gt;To&lt;/u&gt;&lt;/th&gt;
  4116. &lt;td width=&quot;8&quot; rowspan=&quot;999&quot;&gt; &lt;/td&gt;
  4117. &lt;th colspan=&quot;2&quot;&gt;Initial&lt;br&gt;
  4118. &lt;u&gt;Heading&lt;/u&gt;&lt;/th&gt;
  4119. &lt;td width=&quot;8&quot; rowspan=&quot;999&quot;&gt; &lt;/td&gt;
  4120. &lt;th&gt;&lt;u&gt;Distance&lt;/u&gt;&lt;/th&gt;
  4121. &lt;td width=&quot;8&quot; rowspan=&quot;999&quot;&gt; &lt;/td&gt;
  4122. &lt;/tr&gt;
  4123. &lt;tr&gt;
  4124. &lt;td nowrap=&quot;nowrap&quot; colspan=&quot;2&quot;&gt;6 segment path:&lt;/td&gt;
  4125. &lt;td nowrap=&quot;nowrap&quot;&gt; &lt;/td&gt;
  4126. &lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;
  4127. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;24478 mi&lt;/td&gt;
  4128. &lt;/tr&gt;
  4129. &lt;tr&gt;
  4130. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4131. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4132. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;SFO&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;37°37&#39;08&quot;N 122°22&#39;30&quot;W&lt;/span&gt;)&lt;/td&gt;
  4133. &lt;td align=&quot;right&quot;&gt;280°&lt;/td&gt;
  4134. &lt;td&gt; (W)&lt;/td&gt;
  4135. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;2704 mi&lt;/td&gt;
  4136. &lt;/tr&gt;
  4137. &lt;tr&gt;
  4138. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4139. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;SFO&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;37°37&#39;08&quot;N 122°22&#39;30&quot;W&lt;/span&gt;)&lt;/td&gt;
  4140. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;TPE&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;25°04&#39;40&quot;N 121°13&#39;58&quot;E&lt;/span&gt;)&lt;/td&gt;
  4141. &lt;td align=&quot;right&quot;&gt;305°&lt;/td&gt;
  4142. &lt;td&gt; (NW)&lt;/td&gt;
  4143. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;6469 mi&lt;/td&gt;
  4144. &lt;/tr&gt;
  4145. &lt;tr&gt;
  4146. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4147. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;TPE&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;25°04&#39;40&quot;N 121°13&#39;58&quot;E&lt;/span&gt;)&lt;/td&gt;
  4148. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;HKG&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;22°18&#39;32&quot;N 113°54&#39;53&quot;E&lt;/span&gt;)&lt;/td&gt;
  4149. &lt;td align=&quot;right&quot;&gt;249°&lt;/td&gt;
  4150. &lt;td&gt; (W)&lt;/td&gt;
  4151. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;501 mi&lt;/td&gt;
  4152. &lt;/tr&gt;
  4153. &lt;tr&gt;
  4154. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4155. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;HKG&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;22°18&#39;32&quot;N 113°54&#39;53&quot;E&lt;/span&gt;)&lt;/td&gt;
  4156. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;AKL&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;37°00&#39;29&quot;S 174°47&#39;30&quot;E&lt;/span&gt;)&lt;/td&gt;
  4157. &lt;td align=&quot;right&quot;&gt;135°&lt;/td&gt;
  4158. &lt;td&gt; (SE)&lt;/td&gt;
  4159. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;5688 mi&lt;/td&gt;
  4160. &lt;/tr&gt;
  4161. &lt;tr&gt;
  4162. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4163. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;AKL&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;37°00&#39;29&quot;S 174°47&#39;30&quot;E&lt;/span&gt;)&lt;/td&gt;
  4164. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;LAX&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;33°56&#39;33&quot;N 118°24&#39;29&quot;W&lt;/span&gt;)&lt;/td&gt;
  4165. &lt;td align=&quot;right&quot;&gt;50°&lt;/td&gt;
  4166. &lt;td&gt; (NE)&lt;/td&gt;
  4167. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;6504 mi&lt;/td&gt;
  4168. &lt;/tr&gt;
  4169. &lt;tr&gt;
  4170. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4171. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;LAX&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;33°56&#39;33&quot;N 118°24&#39;29&quot;W&lt;/span&gt;)&lt;/td&gt;
  4172. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4173. &lt;td align=&quot;right&quot;&gt;62°&lt;/td&gt;
  4174. &lt;td&gt; (NE)&lt;/td&gt;
  4175. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;2611 mi&lt;/td&gt;
  4176. &lt;/tr&gt;
  4177. &lt;tr&gt;
  4178. &lt;td nowrap=&quot;nowrap&quot; colspan=&quot;2&quot;&gt;4 segment path:&lt;/td&gt;
  4179. &lt;td nowrap=&quot;nowrap&quot;&gt; &lt;/td&gt;
  4180. &lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;
  4181. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;8076 mi&lt;/td&gt;
  4182. &lt;/tr&gt;
  4183. &lt;tr&gt;
  4184. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4185. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4186. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;LHR&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;51°28&#39;39&quot;N 00°27&#39;41&quot;W&lt;/span&gt;)&lt;/td&gt;
  4187. &lt;td align=&quot;right&quot;&gt;53°&lt;/td&gt;
  4188. &lt;td&gt; (NE)&lt;/td&gt;
  4189. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;3265 mi&lt;/td&gt;
  4190. &lt;/tr&gt;
  4191. &lt;tr&gt;
  4192. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4193. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;LHR&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;51°28&#39;39&quot;N 00°27&#39;41&quot;W&lt;/span&gt;)&lt;/td&gt;
  4194. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;MAD&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;40°29&#39;37&quot;N 03°34&#39;00&quot;W&lt;/span&gt;)&lt;/td&gt;
  4195. &lt;td align=&quot;right&quot;&gt;192°&lt;/td&gt;
  4196. &lt;td&gt; (S)&lt;/td&gt;
  4197. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;773 mi&lt;/td&gt;
  4198. &lt;/tr&gt;
  4199. &lt;tr&gt;
  4200. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4201. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;MAD&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;40°29&#39;37&quot;N 03°34&#39;00&quot;W&lt;/span&gt;)&lt;/td&gt;
  4202. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;LHR&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;51°28&#39;39&quot;N 00°27&#39;41&quot;W&lt;/span&gt;)&lt;/td&gt;
  4203. &lt;td align=&quot;right&quot;&gt;10°&lt;/td&gt;
  4204. &lt;td&gt; (N)&lt;/td&gt;
  4205. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;773 mi&lt;/td&gt;
  4206. &lt;/tr&gt;
  4207. &lt;tr&gt;
  4208. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4209. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;LHR&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;51°28&#39;39&quot;N 00°27&#39;41&quot;W&lt;/span&gt;)&lt;/td&gt;
  4210. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4211. &lt;td align=&quot;right&quot;&gt;288°&lt;/td&gt;
  4212. &lt;td&gt; (W)&lt;/td&gt;
  4213. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;3265 mi&lt;/td&gt;
  4214. &lt;/tr&gt;
  4215. &lt;tr&gt;
  4216. &lt;td nowrap=&quot;nowrap&quot; colspan=&quot;2&quot;&gt;4 segment path:&lt;/td&gt;
  4217. &lt;td nowrap=&quot;nowrap&quot;&gt; &lt;/td&gt;
  4218. &lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;
  4219. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;6630 mi&lt;/td&gt;
  4220. &lt;/tr&gt;
  4221. &lt;tr&gt;
  4222. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4223. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4224. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;DFW&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;32°53&#39;49&quot;N 97°02&#39;17&quot;W&lt;/span&gt;)&lt;/td&gt;
  4225. &lt;td align=&quot;right&quot;&gt;253°&lt;/td&gt;
  4226. &lt;td&gt; (W)&lt;/td&gt;
  4227. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;1562 mi&lt;/td&gt;
  4228. &lt;/tr&gt;
  4229. &lt;tr&gt;
  4230. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4231. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;DFW&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;32°53&#39;49&quot;N 97°02&#39;17&quot;W&lt;/span&gt;)&lt;/td&gt;
  4232. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;YVR&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;49°11&#39;38&quot;N 123°11&#39;04&quot;W&lt;/span&gt;)&lt;/td&gt;
  4233. &lt;td align=&quot;right&quot;&gt;317°&lt;/td&gt;
  4234. &lt;td&gt; (NW)&lt;/td&gt;
  4235. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;1754 mi&lt;/td&gt;
  4236. &lt;/tr&gt;
  4237. &lt;tr&gt;
  4238. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4239. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;YVR&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;49°11&#39;38&quot;N 123°11&#39;04&quot;W&lt;/span&gt;)&lt;/td&gt;
  4240. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;DFW&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;32°53&#39;49&quot;N 97°02&#39;17&quot;W&lt;/span&gt;)&lt;/td&gt;
  4241. &lt;td align=&quot;right&quot;&gt;120°&lt;/td&gt;
  4242. &lt;td&gt; (SE)&lt;/td&gt;
  4243. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;1754 mi&lt;/td&gt;
  4244. &lt;/tr&gt;
  4245. &lt;tr&gt;
  4246. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4247. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;DFW&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;32°53&#39;49&quot;N 97°02&#39;17&quot;W&lt;/span&gt;)&lt;/td&gt;
  4248. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4249. &lt;td align=&quot;right&quot;&gt;57°&lt;/td&gt;
  4250. &lt;td&gt; (NE)&lt;/td&gt;
  4251. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;1562 mi&lt;/td&gt;
  4252. &lt;/tr&gt;
  4253. &lt;tr&gt;
  4254. &lt;td nowrap=&quot;nowrap&quot; colspan=&quot;2&quot;&gt;4 segment path:&lt;/td&gt;
  4255. &lt;td nowrap=&quot;nowrap&quot;&gt; &lt;/td&gt;
  4256. &lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;
  4257. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;6991 mi&lt;/td&gt;
  4258. &lt;/tr&gt;
  4259. &lt;tr&gt;
  4260. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4261. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4262. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;LHR&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;51°28&#39;39&quot;N 00°27&#39;41&quot;W&lt;/span&gt;)&lt;/td&gt;
  4263. &lt;td align=&quot;right&quot;&gt;53°&lt;/td&gt;
  4264. &lt;td&gt; (NE)&lt;/td&gt;
  4265. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;3265 mi&lt;/td&gt;
  4266. &lt;/tr&gt;
  4267. &lt;tr&gt;
  4268. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4269. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;LHR&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;51°28&#39;39&quot;N 00°27&#39;41&quot;W&lt;/span&gt;)&lt;/td&gt;
  4270. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;AMS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;52°18&#39;31&quot;N 04°45&#39;50&quot;E&lt;/span&gt;)&lt;/td&gt;
  4271. &lt;td align=&quot;right&quot;&gt;73°&lt;/td&gt;
  4272. &lt;td&gt; (E)&lt;/td&gt;
  4273. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;231 mi&lt;/td&gt;
  4274. &lt;/tr&gt;
  4275. &lt;tr&gt;
  4276. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4277. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;AMS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;52°18&#39;31&quot;N 04°45&#39;50&quot;E&lt;/span&gt;)&lt;/td&gt;
  4278. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;LHR&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;51°28&#39;39&quot;N 00°27&#39;41&quot;W&lt;/span&gt;)&lt;/td&gt;
  4279. &lt;td align=&quot;right&quot;&gt;257°&lt;/td&gt;
  4280. &lt;td&gt; (W)&lt;/td&gt;
  4281. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;231 mi&lt;/td&gt;
  4282. &lt;/tr&gt;
  4283. &lt;tr&gt;
  4284. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4285. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;LHR&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;51°28&#39;39&quot;N 00°27&#39;41&quot;W&lt;/span&gt;)&lt;/td&gt;
  4286. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4287. &lt;td align=&quot;right&quot;&gt;288°&lt;/td&gt;
  4288. &lt;td&gt; (W)&lt;/td&gt;
  4289. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;3265 mi&lt;/td&gt;
  4290. &lt;/tr&gt;
  4291. &lt;tr&gt;
  4292. &lt;td nowrap=&quot;nowrap&quot; colspan=&quot;2&quot;&gt;2 segment path:&lt;/td&gt;
  4293. &lt;td nowrap=&quot;nowrap&quot;&gt; &lt;/td&gt;
  4294. &lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;
  4295. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;2709 mi&lt;/td&gt;
  4296. &lt;/tr&gt;
  4297. &lt;tr&gt;
  4298. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4299. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4300. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;YWG&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;49°54&#39;36&quot;N 97°14&#39;24&quot;W&lt;/span&gt;)&lt;/td&gt;
  4301. &lt;td align=&quot;right&quot;&gt;301°&lt;/td&gt;
  4302. &lt;td&gt; (NW)&lt;/td&gt;
  4303. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;1354 mi&lt;/td&gt;
  4304. &lt;/tr&gt;
  4305. &lt;tr&gt;
  4306. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4307. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;YWG&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;49°54&#39;36&quot;N 97°14&#39;24&quot;W&lt;/span&gt;)&lt;/td&gt;
  4308. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4309. &lt;td align=&quot;right&quot;&gt;102°&lt;/td&gt;
  4310. &lt;td&gt; (E)&lt;/td&gt;
  4311. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;1354 mi&lt;/td&gt;
  4312. &lt;/tr&gt;
  4313. &lt;tr&gt;
  4314. &lt;td nowrap=&quot;nowrap&quot; colspan=&quot;2&quot;&gt;2 segment path:&lt;/td&gt;
  4315. &lt;td nowrap=&quot;nowrap&quot;&gt; &lt;/td&gt;
  4316. &lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;
  4317. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;5175 mi&lt;/td&gt;
  4318. &lt;/tr&gt;
  4319. &lt;tr&gt;
  4320. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4321. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4322. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;SAN&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;32°44&#39;01&quot;N 117°11&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4323. &lt;td align=&quot;right&quot;&gt;270°&lt;/td&gt;
  4324. &lt;td&gt; (W)&lt;/td&gt;
  4325. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;2588 mi&lt;/td&gt;
  4326. &lt;/tr&gt;
  4327. &lt;tr&gt;
  4328. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4329. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;SAN&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;32°44&#39;01&quot;N 117°11&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4330. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4331. &lt;td align=&quot;right&quot;&gt;61°&lt;/td&gt;
  4332. &lt;td&gt; (NE)&lt;/td&gt;
  4333. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;2588 mi&lt;/td&gt;
  4334. &lt;/tr&gt;
  4335. &lt;tr&gt;
  4336. &lt;td nowrap=&quot;nowrap&quot; colspan=&quot;2&quot;&gt;4 segment path:&lt;/td&gt;
  4337. &lt;td nowrap=&quot;nowrap&quot;&gt; &lt;/td&gt;
  4338. &lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;
  4339. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;15978 mi&lt;/td&gt;
  4340. &lt;/tr&gt;
  4341. &lt;tr&gt;
  4342. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4343. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4344. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;DFW&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;32°53&#39;49&quot;N 97°02&#39;17&quot;W&lt;/span&gt;)&lt;/td&gt;
  4345. &lt;td align=&quot;right&quot;&gt;253°&lt;/td&gt;
  4346. &lt;td&gt; (W)&lt;/td&gt;
  4347. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;1562 mi&lt;/td&gt;
  4348. &lt;/tr&gt;
  4349. &lt;tr&gt;
  4350. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4351. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;DFW&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;32°53&#39;49&quot;N 97°02&#39;17&quot;W&lt;/span&gt;)&lt;/td&gt;
  4352. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;NRT&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;35°45&#39;53&quot;N 140°23&#39;11&quot;E&lt;/span&gt;)&lt;/td&gt;
  4353. &lt;td align=&quot;right&quot;&gt;316°&lt;/td&gt;
  4354. &lt;td&gt; (NW)&lt;/td&gt;
  4355. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;6427 mi&lt;/td&gt;
  4356. &lt;/tr&gt;
  4357. &lt;tr&gt;
  4358. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4359. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;NRT&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;35°45&#39;53&quot;N 140°23&#39;11&quot;E&lt;/span&gt;)&lt;/td&gt;
  4360. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;DFW&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;32°53&#39;49&quot;N 97°02&#39;17&quot;W&lt;/span&gt;)&lt;/td&gt;
  4361. &lt;td align=&quot;right&quot;&gt;45°&lt;/td&gt;
  4362. &lt;td&gt; (NE)&lt;/td&gt;
  4363. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;6427 mi&lt;/td&gt;
  4364. &lt;/tr&gt;
  4365. &lt;tr&gt;
  4366. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4367. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;DFW&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;32°53&#39;49&quot;N 97°02&#39;17&quot;W&lt;/span&gt;)&lt;/td&gt;
  4368. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4369. &lt;td align=&quot;right&quot;&gt;57°&lt;/td&gt;
  4370. &lt;td&gt; (NE)&lt;/td&gt;
  4371. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;1562 mi&lt;/td&gt;
  4372. &lt;/tr&gt;
  4373. &lt;tr&gt;
  4374. &lt;td nowrap=&quot;nowrap&quot; colspan=&quot;2&quot;&gt;4 segment path:&lt;/td&gt;
  4375. &lt;td nowrap=&quot;nowrap&quot;&gt; &lt;/td&gt;
  4376. &lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;
  4377. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;7978 mi&lt;/td&gt;
  4378. &lt;/tr&gt;
  4379. &lt;tr&gt;
  4380. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4381. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4382. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;LON&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;51°30&#39;N 00°10&#39;W&lt;/span&gt;)&lt;/td&gt;
  4383. &lt;td align=&quot;right&quot;&gt;53°&lt;/td&gt;
  4384. &lt;td&gt; (NE)&lt;/td&gt;
  4385. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;3276 mi&lt;/td&gt;
  4386. &lt;/tr&gt;
  4387. &lt;tr&gt;
  4388. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4389. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;LON&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;51°30&#39;N 00°10&#39;W&lt;/span&gt;)&lt;/td&gt;
  4390. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BCN&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;41°17&#39;49&quot;N 02°04&#39;42&quot;E&lt;/span&gt;)&lt;/td&gt;
  4391. &lt;td align=&quot;right&quot;&gt;170°&lt;/td&gt;
  4392. &lt;td&gt; (S)&lt;/td&gt;
  4393. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;713 mi&lt;/td&gt;
  4394. &lt;/tr&gt;
  4395. &lt;tr&gt;
  4396. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4397. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BCN&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;41°17&#39;49&quot;N 02°04&#39;42&quot;E&lt;/span&gt;)&lt;/td&gt;
  4398. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;LON&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;51°30&#39;N 00°10&#39;W&lt;/span&gt;)&lt;/td&gt;
  4399. &lt;td align=&quot;right&quot;&gt;352°&lt;/td&gt;
  4400. &lt;td&gt; (N)&lt;/td&gt;
  4401. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;713 mi&lt;/td&gt;
  4402. &lt;/tr&gt;
  4403. &lt;tr&gt;
  4404. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4405. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;LON&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;51°30&#39;N 00°10&#39;W&lt;/span&gt;)&lt;/td&gt;
  4406. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4407. &lt;td align=&quot;right&quot;&gt;288°&lt;/td&gt;
  4408. &lt;td&gt; (W)&lt;/td&gt;
  4409. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;3276 mi&lt;/td&gt;
  4410. &lt;/tr&gt;
  4411. &lt;tr&gt;
  4412. &lt;td nowrap=&quot;nowrap&quot; colspan=&quot;2&quot;&gt;4 segment path:&lt;/td&gt;
  4413. &lt;td nowrap=&quot;nowrap&quot;&gt; &lt;/td&gt;
  4414. &lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;
  4415. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;5212 mi&lt;/td&gt;
  4416. &lt;/tr&gt;
  4417. &lt;tr&gt;
  4418. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4419. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4420. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;ORD&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;41°58&#39;43&quot;N 87°54&#39;17&quot;W&lt;/span&gt;)&lt;/td&gt;
  4421. &lt;td align=&quot;right&quot;&gt;273°&lt;/td&gt;
  4422. &lt;td&gt; (W)&lt;/td&gt;
  4423. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;867 mi&lt;/td&gt;
  4424. &lt;/tr&gt;
  4425. &lt;tr&gt;
  4426. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4427. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;ORD&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;41°58&#39;43&quot;N 87°54&#39;17&quot;W&lt;/span&gt;)&lt;/td&gt;
  4428. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;PDX&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;45°35&#39;19&quot;N 122°35&#39;51&quot;W&lt;/span&gt;)&lt;/td&gt;
  4429. &lt;td align=&quot;right&quot;&gt;290°&lt;/td&gt;
  4430. &lt;td&gt; (W)&lt;/td&gt;
  4431. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;1739 mi&lt;/td&gt;
  4432. &lt;/tr&gt;
  4433. &lt;tr&gt;
  4434. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4435. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;PDX&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;45°35&#39;19&quot;N 122°35&#39;51&quot;W&lt;/span&gt;)&lt;/td&gt;
  4436. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;ORD&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;41°58&#39;43&quot;N 87°54&#39;17&quot;W&lt;/span&gt;)&lt;/td&gt;
  4437. &lt;td align=&quot;right&quot;&gt;85°&lt;/td&gt;
  4438. &lt;td&gt; (E)&lt;/td&gt;
  4439. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;1739 mi&lt;/td&gt;
  4440. &lt;/tr&gt;
  4441. &lt;tr&gt;
  4442. &lt;td width=&quot;8&quot;&gt; &lt;/td&gt;
  4443. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;ORD&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;41°58&#39;43&quot;N 87°54&#39;17&quot;W&lt;/span&gt;)&lt;/td&gt;
  4444. &lt;td nowrap=&quot;nowrap&quot;&gt;&lt;a href=&quot;;&gt;BOS&lt;/a&gt; (&lt;span class=&quot;smaller&quot;&gt;42°21&#39;47&quot;N 71°00&#39;23&quot;W&lt;/span&gt;)&lt;/td&gt;
  4445. &lt;td align=&quot;right&quot;&gt;82°&lt;/td&gt;
  4446. &lt;td&gt; (E)&lt;/td&gt;
  4447. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;867 mi&lt;/td&gt;
  4448. &lt;/tr&gt;
  4449. &lt;tr&gt;
  4450. &lt;td nowrap=&quot;nowrap&quot; height=&quot;8&quot;&gt; &lt;/td&gt;
  4451. &lt;/tr&gt;
  4452. &lt;tr&gt;
  4453. &lt;td nowrap=&quot;nowrap&quot; colspan=&quot;2&quot;&gt;Total:&lt;/td&gt;
  4454. &lt;td nowrap=&quot;nowrap&quot;&gt; &lt;/td&gt;
  4455. &lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;
  4456. &lt;td nowrap=&quot;nowrap&quot; align=&quot;right&quot;&gt;83226 mi&lt;/td&gt;
  4457. &lt;/tr&gt;
  4458. &lt;/tbody&gt;
  4459. &lt;/table&gt;
  4460. &lt;/td&gt;
  4461. &lt;/tr&gt;
  4462. &lt;/tbody&gt;
  4463. &lt;/table&gt;
  4464. </content>
  4465. </entry>
  4466. <entry>
  4467. <title>London. Breakfast. This Friday.</title>
  4468. <link href=""/>
  4469. <updated>2007-02-15T02:35:00Z</updated>
  4470. <id></id>
  4471. <content type="html">&lt;p&gt;Anyone up for breakfast in London at, say 9am somewhere in central london?&lt;/p&gt;
  4472. &lt;p&gt;(I&#39;ll post with a final location. But ping me with interest) &lt;/p&gt;
  4473. &lt;p&gt;&lt;b&gt;UPDATE&lt;/b&gt;: &lt;a href=&quot;;&gt;The Wolseley. 160 Piccadilly.&lt;/a&gt; 9am.&lt;/p&gt;
  4474. </content>
  4475. </entry>
  4476. <entry>
  4477. <title>I&#39;ve got 12 Hours in Hong Kong...</title>
  4478. <link href=""/>
  4479. <updated>2007-01-31T02:12:00Z</updated>
  4480. <id></id>
  4481. <content type="html">&lt;p&gt;...tomorrow.&amp;nbsp; What should I do? What should I eat? Where should I go? &lt;/p&gt;
  4482. &lt;p&gt;Help me Livejournal, you&#39;re my only hope.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
  4483. </content>
  4484. </entry>
  4485. <entry>
  4486. <title>Little green chickens</title>
  4487. <link href=""/>
  4488. <updated>2007-01-28T03:46:00Z</updated>
  4489. <id></id>
  4490. <content type="html">&lt;p&gt;Huh. They really do taste like chicken.&lt;/p&gt;
  4491. </content>
  4492. </entry>
  4493. <entry>
  4494. <title>A global truth</title>
  4495. <link href=""/>
  4496. <updated>2007-01-25T01:23:00Z</updated>
  4497. <id></id>
  4498. <content type="html">&lt;p&gt;I&#39;m in Taipei hanging out with Audrey at her new apartment. One of today&#39;s activities was furniture assembly. And, well. Now I know.&amp;nbsp; The instructions aren&#39;t any better in the native Chinese.&lt;/p&gt;
  4499. </content>
  4500. </entry>
  4501. <entry>
  4502. <title>Now with more LJ</title>
  4503. <link href=""/>
  4504. <updated>2007-01-05T10:54:00Z</updated>
  4505. <id></id>
  4506. <content type="html">&lt;p&gt;&lt;a href=&quot;;&gt;;/a&gt; got OpenId authentication today. That means that you can log in and ask questions or vote on others&#39; life decisions using your livejournal username. You don&#39;t have to create another password or verify your email address. C&#39;mon. help us run our lives.&lt;/p&gt;
  4507. &lt;p&gt;&lt;b&gt;If you already have an account, log in normally and click &lt;i&gt;Preferences&lt;/i&gt; to tie your openid to your account. Don&#39;t go create a second account&lt;/b&gt;&lt;/p&gt;
  4508. </content>
  4509. </entry>
  4510. <entry>
  4511. <title>Doxory</title>
  4512. <link href=""/>
  4513. <updated>2006-12-31T06:12:00Z</updated>
  4514. <id></id>
  4515. <content type="html">&lt;p&gt;A couple plane flights and a couple evenings later, I&#39;m ready to subject my greater-friendslist community to Doxory, the latest web app from Best Practical.&amp;nbsp; Doxory is a tool that helps you &quot;live by committee.&quot;&amp;nbsp; That is to say that it&#39;s a tool to let your friends run your life. Please, go play:&lt;/p&gt;
  4516. &lt;div align=&quot;center&quot;&gt;&lt;font size=&quot;6&quot;&gt;&lt;a href=&quot;;&gt;;/a&gt;&lt;/font&gt;&lt;/div&gt;
  4517. </content>
  4518. </entry>
  4519. <entry>
  4520. <title>Winter travel?</title>
  4521. <link href=""/>
  4522. <updated>2006-12-30T03:32:00Z</updated>
  4523. <id></id>
  4524. <content type="html">&lt;table width=&quot;100%&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; border=&quot;0&quot; class=&quot;dkblue&quot;&gt;
  4525. &lt;tbody&gt;
  4526. &lt;tr valign=&quot;middle&quot; style=&quot;background-color:rgb(255,255,255);&quot;&gt;
  4527. &lt;td align=&quot;center&quot; id=&quot;border_right&quot;&gt;
  4528. &lt;div class=&quot;modTxt&quot;&gt;&lt;img border=&quot;0&quot; alt=&quot;&quot; src=&quot;;&gt;&lt;/div&gt;
  4529. &lt;div class=&quot;modTxt&quot;&gt;AMERICAN AIRLINES&lt;/div&gt;
  4530. &lt;/td&gt;
  4531. &lt;td align=&quot;center&quot; id=&quot;border_right&quot;&gt;
  4532. &lt;div class=&quot;modTxt&quot;&gt;183&lt;/div&gt;
  4533. &lt;/td&gt;
  4534. &lt;td id=&quot;border_right&quot;&gt;
  4535. &lt;div class=&quot;modTxt&quot;&gt;BOS Boston&lt;/div&gt;
  4536. &lt;/td&gt;
  4537. &lt;td id=&quot;border_right&quot;&gt;
  4538. &lt;div class=&quot;modTxt&quot;&gt;01/21/2007 08:35&amp;nbsp;AM&lt;/div&gt;
  4539. &lt;/td&gt;
  4540. &lt;td id=&quot;border_right&quot;&gt;
  4541. &lt;div class=&quot;modTxt&quot;&gt;SFO San Francisco&lt;/div&gt;
  4542. &lt;/td&gt;
  4543. &lt;td id=&quot;border_right&quot;&gt;
  4544. &lt;div class=&quot;modTxt&quot;&gt;01/21/2007 12:15&amp;nbsp;PM&lt;/div&gt;
  4545. &lt;/td&gt;
  4546. &lt;td align=&quot;center&quot; id=&quot;border_right&quot;&gt;
  4547. &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot;&gt;
  4548. &lt;tbody&gt;
  4549. &lt;tr&gt;
  4550. &lt;td align=&quot;center&quot;&gt;
  4551. &lt;div class=&quot;regularText&quot;&gt;Economy&lt;/div&gt;
  4552. &lt;/td&gt;
  4553. &lt;/tr&gt;
  4554. &lt;tr class=&quot;dkblue&quot;&gt;
  4555. &lt;td align=&quot;center&quot;&gt;&amp;nbsp;&lt;/td&gt;
  4556. &lt;/tr&gt;
  4557. &lt;tr&gt;
  4558. &lt;td align=&quot;center&quot;&gt;
  4559. &lt;div class=&quot;regularText&quot;&gt;S&lt;/div&gt;
  4560. &lt;/td&gt;
  4561. &lt;/tr&gt;
  4562. &lt;/tbody&gt;
  4563. &lt;/table&gt;
  4564. &lt;/td&gt;
  4565. &lt;/tr&gt;
  4566. &lt;tr valign=&quot;middle&quot; style=&quot;background-color:rgb(255,255,255);&quot;&gt;
  4567. &lt;td align=&quot;center&quot; id=&quot;border_right&quot;&gt;
  4568. &lt;div class=&quot;modTxt&quot;&gt;&lt;img border=&quot;0&quot; alt=&quot;&quot; src=&quot;;&gt;&lt;/div&gt;
  4569. &lt;div class=&quot;modTxt&quot;&gt;AMERICAN AIRLINES&lt;/div&gt;
  4570. &lt;div style=&quot;padding-top:0;&quot; class=&quot;modTxt&quot;&gt;OPERATED BY EVA AIRWAYS&lt;/div&gt;
  4571. &lt;/td&gt;
  4572. &lt;td align=&quot;center&quot; id=&quot;border_right&quot;&gt;
  4573. &lt;div class=&quot;modTxt&quot;&gt;7961&lt;/div&gt;
  4574. &lt;/td&gt;
  4575. &lt;td id=&quot;border_right&quot;&gt;
  4576. &lt;div class=&quot;modTxt&quot;&gt;SFO San Francisco&lt;/div&gt;
  4577. &lt;/td&gt;
  4578. &lt;td id=&quot;border_right&quot;&gt;
  4579. &lt;div class=&quot;modTxt&quot;&gt;01/23/2007 12:10&amp;nbsp;AM&lt;/div&gt;
  4580. &lt;/td&gt;
  4581. &lt;td id=&quot;border_right&quot;&gt;
  4582. &lt;div class=&quot;modTxt&quot;&gt;TPE Taipei&lt;/div&gt;
  4583. &lt;/td&gt;
  4584. &lt;td id=&quot;border_right&quot;&gt;
  4585. &lt;div class=&quot;modTxt&quot;&gt;01/24/2007 06:00&amp;nbsp;AM&lt;/div&gt;
  4586. &lt;/td&gt;
  4587. &lt;td align=&quot;center&quot; id=&quot;border_right&quot;&gt;
  4588. &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot;&gt;
  4589. &lt;tbody&gt;
  4590. &lt;tr&gt;
  4591. &lt;td align=&quot;center&quot;&gt;
  4592. &lt;div class=&quot;regularText&quot;&gt;Economy&lt;/div&gt;
  4593. &lt;/td&gt;
  4594. &lt;/tr&gt;
  4595. &lt;tr class=&quot;dkblue&quot;&gt;
  4596. &lt;td align=&quot;center&quot;&gt;&amp;nbsp;&lt;/td&gt;
  4597. &lt;/tr&gt;
  4598. &lt;tr&gt;
  4599. &lt;td align=&quot;center&quot;&gt;
  4600. &lt;div class=&quot;regularText&quot;&gt;K&lt;/div&gt;
  4601. &lt;/td&gt;
  4602. &lt;/tr&gt;
  4603. &lt;/tbody&gt;
  4604. &lt;/table&gt;
  4605. &lt;/td&gt;
  4606. &lt;/tr&gt;
  4607. &lt;tr valign=&quot;middle&quot; style=&quot;background-color:rgb(255,255,255);&quot;&gt;
  4608. &lt;td align=&quot;center&quot; id=&quot;border_right_bottom&quot;&gt;
  4609. &lt;div class=&quot;modTxt&quot;&gt;&lt;img border=&quot;0&quot; alt=&quot;&quot; src=&quot;;&gt;&lt;/div&gt;
  4610. &lt;div class=&quot;modTxt&quot;&gt;CATHAY PACIFIC&lt;/div&gt;
  4611. &lt;/td&gt;
  4612. &lt;td align=&quot;center&quot; id=&quot;border_right_bottom&quot;&gt;
  4613. &lt;div class=&quot;modTxt&quot;&gt;403&lt;/div&gt;
  4614. &lt;/td&gt;
  4615. &lt;td id=&quot;border_right_bottom&quot;&gt;
  4616. &lt;div class=&quot;modTxt&quot;&gt;TPE Taipei&lt;/div&gt;
  4617. &lt;/td&gt;
  4618. &lt;td id=&quot;border_right_bottom&quot;&gt;
  4619. &lt;div class=&quot;modTxt&quot;&gt;01/31/2007 09:25&amp;nbsp;AM&lt;/div&gt;
  4620. &lt;/td&gt;
  4621. &lt;td id=&quot;border_right_bottom&quot;&gt;
  4622. &lt;div class=&quot;modTxt&quot;&gt;HKG Hong Kong&lt;/div&gt;
  4623. &lt;/td&gt;
  4624. &lt;td id=&quot;border_right_bottom&quot;&gt;
  4625. &lt;div class=&quot;modTxt&quot;&gt;01/31/2007 11:20&amp;nbsp;AM&lt;/div&gt;
  4626. &lt;/td&gt;
  4627. &lt;td align=&quot;center&quot; id=&quot;border_right_bottom&quot;&gt;
  4628. &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot;&gt;
  4629. &lt;tbody&gt;
  4630. &lt;tr&gt;
  4631. &lt;td align=&quot;center&quot;&gt;
  4632. &lt;div class=&quot;regularText&quot;&gt;Business&lt;/div&gt;
  4633. &lt;/td&gt;
  4634. &lt;/tr&gt;
  4635. &lt;tr class=&quot;dkblue&quot;&gt;
  4636. &lt;td align=&quot;center&quot;&gt;&amp;nbsp;&lt;/td&gt;
  4637. &lt;/tr&gt;
  4638. &lt;tr&gt;
  4639. &lt;td align=&quot;center&quot;&gt;
  4640. &lt;div class=&quot;regularText&quot;&gt;J&lt;/div&gt;
  4641. &lt;/td&gt;
  4642. &lt;/tr&gt;
  4643. &lt;/tbody&gt;
  4644. &lt;/table&gt;
  4645. &lt;/td&gt;
  4646. &lt;/tr&gt;
  4647. &lt;tr valign=&quot;middle&quot; style=&quot;background-color:rgb(255,255,255);&quot;&gt;
  4648. &lt;td align=&quot;center&quot; id=&quot;border_right&quot;&gt;
  4649. &lt;div class=&quot;modTxt&quot;&gt;&lt;img border=&quot;0&quot; alt=&quot;&quot; src=&quot;;&gt;&lt;/div&gt;
  4650. &lt;div class=&quot;modTxt&quot;&gt;CATHAY PACIFIC&lt;/div&gt;
  4651. &lt;/td&gt;
  4652. &lt;td align=&quot;center&quot; id=&quot;border_right&quot;&gt;
  4653. &lt;div class=&quot;modTxt&quot;&gt;107&lt;/div&gt;
  4654. &lt;/td&gt;
  4655. &lt;td id=&quot;border_right&quot;&gt;
  4656. &lt;div class=&quot;modTxt&quot;&gt;HKG Hong Kong&lt;/div&gt;
  4657. &lt;/td&gt;
  4658. &lt;td id=&quot;border_right&quot;&gt;
  4659. &lt;div class=&quot;modTxt&quot;&gt;01/31/2007 09:05&amp;nbsp;PM&lt;/div&gt;
  4660. &lt;/td&gt;
  4661. &lt;td id=&quot;border_right&quot;&gt;
  4662. &lt;div class=&quot;modTxt&quot;&gt;AKL Auckland&lt;/div&gt;
  4663. &lt;/td&gt;
  4664. &lt;td id=&quot;border_right&quot;&gt;
  4665. &lt;div class=&quot;modTxt&quot;&gt;02/01/2007 01:05&amp;nbsp;PM&lt;/div&gt;
  4666. &lt;/td&gt;
  4667. &lt;td align=&quot;center&quot; id=&quot;border_right&quot;&gt;
  4668. &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot;&gt;
  4669. &lt;tbody&gt;
  4670. &lt;tr&gt;
  4671. &lt;td align=&quot;center&quot;&gt;
  4672. &lt;div class=&quot;regularText&quot;&gt;Business&lt;/div&gt;
  4673. &lt;/td&gt;
  4674. &lt;/tr&gt;
  4675. &lt;tr class=&quot;dkblue&quot;&gt;
  4676. &lt;td align=&quot;center&quot;&gt;&amp;nbsp;&lt;/td&gt;
  4677. &lt;/tr&gt;
  4678. &lt;tr&gt;
  4679. &lt;td align=&quot;center&quot;&gt;
  4680. &lt;div class=&quot;regularText&quot;&gt;J&lt;/div&gt;
  4681. &lt;/td&gt;
  4682. &lt;/tr&gt;
  4683. &lt;/tbody&gt;
  4684. &lt;/table&gt;
  4685. &lt;/td&gt;
  4686. &lt;/tr&gt;
  4687. &lt;tr valign=&quot;middle&quot; style=&quot;background-color:rgb(255,255,255);&quot;&gt;
  4688. &lt;td align=&quot;center&quot; id=&quot;border_right_bottom&quot;&gt;
  4689. &lt;div class=&quot;modTxt&quot;&gt;&lt;img border=&quot;0&quot; alt=&quot;&quot; src=&quot;;&gt;&lt;/div&gt;
  4690. &lt;div class=&quot;modTxt&quot;&gt;AMERICAN AIRLINES&lt;/div&gt;
  4691. &lt;div style=&quot;padding-top:0;&quot; class=&quot;modTxt&quot;&gt;OPERATED BY QANTAS AIRWAYS&lt;/div&gt;
  4692. &lt;/td&gt;
  4693. &lt;td align=&quot;center&quot; id=&quot;border_right_bottom&quot;&gt;
  4694. &lt;div class=&quot;modTxt&quot;&gt;7315&lt;/div&gt;
  4695. &lt;/td&gt;
  4696. &lt;td id=&quot;border_right_bottom&quot;&gt;
  4697. &lt;div class=&quot;modTxt&quot;&gt;AKL Auckland&lt;/div&gt;
  4698. &lt;/td&gt;
  4699. &lt;td id=&quot;border_right_bottom&quot;&gt;
  4700. &lt;div class=&quot;modTxt&quot;&gt;02/07/2007 07:40&amp;nbsp;PM&lt;/div&gt;
  4701. &lt;/td&gt;
  4702. &lt;td id=&quot;border_right_bottom&quot;&gt;
  4703. &lt;div class=&quot;modTxt&quot;&gt;LAX Los Angeles&lt;/div&gt;
  4704. &lt;/td&gt;
  4705. &lt;td id=&quot;border_right_bottom&quot;&gt;
  4706. &lt;div class=&quot;modTxt&quot;&gt;02/07/2007 10:30&amp;nbsp;AM&lt;/div&gt;
  4707. &lt;/td&gt;
  4708. &lt;td align=&quot;center&quot; id=&quot;border_right_bottom&quot;&gt;
  4709. &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot;&gt;
  4710. &lt;tbody&gt;
  4711. &lt;tr&gt;
  4712. &lt;td align=&quot;center&quot;&gt;
  4713. &lt;div class=&quot;regularText&quot;&gt;Economy&lt;/div&gt;
  4714. &lt;/td&gt;
  4715. &lt;/tr&gt;
  4716. &lt;tr class=&quot;dkblue&quot;&gt;
  4717. &lt;td align=&quot;center&quot;&gt;&amp;nbsp;&lt;/td&gt;
  4718. &lt;/tr&gt;
  4719. &lt;tr&gt;
  4720. &lt;td align=&quot;center&quot;&gt;
  4721. &lt;div class=&quot;regularText&quot;&gt;V&lt;/div&gt;
  4722. &lt;/td&gt;
  4723. &lt;/tr&gt;
  4724. &lt;/tbody&gt;
  4725. &lt;/table&gt;
  4726. &lt;/td&gt;
  4727. &lt;/tr&gt;
  4728. &lt;tr valign=&quot;middle&quot; style=&quot;background-color:rgb(255,255,255);&quot;&gt;
  4729. &lt;td align=&quot;center&quot; id=&quot;border_right&quot;&gt;
  4730. &lt;div class=&quot;modTxt&quot;&gt;&lt;img border=&quot;0&quot; alt=&quot;&quot; src=&quot;;&gt;&lt;/div&gt;
  4731. &lt;div class=&quot;modTxt&quot;&gt;AMERICAN AIRLINES&lt;/div&gt;
  4732. &lt;/td&gt;
  4733. &lt;td align=&quot;center&quot; id=&quot;border_right&quot;&gt;
  4734. &lt;div class=&quot;modTxt&quot;&gt;264&lt;/div&gt;
  4735. &lt;/td&gt;
  4736. &lt;td id=&quot;border_right&quot;&gt;
  4737. &lt;div class=&quot;modTxt&quot;&gt;LAX Los Angeles&lt;/div&gt;
  4738. &lt;/td&gt;
  4739. &lt;td id=&quot;border_right&quot;&gt;
  4740. &lt;div class=&quot;modTxt&quot;&gt;02/07/2007 12:50&amp;nbsp;PM&lt;/div&gt;
  4741. &lt;/td&gt;
  4742. &lt;td id=&quot;border_right&quot;&gt;
  4743. &lt;div class=&quot;modTxt&quot;&gt;BOS Boston&lt;/div&gt;
  4744. &lt;/td&gt;
  4745. &lt;td id=&quot;border_right&quot;&gt;
  4746. &lt;div class=&quot;modTxt&quot;&gt;02/07/2007 09:15&amp;nbsp;PM&lt;/div&gt;
  4747. &lt;/td&gt;
  4748. &lt;td align=&quot;center&quot; id=&quot;border_right&quot;&gt;
  4749. &lt;table cellspacing=&quot;0&quot; cellpadding=&quot;0&quot; border=&quot;0&quot;&gt;
  4750. &lt;tbody&gt;
  4751. &lt;tr&gt;
  4752. &lt;td align=&quot;center&quot;&gt;
  4753. &lt;div class=&quot;regularText&quot;&gt;Economy&lt;/div&gt;
  4754. &lt;/td&gt;
  4755. &lt;/tr&gt;
  4756. &lt;tr class=&quot;dkblue&quot;&gt;
  4757. &lt;td align=&quot;center&quot;&gt;&amp;nbsp;&lt;/td&gt;
  4758. &lt;/tr&gt;
  4759. &lt;tr&gt;
  4760. &lt;td align=&quot;center&quot;&gt;
  4761. &lt;div class=&quot;regularText&quot;&gt;S&lt;/div&gt;
  4762. &lt;/td&gt;
  4763. &lt;/tr&gt;
  4764. &lt;/tbody&gt;
  4765. &lt;/table&gt;
  4766. &lt;/td&gt;
  4767. &lt;/tr&gt;
  4768. &lt;/tbody&gt;
  4769. &lt;/table&gt;
  4770. </content>
  4771. </entry>
  4772. <entry>
  4773. <title>Agressively not-even-beta</title>
  4774. <link href=""/>
  4775. <updated>2006-12-26T08:35:00Z</updated>
  4776. <id></id>
  4777. <content type="html">&lt;p&gt;&lt;a href=&quot;;&gt;Doxory&lt;/a&gt; is the new toy I mentioned the other day. It&#39;s basically a tool to help you make the hard decisions in letting your friends dictate your actions. The flipside, of course, is that you get to run the show for your friends (and total strangers).&amp;nbsp; Sign up now to get a good username ;)&lt;/p&gt;
  4778. </content>
  4779. </entry>
  4780. <entry>
  4781. <title>Our next project</title>
  4782. <link href=""/>
  4783. <updated>2006-12-23T07:44:00Z</updated>
  4784. <id></id>
  4785. <content type="html">&lt;p&gt;Doxory.&amp;nbsp; &lt;/p&gt;
  4786. &lt;p&gt;Current beta users are sworn to secrecy.&lt;/p&gt;
  4787. </content>
  4788. </entry>
  4789. <entry>
  4790. <title>NYE at 23i</title>
  4791. <link href=""/>
  4792. <updated>2006-12-19T06:34:00Z</updated>
  4793. <id></id>
  4794. <content type="html">&lt;p&gt;Jesse, Kaia, Jennifer and Chris would like to invite you to join us to celebrate New Year&#39;s Eve...So, please join us to celebrate New Year&#39;s Eve!&lt;/p&gt;
  4795. &lt;p&gt;We&#39;ll provide snacks, likker, non-likker beverages, and lots of people, of both the &quot;attractive&quot; sort and the &quot;interesting&quot; sort.&lt;/p&gt;
  4796. &lt;p&gt;You can find us at 23 Ibbetson St, Somerville. (Ibbetson is off Somerville Ave across from the car wash. The Pet Spa is on the corner. Our house has a big pine tree in lieu of a front yard.)&lt;/p&gt;
  4797. &lt;p&gt;The party will run from 7pm until...Well, let&#39;s just say that the last guests usually get a home-cooked brunch. If you&#39;re really lucky, you&#39;ll get mimosas. The first guests will likely be drafted to help with last-minute setup. In exchange, we&#39;ll ply you with snacks and good alcohol.&lt;/p&gt;
  4798. &lt;p&gt;Please feel free to bring your date, entourage, harem or kid brother, but be aware that our house isn&#39;t child-proof and is home to a fluffy ball of allergens.&lt;/p&gt;
  4799. &lt;p&gt;While we have many comfortable horizontal surfaces, crash space will be allocated on a best plea or story basis, so be sure to be clever when reserving.&lt;/p&gt;
  4800. &lt;p&gt;RSVPs are much appreciated but are by no means necessary.&lt;/p&gt;
  4801. </content>
  4802. </entry>
  4803. <entry>
  4804. <title>San Francisco: Tapas. 8pm. Tonight</title>
  4805. <link href=""/>
  4806. <updated>2006-12-15T22:08:00Z</updated>
  4807. <id></id>
  4808. <content type="html">&lt;p&gt;Come meet me at &lt;a href=&quot;;&gt;Cha cha cha&lt;/a&gt; (on Mission). Come have tapas. And Sangria.&lt;/p&gt;
  4809. </content>
  4810. </entry>
  4811. <entry>
  4812. <title>Been away so long I hardly knew the place...</title>
  4813. <link href=""/>
  4814. <updated>2006-12-14T07:06:00Z</updated>
  4815. <id></id>
  4816. <content type="html">&lt;p&gt;Last night I did something not atypical for someone of my age. I bought some music online. I used an online merchant of some notoriety and slightly ill repute. They&#39;re called &quot;; and they&#39;re located in Russia.&amp;nbsp; Because they operate slightly outside of US law (for the moment), they get to do things that the the more online players don&#39;t get to do. One of these things is to distribute music that the rights-holders haven&#39;t&amp;nbsp; explicitly agreed to.&amp;nbsp; That means they&#39;re able to offer me music that others can&#39;t. Like the Beatles&#39; catalog. &lt;/p&gt;
  4817. &lt;p&gt;Last night, I paid for and downloaded &quot;Love&quot;, the new Beatles mashup album. It cost me half of what it would have cost to get the album from and less than a third of what the chain cafe was selling it for down the street.&amp;nbsp; 25 years ago, people in Russia were quietly distributing illegal home-made &quot;samizdat&quot; recordings of the White Album on repurposed chest X-rays. Now they&#39;re actively&amp;nbsp; and publicly flaunting the law and the international business community. They take credit cards. &lt;/p&gt;
  4818. &lt;p&gt;MP3 downloads aren&#39;t quite as stylish as proof that Dima has been slowly smoking himself to death, but Russia sure has come a long way.&amp;nbsp;&lt;/p&gt;
  4819. </content>
  4820. </entry>
  4821. <entry>
  4822. <title>San Francisco, Friday Night.</title>
  4823. <link href=""/>
  4824. <updated>2006-12-13T22:57:00Z</updated>
  4825. <id></id>
  4826. <content type="html">&lt;p&gt;Would people be up for doing something. Maybe dinner? Maybe something after dinner?&lt;/p&gt;
  4827. </content>
  4828. </entry>
  4829. <entry>
  4830. <title>First Post. Fear.</title>
  4831. <link href=""/>
  4832. <updated>2006-12-03T12:37:00Z</updated>
  4833. <id></id>
  4834. <content type="html">&lt;p&gt;&lt;a href=&quot;;&gt;my first usenet post&lt;/a&gt;. I was only 16. I didn&#39;t know any better!&lt;/p&gt;
  4835. </content>
  4836. </entry>
  4837. <entry>
  4838. <title>An untitled post</title>
  4839. <link href=""/>
  4840. <updated>2006-11-18T14:11:00Z</updated>
  4841. <id></id>
  4842. <content type="html">&lt;p&gt;Thanks to &lt;a href=&quot;; class=&quot;lj-user&quot;&gt;crucially&lt;/a&gt;, I ended up at dinner with Quinn Norton and Danny O&#39;Brien (and Ada, their little one).  Danny mentioned an absolutely fantastic feature I must add to Hiveminder, but this textarea is too small to adequately describe it.&lt;/p&gt;
  4843. </content>
  4844. </entry>
  4845. <entry>
  4846. <title>If it happens, the Linden IPO is going to be the Apex of Boom 2.0.</title>
  4847. <link href=""/>
  4848. <updated>2006-10-16T21:05:00Z</updated>
  4849. <id></id>
  4850. <content type="html">&lt;p&gt;&quot;A friend of mine comes home every night from her job as a waitress and then logs on to Second Life to work her job as a Second Life waitress.&quot; -source witheld.&lt;/p&gt;
  4851. </content>
  4852. </entry>
  4853. <entry>
  4854. <title>What you should be doing tonight</title>
  4855. <link href=""/>
  4856. <updated>2006-10-08T05:11:00Z</updated>
  4857. <id></id>
  4858. <content type="html">&lt;p&gt;&lt;a href=&quot;;&gt;Say hi to your mom&lt;/a&gt; is playing at &lt;a href=&quot;;&gt;PA&#39;s Lounge&lt;/a&gt; in Union Square.&lt;/p&gt;
  4859. &lt;p&gt;I&#39;d never heard of them 72 hours. I&#39;ve basically had them on repeat for the last 71 hours.&lt;/p&gt;
  4860. &lt;p&gt;Doors at 8:30. 18+.&lt;/p&gt;
  4861. </content>
  4862. </entry>
  4863. <entry>
  4864. <title>Dim Sum?</title>
  4865. <link href=""/>
  4866. <updated>2006-09-02T19:03:00Z</updated>
  4867. <id></id>
  4868. <content type="html">&lt;p&gt;Would people be up for Dim Sum tomorrow? Maybe Noon at China Pearl?&lt;/p&gt;
  4869. </content>
  4870. </entry>
  4871. <entry>
  4872. <title>Pony: Obtained</title>
  4873. <link href=""/>
  4874. <updated>2006-08-24T04:40:00Z</updated>
  4875. <id></id>
  4876. <content type="html">&lt;p&gt;8:30 PM: From jesse:  I think what I want is.  hm.  I want a new lemonheads album&lt;/p&gt;
  4877. &lt;p&gt;8:31 PM: From rax: I don&#39;t think I can give you another Lemonheads album.&lt;/p&gt;
  4878. &lt;p&gt;8:36 PM: [ &quot;What the hell, I&#39;ll google for it again&quot; ]&lt;/p&gt;
  4879. &lt;p&gt;8:37 PM: I find;/p&gt;
  4880. &lt;p&gt;The new album comes out September 26.&lt;/p&gt;
  4881. &lt;p&gt;Since I don&#39;t know well enough to quit while I&#39;m ahead, I&#39;ll take a new Sleeper, Elastica or Too Much Joy album too.&lt;/p&gt;
  4882. </content>
  4883. </entry>
  4884. <entry>
  4885. <title>Ponie: Dead</title>
  4886. <link href=""/>
  4887. <updated>2006-08-24T00:23:00Z</updated>
  4888. <id></id>
  4889. <content type="html">&lt;p&gt;I now actually feel like the Perl 6 project manager. I&#39;ve just axed a project that antedated me.&lt;/p&gt;
  4890. </content>
  4891. </entry>
  4892. <entry>
  4893. <title>London, Brussels</title>
  4894. <link href=""/>
  4895. <updated>2006-08-22T05:49:00Z</updated>
  4896. <id></id>
  4897. <content type="html">&lt;p&gt;I&#39;ll be in London from 8 Sept to 17 Sept, in Brussels from 17 Sept to 21 Sept and back in London until the 24th. I&#39;ll be working all this time, but aside from 18-21 September, have few client commitments.  What should I be doing whilst there?&lt;/p&gt;
  4898. </content>
  4899. </entry>
  4900. <entry>
  4901. <title>Did I loan you my IBM Portable Keyboard?</title>
  4902. <link href=""/>
  4903. <updated>2006-08-16T22:30:00Z</updated>
  4904. <id></id>
  4905. <content type="html">&lt;p&gt;It&#39;s missing. I have a sneaking suspicion I loaned it to someone.&lt;/p&gt;
  4906. &lt;p&gt;Thanks&lt;/p&gt;
  4907. </content>
  4908. </entry>
  4909. <entry>
  4910. <title>So I got a blackberry.</title>
  4911. <link href=""/>
  4912. <updated>2006-08-16T07:55:00Z</updated>
  4913. <id></id>
  4914. <content type="html">&lt;p&gt;Yesterday, I spent O(2 hours) on the phone with them to figure out why I couldn&#39;t ssh out. Turns out that the default APN isn&#39;t set to, so non mail/http connections fail.  What T-Mobile told me was &quot;RIM blocked port 22 because end-users were using that port to download third party software that voided the device warranty.&quot;  RIM set me straight (and claims that they&#39;d never block a port on customers. Especially not SSH, which their customers _use_.) &lt;/p&gt;
  4915. &lt;p&gt;Tonight, I&#39;ve spent 4.5 hours on the phone with T-Mobile and RIM because the device...stopped being able to send or receive email. After three first-tier T-Mobile engineers and two second-tier T-Mobile engineers, I finally got bounced to RIM. Their first tier technician seems to be focusing on &quot;oh. it must be your mail server&quot; although it worked until 6:30 this evening just fine. And other IMAP clients work fine. The latest gem:&lt;/p&gt;
  4916. &lt;blockquote&gt;&lt;p&gt;&lt;tt&gt;&lt;br&gt;
  4917. Hello Jesse,                                                                                                                                            &lt;/tt&gt;&lt;/p&gt;
  4918. &lt;p&gt;Thank you for contacting BlackBerry Technical Support. In order to determine&lt;br&gt;
  4919. why the integrated account is unable to receive email messages, I will&lt;br&gt;
  4920. require additional information:                                                                                                                         &lt;/p&gt;
  4921. &lt;p&gt;1) Please provide the login information for the integrated account  for us to further investigate the issue.                  &lt;/p&gt;
  4922. &lt;p&gt;Account type: (Example: POP, IMAP or Outlook Web Access 2000 account)&lt;br&gt;
  4923. Mail Server name: (Example:;br&gt;
  4924. Username:&lt;br&gt;
  4925. Password:                                                                                                                                               &lt;/p&gt;
  4926. &lt;p&gt;2) How many messages are in the Inbox folder of the account ?                                                                 &lt;/p&gt;
  4927. &lt;p&gt;If the message count is greater than 1000 messages, the end user would need to move messages to&lt;br&gt;
  4928. a subfolder.                                            &lt;/p&gt;
  4929. &lt;p&gt;Please reply to this message, including your Service Request number as it appears above..                                                               &lt;/p&gt;
  4930. &lt;p&gt;I am looking forward for your reply.                                                                                                                    &lt;/p&gt;
  4931. &lt;p&gt;Sincerely,                                                                                                                                              &lt;/p&gt;
  4932. &lt;p&gt;Mohamad&lt;br&gt;
  4933. BlackBerry Technical Support&lt;br&gt;
  4934. Research In Motion Limited&lt;br&gt;
  4935. Tel: 1-877-255-2377&lt;br&gt;
  4936. Email:;br&gt;
  4937. Web:;br&gt;
  4938. &lt;/p&gt;&lt;/blockquote&gt;
  4939. </content>
  4940. </entry>
  4941. <entry>
  4942. <title>Hiveminder Launch Party [Friday 9pm!]</title>
  4943. <link href=""/>
  4944. <updated>2006-08-08T08:20:00Z</updated>
  4945. <id></id>
  4946. <content type="html">&lt;p&gt;It&#39;s Alive! After um. more than a year of on-and-off development, we&#39;re quite pleased to announce the public debut of;/p&gt;
  4947. &lt;p&gt;And, well, what would a Launch be without a Launch Party.  This Friday evening, please join us at Best Practical Solutions Total World Domination Headquarters in scenic Davis Sq, Somerville to celebrate. We&#39;re located on the scond floor of 408 Highland Ave near the end of the hall.&lt;/p&gt;
  4948. &lt;p&gt;Best Practical will be providing a bit to eat and drink, but we&#39;re not venture funded, so we&#39;re not going to be able to offer you gold-plated tshirts or complimentary Hiveminder MacBook Pros.&lt;/p&gt;
  4949. &lt;p&gt;This event isn&#39;t open to the public, but if you&#39;re a friend of someone at Best Practical (or part of a friend&#39;s entourage), we&#39;d love to see you on Friday evening.&lt;/p&gt;
  4950. &lt;p&gt;RSVPs aren&#39;t necessary, but sending a note to would be much appreciated so we know how food and beer to buy.&lt;/p&gt;
  4951. &lt;p&gt;Your friends at Best Practical&lt;/p&gt;
  4952. </content>
  4953. </entry>
  4954. <entry>
  4955. <title>Get busy!</title>
  4956. <link href=""/>
  4957. <updated>2006-08-07T19:56:00Z</updated>
  4958. <id></id>
  4959. <content type="html">&lt;p&gt;&lt;img src=&quot;;&gt;&lt;/p&gt;
  4960. &lt;p&gt;We&#39;ve just launched &lt;a href=&quot;;&gt;Hiveminder&lt;/a&gt;, a shared todo list service.  Hiveminder makes it easy to keep track of everything you need to do and to share tasks with the people you love (and those you just need to do things for you.) You can assign tasks to anyone who has an email address. They don&#39;t even have to sign up for an account.&lt;/p&gt;
  4961. &lt;p&gt;You can defer tasks until tomorrow, next week or next year, with a click of your mouse. &quot;But first&quot; and &quot;and then&quot; links on every task make it easy to, to model complex projects.&lt;/p&gt;
  4962. &lt;p&gt;We wouldn&#39;t be Web 2.0&amp;trade; compliant if we didn&#39;t let you tag each task with useful keywords.&lt;/p&gt;
  4963. &lt;p&gt;Groups let you share tasks with a set of friends or coworkers (and help keep work out of your way when you&#39;re getting stuff done at home).&lt;/p&gt;
  4964. &lt;p&gt;We&#39;ll be rolling out paid premium services later this year, but basic accounts will always be free.&lt;/p&gt;
  4965. &lt;p&gt;Come &lt;a href=&quot;;&gt;take a tour and sign up for an account&lt;/a&gt;&lt;/p&gt;
  4966. </content>
  4967. </entry>
  4968. <entry>
  4969. <title>It&#39;s Alive.</title>
  4970. <link href=""/>
  4971. <updated>2006-08-05T03:13:00Z</updated>
  4972. <id></id>
  4973. <content type="html">&lt;p&gt;We launched &lt;a href=&quot;;&gt;Hiveminder&lt;/a&gt; today. We&#39;ll start making noise on Monday, but if you&#39;ve been wondering about what I&#39;ve been working on, then by all means check it out.&lt;/p&gt;
  4974. &lt;p&gt;In the words of Jason, who&#39;s been doing some of our marketing:&lt;/p&gt;
  4975. &lt;p&gt;Best Practical Solutions is proud to announce the debut of its most recent step in their plans for world domination, Hiveminder.  Hiveminder is a webservice that helps you keep track of all of your to do lists in one convenient place. It&#39;s easy to make new lists quickly or to share tasks with anyone in your hive of friends, family, and co-workers. Hiveminder makes it easy to see only the tasks you&#39;re looking for and to sync your lists with your life. Whether you&#39;re planning your honeymoon, streamlining your business, or just trying to make it through the semester, Hiveminder has the tools you need to get busy!&lt;/p&gt;
  4976. </content>
  4977. </entry>
  4978. <entry>
  4979. <title>Getting tshirts printed _quickly_ in Portland OR?</title>
  4980. <link href=""/>
  4981. <updated>2006-07-22T19:11:00Z</updated>
  4982. <id></id>
  4983. <content type="html">&lt;p&gt;Anybody out there have a resource for getting 20-50 single-color printed tshirts turned around in 3-4 days? I have...something I have to do.&lt;/p&gt;
  4984. </content>
  4985. </entry>
  4986. <entry>
  4987. <title>Posted using LJTalk...</title>
  4988. <link href=""/>
  4989. <updated>2006-07-10T17:53:00Z</updated>
  4990. <id></id>
  4991. <content type="html">&lt;p&gt;I suspect &quot;post by bot&quot; is going to lead to an awful lot of 1 line posts.&lt;/p&gt;
  4992. </content>
  4993. </entry>
  4994. <entry>
  4995. <title>Hiveminder</title>
  4996. <link href=""/>
  4997. <updated>2006-07-04T07:43:00Z</updated>
  4998. <id></id>
  4999. <content type="html">&lt;p&gt;We&#39;re getting close to launching Hiveminder, our new hosted service. I&#39;ve got 5 beta accounts waiting for the first five people to comment on this post. I&#39;ll need your email address, either in the comment or in private mail to me.&lt;/p&gt;
  5000. </content>
  5001. </entry>
  5002. <entry>
  5003. <title>30</title>
  5004. <link href=""/>
  5005. <updated>2006-06-22T22:06:00Z</updated>
  5006. <id></id>
  5007. <content type="html">&lt;p&gt;So,&lt;/p&gt;
  5008. &lt;p&gt;I&#39;ve just turned 30.&lt;/p&gt;
  5009. &lt;p&gt;The weird thing is that it &lt;em&gt;does&lt;/em&gt; feel a bit different.&lt;/p&gt;
  5010. </content>
  5011. </entry>
  5012. <entry>
  5013. <title>Best Practical Solutions Announces SVK Acquisition - Total World Domination Plan Proceeding Apace</title>
  5014. <link href=""/>
  5015. <updated>2006-06-05T23:14:00Z</updated>
  5016. <id></id>
  5017. <content type="html">&lt;p&gt;Best Practical Solutions Announces SVK Acquisition - Total World Domination Plan Proceeding Apace&lt;/p&gt;
  5018. &lt;p&gt;Every ticketing system sucks. Here at Best Practical, we&#39;re really proud of the fact that RT sucks less than everything else out there and helps many thousands of organizations around the world get their work done with less pain and suffering.&lt;/p&gt;
  5019. &lt;p&gt;We&#39;re a small software development shop. Between the publicly available versions of RT available and our customer projects, we maintain at least half a dozen active lines of development at any one time.  When we first started to do this sort of thing, each merge took about six hours to integrate. That was ok when we were merging two branches once a month....and totally failed when we were trying to merge changes across six branches.&lt;/p&gt;
  5020. &lt;p&gt;In 2003, Chia-liang Kao (clkao) took a year off work to create a version control system that  would let him hike and explore hot springs in Taiwan&#39;s mountains and still be able to be a productive software developer. He ended up creating SVK, an advanced distributed version control system which runs atop Subversion, the industry standard enterprise version control system. SVK let clkao mirror remote Subversion repositories, create local branches, hack while offline and later resynchronize his changes with the upstream Subversion servers. SVK is the best version control system for getting your work done while you&#39;re hiking in the mountains. It just so happens that what makes SVK wonderful when you&#39;re soaking in the hot springs makes it an excellent platform for getting your work done halfway around the world, on an airplane, in a cafe or in your office.&lt;/p&gt;
  5021. &lt;p&gt;SVK&#39;s advanced branching and merging revolutionized our development process here at Best Practical. What used to take us days now takes minutes. We can get more work done faster than ever before.  We&#39;ve been rabid supporters of SVK since its birth. When clkao and I started talking about how I bootstrapped RT into a business and how Best Practical might be able to do something similar for SVK, I literally jumped at the opportunity to help. (And by that, I mean that I jumped on a plane to London on a day&#39;s notice to talk face to face about SVK&#39;s future.)&lt;/p&gt;
  5022. &lt;p&gt;I&#39;m pleased to announce that as of today, Chia-liang Kao has joined me as a partner at Best Practical Solutions and we&#39;re pleased to announce that SVK is now a Best Practical product.  We remain 100% committed to keeping both RT and SVK open source and are excited about about all the cool new functionality we&#39;ll be able to offer users of both products.&lt;/p&gt;
  5023. &lt;p&gt;Over the next couple months, we&#39;ll be announcing new support, consulting and custom development services related to SVK and software revision control. You&#39;ll also see SVK&#39;s website, mailing list and repository move to Best Practical, where we can offer a higher level of service for all users.&lt;/p&gt;
  5024. </content>
  5025. </entry>
  5026. <entry>
  5027. <title>Party.</title>
  5028. <link href=""/>
  5029. <updated>2006-06-03T23:17:00Z</updated>
  5030. <id></id>
  5031. <content type="html">&lt;p&gt;From now until late. My place in somerville. Come hang out. Grill things.&lt;/p&gt;
  5032. </content>
  5033. </entry>
  5034. <entry>
  5035. <title>3 June 2006 - Birthday Party</title>
  5036. <link href=""/>
  5037. <updated>2006-05-24T04:52:00Z</updated>
  5038. <id></id>
  5039. <content type="html">&lt;p&gt;I&#39;m turning 30 in...a bit less than a month. For the past couple years, I&#39;ve been a bit remiss in party scheduling. But not this year.&lt;/p&gt;
  5040. &lt;h1&gt;June 3rd.&lt;/h1&gt;
  5041. &lt;h2&gt;From 4pm.&lt;/h2&gt;
  5042. &lt;h2&gt;Until late.&lt;/h2&gt;
  5043. &lt;h3&gt; Porter Sq.&lt;/h3&gt;
  5044. &lt;h3&gt;My place.&lt;/h3&gt;
  5045. &lt;p&gt;Come, hang out. Eat, Drink, Be Social.&lt;/p&gt;
  5046. &lt;p&gt;I&#39;ll have some food and drink, but certainly wouldn&#39;t mind if folks brought more. If it&#39;s nice out and we manage to buy a grill we&#39;ll be grilling stuff. Otherwise, we&#39;ll figure out some other way to make food appear.&lt;/p&gt;
  5047. &lt;p&gt;While RSVP&#39;s aren&#39;t strictly necessary, it&#39;d be convenient to know that you&#39;re coming so that I can make sure to have enough food and drink.&lt;/p&gt;
  5048. &lt;p&gt;If you don&#39;t know where I live, drop me email. (Since this is a public post, I&#39;d kinda rather not post that info).&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;
  5049. </content>
  5050. </entry>
  5051. <entry>
  5052. <title>Date Grab 3 June 2006</title>
  5053. <link href=""/>
  5054. <updated>2006-04-07T18:15:00Z</updated>
  5055. <id></id>
  5056. <content type="html">&lt;p&gt;30th Birthday party, (also 29th and 28th, since I failed to do so then.) And possibly my housewarming, since, well, I swore I wouldn&#39;t have a housewarming until the initial bit of construction was completed. And it looks like it&#39;ll be done in May. Only 2 years late. But mostly 30th birthday party.&lt;/p&gt;
  5057. </content>
  5058. </entry>
  5059. <entry>
  5060. <title>obDrama</title>
  5061. <link href=""/>
  5062. <updated>2006-03-19T05:15:00Z</updated>
  5063. <id></id>
  5064. <content type="html">&lt;p&gt;I did a little bit of friends list pruning. Nothing personal, folks. Just trying to keep LJ down to a dull roar.&lt;/p&gt;
  5065. </content>
  5066. </entry>
  5067. <entry>
  5068. <title>Travel</title>
  5069. <link href=""/>
  5070. <updated>2006-03-02T06:05:00Z</updated>
  5071. <id></id>
  5072. <content type="html">&lt;p&gt;BOS -&amp;gt; SFO - 3/3/06 ( Work, pretty busy, Dim Sum sunday, possibly? )&lt;/p&gt;
  5073. &lt;p&gt;SFO -&amp;gt; BOS - 3/5/06&lt;/p&gt;
  5074. &lt;p&gt;BOS -&amp;gt; LAX - 3/12/06 ( Work, evenings free )&lt;/p&gt;
  5075. &lt;p&gt;LAX -&amp;gt; BOS - 3/15/06&lt;/p&gt;
  5076. &lt;p&gt;BOS -&amp;gt; NRT - 3/25/06 ( Tokyo! For YAPC::Asia )&lt;/p&gt;
  5077. &lt;p&gt;NRT -&amp;gt; BOS - 4/4/06&lt;/p&gt;
  5078. </content>
  5079. </entry>
  5080. <entry>
  5081. <title>San francisco recommendations</title>
  5082. <link href=""/>
  5083. <updated>2006-03-02T01:48:00Z</updated>
  5084. <id></id>
  5085. <content type="html">&lt;p&gt;What&#39;s the best Dim Sum in San Francisco?&lt;/p&gt;
  5086. </content>
  5087. </entry>
  5088. <entry>
  5089. <title>News flash: I now have an office job.</title>
  5090. <link href=""/>
  5091. <updated>2006-02-28T04:59:00Z</updated>
  5092. <id></id>
  5093. <content type="html">&lt;p&gt;...because we just got corporate office space. My god is the list of stuff we need to do long. Once we have *gasp* the requisite insurance, paint and furniture, we&#39;ll be having an officewarming party.&lt;/p&gt;
  5094. </content>
  5095. </entry>
  5096. <entry>
  5097. <title>Dimsum.</title>
  5098. <link href=""/>
  5099. <updated>2006-02-25T03:15:00Z</updated>
  5100. <id></id>
  5101. <content type="html">&lt;p&gt;&lt;a href=&quot;; class=&quot;lj-user&quot;&gt;bloodstones&lt;/a&gt; and I are arranging Dimsum at China Pearl at Noon on Sunday.&lt;br&gt;
  5102. China Pearl is in Chinatown, for more specific instructions ask the internet.&lt;/p&gt;
  5103. &lt;p&gt;You know you want to.&lt;/p&gt;
  5104. </content>
  5105. </entry>
  5106. <entry>
  5107. <title>Psst, buddy, want a job?</title>
  5108. <link href=""/>
  5109. <updated>2006-02-24T08:11:00Z</updated>
  5110. <id></id>
  5111. <content type="html">&lt;p&gt;We&#39;ll be posting this publicly within the next couple days. But you, my friends, get first crack ;)&lt;/p&gt;
  5112. &lt;p&gt;&lt;!--more--&gt;&lt;br&gt;
  5113. ABOUT US&lt;/p&gt;
  5114. &lt;p&gt;We&#39;re Best Practical Solutions, a small software company located&lt;br&gt;
  5115. in Somerville, Mass. We build software and sell support, training,&lt;br&gt;
  5116. consulting and custom development. Our main product, RT (Request Tracker)&lt;br&gt;
  5117. is the premiere opensource issue tracking system, downloaded by about&lt;br&gt;
  5118. 3000 new organizations every month. We&#39;ve been around since the fall of&lt;br&gt;
  5119. 2001 and are entirely self-funded. O&#39;Reilly Media published our first book,&lt;br&gt;
  5120. /RT Essentials/, last fall. This winter, we unveiled Jifty,&lt;br&gt;
  5121. our next-generation web application toolkit. We&#39;re currently hard at&lt;br&gt;
  5122. work on our next new product. Things just keep getting busier.&lt;/p&gt;
  5123. &lt;p&gt;ABOUT YOU&lt;/p&gt;
  5124. &lt;p&gt;You should be a self-starter who has some experience with Perl, as well&lt;br&gt;
  5125. as at least a few of the following:&lt;/p&gt;
  5126. &lt;p&gt;    * Test driven development&lt;br&gt;
  5127.    * User interface design&lt;br&gt;
  5128.    * HTML::Mason templating&lt;br&gt;
  5129.    * Documentation&lt;br&gt;
  5130.    * Web Services&lt;br&gt;
  5131.    * Cascading Style Sheets&lt;br&gt;
  5132.    * Javascript / AJAX&lt;br&gt;
  5133.    * SQL databases&lt;br&gt;
  5134.    * MVC frameworks&lt;br&gt;
  5135.    * Optimization and Profiling&lt;br&gt;
  5136.    * Subversion and SVK&lt;/p&gt;
  5137. &lt;p&gt;It&#39;s ok if you don&#39;t know everything out of the gate, but you should be&lt;br&gt;
  5138. able to learn on the fly and be comfortable asking questions when you&lt;br&gt;
  5139. get in over your head.  RT is a large codebase to dive into (47000 lines&lt;br&gt;
  5140. of libraries, 27000 of templates) so you should be prepared to work with&lt;br&gt;
  5141. a project that&#39;s too big to hold in your head at once.  If you want to&lt;br&gt;
  5142. see what sort of trouble you&#39;re getting yourself into, download a copy&lt;br&gt;
  5143. of RT&#39;s source code from:&lt;/p&gt;
  5144. &lt;p&gt;;/p&gt;
  5145. &lt;p&gt;ABOUT THE JOB&lt;/p&gt;
  5146. &lt;p&gt;We&#39;re looking for a mid-level Perl Hacker to help us enhance and refine RT,&lt;br&gt;
  5147. Jifty, and our Next Big Thing. You&#39;ll be responsible for everything from&lt;br&gt;
  5148. implementing new features across all our products to testing and applying&lt;br&gt;
  5149. user-contributed patches to our released software. In a typical week, you&#39;ll&lt;br&gt;
  5150. probably spend about half your time working on customer projects and half&lt;br&gt;
  5151. working on internal and opensource projects. &lt;/p&gt;
  5152. &lt;p&gt;The hours are flexible and we all telecommute some of the time...though we&#39;re&lt;br&gt;
  5153. just about to move into new office space in the heart of Davis Sq, Somerville.&lt;br&gt;
  5154. We do just about EVERYTHING online and on the phone. You should be comfortable&lt;br&gt;
  5155. using email and instant messaging systems to collaborate and get work done.&lt;br&gt;
  5156. This job doesn&#39;t formally require your full-time presence in Boston, though it&lt;br&gt;
  5157. would certainly be an advantage.&lt;/p&gt;
  5158. &lt;p&gt;We&#39;re a small company and the boss is typically overextended. You should be&lt;br&gt;
  5159. comfortable working independently or in small teams, prioritizing tasks on&lt;br&gt;
  5160. your own, and juggling tasks and projects. You need to be able to tell when&lt;br&gt;
  5161. you&#39;re out of your depth and ask for help.&lt;/p&gt;
  5162. &lt;p&gt;COMPENSATION:&lt;/p&gt;
  5163. &lt;p&gt;DOE - This is a full-time salaried position, but the details are negotiable.&lt;br&gt;
  5164. We&#39;re a small, self funded company. The standard benefits apply, of course:&lt;br&gt;
  5165. health insurance, dental insurance and junk food to make that dental insurance&lt;br&gt;
  5166. worthwhile.&lt;/p&gt;
  5167. &lt;p&gt;HOW TO APPLY:&lt;/p&gt;
  5168. &lt;p&gt;Send a something approximating a cover letter, a resume in&lt;br&gt;
  5169. plain text, HTML or PDF form and a sample of your Perl code to&lt;br&gt;
  5170. If you&#39;re involved in opensource development of&lt;br&gt;
  5171. one kind or another, please tell us about it. If you have a CPAN ID, tell&lt;br&gt;
  5172. us what it is. We won&#39;t consider applications without a code sample. We&#39;ll&lt;br&gt;
  5173. be paying particular attention to the readability, comments and tests.&lt;/p&gt;
  5174. </content>
  5175. </entry>
  5176. <entry>
  5177. <title>Great Circle Meme</title>
  5178. <link href=""/>
  5179. <updated>2006-02-18T02:30:00Z</updated>
  5180. <id></id>
  5181. <content type="html">&lt;p&gt;Currently booked travel 1 Jan 2006 - 2 April 2006: 43555 miles&lt;br&gt;
  5182. &lt;a href=&quot;;amp;PATH-UNITS=mi&quot;&gt;&lt;img src=&quot;;&gt;&lt;br&gt;
  5183. &lt;/a&gt;&lt;/p&gt;
  5184. </content>
  5185. </entry>
  5186. <entry>
  5187. <title>Anyone for dinner?</title>
  5188. <link href=""/>
  5189. <updated>2006-01-30T07:19:00Z</updated>
  5190. <id></id>
  5191. <content type="html">&lt;p&gt;Somewhere in the greater Somerville metro area.&lt;br&gt;
  5192. Maybe sometime between now and 9pm?&lt;/p&gt;
  5193. </content>
  5194. </entry>
  5195. <entry>
  5196. <title>I asked Kaia to marry me.</title>
  5197. <link href=""/>
  5198. <updated>2006-01-01T06:15:00Z</updated>
  5199. <id></id>
  5200. <content type="html">&lt;p&gt;&lt;!--more Of _course_ I&#39;m going to make you click through for the answer--&gt;&lt;br&gt;
  5201. She said yes.&lt;/p&gt;
  5202. </content>
  5203. </entry>
  5204. <entry>
  5205. <title>An astonishing percentage of what I&#39;ve been up to for the last six months</title>
  5206. <link href=""/>
  5207. <updated>2005-12-26T01:50:00Z</updated>
  5208. <id></id>
  5209. <content type="html">&lt;p&gt;It gives me great pleasure to announce the first release of Jifty, a&lt;br&gt;
  5210. new web application framework in Perl.&amp;nbsp; Jifty is designed to help you&lt;br&gt;
  5211. write clean, maintainable applications quickly and easily. Actually,&lt;br&gt;
  5212. it was designed to help _us_ write clean, maintainable applications&lt;br&gt;
  5213. quickly and easily. We very much hope that you&#39;ll find it as great to&lt;br&gt;
  5214. work with as we do.&lt;/p&gt;
  5215. &lt;p&gt;As we built Jifty, we talked to many, many folks about what they wanted in&lt;br&gt;
  5216. a web framework. They told us that they didn&#39;t want to mess with database&lt;br&gt;
  5217. schema.&amp;nbsp; They wanted AJAX to &quot;just work.&quot; They wanted their code to be&lt;br&gt;
  5218. clean and simple.&amp;nbsp; They wanted the power of CPAN. They wanted infinite&lt;br&gt;
  5219. choices about the way their apps were built. They wanted &quot;one good way&quot;&lt;br&gt;
  5220. to make applications built into the framework.&amp;nbsp; From what we could tell,&lt;br&gt;
  5221. they were basically all saying the same thing: &quot;I want a pony.&quot;&lt;/p&gt;
  5222. &lt;p&gt;In addition to being a pleasure to work with, Jifty is a&lt;br&gt;
  5223. veritable treasure trove of buzzwords.&amp;nbsp; At its core is Jifty::DBI,&lt;br&gt;
  5224. an object-relational mapping system with a clean, declarative&lt;br&gt;
  5225. syntax. Jifty::DBI is based on DBIx::SearchBuilder, which has powered&lt;br&gt;
  5226. uncountable thousands of RT instances for the better part of a decade&lt;br&gt;
  5227. but adds a few new twists. Jifty::DBI handles _all_ your SQL. No INSERTs,&lt;br&gt;
  5228. no DELETES, no SELECTs, no CREATE TABLEs and no ALTER TABLEs. Jifty will&lt;br&gt;
  5229. set up your database schema when you first deploy your application and&lt;br&gt;
  5230. upgrade it as you update your model classes.&lt;/p&gt;
  5231. &lt;p&gt;Jifty&#39;s core web framework follows the Model-View-Controller pattern&lt;br&gt;
  5232. -- with a twist. Rather than the standard URL-based controller, Jifty&lt;br&gt;
  5233. uses a new argument-name-based dispatcher that makes Web Services and&lt;br&gt;
  5234. AJAX/AHAH easy.&lt;/p&gt;
  5235. &lt;p&gt;As one might expect, these days, Jifty comes with built in AJAX support,&lt;br&gt;
  5236. based on Prototype.js and;nbsp; It only takes a few seconds&lt;br&gt;
  5237. to set your pages up with rich dynamic interaction...that seamlessly&lt;br&gt;
  5238. degrades in non-AJAX browsers.&lt;/p&gt;
  5239. &lt;p&gt;Jifty&#39;s application-level continuations make it a breeze to let a user&lt;br&gt;
  5240. pop off to a login page or a wizard and get back to where they came from,&lt;br&gt;
  5241. complete with the results of the their excursion.&lt;/p&gt;
  5242. &lt;p&gt;Out of the box, every new Jifty application comes with a built in&lt;br&gt;
  5243. documentation browser, database administration interface. And a pony.&lt;/p&gt;
  5244. &lt;p&gt;Find out more about Jifty at &lt;a href=&quot;;&gt;;/a&gt;.&amp;nbsp; Download a copy from&lt;br&gt;
  5245. CPAN today. Join us on #jifty on;/p&gt;
  5246. </content>
  5247. </entry>
  5248. <entry>
  5249. <title>What I want for $HOLIDAY</title>
  5250. <link href=""/>
  5251. <updated>2005-12-20T06:19:00Z</updated>
  5252. <id></id>
  5253. <content type="html">&lt;p&gt; an &lt;a href=&quot;;&gt;IBM/Lexmark M15 ergonomic keyboard.&lt;/a&gt;&lt;/p&gt;
  5254. &lt;p&gt;You will earn my undying love.&lt;/p&gt;
  5255. </content>
  5256. </entry>
  5257. <entry>
  5258. <title>Dim Sum - Saturday - 12:30PM - China Pearl</title>
  5259. <link href=""/>
  5260. <updated>2005-11-26T00:59:00Z</updated>
  5261. <id></id>
  5262. <content type="html">&lt;p&gt;Yesterday, you gorged on turkey and ham. Today you&#39;re too stuffed to eat anything. By 12:30 tomorrow, you&#39;ll be ravenously hungry. Come have dimsum!&lt;/p&gt;
  5263. &lt;p&gt;Jesse&lt;/p&gt;
  5264. </content>
  5265. </entry>
  5266. <entry>
  5267. <title>Too Early? Too Often?</title>
  5268. <link href=""/>
  5269. <updated>2005-11-22T08:51:00Z</updated>
  5270. <id></id>
  5271. <content type="html">&lt;p&gt;So. We have this new application. It&#39;s not done yet. It&#39;s agressively not done yet.&lt;/p&gt;
  5272. &lt;p&gt;That&#39;s not to say we don&#39;t have users. We do. And they&#39;re giving us good feedback. There&#39;s lots we want to do with this application. It has a bright future. It may or may not displace Google as the epiecenter of the internet. (Ok. we know it won&#39;t displace Google. That&#39;s not even something we&#39;re trying to do.)&lt;/p&gt;
  5273. &lt;p&gt;But there are other things in the same space as our application. Some of them are better (for now). Most of them are abysmally bad.&lt;/p&gt;
  5274. &lt;p&gt;What we have isn&#39;t polished. There are still rough edges here and there. And it&#39;s far from feature complete. But it is useful. (Either that or it&#39;s so bad that our users take pity on us and lie about it being useful. )&lt;/p&gt;
  5275. &lt;p&gt;This thing we&#39;re doing is hosted, so it&#39;s not a problem to grow it day by day and feature by feature. We&#39;ve got a nice comprehensive test suite. We aren&#39;t afraid to roll new releases every day until it&#39;s right.&lt;/p&gt;
  5276. &lt;p&gt;So. do we throw open the doors, invite the world in to see what we&#39;ve got, possibly laugh at us and walk away before we&#39;re ready with something we think is great?&lt;/p&gt;
  5277. &lt;p&gt;Or do we wait and let the space get even yet more crowded while we hide in our bat-cave with our not-quite-there-but-still-neat application?&lt;/p&gt;
  5278. </content>
  5279. </entry>
  5280. <entry>
  5281. <title>If I held a party...</title>
  5282. <link href=""/>
  5283. <updated>2005-11-22T00:25:00Z</updated>
  5284. <id></id>
  5285. <content type="html">&lt;p&gt;If I had a party on December 17, what would I conflict with?&lt;/p&gt;
  5286. </content>
  5287. </entry>
  5288. <entry>
  5289. <title>Toughbooks?</title>
  5290. <link href=""/>
  5291. <updated>2005-10-05T18:59:00Z</updated>
  5292. <id></id>
  5293. <content type="html">&lt;p&gt;Does anyone in my greater social circle have a Panasonic Toughbook Y2 or Y4?&lt;/p&gt;
  5294. </content>
  5295. </entry>
  5296. <entry>
  5297. <title>Anybody want late dinner?</title>
  5298. <link href=""/>
  5299. <updated>2005-09-29T03:34:00Z</updated>
  5300. <id></id>
  5301. <content type="html">&lt;p&gt;Say sometime in the next hour?&lt;/p&gt;
  5302. </content>
  5303. </entry>
  5304. <entry>
  5305. <title>The Lemonheads. 10/1 Providence</title>
  5306. <link href=""/>
  5307. <updated>2005-09-16T07:35:00Z</updated>
  5308. <id></id>
  5309. <content type="html">&lt;p&gt;No. I&#39;m not looking for an old Lemonheads bootleg. They&#39;re playing in two weeks. At Lupo&#39;s in Providence. &lt;/p&gt;
  5310. &lt;p&gt;Who&#39;s coming with me?&lt;/p&gt;
  5311. &lt;p&gt;&lt;small&gt;The best part is that I won&#39;t need to sneak in because I&#39;m underage&lt;/small&gt;&lt;/p&gt;
  5312. </content>
  5313. </entry>
  5314. <entry>
  5315. <title>We&#39;re hiring again: SALES PERSON</title>
  5316. <link href=""/>
  5317. <updated>2005-09-16T01:25:00Z</updated>
  5318. <id></id>
  5319. <content type="html">&lt;p&gt;ABOUT US&lt;/p&gt;
  5320. &lt;p&gt;We&#39;re Best Practical Solutions, a small software company located&lt;br&gt;
  5321. in Somerville, Mass. We build software and sell support, training,&lt;br&gt;
  5322. consulting and custom development. Our main product, RT (Request Tracker)&lt;br&gt;
  5323. is the premiere opensource issue tracking system, downloaded by about&lt;br&gt;
  5324. 3000 organizations every month. We&#39;ve been around since the fall of&lt;br&gt;
  5325. 2001 and are entirely self-funded. O&#39;Reilly and Associates published&lt;br&gt;
  5326. our first book, /RT Essentials/, this summer. We&#39;re currently hard at&lt;br&gt;
  5327. work on our next new product. Things just keep getting busier.&lt;/p&gt;
  5328. &lt;p&gt;ABOUT THE JOB&lt;/p&gt;
  5329. &lt;p&gt;We&#39;re looking for a new sales and marketing person to help make&lt;br&gt;
  5330. sure we&#39;re getting our message across to potential customers, generate leads,&lt;br&gt;
  5331. handle the ever-increasing tide of incoming sales inquiries, work with&lt;br&gt;
  5332. the engineering team to spec and cost projects and ultimately convince&lt;br&gt;
  5333. our potential customers and customers that they want to hand us big sacks&lt;br&gt;
  5334. of cash to do work for them. And then to make sure they&#39;re happy with&lt;br&gt;
  5335. the work we&#39;ve done.&lt;/p&gt;
  5336. &lt;p&gt;Most, but not all of our customers are fairly technically savvy and have&lt;br&gt;
  5337. a good idea of what they want from us. A large part of your role will&lt;br&gt;
  5338. be working with customers to get their requirements written down so that&lt;br&gt;
  5339. we can figure out the best way to get them what they want, how much&lt;br&gt;
  5340. work it will take and how much it will cost.&lt;/p&gt;
  5341. &lt;p&gt;We&#39;re a small shop and have been very much engineering focused up to this&lt;br&gt;
  5342. point. We care a lot about the software we produce and how it works for&lt;br&gt;
  5343. our users whether or not they pay us. This means that we&#39;ve tended to&lt;br&gt;
  5344. focus a lot more on technical information than on florid prose extolling&lt;br&gt;
  5345. our virtues and our competition&#39;s inadequecies. That&#39;s just who we are.&lt;br&gt;
  5346. But our commercial side could always use more attention. You will help&lt;br&gt;
  5347. lead us toward a more polished, but still open and honest corporate brand.&lt;br&gt;
  5348. We don&#39;t expect you to walk in on your first day, announce a new slogan, logo,&lt;br&gt;
  5349. color scheme and set of corporate values. (In fact if you did, that would&lt;br&gt;
  5350. probably be your only day.) But yes, you will have a big hand in helping&lt;br&gt;
  5351. to define the face we present to the corporate world.&lt;/p&gt;
  5352. &lt;p&gt;Day-to-day, you&#39;ll be dealing with customers, engineers and the boss. You&lt;br&gt;
  5353. need excellent written and verbal communications skills (for dealing with&lt;br&gt;
  5354. customers) even if most of the time you&#39;re slumming with the rest of us who&lt;br&gt;
  5355. aren&#39;t so hot with our capitalization and punctuation.&lt;/p&gt;
  5356. &lt;p&gt;ABOUT YOU&lt;/p&gt;
  5357. &lt;p&gt;You shouldn&#39;t be frustrated by computers or computer geeks.&lt;br&gt;
  5358. Just about everyone here is a computer geek (though we all have other&lt;br&gt;
  5359. interests). You&#39;d be working closely with the main developers of RT, who&lt;br&gt;
  5360. are a very bright and dedicated team. You&#39;ll be able to set your own hours&lt;br&gt;
  5361. (though they will need to overlap largely with US business hours) and for&lt;br&gt;
  5362. the most part telecommute from wherever you&#39;d like to work. We do just&lt;br&gt;
  5363. about EVERYTHING online and on the phone. You should be comfortable using&lt;br&gt;
  5364. email and instant messaging systems to collaborate and get work done.&lt;/p&gt;
  5365. &lt;p&gt;We&#39;re a small company and the boss is typically overextended.&lt;br&gt;
  5366. He travels a fair bit and when he&#39;s not traveling, his schedule can&lt;br&gt;
  5367. be fairly erratic. You should be comfortable working independently,&lt;br&gt;
  5368. prioritizing tasks on your own, and juggling tasks &amp;amp; projects. You need to&lt;br&gt;
  5369. be able to tell when you&#39;re out of your depth and ask for help.&lt;/p&gt;
  5370. &lt;p&gt;We are a &quot;virtual&quot; office, with folks scattered around the US and around&lt;br&gt;
  5371. the world though increasingly, we&#39;re mostly clustered in the Boston area.&lt;br&gt;
  5372. This job doesn&#39;t formally require your presence in Boston, though it would&lt;br&gt;
  5373. certainly be seen as an asset.&lt;/p&gt;
  5374. &lt;p&gt;Required Skills:&lt;/p&gt;
  5375. &lt;p&gt;You need strong written and verbal communications skills. We mean&lt;br&gt;
  5376. it. Really. That BA in English _is_ good for something. You must have&lt;br&gt;
  5377. prior sales and/or marketing experience. You need to be comfortable&lt;br&gt;
  5378. asking questions, researching, reading documentation and experimenting&lt;br&gt;
  5379. with software to better understand possibilities and to offer options&lt;br&gt;
  5380. to customers.&lt;/p&gt;
  5381. &lt;p&gt;Desired Skills:&lt;/p&gt;
  5382. &lt;p&gt;We&#39;re not looking for a software engineer (not for this role anyway),&lt;br&gt;
  5383. but if you&#39;ve written a bit of code, that would certainly be an asset.&lt;/p&gt;
  5384. &lt;p&gt;Compensation:&lt;/p&gt;
  5385. &lt;p&gt;DOE - This is a full-time salaried position, but the details are negotiable.&lt;/p&gt;
  5386. &lt;p&gt;How to apply:&lt;/p&gt;
  5387. &lt;