Programmers are arrogant

Posted by Tom on October 10th, 2011

I was visiting a marketing software company with a renowned professor when he said something that both startled and intrigued me: “Programmers,” he said, “are arrogant.”

He’s right. We are.

My mind flashed back to earlier this morning when I was reading comments on Hacker News about a supposed fork to a popular programming language. The language author identified several flaws in a popular language, then set about to fix them. It’s arrogant to assume that his new product is better (there was some disagreement on this at HN), or that there would be enough adoption to make the project even partially as viable as its ancestor. Only time will tell whether he was right or not.

It’s arrogant to roll our own code rather than adopt existing libraries, but it happens all of the time.

It’s arrogant to think our code is as useful to others as it is to ourselves.

It’s arrogant to stress over the details of products we release, to insist on refining the corners and polish the surfaces only other coders see.

But without arrogance, nothing new would be built.

Arrogance challenges the status quo. It feeds the courage to try for a better way (even when we fail at it). The arrogance of builders, designers, and innovators gives us new things.

It’s our greatest weakness, and our greatest blessing.

Dear Netflix

Posted by Tom on September 21st, 2011

Dear Netflix,

It’s not me it’s you.

I cancelled my account just before the 60% price increase kicked in. I took the exit survey because I wanted to let you know why. You didn’t give me that chance.

The closest item to my answer was “I want to cut costs.” While that’s somewhat true, it’s not the whole story.

You offended me with a 60% price hike. I immediately decided to cancel as soon as my current pricing ended.

Splitting the product prices cemented my decision. I purchase products because they provide value to me. If the value doesn’t match the price, I don’t buy. I’m not cutting costs, I no longer see the value of your separated services. It’s not me, it’s you.

First, you’re paying too much for your content; when you pass those costs on to me, I’m not interested. Yes, studios have a great deal of bargaining power in this assymetrical relationship, but not buying at their inflated prices is an option you should consider. It’s not worth what they’re charging. My pricing sensibilities are a product of the 99-cent-ificiation of media. Digital distribution should be cheap. Digital content at your scale should be too.

Second, Neflix offered the unique proposition of both discs by mail and streaming, together in one package. I don’t get that from RedBox. I’ve carried an Amazon Prime membership for years simultaneous to my Netflix subscription, and while Prime videos are a newer offering—and a perk of a service I was already paying for—they don’t offer the same value as your combined package at a low price. But now that I have to evaluate your products separately, I see that I’ll spend less each month getting movies from RedBox, and still get most of the “free” streaming content (excepting Starz, which you’re apparanly having problems with) through Amazon. For new releases, there’s a RedBox a block away a the grocery store. For me, the switiching cost is negligible. Your rivals are increasing, but you just commoditized your product. You’re no longer different.

With a combined plan you had a differentiated offering. Consistent customer service (even if it was sans-human), an iPhone app and quick turn-around times were a great selling point, but they’re not enough on their own. (I’m apparently lucky enough to live close to a Netflix distrubtion center, so I’d get a new disc a mere day-and-a-half after putting my old one in the mail.) I already have access to the same content at a lower price. I was paying you anyway, because the way you did it offered me value. No longer.

I made this decision before you announced you’re splitting into two companies, and I’m glad I did. It validates this break-up.

Please don’t write. I won’t be sitting by the phone waiting for you to call. Getting a lame “apology” via email a week later just confirms you don’t get it. I’m moving on.

Sincerely,

 
 
Tom Q. Customer

P.S.: Did you see the comics by Joy of Tech and Oatmeal? (h/t Gruber) I think they’ve got you down.

P.P.S: Maybe you’ll lose enough subscribers to come to your senses. Maybe not. The only sensible reason I can see for the company split is to sell either the spin-off or the whole company. Is a studio buying you? It would be a great match for them as you’ve got the distribution network and (flagging) subscriber pool in place. The DVD-by-mail business might be a great acquisition for GameFly—but they already charge much more than you do.

P.P.P.S: You have your own hashtag: #DearNetflix

First solo publish

Posted by Tom on April 20th, 2011

I’m nearly a month late in posting this, but my first solo-authored article has been published.

