Tuesday, June 18, 2013

The Situation (On Investing in a Revitalized Career)

When I found myself unemployed, one of my first thoughts was that it would be a good opportunity to invest some R&D in my career. I had a plan to put in some serious time learning some new skills. I ordered some books on Scala, Objective C, iOS programming, digital filters, and a few other topics I wanted to study. I considered taking an iOS "boot camp" with Big Nerd Ranch -- it looked like a good class, but it just plain cost too much. I planned to work through a couple of books. I got in a couple of days of work and made some progress, but have come to realize that this was just a bit unrealistic.

In part, it's unrealistic because of the time required to manage benefits, as well as the job-search reporting requirements in which I have to log specific jobs applied for each week (only recently added, apparently). There's no option to say "I'm teaching myself some new skills so I can apply for better jobs." It hasn't helped that we've had a couple of other difficulties piled on too -- we're still waiting on the lead testing, now scheduled for this coming week. There was a heap of work to help my teenager finish some college application essays. There was some other family drama. In fact I had arranged to go stay with some friends in Ann Arbor for a week specifically to get away from the distractions here, and work towards a demo-able iOS app. When things blew up, I had to cancel that idea (although I did wind up doing it later).

I came across something else that I'd really like to do (although I missed this one). There's an organization that teaches two- or four-day intensive courses in Haskell programming. The last one was in the San Francisco Bay area. There is no guarantee at all that if I took the class, and met the folks there, doing the classic networking thing, it would necessarily help me get a better job. I'd really, really like to take the class anyway. I'm not asking for donations to go to a training class like that right now, as such -- I'm not sure it is quite the right time. I'm mostly writing this down by way of just putting my intention out there in some kind of concrete form.

I've been diddling around with Haskell for a number of years now. I've written about Haskell a few times on. I've used it "in anger" -- to solve a real work-related problem -- a few times, for creating small utility programs, usually to chew through some data files, to prototype an algorithm that I later wrote in C++, or to generate some audio data for testing. It is, hands-down, my favorite programming language, a language that expands my mind every time I use it, and has taught me some entirely new ways to think about writing code, applicable to any language. I won't claim that Haskell is, per se, the great savior of programming. GHC can be awkward, and produces truly obscure error messages. It can be hard to debug and optimize. However, it seems to have some staying power, and perhaps more importantly, it is a huge influence on recent programming language designs.

Haskell didn't appear in a vacuum -- it certainly has absorbed strong influences from the Lisp family of languages, and from ML, and maybe other languages like Clean, and others even more obscure. I love learning new programming languages, and I've learned new ideas from just about every language I've learned, but Haskell seems unique in the sheer density of its ability to blow your mind. Despite the fact that it is perhaps not practical for every application, I've become convinced that many of the paradigms and concepts behind Haskell really are the future of programming -- specifically, the competitive advantage, even something close to the ever-receding goal of a "silver bullet" for programming.

I'm really encouraged by the emergence of CUFP (Commercial Users of Functional Programming) and work that some companies like Galois and Well Typed are doing. I believe it is already practical to write complex embedded systems with real-time and space constraints in Haskell, or at least partially in Haskell. It looks like a few pioneers are already doing it. The expressiveness of the language, and the resistance to many kinds of common errors that the language design essentially gives you "for free" could be a big competitive advantage in embedded software designs.

I'm not sure if, at this stage, there are sufficient opportunities to join companies that are also interested in R&D along these lines, especially given that I don't have a Ph.D. and am not likely to acquire one in the near future. Certainly few people nearby seem to be doing this kind of work, and I'm not certain whether there might be an opportunity to join an existing consultancy as a remote employee. I might have to strike out on my own. Grace and I have also been talking about setting me up as an LLC, as opposed to just doing hourly work via W-2s. In fact, honestly, despite the fact that I don't think of myself as much of an entrepreneur, doing so may be the best long-term solution to the thorny question of how to get any significant "upgrade" to my career, in terms of both money and the challenge of doing new and meaningful work. But that's a big leap to make.

