Brandon's Blog

4/1/2009

'The Stress' - A Tribute

It goes without saying that I am a big fan of The Barenaked Ladies.  There is an honesty in their writing and music reminiscent of Rush or Sarah McLachlan (both also Canadians, incidentally).

But, as much as I enjoy their music, I’ve had a lot of problems identifying with Born on a Pirate Ship.  I’ve always felt like I’ve been missing something.

Our good friend Suat would refer to this as “the stress.”  Suat got “the stress” once when looking at a certain Anatolian kilim.  But, when he spotted a certain beautiful color in the rug, he was able to relax and enjoy the piece.

Carefully listening “This Is Where It Is” did this for me.  I get it now.  A sort of struggle with the past and moving forward.  Somewhat like James Taylor’s classic Sweet Baby James album.

4/1/2009

The MBA Disease

I just did an IRR calculation on a $2/month service fee for a home warranty renewal.

But, even with the small bucks it’s astounding to see the rates of returns these companies gather just for allowing small payments to be spread over time.

4/1/2009

Oh, Media...

Leave it to CNN to find ambergris in the carcass of the fail whale.  This story was recommended to me based on various tracking cookies CNN installs, apparently.

4/1/2009

Following Up

So, I changed my Excel formula I mentioned in This, My Life so that it now caps the week number at 4, which turns out to be a design requirement:

=MIN(TRUNC(((WEEKDAY(DATE(YEAR(E2), MONTH(E2), 1),2)+DAY(E2)-1)-1)/7)+1,4)

But, converted to Business Objects, it looks like:

= If (
  (
    Truncate(
      (
        DayNumberOfWeek(
          ToDate(
            FormatNumber(MonthNumberOfYear(<Date>), "##") & "/1/" & FormatNumber(Year(<Date>), "####"),
            "mm/dd/yyyy"
          )
        ) + DayNumberOfMonth(<Date>) - 2
      ) / 7,
      0
    ) + 1
  )
  > 4
)
Then 4
Else (
  Truncate(
    (
      DayNumberOfWeek(
        ToDate(
          FormatNumber(MonthNumberOfYear(<Date>), "##") & "/1/" & FormatNumber(Year(<Date>), "####"),
          "mm/dd/yyyy"
        )
      ) + DayNumberOfMonth(<Date>) - 2
    ) / 7,
    0
  ) + 1
)

3/31/2009

Taking One for the Commons

“Office Politics” — while not specifically a misnomer — is not quite the ideal term for a lot of what goes on in an office.  The political part almost solely deals with attempting to manipulate (in the value-neutral sense of the word) the forces that distribute scarce resources among viable recipients.

Office politics are efficient up to a point at which one of two governing conditions breaks down: (1) the allocating forces lack the ability to use the incremental information generated by the politics to reach an optimal solution, or (2) politics consume so many resources amongst the players that incrementally more efficient resource allocation cannot compensate for the productivity loss.

Of course, it falls on the leadership to maintain the first condition.  And, the second condition would not arise unless the players believe the additional effort will yield more results than simple effort and accomplishment.

The rest has virtually nothing to do with all this and involves not stepping on toes.  This can almost be likened to one of our beloved voting-style reality television shows.  These almost always provide a blend of two major factors to determine outcome: individual achievement and popular opinion.  Failing to achieve puts one in a sort of “hot seat.”  But being disliked generally makes the final decision.

So, a reasonable way to look at things is that your reputation and likability effectively buffer you from occasional lapses in performance.  Leadership sets the tone for how much positioning occurs in an organization, but in the end our decision to be trustworthy, likeable, and kind may in fact shield against being targeted by those very political forces.

Why did I think of all this nonsense?  Somebody left a coffee on the automatic coffee machine’s little drain deck, and I finally decided after a few hours of waching it turn gelatinous that I would be the one to pour the thing out and get it out of the way.  People were reluctant to do this all day, apparently.  Maybe because they were afraid the owner would show up and feel slighted by such an action.

One positive thing about the working world is that in general people tend to recognize the value of being reasonable and nice.  It’s almost endearing when silliness like the cesspool coffee cup occurs, because it shows how conscious people are of possibly offending someone.

Or, nobody wanted to bother running it down the drain.

We’ll never know.  But I hope everyone enjoys the de-tragified Commons.

3/31/2009

Get Off My Lawn!