Gregory, T. A. (2011). Transactional Cost Economics and Directions for Relational Governance Research. Paper presented at the 14th Southern Association for Information Systems Conference, Atlanta, Georgia, USA.
http://sais.aisnet.org/2011/Gregory.pdf

SAIS isn’t the most prestigious conference, but it’s a start.

(This is not my first published article—I’m part of a team that published at HICSS in 2010.)

Utah Board of Education: For Non-Partisan Elections

Posted by Tom on January 20th, 2011

I must be on a few Utah email lists still. Kim Burningham emailed me this afternoon regarding a potential bill (as yet, unnumbered) in the Utah Legislature regarding the selection of Board of Education members in Utah.

Kim’s email offered an opportunity to explore the rationale behind my position, to wit, open general elections are preferable both to the current system and partisan seats. Although I’m no longer a Utah resident, perhaps my experience on the Utah State Board of Education lends some weight to my argument. In short, I agree with Kim’s statement:

The education of Utah’s children is best served by a non-partisan direct election of school boards by the people.Email from Kim Burningham, received 20 Jan 2011

There are two issues at play here—first, the primary bill which would reportedly change elections of state school board members to be consistent with the election of local school board members, that is, via an open general election, and second, a purported movement by some legislators to amend the not-yet-a-bill to make both state and local board partisan offices. I support the first, and oppose the second.

I believe there are many negative consequences of partisan boards, not the least of which are greater polarization and the reduced weight of public voice. The only benefit of party affiliation is a perhaps slightly higher profile race, and I’m not convinced it out-weighs the costs.

Divisive artificial boundaries

Members of a partisan board join with pre-attached labels. For better or worse, we all use labels; they are part of our mental heuristics to make tasks easier and safer. If you harken back to high school, you remember the jocks, yuppies, nerds, thespians, partiers, drunks, punks, stoners, goths and bangers. (I didn’t grow up in Utah, so we didn’t have cowboys.) Perhaps your school had different names, but they were all there. Social groups were (and are) largely defined by labels, with unfortunately little cross-pollination. Each of us associates with such cliques by default. Exclusivity feeds our self-image. We identify with ethnic groups, interest groups (in the hobby/pastime sense, not just the political sense), religious groups, or even our departments at work, and evaluate our own worth by the success of the group and its members, even if that success is detrimental to a larger society.

Unfortunately, the downside of group membership is the tendency to distrust out-group members. It’s telling that so many in politics consider working “across the aisle” as a mark of distinction rather than a minimal standard of expected behavior. (And equally telling that others view unwillingness to compromise with similar distinction.) This behavior is not confined to politicians. Visiting the comment pages of political news sites brings up a host of comments overlooking individual differences, side-stepping civility and decrying “Rethuglicans” or “Democraps.” Intended or not, simply the presence of party labels will seed disunity and dysfunction in a state or local board, making it a less effective servant of the public.

Polarization and extremes

It is the nature of groups to be polarizing in their mindset. (“You’re either for us or against us.”) Consider presidential politics. Karl Rove demonstrated how effective polarization and vilification are as political tools. Candidates from both sides pander to the extreme wings of their respective parties in the primary and swerve toward the middle in the general election to capture moderate swing voters. Ultra-conservative tea-party candidates largely won in the most recent House elections in strongly Republican districts, as moderate candidates were ousted during primaries. On the Democratic side, recall how Senator Joe Lieberman (I-CT) was beaten by the liberal wing of his party, but went on to win re-election after filing as an independent and capturing moderate voices. The introduction of partisanship on the State Board of Education would lead to an increased number of extreme voices on the board. Perhaps you are one who believes those extremes would pull the board more in line with your thinking; I am not. Such polarization would distract the board from its duty to deliver quality education for the children of Utah by focusing too much time on tangential matters related to party ideology.

Additional stakeholders

Introducing partisanship adds additional stakeholders to the election process at the expense of the citizen voter. Neighborhood delegates and (dare I say it?) automatic delegates (who, because board district boundaries do not align with legislative boundaries were not necessarily elected solely by citizens in the area they vote in) have a strengthened voice and must be courted and appeased. Legislators, the most senior of which have a great deal of influence in party politics, will have greater input into the selection of board members.

