Jay McGavren's Journal

2012-02-02

Zip + RSync = Easy to Maintain, Easy to Download Collections

Most people who’ve used a command line know about the existence of the “zip” utility. It’s basically a scriptable version of the archive tools we all use in our file browsers. Hopefully most people also know about RSync, which brings a directory structure into sync on two machines by creating, deleting, and updating files as necessary.

What people may not know, however, is that RSync will transmit only the updated portions of a file if it already exists on the remote side. That means you can easily maintain downloadable .zip archives, so your audience can retrieve whole collections of files at once. (Say, of your favorite Creative Commons-licensed music, which is the example we’ll use here.)

We start with a command line to add MP3s to a .zip file:

$ zip ~/Documents/media/cc_music.zip 
/Users/jay/Music/iTunes/iTunes Music/Ghost/ccMixter/Lullaby.mp3

The long music path is for convenience - that way I can just drag-and-drop files onto a terminal. It’s a nice touch that the full folder structure is preserved (though I will likely want to strike the “Users/jay” directory at some point):

$ unzip -l ~/Documents/media/cc_music.zip
Archive:  /Users/jay/Documents/media/cc_music.zip
 Length     Date   Time    Name
 --------    ----   ----    ----
 3664924  06-26-11 00:58   Users/jay/Music/iTunes/iTunes
Music/Ghost/ccMixter/Lullaby.mp3
...

If we use && to add on an rsync command, the .zip file will automatically be sent to the remote server if compression is successful:

$ zip ~/Documents/media/cc_music.zip
/Users/jay/Music/iTunes/iTunes Music/Ghost/ccMixter/Lullaby.mp3 && 
rsync --verbose --compress ~/Documents/media/cc_music.zip 
jay.mcgavren.com:files/cc_music.zip

In the output, we can see the file being zipped, followed by the rsync transmission info:

 adding: Users/jay/Music/iTunes/iTunes
Music/Ghost/ccMixter/Lullaby.mp3 (deflated 3%)
cc_music.zip

sent 3556109 bytes  received 31 bytes  78156.92 bytes/sec
total size is 3554835  speedup is 1.00

Keeping all this as one command allows automatic updates of the remote file as new MP3s are added:

$ zip ~/Documents/media/cc_music.zip 
/Users/jay/Music/iTunes/iTunes Music/DoKashiteru/ccMixter/Our
Slanted Voices (ft. Colin Mutchler).mp3 && 
rsync --verbose --compress ~/Documents/media/cc_music.zip 
jay.mcgavren.com:files/cc_music.zip
 adding: Users/jay/Music/iTunes/iTunes Music/DoKashiteru/ccMixter/Our
Slanted Voices (ft. Colin Mutchler).mp3 (deflated 1%)
cc_music.zip

sent 5043684 bytes  received 11377 bytes  306367.33 bytes/sec
total size is 8595106  speedup is 1.70

Those transmission sizes represent only the new MP3 that’s been added, not the whole archive. For example, if I add a small README.txt to the archive…

$ zip ~/Documents/media/cc_music.zip README.txt && 
rsync --verbose --compress ~/Documents/media/cc_music.zip 
jay.mcgavren.com:files/cc_music.zip
 adding: README.txt (deflated 36%)
cc_music.zip

sent 1288 bytes  received 20521 bytes  3965.27 bytes/sec
total size is 11636110  speedup is 533.55

…note that only 1KB (of the now-11MB file) is actually transmitted. Updates to files in the middle of the archive likewise cause the retransmission of only that file’s zipped content.

This can of course be converted to a shell script, but personally I think doing it all at the prompt lends itself to ad-hoc, on-the-fly alterations. (I wouldn’t want a script sitting around for every collection I could think to post.)

And I can certainly think of a lot of things to share this way - Project Gutenberg books, Creative Commons wallpapers, your own photos, basically anything that you can freely redistribute. Some care needs to be taken with variance in licenses (I had to add attribution ID3 tags to some of the MP3s, for example). But generally, it should be possible to include the needed documentation in the archive alongside the content. (I am not a lawyer, this is not legal advice, etc. etc.)