I realized that I have been thinking and occasionally talking to friends about the idea of forming a company to do R&D and consulting on using advanced languages for embedded programming for ten years now, or maybe even slightly longer. I didn't even know Well-Typed offered classes like this, until I stumbled across the description online, but I have confidence that there will be more classes in the future. It seems like there is a window of opportunity. I didn't manage to get into iOS development at the start, like I did with Newton development, and I regret that (although, on the plus side, stuff works now!). It's hard juggling a career and a family. But I don't think it's too late to become a Haskell guru, for some value of "guru," and feel that maybe programming isn't entirely devoid of innovation after all. And maybe even enjoy programming again!

Monday, June 17, 2013

The Situation (Post-Father's Day)

I had a great weekend.

These posts have been largely kind of gloomy -- maybe understandably, given my ongoing unemployment. But I had a great weekend.

On Friday afternoon I had a phone interview that went, I thought, pretty well. Grace had taken the kids away with her to Ann Arbor where she had an obstetric appointment, and then stayed overnight with them with extended family, even taking them to a kind of barbecue/fishing party that sounded like a blast. On Saturday morning she picked up a CSA share that belonged to a friend, who was out of town and donated it to us. She got back Saturday afternoon. Our fridge is packed with fantastic produce. More on that in a bit.

I spent most of that time working on a Dylan program, an implementation of the little Macintosh Polar puzzle game from 20-plus years ago. When I took breaks from the screen I worked on a Gene Wolfe novel that has eluded me for a long time -- the second part of the Short Sun trilogy, In Green's Jungles. Wolfe is one of my very favorite writers and I still think that the Book of the New Sun series is pretty much the masterpiece of late-twentieth-century fantasy and science fiction. I think The Shadow of the Torturer is the only book I've literally worn to the point of disintegration just by reading it over and over.

But he's a puzzling writer, and in the later series he gets more puzzling. Reading In Green's Jungles is like looking through a kaleidoscope held by someone else. As soon as you start to figure out what you're looking at, and say "Ah! Yes, I think I see what is going on," he twists the kaleidoscope and says "how about now?" And it's all a jumble of pretty fragments again. And so these are books that are unsatisfying on a first reading, and even a second reading. I've gotten further this time; maybe I'll even finish the second book. Maybe by the third reading I will be able to plow through the third and final book and feel like I have a sense of what is really going on. They differ from The Book of the New Sun in that the former series can be read as a straightforward adventure story, and it is satisfying in that way -- to a certain extent. Until you realize that Severian's story doesn't entirely hold up, and that he is an unreliable narrator, and then you fall naturally into the mystery, and start to form your own theories. I have a monograph I'm working on, about The Book of the New Sun, but I don't feel it is quite ready for publication, even on my blog. I feel almost ready to write about the second series, the Long Sun books. The Short Sun books are still largely a blur of glittering fragments to me.

I'm digressing again... back to my weekend. The time with my wife and family out of town. That was a great chance to dive back in, just a little bit, into one of my favorite programming languages, and one that was hugely formative to my thinking about programming. In 1994 or thereabouts I was an alpha-tester for Apple's Dylan development environment, a tool that was ultimately relegated to the status of a technology demo than a viable language. At the same time I was developing real solutions in NewtonScript, the language that Apple actually deployed in the Newton product line. Trying to understand Dylan led me to Scheme and eventually to Common Lisp and Haskell. Dylan still exists in the form of community-supported implementations -- see also the Dylan Foundry.

Dylan is a fascinating language but as I study the original documents in 2013 -- Apple's book The Dylan Reference Manual and the original Dylan book describing the language with Lisp-like syntax -- I see an over-designed language, in the sense that the core language, designed to allow both dynamism and efficient compilation, seems to have too many features to really enable the sort of optimizations that the designers imagined. Maybe I'm just mistaking implementation failures for language design failures. Is there a thinner core language to be extracted from the big-language spec, if some features could be sacrificed? And would that be worth doing? Because I also see an extremely expressive language, a language I far prefer to Java, the other language emerging at the time, with some wonderful features, not the least of which is generic functions, which still seems like the natural way to construct object-oriented programs which are open to tinkering and extension.

Anyway, I got my program mostly working, and I'm talking to some of the remaining volunteer team about some remaining issues, so that's been fun. But I'm not writing today to talk about programming. I'm writing to talk about how grateful I am for my life and what my family and I are doing here in Saginaw.

Staying home in Saginaw for the phone interview Friday, I missed the travel and the company and the barbecue. But on Father's Day there was a friend in nearby Bay City who was moving his family -- a large family like mine. I thought helping their family would be a great way to spend Father's Day so I took my daughter and drove out there. It was a great afternoon -- there was food set up, a big U-Haul truck, and just enough guys volunteering. Veronica hung out with a gang of kids. The weather and the company were terrific. I helped load cabinets, dressers, a treadmill, helped take apart a picnic table -- all kinds of stuff. It was a reminder that doing work that requires me to exist only as a brain and a set of fingers is sometimes not gratifying, and that enjoying life is really often predicated on using the body, not just the brain. My back feels better than it has in months -- I worked it just hard enough to stretch everything out thoroughly and counteract some of the endless hours spent sitting at the computer looking at job postings. Today my back and arms and shoulders and wrists feel sore, but in a good way -- no stabbing pain or pinched-nerve sensations, just a pleasant ache of well-used muscles.

I wonder if that makes sense -- the idea that I would go spend most of my Father's Day helping someone else move, and honestly, I can't really say that it was entirely by way of trying to be virtuous or helpful. I feel like I got a lot out of it. It was fun. I'm really glad I went.

On the way back home I stopped at a bookstore, and indulged my habit. One of the books I picked up is a bit of fun trash (I say that admiringly). Alastair Reynolds is one of my favorite contemporary science fiction writers. He writes gloriously gothic and gritty space opera. He's now written a Doctor Who novel, a spin-off story set in the Jon Pertwee (Third Doctor) era. I have not finished it but it is terrific so far. Somehow Reynolds, in print, manages to conjure up the low-budget location shoots, cliched supporting characters, awkward dialogue, excess foreshadowing, and cliff-hanger pacing of the old serials in a way that is both dead-on and affectionate.

But I was talking about greens... a kaleidoscopic jungle of greens, in our refrigerator, or something... oh, yeah. Sunday night is tossed salad and scrambled eggs night -- yes, inspired by the closing song from the old Frasier TV show. Do we really eat meals on a regular schedule? Well, more or less; Monday is always chili night, and I cook it. Tuesday is baked potato night, of some kind -- white potatoes or sweet potatoes, often topped with leftover chili -- you get the idea. Theme, but variations according to whatever is in the refrigerator. So Grace softened up some chopped garlic scapes and chives in butter, and threw in eight eggs, and some gorgonzola cheese, and fresh dill, and something else I probably don't remember -- and it was delicious. We had a big salad of mixed greens, fresh from local Michigan farms, at room temperature, tossed with a little leftover pasta salad rescued from her trip, and it was delicious.

And Grace couldn't eat any of it. Somehow between the pharmacy and her doctor's office and Medicaid they did not approve her enzyme prescription refill, and somehow sat on it for ten days, so that she didn't know it had not been approved until it too late to do anything about it for this weekend. She's now out of pills, and so can't eat food without experiencing waves of nausea. So she sipped weak tea and watched us eat. We will be trying to resolve that today, and spend a few hundred dollars we can't really afford to spend, if we have to, so my wife can eat food. It seems like it should be a simple thing, but it isn't. And unfortunately this is not the first time she's had to go without her enzyme pills. We remain hopeful that someday she will be able to go off them entirely, but having to forcibly go off them doesn't help that.

But it was still a shockingly delicious dinner. Sometimes life just hits you across the face, in a good way.

For dessert she made a strawberry-rhubarb fool, with fruit picked up from a farm-stand north of Ann Arbor. The strawberries were so ripe that you would not have wanted to pick one up and eat it -- they were just starting to dissolve into pungent red liquid. That's just when they actually taste the best, of course. She just cooked down the strawberries and rhubarb, with a little honey, and I threw in a tablespoon or so of dried thyme. The result was indescribably delicious. We served it to the kids with a little half-and-half drizzled on top, which curdled from the acid -- so it was kind of an ugly dessert, but delicious. I think Grace got to eat some of that, without the half-and-half.

It seems like a simple thing -- working, socializing, eating. We're running short of money, I'm still applying for jobs every week, I'm waiting to hear back on dozens of them, I'm waiting to hear follow-up from a number of interviews. It all seems complicated and challenging and stressful. But I had a great weekend. I hope you did, too.

Tuesday, June 11, 2013

The Situation (Day 92)

So this is one of those days where everything is just "hovering." For the last few weeks I've had three or four recruiter phone calls and e-mails a day, but today I've had none. It's spooky, like the rest of the world was destroyed and I haven't gotten the news yet. Meanwhile, I've done some follow-up e-mails and messages, and gotten nothing back. Several different applications are in the post-interview stage, "hovering." I need to apply for some more local jobs, but I'm not seeing very many that are even remotely within the realm of possibility.

Just for fun I did a calculation on what it would take to do a daily commute from Saginaw to Bloomfield Hills. That's about 80 miles one way, taking approximately an hour and 20 minutes. I know people have commutes like this, and longer, but let's do the math as an exercise.

Our current main car is a late-model SUV that gets an average of 15.4 mpg. It probably will do a little better for an all-highway commute, but considering the possibility of heavy traffic and road construction, let's call it 16 mpg. For a 160-mile round trip commute, that's a convenient round number, ten gallons of gas a day. Gas today is about $4.20 a gallon. It will probably be lower off-season, but that's what it is today. That gives us $42.00 a day in gas, or $210 a week. Not accounting for vacation time, that's $10,920 just in gas. That doesn't cover wear and tear at all. The IRS standard mileage allowance including wear and tear and repairs for 2012 is 56.5 cents a mile; that works out in this case to $90.40 a day or (again, not taking vacation time into account) $23,504 a year -- in other words, that's what they consider the actual cost of owning and maintaining a vehicle and using it for that much travel.

Something like a Honda Fit would obviously be a better choice, at somewhere in the ballpark of 30 mpg, but note that this would add a car payment, when we don't have one now, and so the overall cost would not be dramatically lower.

Note that this takes into account no "externalities" at all. Here's one externality: if I was going to be gone with the car all day, every work day, my wife would need a second car in order to run any kind of local errand at all with the family. So we'd then be a two-car family instead of a one-car family. So it wouldn't be a matter of swapping out one car for a better-mileage car -- where selling the first could help pay for the second. Of course the at-home car wouldn't incur nearly as much in the way of gas expense and wear-and-tear, but it isn't trivial just to maintain a car, even one you don't drive very much. It also doesn't account at all for the emissions, and what that is doing to the climate, or the fact that I'd be driving for almost 3 hours a day, turning an 9-hour-day (with lunch) into a 12-hour day, and what that would do to me and my relationship with the family, and whether we'd be able to afford to hire someone to help replace some of my labor in and around our home (ranging from cooking and cleaning and mowing the lawn to child care).

So, alternatives. It would probably be cheaper to stay someplace much closer to a work situation in the metro Detroit area during the work week, and we're exploring that option. Relocation would be neither quick or easy. So what's the cost of an extended-stay hotel close to the area? The cheapest one I could find online in a brief search was about $55 a night. Assuming I stayed Monday through Thursday nights and left from work on Friday, that's $220 a week (and note that these are still a commute from the workplaces, just a much shorter one, and I'd still have one $42.00 round-trip commute). So it isn't significantly cheaper. I don't think I could make the food options as low-priced as they are at home. Exercising that option, I'd be doing a lot less driving, and that would be great, but I wouldn't see my family at all for four nights a week. I'm chewing over whether I could find that tolerable, and for how long. I don't really want to be an absentee father; these years aren't really fungible, to be "made up for" later.

