IMAP Webmail as File Storage

These days it seems like everyone is on the free web storage bandwagon, offering somewhere between tens of MB up to 2GB file storage and all kinds of options on how to share that with other people.  But remember back in the day when GMail was first lauched, and it was a hit because it offered 2 gigabytes of storage space where its closet competitors had only 10 megabytes free?

Well those inbox sizes have continued to grow, up to 7.5gb as of this writing.  GMail isn’t the only one with a big mailbox any more, but it’s certainly the most well-known.  What if you could convert that space into a web-based drive and store files into it?  Even at a 3-to-4 ratio (base64 encoding) you can still cram over 5gb into it, which is enough for many people to store a complete photo library, a document backup, etc.  Free offsite backup for just a bit of legwork.

This is a script called “mail-drive.pl” which does exactly that: it provides an interface to an IMAP mailbox and allows users to put, get, list or delete files from the store.  Individual files are broken down to smaller attachment sizes to fit into the mailbox on storage, and retrieved in the proper order when pulling to disk.  Using this, with a wrapper script in a cron job, will allow me to keep backups in a special gmail inbox which I can then get back later if I ever need it.  Free offsite backup!

FreeBSD Print Server

I scored a Lexmark Optra E312L laser printer off Freecycle yesterday.  For those who haven’t done the research, laser printers are THE WAY to go vs inkjets, maybe unless you print color.  Toner is multiple times cheaper and more convenient than ink cartridges plus it doesn’t dry up, and the printers themselves are built to last.

Okay, so now that I have a printer worthy of ownership, I want to share it with my house network so that I can print from any of the four computers here.  That means I want to add “print server” to the lengthy list of jobs my trusty FreeBSD box already handles.

Using lpd

There’s a few options when choosing a print spooler (the software that accepts, queues and dispatches jobs): you could use CUPS from Linux land, or LPRng or PDQ, but I went with the most basic of basic spoolers “lpd” because it comes prepackaged with FreeBSD.  So I started out by following the steps here, to add the Optra E312L as my sole line printer named “lp”:

http://www.wonkity.com/~wblock/docs/html/lpdprinting.html

Following these steps up to the “Adding A Printer” section got me printing ASCII without issue.  But when trying to use Postscript things fell apart, because the Optra E312L doesn’t understand PostScript – only PCL6 or newer.  Okay, so the solution to this is to get a “print driver” that can convert PostScript to PCL.  Solution: ghostscript.

cd /usr/ports/print/ghostscript8-nox11
make install clean

I disabled any X11 and CUPS features, enabled fontconfig and Freetype Bridge (no idea what that does but I do have FreeType already), left all the drivers enabled (compilation fails if you uncheck one of these but I don’t know which one it was) and let it go.  Once the job is complete, the “Adding A Filter” section of that tutorial is usable.  Great, now I have a PostScript-capable laser printer!

Printing from Clients

OSX threw a couple things at me that I was finally able to get around.  lpd opens up port 515 on the server – make sure to firewall this off from the Internet!  Open System Preferences, then Printing, click the plus sign to add a printer.  Click the IP tab.

  • Protocol is LPD
  • Address is 192.168.1.1
  • Queue Name is “lp” (without quotes)
  • Name is whatever you want – I picked “Lexmark Optra E312L”
  • Location is whatever as well – I picked “Server Closet”
  • Type is “Generic PostScript Printer”

Finally, lpd checks /etc/hosts.lpd for a list of who is allowed to print.  Ensure that your static IPs are loaded into /etc/hosts with names, then add the hostnames to hosts.lpd.  Send a test print from the Mac and pray for the best.

I have not tried to set up the printer from my Windows PC yet.

Euro1943 v1.1b

Introduction

Join the Axis or the Allies in this multiplayer team-based action game. Pick up weapons to help you fight enemies and take over strategic capture points on the map. Climb into a tank, gunboat, or fighter plane and support the infantry on the ground. Or hop into the HQ and spend your team’s funds on weapons and vehicles for the players to use.

Euro1943 is a combination RTS/action game where players take on the role of both soldiers and generals. It was designed as an entry to the 4 Elements V contest at www.gamedev.net, where it took 7th place (out of 24 entrants). The README file contains gameplay information.

Please see LICENSE.TXT for more information about who can use this software, what you can do with it, etc. The long and short of it is that this is freeware, source code is not available (sorry, it’s a wreck), and I’m not responsible for what happens to your computer when using this software.

Screenshots

Downloads