I’m looking at a Newegg promotion selling a 1.5 TB hard drive for 79.3 cents/GB.

They should put a sticker on it that says “Adobe Reader Version 14 Ready.”

3/31/2009

Blog Things

What do I envision for a homebrew blog application?

Well, my most import design parameter is that it doesn’t take much time to build.

I don’t want a writer/reviewer/editor permissions model.  One user is good enough for me, in fact.  If I want more than that I’ll install Wordpress or Textpattern or Zine or something.  Hash a salted password with MD5 and slap that sucker in a config file.

It has to have a good name.  Nothing exotic like Ubuntu or Django, but not exactly like BlogMaster or something.  I wish “yaz” hadn’t been hijacked by birth control pills, because that’s the Turkish imperative for “to write.”  This naming thing seems especially important in Python; it’s hard to compete with “Beautiful Soup” and the like.  Maybe “Efendi” (Turkish for “dignified gentleman”).

But back to speaking somewhat seriously.  No threaded comments, no pingbacks, no blogrolls.  No API support.  If I see XML anywhere outside an RSS feed it will be promptly be handed a lollipop and shown the door.

No storage of blog name, description, or owner in the configuration.  Those go straight to the template.  I have never understood the reasoning behind taking down a phonebook of information just to parrot it back through the template.  Once.  Maybe.

No need to actively manage files or images.  A file listing with an upload box and delete buttons is ample.  If that.  Real men use SFTP.  Clever men steal bandwidth from the original source.  File management in any form would likely be a Version 2 feature.

Markdown formatting language, with HTML allowed for authored posts and disallowed for comments (I really hate cross-site scripting attacks).  I’m sick of Textile for some reason.  Possibly because it’s candidate #2 for the underlying bugs in Cluster 2.0.

No support for static content.

No plugin API.  Here in NoFrameworkLand (or is it NoFrameworkLandFactory perhaps?), we call that a code revision.

No jQuery or other AJAX or sparkle.  Please, no.

Okay, so that’s pretty much what it’s not.  What is it?

RSS support.  Not a Rosetta Stone of Atom, RSS 1.0, 2.0, 0.86, 26.a.  Just RSS support.

Importing.  Preferably via RSS unless Textpattern can’t accommodate.  I started my blog at the beginning of my second year of college.  With Blogger.  The importer module will need some chest hair.

Data backend not exceeding the complexity of SQLite, meaning file-based database or flat files.  Probably SQLite, probably with an ORM tool like SQLAlchemy to keep the actual written code terse (this is one place where I am newly receptive to accepting framework overhead).

Templates.  Simple templates.  I mean like str.replace(…) simple.  Penance for the SQL framework comes from probably eschewing a prefab template framework.  If there is one, it’ll be one of those lovely Pythonic one-file/no-install types.

The Clever Feature: “source merging.”  Meaning the blog is capable of displaying data from sources beyond the basic sequence of postings.  These other sources would be modular but would center around RSS feeds.  What’s in mind is Cluster and Google Code integration, so updates show up like special blog posts and are commentable.  This avoids the “Cluster Is Up” posting every time something happens.

E-mail notification of events.  This is a low-overhead no brainer.

What’s that really missing?  Spit-shine atop a text editor for making CSS files?  I mean, what’s a blog but a way to compose, edit, post, and receive comments on your ideas?

I think a lot of your Drupal-type projects gain a lot of weight in their middle-aged time by trying to build scaffolding and decoration around inherently complex things.  And the extreme case of any simplification effort is an equally-complex alternative for the original task.  So, I instead recommend to embrace the complexity.  Live on the edge!

3/30/2009

Welcome to the Jungle, teddy.antesonic.org!

The McCalip IT infrastructure will be going through some transition time over the next month or two, as ownership of the gilford.textdrive.com server space will pass in its entirety to Dadio and I am taking over my newly-minted VPS (Virtual Private Server) with linode.com.

I was planning this transition during my internship with Shell Pipeline (Summer 2005), but opted for TextDrive because I was chicken and cheap.  But, for a small incremental per month, I get the full flexibility of root access to a server on a fixed IP with a “ph4t p1p3” as the kiddies say.

Plus, I now have the added benefit of knowing what I’m doing before I jump into full responsibility.

I loaded the newly-released Debian Lenny (timing a server build on a Debian —stable release is nothing short of serendipitous on its own) and in minutes had something I could log into.

