Motorola Motofone F3: Sweet!
I finally gave up on the old Blackberry Pearl and decided to get a phone that was just…a…phone. No games. No camera. No calendar. No email. No calculator. No GPS. Just a phone. I bought the Motorola Motofone F3, which costs about 1/5 as much as a Blackberry. It’s a truly spectacular phone. It gets reception everywhere. I keep telling my Navy SEAL buddy that his team really needs this phone–it’ll get reception even on the planet Mars, I swear.
It’s super thin, very light, and pretty tough. The vibration alert is perfect–intense enough for me to feel in my pocket (something the Blackberry could never do). The ringtones I care nothing about, since my phone is always on vibrate (with a baby in the house, one must put all phones either on vibrate or just turn them off completely). The phone book is clunky as all get out because the screen can only display 6 characters at a time, but I find this charming and not at all annoying. I don’t have many people in my phone book, and I enjoy making hilarious 6-character names for them. My brother’s home number, for example, is “BroHo”, and both my parents’ cell numbers are “ParMob”. You can actually make these names much longer, but the screen will scroll through the name for a moment, which is a minor nuisance.
The speakerphone is terrific on both ends. Call quality is insanely good–better than my landline. No one asks me any more to hang up and call them back on a landline, which was pretty routine on the Pearl.
The buttons work very well, even with monster fingers like mine. I have never fat fingered anything on the phone. I almost never send text messages, but on the rare occasion that I do, I find the marquee-like 6-char display limit is just fine. One doesn’t write prose in a text message anyway, and I dare you to count the number of SMS messages you have composed that have required extensive editing before you hit the send button. SMS messages are basically farts. You put a little effort into them, they’re out there, someone notices them, and then they’re gone. I think I might actually put more effort into my farts than my SMS messages.
Are My Programmers Interested in the Job or the Work?
Some military historians have made the claim that Vietnam was lost in part because many commanders had become more concerned with the job and less concerned with the work. Those who are job-focused are essentially career focused, and their every move was calculated with a selfish thought towards “what’s in it for me?” Those who are work focused tend to be driven by the quality of the output of their labor.
Being career focused is a bad thing for your work–instead of spending time figuring out how to improve your product, you spend your time trying to hone your skills. Unfortunately, when you get too obsessed with honing your skills, you never actually apply them. It’s sort of like my basketball skills: I’m great shooting hoops in my driveway, but I never get my ass to the court to play in a real game. But I know I’m great because I’m so good in my driveway. But at gametime, I’m never there. So what’s the point? Entertainment, escape, delusion.
Some programmers in my group, when presented with a trivial requirement, whine incessantly about how much easier it should be to make the change. “Why can’t we just get a workflow system?” gripes one of them (answer: because they cost thousands of dollars, lock you into their storage database (or at least their schema model), require an additional administrator, and take large amounts of training. By the time all that’s taken care of, your customers have fired you). “That would break the gestalt of the system!” exclaims another (yes, things change–and that is why we have jobs).
Finally, I am able to break some of them down and get them to appreciate that the new feature is actually a great thing for the users. Then they start groaning about how much annoying typing they have to do, and start looking at languages like Groovy and Ruby (we’re a Java shop). Why, I ask them, are these other languages so nice? Their answer always seems to be “less typing”. This is a ridiculous reason to change languages.
Object oriented languages (or semi-object oriented languages, as the purists would have me call java) let you encapsulate things. So if you hate typing things like new BufferedReader(new FileReader(new File(foo))); to read a file (plus all the Exception handling), you can just make your own three-line class which isolates all of this for you. There you go–less typing, and it’s in the same language! Amazing.
Lately I have been spec-ing a new module which requires a decent number of if-then statements and compound predicates to figure out what to do. There are some if statements which have about a dozen predicates in them. It’s kind of ugly, sure, but it’s easily understood. “Ugh”, whines one of my developers, “why can’t we get a rules engine?” Apparently when you have conditional logic which has more than three predicates, you need to bring in a massive rules engine, so that instead of writing if statements, you can write Prolog. Prolog has its place, as do rules engines. But just because you have a few thousand lines of code with lots of if statements doesn’t mean that you need to bring in a whole new pile of technology. Actually, Prolog would be great, but some of the cracked-out rules engines that my guys and gals want to use encode your rules in…wait for it…XML. Ugh.
Finally, my developers have started whining about how un-sexy some of our older modules are. When raw APIs are first developed, the first thing you do is write a better version of the API–for example, JDBC. Or Servlets 1.0. So when these APIs come out, the first thing you do is make them a bit better. Five years pass, and version 2.0 of those APIs arrive, and they’re much better (and they might, if you’re lucky, look like your improved APIs from five years ago). Now your old code, based on the five-year-old improvement, looks lame, and people start to use this as an excuse. I, being the guy who knows this old code, end up pigeonholed. “Oh, that bug is in the old part of the system–only DingoZombie knows how to fix it.” I’m flattered and I appreciate the job security, but the truth is that the unsexy old code is dead-easy for anyone to understand. Any new hires who go into the old code to make improvements or bug fixes immediately get on my “to-promote” list–they’re the work-centric killer assets. Those who whine and claim that it’s too obtuse I figure are job-based dead weight.
The Learning Crack Pipe
Someone bought my 9-month old a fake cell phone. In a clever bit of marketing, the manufacturer markets the phone as a “Learning Phone”. I’m not sure what this product helps the child learn, but I’m sure if the toy were marketed as a “Fun Phone”, a “Fun Fone”, or a “Baby Phone”, its sales would plummet. Imagine you’re standing in the toy store trying to decide between a “Fun Fone” and a “Learning Phone”. Which one do you buy? The marketing department has discovered that if you put the word “Learning” in front of any product aimed at children, parents will buy it.
So what’s next? The Learning Crack Pipe. C’mon honey, I know it’s a crack pipe, but it’s a learning crack pipe.
My Router Needs an Off Switch.
I was raised to believe that when you aren’t using things, those things–if they were turned on when you started using them–should be turned off. For example, when you leave a room when the lights are on, you should turn them off if you’re the last one out of the room. I follow this principle with many things, such as the microwave, the oven, my car, my tv.
But what about my router? And my cable modem? When I’m done with them, I’d like to turn them off. When I go to bed, I’d like to turn my computer network off. But I can’t. There’s no off switch for the cable modem. There’s no off switch for the router, either. I used to have a Linksys router, and now I have an airport extreme. Both lack off switches. Why would the design gurus at Apple decide not to have an off switch? I sure don’t use my internet while I’m asleep, and even if I do host a service or two from my home computers, I would still like to shutdown the network without having to yank the power cable from the wall.
Besides the philosophical need to turn things off when they’re not needed, is there a legitimate technical reason to turn these devices off–ever? One of my technical mentors claimed that you should never write code with an infinite loop because at some point an event beyond your control (like the OS rebooting) will occur, and you should be able to exit gracefully and predictably.
Here’s why I need to power cycle my network equipment: every now and then, it craps out. It blinks sad orange instead of happy green. It’s not clear why this happens, but the solution is simple: cycle the power. So the device clearly needs an off switch, and yet I have to crawl under a table to do this.
In a commercial setting–such as a server room–turning things on and off would of course be silly because your users are all over the world, and when your users are all over the world, at some point some of them are awake and using your system. But at home, that’s not the case. My family goes to sleep for at least a few hours a night, during which time there is zero chance of the internet being used. So it would appear that the lack of an off switch on my router is a holdover feature (or lack thereof) desired in a commercial setting.
But wait a minute, the airport extreme is clearly not designed for commercial use. It’s pretty and it doesn’t fit in a 1U rack–it fits on a bookshelf. So clearly the product has received a lot of changes to make it better for the consumer market…but where’s the off switch?
Why Does the iPhone Have a Concurrency Limitation for 3rd Party Apps?
The iPhone SDK has a severe limitation: only one 3rd-party application can run at any one time, and all 3rd party applications must get out of the way (terminate) when more important things–like a phone call–happen.
Some folks seem to buy the argument that this is just Apple’s way of ensuring that crappy 3rd party applications aren’t going to destory one of the iPhone’s most prized features: the silky smooth integration of all the features, also known as the overall “experience”. But that’s a bit vague.
Apple’s goal here is a perfectly valid one. They made a widget and they don’t want people messing up their widget. Cellphones are very complicated, and when something goes wrong with one, users rightly blame the cellphone and then buy a different cellphone. Most people don’t think of cellphones as generic computers that can be modified in the same way as computers, so they don’t realize that there is a distinction between the virgin product and the modified product. If I were Apple I’d want to protect my product’s performance too.
However, my criticism is that they might be throwing the baby out with the bathwater. A good thread model includes priorities, and 3rd party applications could be given lower priorities (transparently, of course, by the OS) so that more important threads–such as email and the phone–can trump them when appropriate.
RIM does exactly this for their Blackberry. If you write a sloppy resource hog of an application, email still works. So does the phone. In fact, if you write a really ugly application, the Blackberry will terminate your application with a “Process [ApplicationName] killed due to message queue overflow” message. Now that’s good defensive programming–kudos to RIM for sticking to their guns on this one. The OS protects itself, and the user gets a clear message telling them what crummy application just gave up the ghost.
Since my early years of programming were on the server side, the thought of the OS telling me that my application was a dog at first offended me. But then I realized that there’s a perfectly legit reason for it: the cellphone is first and foremost a phone. When it’s not acting as a phone, it can do other things. But the phone subsystem cannot be compromised. RIM thoughtfully built this requirement into the Blackberry at a fundamental level.
If you dig into some Sprint/Nextel and Blackberry forums, though, you’ll see that the protection isn’t perfect–in some cases the GPS subsystem on the 8703e can actually cause voice calls to clip! I mention this fact only to demonstrate that the thread priority issue isn’t trival, especially in the face of different specialized hardware.
I’m left to speculate that Apple’s 3rd party concurrency limitation on the iPhone is the result of one or more of the following:
1. a poor thread model
2. fear that allowing concurrent applications will erode the iPhone’s profitability
3. something else
Given the elegant multitasking capabilities of the iPhone, I don’t think it’s 1.
The iPhone business model involves some complex agreements with Verizon, and while I’m clueless about them I can’t imagine how concurrency in general would eat at the iPhone’s profit margins. So there goes number 2.
But what about number 3? What might that something else be? What about battery life? Programmers are usually concerned with performance in terms of speed and memory footprint. We tend to take it for granted that there will be an endless stream of electrons available to our application. If you are running an application in the foreground, you know you’re running that application. So if you are using a game for a few hours and the battery dies, even a nontechnical user might conclude that the application–not the device–killed the battery.
But if you have a few sloppy background threads in busy loops, slurping lots of data over the network, talking to bluetooth devices, etc., your average user isn’t going to know it. The battery is going to run down and the user is going to blame it on the iPhone itself.
So here’s my theory for the concurrency limitation: background applications could suck the life out of the battery and users would conclude–incorrectly but understandably–that the iPhone has terrible battery life.
The Emergence of Longer Naps
Our daughter is about 7.5 months old now and has recently started taking reasonable naps. For months she would only sleep for about 30 minutes at each of her 3 or 4 daytime naps. You really can’t get anything done when your baby sleeps this way. Our pediatrician made us feel like our baby was retarded for sleeping this way, but a number of people with babies in my office confirmed that their babies had similar sleep patterns.
I don’t know what has changed. We didn’t alter our behavior at all. We always do a ritual at nap time–boob number one, books and songs, boob number two, and then put down. All of a sudden our daughter just decided to start sleeping for–get this–an entire hour straight! Sometimes and hour and a half! What a miracle! I can write a blog, my wife can work out, my cat can be fed, dishes can be washed, and I can start doing house-man stuff (latest chore: figure out why the basement leaks in heavy rain).
Just when we thought we couldn’t continue to survive with the half-hour nap insanity, our baby has given us hope. Maybe it’s only temporary, but even if it’s temporary, it’s hope.
The one major change that coincided with this longer nap time is tummy sleeping. Obviously we don’t put our baby to sleep on our tummy. But now she rolls over onto her belly. At first this started wigging her out because she can’t roll back to her back from her tummy. But after a few days she got used to it. And then she started to nap longer. Strangely, though, for many weeks she had been sleeping through the night (I’m talking 10-12 hours straight, a goddamned miracle, on her back. So the tummy sleeping bit seems only to have made a difference in the day time.
Some folks say this is a solid food side effect or a weight side effect. I’m not buying that, though, because she has been a portly 17 pounds for a while and she’s been eating solids for almost two months. We’ve noticed that she’s become much more active now. She wiggles around a whole lot and she wants to sit up and play with stuff almost constantly. So maybe she’s actually tiring herself out now.
Whatever the reason, it’s amazing to have an entire hour block of time during daylight. For those parents reading this with babies under 6 months, believe me: it gets better. Our daughter used to howl those blood-curling death shrieks at nap times. You know, the kind that make visitors think that your have your baby rigged up to an electric chair, or are making her sleep in a bed of nails with death adders snaking all over in a 37 degree room. That took a while to end–a few weeks with some partial extinction. It did end, though, and then nap time became less traumatic (which was a godsend), but short. And now finally nap duration is going up!
Petmate Fresh Flow vs. Drinkwell Fountain
I’ve owned both drinkwell and petmate water bubblers for my cat. My cat loves both of them. I, however, have a strong opinion on the matter.
We gave up on our drinkwell fountain after about two years because of noise and its insanely complicated, physically painful, and ultimately unsanitary cleaning requirements. Every week we had to break the drinkwell down and clean all of the reddish gunk out of it. It was very gunky. The drinkwell has some fairly deep chambers, and no tool in our kitchen could reach these areas. We bought the drinkwell cleaning kit, but this basically fell apart after a few months. It never really got into all the little crevices of the different chambers, and as a consequence we never could keep the drinkwell clean. I had to start using toothpicks to get at the less accessible gunk-filled areas. Just getting the bubbler apart is pretty painful. The motor is wedged in so tightly and so awkwardly that you do a number on your finger trying to get it out of its housing. So cleaning the drinkwell is awful.
The drinkwell also became incredibly noisy after a few years. We put a little rug under it to attempt to damp the sound (hardwood floors act like sound boards), but that still didn’t do much. The noise isn’t the falling water–it’s the motor. And we couldn’t put up with it any more.
The good thing about the drinkwell is the extra capacity. You can fill it once a week and forget about it.
The petmate is brilliant; I love it. It’s very quiet–presumably because of the sealed motor. It’s a dream to clean. There are very few sharp angles in it, so there is far less opportunity for gunk to accumulate and hide out of reach. The one downer for the petmate is the fact that you do need to refill it every few days, but this is a simple, clean operation. Cleaning it is pretty simple too. No special tools required.
If you’re trying to decide between these two, avoid the drinkwell!
I have the ultimate travel baby
We have taken three long flights with her, the most recent of which was five hours. Every time she has been wonderful. Sure, when you get on the plane, your neighbors exude that look of dread. “”Fucking hell”", you see them thinking, “”I have to sit with that nasty little freak.”". But after the plane lands, people have offered to buy our baby. She is so easy going.
This last trip we arrived at my parents house about five hours after her normal bedtime. She flirted with her grandparents for about 20 minutes and then passed out in her crib. Sure, she got up at 4:30 am, but what can you expect? She needed some company while she fell asleep, so I would lie down on the floor until she conked out. But what a champ she is!
Waking up in a new place freaked he out a bit but she quickly adapted. She also got used to the time zone change. She loves new places. She looks around all the time wide eyed.
We went swimming for the first time and she had a great time. She especially liked flying on the water and flying over the water. She would kick and paddle a bit as I dragged her across the surface. Then she started getting mesmerized by the reflections in the water. She was loving it. Watching her be so amazed was itself amazing. Such enthusiasm for new things only makes me more enthusiastic about showing her more of the world. When she sees something that strikes her fancy, my 7 month old daughter opens her mouth wide, kind of in a gape, but with slightly upturned lips. Her eyes open up wide. She inhales sharply and breathes rapidly for a few breathes. It’s friggin’ adorable.
We also went to the zoo. It was weird seeing polar bears in the 80 degree desert heat. There was a sign that attempted to explain why this was not unusual, but having just watched a few episodes of Lost, I still didn’t buy it. Anyway, our baby was a bit too young to pick out most animals, but she did go nuts for the tiger. The tiger was literally two feet from us. Very friendly tiger, but holy shit was it scary to be so close. The baby waved her arms, another sure sign of excitement.
I had a great round of golf last week
My wife was kind enough to watch the baby while my dad and I hit the links in the Arizona sun. I haven’t played golf in about two years so I figured I would suck. But something strange happened: I kicked ass.
My dad had a new driver and for some reason it took a liking to my swing. I murdered the ball, I mean I really crushed it, which for me means about 260 yards. And straight. Almost every time. I had a few holes where I experienced the nirvana of a monster tee shot followed by a nice chip onto the green.
Now I see why people try so hard at golf: when you play it well, it feels freaky good. I have never played a round like that until last week, and I swear I wasn’t even trying. I’d step up to the tee and just swing, sort of lining up the ball, but not really. It just sailed, and it felt amazing.
My dad, on the other hand, who has been playing the sport for way longer than me, was having a piss poor day. I think he might have been a bit jealous. My youth and lack of discipline should have been trounced by his experience. Hell, I had never even played the course, and he’s played it a bunch. A hard course too, and I ended up in the sand on three holes. But I got out every time with beauties on the green. Okay, I duffed one of them. But three great shots from the sand is amazing for me.
Now I want to spend the time to get good at golf. It’s totally addictive.
My First Trip on Southwest: Great!
We took our first flight on Southwest recently. A cross-country jaunt, no less. To save $700 on airfare I’ll do just about anything–with the price of our condo dropping like a brick, we’ve got to save as much cash as possible.
Initially I was a bit concerned about the boarding process. First come first serve really stressed me out. What if my internet connection died just as I started checking in? I had visions of the blue-screen-of-death, visions of Firefox hanging, or worse yet, attempting to checkin with my blackberry’s internet browser over the fast-as-slugs EDGE network.
To assuage my fears, the funny little boarding carton on Southwest’s website did little. After the first 60 people board, family boarding starts. The mathematician in me busily applied the pigeon hole principle to determine whether after 60 people I could possibly get a whole row for my family. Indeed, I couldn’t. Given an intransigent group of individuals, if each person decided to sit in their own row, there was a chance that my family would have to sit apart from one another (subject to the size and configuration of the plane, of course). This was highly unlikely, but that didn’t help me sleep any better.
So I had to ask myself the question: was $700 worth bearing a slight risk that my family wouldn’t get to sit together in the same row? We have an awfully cute baby, so we could sweet talk some people into moving, right? That would notch the risk down maybe by an order of magnitude. Still worth the $700? The flight attendants would help, right? Now we’re talking about hundredths of a percent, ya?
About 30 hours before departure, I started obsessively trying to checkin. What if I tried too many times before the 24 hour checkin limit? Would I be banished from online checkin? Relegated to the end of the C line, having to put my baby in a seat between an alcoholic and a sadistic teenager? That minuscule risk was eating away at me.
About three seconds before the 24 hour window, I tried to checkin. Still no luck. Okay, these guys have a pretty good website. Right on the 24 hour limit, I checked in. A20. Applying the pigeon hole principle, I was sure to get a whole row. So I relaxed.
Standing in line waiting to board, I realized that Americans actually aren’t such nightmares when it comes to queues…so long as they have an explicit number. If you’re at the deli counter and they’re not using the number system, people are total assholes. People play dumb–”Oh, I didn’t see you there!” (standing right behind me) or “I was here first” when they might have mentally been at the deli counter before me but were physically just arriving in the parking lot.
Anyway, the boarding was very smooth on both trips–faster, in fact, than any other airline, I swear. There’s definitely an interesting bit of psychology at play here.