I have been featured as an archetype in today’s XKCD:
I actually hung a Manhattan bicycle map on the outside of my cubicle yesterday, while wearing cargo shorts. In a previous job I had framed poster maps of the London Tube and New York subway on my office walls. (They may even still be there . . .)
Old SysAdmin tip: keep your frequent-but-long-running cron jobs from running concurrently by adding some lightweight file locking to your cron entry. For example, if you have:
Read up on the lockf or flock man pages before you go putting this in. This can be a bit tricky because these can also be system calls. Try “man 1 lockf” or the like to nail it down to the manual for the user-executable command.
In case you have ever wondered what I think of Google’s Blogger:
Seriously, Blogger has all the glitz and glamor of Geocities: it is the Internet’s tacky trailer park where people end up because they figure Google (or, in the old days, Yahoo!) must know something about managing blogs, but in reality it is just a neglected, wayward, red-headed stepchild from a former acquisition that one night that Larry Page got drunk after the company ski trip and woke up in Reno . . .
I like to think they have gotten better over the years, but right now it looks like the way they handle errors is that they have replaced a vague, general error message with a series of codes, and if you feel really enterprising you may eventually learn that there’s a form somewhere where you can paste in details regarding the error code you encountered in to a Google spreadsheet. But no, linking the error display to the part where you describe how you provoked the error . . . that would be too obvious . . .
I still fondly recall the nice rubber keyboard of my Sidekick 2. So nice, I was reluctant to “upgrade” to a G1, which has a nice enough keyboard. A few months back I got to spend some time with a Nexus One, which was really nice . . . but I just could not adjust to the on-screen keyboard. The on-screen keyboard has gotten very good for inputting addresses and short messages, but if you’re a compulsive typer like me you need an excellent physical keyboard.
So, I keep my eye out for an Android device with an excellent physical keyboard, and naturally I do a little research on this HTC “T-Mobile myTouch 3G Slide” . . . the name is truly awful, but it sounds like the keyboard shows promise. (It sounds like the physically-similar HTC “Touch Pro2” has an excellent keyboard, but I don’t want to run Windows on a mobile phone.)
So, in case, like me, you have wondered if the keyboard is any good, here is what various online reviews have had to say:
Of course, the main reason to get the myTouch Slide is for the full QWERTY keyboard. There are a few negatives but, overall, it’s an excellent way to bang out messages on the go. The shape of the keys are just right and the feedback and “clickability” make it easy to write long e-mails wherever you are. Hitting the secondary function or Caps lock key will bring up a handy light above the keyboard and I always appreciate dedicated comma and period buttons. There’s also pretty good auto-correction software with the keyboard so you don’t have to worry about throwing in apostrophes. The sliding mechanism produces a satisfying sound and it feels like it will hold up over time.
On the downside, I found the Tab button and A a little too close together and this led to multiple frustrating typos. What’s even worse is that the top row doubles as the number keys. This happens on many keyboards but usually you’ll have the letters and numbers a different color or font size to help you quickly find what you’re looking for. The myTouch Slide has “T5” “Y6” “I8” and others the exact same color and size, which can take some time to get used to. None of these quibbles are deal breakers though, as I was quickly able to get up to speed with my typing.
(The keyboard has four rows instead of five, and the top row reads “Q1 W2 E3 R4 T5 Y6 U7 I8 O9 P0” which looks dumb and would take some getting used to. Alas, the Touch Pro2 has five rows, like all the keyboards I am used to.)
The keyboard is one of the best four-row designs we’ve used in recent memory (LG, seriously, take some pointers from this before you go releasing an Ally 2) with great feel, spacing, and clickiness — it’s readily apparent that HTC’s deep experience in making these kinds of keyboards is paying dividends. They’ve made room for all of the most important keys that you should be able to access without pressing Shift or Alt, notably the comma, period, and “@” symbol, plus you’ve got Home and Search keys and duplicated modifiers on the left and right sides. HTC aficionados will also be pleased to see that they’ve carried over the lit Shift and Alt symbols above the numeric row, which makes it super easy to see what character you’re about to press. It’s a nice touch.
Keyboards are a very personal thing, and personally I love Slide’s QWERTY. While not quite as luscious as the Touch Pro2 on which it’s based, mT3G Slide’s thumbboard has been a joy to use save for some minor issues I have with the labels on the keys. Buttons on the keyboard are offset and isolated and have decent travel and solid tactile feel – in other words, its the exact opposite of the Moto Droid‘s flat grid of near motionless buttons, which I can’t stand. If you just read that sentence and wrote off the rest of my review because you love, love, love Droid’s QWERTY, then you may well hate Slide’s keyboard. Like I said, QWERTYs are a highly personal matter.
From http://www.mobilecrunch.com/2010/06/10/review-t-mobile-mytouch-3g-slide/: “who is this for? It’s for folks who miss their Sidekick and want a keyboard for messaging. The MyTouch 3G Slide’s processor won’t win the blue ribbon at the County Fair, but it is an impressive bit of cellphone.”
My verdict? I would want to try it out in the store, but it sounds like the keyboard would probably be “good enough” for me. That said, I think I will continue to hold out on upgrading for the following reasons:
My current service plan is $55/mo+tax, but these days it seems extremely difficult to get “smart phone” service for under $70/mo.
The Slide’s display could be better, its processor could be faster.
I want that 5-row keyboard, or at least one less stupidly designed.
Given that it may be either a hassle or an impossibility to upgrade my phone without paying more money each month, an expensive “upgrade” had better be worth it. The Slide sounds like it would be good enough as a new phone–a better alternative to the G1–but it has a few too many compromises to justify the cost of upgrade.
Well, I am working on extending a Django application to add log entries to the django.contrib.admin.models.LogEntry which may be fodder for another post, but while composing a change_message I wanted to convert a list of “changes” into a string like “Changed this thing, that thing, and that other thing.”
Here is what I have got, and since it is Python I bet $1 that someone will comment with a better way. (I couldn’t figure a good search query for seeking the answer so I had to use my brain.)
if len(updated_list) > 1:
rs = "Changed " + ", ".join(map(str, updated_list[:-1])) + " and " + updated_list[-1] + "."
else:
rs = "Changed " + updated_list[0] + "."
>>> updated_list = ['just one thing']
>>> print "Changed " + updated_list[0] + "."
Changed just one thing.
>>> updated_list = ['one thing', 'another thing']
>>> print "Changed " + ", ".join(map(str, updated_list[:-1])) + " and " + updated_list[-1] + "."
Changed one thing and another thing.
>>> updated_list = ['this thing', 'that thing', 'that other thing']
>>> print "Changed " + ", ".join(map(str, updated_list[:-1])) + " and " + updated_list[-1] + "."
Changed this thing, that thing and that other thing.
I have run in to this a zillion times. You SSH to a Unix server, type your password, and then wait a minute or two before you get the initial shell prompt, after which everything is reasonably zippy.
The short answer is “probably, something is wrong with DNS . . . your server is trying to look up your client but it can not, so it sits there for a couple of minutes until it times out, and then it lets you in.”
Yesterday I was working with an artist who had a hosting account, and when he got in, I said:
sudo vim /etc/resolv.conf
He admitted that he had just copied the DNS configuration from his previous server. How to fix this? Well, he could check what nameservers are provided by his current hosting company . . . . or, I changed his file to read:
A while back I outfitted my personal workstation with 4GB of RAM. That’s plenty of memory and since disk space was tight I didn’t want to waste any on a swap partition, and I lived happily without swap for a very long time until I began using more virtualization. (I freed up space on my physical desk top by migrating my work environment from a laptop to a virtual machine on my personal workstation.)
I wrote a script to add a “temporary” swap file on demand but what I wanted was a swap file at boot. That actually turns out to be pretty simple. In this case, I just prepare the swap file:
I recently migrated this web site to a virtual server at the Rackspace Cloud. I started with the cheapest, 256M slice, but after hitting some performance issues really quickly, I figured that the extra $10/month to grow the slice to 512M was worthwhile. Even so, I don’t think MySQL and Apache are tuned, out-of-the-box, for such “small” systems.
I am running WordPress, a PHP application, on Apache and MySQL, running on CentOS. I am using Munin to track the system health. Since MySQL performance tuning can be extremely complicated I have focussed my initial efforts on Apache.
So, the memory graph would ideally top out at 512MB, but in practice, the system and programs allocate excess memory they rarely touch, and that gets paged out to swap. It is when the swap activity gets high that system performance goes to heck. A spike in system load is a good symptom of possible performance issues.
When things went bad on Wednesday, I tuned Apache down somewhat from the defaults and then enabled the Apache status page, and told Munin to go ahead and graph that. I am new to Munin, but Slicehost has some excellent articles on installing and configuring it in my environment.
This morning Munin sent me e-mail that it was having trouble collecting data, so I took a look, and reset performance values for Apache based on the above graph:
Hopefully, this will hold. I would love to audit the system memory use in greater detail to allow Apache some greater flexibility, but in the interests of achieving a stable system quickly, this will hopefully prove to be a good strategy.
Yes, I still use mutt. The killer feature it has over Gmail is that I can go through my old messages in forward-chronological order. That and I don’t have to hack my web browsers to display plain text messages in a monospace font. But, in order to use mutt with all the latest and greatest patches, I had to apt-get install mutt-patched.
It is convenient that they maintain a package with all the patches. Unfortunately, when I fired up mutt it had this ugly left-pane, like it wanted to be Outlook or something? So, I did a little research and tracked the sidebar to its source:
Unfortunately, though, mutt lacks an important feature that most email clients do have: a folder list that allows you to see all mail folders you have and how many (new) emails they each contain.
One person’s important feature is another person’s nuisance, but further down the page I found the config to turn the thing off:
To a discussion as to preferred password manager solutions, I added the following:
I developed a simple algorithm I use to generate passwords using my brain. I have changed this algorithm a little a few times. At the most basic level, something like this would be you like to use the password “frog” . . . but then add the first two letters of the web site name: Yahoo -> frogya, Google -> froggo.
The benefits of this “password manager” are that as long as your brain functions appropriately, you will always have platform-independent access to your passwords. If any given password is compromised it is non-obvious to an attacker what your other passwords are.
The main drawback to this password manager is that different password policies are mutually exclusive: one site requires a special character, another site prohibits special characters.
I use a different algorithm for more complex passwords for important stuff like ssh keys and unix logins.
After some transient disk issues I was stuck with an Ubuntu VMWare image that was brain dead. I figured I would give the install CD a chance to fix but the Ubuntu install CD doesn’t have a fix-it option. (Really?!) Since the issue was somewhere in how Gnome and X were configured, I launched an xterm session and managed this command:
You remember how everyone was on Friendster? And then, Friendster was too slow, and everyone lost interest?
Then we were all on Orkut? But it turned out the guy just stole the code from somewhere else and it got boring pretty quickly, too.
Then there was Tribe.net, but I never signed up for that.
Then there was MySpace, and suddenly you could pretty much do anything with your profile, hook in doo-dads and gewgaws and blinky backgrounds? Well, I dipped my toes in that trainwreck but yeah . . . old news.
And then Facebook came along, which only stole the idea from someone else, and not the actual code. It was fast and scaleable like Orkut, and it had applications and stuff so you could have the flexibility of MySpace but within a controlled environment. Boy that thing took off!! But, Facebook was still missing a critical ingredient: you can not trust them.
So, I figured I would get ahead of the curve on this one. They keep revising their rules and re-jiggering things to make it harder and harder for people to keep their information private. Eventually enough people are going to be spooked at that. I tried to re-re-re-re-review my privacy options and look at taking out most of my profile information but they made it enough of a pain in the ass. Eventually I used Google to find the option where you can just delete your account, which, in true Facebook style, takes two weeks. Anyway, in another week and a half, I will have vanished.
If I change my mind someday I can sign up all over again. Despite the hooplah, though, I think there is a very good chance that lots of folks will move on in the near future. Either some kind of open-standard, or maybe a comparable platform run by a company that regards trustworthiness as a central ethic. (Speaking of which, you can stalk me on Google.)
Cfengine is an tool used by Systems Administrators to automate the configuration and management of multiple systems. I have mixed feelings about cfengine because it strikes me as overly complex, and there are alternative tools available, but the basic idea of automating systems administration is sound.
Of course, it can take a lot of effort to automate processes, and it takes effort to bring in an automation framework like cfengine to facilitate automation. (Like I said, cfengine is complicated.) Is it worthwhile? More importantly, how do you convince management?
The value_kept, value_repaired, value_notkept settings fall under cfengine transaction logging and allow administrators to attach actual monetary (or other) values to promises kept, or issues repaired, or conversely measure the loss of non-compliance in dollar terms (choose your currency). This value is summed and recorded for each execution of Cfengine, and can be turned into graphs for your management reports.
“If you combine this with system performance data, and other reports from Cfengine, you begin to build up a pretty compelling case for IT services value. Hopefully this will give skilled system administrators the leverage they need to advance in the view of the more removed managerial levels, guarding the purse strings,” says Mark Burgess, author and company founder of Cfengine.
This is a clever idea, and one that strengthens the case for getting staff to record the time required to complete trouble tickets: if it takes two days of effort to automate a five-minute process then you “break even” on the investment after the process is run 320 times.
More importantly, these cfengine bits are focussed on “business value” . . . a given process may mean five minutes of effort to a SysAdmin, but it may mean a great deal to the user depending on that process. Putting a business value on a process can be tricky to do, but if you figure that a five minute procedure is blocking an engineer from getting work done, and it takes, on average, an hour for the request to be fulfilled, then the business value of automating the process pays off after 16 runs. (More or less, depending on the “value” of the users’ time versus the “value” of the usually-Senior SysAdmin doing the automation.)
Anyway, to the extent that you can put a value on any given process, you can record the value of the expensive process of automation, and help prioritize automation efforts. The greater “return on investment” can be shown for task automation, the greater your case to management for investing time and resources into automation. (Or, it is easier to identify and explain those things not worth automating. A difficult-to-automate one-hour process with low business value that runs once a month may very clearly not be worth the effort.)
I slept in, but Mei was catching up on sleep from her night shift, so I wandered down to the Tea Lounge. After she got up I met her at Cheryl’s for brunch, then we picked up groceries, and she ran off to the gym as I cleaned my desk area, and began writing holiday thank you cards, as she returned and cooked up food for the week.
1.0h Frontline
Monday, February 1
I was pretty productive at work, most notably cleaning up the mess I made on Friday moving my project from stand-alone Django to hosting via WSGI. The big win was in adding this to my WSGI handler:
# So, usually in django you can have print statements in your code to
# aid in debugging, but this cause trouble for WSGI, so we'll direct
# print statements to stdout instead to stderr, hopefully landing them
# out of the way and in the error log. -dannhowa
sys.stdout = sys.stderr
Mei made her macaroni and cheese from scratch.
Later, while watching Frontline’s “Young and Restless in China” I was struck by and admired Jingjing’s concise and honest account of a tragedy in her personal life:
I’ve been through a difficult time. My fiancé and I are both very, very busy. Actually, I focused more on my work than my relationship, and it faded. He gave up. I could feel it. His heart wasn’t here any more. There were new temptations, probably a better woman than me. I felt like I was the one who always blamed or criticized him, but the other woman flattered and admired him.
He said it first: “let’s just end it.”
I tried really hard to get him back, but I just couldn’t.
Fortunately, Mei and I are both aware of the danger of putting work ahead of personal relationships.
Pushups: 34
0.75h Frontline
0.25h Saturday Night Live
Tuesday, February 2
I was glad to hear that the groundhog bit the mayor last year.
This blog got hacked for the second time. This time I am running the most current version of the software. An edit was made through the “admin” account to link an entry to some web site in Russian. I reverted the edit and deleted the “admin” user. I should probably update my plugins.
Pushups: 41
0.5h Daily Show
1.5h How Much Do You Love Me?
Wednesday, February 3
This morning I was thinking that winter might help make people liberal: they understand that suffering is universal and temporary, we are proud of our survival skills. Sometimes people need a hand, though, and you ought to help them out because we’ll all be doing better come spring time.
Where the weather is always warm, suffering is more often regarded as a consequence of personal failure, and personal failure is often inherited from shiftless parents. Helping out the hopeless just gets in the way of one making the most of long pleasant days: a noble distraction for some, but nothing one should be burdened with in the form of taxes.
It is certainly more complicated than that, but there is a gradient where you see the great social democracies at the Arctic Circle, and as you move closer to the Equator that capacity for efficient government seems to evaporate. (Also, necessity being the mother of invention, collective action being a prerequisite for mere survival in Sweden.)
Pushups: 31 + 21 + 25
Situps: 100
1.5h Barack Obama versus The GOP
0.5h Daily Show
Thursday, February 4
Advice to a coworker wondering if he should sue Toyota or request rental car reimbursement:
They might could loan you a car, being a car dealer and all, but really the fix takes about a half hour, except the government’s thinking it might be an issue with the computer, possibly caused by electromagnetic interference, so good luck figuring that one out. You might consider disabling excess electronic junk in the passenger compartment: put your mobile device in airplane mode, etc. (Personally, I would just man up and accept that my mortality is bound by fates beyond my understanding, though personally I avoid driving anyway.)
But what I really want is to hear the Governator slur it just right:
TOHTAH RECALL!!
If recalls bother you then you might be better off with a used car, which has had several years for any consumer defects to have been detected, analysed, and amended. My father, who spent many years repairing electronic systems, always preferred cars from the junk yard with minimal electronics because he KNOWS they’re failure prone in unexpected ways, and he figured that after the nuclear war his car would still be driveable. (What with the EMPs . . . )
After dropping Mei off at work in the evening I finished off an open bottle of dessert wine, and watched a bunch of TV, including several episodes of “The Daily Show”, “The Colbert Report” and “Aqua Teen Hunger Force” which featured a two-part episode where the Mooninites stole Carl’s hypno-rims and hypnotized him into sodomizing himself with a broom. Now, “Aqua Teen Hunger Force” is pretty “out there” but mid way through the second part I just had to turn that crap off.
Friday, February 5
This morning I received an unexpected phone call from a stranger in Dublin who explained that the directory link count on a Unix filesystem indicates the number of directory entries contained in that directory. Two of those are . and ... This might also explain why you can only use symbolic links for directories, since the link count field has a different purpose.
Technical Debt — A term coined by Ward Cunningham to describe the obligation that a software organization incurs when it chooses a design or construction approach that’s expedient in the short term but that increases complexity and is more costly in the long term. The technical debt vocabulary provides a way to communicate with non-technical staff in an area that has traditionally suffered from a lack of transparency. Shifting the dialog from a technical vocabulary to a financial vocabulary provides a clearer, more understandable framework for these discussions.
“Woonerf” – Anarchy the Key to Safe Streets? — Europeans are experimenting with an idea that tearing out sidewalks and sharing road space between vehicles, bicycles and pedestrians can improve both safety and speed of travel in towns with fewer than 15,000 residents. The safety is achieved by slowing vehicles to a maximum of 20 MPH-a speed at which drivers can react effectively and the human body is most likely to survive an impact. Vehicles gain speed because they can move efficiently through intersections without waiting at traffic lights.
Saturday, February 6
Today I went in search of adventure. I started walking, following the directions allowed by traffic lights, and made my way down Flatbush, right on Church, past Ocean Parkway then down past Cortelyou to Ditmas where I happened upon the hobby shop I have wanted to visit, Trainworld. That was a groovy place and I was tempted to maybe buy a ready-to-run holiday trainset or a Bachman set with a Norris locomotive but aside from not-needing-to-spend-the-money there’s also that where-would-I-put-it-anyway. At one moment I thought how my calculus for spending money on things that don’t have an obvious place to live would be changed if the request were made by my children, and I reckoned I will one day say yes to them a little more easily, but that when I was a kid I learned that since parents say no, it is important to consider the cost and value of different wishes, and that something is gained when a child learns to choose their battles.
After flirting with my boyhood fantasies and leaving the shop empty-handed, I walked toward the adjoining elevated train station, but postponed my train trip to watch several fire trucks and a small crowd of people respond to a fire in a small building. Smoke poured out the doorway and the firefighters knocked out windows and brought in a hose, while two guys climbed the fire truck ladder onto the roof, I guess for tactical reasons. Everyone admires the heroism and strength of firefighters, and for a boyish instant I wanted to become a firefighter too. While this particular fire didn’t look like much, everyone in the crowd was glad at the chance to see these men entering a burning building to make things right.
After the smoke had mostly cleared I hopped on the train and rode the F out to Coney Island, which was rewarding because that station is built in the style of the grand train terminals you still see in Europe, with possibly a dozen tracks alongside each other under a soaring ceiling, trains coming and going constantly. I hopped an N train back North, which didn’t offer the scenic view I had had on the F, because it ran in a ditch. But I did get to see the operator reach out the window at one stop to press the “local” button, which I imagined was rigged up to set the switches for the train to run on the local track. Seeing this little detail of the MTA operations was a thrill. Though, I was a little disappointed that we ran local, because the subway map says the N runs express up to Pacific Avenue. Along the way there were darkened trains parked in at the express tracks in the stations, and I wondered if they might be trying to keep some of the extra trains warm, or maybe they were doing yard maintenance and were using the express tracks for storage.
Background: Google Apps is a service where Google will host the e-mail and calendar for your domain. So, instead of going to gmail.com I go to mail.toldme.com and log in as dannyman for dannyman@toldme.com. The annoying thing that has been going on for several years now is that only a minority of the growing array of Google software that features personalized content will support my Apps login, so I have two completely separate Google accounts:
Apps Account: dannyman@toldme.com
Gmail Account: picasasucks69@gmail.com
The first contains an archive of e-mail going back 15 years, my combined e-mail, telephone, and address book of all my friends, and Calendar appointments for the past five years. It integrates seamlessly with my Android Phone.
The second is for all the stupid Google applications that do not work with my Google account and require me to have a Gmail account that I never use otherwise: Picasa, Blogger, Google Maps, Google Voice . . . that last one is especially annoying, because now the brokenness leaks onto my Android phone!
As a big Google fan, I have an Android phone and a Google Apps account, and a Google Voice account. Google Voice is really neat, but since it only supports Gmail logins it is really poor that my Gmail / Android contacts aren’t available in Google Voice. That’s right: since I’m a really big Google fan, the Google Voice application will NOT sync with my Google Phone.
I understand that it is possible to install software that pulls the data out of your Apps Gmail account or Android phone, and then re-copies that back in to the Google Voice non-Apps account. But this requires extra effort on my part to maintain a kludge to have duplicate copies of data stored in two different places.
What I want instead is the obvious and sane solution, where I log in to Google Voice the same way I log in to everything else: with my Google Apps account. My Android phone logs in to my Google Apps account and has instant access to my contacts list, and my hosted Gmail logs in to my hosted Apps account, and has instant access to the very same contacts list shared seamlessly with my Android phone. So, when I log in to Google Voice, I want to log in with my Apps account, and then Google Voice has instant access to all of my phone numbers and e-mail addresses associated with my Google Apps login.
Basically, I am asking for sanity, and short of sanity, at least an acknowledgement that sanity is a desired outcome.
This “second class citizen” treatment is really frustrating at times: the biggest fans get the worst support. Any idea when Google Voice is going to stop locking us out? And when that time comes will I be able to keep my phone number, or will it be like when I was forcibly migrated from Google Calendar over to a blank Google Apps Calendar, losing all my appointments and shared calendars, with no option to migrate my data?
I have tried to get an answer from Google Voice to no avail. I would like to think the Google employees behind Apps are working behind the scenes to make Google Voice available seamlessly to paying and loyal customers. Or maybe this simply is not a priority and us common folk Google Evangelists just shouldn’t get too worked up about Google products, and consider switching to competing technologies. Thanks!
These days my Android phone is in a weird way, because I’m starting to use Google Voice for SMS, except Google Voice has no access to my address book, so everywhere I am accustomed to seeing names and pictures for my contacts I see a ten-digit number, because Google Voice has no access to the contacts in my Google account.