A local apartment might be cheaper. I haven't looked into that. But it is a good reminder that if I'm going to consider an arrangement like this, I have to be sure to ask for enough money to actually make it viable. Ideally "viable" would translate to "at least what I was earning before, with cost of living adjustment, and enough extra to cover the cost of the distance." Of course this isn't an ideal world. How about "after taking the cost of the distance into account, doesn't actually represent a decline in income?" And we may have to accept "we can break even doing this" as opposed to "I'm working, but going further into debt with every mile of scenic I-75 I traverse!" And this is why I continue to press for a telecommuting, or at least part-week telecommuting, option. And why we might ultimately have to give up everything we've been working for here.

Thursday, June 06, 2013

The Situation (Day 88)

I received word back (via paper mail) from the State of Michigan saying that my claim for 3 weeks of unemployment compensation, for the weeks ending April 27, May 4, and May 11 (see my earlier posts) is denied. The form I got back said I had it is found that "you did not report (certify) as directed and had no good cause for failing to report (certify)."

The cause I reported was that I missed certifying online by one business day because I was distracted by recruiters and interviews. In other words, because I was concentrating so much on searching for a suitable job. What would have been good cause, I wonder?

So, er, let this be a lesson to all you slackers!

It says I have the right to appeal in writing. Would there be any point to that, I wonder?

