This blog is now hosted at

Saturday, November 29, 2008

Android and Exchange Support

One of the biggest complaints about Android (and the G1) is the lack of Microsoft Exchange email support. If you aren't afraid to run alpha software, you might try this (download the exchange.apk).

This is the WebDav support put together by the K-9 Mail team. It now has the feature that I wanted most: sending via WebDav (since I can't send via SMTP to my work account). Of course, it also supports reading mail as well.

This build also includes support for self-signed certificates (and certificates with mismatched hostnames).

You should check it out if you have the inclination.

Tuesday, November 25, 2008

Android irritation

Against my better judgement, I became an early adopter of the T-Mobile G1. There are some really good points, and some really irritating points. Hit the link for my thoughts.
First, the good. 3G, nice! It has a full keyboard, which is nice, but I think I could still type faster on my BlackBerry Pearl. The Web Browser is great.

Now, the irritations:

The email client (not Gmail) is a crying shame. Performance is terrible. Won't allow self-signed certificates for SSL/TLS connections*. It CRASHES when you open iCal (*.ics) or vCard (*.vcf) files. For "the rest of us" who don't want to send all our mail to be indexed by the all-encompassing Google, this application is actually insultingly bad.

I mistakenly updated to RC30, so I cannot get root on my device. Now, I don't need that, except for the fact that I'd like to have a VPN client, and there aren't any available. This is especially irritating, since I know how to configure Linux to establish the VPN connection, but since I don't have root on the device, no dice. Please someone jailbreak RC30.

* Good news on the email front: the K-9 Mail project has started to replace the default email client, and with some modest changes is already much better than the built-in client. One change of note (coded by yours truly, currently in beta) is that the K-9 Mail client can accept self-signed certificates, and certificates that have mis-matched hostnames (it pops up a dialog asking if you want to accept the key or not).

Friday, June 13, 2008

Covington Car Show

If you're a close friend or associate, you've probably heard me rave about the car shows in Covington. It is sponsored by The Maple Valley Street Rats, and happens every Friday night during the summer.

I took a gaggle of pictures this time around, hit the link to see them.

If you'd like to attend one of these Friday night events, here are the details:

When: Every Friday, May through September, 4PM to 8PM
Where: The (parking lot of) Wal-Mart in Covington, WA

View Larger Map

Friday, June 6, 2008

Death by spreadsheet

I have watched many companies tank based on the power of the spreadsheet. See, the spreadsheet is a clever device that allows you to lie to yourself in completely factual fashion.

Here are a couple of examples:

Starbucks has been making big waves about its attempts to "get its mojo back". This is great, since the new Pike Place Blend is actually a half decent cup of coffee (I'm a coffee bigot, and I'd rather drink McDonald's coffee than the old, burnt, stale stuff that they used to serve).

But the mistake that they made was in following the spreadsheet--not really understanding the gestalt of faddish drinks (that you can only drink a certain sugary drink for a while, and then you get sick of it, and change to e.g. Jamba Juice)--just looking at top line growth, expansion of stores, same store sales year over year, etc. Those all looked good, while not pointing out the inherent fragility and fickleness of the market (and if you've ever been to a Starbucks in Southern California, you realize that the customer base can be extremely fickle).

Maybe they really understand the need to keep turning things over, but they have to manage to the spreadsheet, since Wall Street demands that.

The other case I'd mention is Guitar Center.

See, they've taken the new policy of not negotiating prices. This is certainly a "management by spreadsheet decision". Let me give you an example:

I currently own 3 basses, which are all "boutique" instruments. I have a bass amplification system that can homogenize your internal organs. I also run the sound at our church, and consulted on the purchase of our current sound system.

In other words, I spend a lot on, and I recommend the purchase of a substantial amount of gear.

Guitar Center just lost all of my business-- except for nick-nacky stuff that I won't wait for (cables, music stands, etc.). Because they no longer make deals.

I will buy online, because I'm not going to spend thousands at a place that won't cut me a deal. Imagine shopping at Wal-Mart when their prices were actually higher than the Mom-n-Pop.

If anyone is paying attention, now is the time to strike: Guitar Center, formerly unassailable, destroyer of the local music store, is now vulnerable. There is an opening for a new business model to usurp the hegemon (and it doesn't have to be "the Internets" & long tail FTW!).


Wednesday, June 4, 2008

FERC Order 2004 Compliance

If you are in the Natural Gas Industry, you are aware of The Federal Energy Regulatory Committee (FERC) Order 2004. This requires natural gas companies to control communication between Transmission Function Employees and Energy and Marketing Affiliates. FERC has the power to fine companies that violate this order. Even if the communication was unintentional. Even if the company self-reports to FERC.

However, FERC has hinted at what can prevent those fines:

In April 2006, a FERC webcast was held, discussing what constituted compliance, and which companies were fined (and not fined), and what behavior would cause an organization to be in the former or latter category.

Boiling the discussion down, the essential bit is this: The companies that did not get fined demonstrated a Culture of Compliance. Now, the $65,536 question: what can a company do to demonstrate said culture?

I'd like to suggest that there are three things:

  1. Fostering a culture of training towards compliance (teach the employees about compliance, what the regulations are, acceptable behavior, etc.)

  2. Measure compliance (know where employees sit in the organizational hierarchy, who is communicating to whom, what constitutes a shared employee)

  3. Implement technology to assist (implement ethical walls, especially incorporating automated group/department detection (e.g. looking in Active Directory for groups) and keyword detection, paying attention also to shared employees)

Granted, I've given these three the briefest of coverage, but also note that these can be generally applied to any compliance effort (even if it is just compliance with a corporate Acceptable Use Policy (AUP)).

What are you doing to foster a Culture of Compliance?

Friday, May 30, 2008


<rant mode=on>Granted, growing up with a schoolteacher as a parent ingrained some orthodoxy. I'm willing to tolerate you interrupting me without raising your hand. You can go to the bathroom without asking (holding up 1 or 2 fingers is absolutely out of the question).

But why, oh why, must you make spelling errors?

I just got an email from a marketing company suggesting that I might want to find and eliminate "Rouge Access Points" from my corporate network.

I'm wondering what that looks like? Ethernet enabled makeup stations? Do they come in mirrored configurations?

What I'd really like to have is a roux access point, since that implies cajun food (mmm. étouffée. gumbo.). But I don't think they have them yet. That I'd download a whitepaper for. Read more...

Thursday, May 29, 2008

The Alembic at 6 Months

So, I picked up my Alembic roughly 6 months ago. I can't thank Mica, Susan, Valentino, Ron and the craftsmen at Alembic enough.

Pictures after the jump.


Simply put, this is the most beautiful bass I've ever seen. All of the elements work together, the Coco Bolo, Vermilion and Purpleheart, the Maple and Ebony. Amazing.


The neck is just right. Thin, sleek, effortless. String spacing is really nice at 18mm; enough room for slap, while still room for speedy fingerstyle.


The Emacs of bass electronics. Yes, it does that, for every value of that. But mind-altering; it takes a serious effort to grok them. Mica's hint of concentrating on one pickup at a time helps (like viper-mode in emacs :)).


BlackBerry Bold

Ok, so it has iTunes support (which makes sense, since the iPhone added MS Exchange support). That will be nice (all-in-one cell, email, pda, media player == less stuff to lug == good.)

But the really big news is also the source of the name for the device: the bold screen.

A half-VGA screen.

You can never be too thin, too rich, or have too much resolution.

Granted, the iPhone probably still has a better browser (and I've been considering getting one and hacking it to run on T-mobile) and multi-touch support, but the bold has a keyboard, which makes it actually usable for email.

Friday, March 28, 2008

Blackberry SDK, Modifying messages

In an earlier article, I stated that I liked the BlackBerry SDK, and one of the things that I liked that the SDK seemed complete, in that it supported and documented how to do things that are "hard to do" (e.g. Bluetooth support).

I decided that a thought experiment was in order: could I modify email messages as they are sent?

The BlackBerry SDK makes this fairly straightforward: implement the net.rim.blackberry.api.mail.SendListener interface, which has a single method:

public boolean sendMessage(Message message)

By implementing this method, you can modify the message as you see fit (Message is what you think it is!), and even block the message by returning false from the method.

Now, based on things that Apple has said, I don't believe that the iPhone will support this type of development-- modifying the default behavior of the built-in applications.

Based on what I have seen in Android, it does look like this would be possible there (I haven't looked extensively, however).

Wednesday, March 26, 2008

ReportLab ImageAndFlowables + drawing

So, I've been doing a lot of work with ReportLab lately, and I discovered something that is under-documented, and something that works, but seems like it might be contra-indicated. Hit the link for a description.

The under-documented bit is that the Drawing class is a Flowable. What this means: you can use all the graphics libraries (including all the chart creation) directly within platypus formatted documents. This is great, and here's why:

I'm trying to create charts to include in my report, and up until figuring this out, I've been using matplotlib, exporting to PNG, and importing into my document as an Image object. This works acceptably, but seems a little balky when the images get scaled.

I went looking for a way to embed vector graphics into my document (no scaling issues!), and happened upon the above. Then I decided to take it to another level entirely, and see if the Drawing could be embedded in an ImageAndFlowable (as the image). In short, the following works:

drawing = Drawing(400, 200)
bc = VerticalBarChart()
p = Paragraph("spam " * 200, style['Normal'])
fi = ImageAndFlowables(drawing, p)

Which happens to be exactly what I needed, and I'm psyched.


Monday, March 24, 2008

Singletons in Python

Since the project that I'm working on has a whole lot of nasty, boil the oceans, SQL queries, I thought it'd be best to cache information. Caching is great, but what I really need is an application-wide cache (not tied to a specific instance object).

Normally I use Singletons (from _Design Patterns_) to provide this functionality. Here's how to implement them in Python:

from (in the comments):

class Singleton(object):
def __new__(cls, *p, **k):
if not '_the_instance' in cls.__dict__:
cls._the_instance = object.__new__(cls)
return cls._the_instance

all you have to do then is inherit from Singleton, and it just works. This is actually cleaner than some other languages I've implemented Singletons in.

The real bonus, however, is the actual article that the posting above was about:

class Borg(object):
_state = {}
def __new__(cls, *p, **k):
self = object.__new__(cls, *p, **k)
self.__dict__ = cls._state
return self

That will share the state of the object across instances. No thinking about it.

Alembic Pictures

We had a spot of sun this weekend, so I decided to take a break from work, and take some pictures.

Hit the link to see pictures of my 6-string Alembic Series II Balance K.


New Classes vs. Old Classes in Python

I found a bit of daftness in Python today:

class A:
def __init__(self):
print "Rutabaga!"

class B(A):
def __init__(self):
super(B, self)


TypeError: super() argument 1 must be type, not classobj

Changing the first line to:

class A(object):

fixes it.

Now, forgive me if I think that's completely stunted. You could have at least said:

TypeError: to use super(), the superclass must have one of the built-in base classes in its inheritance path.


Friday, March 21, 2008

Guest Blogging at Archiving 101

I'm guest blogging over at Archiving 101. Jump on over to view some of my thoughts on the need for proactive email categorization.

This will be a two part series: look for a follow on article next week. Read more...

Thursday, March 20, 2008

More Python

Some more thoughts on Python...

The fact that there don't seem to be any adjectives in the language is a bit wierd: as a Perl programmer, I'd expect to be able to declare a variable as local (I go back to Perl 4) or my, but nothing equivalent in python.

Declaring static methods is wonky, but at least they are there, so I can make Singletons.

For those of you who haven't read Design Patterns, a Singleton is a way to implement classes that you only load once. For instance, when the startup costs for the object are very expensive. In my case I'm doing a dozen or so nasty, full table-scan (on hundreds of thousands or millions of rows) SQL queries. You might guess I want to do this as few times as possible. :)

Anyhow, the lambda expressions and first class functions more than make up for it. Very nice.

Tuesday, March 18, 2008

Game Programmers

My brother is an accountant in Silicon Valley, and this email from him nearly made me fountain Diet Dr. Pepper:

So I've serviced several of the players in Silicon Valley, from semi-conductors to networking to software. Along the way there have most certainly been some interesting characters, but none as interesting as today when I arrived at a well known gaming software company.

Gaming programmers take the cake, from thug looking kids to your classic unkempt, pale pony-tailed man that you envision casting "intimidating shout" in a battle playing World of Warcraft. I wanted to cry out "Leeeeeeeerrooooooooy Jeeeenkiiiiiiiiiiiiins" just walking into this place.

Learning Python

I've avoided it for at least 10 years, but I finally bit the bullet.

I am developing an application in Python.

Read on for my take on what I like about Python, and what I didn't like so much.

Great stuff:

  • Functions are first class

  • Great support for object oriented programming

  • Basic feature parity with Perl

  • Great library support (I'll cover some of these in a later post)

  • Closures (all the cool kids have them)

Not so great stuff:
  • Scoping is wierd, but maybe I just need to get used to it

  • Feels wrong to not close blocks explicitly

  • Wierd __foo__ special functions, etc. (although I don't have much room to talk since I like Perl)

  • No autovivification

Random thoughts:
  • Anyone who says it has "cleaner" object orientation than Perl probably just doesn't "get" Perl.

  • Somehow, it reminds me strongly of Javascript. They are just somehow similar.


Google Desktop as a crude forensics tool

Raise your hand if you've become de-facto tech support for your family.

I certainly have.

One of the questions I am periodically asked is: how can I get to files that have been deleted/check web browsing history/check deleted emails?

And I have the answer: Google Desktop Search (GDS)!

Read on for how it works.

You see, GDS actually keeps copies of basically everything that you do.

Your emails
Your web browsing history
Your files

And it can even present these in a timeline view.

Pretty amazing, although it might create some surprises if you, say, "thought you deleted that email".