I rolled on Python and Subversion (for the MUD), lighttpd, PHP-FastCGI, and Django.  I got PHP linked up with lightty via FastCGI with prefab Debian scripts, got the phpinfo() test screen to load up, and started to feel really dirty, like I had messed something up.

I then blindly proceeded to load Serendipity, an up-and-coming hip blog engine.  It was too heavy to really grab my affection.  Textpattern has served me well, but I’m frankly tired of the way it works.  But, it’s so close to perfect for me (at least the subset of it that I use), it’s hard to put a finger on why I dislike it at all.

Ah, I got it.  It’s written in PHP.

I like PHP, I really do.  But, this is my first root on a public IP, and the last thing I want to do is run the de facto shared hosting compromise.  I want to try something elaborate and fun.

So, I’m about to sketch in a web.py blog engine and go to 100% Python via FastCGI.  I would glady start from scratch on the server to do this (building back will only require fifteen minutes of work anyway).  I don’t even need to reformat to do this, but I would feel better to keep it clean before I get all the files loaded up.

So, I can write a rapidly-prototyped blog engine in web.py probably in an evening or two of light work, use sqlite instead of a standalone database, and finally be able to back up my blog with a straight file copy.  This would be very nice to have.

I’ll be using MoinMoin as a wiki (I maintain a near-empty wiki just for static pages like Christmas lists and how-to documents).

Cluster will be ported away from its ad hoc filthy PHP (I wrote Cluster 1.0 in a half day over SSH from work) and into Python.  This will probably take less than an hour once Python is in play.  I think Cluster’s bugs right now are due to magic quoting, which is just the most perfect example of why I’m wanting to get rid of PHP.

I’m also tired of Textile as a formatting language, as much as I’ve liked it in the past, so it’s time for something else on both the blog and Cluster front.

So, unless I have the server down for the re-do tonight, you can check out http://teddy.antesonic.org to see a beautiful empty file listing.

3/26/2009

Wasn't That Footloose?

In addition to no umbrella, I have no music today at my desk.  Consequently, I have virtually no energy.  It’s been a pretty good day, and I’m glad about that, but I just can’t get going the way I normally can when the work flows like this.

The other leg of this problem is that my heart has passed back into Sigma in a big way.  Something about sitting down on our own green couch must have drawn out the spirit of programming in me.  And, while Meta is out building entire wings onto our little edifice here, I am trimming the topiaries outside the front door.  It’s a good combination, and it leads the way toward bigger and better things.

There is kind of a point in a project like this where the code gets big enough that you no longer feel it completely in an intrinsic way.  You can look at parts, and you see stories, biases, misconceptions, strokes of insight, and reluctant compromises.  You remember all this, but the whole thing isn’t like one entity anymore.  It’s just too big.

When you first start (my favorite part, which is why so many of these hobby efforts languish under my supervision), every line of code is part of a whole that you understand and are building.  It is a very close relationship with the creative forces involved.  The emerging reality comes in quickly and is welcome at first, but after some time I start to feel limitations.

Teamwork ensures this doesn’t completely kill the project.  Sigma has never, in any of its incarnations, been about finishing, but to live it needs to continue to grow.  We are already much farther along then any other iteration of the project.  We are getting somewhat close to a playable demo!  This is going to be a fascinating and exciting time.  People otherwise uninvolved can become the most important contributors!

This probably reads as pathetically and strangely sappy, but I needed to do something to nurture the code.  This is helping me get both the “new” feeling back, and to refamiliarize myself with the internals.  Python is great at keeping projects organized and understandable, and it’s no problem getting back into the groove.  And fixing warts that have existed from nearly the beginning is really exciting.

I’m giving the worst part of the code (XML parsing) a complete overhaul.  As things knit back together (the programming community refers to “breaking” the code: solving a hard problem rarely allows the code to remain intact while fixes are being applied) I feel like we’re getting lean and mean, ready to move on to the next challenges.

It’s fun.  I don’t know if there’s anything else quite like programming.

3/26/2009

This, My Life

If weeks begin on Monday, the following function tells you what week number of a month (e.g., Week #1 or Week #3 within January) the date in cell J1 is within:

=TRUNC(((WEEKDAY(DATE(YEAR(J1), MONTH(J1), 1),2)+DAY(J1)-1)-1)/7)+1

> Newer Posts

< Older Posts