Skip to main content

Jesse Vincent

Prophet and SD 0.7 (Cavil) are now available (What I've been up to at work)

1 min read

Picture 11 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.

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. 

To learn more about Prophet and SD, visit http://syncwith.us or read the full announcement over on the corporate blog

Jesse Vincent

Boston - Sunday - Dim Sum - China Pearl - 11:30AM

1 min read

Come have dimsum :)

Jesse Vincent

Things I ought to be blogging about

4 min read

I just got back from OSCON.  I gave an Ignite talk about my Kindle hacking, a "regular" 45 minute talk about SD, the p2p bug tracker that I work on and a half-day talk on RT.  OSCON, as always, was amazing. I think I only made it to a half-dozen actual sessions - the hallway track kept me that busy.

About a dozen people yelled at me for not doing more to publicize some of the projects I'm involved with. Each and every one of these deserves a whole series of blog posts. Maybe by listing them here, I'll embarass myself into writing a bit more.  

I've had a busy year.  I didn't realize how busy until I wrote this post.  Below are some of the projects I've been involved with / instigated. In almost every case, I've had fantastic collaborators who have helped make the tools a reality. But the projects are all my fault ;)

SD 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.  For now, you can check out the talk I gave at OSCON.

K-9 is an opensource email client for Android.  I founded the project when I forked the core android "Email" 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 :)

Shipwright is a build and distribution system for applications. It has special features designed to tame Perl's CPAN, but it works well for non-Perl apps too.  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.  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.

Changelogger is a tool we'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's commit log.  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.  Once we get a few more issues cleaned up, we'll be running a changelogger as a public service.

Kindle hacking.  At this point, I have an ubuntu Jaunty Jackalope chroot with working X server, Keyboard and 5-pad.  I need to fix an X server bug, then I'll build a downloadable installer and let the rest of the world start playing around.

I've done a bit of minor javascript hacking to make Twitter's web view more palatable to me: http://fsck.com/~jesse/spyhunter/ and http://fsck.com/~jesse/narrow-twitter.user.js.

Picture 22

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's actually just a replacement for /usr/bin/sendmail and some goo to turn tweets into maildir messages.  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's all in my github account.

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't worry, RT4 is alive and well, but that's another post), cleanup of MobiPerl and...well, I've blocked out my memories of the rest of them.

Jesse Vincent

A new definition of wrong

2 min read

I haven't been blogging about the Kindle for a while...mostly because I haven't hacked on the Kindle in a while.  The release of the DX got me excited about what'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.

Ubuntu Jaunty has an ARM target.  It'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 chroot into an Ubuntu environment on my Kindle. 

That was when I discovered that Lab126 have built the Kindle's kernel without CONFIG_VT...and X.org really wants a tty or virtual terminal, but not for any particularly good reason.

This evening, I managed to bludgeon X.org into submission and found myself face to face with everybody's favorite checkerboard background.

After that, it was just a hop, skip and an apt-get until I was watching the mesmerizing transitions of xdaliclock.



[flickr video=3702221011 show_info=true secret=8959480e1e w=400 h=327]

(Yes, I know it's incredibly blurry. I haven't managed to get the pinhole camera on my DX calibrated yet)

Clearly this is the killer app for the Kindle just a stepping stone. I still don't have the Keyboard or 5way hooked up and what I do have working is incredibly brittle.  But xpdf (and lots of other stuff) runs unmodified.

Jesse Vincent

Boston - China Pearl - Sunday - 11am

1 min read

So, Sunday's my birthday. I'm traveling enough that I failed to sort out a birthday party. Instead, come have dimsum on Sunday!

Drop me a line if you think you might be coming, so I can keep a vague count.

Jesse Vincent

Improved PDF rendering for Savory

1 min read