It will not occur in every district. It will not occur all of the time. But it will occur. The best guard against the possibility of influence peddling, deal-making, or vindictive politics is by distributing as much influence as possible directly to voters through open general non-partisan elections.

Further, PACs and special interests will have greater influence on candidates in a partisan system, as they often contribute directly to parties, and candidates receive some of these funds through the party. Increased dollars in education races may be laudable in that it raises the profile of education races, but not if the primary sources are out of district interests seeking to influence single issues. Non-partisan elections makes a PAC’s direct-to-candidate donations more transparent, and single-issue candidates typically find work with the board of education has a much broader scope than they ever anticipated.

Fewer stakeholders

Compounding the effects of centralizing the public voice to a few delegates, in a partisan system candidates are socially and politically faced with less obligation to members of the opposing party. In fact, lesser treatment of-out group members typically increases credibility with the in-group. To be most effective, school board members should be expected to represent the interest or all citizens; this is easiest when there are no incentives (or diminished repercussions) to partiality.

Useless labels

Whether or not you’re in favor of a two-party system, you must agree the labels “Democrat” and “Republican” allow for general assumptions on a slew of issues ranging from abortion and gun control to health care and global warming. You might associate Republicans with the “choice” movement, but “choice” means different things to different people (as opposing groups have sought to redefine it for their benefit), and the citizens heavily Republican Utah voted against the implementation of a voucher law passed by their elected representatives. Other than the plank in the Utah Republican party platform (2009) asserting the right of parents to choose “to choose public, private, or home education” (has this ever been in doubt?) and encouraging “initiatives to help all Utahans become literate in English,” there is little to guide a discerning voter. (To be fair, the county platforms, e.x., R-Utah County, can be more rigid.) The Utah Democratic Party Platform (2009) is similarly warm and fuzzy, calling for “rational education reform based on quality research,” a position both broad and reasonable enough to be unarguable but with a multitude of meanings depending on the listener. (There is, however, a dig at Republicans for Utah being perpetually lowest in per-pupil funding). Further, as the platforms are general guides and elected members are not bound to adhere to their all of their tenets (for example, you’ll likely admit our most recent Republican president did not march behind the banner of limited government), even the most local platforms might not be applicable to a candidate’s education views. Thus, what I see as a primary purpose of the party system—to collect like-minded individuals on a broad range of issues—becomes a less-effective label in the limited context of education.

Consider, for example, Utah’s education special interest groups. In other arenas, such groups often bind tightly to a particular party. While that may be true of PCE, such groups as the PTA, Utahns for Public Schools, and the Utah School Boards Association are decidedly non-partisan. Even the UEA is composed of members of both parties (although some Republicans might argue it’s dominated by Democrats). In short, party labels for board members are ineffective in providing voters with the same level of insight as compared with more general offices.

Perspectives from other states

Lastly, as a member of the Utah State Board of Education, it was my privilege to participate in national study groups and advocacy as part of the National Associate of State Boards of Education (NASBE). Members from most states are a part. As governance and authority differs from state to state, a common topic of water-cooler conversation is the composition of boards. To a person, every individual I met from a partisan board (appointed and elected) said it increased divisiveness and back-room scheming, and they pined for non-partisan offices.

Candidate/commitee stacking

Clearly there is agreement that the current Utah system is inadequate and prone to manipulation. Each of the last several elections has seen one side or the accuse the opposition of manipulation by stuffing the candidate list and/or the nominating committee. Those fights (and the system that engenders them) are unproductive—and I say this as a past beneficiary of the committee selection system.

Conclusion

Utahns deserve boards of education unencumbered by the machinations of political parties. A recent political poll by Dan Jones (although admittedly sponsored by someone against partisan board offices) demonstrated unequivocally that Utahns oppose making either state or local boards of education partisan. (DesNews) Partisan bills have failed in the past (2007, SB194S02) despite a multitude of sponsors in the senate, but legislation for direct election has been unsuccessful too (2009, HB150S01, although this bill also had an unaccepted public substitute requiring partisan elections). Clearly the issue is on the minds of legislators. I hope they make the best choice for Utah.

Multiple email identities with Mail.app

