Cory Doctorow – With A Little Help

One of my favorite authors, Cory Doctorow, has a new book out titled With A Little Help. As always, Cory FREELY gives away his eBook versions (although you must pay for physical paper versions or audiobook versions). Cory encourages people to make alternative formats of his books and distribute them freely. Sadly, he only publishes (on his website) the first submitted version of any individual file format. I tried the .Mobi (for Kindle and others) and .ePub (Sony, Nook, and others) that he has made available on his website and found them to have some serious formatting issues, missing cover images, etc. I’ve done some massaging of his HTML version and produced my own .Mobi and .ePub versions and believe they are superior. Please give them a try. I welcome your comments.

These files were updated on Dec. 20, 2010 and include typo corrections up through Dec. 17, 2010.

Shure SE315 Headphones Review

I’m a big fan of “In Ear”, sound-isolating headphones. I’ve previously owned the Etymotics ER-6, and Shure SE210, SE310, and SE530. All of these headphones have amazing sound reproduction, but the fragile part of any pair of headphone is the cable itself. Both Etymotics and Shure have pretty decent warranty, but replacing the cable outside of the warranty is nearly as expensive as buying a new pair of headphones. While My SE310’s are still in good shape, all the others needed cable replacements, received at least one replacement under warranty, and are now “out of service”.

The Shure SE315 continue are true to the Shure branding and are marvelous headphones. After using them for about a day, it appears Shure has solved almost every issue with their previous headphones.

Pros:
  • They’re Shure headphones, so they sound great and come with lots of different tips for nearly any preference.
  • The in-ear comfort is exactly the same has previous Shure entries. If you’ve owned Shure before, you know what you are getting into for fit.
  • The replaceable cable is something that was SORELY needed. Nothing is worse than paying $200+ on a pair of headphones and having the cord break out of warranty and have it cost nearly the original purchase price to have them replaced by Shure. Now, just replace the cable with a new $50 cable.  Admittedly, $50 isn’t cheap, but that’s a lot less than it would have been with previous Shure headphones. Replacing the entire cable is SUPER easy.
  • The body of the headphone itself is angled better than with previous models, so they are more flush to your ear. They should work better with earmufs, ear on a pillow, etc.
  • The “over the ear” part of the cable is now covered in a thin foam(-like) sheath, so hopefully less cord breakage should occur around the ear, which seems to have plagued previous Shure headphones.
  • The 1/8″ jack now seems sturdier than previous models and is angled, so it should last longer.

Cons

  • Yup, they’re Shure. Yup, they’re expensive.
  • I loved that on my previous  Shure headphones that the cord split in the MIDDLE, so if the part of the cord that connected to the 1/8″ jack needed to be replaced, it was a pretty cheap replacement. Also, if the cord gets jerked away (caught on something), it just disconnected in the middle. This feature is gone. The cord is one single piece like with other headphones.
  • The 1/8″ jack itself, while beefy and angled (both great features) is REALLY fat – about 1 cm wide. If you don’t use a case (like I do for my iPhone), you’ll be fine, but if you do use a case, I think there is an excellent chance you won’t be able to plug in the headphones unless you ream the case hole wider (which is what did, using a knife), get a case with a huge headphone jack hole, or stop using a case (not an option for me).
The SE315’s are three steps forward (yay replaceable cable) and one step back (huge headphone jack and a single piece cable instead of a split cable design). I do intend to get the “CBL-M+-K” for the iPhone mic and music controls and maybe that will have a more svelte 1/8″ jack.

Overall, I’d mark the SE315’s a 4.5/5.

Kindle / ebook Transcript

On the morning of November 2, 2010, the Supreme Court heard oral arguments regarding Schwarzenegger v. EMA. You can read details about this on Wikipedia, but in short, it regards a California law that tries to make deviant / violent video games illegal to sell to minors and places legal penalties (fines, etc.) on such sales.

I originally got the transcript in PDF format from Scribd thanks to Christopher Grant who posted it there. It’s a very interesting read.

For easy viewing on the Kindle and other ebook readers I’ve converted it to .mobi format (click the link to download). I’ve made a few very minor formatting changes to increase readability for the ebook format and fixed one or two typos or added missing letters but I’ve tried to keep the text exactly as it came from the original PDF I got from Scribd.

To install this on your Kindle, just download the .mobi file, connect the USB cable to your Kindle, and place the .mobi file in your Kindle’s “documents” directory or email it to your Kindle email address.

An update, launching mrxvt (or urxvt)