Last updated Oct. 5, 2009

    Egg Drop Soup

    Introduction / History

    Here’s a guilty pleasure: http://dragcave.net, a “click to grow” adoptables site.  It’s a somewhat pointless and spammy website where users click on colorful pictures of eggs to collect them, then repost those images on other websites to gather unique views from anyone else who sees them.  After enough views, the egg hatches and grows up into a full-sized dragon.  So it’s got kind of a viral effect – the eggs get reposted to forum signatures etc. where other people click the eggs to find out just what the heck is the point, and then some of those people stick around to collect eggs and spread them even further.  It grows itself.  There are a ton of adoptables sites out there – Dragon Cave is just the one my wife found first, and by extension it’s the one I joined.

    Somewhere in the history of adoptables sites, a user figured out that there was an easier way than spamming message boards to gather a large number of views: simply set up a huge “egg dump” area on a dedicated fan site, and ask users to come view the eggs and post their own.  For Dragon Cave three or four popular fansites had cropped up by mid-2009, designed by budding webmasters with varying degrees of aesthetic and coding skills.  That’s about the time that I decided to set up my own, just to see what was involved and how successful it would be.  So: Egg Drop Soup was born.

    http://greg-kennedy.com/dragcave

    The entire site is coded in PHP, and the earliest version screen-scraped everything from the bare HTML code to do the work.  It all felt like a hack, with the site design geared fully towards functionality and a minimum of flashy web content.  For whatever reason the site caught on .  A few whiz-bang features, plus the fact that several big-name fansites folded when an unannounced API change came through, boosted the site to about 5000 users at its peak.

    Recent Progress

    I’ve spent the past few days on a mild resurgence in EDS development.  Dragon Cave has an officially supported API which makes screenscraping obsolete, but I hadn’t ever ported over the pages to use the new features.  Since the HTML had changed in the meantime, this meant a lot of annoying bugs had crept in.  So step 1: port the code to use the API.  Once that was complete, I added a long-missing “Emergency Room” feature: this prioritizes the eggs in danger of expiring at the front of the rotation, so they gain a massive infusion of views and hopefully promote to adulthood (and immortality).  There are a couple of other features in the works, but I feel I’m nearing the end of what I set out to do with this project, and it’s going into maintenance mode unless some inspiration strikes me.

    Okay, so this is a pretty boring post, but I wanted to make it for a couple of reasons.  First, it helps me to keep track of what I’ve been working on – this blog exists to categorize my projects, and since I’ve sunk a good number of hours into this one, it warrants a mention.

    Second, I’m seriously considering open-sourcing the code to the site (BSD 2-clause license).  I don’t feel there is much danger in userbase loss to clone sites, because being an established name in the DC community is as much (if not more) a driver as features.  People simply gather where everyone else gathers, because that’s where the views are.  So if someone throws out “EDS 2” on stock code it’s no real threat to me.

    Instead, I think this would help out a lot of struggling devs on the site by dropping a full-featured codebase on them.  I’ve seen at least one forum post where people are discussing the technical details of setting up a hatchery.  I think EDS is a perfect “skeleton code” example, because it really focuses tightly on making things work, and leaves the web design to the imagination… or the future adopters of the code.

    iPhoto Modified Importer (1.0)

    Purpose

    iPhoto Modified Importer is a tool to import digital photos to your iPhoto library as “modified” versions of original photos.  By default iPhoto only lets you import Originals.  This is a workaround to keep some existing linkage between Original and Modified versions on your disk, and bring that relationship into iPhoto.  It tricks iPhoto into thinking it is an external editor, then allows you to replace one photo with another from disk.

    Background

    Before I used a Mac, I organized and edited all my digital photos with Digikam on Linux.  My workflow looked something like this:

    • Create a folder for the Album (e.g. “4th of July 2010”)
    • Create a sub-folder beneath that called “Originals”
    • Import all photos from the card to the Originals folder
    • After editing an Original, save it to the top-level folder with the same filename.

    By doing this, my release-ready photos were at the top level of every album, while Originals contained digital negatives and unedited photos for safekeeping.

    Now that I am using a Mac I’d like to switch to iPhoto and get used to its workflow.  I have no problems letting iPhoto manage my library by itself, copying my photos into a consolidated location, etc.  But the first stumbling block I run into is: how can I preserve that linkage between digital originals, and the modified versions?

    Most advice boils down to: “import them separately”.  But that leaves duplicates in the library, and worse it splits my workflow into “pre-iPhoto” and “post-iPhoto”, because any newly edited photos _will_ be linked.  Also, I can’t easily track which edited version goes with which original.  Since iPhoto uses its own database to keep relationships and photo info, there’s another problem: getting modified versions into iPhoto is hard.  You can’t just copy the files to the right location and expect them to be there.

    Solution

    Here is a solution that relies on iPhoto’s “Edit in External Editor” option.  Place the app somewhere on disk and then under iPhoto Preferences, change the Edit drop-down box to point to the app.  Now, when you double-click on a photo, it will start up iPhoto Modified Importer.

    Use the Browse button to locate your target edited photo on disk, then hit OK.  The tool will “save” the image to the correct location, and exit.  iPhoto should then recognize that the file has changed and update the thumbnail, etc.

    Warning

    This tool is HIGHLY UNTESTED.  It doesn’t ask before saving over anything you’ve done, and it probably has potential to destroy already edited photos in your library.  BACK UP BEFORE YOU TRY TO USE IT.

    Future Goals

    There are a couple of additional items on the screen that I hope to one day turn into a useful feature.  Ideally you could set up a source directory first, and then iPhoto would report when a filename match is found, defaulting to that location.  This would speed up the import process.

    Download

    iPhoto Modified Importer 1.0 – zip file 2.6MB

    This ZIP file contains the application, and the source code.  It requires XCode to build and… well, I really don’t even know what version of OS X it’s for.  10.6 at least.  Cocoa is a language designed by moon men for the sole purpose of being impossible to understand by Earthlings, but maybe it will make more sense to someone else than it does to me.