Sentry

Pig MaskIt started out on the trajectory of being a normal Tuesday. Stan clocked in at his job at the photomat, put on his smock, mixed up the morning’s chemistry, pulled the rolls of undeveloped film and job tickets from the basket. Birthday parties, vacations at Yosemite, smiles in front yards. Then a cold gaze struck like lightning; Stan, frozen, laid eyes on the porcine face of the Alien, locked into the stare, the glossy print a two-way window, a one-way door. The Alien the sentry, standing guard, gaging Stan’s soul, evaluating the weight of Stan’s anima, judging Stan’s fate with regards to crossing over the rubicon to the place for women only. Denied. “All men are pigs, all men are pigs.” The second shift replacement found Stan curled in the corner of the lab, trembling hands clutching his face, a wilted phallus of gray, smoken ash jutting from between yellowed fingers, breaths broken by stuttered sobbing. “Pigs. Pigs.” Waylaid on the border between here and neverwhere, Stan never came back.

(Thanks, and blame, to Josh Hultberg for posting this image to his Facebook stream; when I went to comment, this vignette came out.)

Screwdriven

Several screwdrivers later is not the time to reflect on inflection points in your life.

One wrong mental turn, and I’m back in ’94~’95 thinking about all those times my academic advisors and professors tried to steer me right, before they held up their palms. Back when the murk of having my head down in it was cleared away, and suddenly I saw my way to bigger life beyond my lessons. To a manicured consciousness. To a poetic intellect. To a controlled lifestyle. To dropping the shackles of my adolescence and taking my destiny. To a real effect on my own life.

I could’ve wowed them, but I didn’t; I had my young notions of dignity, of standing with a raised fist in my heart, and that really didn’t get me far. My profs tried to get the best out of me; they saw it. But I held it back from them. Decided real life was more important. Decided floating on with friends was more important. It seemed so clear then. Really, it was me being a stupid 20-something with big ideas of being a grown-up. Throwing myself into fascinations without committing to them and addictive behaviors before I understood they were controlling me. What a dumbass.

Grant me the serenity and steadfastness to mend my ways and redirect my path to greatness. Even if it means relearning the lessons they handed me. Even if it means figuring it out for myself and then making it happen.

C Tape

Currently working up a project that I’ve finally gained some momentum on. A year ago I set out to learn C, and my rationale for doing so was to write a program that could take all these computer tapes I have from the various computers I had in the late 80’s and decode their audio back into the digital program data, part of a documentarian urge I have. After slogging through with it early last year, I put it down to move along with my life when I hit a wall. That changed this week when I picked it back up and took a different attack angle on the problem.

Along with my computer tapes from the TI-99/4A and Timex-Sinclair 1000, I have audio captured from my Roland JX-3P synthesizer. Roland included tape backup functionality in this keyboard so musicians could save and restore the patch parameters to their tape decks, allowing permanent backup between projects. Since this synth was released shortly after the ratification of the then still-wet MIDI standard, Roland didn’t include any functionality to dump the patch data through the MIDI ports, which is a shame. There are some neat sounds on this unit that were created by the previous owner, and I’d like to know the settings; the only way to get at the real settings (using the front panel is rather imprecise) is to attempt to decode the tape dump audio. Hence this project.

So after the frustration I had on the TI decoder, I went ahead and took a stab at the JX-3P decoder. In doing so, I discovered a bug in my audio detection code that may’ve had some influence on my TI failure. With that windfall, I went on and learned how to write better code by breaking each functional chunk of code into separate source files (so the same generic functional blocks can be shared and reused by different programs), and continued on by learning how to use makefiles in order to automate the compilation and linking of the binaries. These are techniques real programmers use. Exciting stuff.

The project is now at a point where I’m detecting the audio and demodulating it into the binary 1s and 0s. My current step is determining the format of that binary data, like figuring out which set of digits define the value of which synthesizer control. I’m already seeing some patterns, and that’s a start. But to get the full picture, I have to step through each synth control in sequence: adjust one control, make a tape dump, adjust the next control, make a take dump, etc., all the way through all 32 controls. I can then examine each dump for differences from the others to figure out which bits in the stream belong with which control. A bit time-consuming, but it’s a decent way to spend an evening.

Maybe soon I can have a full bit map laid out so I can continue the coding. The end goal is to get a text file that spells out each patch and its control settings. Then I can move on back to the TI decoder with the knowledge I’ve gained from this.

Goodbye Evolution

I have a confession. I’ve stopped believing in Evolution. I don’t know how it happened, but it slowly evolved (or devolved) into one shitpile of an email/calendar/groupware application. The latest version packaged with Ubuntu is slower and buggier than ever. It will occasionally crash while using it (some of the controls in the configuration panel will crash it instantly on activation). While running in the background, idle, doing nothing, it will suddenly crash for no reason. As my friend Mike has joked, “They call it ‘Evolution’, because it’s not intelligently-designed.”

This stability problem is untenable. So I’ve decided to migrate to Thunderbird.

