rlucas.net: The Next Generation Rotating Header Image

Newest source of entrepreneurial financing: the dole

From the VC grapevine comes word of a new innovation in startup funding in Portland (and elsewhere), Oregon: the unemployment department

From http://www.oregon.gov/EMPLOY/UI/ui_special_programs.shtml#Self_Employment_Assistance__SEA_

The Oregon Self Employment Assistance (SEA) Program helps eligible unemployed workers set up a business on a full time basis and still receive full unemployment benefits.  …
To qualify for the SEA program, you must:

  • have a viable business idea,
  • be willing to work full time in developing the business, and
  • have or be able to obtain the financial backing needed to start and sustain the business until it becomes self-supporting.

Kind of cool.  Normally, I’d understand that there’s a hazard here (given that I am an investor in several Oregon companies that all pay unemployment insurance premiums, which could be raised if this gets exploited).  But unfortunately, I paid enough premiums immorally required on myself (which payments I could never collect, because I was the entrepreneur and would have been ineligible had I quit) during my Oregon years that I feel a bit justified here.

One-click Unsubscribe: For ALL Your Emails

I sign up for (let’s call it) 5-10 new web sites a week. It’s an occupational hazard.

(In fact, there’s an even weirder effect where sometimes there are web sites I know only from Webex demos or slide decks, and not from visiting the site itself. But I digress.)

As a startup, you SHOULD be sending retention and call-to-action emails. It’s a no-brainer. I don’t fault you for it. In fact, if I were an investor or advisor, I’d insist that you do it. (So many Web services naturally get more valuable over time, with the addition of users, data, events, etc., that you are often literally doing your users a favor the first time you harass them to come back.)

And, inevitably, the day comes when I tire of your appeals, and I want to pull the plug (or at least turn up the squelch knob).

BUT: when your “unsubscribe” link prompts me to sign in to your Web site — with a username I don’t remember (not even pre-filled in for me), with a password I even more certainly have forgotten, into your unfamiliar interface — in order to stop those email from coming in, then you are doing wrong.

Your “unsubscribe” link should have enough of a unique auth token in it that I can manage my email preferences. At the very most, it should be a two-or-three-additional-click process to verify with a round-trip email and link combination.

Instead, after two or three times trying to play nice and click your crappy “unsubscribe” link, I will just start clicking “report spam.” Enough of that, and your email throughput will suffer, and with it, all of your retention/CTA messaging.

So please: make it easy to unsubscribe (or at least to manage email prefs). Short-term minimization of your unsubscribe rate is not clever, and will ultimately kill your other metrics (not to mention incur user wrath).

CFA Institute sends a bad DMCA takedown notice

Apologies to visitors who were expecting to read “Quick thoughts on CFA Level II.”  Today my Web host, Dreamhost, received a DMCA takedown notice from Aimee Rhodes, Director of Exam Security at CFA Institute.  Accordingly, I’ve temporarily un-published that post.