Posted by Tom on January 18th, 2011

I’ve been wanting to send email from different addresses through the same email account (specifically, Gmail). It’s trivial to do if using multiple accounts or servers, but Gmail allows users to send mail through a single account using different from addresses, and as I perpetually have a plethora of addresses, I wanted to too. This has been irking me for a while (and tinkering with it led to experiencing a data loss bug in Mail.app), but I could never find the right Google query to pull it off.

This evening, I had an epiphany—the key words I needed was “identities.” Tossed it into a Goole query, and BAM! First result, more than four years old, still works. Complete with pretty pictures, Jonathan Tron has a simple walkthrough showing how it’s done (and that Mail.app hasn’t changed much in years):

In your account configuration, enter a comma-separated list of adresses in the “Email Address” field.
“Multiple identities in one account with Apple Mail.app”, referenced 18 Jan 2011.

Easy as pie. It’s a shame it caused so much heartache.

It was somewhat embarrassing to notice the brief tooltip which pops up over the “Email Address” field says to use a comma-separated list as well. Too bad my cursor was never still enough to trigger the tool-tip.

On Security Theatre

Posted by Tom on October 31st, 2010

Because it deserves repeating, and because it is so remarkable consistent with my experiences with TSA’s invasiveness, insensibility, and grandstanding, the column by The Atlantic‘s Jeffrey Goldberg was both sad and amusing (h/t Gruber @ DF).

The comments by Marco Arment’s (of Instapaper fame) captured the public’s likely response:

So, to summarize: With no supporting evidence whatsoever that it will make anyone any safer, and in response to absolutely no credible threats, the TSA has decided to implement a policy, that nobody asked for, in which every passenger must allow TSA agents to either see or touch their genitals before boarding a plane.

And, of course, we’re all going to subject ourselves to it, because we have no recourse and no power, even though the creation and execution of this policy are likely violating a few laws or at least common-sense rights, ….

http://www.marco.org/1448442367; 31 Oct 2010

Until federal lawmakers and policy chiefs are subjected to the same conditions for air travel “enjoyed” by the rest of the country (many, if not most private planes don’t have TSA security—which in itself is amusing, as it was the planes that were the weapon on September 11th, not the passengers), the insecure, Orwellian oversight air travelers are subjected to will, I fear, only increase.

VIM, TextMate and SublimeText

Posted by Tom on September 23rd, 2010

In the past few days I’ve come across posts of several programmers switching back to VIM (in most cases, specifically to MacVim). As some have pointed out, this seems predominantly in the Ruby community, which tends to be fad-driven.

I’ve thought about giving VIM a shot. But I won’t end up doing it. The trouble is, my work has changed and I don’t get to program often. (It’s a shame, really.) The potential bump in productivity for switching just isn’t there, and I’d be left with just the headaches.

I really like TextMate, although I don’t use many of its features. (e.g., here) I’m just not programming often enough anymore to pick them up (or remember the ones I used to know), and because I don’t use one language consistently it’s typically not worth the bother of learning the snippets either (Although Zen HTML available for many editors, looks cool). I don’t need many changes (although some speedup would be nice), and development has stalled, with TextMate 2 almost taking on the status of vaporware. The developer is apparently hard at work, but the TM2 release date has become something of a programmers’ inside joke. (here and here)

SublimeText

My biggest complaint with TextMate is that I’d like to use a similar editing environment on the rare occasions I’m forced to use other operating systems (read: Windows). Enter SublimeText. It’s smart, it’s clean, it’s fast, and it’s compatible with TextMate themes and bundles. And, importantly, it’s stable and actively edited. My only complaint is its relatively steep price compared to other editors—but I think it’s worth it. The developer’s next project is making SublimeText cross-platform (must be a registered member to preview). I enjoy using SublimeText on the rare occasions I’m not tethered to Visual Studio. (If nothing else, it makes an exceptional Notepad replacement, as I’m constantly keeping lists and notes in plain text files.)

WindowShade X and Parallels

Posted by Tom on September 23rd, 2010

WindowShade X