The latest Cygwin update seems to have broken how I launch mrxvt… my shortcut no longer worked. I tried countless permutations and nothing helped. After a lot of searching, I found that back on February 21, 2007 Angelo Graziosi posted a solution to the Cygwin mailing list that works for me (Hooray Google! Hooray Angelo!). His instructions were for launching urxvt, but I’ve brought them up to date and modified them for mrxvt.

First create a shell script. The one I created was named /usr/local/bin/start_mrxvt.sh

#!/bin/bash

export DISPLAY=:0

/usr/bin/checkx || startxwin

exec /usr/local/bin/mrxvt -e /usr/bin/bash -l

Next, create a shortcut to run the script with the following parameters

Target:   C:\cygwin\bin\run.exe -p /usr/X11R6/bin bash --login -c /usr/local/bin/start_mrxvt.sh
Start in: C:\cygwin\bin

This method works especially well because if X isn’t already running, the script will start X before running mrxvt.

Setting jqGrid column width from titles

Lately I’ve been playing a lot with jqGrid, a very nice Grid / Table plugin for jQuery / jQuery UI. It does some really amazing things including allowing you to have a scrollbar that replaces the standard “next page” / “previous page” that you see in most web applications. I have tables that are sortable on multiple columns that have tens of thousands of results and I can scroll through them easily. It is also easy to leverage filtering, etc. All this takes a touch of server-side code, but it is all astoundingly easy.

The one trick I couldn’t figure out how to do was to set the column with based on the Title. In most grids with just a few columns, this isn’t an issue – you set the size (in pixels) and go on your way. But what if you don’t know the column names ahead of time (they come from the database) and you just want to make sure the column with is a minimum of a number but a maximum big enough to hold the title plus a bit of padding?