A Counterfeit Motorola Razr V3 Cell Phone

I have an old Motorola Razr V3. It's from (roughly) 2005 or 2006. I use it without a contract, with a T-Mobile SIM card, buying minutes when I need to. I like this phone design, and I don't really want a smart phone or even a dumb phone with a touch screen, but mine is falling apart. I bought two allegedly new-old stock Motorola Razr V3 phones from an eBay seller. Unfortunately, they are counterfeits.

I have opened a case with eBay to return them, but I thought it might be useful to share pictures. Honestly, I wouldn't have minded much if (1) they worked well (they don't -- the speaker for speakerphone mode doesn't work, they don't vibrate, and the audio is poor), and (2) they were really cheap (they weren't that cheap -- I paid $59.99 each).

Take a look at the pictures. The gray phone is the original. The gold one is the counterfeit. It's very obvious when you just pick them up, open them, and try to work the buttons or open the battery compartment. The old phone opens smoothly and still feels solid. The new one grinds slightly and feels loose and flimsy.

Original: fit and finish is very clean. "M" logo button top center matches phone.

 Fake: front cover edge misaligned, "M" logo is blue and looks strange, buttons are loose.

Original: you can read all the serial numbers (even though the picture is blurry, sorry).

Fake: numbers are cut off; missing some numbers.

Original: logo is laser etched right into the aluminum surface.

Fake: logo is painted.

Original: darker, glossy.

Fake: type is different, lighter gray, matte.

Original: inside battery compartment cover. Note recycling warning, 3 clips to stabilize cover. Release mechanism still works after many years.

Fake: mechanism is extremely stiff and barely works, nothing molded on the inside.

Original battery hologram.

Fake battery hologram.

Original: still has a little rubber plug in that access hole after years of handling.

Fake: rubber plug stuck way out, fell out immediately with the gentlest handling, now it's around here somewhere...

Back covers. Note the raised logo and carrier on the original (right). Ignore the missing dark glass over the display on the old phone, I broke that many years ago...

The cover of the manual.

The printing inside the manual.

Under the right lighting you can see that the battery compartment cover on the counterfeit phone is completely mismatched to the rest of the case. Wow! Crap-tastic!

Sunday, June 02, 2013

The Situation (Reporting from an Undisclosed Location)

I've sequestered myself here for a few days to try to concentrate on some Objective C and iOS programming.

I had an interview last Thursday. You can read about some of the technical aspects of the interview in this post on my programming blog, Praise, Curse, and Recurse (warning: extreme programming geek content!)

I'm very grateful to my undisclosed friends for letting me work here in this undisclosed location, as well as feeding me some delicious undisclosed meals!