Now with better default fonts (Google's free Droid fonts) and border cropping.

http://savory.googlecode.com/files/savory-image-2009-04-10.zip

Jesse Vincent

Savory Screenshots

1 min read


Over the past day, a few readers have asked me what converted PDFs look like on the Kindle 2 and how readable they are. (One of you even said you'll buy a Kindle 2 if I post some screenshots.) And yes, Amazon pays me a referral fee for every Kindle 2 I sell. So far, I've lured two of you in ;)

All the screenshots below have been reduced. Click on them to see full-size versions.


The Savory conversion process

 

Screen_shot-20144   Screen_shot-20145

A scientific paper, converted from PDF

Fit to screen:
Screen_shot-20146

Fit to height (yeah, height. It's rotated)
:
Screen_shot-20149

Screen_shot-20148



Fit to screen

Screen_shot-25732 
Full size:

Screen_shot-25733



Fit to height:

Screen_shot-25734 Screen_shot-25735

Jesse Vincent

Playing to the crowd

1 min read

From the bits of feedback I've gotten on Savory's initial release on Friday, it seems pretty clear that people want to be able to view rendered PDFs that look "like they're supposed to" 

Savory's initial release used a PDF-to-HTML converter that extracts the text from a PDF and turns it into a reflowable ebook.  If your PDFs are generated from text by modern tools. this is great.  Most PDFs aren't.
Over the weekend, I put together a PDF renderer for Savory build on Poppler and the Kindle'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)
For now, every PDF is converted twice. Once to text and once to a set of rendered images. So far, it's working pretty well for me. I'd love some feedback on savory-image-beta-2009-04-06.zip from anyone who's game.  Just replace your regular savory image with it and reboot the kindle.

Jesse Vincent

What's next for Savory

1 min read

  • Good conversions of image-heavy or image-based PDFs. (I just need to build Ghostscript on the )
  • 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 http://www.blogkindle.com)
  • Tracking down slightly a few unreliable ebook conversions/installations I've noticed.

Jesse Vincent

Savory

16 min read

UPDATED 5 April 2009 - 11:16 EDT: 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.

UPDATED 6 April 2009 - 9:41 EDT: I put together beta-quality support for picture-perfect PDF production. You can try it out if you promise to report back

UPDATED 6 April 2009 - 22:44 EDT:Screenshots of savory's improved PDF converter.


Over the past few weeks, I'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's catalog. I figured I'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't count on was finding a new hobby.

Hi, I'm Jesse and I have a software problem.

When I get a new bit of hardware, I often end up writing software for it. In 2001, when I got one of Canon's first Digital SLRs, I found myself writing code to extract usable images from the "RAW" 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 K9, an enhanced version of Android's email client.

I really didn't think this would happen with the Kindle. I was wrong.

What is Savory?

Savory is a native ebook conversion package for the Kindle 2. It lets you download and read PDFs and ePubs on the Kindle without a manual conversion step.

So, you hacked the Kindle?

No. There have actually been a number of other user-generated Kindle updates. igorsk created the toolset which generates Kindle and Kindle2 updates. Other members of the Kindle community have created Kindle2 updates which change the Kindle's fonts to support books in non-western language, let you set your own screensavers and a bunch more. These packages already contain everything a technically savvy user would need to install software on the Kindle. What I did was to port an ebook-conversion package to run reasonably efficiently on a 500mhz ARM with 128 megabytes of system memory and to write a small program which watches for new ebooks in a few chosen formats and run those through the conversion tool.

Does Savory let me decrypt books Amazon has protected with DRM?

No

So this is like KindlePid?

Nope. Not at all. KindlePid is a tool for reverse-engineering your Kindle's "Mobipocket Pid." KindlePid lets you buy DRM-protected ebooks from providers other than Amazon. Savory converts PDFs and ePubs that you download to your Kindle over WhisperNet or 3G into unprotected .mobi documents. There are web-based and desktop tools which can do everything Savory can do. Savory just brings these features directly to your Kindle 2.

Does Savory let me read DRMed ebooks?

No. Savory does not include support for ebooks protected by DRM. DRM is an incredibly "hot" topic in the ebook world right now. There are varying opinions on its efficacy. My opinions on the matter aren't relevant, except to say that I am not touching the topic with a 10 foot pole. It will not convert DRM-protected ebooks into a format the Kindle will read. It will not add or remove DRM from any ebook.

Does Savory let me do anything Amazon didn't already let me do for free?

No. It just makes some things that are a little cumbersome out of the box simple and transparent. It's already possible to use desktop and web based services to transcode ePub and PDF documents into the Kindle-compatible Mobipocket format. Amazon also provides both free and for-pay email-based conversion services you can use.

Does Savory work with the Kindle 1?

No.

Why did you create Savory?

I'm in love with my Kindle. I've been reading ebooks on screens of various sorts for many years, but the Kindle2 is the first device that I actually enjoy reading as much as I enjoy reading paper books. I've tried other ebook readers, but for a variety of reasons, they just don't work for me. My goal is to make it easier for readers to read more free content on the Kindle.

I got the idea after reading Tim O'Reilly's editorial in Forbes about why the Kindle platform will be more successful if it's more open. My first experiments were actually in server-based transcoders to convert PDFs and epubs to Kindle-compatible Mobipocket books, but I quickly realized that running the converter locally on the Kindle would result in a much better user experience and make the Kindle more useful. And yeah, it seemed like an interesting project.

What document formats does Savory let me read?

Savory allows you to read .epub and .pdf files on your Kindle. It does this by converting these documents to Mobipocket format ebooks using Calibre. You should note that the version of Calibre Savory uses only works with text-based PDFs. If you have image-based or scanned PDFs, conversion will fail. (Images in your PDFS are ok. There just needs to be some text to extract.) Updated: Screenshots of the new and improved PDF converter.

How does Savory work?

Plain-english version

Savory installs a small program which runs on your Kindle and watches for new files in the 'Documents' directory with names ending in '.epub' and '.pdf'. When the system notifies Savory that a document has shown up, it wakes up and runs an open-source file conversion program called Calibre. Savory also updates your Kindle2's browser configuration file to tell it that the Kindle can now handle .pdf and .epub documents.

Technical version

Savory changes the browser configuration file to allow download of pdf and epub documents. It adds a new "init" script which tries to mount savory-image.ext3 on boot. If that succeeds, it runs bin/savory_daemon from within the image mentioned above. savory_daemon is a Python script that watches the documents/ directory and invokes a converter based on Calibre when it sees something that looks right.

Is Savory supported by Amazon?

No. If you have a problem with Savory, DO NOT CONTACT AMAZON. This isn't software they wrote. They're not responsible for it. Please don't bother them about it.

If the nice folks at Amazon contact me (you can find my email address at the bottom of this FAQ) and ask me to stop distributing Savory, I will do so. My goal isn't to "hack" the Kindle, deprive Amazon of revenue or place an increased support burden on Amazon's Kindle team. I just want to make the Kindle2 an even more useful reader than it already is.

Does Savory void my warranty?

I don't know. If you're not comfortable with the possibility, do not install Savory.

Does Savory come with any guarantee or warranty?

I guarantee that Savory will not give you the ability to fly or to see through walls. Past that, no. Savory comes with no warranty or guarantee OF ANY KIND. If it causes your Kindle to burst into flames or gives your pets the ability to read, you are ENTIRELY ON YOUR OWN. By downloading and installing Savory, you accept full responsibility for anything it does.

Savory is distributed under the MIT license:

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

What do I do if Savory breaks my Kindle?

Head on over to the MobileRead 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 absolutely no warranty and everybody on MobileRead who might help you out is a volunteer.

How do I install Savory?

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. DO NOT INSTALL SAVORY UNLESS YOU'RE WILLING TO END UP WITH A DEAD KINDLE.

You'll need to download three files:

savory-image.zip

This file contains Savory's file-conversion system and assorted tools.

Download and unzip this file. Then, mount your Kindle2 on your desktop with USB and drag savory-image.ext3 into the "system" folder on your Kindle2.

update_RemoveSavory-0.06.bin

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.

update_Savory-0.06.bin

This file is a Kindle update.

You should copy this file to the root directory of your Kindle. After you do that, unmount the kindle and click the "Menu" button, select "Settings", click the "Menu" button and click "Update Your Kindle" This will apply the update.

If "Update Your Kindle" is greyed out, mount the Kindle on your desktop again and DELETE the update file. Then, unmount the Kindle. If you're not already on the Settings page, click "Menu" and select "Settings". Make sure your Kindle is plugged into your computer with the USB cable. Click "Menu" and select "Restart". The Kindle will boot up and immediately enter USB mode. Copy the update file to the Kindle again and follow the instructions above.

I've found that the Kindle is much happier recognizing update files if you reboot the Kindle while it's connected to your computer with USB and copy the update to the Kindle before the Kindle's UI comes up at all

If you copy the file to your kindle and reboot without applying the update, it will end up in a reboot loop - I haven't figured out why yet. If that happens, hold down the "Home" button while booting to get into recovery mode. From there, you can mount the Kindle on your desktop with USB, delete the .bin file and try again.

How do I turn Savory off temporarily?

Mount your Kindle on your computer with USB. Rename the savory-image.ext3 file in the Kindle's "System" folder. Then, unmount your Kindle, click "Menu", select "Settings", click "Menu" and click "Restart your Kindle." When you later want to re-enable Savory, repeat the process, naming the file back to "savory-image.ext3"

How do I remove Savory completely?

If you've decided that Savory isn't for you or you need to remove Savory to perform an Amazon-provided system update, it's a two step process. First, you'll need to follow the instructions above about how to temporarily turn off Savory. Then, download and run the "update_RemoveSavory-0.06.bin" system update and apply it just like you applied the original system update.

Amazon's system updates very carefully check each and every file they're about to update to make sure that they are exactly as Amazon left them. This ensures that a system update doesn't unexpectedly corrupt an "important" file. Savory updates the Kindle's browser configuration to allow download of pdf and epub files, adds an "init script" to start up the savory daemon which watches for new files to convert and modifies the Kindle's "version.txt" file. This way, anyone doing support for your Kindle will know it's not running a stock system image and NOT ELIGIBLE FOR SUPPORT FROM AMAZON.

Savory copies each file it modifies before making changes. All files Savory modifies are saved with the file suffix "-beforesavory". When you uninstall Savory, it restores the pristine versions of these files.

What does Savory do to my battery life?

It makes it shorter. So far, it doesn't feel like it makes it much shorter. Comparisons and benchmarks would be appreciated

What does Savory do with the "originals" of ebooks it converts?

You'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.

Where can I get the source code to Savory?

Savory is hosted on Google Code: code.google.com/p/savory

What software does Savory use?

Savory wouldn't have been possible without kindle-update-maker, created by Igor Skochinsky.

Savory is about 200 lines of Bourne Shell and Python, built to drive a modified copy of Kovid Goyal's open-source Calibre ebook conversion and management suite.

The disk image containing the Savory daemon and the modified version of Calibre contains a number of dependencies, listed below. You can download all of these source tarballs from code.google.com/p/savory.

The patches to Calibre are available in the same source repository as the rest of Savory. All other packages are unmodified.

http://bazaar.launchpad.net/%7Ekovid/calibre/trunk Revision 2689
http://unladen-swallow.googlecode.com/svn/branches/release-2009Q1-maint Revision: 370
ftp://ftp.qtsoftware.com/qt/source/qt-embedded-linux-opensource-src-4.4.3.tar.gz
http://www.rarlab.com/rar/unrarsrc-3.7.5.tar.gz
http://www.riverbankcomputing.co.uk/static/Downloads/sip4/sip-4.7.9.tar.gz
http://sourceforge.net/project/downloading.php?group_id=68617&use_mirror=voxel&filename=rtf2xml-1.33.tar.gz&a=75791959
ftp://ftp.gnu.org/pub/gnu/readline/readline-6.0.tar.gz
http://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.7.tar.gz
http://xmlsoft.org/sources/libxslt-1.1.24.tar.gz
http://xmlsoft.org/sources/libxml2-2.7.3.tar.gz
ftp://ftp.gnu.org/pub/gnu/gdbm/gdbm-1.8.3.tar.gz
http://savannah.inetbridge.net/freetype/freetype-2.3.9.tar.gz
http://effbot.org/media/downloads/elementtree-1.2.7-20070827-preview.zip
http://www.openssl.org/source/openssl-0.9.8j.tar.gz
http://git.dbzteam.org/?p=pyinotify.git;a=snapshot;h=HEAD;sf=tgz as of 2009-03-30 - pyinotify-0.8.1-py2.6.egg-info
http://sourceforge.net/project/downloading.php?group_id=45839&use_mirror=voxel&filename=pdftohtml-0.39.tar.gz&a=40219524
http://effbot.org/downloads/Imaging-1.1.6.tar.gz
ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-6.5.0-9.tar.gz
http://www.crummy.com/software/BeautifulSoup/download/3.x/BeautifulSoup-3.1.0.tar.gz
http://wwwsearch.sourceforge.net/ClientForm/src/ClientForm-0.2.10.tar.gz
http://labix.org/download/python-dateutil/python-dateutil-1.4.1.tar.gz
http://wwwsearch.sourceforge.net/mechanize/src/mechanize-0.1.11.tar.gz
http://sourceforge.net/project/downloading.php?group_id=68617&use_mirror=voxel&filename=rtf2xml-1.33.tar.gz&a=50591281
http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c9.tar.gz#md5=3864c01d9c719c8924c455714492295e
http://pypi.python.org/packages/source/l/lxml/lxml-2.2.tar.gz#md5=b3f12344291aa0d393915e7d8358b480
http://www.imagemagick.org/download/python/PythonMagick-0.9.tar.gz
http://www.riverbankcomputing.co.uk/static/Downloads/PyQt4/PyQt-x11-gpl-4.4.4.tar.gz

How much code is Savory?

The unique parts of Savory are about 85 lines of shell script and 135 lines of Python.

Why's the Savory disk image nearly 90 megabytes uncompressed?

Savory uses Calibre, a free and open ebook conversion suite. In turn, Calibre uses Python, Qt and some other libraries. While I've slimmed down the requirements by hand, we have a long way to go before Savory fits in 5 or 10 megabytes.

What license is Savory under?

The original code in Savory is available under the terms of the MIT License. The various components bundled with Savory are all free or open software, but they're not all released under the same license.

I want to be able to use my Kindle to read books in some other format. How do I make that happen?

Savory supports a subset of the conversions provided by Calibre. If you contribute to Calibre, Savory should be able to take advantage of those improvements.

Can I run other software on my Kindle?

I don't know. Can you?

Can you help me run other software on my Kindle?

No.

The Kindle has a 3G modem in it. Can I use that to get free internet access for my laptop?

Don't even think about it. The Kindle'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 "experimental" feature at any time. On top of that, Amazon knows where you live, has your credit card number and, thanks to the Kindle's GPS, knows where you are right now.

Where can I get support for Savory?

The MobileRead forums are probably the right place to start.

So, why is it called Savory?

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 "unsavory ePub hack." This new tool is a good deal more elegant and easier to use. It's no longer unsavory. That must mean it's Savory

Savory is awesome! Now I want a Kindle!

Great! That's the kind of thing I like to hear. Savory is (and will always be) 100% free. BUT! Shameless plug warning If you buy a kindle (or anything else) from Amazon, I'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'll post a running tally.

Who created Savory?

I'm Jesse Vincent. You can reach me at jesse - at - fsck.com. Please don't contact me directly for help with Savory, even if it sets your dog on fire or you're sure that I'll make an exception for you.

If you need help with Savory, I refer you to the forums at mobileread.com. (See above)