After the grid has been created, you cannot programmatically set the width of columns, so it has to be done before the grid is created. Normally you create a jqGrid as such:

    <table id="list"></table>
    <div id="pager"></div>
    <script type="text/javascript">
        var colNamesData = ['Inv No','Date Of the Transaction', 'Amount That Is Owed'];
        var colModelData = [
            {name:'invid', index:'invid', width:55},
            {name:'invdate', index:'invdate', width:90},
            {name:'amount', index:'amount', width:80, align:'right'}];
        jQuery(document).ready(function(){
        jQuery("#list").jqGrid({
            ...
            colNames: colNamesData,
            colModel: colModelData,
            ...
        });
    </script>

To set the column widths automatically to the title, for any column in the column model I added a new boolean attribute resizeToTitleWidth and only resized the column if this was set to true. Here is the new code that resizes the desired columns.

    <table id="list"></table>
    <div id="pager"></div>
    <span id='ruler' class='ui-th-column' style='visibility:hidden;font-weight:bold'></span>
    <script type="text/javascript">
        var colNamesData = ['Inv No','Date Of the Transaction', 'Amount That Is Owed'];
        var colModelData = [
            {name:'invid', index:'invid', width:55},
            {name:'invdate', index:'invdate', resizeToTitleWidth:true},
            {name:'amount', index:'amount', align:'right', resizeToTitleWidth:true}];
        jQuery(document).ready(function() {
            var ruler = document.getElementById('ruler');
            for (var i in colNamesData) {
                if (colModelData[i].resizeToTitleWidth != true) {
                    continue;
                }
                // Measure the title using the ruler span
                ruler.innerHTML = colNamesData[i];
                // The +26 allows for padding and to fit the sorting UI
                var newWidth = ruler.offsetWidth + 26;
                if (newWidth < 100) {
                    // Nothing smaller than 100 pixels
                    newWidth = 100;
                }
                colModelData[i].width = newWidth;
            }
            jQuery("#list").jqGrid({
                ...
                colNames: colNamesData,
                colModel: colModelData,
                shrinkToFit:false,
                ...
        });
    </script>

The key to obtaining the width is the additional hidden HTML span tag with the id of ruler.  This hidden span has the same CSS style as the column header, so we can place the column title text into this span and obtain the width of the text geting the span‘s offsetWidth. After we have the width, we pad the width with enough extra space to hold the sorting UI.

It would have been nice if the column had an attribute that forced the width to accommodate the the columns title (but allowed for a minimum width, here 100 pixels) but we find that it isn’t too difficult to add the functionality ourselves.

The above example is meant to be illustrative rather that a complete working sample. I’ve put together what should be a simple, working sample you can try.

Console, Cygwin, and Windows 7

My DOS and Unix roots often show – I like using the command line. On all of my Windows-based systems I have Cygwin installed to provide many of the luxuries of Unix / Linux right from my windows system but the window that contains the Windows command line interface (cmd.exe) and Cygwin’s bash leave something to be desired. Copy and Paste is a pain and after growing so accustomed to having tabs in my browser, not having tabs to different command lines is a pain (especially when you connect to multiple systems which I often do, especially at work). A few years ago I discovered an open source project called Console. Console is a great little program. It supports copy and paste much like XTerm (just select text and it is copied, middle click and it pastes). I’ve been using it daily and loving it. It has one major drawback, though, in that it isn’t actively updated / worked on. Through Windows Vista that was fine, it didn’t really need any work but starting with Windows 7 there is some conflict that keeps it from working correctly. I did some searching but had a hard time coming up with a suitable alternative until I discovered mrxvt. mrxvt isn’t actually a Windows program at all but rather is a Unix program written in X that can be compiled and run using Cygwin.

mrxvt

Ultimately, what mrxvt provides is a tabbed xterm (well, a tabbed rxvt to be more precise). Getting it running isn’t quite as easy as just clicking install because -a- it isn’t a Windows program, they don’t provide Windows binaries for it, and because it isn’t a package that is distributed by Cygwin… but, it isn’t all that difficult. The steps are as follows:

  • FIRST! If you are installing on Windows 7, start with Cygwin 1.7. This may still be in beta, you might want to look here for the beta.
  • Download the Cygwin installer and install Cygwin including X. Follow these instructions to get Cygwin and X installed. You will need the following Cygwin packages (some of which are mentioned in the previous Cygwin/X instructions)
      X-start-menu-icons
      xorg-server
      xinit
      inetutils
      openssh
      xterm
      gcc
      make
      autoconf
      automake
      libiconv
      font-misc-misc (probably already there from the earlier X packages)
      libX11-devel
      all of the cygwin rxvt packages
  • Copy the “XWin Server” shortcut from the “Cygwin-X” program group to “Startup” so Windows automatically starts XWindows at bootup
  • Download the latest (0.5.4 at the time of this writing) mrxvt into your Cygwin
  • Move the mrxvt .tar.gz file to your Cygwin home directory. If the Windows user you are logged in as is named “Kevin”, your Cygwin home directory will be “c:\cygwin\home\Kevin”.
  • Start rxvt or xterm. The shortcuts for these should be in Start | Programs | Cygwin or Cygwin-X – it should start you in your Cygwin home directory (in Cygwin if your Windows user name is Kevin you will be in ~/Kevin or /home/Kevin – which are the same thing)
  • Extract the files from the .tar.gz with the command, change into the newly created directory
      tar zxvf mrxvt-0.5.4.tar.gz
      cd mrxvt-0.5.4
  • Configure before compilation – if you are missing any Cygwin packages you will probably learn about them here
      ./configure --enable-everything --disable-debug --with-save-lines=99999
  • Compile and install
      make
      make install
  • You can now make a shortcut on the Start menu to launch mrxvt. The Target of the shortcut should be
      C:\cygwin\bin\run.exe -p /usr/local/bin/ mrxvt -display 127.0.0.1:0.0 -ls
  • If you prefer to run CMD.exe (Windows Commmand shell) instead of Bash, you can set the Target of the shortcut to
      C:\cygwin\bin\run.exe -p /usr/local/bin/ mrxvt -display 127.0.0.1:0.0 -e cmd.exe
  • Finally, mrxvt is very customizable. The easiest way to customize it is to create a file named “.mrxvtrc” in your Cygwin home directory. My .mrxvtrc file contains the following content
      Mrxvt.foreground: black
      Mrxvt.background: AntiqueWhite
      Mrxvt.scrollbarStyle: next
      Mrxvt.scrollbarRight: True
      Mrxvt.xft: True
      Mrxvt.xftSize: 16
      Mrxvt.xftAntialias: True
      Mrxvt.command: /usr/bin/bash -l

Hopefully one day soon Console will be updated and support Windows 7. I don’t really love having to run XWindows to get a tabbed console that supports nice copy and paste, but for now this solution works.

Know of a better, simpler solution? Let me know!

Amazing Movie, New TV Shows

I saw the previews for Zombieland a few weeks ago. It showed some promise, but too many movies show promise and fail to deliver. I am happy to say that Zombieland delivers and in spades. I went to see it at the local gigaplex… they were offering it on normal screens and on “Giant Screen” which means they project it on their IMAX screen but without the extra IMAX features – it’s large but it doesn’t consume the whole screen. Anyway. It was a fun, funny movie: Dripping in style, great writing, nice effects. There isn’t a single thing I would change about it. If you like comedy zombie films like Sean of the Dead you should check this out. Woody H. was a perfect choice for co-lead on this film. Jesse Eisenberg was also a very good choice although I kept thinking he was going for a Michael Cera thing throughout the movie – I could almost hear the director shouting “do more Michael Cera!”. Not to be missed (but probably not for the kiddies).

On to some new TV shows (or new to us, anyway). We finally started watching Lie To Me after my sisters urging since it started. We’re really enjoying it and trying to catch up so we can start season 2 which the TiVo is recording for us. We’re enjoying Glee – sort of an American Idol meets sit-com. The first episode of Community was a huge train wreck, in our opinion (which is too bad, we like most of the people), but the second episode redeemed it self a bit and was watchable – we’ll see how it shapes up. Parks and Recreation is still “pretty new” and is continuing to show promise. The Forgotten is very Cold Case-ish but we’re enjoying it. Sons of Anarchy isn’t terribly new to me (I loved season 1) but if you aren’t watching it, go get the season 1 DVDs and get busy. Finally, Flash Forward is showing real promise – very interesting premise and solid execution so far.

Sad, Yet Thankful

My dad, the best man I know, died this last week. He battled cancer for a couple years and finally it got the best of him, although he put up a good fight.

I am thankful for good doctors. Even though he endured surgery, chemo-therapy, and radiation treatments I am thankful that at the end he was only in the hospital for about a week and the suffering was controlled reasonably well. I am thankful his brother Jim and all of my siblings and I made it to see him, talk with him, and laugh with him one last time before he died. He generally appeared to be asleep, but he was often responsive even when you expected he wouldn’t be.  I am thankful for what a great man he was, what a great role model, and what a changer of lives he was.

I am thankful for friends who know how much my father meant to me and have helped and supported me through this, each in their own unique way. I am thankful for my siblings who share my sadness and were able to be with me last week with me, making it that much easier to bear. I am thankful for my amazing wife who is always by my side (and reminds me to come to bed when I am up re-writing my blog at 3am for the 10th time because I can’t seem to write exactly what I am feeling).

I lost my mom in 2001 to cancer. I miss her every day, but I am thankful my dad found Ann. Ann and her family were not only a blessing to my father, but they continue to be a blessing to me and my family. Thank you Ann (and all of your wonderful family).

Not the least of all I am thankful my parents chose me. They loved me unconditionally and even through great distances of time, space, or life they have never and will never leave my side or my heart.

Foaming Hand Soap

I love the foaming hand soap. I don’t recall where I used it first but over the last couple years it has become very popular – we use it exclusively at home (we evening use foaming dish soap when we do dishes in the sink) and we find it in more and more resturants, etc.  I think the soap folks know that people really like the foamy stuff so they charge a premium for it. I just did a search on FreshDirect (which I am sad that I cannot use at our new apartment because we’re too far away) and I found that 7.5 ouces of Dial Antibacterial Liquid Soap is $2.19 while 7.5 ouces of Dial Antibacterial Foaming Hand Wash is $2.99. In the past I have paid the premium for the foaming stuff becase I really do like it better, but I’ll let you in on a secret I learned not long ago…

What makes this foaming soap special is not the soap – it is, I believe, the exact same soap! The difference is the pump’s dispenser. Make a one time purchase of the soap in the foaming soap dispenser and but then when it is empty keep the bottle. For all future purchases buy the less expensive non-foaming variety. What is even better is that you don’t use the entire bottle! Put about 1/8 of the non-foaming liquid in the foaming bottle and then fill the rest of the bottle with water (this is a necessary step – the non-diluted soap is too thick for the foaming dispencer). Give the bottle a little shake and now you have foaming soap. For $2.99 + $2.19, a total of $5.18, you now have nine bottles of foaming soap – that’s about $0.58 a bottle. Just continually refill the foaming bottle with this soap-water mixture until the pump breaks.

MP3 Tips

I am an audiobook lover. I’ve come up with some steps and software that will aid you on your quest if you’re like me and want to enjoy your audiobooks on your iPhone or iPod (most steps apply to listening on any device).

Before I get into the gorey details below, I will mention that Audible.com can be an excellent source of audiobooks. They make it very easy to buy books, get them on your device (without all of the steps below). You will own them as long as Audible exists and can delete them from your device and re-download them later.  I like Audible, but while they are somewhat reasonably priced they aren’t free. The below steps will aid you in getting audiobooks on CD that you own or have borrowed from the library onto your device.

Finally before we get started: if you are checking out audiobook CD’s from the library, please respect the system. If you have borrowed the audiobook for 3 weeks and gone through the process below to get it onto your device, please listen to the book and delete it once your lending period is over. I’m not encouraging you to steal audiobooks, I’m just trying to give you a more convenient way to listen to the ones you have. Certainly if you have bought the audiobook CD’s, keep them on your iPod as long as you like. I have recently found the Amazon is sometimes selling the audiobook CD’s nearly as cheaply as the hardcover. I’d love to see audiobooks become even more mainstream.

Ripping the book to many MP3s

  1. As I mentioned before, don’t forget your local library. Most libraries check out audiobooks on CD (skip the tapes these days). Many libraries even have “download” support for audiobooks that uses the “Overdrive” service. These are a great source of free audiobooks. Also of note, Cracker Barrel restaurants rent audiobook CD’s at a modest price last I checked.
  2. There are a ton of CD ripping programs out there. My personal favorite free one is CDex. If configured correctly, this will rip a CD right to MP3 using the LAME encoder which is a really great, free MP3 encoder. I suggest ripping each disc to its own folder. Make sure before you rip that you are giving filenames that include a track number. In CDex, go to Options | Settings | Filenames to change the filenames it writes and the directory to write the files to. I prefer a filename setting similar to “%1\%2\%7 %4”.
  3. When encoding music, a high bitrate in stereo is preferable (at least stereo, 160 kbps). When encoding an audiobook, I always generally encode at 64 kbps, mono, 44.1khz frequency, CBR (constant bitrate). I don’t recommend VBR (variable bitrate), especially  for audiobooks.
  4. For tagging MP3 files, I love the free program Mp3tag. It’s pretty easy to use and does pretty much everything.

Renaming & Re-tracking the MP3s (so you can merge them)

    1. Start Mp3tag
    2. Set the “Directory” (on the left) to be the folder that contains all of the folders. The right pane should then contain all of the files from the audiobook, across all of the discs.
    3. Sort the files in the right pane by “Path” but clicking on the “Path” column header. Scan through the list, it should now be ordered by disc and within a disc it should be ordered by track number (this order should be the correct order for the entire book).
    4. Select all of the files for the audiobook (click on one file, then press Control-A). We will now renumber the tracks numbers. Select Tools | Auto-numbering wizard (or press Control-K). Make sure “Leading zeros…” is checked and “Reset counter…” is not checked. Click OK.
    5. We want to rename the files to include this new track number. All of the files should still be selected. Select Convert | Tag – Filename (or press Alt-1). A format such as “$num(%track%,4) – yourbookname” is probably appropriate. The “4” specifies the total number of digits (padded with leading zeros) that will be used in the filename when writing the track number. “4” is good for books with 1000-9999 tracks. If you have fewer than 1000 tracks, you can use a smaller number than “4”.
    6. Now that we know the mp3s contain a track number that is unique across the entire book and that this new, unique track number is reflected in the filename, we want to move them all to a single directory. Still with all of the files for the book selected, select Edit | Move. Select the single folder you want all of the files moved to. Once you click “Select Folder” Mp3tag will move all of the files to that folder.

    Merging the MP3s

    1. The next thing we want to do is to merge all of these files into a single MP3 file. Currently my favorite program for doing this is MergeMP3. Start MergeMP3 and drag all of the files you want to merge to the MergeMP3 window. Make sure the order is correct (look at the track numbers in the filenames) – if the order is incorrect, click on the File Name column header once or twice until the order is correct.  Check the “Include ID3 Tag” and fill out the information for the ID3 tag. I always specify a Genre of “Audiobook” for my audiobooks. Select File | Merge to start the merge process. I generally write the merged MP3 file to a filename such as “author – booktitle.mp3”. This merge process will just take a few seconds (maybe a minute or so for a long book).
    2. You now have the entire book in a single file. You don’t need to keep the individual files you used for the merge – you can delete them.

    Adding the Merged MP3 to Your iPod / iPhone

    1. Assuming you are using an iPod or iPhone, drag that single file file into iTunes.
    2. By default, the new MP3 will appear in Music, but we don’t want it there. Search for it in Music then right click on it and select “Get Info”.
    3. First check the Info tab. Make sure it is tagged how you want it. Make sure Name, Artist, and and album are filled in. Make sure Genre is “Audiobook”. Second, go to the Options tab. Change the Media Kind to “Audiobook” and check both “Remember playback position” and “Skip when shuffling”. Third, go to Artwork. In a web browser do a Google Image search for your book’s author and title. Once you find an image you like, click on it to open it and then the click on “See full size image” (top left). Drag the image into the iTunes Artwork box. Now close the iTunes window by clicking OK. It may takes iTunes from a few seconds to a couple minutes to write the new details to the file.
    4. The book will now be located in iTunes not in Music but in Audiobooks. On the left, click Audiobooks to see that it now appears there.
    5. Sync your iPhone or iPod and you are ready to start enjoying your book “on the go”.