I view this as vastly preferable to clicking though dozens of archive.org pages to manually download individual files. If you agree, I hope you’ll use this technique to start sharing your own collections!

Read more...
2012-01-31

A Creative Commons Mixtape

Creative Commons (creativecommons.org) is a license you can apply to stuff you create that basically says “anyone can redistribute this as much as they want, they just have to give me credit”. I figured that would enable people to conveniently and legally share huge zip-files of their favorite Creative Commons music, but that hasn’t been the case so far. So, here’s my attempt to fix that:

cc_licensed_music.zip

Just download and unzip; it’s already sorted into folders for you. Drop the whole shebang on top of iTunes to import the tracks. Share with whoever you like; it’s totally legal to do so.

I discovered a couple clever tricks with Linux utilities that will let me easily update this file as I discover new CC music, so feel free to bookmark this URL. And don’t worry, I’m being selective; I know there’s a lot of crap out there. These are real gems, though. If you agree, most of the artists have other music for sale; visit the URLs in each MP3’s comment field to find it.

Read more...
2011-08-16

Calling to remind and remind and remind

Received: Tue, 16 Aug 2011 17:35:00 -0700 (PDT)

Subject: New voicemail from (602) 999-9999 at 5:35 PM

From: Google Voice

To: me@example.com

Transcript: The [doctor’s office], calling to remind Jeremy of the an appointment on Tuesday, August 23rd at 11. Hey and in the pediatric office. Please listen to the following options to confirm your appointment, please press 1 to confirm your appointment. Please press 2, to repeat this message. Please press 3, to cancel or reschedule your appointment. Please press forward to hear. Directions to our office. Hello. This is [doctor’s office], calling to remind Jeremy of the an appointment on Tuesday, August 23rd at 11. Hey and in the pediatric office. Please listen to the following options to confirm your appointment, please press 1 to confirm your appointment. Please press 2, to repeat this message, please press 3, to cancel or reschedule your appointment. Please press forward to hear. Directions to our office. Hello. This is [doctor’s office], calling to remind Jeremy of the an appointment on Tuesday, August 23rd at 11. Hey and in the pediatric office. Please listen to the following options to confirm your appointment, please press 1 to confirm your appointment. Please press 2, to repeat this message, please press 3, to cancel or reschedule your appointment. Please press forward to hear. Directions to our office.

Play message:

https://www.google.com/voice/fm/9999999999999999 /loremipsumdolorsitametconsecteturadipisicingelitseddoeiusmod

Read more...
2011-08-06

Media manifesto...

A friend asked me by e-mail what I was passionate about. When I had completed my long-winded answer, I realized that while I think endlessly about my life goal, I had never really written it down before. So, I’ve included it here.

My contribution to this whole mess is going to be tools that enable creative expression. So far it’s been the direct creation of art - generative art and game libraries. But the world is most lacking in tools that allow people to share what they’ve made (and make a living doing it). Sure, there are publication channels like Amazon and the iTunes Store, but you usually have to design what you’re making to fit the channel.

I want people to be able to write a book or a song, mark it as available for sale, and that’s all they have to do. Software should take care of publishing it to a website AND the Android Marketplace AND future channels that haven’t been invented yet. It should take care of promoting your work directly to people who are interested, and it should gather payments for you from all these places and plop them into your bank account. It should also give you feedback on who likes your work and why. If you want to publish your work for free, or allow others to remix it, the same tools should allow you to do that.

Read more...
2011-07-21

Apple II Rescue!

Huge thanks to Austin and Zach at Heatsync Labs for their massive efforts to rescue my old Applesoft Basic programs. Don’t have the source yet (it’s on a IIgs 3.5” floppy that I also can’t read, but it’s an improvement), but I do have some runtime footage!

http://www.youtube.com/watch?v=p4IoyFgAmqI

Read more...