May 13th, 2009


Okay, Scala is a bit scary-powerful

I just had my first brush with what I gather is a common issue in Scala programming: trying to figure out why my program is working. I was passing type A into my method, which takes closely-related-but-not-identical type B. And yet, it was simply working.

As it turns out, I was slightly ahead of myself -- apparently, last week I wrote an implicit converter from A to B, which I'd forgotten about. Implicits are one of those power features in Scala that can produce remarkably concise code, but must be used with great care, for exactly the reason I just found. Essentially, an implicit converter does exactly what it sounds like: it declares how to go from A to B, so you can use A wherever a B is expected. The compiler simply takes care of the conversion silently.

Very neat feature, and I think it'll be useful to me. But I'm going to have to be really careful with it, lest I confuse myself even more. I suspect it should be used sparingly.

In general, I'm finding that I'm often preferring to be a little more verbose than Scala requires -- for example, it permits me to omit return types most of the time (the compiler susses them automatically), but I actually prefer to have them there, for clarity and self-documentation, if the method is more than a one-liner. It's one of many examples that Scala is a language of remarkable expressiveness, but that just makes it *easier* to write bad code if you aren't sensitive to the issues. It's also easier to write good code, mind -- the language comes closer to the DWIM ideal than anything else I've ever seen -- but it's up to you...

State of the Justin

A random diary entry, while I think of it:

At this point, I've been at Memento for about a week and a half. It's generally going decently well -- the atmosphere is a tad more straight-laced than I'm used to, but that's not surprising. (Given that this is the largest company I've been at in a decade.) Still getting used to the morning schedule, which requires me (if I want my morning run) to get up just a tad earlier than I've ever done before for a job. (Not early-early, just not quite my usual night-owl preferred hours.) The group seems reasonably pleasant, and it's generally smart folks. But I am coming to hate Sharepoint with an even deeper passion than before -- it embodies everything I detest in Microsoft software.

We did eventually get the contract worked out to everyone's satisfaction, and I got the 80% time I was shooting for. It's currently looking like I will be working at home on CommYou on Wednesdays, and in the office the rest of the time. I should be available via IM most of the time, but keep in mind that my time is less my own than it's been, so I can't randomly chat as much while I'm at work.

Oh, a general note: I'm having even more trouble than usual staying current on LJ. The new job is keeping me quite busy, and since I'm still getting up and running, I don't have the compile cycles that I usually sneak reading a post or two into. So assume for the time being that I may not have seen anything recent, and email me if there's something you think I should specifically know about. (I'm hoping to get caught up this weekend, but I expect staying current to remain tricky.)

Crown was a good trip -- we drove down to NJ with hfcougar and learnedax, and all crashed at my father's house. Conversation on the drive was pleasant, although I'm afraid learnedax and I uber-geeked to a somewhat extreme degree, and may have bored the ladies silly. Of course, on Saturday night learnedax got to discover just how genetic geekery is: we wound up in a programming discussion with Dad, and got treated to a lot of discourse about the historical background of much of the topic.

I enjoyed Crown by making myself useful here and there -- besides my usual job of helping to run the procession and heralding the lists for several rounds, I wound up running the parking lot for about 45 minutes.

(Tangent, specifically for autocrats: if your event has a big unmarked parking lot, you need to plan for that. People *will* park in the stupidest and least efficient ways possible. Either mark the intended parking in some very clear way, with a particular eye towards what is and is not legal parking and clear access lanes, or assign someone to manage the lot during the arrival hours. And make sure you sanity-check the number of spaces. As it was, I managed to get people to fill the lot decently efficiently, but we still wound up with double-parking issues after I left to go do other things.)

Anyway, the tourney seemed to go well and cleanly, and was fun to watch as usual. I foolishly gave myself a pretty terrible sunburn (due to too much "Oh, I'll put on sunscreen after I deal with this" procrastination), but that's the worst I can say about it -- given that we hit the break in the weather after a week of rain, I'm counting my blessings. And I seem to have officially become a Senior List Herald -- in the early rounds, since we had more heralds than we needed, I was assigned to oversee a couple of the novices and give them tips. (Which they mostly didn't need: the volunteers generally did a very good job.)

I've pretty much gotten over the illness from a couple of weeks ago. Really, I was mostly done with it by last Monday, except for lingering after-effects -- I spent about ten days deaf in one ear (and eventually had to see the doctor to clean it out properly), and the cough is refusing to entirely go away. Naturally, as soon as I was getting better, msmemory came down with a dreadful cold, but at least we weren't sick simultaneously.

So overall, doing decently. It'll take a while to get my sleeping habits really adjusted to the earlier mornings, so I'm running a smidgen slow and tired, but I'm appreciating the glorious weather...

Appreciating my new job

Oh, right: forgot to write up this one.

Sometimes, the universe decides to teach you something. In this case, it was that companies like my new one are at least to some degree in the business of helping people.

To wit: Memento is in the fraud-detection business. We deal with all sorts of fraud (generally financial), but the basic idea is the same -- trawl through the data, and figure out, as accurately as possible, what looks like someone doing something Bad.

I started at the job last Monday. *This* Monday, I got a call from my bank -- apparently someone stole my credit card number, and was going on a spending spree with it. Of course, they discovered this because of their automated fraud-detection systems, which noticed that this $6000 of charges on my card looked rather odd, and shut things down pre-emptively. This averts much hassle for me: while I'm still going to have to go to the nuisance of moving to a new card, the process has otherwise been pretty smooth so far -- they blocked the false charges, shut down the old card and sent me a new one without my needing to do more than have a fairly quick and friendly phone conversation with a surprisingly nice customer rep.

I honestly don't know whether the bank in question is one of our customers or if they're using somebody else's system. But it does drive home that the business isn't just about helping the big faceless corporate entities -- the better we do our job, the more tsurrus we can prevent for the people at the other end...