This is disappointing for several reasons:

  • My post contained a few bullet points about my exam experience, containing only my opinions or factual observations.  There were no verbatim questions quoted, nor was there enough information about any question to recreate it.
  • I’d sparked several comments (11 when taken down), showing that numerous folks found value in reading and discussing what I’d said.
  • Perhaps most disheartening is that Rhodes didn’t bother to call or email me (my office and cell phone, and email and snail mail address, are all plainly available at http://rlucas.net/ ), but did bother to look up the IP address, trace it to Dreamhost, look up their DMCA contact, and compose a form letter to them.

I’m hoping that this is a mistake and that we can get the post and its comments back up.  (For the record, if I have overlooked any ethics violation on my part or that of my commenters, I will remedy it immediately.  However, discussing the curriculum or critiquing the exam process are clearly ethically OK.)

DMCA takedown notices are for people who upload DVD rips of “Transformers” or copies of proprietary software — or, agreed, Minox spy photos of exam bluebooks.  But discussions among students, in their own words, about their own learning experiences, for the purpose of mutual enlightenment, support, and criticism, are NOT fair game for heavy-handed legalisms.

Dear Ladies and Gentlemen:

I am writing as a representative of CFA Institute (the “Owner). As required under Section 512(c)(3) and 512(d)(3) of the Digital Millennium Copyright Act (17 U.S.C. sections 512(c)(3) and 512 (d)(3)), I am hereby
instructed to place you on notice that:

1. The Owner is the exclusive owner of the copyrights in and to the CFA exam, and the text, test items, logos, and photographs appearing therein (singly and collectively, the “CFA Material”); and

2. The following URL’s (the “Infringing Material”) contain unauthorized copies of the CFA Material or unauthorized derivative works of the CFA Material which infringe the CFA Material and the exclusive rights of the Owner:

I request that you immediately remove or disable all access to the Infringing Material.

I have a good faith belief that the use of the Infringing Material is not authorized by the Owner, its agents or the law. I swear, under penalty of perjury, that the information in this notification is accurate and that I
am authorized to act on behalf of the Owner.

Should you require any further information regarding this matter, please contact me at the address below.

Sincerely,

Aimée Hobby Rhodes, JD
Director, Exam Security
CFA Institute

Technologies I want an excuse to use…

  • Cassandra, the Facebook-derived, neither-row-nor-column-oriented-quite, massively distributed data store.
  • New hybrid languages that run atop Java VMs: Scala and Groovy.
  • Hadoop.  Just ‘cuz.
  • The R statistical computing system.

This video is no longer available due to a copyright claim by WMG.

Was looking today at a Facebook email (yuck) exchange regarding heavy metal and hard rock with an overseas pen pal. One of the links traded was to Ronnie James Dio’s “Holy Diver” video, a rockin’-ass metal song with laughably horrific production values in the vid.

That video in question I had found as a “related video” while surfing some other metal (probably Sabbath) on YouTube.

You heard me right: I probably never would have found out about Holy Diver if not for a bunch of dubiously-legit uploads to YouTube, which uploads, through the collective intelligence of commenting, tagging, and merely self-serving passively surfing users, became woven into a preferences graph that drove me into Dio’s grip. (Forgive me.)

WOE IS THE F-ING RECORD COMPANIES, THEY HAVE LOST SO MUCH REVENUE BOO HOO HOO BECAUSE I WATCHED A 20-YEAR-OUTDATED ROCK VID ON YOUTUBE, flail and rend garments etc.

Oh, wait — no, that’s not correct:

Yep, I bought the song. That is: the system works. Exactly like folks like Steve Jobs and the YouTube boys and your humble correspondent have been saying. There’s a place for freedom, and a place for commerce, and they can coexist. My anonymous and unknown friend in cyberspace puts up a crappy VHS-dub of Dio to share with me, I discover and rock out to it, and I buy the song.

But Warner Music Group (WMG) is operating on a plainly brain-dead policy. For instead of promoting that virtuous cycle above, they have chosen as a matter of policy to piss all over my unknown cyber-friend, me, RJD’s bank account, and indeed all precedents of good internet behavior. They have used the threat of violence-through-the-courts to have the link broken, and replaced with “This video is no longer available due to a copyright claim by WMG.” In WMG’s preferred universe, I never discover Holy Diver, RJD never gets his 10c or whatever from iTunes, and you never have to read this rant.

So, let me review the options WMG has:

1. Benign neglect toward music-sharing (especially of old and/or non-premium formats). Begets wider distribution of the catalog. Enables an increase in fan discovery and delight. Drives marginal purchases based upon that discovery and delight, and encourages the budding polyglot.

2. Relentless malignancy toward music-sharing. Squelches wider distribution of the catalog. Precludes an increase in discovery and reduces delight. Increases dependence on old, broken business model of top-40 radio and brick-and-mortar distributors, and cultivates mono-consumers who cleave to niche preferences.

In fair-mindedness, I must back down from the “brain-dead” accusation (see also my self-moderation imperative from earlier posts). There is, to be fair, one very good remaining reason why WMG might rationally choose #2 above. That is the legal doctrine that rightsholders like WMG must assert their rights or face losing them due to estoppel (I may have the legalese wrong). In other words, WMG may well have right-thinking, option #1 favoring executives, but if the general counsel raises the spectre of losing all copyrights, then that fear could drive an otherwise bad decision.

What we need is a law or court decision that provides some limited protection to copyright holders: a failure to enforce rights in one specific medium, format, or type of venue shall not be deemed a waiver of rights in any other medium, format, or type of venue. Then, WMG could let YouTube run amuck, with some sort of implicit understanding that HD videos or 128k audio would provoke legal action, but that sub-par stuff would not.

Otherwise, we end up in world where online video is Hulu, not YouTube. Don’t get me wrong — Hulu is fine for what it is: a way to rot your brain with mainstream media candy. It’s fun for catching “30 Rock” or “The Daily Show.” But YouTube is different and more important, culturally and economically, than Hulu, because it enables and empowers a different class of people to participate in the (potentially-)mass media.

Massachusetts Doesn’t Add Up

One nice thing about having a (practically infinitely) divisble currency unit is that you can use arithmetic to sum your accounts and settle them on a “net” basis.

Sometimes, such as in CDS clearing situations, this gets a bit hinky: lots of counterparties, etc. Sometimes, with lots of debits and credits on both sides, you really need to double-check to make sure you’ve got it all added up right.

But if I owe you A and B, I really ought to be able to pay you a sum C = A + B.

Not in Massachusetts.

Somehow this would seem less objectionable if it weren’t for the fact that I was trying to dissolve an inactive corporation so as not to have to keep shelling out tribute. You can (send one) check out any time you like, but you can never leave…

Create blank objects in Perl’s Class::DBI

Perl’s Class::DBI is something I’ve had a bit of a love-hate relationship with. It’s definitely been useful. And, like with Ruby’s ActiveRecord, it can sometimes rocket-propel you 10x with a development task.

However, it’s got a lot of weird gotchas built in. One of them seems to be the inability to instantiate an object with no data. Now, I know, you might well be saying, “why on earth would you instantiate an object with no data?”

Well, for one, perhaps you’ve got a legacy DB (or a non-legacy DB, for that matter) that intelligently fills in columns based upon a trigger, default, or other mechanism. (I’d venture to say that most all modern schemas use some variation of this, be it with AUTO_INCREMENT or sequence.) Another case is where you’ve got link tables that, on their own, don’t get any data added in until and unless their relationships get filled out.

In any case, it would be mighty nice to be able to insert an object that is empty, and have it just filled out with the defaults/triggers/whatever. But when you use Class::DBI, you get this nonsense:

DB<1> use My::Class;
DB<2> $mc = My::Class->create; insert needs a hashref at  (eval 813)[/System/Library/Perl/5.8.8/perl5db.pl:628] line 2
DB<3> $mc = My::Class->create({}); DBD::Pg::st execute failed: ERROR:  syntax error at or near ")" LINE 1: INSERT INTO my_table ()
                               ^ at
                                /Library/Perl/5.8.8/DBIx/ContextualFetch.pm
                               line 52.

This is a Major Bummer, since Class::DBI Just Works for most other things.

Digging through the guts of Class::DBI, it seems like you could use something like the _prepopulate_id private method, but it only works if you’ve set __PACKAGE__->sequence(...). As it happens, I am using sequences under PostgreSQL, but I did not set up the sequence entry for each class (and don’t want to do so, as I’ve been using CDBI for 5+ years without ever bothering with the sequence method).

So, for all you PostgreSQL users with normal, plain-vanilla, single-PK tables that increment off a sequence, here’s some code to add to your base class (it’s always good to have your Class::DBI inheritors inherit CDBI through a base class that you define locally so you can add behavior to all your classes) that will permit a create_blank() constructor:

# this sub allows us to create a blank entry (with only it's
# sequence-increasing ID): XXX NOTE: only works on Postgres
# (pg-specific method of getting ID).
our %CLASS_ID_SEQUENCE_NEXTVAL = ();
sub create_blank {
    my $class = shift;
    #check cache
    my $nextval_sql = $CLASS_ID_SEQUENCE_NEXTVAL{$class};
    my $pk_col = $class->primary_column;
    #cache miss:
    unless (defined $nextval_sql) {
        my $table = $class->table;
        $table && $pk_col
          or die
        "create_blank only for single PK tables ($table $pk_col)";
        ($nextval_sql) =
        $class->db_Main()->selectrow_array(
                 'select column_default from information_schema.columns ' .
                 'where table_name=? and column_name=?',
                  {}, ($table, $pk_col)
             );
         $CLASS_ID_SEQUENCE_NEXTVAL{$class} = $nextval_sql;
     }
     die "didn't get a viable nextval() for class $class"
          unless $nextval_sql;
     my ($id) = $class->db_Main()->selectrow_array(
         'select ' . $nextval_sql
     ) or die "couldn't select $nextval_sql";
     return $class->create( { $pk_col => $id } ); }

I release the “create_blank” method above to the public domain, feel free to use and abuse.

The Downturn, REAL vs. FAKE VCs, and REAL WEALTH

In early October 2008 I was asked by a local entrepreneurial booster group for a quote giving VCs’ take on the state of the financial world. Here’s what I wrote (but was too busy/lazy to blog) at the time:

  • REAL VCs have committed funds from stable, liquid, institutions who are not going away (state governments, universities, pension plans, countries).
  • REAL VCs have partnership agreements that last 8-10 years and aren’t tied to the current level of the NASDAQ or the price of anyone’s house.
  • FAKE VCs are everyone else who claims to be a VC but isn’t like the above.
  • FAKE VCs may be nice people but since they aren’t REAL VCs, you don’t know what you’re dealing with in working with them. So be cautious and “know your investor” if you are going to rely on them for your short- to mid-term capital needs.
  • Don’t sweat it; unlike the financial economy, early stage firms are inventing and creating and building things to sell in the real economy. Yes, you’d rather sell your company into a bubble. But great companies are often built in downturns and sold in upturns. Keep building and selling.
  • All the REAL WEALTH that humanity has ever created has been the result of new invention and teamwork. All of this CDO/MBS/hedge fund nonsense is just pushing around money. You, the entrepreneurs and inventors, are the real engines of true wealth creation and we VCs are honored to play a role in helping you do so.

All of this seems at least as true and relevant today as in the first days of October. So let’s all take a deep breath and keep this in mind: human ingenuity (Founders, CTOs, Visionaries) conceives new wealth; human effort and discipline (Engineers, Salesmen, Managers) bears it into the world; and the acceptance of it by markets (Customers, Sponsors) makes it viable and sustainable. VCs play our own humble role by advising the foregoing and making calculated risks of our (and our investors’) wealth and time. This is a GOOD THING, and furthermore, this is a cycle that despite its rough edges CREATES NEW WEALTH. That is not the case with all of the now-trashed asset classes (which were largely about flipping the same old bad ideas to one another) and the whining rent-seekers who (mis-)managed them.

If you’re reading this, you’re almost certainly a geek or a startup-world person. And that means you, like me, have a unique opportunity and burden to do the right thing in this crappy economic time.

So, please. (This goes for me too.) Turn off CNBC. Close the browser window for Yahoo! Finance. If at all you can, block out this volatility and pandemonium among the wealth-re-arrangers. And, please, focus and redouble your efforts on creating wealth and value that ultimately will be what allows our humble race of tool-wielding mammals to conquer ignorance, disease, malnutrition, isolation, Malthus, and generally the heat-death of the Universe.

Fixing Net::Google error with 404 File does not exist

I was trying to install Net::Google 1.0 using CPANPLUS on my Mac OS X 10.5 machine, and kept getting a pesky error:

Service description 'file:' can't be loaded: 404 File `' does not exist  

One thing I had to do to fix it was install an apparent prerequisite, SOAP::WSDL. It wasn’t included by CPANPLUS.

Another thing I had to do to make the tests run was to include the lib/ (not just the blib/) directory in @INC when running the tests:

perl -Iblib/lib -Ilib t/001-search.t  

Even though that made the tests succeed, the installed module still wouldn’t work and gave the same darn error.

It turns out that some deeply, deeply nested code in Net::Google searches through @INC to find:

$DIR/Net/Google/Services/GoogleSearch.wsdl  

This file doesn’t get installed by “make install”, unfortunately.

So, I had to do the following:

rlucas:/Library/Perl/5.8.8/Net/Google$ sudo mkdir Services Password: rlucas:/Library/Perl/5.8.8/Net/Google$ cd Services/ rlucas:/Library/Perl/5.8.8/Net/Google/Services$ sudo cp \ ~/.cpanplus/5.8.8/build/Net-Google-1.0/lib/Net/Google/Services/GoogleSearch.wsdl \ .  

Now my Net::Google using scripts seem to work right.

Thoughts on the Eve of CFA I Results

On 01 December 2007, I took the CFA Level I exam. The results for this exam will be made available tomorrow (23 January 2008), but before I find out how I did, I think it might be useful to you and a good exercise for me to describe my thoughts on the exam, the process, and my self-assessment of how I did.

First, a word of background. I am untrained in finance and economics in any formal sense. On the job as a venture capital analyst and associate for the past two years, I have learned modeling and DCF, and have also picked up a strong interest in reading macroeconomic blogs and news (e.g. The Economist, Calculated Risk). However, VC is not a “finance-heavy” branch of finance, as most of the risk we look to assess is more human and “soft” in nature, such as management and market risk. I never took economics, finance, or economics in school, although I did run bookkeeping for a couple of startup companies I ran (accrual accounting, double-entry bookkeeping). So the content of CFA I was largely new to me, though the generalities of finance were not.

In general, I am very smart and a good test-taker. For example, I aced the SATs (on my second try), several College Board and AP exams, and most of my International Baccalaureate exams. But I studied like a mofo for those, and those (roughly 11 years ago) were the last time I took any standardized tests. In college, my record was significantly less stellar (for too many reasons to list here).

However, CFA I claims you need 250 hours of prep. It boasts a 40% pass rate. Nearly all of the takers (so far as I can tell) come from the finance industry and/or economics or finance academic backgrounds. So I figured (then and now) that it’s anyone’s game: me, the solid test-taker, against CFA I, the exam whose pride depends upon trouncing 60% of comers despite their being specialists.

So, I set out in June / July 2007 to begin studying for CFA I. I bought both the “official” curriculum (several hundred $$), about 12″ thick of books, and the “Schweser” third-party, “Cliff’s Notes”-style curriculum, which was perhaps 7″ or 8″ thick. I started out powering through the CFA books, but quickly, upon advice of friends and upon realizing the difference in concision, switched to using the Schweser exclusively.

I got busy with a lot of work stuff and really didn’t put much, if any, time into test prep in July-September 2007. Maybe 1 hour a week. Then, in October, I really picked things up, and started putting in 4-5 hours a week. Finally, in November, I rededicated myself to the effort, making flash cards, carrying books with me to lunch each day, and adopting a mantra of “study every day, test (practice tests) every weekend.” I probably did an average of 15 hours per week during November 2007, starting at 10 hours and moving to 20 hours for the last couple weeks (2 hours a day for 6 days + 8 hours on Saturday).

All in all, I’d estimate time spent:

Nov 2007   4.3 weeks @ 15 hrs / week   = 64.5
Oct 2007   4.3 weeks @ 5 hrs / week    = 21.5
July-Sept 2007 13 weeks @ 1 hrs / week = 13
---
Total                                  = 99 hrs

In the last two weeks, I was scoring between 68% and 78% on the Schweser practice exams. (Two runs closer to 68%, the final “outlier” being closer to 78%.) Part of this may have been a discrepancy in the difficulty between the Schweser “sample” vs. “practice” exams; I think that the “practice” exams may be a bit harder to make the “sample” ones, and the real thing, seem easier.

On exam day, I showed up with a good amount of fresh fruits, complex carbos, caffeine and nicotine, and lots of fresh pencils and two TI BA-II+ calculators. I did not get a good night’s sleep before; much of that was probably stress (both CFA I and exogenous, career- and personal-oriented stress).

On the morning half, I finished the exam once through with about an hour left to spare. I spent 35-40 minutes going over my answers and changed perhaps 10% of my answers from their prior values. (You’re stuck in the room for the final 30 minutes if you haven’t bailed before then; I napped at my desk.)

On the afternoon half, I finished with just over an hour left. I reviewed my answers and changed maybe 5% of the values, but realized that I was “bonking” — getting somewhat tired and low-blood-sugar, I was in danger of making corrections worse than the originals. So I called it with 45 minutes left, and drove home to Seattle through an incipient snowstorm to party it up with some old friends (including a CFA II candidate).

Overall, I left the exam center confident that I did at least as well on the exams as I had on my practice / sample runs. Given what folks had been posting on Analyst Forum, I think high 60s would probably be a safe pass. Considering that my low-end practice runs were already there, and that I left feeling I did at least that well, I would wager, perhaps laying 4:1, that I passed.

The one area I have some serious apprehension about would be with respect to the particulars of filling in the bubbles. Perhaps it was my 11 year hiatus, but in the afternoon session I recalled filling in some bubbles or such (not answers, just pro forma stuff) that I didn’t remember from the morning. I’m hoping that it was a false memory, a true difference in the AM / PM test forms, or something not tabulated for scoring. But given the anal nature of standardized tests, who knows. Also, there were some rocky sections in the vagaries of financial statement analysis (there are lots of traps and tricks with e.g lease capitalization and LIFO COGS) and ethics. Bad showings in those two areas could have really knocked me down a few notches, perhaps enough to fail.

So, there you have it: the story of one man’s CFA I attempt. Will my superior test-taking history compensate for only having done 40% of the recommended hours of study? Will my senile old-man’s mistake of filling in the wrong test center number or such disqualify my entire AM session? And will those whippersnappers with their recent finance degrees outfox me, leaving me in the dust? Stay tuned.

(I promised myself a new motorcycle if I passed, so if you do stay tuned, you may get to hear another “product review” in short order…)

Update: I passed.

Multiple Choice
Q#    Topic                   Max Pts <=50% 51%-70% >70%
- Alternative Assets              12  -       *       -
- Derivatives                     12  -       *       -
- Economics                       24  -       -       *
- Equity Analysis                 24  -       -       *
- Ethical & Professional Stnds.   36  -       -       *
- Financial Statement Analysis    68  -       -       *
- Fixed Income Analysis           24  -       -       *
- General Portfolio Management    12  -       -       *
- Quantitative Analysis           28  -       -       *

Thanks to the CFA Society of Seattle for a scholarship and to Voyager Capital for picking up expenses.