I complained just over a year ago that Unsanity’s WindowShade X, a utility that provides better minimization options than just shoving more stuff in my dock did not yet have a working release for Snow Leopard. As it turns out, Unsanity released it seven month later (this past April, 2010)—hey guys, an email would have been nice.

Unfortunately, this is a paid upgrade, but as a previously registered user I was able to get 33% off ($5).

After months and months absolutely no word from Unsanity on the new version, I had given up, and wasn’t willing to give them money again. Several commenters on their infrequently updated blog wondered just how many customers Unsanity was losing by their silence. But WindowShade X is just too useful to me, so now I’m back—but still not impressed with their customer communication.

Parallels

In the same post last year, I complained about Parallels. This past summer, I was able to get Parallels at a pretty good educational price, and thought I’d give it a try again. It’s still slower than my 9-year-old when’s he’s asked to do the dishes, and I don’t like how they’ve forced a re-skin of XP. If I go full-screen and stay away from my OS X apps, it’s not too horrible, but doing any switching back and forth is just asking for trouble. I just need to move everything my VirtualBox instance and not look back. My only frustration with doing that is that I won’t be able to access the VM files without loading VirtualBox; in Parallels, I have everything on a separate mounted partition, so I can move files back and forth without needing the VM running.

Teaching C#

Posted by Tom on May 28th, 2010

I’m teaching beginning programming using C# to university business students (CIS) in the upcoming Fall semester.

It’ll be doubly fun, as I’ve never used C# until about a month ago. Sure, I’ve used plenty of other languages, but for some reason, never anything from .NET. (Partly it’s because I’ve used a Mac as my primary machine for nearly six years.) But hey, it’s a great way to follow the advice from Pragmatic Programmer to learn a new language every year. (Next year, I want to pick up Seven Languages in Seven Weeks, and work through that.)

I’ve looked at some of the curriculum previous instructors are using, and while I plan to borrow large chunks of it, there are parts of it that I think emphasize the minuscule details of doing that anyone can pick up instead of the broader theme of how to think like a programmer.

So, for the past couple of months, every time I bump into a programmer I ask, “What’s the most important thing to teach new programmers?” The answers are both varied and consistent. Here’s a partial list of topics I’m considering:

  • Data structures (linked lists, queues, trees (and, in passing, tries), and dictionaries/hashtables)
  • The difference between the stack and the heap (somewhat less important in a garbage-collected environment like .NET, but important to understand, I think)
  • Sorting, especially quicksort, but including bubble sort and a merge-split sort.
  • Big-O (which goes nicely with a discussion on sorting)
  • Some design patterns; at the very least, observer and MVC
  • I’d like to touch on formal grammars, and maybe Regex
  • Resource analysis (memory/disk/processor usage)
  • Some thoughts on user-interface design (e.g., Fitt’s law, using color)

I’d like to emphasize some concepts by showing them in other languages, just to show how the structure remains the same. I hope I can do this without being too confusing. (Of course, what I’d really like to do is cram an entire undergraduate CS degree into a one-semester course, but that isn’t going to happen.)

Please email me or leave suggestions about what I should (or should not) add.

Post Script: While you’re sending me your ideas, I’m open to suggestions on what book I should use. I’ve spent hours already combing through C# books, and while there are some excellent reference books out there, I’ve not been impressed with most of the teaching books. l’m currently leaning toward Head First C# (2nd ed.) because I’m impressed with the Head First series, although I’m just now going through this book in depth.

Images inside a CSS file

Posted by Tom on May 28th, 2010

I was experimenting with my own version of the CSS3 Awesome button, when I noticed one of the commenters share the base64 encoded version of the semi-transparent PNG image they were using as a substitute for a gradient.

I was using a smaller image, and want to run a conversion of my own (it saves an extra HTTP connection, making it easier on both the client’s browser and the server). A quick trip to Google turned up an online conversion tool that worked great.

Wikipedia also provides sample code for doing conversions with PHP: (Please notice there is no error handling!)
<?php
header('Content-type: text/css');
function data_uri($file, $mime) {
$contents = file_get_contents($file);
$base64 = base64_encode($contents);
return ('data:' . $mime . ';base64,' . $base64);
}
?>
body {
background-image:url('<?php echo data_uri('elephant.png', 'image/png'); ?>');
}