Building Everything from Scratch

You know what I love about programming? The part where I get to solve interesting problems. You know what isn’t interesting? solving the same problem over and over again. Even less interesting is having to solve a problem that I know someone else has solved but where I can’t copy the answer. That’s not only uninteresting, it’s frustrating.

So, I’m writing a tool in Java and I need for it to allow the user to input styled text (simple typeface stuff – italics, bold, strikethrough). We’re not changing font family and we’re not laying it out for print; we just need to be able to capture this style stuff. And then persist it. Ultimately, it’s going to be stored as XHTML. So I look around, and sure enough, JTextPane turns out to be the thing I need to be able to display the text. Pretty soon we’ll want to have inline images that the text can flow around, and that component can handle those things. So, that’s great.

Continue reading

Oh Right, That’s Why I Hated Libraries

I dunno, back in, like, 2010, I was working on software that had something like 1 zillion dependencies (or, you know, 50. Same thing) and keeping track of consistent versions of all the dependencies was a real pain in the neck. Our organization had a dedicated CM team who set up Artifactory and Ivy and we worked pretty hard at being flexible with which version of commons-lang we actually required.

But note, that was a full time job, just managing the artifact repo and the build system. So now here I am, managing a team and we’re developing a suite of programs. We’re building some custom code, but a lot of what we want to do is accomplished with off-the-shelf libraries, each of which is available from Maven central. Of course, each one pulls in a different version of slf4j or bcprov or whatever. With only a couple of dependencies, it’s okay, there are no collisions. But last night I pulled in jets3t and *poof*, the app would no longer start because jets3t’s version of bouncycastle collides with the version I was already using, so uh oh, we can’t do encryption because the class loader is confused.

Easy enough to solve (downgrade bouncycastle to the version jets3t plays with) but this is my reminder that configuration management is actually a full time job, and there are best practices and frameworks and all that good stuff.

When Should You Have Lived?

So, Lise​ is off in Minneapolis for AWP. Neither one of us sleeps particularly well when we’re apart anyway, but she’s out there to talk to lots of people (not her favorite activity) and get them excited about Lithomobilus​. And in the frenzy of packing, she remembered earplugs but forgot melatonin. The love of my life, on day 3, had slept for maybe 8 hours out of 72 and she was not doing well. This is where the Internet, the telephone, and modern banking combined to make me look like the best husband ever in the history of business travel.

I know that Trader Joe’s sells melatonin for not a lot of money. I know they’re a national chain. So I used Google to find out that, hey, in Minneapolis there are three Trader Joe’s stores, each less than half an hour’s drive from the hotel.

But wait, Lise is stuck on the book fair floor; she doesn’t have time to run off to TJs! The hotel concierge isn’t answering the phone! Oh noes, what do I do?

Google “personal concierge minneapolis” and come up with Twin City Concierge. Call ’em up, “Hey, my wife is in town for a convention and forgot to pack melatonin. Could you hit Trader Joe’s, get a bottle, and drop it at the hotel for her? Sure, just sometime before tonight. Sure, here’s my credit card info. Thank you so much!”

Boom. Lise was nearly in tears with gratitude (chalk that up to sleep deprivation) and was kind of surprised when I mentioned how reasonable the cost was. She pointed out that many people would not even consider making that call, assuming that it would be too expensive. This, she said, is an unseen privilege of money. We have enough money that, sure, we’d rather not spend money we don’t have to, but we have a different definition of, “have to,” than we did when we were broke, and that gave us the confidence that let us find out that this kind of personal service is way more affordable than we thought.

Lise told me that now I am:

  1. famous at AWP as the best husband ever and
  2. hated by all the other husbands for making them look bad.

To this latter point I can only say, dudes, that didn’t take me; y’all had that down all by yo’self.

Oh yeah, the title of this post. There are a zillion ridiculous quizzes on the web, which Harry Potter character would you invite on your dragon, and what would your job have been in which century should you have lived?

Telephones. Modern medicine. Lightning fast access to useful information about exotic and remote places. Currency that spends just fine 2,000 miles away. Currency that travels 2,000 miles faster than you can say the words, “two thousand miles.” Consumer protection laws and food and drug safety regulations that mean I can trust, sight unseen, that the pills are what they purport to be and do what they claim. You know what? Now. Now is good.

Decent Encryption Is Getting Easier

I just found out a thing that makes using PGP with GMail on a Mac easier.

The problem: PGP encrypting an email means that, at the time of hitting the “send” button, the computer where the plain text message is stored needs to have your secret key and the public key of the recipient, and in general webmail (like GMail) means that the message is actually resident on a computer that is far away from the one that’s attached to your keyboard. There’s a manual workaround for this, but it’s a pain in the neck and anyone using it will not wonder why PGP isn’t more common.

Also, I love the way that with GMail (and other webmail services) I can get to my email messages even when I’m far away from my computer. That’s why I have never hooked the Mail app up to my GMail account; because I didn’t want to download my mail and then have it unavailable on the web. But I accidentally hooked it up last night and nowadays it uses IMAP instead of POP, which means that the messages can stay on Google’s servers but I can now use the GPG plugin to encrypt and sign my emails with ease. And you can, too:

  1. First, get GPGTools. You’ll want that.
  2. If you don’t already have a key pair, generate one.
  3. Hook up Mail.app to your GMail account:
    mail_acct
  4. Feel good about the security of your shit.

Artisanal Is the New Organic

As we now know, organic food isn’t a health issue for the consumer but for the producer, but back in the 1970s only a very few people were hip to that. Back then, “organic,” vegetables meant that they were:

  • more expensive
  • weird looking
  • small
  • only available at the hippie stores

Nowadays, you can find organic vegetables in Safeway. I’ve noticed that some stores (Nob Hill Foods, for one) only carry certain things in the organic section and don’t offer a pesticide and fertilizer version (which, by the way, is fine with me). Heck, even Costco has a huge organic section. It’s gone mainstream, and that’s probably good for the long term. The price markup is dropping a bit, too. So where are the retailers making their huge bucks off the hippies? “Gluten-free” and “artisanal”. I swear, I saw a package of meat that was labeled gluten-free. Whew! That’s a relief!

So yeah, my hypothesis is that today, things are labeled, “artisanal,” and what that really means is that the artisanal product is:

  • more expensive (see packaging, below)
  • lumpy in unexpected places
  • small (but probably hand-wrapped in tissue and tied with raffia)
  • only available at stores where rich people shop (if it’s at a little corner market, it’s not artisanal, it’s just fresh made by the owner, same as it has been for years; do you want that pupusa or are you just gonna take a picture of it?)

Smart

Dagmar just got her teeth cleaned. I was waiting in the front office for the tech to bring her out and one of the staff asked me if she was smart. I was nonplussed. I never even thought about it. I said she’d never done the kid’s math homework. I should have said I have a problem labeling as smart any creature that will eagerly eat cat shit.

Remembering my People

Tonight is All Souls’ eve. The QBCPS tradition for this evening is to have our family dinner and, during dinner, we go around the table and tell stories about our loved ones who’ve died. But this year, we are all in different places. I’m at home with the creatures, the Goddess is at a sleepover, and Junglemonkey is hosting a celebration in another town. She’s got people and she’s got photos and I know she’s going to tell the stories for me there. But I still want to tell the stories myself, and the Internet is here. So I’m telling you, The Internet, and I’m telling the creatures.

Continue reading