Clean Up Your Mess
Code: , , , , , ,

Too many sysadmins is a bad thing, especially if one of them doesn’t care about keeping the servers up.

The development box at work wasn’t letting me check anything into subversion — commits were just sitting there, not even timing out. In fact, so were updates. Something was seriously wrong.

I talked about it with a coworker and went to look at the box. Afew a few minutes of poking around, the problem became clear: someone installed a backup program that was trying to do some kind of fake-filesystem and wedged the box. Any process that tried to read from disk froze and couldn’t even be kill -9‘d.

And thanks to this odd little behavior, I could see three reboot processes frozen, presumably trying to read the shutdown scripts. So the person that wedged the box knew they wedged it but they just left it that way.

I got the coworker in the office to pull the plug on the box and it came up OK, but I edited /etc/init.d/arkeia to spit out the following note instead of try to start the backup program:

Dear whoever the hell decided to install arkeia:

You left the dev box wedged overnight, wasting at least an hour of two coders time to figure out what you did and fix it. And we know that you know you broke it, we could see that you tried to reboot and then LEFT IT FOR SOMEONE ELSE TO DEAL WITH rather than actually fix it.

Don’t be a jerk! Clean up after yourself!

Please talk to Jim and Harkins and explain why you left the box broken before you try playing with arkeia and wedge the box again.

Flintstoning Toasters
Code: , , ,

Flintstones Record Player
I picked up the term “flintstoning” from my visit to Cambrian House. It’s the practice of substituting a little human work for functionality until there’s enough demand for the feature that it’s worth the coder time to implement. Let me give you an example.

You’re a web coder for a bank whose promotion this month is a free toaster to everyone who deposits $10,000 to open a new account. The bank realizes that toaster manufacture and delivery is not their core competency, so they outsouce the task the lowest-bidding toaster fufillment processing agency. Your job is to write the code to get toasters to web customers. You have two options:

  • Spend painful hours attempting to reconcile the inconsistencies between the toaster pimp’s documentation and their Java-powered full-stack WSDL automated toaster delivery processing gateway until XML angle brackets gouge your eyes out.
  • Just flintstone it.

  • Bread-shaped toaster

    Because you’re smart enough to always, always, always be loved by the administrative assistants (it’s totally worth spending a few hours of playing “why can’t XP see the laser printer”) you know that Donald the junior assistant is the one giving toasters to customers who walk in off the street with briefcases full of money. You strike a deal with Donald: if he’ll send out a few toasters for you, you’ll drop by for dinner with your famous key lime pie and set up that wifi router that’s been sitting in its box for the last three weeks.

    You write a ten-line shell script to mail Donald with the names and addresses of new, untoastered customers and put it on a cron job to fire off every few hours. Then you put “Turn off toaster promotion” on your calendar for the last day of the month and tell your boss you’re implemented near-real-time toaster deployment and get back to working on instrusion detection.

    Flintstoning is having the presence of mind and step back and evaluate your priorities by not spending time on automating a task until you know it’ll actually be worthwhile. Sure, it may take a minute or two to do things manually, but unless it turns out that more than a handful of people want your toaster you’d be wasting time to code it up. Just leave yourself a way to get at the data programmatically in case you get avalanched in requests and move on. You’ve got better things to do at work than internet-enable toasters, right?

    Cambrian House Party
    Biz: , ,

    Cambrian House default avatar
    Cambrian House, the startup I snuck a peek at and got a hat-tip from has opened for a public beta test. They’re sort of an open-source business incubator: folks submit ideas, the best of which become projects; folks submit code, art, and copy, the best of which go into the finished project. Cambrian House (or a spinoff company, perhaps) runs the project as an online business, paying royalties back to the folks who contributed.

    It’s a darn clever idea and I want to see them succeed. Go easy on the site’s rough edges, it’s truly beta, not that faux-beta that Google sticks finished products in for years to avoid doing support.

    Cambrian House "9" Award
    True to their CEO’s mail, I’m still user number 9. I’d link to my profile, but I can’t find a URL for *any* profiles. (Just one of those rough edges that true beta products have.) Contributors can earn cute little awards (think of Boy Scout badges) for sending in ideas and such. I’ve got a “9” award with the text “Peter will always be #9 to us.”

    I’ve poked around the site and even submitted an idea (I sniffed out the link for my idea, but it’s an uuugly URL and unfortunately doesn’t link to my profile). It’s like a fun project and I’m already a fan, so I’ll contribute to a project or two and blog about it.

    Cambrian Development
    Biz: , ,

    Since I posted about Cambrian House last night, they’ve responded to me. I sent a heads-up mail to them (because I saw their blog didn’t pick up the trackback I sent) and got a brief thank-you note back from the CEO/founder saying they’d fix their permissions problem.

    And this morning their development site had a new banner on it:

    Cambrian House header

    A classy response beats threatening a Lawyerclypse. And it’s a darn good sign given that public trust is a big part of their business model, which is all I’m going to say on the matter for 27 days or so.

    Pre-Cambrian House
    Biz: , , , , ,

    I was poking around reddit and followed a link to, an all-Flash (ugh!) puzzle game. There’s a few of these “guess how to get to next level” games online and they all just annoy me. Yes, you’re so clever. No, I find patronization alluring. Yes, I’ll spend my time on this for no discernable reward.

    The puzzle is run by Cambrian House, a mysteeeeerious stealth startup that has only a teaser page online. If there’s one thing that annoys me more than Flash puzzle-level games, it’s stealth startups.

    So I went poking around some more and found a development copy of their website. And much to my surprise, it’s actually a darn cool business idea. So cool that after I wrote a whole “Mwaha, I’m raising the curtain early!” post I thought better of it and am only going to post this for now. It was clever and fun, there’s going to be a ridiculous amount of buzz around this company when it launches. And I got to register as user #9, which was damn funny when I noticed their “About Us” page lists 17 employees.

    Confidential to CH in Calgary: it’s really tacky to litter your URLs with “.php” and get variables. Put the following in your .htaccess file and have index.php take apart the URL with the PHP code below and route to your different pages. URLs like “/community/member/Harkins” look much nicer than “/community/member-profile.php?users_id=9”. (Or ask me about mod_rewrite.)

    <Location /secret_development_environment>
        Order Deny,Allow
        Deny from all
        Allow from
    RewriteEngine On
    RewriteCond    %{REQUEST_FILENAME}  -d [OR]
    RewriteCond    %{REQUEST_FILENAME}  -f
    RewriteRule     ^(.*)$  - [L]
    RewriteRule ^(index.*) - [QSA,L]
    RewriteRule ^([^.]*)$ /index.php [QSA,L]
    function url_parse() {
            $url = $_SERVER['REQUEST_URI'];
            // we don't want to pass get vars or anchor tags on to the script
            if (strpos($url, '?'))
                    $url = substr($url, 0, strpos($url, '?'));
            if (strpos($url, '#'))
                    $url = substr($url, 0, strpos($url, '#'));
            //remove leading slash and possible trailing slash, store in $url
            if (substr($url, 0, 1) == '/')
                    $url = substr($url, 1);
            if (substr($url, -1) == '/')
                    $url = substr($url, 0, -1);
            if ($url == '/')
                    $url = '';
            $url = explode('/', $url);
    Cambrian House house responded to me.

    Fatal error: Call to undefined function twentyseventeen_get_svg() in /home/malaprop/ on line 45