I enjoy having one or more personal projects to work on at any given time.
I tend to feel a bit aimless without at least one. Not every project
gets completed; sometimes I sideline ideas for a time when something else
comes along. Other times projects wither and die as the time that could have
been allotted to them gets sucked up by the demands of my day job.
Since today is the (artificial—but perhaps more on that in a subsequent
post) beginning of a new year, it is customary to reflect on the past and plan
anew for the future.
I don't recall ever having made New Year's resolutions per
say; why wait until a new year if something is worth doing? In this
I'm in complete agreement with J. Timothy King, an
entrepeneurial author and software developer:
I usually don't care about New Year's resolutions, because there's nothing special about January 1. That is, you can make resolutions any time during the year, and you should. Because if you better your life only once each year, your life is bound to be boring and unproductive. So make resolutions all year round. Not just in January, but every month, every week, every day of the year. And keep them.
On the other hand, the new year is one of those months, one of those weeks, one of those days of the year. So New Year's is as good a time as any to make a resolution... and keep it.
2007 was a very busy one both at work (staff turnover, training, many new
projects, compliance deadlines, etc.) and at home (with new twins—though
in some ways I do miss the every two-to-three hour joint feedings—shared
lack of sleep brought Shauna and I closer together in many ways).
Most of my past projects have been primarily computer-related (websites,
utilities, programs, libraries, or typesetting). Having had some "down time"
between Christmas and New Year's, I've decided it would be healthy if I expanded
my notion of worthwhile "projects" to include things that are not primarily
computer-related.
Inspired by talks at Church this Christmas season, I'm inclined to take
Luke 2:52 as a
guide:
And Jesus increased in wisdom and stature, and in favour with God and
man.
This is the last verse in the four gospels that tells us anything about
Christ's life beyond age twelve until the beginning of his public ministry.
Let's look at the four dimensions of growth:
And Jesus increased in wisdom1 and stature2, and in favour with God3 and man4.
- education, learning
- physically
- spiritually
- socially
What are potential projects I could work on in these areas?
After several days of mulling things over, here is what I've come up with:
1. Education, learning
I tend to read in spurts—I'll knock out three or four books in a row
and then nothing else for three to four weeks. I should regularize my
reading schedule so that I'm always reading something, have another book
lined up for after, and I should write and summarize what I've learned (or
enjoyed—or not—in the case of fiction) in writing.
Writing and summarizing moves this idea beyond being a "goal" of reading
more to being a potential project in my mind. There is some
precedent for my posting very brief
summaries of what I've been reading, but what I have in mind here would be
an entire blog post on a single book. I take
Will Duquette's book posts
as the model I want to aspire to.
Additionally, since I'm just about the last person to have finally acquired
an iPod, I should find interesting and informative podcasts to download
and listen to during my commute. Of course
it'd be good to write about what I learned from those too.
2. Physically
This is where this post comes dangerously close to treading into traditional
New Year's resolutions. I'm generally healthy. I don't smoke and I don't drink
(for religious reasons). As an adult I've come to enjoy
most every fruit and vegetable (though a few, like brocolli, I don't care for
raw).
But... aside from the exercise my fingers get typing, my daily life at work
is pretty much 100% sedentary. Though my weight hasn't varied beyond +/- five
pounds in the last five years, I do have some weight I could stand to lose.
For 2008, instead of participating in the Salt Lake City Marathon's
5K (like last year), I could participate in
the bike tour
instead.
Or, I could try and get ready to take part in the non-competitive
Ghost Town Century in May.
Of course to do do either of these I'd need to get a working bicycle... And
to make it a better "project" I ought to marry it with photography
(or something).
3. Spiritually
I'm ashamed to admit I haven't re-read the Bible in Portuguese for at least
ten years, preferring my native English instead. To rectify that I intend
to read the New Testament again in both Portuguese and English.
But why stop there (and besides, that'd just be a goal, not a project)?
I enjoy typesetting (c.f., Mormon's
Book), but before Guttenberg and movable type essentially rendered
the profession obsolte, scribes would spend a lifetime making copies of the
Bible (and other books) by hand. Why not try my hand at copying the Bible
(well, at least the New Testament for starters) by hand in both languages? I
wouldn't be able to create some sort of caligraphic masterpiece by a long
shot—my handwriting is only average (in an age where people type instead
of write), but at the least I suspect I would gain many insights I wouldn't
have otherwise and I'd have an heirloom of sorts to pass on to my children.
I'm going to order a pair of moleskine notebooks and get started once they come.
4. Socially
In the Myers-Briggs classification scheme I'm an INTP. I'm naturally somewhat shy and reserved, but once
I've gotten to know someone tend to be a loyal friend for life.
I enjoy playing games. While Shauna more than makes up (for our family)
of any social awkwardness that I may have (she can remember personal details
about the cashier working the graveyard shift at Walmart months later) she
doesn't particularly care to play games unless we have company over.
We had two other families from Church over last night to celebrate
New Year's, one of whom I knew quite well, the other who recently moved
from Texas I didn't. Both families had children roughly the same ages as
ours and it was enjoyable to get to know them both better.
Shauna and I have talked briefly about having people over on at least
a weekly basis (instead of just on occasional holidays). If we did do that
we'd be able to get to know quite a few families from Church—and in
our neighborhood (for those of other faiths)—in 2008. And I'd have
an excuse to cook more often from the Soup Mix
Gourmet.
And, by not bowling alone we'd be exposed
to people, board games, recipes, books, and movies that we wouldn't
have otherwise. Last night, for example, the Hixson family brought over
Ticket to Ride (which was won the 2004 Game of the Year
in Germany). I'd never even heard of this game, but it was an instant hit.
Weather permiting, I need to take my kids camping and teach them that
roughing it doesn't mean a Motel 6.
* * *
Naturally I'm open to feedback and suggestions on things to tweak, other
things to consider, mere words of encouragement, or some deserved accountability
if it looks like I must have let my job encroach too much on my life...
— Michael A. Cleverly
Tuesday, January 01,
2008
at 19:56
13188 comments
| Printer friendly version
Why didn't Talmage get Louise something like this for Christmas?
H/T: Will Duquette
— Michael A. Cleverly
Wednesday, January 02,
2008
at 22:02
70 comments
| Printer friendly version
After more than four years in the making, Tcl 8.5 was released a few days before Christmas. And wow, what a treat it
is!
This release is, in my opinion, the best ever.
I first became acquainted with Tcl 10-years ago via
Philip Greenspun's original
Database Backed Websites book. At the time
AOLserver 2.x was closed source but
available at no cost. I never had much hands on experience with the Tcl
7.6, 8.0, 8.1 and 8.2 releases; I made the jump straight to Tcl 8.3 (IIRC)
once America Online open sourced the code base for AOLserver 3.x.
Since Tcl has been around for twenty years now, there is a fair amount
of outdated information on the web regarding Tcl's features, performance
and capabilities that doesn't apply at all to modern Tcl versions.
There are a number of features that excite me in this release. I intend
to blog a bit about each of the following (I'll update this post with links to
subsequent posts as they get written):
Stay tuned.
Addendum: Dossy points out that
I overlooked the biggest news: the {*} expand operator,
which means an expansion from the 11-rule
endekalogue to a
12-rule dodekalogue.
(Tcl 8.5, now with 9% more syntax!)
— Michael A. Cleverly
Wednesday, January 02,
2008
at 22:50
390 comments
| Printer friendly version
In Tcl 8.5 you can now define, at the
script level (instead of needing to write in C) custom math functions. For
example here is a factorial function:
proc tcl::mathfunc::fact {n} {
if {![string is integer -strict $n] || $n < 0} then {
return -code error "fact is only defined for non-negative integers"
}
set result 1
# remember, n! (n factorial) is the product of all integers between 1 and n
# except 0! which is defined to be 1
for {set i 2} {$i <= $n} {incr i} {
incr result [expr {$result * $i}]
}
return $result
}
Then we can use fact($n) in expr,
if, while, for, etc. just like any of the
"built-in" math functions.
Since we now have arbitrary precision integers (thanks Kevin!) we can compute factorials that exceed the native size
of a long integer, i.e., 42!
% expr fact(42)
1405006117752879898543142606244511569936384000000000
Defining your own math functions makes solutions to
Project Euler problems easier
to write. YMMV. The other features of Tcl
8.5 will probably be exciting to an even wider audience.
As of January 2008 the Google calculator can only calculate up to 170!.
We can do twice as better quite quickly (timings from my 2.4 GHz MacBook Pro laptop):
% time {expr {fact(171)}} 1000
295.348728 microseconds per iteration
% time {expr {fact(340)}} 1000
791.435306 microseconds per iteration
— Michael A. Cleverly
Thursday, January 03,
2008
at 22:19
106 comments
| Printer friendly version
Shauna picked up our dry cleaning today. After she got home she discovered
the dry cleaners had given her an extra startched shirt—part of
the uniform for a Transportation Security
Administration agent.
It looks like it'd be roughly the right size (for me). But I'll forgo
trying it on—it seems rude to try on someone elses laundry.
Besides that, who knows... there might be some secret law against wearing a TSA agent's shirt...
We'll be taking it back in the morning, naturally, as I'd hope someone
else would if they'd been given my dress shirts by mistake.
— Michael A. Cleverly
Friday, January 04,
2008
at 22:51
50 comments
| Printer friendly version
Once upon a time (Tcl 7.x; probably earlier too?) the best way to test for
string equality in Tcl was:
if {[string compare $x $y] == 0} ...
Beginning with Tcl 8.1.1 the preferred way became:
if {[string equal $x $y]} ...
Beginning with Tcl 8.4 and the introduction of the eq and
ne operators testing for string equality became much more
concise:
if {$x eq $y} ...
Much more readable, concise, and less to type.
In Tcl 8.5 we get a simillar improvement
for testing whether a particular item is a member (or not) of a list:
if {$x in $y} ...
Which IMHO is a huge improvement over the former idiom:
if {[lsearch -exact $y $x] != -1} ...
Naturally ni
is to ne
as in
is to
eq
. And to top it all off, ni is fun to say too.
— Michael A. Cleverly
Saturday, January 05,
2008
at 19:49
461 comments
| Printer friendly version
I stayed home from Church with Jacob today. He was running a fever and
complaining of a sore throat. When he still wasn't feeling any better this
evening I took him to KidsCare in Bountiful. The quick test for strep came
back (in the words of the doctor) "very positive." She wrote a prescription
for Amoxicillin, which
we took to Walgreens (one of the only pharmacies open around here on a Sunday
evening).
I've never encountered any pharmacy [in America] that I'd consider really
fast (< 5 minutes) or efficient. Today when we went through the Walgreens drive
thru, the pharmacist told us they'd have it ready in 25-30 minutes and to come
back then.
There were no other cars in line & no patients visible inside. Why does
it take them so long to fill one small bottle? It's a liquid, so it ought to
be easier to measure than counting out individual pills. Given that it is
the season for strep (and the standardized dosage doctors prescribe for kids)
you'd think they could even have bottles pre-filled.
Is there some law or industry norm that says all pharmacies must be slow
and make sick patients wait? It's not like Amoxicillin is a hard
narcotic where they might want to double check the validity of
the prescription. So what do they spend all that time doing?
Maybe Paul
will find out when he starts his pharmacy
program in Georgia later this year...
— Michael A. Cleverly
Sunday, January 06,
2008
at 22:43
442 comments
| Printer friendly version
Some years back Anna
got a new family tradition started: bowling on Thanksgiving morning. We
all gather at Bountiful Bowl just prior to their 10 AM so we're among the
first in the door when they open.
A perfect (or near perfect) game would only have 12 balls thrown (one each
in the first nine frames and three in the tenth). It would be possible to
bowl an 11-ball game by scoring nine consecutive strikes and then missing a
strike or a spare in the tenth frame. A strike-free game would generally
have 20 balls thrown though a strike or spare in the final frame would boost
the number up to 21.
This past Thanksgiving I bowled a (for me) respectable 136. I didn't get
a strike in any of the first nine frames and then got a turkey
(three consecutive strikes) in the tenth frame. A 21-ball game! Go me!
I recall discussing (in passing) whether there was any bowling score
that was "impossible" to bowl. Clearly there is only one way to score
0 (all gutters) and 300 (all strikes). There would be one way to score
291 thru 299 (11 strikes and 1-9 pins on the final ball).
What about 289? Without scratch paper & a pencil we didn't bother
to figure it out. I assumed there would probably be ways of scoring
that high. (And it turns out there are eleven different ways, but more
on that in a moment.) If there was some score that was impossible to get
it seems like it would make a good plot device in a detective story—some
intrigue at the local bowling alley (league rivalry turns violent?) and the
villan's alibi falls apart when our able gumshoe realizes the mathematical impossibility...
Yeah, well... guess it'd be a real turkey of a plot device after all.
(There is probably a reason I've never written more than five pages
during NaNoWriMo :-)
While catching up on Project Euler
(I've slipped to 72% with the rate they've been adding new problems lately)
I looked a sequence my programs was generating (1, 20, 210,
1540, 8855, ...) up in the On-Line Encyclopedia of Integer Sequences and found
out that the sequence I was calculated (at least in the first five terms)
matched the "number of possible games of 10-pin bowling with a score of n."
The OEIS entry had links to Balmoral Software's All About Bowling Scores page,
which is full of great mathematical insight into the game of bowling, as well
as easy to understand charts and graphs. (Definitely worth checking out.)
For instance, did you know that the number of possible different games
is roughly six quintillion? Or that an "average" 280-point game
has more strikes than a 281-point game? Other fun facts:
- The most common score is (i.e., the mode) 77
- The mean score rounds up to 80
- Bowling a 98 (or higher) puts you in the 90th percentile (or greater)
- There are 17,590,903,116 different ways Becca could have played her
18-point game
Now if I could just swap my bowling & golf scores I'd be good at both!
— Michael A. Cleverly
Monday, January 07,
2008
at 23:39
302 comments
| Printer friendly version
A recent Smithsonian Tropical Research Institute report links
US farm subsidies to increased deforestation in the Amazon rainforest:
The US is the world's leading producer of soy, but many American soy farmers are shifting to corn to qualify for the [$11,000,000,000/year] government subsidies. Since 2006, US corn production rose 19% while soy farming fell by 15%.
The drop-off in US soy has helped to drive a major increase in global soy prices, which have nearly doubled in the last 14 months. In Brazil, the world's second-largest soy producer, high soy prices are having a serious impact on the Amazon rainforest and tropical savannas.
...
High soy prices affect the Amazon in several ways. Some forests are cleared for soy farms. Farmers also buy and convert many cattle ranches into soy farms, effectively pushing the ranchers further into the Amazonian frontier. Finally, wealthy soy farmers are lobbying for major new Amazon highways to transport their soybeans to market, and this is increasing access to forests for loggers and land speculators.
Laurance emphasized that he was not the first person to suggest that US corn subsidies could indirectly harm the Amazon. "But now we're seeing that these predictions-first made last summer-are being borne out. The evidence of a corn connection to the Amazon is circumstantial, but it's about as close as you ever get to a smoking gun."
I agree that this is entirely predictable.
I spent the better part of two years (1992-94) living in the Amazon (~3 months in
Rondonia, ~13 months in
Amazonas, and ~6 months in Acre). I've witnessed people struggling to eke out an existance. If families
and communities in the region can earn more (and become more prosperous) by
stepping in to help fill the soy-gap created by our Congress's ill-conceived
policies, what right do we have to be shocked or dismayed at the results?
Congress's misguided farm subsidies are also contributing to
rising meat prices domestically and
food prices globally,
pricing tortillas out of the reach of the poor in Mexico, and
leading to more (illegal) immigration.
I can't help but wonder—paraphrasing
Rep. Jeff Flake—what business is it of the Federal Government to pick
winners and losers in the economy, to decide we ought to be promoting
white & yellow corn production (with earmarks and subsidies)
instead of blue corn or above any other vegetable out there?
— Michael A. Cleverly
Wednesday, January 09,
2008
at 20:17
93 comments
| Printer friendly version
Mark Roseman has created a new Tk website (tkdocs.com) which aims to provide "a language neutral, up-to-date (8.5+) best practice
tutorial and associated documentation".
The tutorial is
coming along quite nicely, with code examples for both Tcl and Ruby. Presumably
examples for other languages (Python, Perl, etc.) may yet be forthcoming—or
would be included if someone steps up and contributes them.
The site, as new is it is, is already off to an excellent start.
Kudos to Mark!
— Michael A. Cleverly
Wednesday, January 09,
2008
at 21:06
98 comments
| Printer friendly version
A year ago at this time
(i.e., 31,536,000 seconds in the past) Ethan had been born but Marta was
being stubborn and taking her own sweet time.
The past year? At least twice as much work, but definitely more than
twice as much fun...
Eliza has a short video clip of them both (with a bonus special bonus
presentation by Andrew).
— Michael A. Cleverly
Thursday, January 10,
2008
at 15:09
88 comments
| Printer friendly version
A week and a half ago I began work on a
website indexing the
Markets in Everything posts from my
favorite econ blog, Marginal
Revolution.
Markets in Everything demonstrate that there are markets
for, well, just about everything. :-) Some are pure genius (the
"why didn't I think of that" kind), others mistifyingly odd, some sad and
others downright sick / disgusting / disturbing.
An unexpected bonus I received from having created the site:
Tyler Cowen is sending me a copy of his book
Creative Destruction:
How Globalization is Changing the World's Cultures.
Since I went public with the site a week ago I've had nearly 5,000 unique
visitors. Approximately 30% came from Marginal Revolution, 44% from the
New York Times Freakonomics blog, and the remaining 26% from
various other sources (or users whose browsers aren't configured to send
referrers).
A professor from the University of Washington was kind enough to write:
Just wanted to say a BIG THANKS for compiling all of the Marginal Revolution "Markets in Everything" posts! I am using them in an econ class I'm teaching soon, and had made little progress in looking for all of them... now you have done that for me!
A fun little project, and very much worth the $6.99 I spent registering the
marketsineverything.com
domain name.
— Michael A. Cleverly
Thursday, January 24,
2008
at 22:31
39 comments
| Printer friendly version
Two quotes I shared (via email) with some friends today:
The first, dealing with L'Affaire Kerviel:
The [30-year old] SocGen rogue trader managed to annihilate an amount of
money that surpasses the yearly output of the economy of 112 countries, among
them Madagascar, Mozambique, and war-torn Afghanistan, all of which have
population sizes larger than 15 million.
And the second dealing
with last years cyberattacks on Estonia that, at the time, were thought to
be coming from Russia:
The fact that a single angry student was able to impact international
relations between two countries is an startling development.
[...]
The fact that a single student was able to trigger such events is
particularly ominous when you consider just how many potential flashpoints exist
between various countries all over the world.
[...]
The DoS attack against Estonia is an excellent example of how a cyberattack
carried out by a 20-year-old student in response to real-life events further
exacerbated an existing problem between two nations.
One person replied, "the [Mathematica] code is cool, but it's
freaky that one person can affect the economy like that."
— Michael A. Cleverly
Friday, January 25,
2008
at 19:22
86 comments
| Printer friendly version
Among all the
Marginal Revolution
Markets in
Everything posts, one that personally intrigued me was
#4,
personalized romance novels.
For $55.95 a company in Florida will produce a unique book based on various
details you provide (name, hair color, favorite car, favorite radio station
etc.) and then plug those details into a pre-fabricated story running between
180 and 210 pages.
As Tyler Cowen noted:
Some people actually like this idea:
"It was an addictive read because it makes you the star," said Pete Hart, 34, who received a pre-fan novel called "Vampire Kisses" from his girlfriend. "I was referred to as Pedro in the book, which is my nickname. I found that quite charming."
Another fellow noted:
"It read more like a novel or novelette and less like a typical romance novel," he said. "I enjoyed reading it. Besides, I was in it."
I'm intrigued, since I've made typesetting a hobby, and in part because
of the huge profit margins. In my experience producing a single 180-210
page book shouldn't cost more than ~$7, so $55.95 would represent an eight
times markup. Not bad...
Of course not being a reader of romance novels (or chick-lit generally) I'm
somewhat skeptical of the appeal. But I recognize I'm probably not
representative of the demographic and so I shouldn't necessarily consider my
own opinion too highly. Better to try an experiment and attempt to
quantify the appeal generally.
I am going to prepare a personalized book for my wife for Valentine's.
This will provide me with one data point. However a sample size of one
(especially when she might be biased to say nice things regardless of what
she really thinks) isn't large enough to draw any conclusions from.
As long as I'm going to be creating a personalized book for my wife
the marginal effort to create an additional personalized book for someone
else is very low. (I'm already going to write a Tcl script to take
a list of changes and apply it to the original text; re-running the
script with someone elses list of changes would be trivial.)
An invitation to participate in an experiment for Valentine's Day 2008
My inivitation to you, dear reader:
I'm willing to produce a personalized trade-paperback (6"x9") version of
Jane Austen's Pride and Prejudice for you.
I only ask two things:
- That you reimburse me after the fact for the actual cost of having
the book produced and shipped. (Payment via
PayPal or check; I'm estimating
the book itself will probably cost in the $9 - $12 range depending on
what size font I end up using.)
- That after you've given the book to your
significant other and (s)he has had an opportunity to read it you
complete a short follow-up survey that I'll send so I can quantify
peoples reactions generally.
The characters whose names could be changed to customize the story
(links are to character summaries at Wikipedia) include:
This chart from Wikipedia shows the relationships
between the aforementioned characters.
Location names that could be changed include: Rosings (Lady
Catherine de Bourgh's estate); Netherfield (the estate leased
by Mr. Bingley); Meryton (the village near where the
Bennet's live); Brighton (where Lydia is
invited to go with the militia); and Pemberley (Mr. Darcy's
estate).
How to participate
Given that Valnetine's Day is two and a half weeks away, and to allow
time for production and shipping, please
email me (michael at
cleverly dot com) with the following no later than
Saturday, February 2nd, 2008:
- Your name and mailing address (where to send the book to)
- A brief dedication (if any) to include at the beginning
- A list of alternate character names (i.e., "Shauna Christensen" instead of
"Elizabeth Bennet", etc.)
Please put Pride & Prejudice in the subject line of your
email to decrease the chances of your email being inadvertantly
miscategorized as spam. If you haven't received an acknowledgement from
me within 48-hours please send another message.
I'm willing to ship internationally; however, I doubt time would
permit your books arrival prior to February 14th, and the shipping
expense would undoubtedly be greater.
Incidentally, if the idea of this experiment offends any die-hard fans
of Jane Austen you have my apologies in advance.
— Michael A. Cleverly
Saturday, January 26,
2008
at 15:53
816 comments
| Printer friendly version
My fortune cookie at Cafe Trang
tonight read:
You shouldn't overspend at the moment. Frugality is important.
— Michael A. Cleverly
Saturday, January 26,
2008
at 21:23
94 comments
| Printer friendly version