For some reason (documented on the dev wiki, I’m sure), Novell has decided to start using Maildir as the backing storage format for emails instead of the venerable mbox format. Maildir puts every message in its own file sorted by folder, whereas mbox stores all messages in a folder into one large file. The benefits of having thousands of small files is obvious if you consider how easy it would be to lose every message contained in an mbox file should it become corrupted. Novell included a conversion module to be run after the Evolution app upgrade that automatically converts the entire mbox store to Maildir. Since it leaves an archival copy of the mbox folders, this is not a problem…as long as you don’t receive any new mail for Evolution to pile into the Maildir folders.

Enter Thunderbird. It doesn’t natively support Maildir (yet), so it requires mbox for its local storage. Normally, I would just take the folder of mbox files and copy them over into the area used by the new mail client, but I can’t do that this time; can’t use the mbox archive without losing all of the mail collected into the Maildir folders since the upgrade back in June. So what to do? I thought about using some scripts to do the conversion, but most of the ones I found online wouldn’t handle the nested folder hierarchies of my emails. Next solution: use Evolution to push my entire mailstore, one folder at a time, up to an IMAP mail server, and then fetch it with Thunderbird. Well, that would swamp the server and take a while to chew through. Lots of hand-work.

Third solution? Set up a local (on this machine) mail server and copy my messages from there. Brilliant! Enter Dovecot, an email server that handles both IMAP (where mail is stored on the server and accessible from anywhere) and POP3 (where mail is fetched from the server by the email client and stored locally on disk). It natively supports different mail stores, is quick, highly configurable, and fits the job nicely. So here’s my migration path:

  1. In Evolution, make a backup of all emails into a tarball (likely named “evolution-backup-<date>.tar.gz”). At this point, stop using Evolution. Configure its email account settings it to leave mail on the server of all the email accounts it accesses. Wash your hands.
  2. Open the tarball and navigate down to “/.local/share/evolution/mail/”; pull out a copy of “local”, rename it “Maildir”, and drop it into your home folder (“/home/<username>/Maildir/”). This is where Dovecot will store your messages.
  3. Install Dovecot (you’ll need root or sudo privileges). It’s preferred to install the dovecot-imapd package since it comes preconfigured for IMAP support.
  4. in “/etc/dovecot/dovecot.conf”, uncomment “listen = *, ::” This tells Dovecot to listen to all network interfaces.
  5. in “/etc/dovecot/conf.d/10-mail.conf”, uncomment “mail_location =” and set the value to “~/Maildir”. This tells Dovecot that each user’s mail is in their home directory in the folder “Maildir”.
  6. restart Dovecot.
  7. Install Thunderbird and configure it to connect to the localhost server using your system username and password. Follow these instructions if you need handholding. Tell Thunderbird to subscribe to all of your mail folders if they’re not visible.

Some finagling later, and I got Thunderbird talking to and browsing all my mail. Success! And it was at this point that I had an epiphany. One of the problems I’ve had over the years is that all of my email (the stuff that wasn’t hosted on an IMAP server somewhere) is stored locally on my desktop’s disk and inaccessible from anything that wasn’t a mail client running on the system. This made it difficult to dig through old messages or check my POP3 mail if I wasn’t at home. So, why did I really need to copy everything from the “temporary” Dovecot server into the “local folders” of my email client? Why can’t I just, I dunno, actually keep using Dovecot as my own email server so I can access it from anywhere? Bully of an idea!

So what I’ve done is set up port forwarding on my home cable modem router to allow inbound connections on such-and-such a port to be routed internally to my desktop. With a little bit of work last night, I was able to install Thunderbird on my laptop and configure it to access emails, hosted in my house, at the cafe. Two birds, one stone.

The next step is to install something like fetchmail to periodically pull all of the mail sent to my POP3 boxes (I have several addresses across all my domains) and drop them into Dovecot’s inbox so I can check for new messages from anywhere.

This is all very rewarding for me. After some time mired in frustration, to have a project finish so successfully is a welcome bit of cheer. And cheer is what I need going into this next year. 2012 was alright, but it ended on a down note. Every day is a rollercoaster ride of neurochemicals and social currency, so any sort of positive news is like a sigh of relief. May 2013 be better for us all.

Stand

Looking at getting my shit back together. I feel like the long weekend needs to come to an end; time to get busy, active, moving forward. I’m not hurting for cash at the moment, but my income will be drying up within two weeks. It’s time to make the grab at real life again.

I’ve sorta enjoyed the past 2 months of floating. It’s nice to go to bed at 4 and wake up at 11. Nice to spend hours at the cafe. Great that I have no place to be at any one particular time. However, it’s the textbook definition of being debased. There’s no ground, no foundation, no roots. I thrive when rooted; it’s why I’m not a homeless traveler, although the romanticism of that idea tempts me. I need something to churn through, some cause, some purpose greater than myself to give me reason to keep going on. When I’m by myself, on my own, the fire inside is gone, and I’m left to chew my own face. If I want to survive my mental health, I need to work.

I think it is less to do with having a job (although income is important), but rather more about being part of something. When I am alone with my projects, I get the fire for, oh, a few days, a few weeks maybe, and then it just burns out because, well, it’s just me, it’s just my own damned project, so why bother? So many of my projects die before they bear fruit, and that is the crux of it. If I had a writing partner, or a group, or if I had a fellow musician to jam with, or if I was on a team of programmers working on a project, then dammit, I think I could achieve something, finish something. So what if I don’t get the pride of having done the whole thing myself? What does that get me other than “eh, that’s cool.”

Time to stand up and walk.