Carl Banks' Blog
|
Sunday, August 17, 2008, 8:00 PM EDT
|
MRI of my Brain |
Yes, this image is really an MRI scan of my brain.

The story behind this image begins in 2005, when I began to
experience minor but irritating dizzy spells. After some
otolaryngologists were unable to diagnose the problem (I had no
hearing loss so it didn't appear to be Ménière's Disease), I was
recommended to a neural specialist who ran an MRI on me as a
precautionary measure. They were looking for multiple sclerosis.
Fortunately my brain scan was normal, and as a side effect I got this
cool image that shows my brain in all its glory.
By the way, I still don't know what caused my dizzy spells, but
after I went through some physical therapy the spells became much less
severe and frequent but I still get them once in awhile. I think it's
safest for me to assume I have a minor case of Ménière's Disease so I
try to avoid getting water in my ears.
|
|
Thursday, June 26, 2008, 5:49 PM EDT
|
Skeletal character studies of cartoons |
|
|
Thursday, June 26, 2008, 12:49 AM EDT
|
Why I think the cost of manned space flight is justified |
There is a lot of controversy over whether the money we spend on
manned space flight is worth it, with many opponents of it claiming
that that money would be better spent on social programs or other
things.
Those in favor of funding space flight most often tout the
scientific benefits of the space program as its justification.
Problem is, it's a weak argument. From a short-sighted economic
standpoint, the science potential doesn't justify the cost of human
space flight, by any reasonable definition (especially since a very big
chunk of that science can be accomplished remotely via robots). Some
would even say unmanned space flight doesn't justify the cost.
Of course, one can always argue that this is more than an economic
issue (which is valid but lost on a lot of people), or that the
science will ultimately pay dividends long term, even if we don't live
to see it. But it would be missing out on a much better
argument: The most immediate and tangible benefit of the
space program is not science, but engineering.
There's an old riddle that goes something like this: What's the
difference between science and engineering? Science costs money,
engineering makes money.
Well, in the space program that isn't true.
Unlike science, engineering is very much goal oriented. Generally,
that goal is to make money. And, in the process of engineering so that
we can make money, we learn a lot about how to make things better
(i.e., safer, more efficient, more reliable, etc.).
But the thing is, when you're trying to make money, there's only so
much risk you're willing to take, and therefore, there are only so
many goals you're willing to aim for. But, when you decide to put
humans into space at a cost, you create engineering goals that never
could have been created simply from people seeking to make a profit.
And, in striving to meet those goals, we learn things we wouldn't
learn otherwise.
To me, the engineering benefits justify the money we spend on space
flight. I think we should spend more.
I'm not just talking about the Tempurpedic mattress, either. Thanks
to the space program, airplane and cars are safer and more fuel
efficient. Computers are faster. Many products are cheaper.
And what about all those homeless people we should be feeding
instead? The engineering advances we make to achieve space flight
could make it more feasible to feed those homeless people. (Not saying
it has or will, but could.)
|
|
Thursday, April 17, 2008, 7:45 PM EDT
|
My new conlang (constructed language): Bowtudgelean. |
As many of my friends and family are aware, I am currently writing
a video game, The Ditty of Carmeana, an action-adventure title set in
the fictional Kingdom of Bowtudgel. Also as many people know, I am
very interested in linguistics. Therefore, I decided this was the
perfect opportunity to create a new language for my fictional
kingdom. The (in progress) result is Bowtudgelean.
Here's a summary of some of the aspects of the languages.
Nouns and Adjectives
Nouns in Bowtudgelean are inflected for number and state. Number
is familiar to English speakers: a noun can be singular or plural.
State—also called definiteness—is
the distinction between something specific (usually signaled in
English by the definite article "the") and something not. State is
not an aspect of grammar in Indo-European languages (the family that
includes English, French, Latin, Russian, Greek, and many others), but
it is in Semitic languages such as Arabic. Bowtudgelean is like
Arabic in this respect: adjectives agree with nouns in state.
However, Bowtudgelean takes state to the extreme: it has ten different
states.
Briefly, here the states and their usages:
- 1st person: Is or includes the speaker or writer.
- 2nd person: Is or includes the listener or reader.
- Nominal: A name.
- Referred: Something just referred to.
- Indicated: Something indicated by a limiting adjective,
prepositonal phrase, or relative clause.
- Local: Something near the speaker.
- Remote: Something away from the speaker.
- Past: Something that occured in the past.
- Future: Something that will occur in the future.
- Indefinite: Nothing in particular.
Here's an example of the declension of the adjective gæðu
("whole").
| State | Singular | Plural |
| 1st Person | gæðunupi |
| 2nd Person | gæðuken |
| Nominal | gæðuzdek |
| Referred | gæðun | gæðuni |
| Indicated | gæðut | gæðuti |
| Local | gæðutaj | gæðutajev |
| Remote | gæðubel | gæðubelev |
| Past | gæðulabo | gæðulabov |
| Future | gæðumex | gæðumexev |
| Indefinite | gæðuha | gæðuhay |
An interesting effect of this aspect of grammar is that there are
technically no personal pronouns. The word that is used to translate
English "I" (næ) is actually the 1st Person singular state of
the demonstrative pronoun.
Besides number and state, I'm leaning towards adding a gender
distinction to nouns as well.
Verbs
There is one notable disctinction nouns are not inflected for:
case. Bowtudgelean neither uses cases nor word order to determine a
noun or pronoun's role in the sentence. Instead, Bowtudgelean
prefixes a noun or pronoun with a particle, called a marker, to
determine the role. What makes these markers different from case
endings is that they are part of the verb, not part of the noun.
Any given action involves a certain set of participants. In
Indo-European languages, the participants fill fixed grammatical
slots, regardless of the verb. One of those slots is called the
subject, another called the direct object, a third is called the
indirect object. In Bowtudgelean, there is no such framework to fit
participants into. A participant for a particular verb exists only
for that verb; a different verb has a different set of participants.
The participants a verb has make sense for it; for some verbs it makes
sense to have different participants than the subject-object system
would supply English. A few verbs have as many as five participants,
and some verbs (for example, ŋejreð "it is raining") have none
at all.
Let's consider an example: æð, which can be translated as
"come" or "go". Whereas come and go are intransitive in English, in
Bowtudgelean æð has three different participants. There is the
person going, which is marked by the particle ho. There is the
place being moved away from, indictated by the marker tamæ.
And there is the place being moved to, indicated by nuð. Here
is an example sentence: Ho voŋ æðga tamæ ðæln nuð
patexpejen. "He went from the house to the store."
(Key: voŋ = "he,she,it,him,her", -ga = past tense.
Also, notice the referred state ending -n on the nouns.)
In Bowtudgelean, the set of markers used for a given verb (the
signature) are not predictable and must be learned, though sometimes
they do follow patterns. The most notable is the za-epu-
signature used mostly by verbs of manipulation, where a person (marked
by za) physically manipulates an object (marked by epu).
But in general there are a lot of irregularities in these
patterns.
One little side note is that there are a few verbs that have no
stem at all; only markers. Naturally, the verbs that mean "to be" are
among them (there are two variants: i-linum- and
i-nui-). Another is ak-gwa-has-, which means "to say"
(ak marks the speaker, gwa the listener, and has
the words being spoken).
Phonology
Unfortunately, there are only two sounds that exist in Bowtudgelean
but not in English, and they're very rare. (They are the velar
fricatives: the sounds of German ch in ach, or of the letter
gamma in Greek.) I didn't plan for it; I wanted to have at least one
common foreign sound. I had written a word generator to generate
random words, and tuned it until it got words that looked like I
wanted. Unfortunately, the velar fricatives hardly ever come up.
However, there are plenty of consonant clusters that are not found
in English, so it's not all bad.
Here's a quick, and approximate, pronounciation guide. The
alphabet is phonemic: meaning that letters correspond exactly to
sounds (thanks, King Hengou II!)
| Letter | Pronounciation |
| a | like the a in father |
| æ | like the a in cat |
| e | like the a in lame |
| i | like the i in machine |
| o | like the o in home |
| u | like the u in dilute |
| x | like the sh in shape |
| j | like the s in measure |
| ð | like the th in those |
| þ | like the th in thin |
| ŋ | like the ng in sing |
| c | like the ch in German ach
or Greek gamma |
| g | like the g in go (always hard) |
The letters b, d, p, t, k, l, w, f, v, s, z, y, w, m, n, h are all
pronounced as in English.
Babel Text
One of the rites of passage when inventing a conlang is to
translate the story of the Tower of Babel. Here's mine, presented
(for now) without further comment.
Ðeŋa za ŋome gæðuzdek epu kalðira mogaþa, buzolka-za
epu taþihay mogaþay.
Pema lagærigara ar dora xke koyra, æðga ho surka nuð ŋezbey komu jdot
Xinaræt, te ruhi surka nomarga lir voŋ.
Ak surka gwa surka hazg: "Umijnotram ar sæz mogi hoxtæhay, te
jguxki-ak epu surka mæsæ pomoha." Za surka lelþoŋa tor hoxtæhay mogi
zilæmuha, te tor danurjbyosa mogi ritbazuha.
Þilabo hazg: "Æðmi-ho, ajderam ar sæz mogi axa dæŋu sæz, te mogi
newgasiha iðæ jbyæt xpavoŋ komu enra, te þid u sæz guŋærdo. Jraŋ
lojozapen epu sæz jalkapu zdomæ.
Ho Jbago æðga nuð moðbel natox ar voŋ ala lux axt te newgasit peŋat
ajde-mogi ar stizen.
Þilabo ak Jbago hazg: "Mip þyaþ, pema i surka linum dora ðeyxera
osuhæha ðenolka-za epu kalðira mogaþa, za surka þkæðne deþaga epu
modlabo, ŋab kowæwtæ ŋætunzæ tojpen þalpe za surka deþa mod peŋa ŋab
surka fkersteb þalpe deþa-epu za surka.
"Sajbiðæn æðram ho sæz nuð mika te komu voŋ æhalnæram za sæz epu
kalðirt xpasurka, punebe xpodusonpen ruhi kowæwtæ lir mod peŋa has ak
æwtæpiz."
Amusa za Jbago lojozaga epu surka æðolka-ho tamæ voŋ nuð zbalkap
zdomæ, te lakipæ ajdega ar surka mogi axen.
Ŋab modlabo zæneyoŋa þalpe simoke ar voŋ lux Babel, kaj komu voŋ za
Jbago æhalnæga epu ðenjda xpa ŋome osuhæzdek. Igusen tejdæn
ædkolka-tamæ nuð zbalkap zdomæ, za voŋ lojoza epu
surka.
Final Note
Bowtudgelean is the Anglicized name of the language.
Bæwtujdelix is the language's own name for itself.
|
|
Monday, March 17, 2008, 1:57 AM EDT
|
Why time travel is impossible |
If one were to extrude the space-time continuum along a fifth
dimension, and define existence as the limit at infinity along this
dimension, then any time travel would be unstable and would never
persist until infinity. Whatever effect a future event had on the past
would alter time to prevent the future even from ever taking place
(this is along the extruded dimension so that is "possible" to alter
time).
Even if the effect is only to displace a few electrons, it will
change circumstances ever so slightly. As you proceed along the
extruded dimension till infinity, circumstantial changes accumulate
until at some point the effect of those changes changes future
circumstances enough that the time travel doesn't occur. At that point
the discontinuity in space-time collapses.
This thought experiment demonstrates how there could be
instabilities in existence. Even if you discount the fifth dimension,
the fact remains that the time travel would have to have exactly the
effect on the past that produces the circumstances that led to the
time travel taking place. If even a small circumstance differs from
that that time travel cannot exist. It would be like balancing a
perfect ball on the tip of a perfectly sharp needle in a perfect
gravitational field, and having it still be there at the end of
time. If the ball is 1/googol off center, it'll eventually topple.
So it is possible, though exceedingly unlikely, that time travel
could occur. The possibility of a free will in the time loop is almost
certain to be enough of a disturbance to prevent the time loop from
ever happening.
While I'm on the subject, let me share a pet peeve about portrayal
of time travel in movies. For the most part I can't stand time travel
in movies. With time travel there's an inherent lack of drama (if at
first you don't succeed, you can just go back in time to prevent your
own failure). Also, the logical effects of time travel don't lend
themselves to escalation or payoff. 1Moviemakers deal with these
difficulties with artificial time travel rules. This allows dramatic
tension and explains the effects of time travel, but such rules
invariably cause logical inconsistencies.
Logical inconsistencies are not a deal breaker in and of
themselves; there's something called suspension of disbelief that
moviemakers can expect to a degree from the audience. But when the
movie tries to explain these articifial rules, it only creates more
and more inconsistencies. The more it tries to exlpain the rules, the
more inconsistent it gets, until the story is nothing but a confusing
mess, and that pisses me off.
Therefore, here are my rules for creating a time travel movie that
doesn't suck:
- Keep dramatic devices to a minimum.
- Whenever a plot device is used to create dramatic tension,
just use it. Don't explain it; don't talk about; and don't address
it's logial flaws. Just state the rule and be done with it.
- Don't explain, talk about, or even acknowledge any issues with
time travel that aren't necessary to create drama.
Here are some movies that handled time travel well.
Back to the Future
Back to the Future's plot device was that Marty changed history,
and if he didn't change it back he'd disappear within the week. Lots
of logical loose ends here. Why didn't Marty disappear the instant he
bumped into his dad? Why does it take week? Why does Marty go back
to the "new" future? What happened to the Marty from the new future?
Does Marty have memories of things that happened to the new Marty? If
he doesn't, maybe he slowly acquires them over a week? Does he also
lose memories of the old future over the week? Etc. Etc. Etc.
The movie handles all these questions and logical loose ends
perfectly: by ignoring them.
The Terminator.
Another delightfully straightforward plot. The movie created
dramatic tension by ignoring the fact that Kyle's presense meant that
Sarah Connor must have survived (otherwise who would have given him
the picture so that he would volunteer to go back?). It also ignored
the issue of what the robots expected to happen if the Terminator
should succeed. Does history instantly change the moment they send it
back, and if it doesn't change it must have meant they failed?
These questions simply weren't addressed, and it was the better for
it.
Bill and Ted's Excellent Adventure
There was a pretty bad plot device ("the clock in San Dimas is
always running": Bill and Ted weren't able for some reason to travel
back in time to do their history report). That was actually too much
tension; later in the movie they got around this rule by planning to
go back in time after their report to hide things they'd need.
But that's it: it was kept to a minimum. Bill and Ted never
wondered why they had to deliver their report at a certain time
according to their own watches (assuming Ted had managed to remember
to wind it), or anything else like that.
Furthermore, no attention was paid to the effect on history. Drama
over whether Napoleon got back to France wasn't necessary; there was
already enough of a story with their history report. So the movie
wisely disregarded it altogether.
And now for some movies that didn't do it well.
Back to the Future 2 and 3
These movies addressed (at some point) all those artificial rules
the first movie ignored. And the result was, well, Back to the Future
2 and 3.
Terminator 2 and 3
These movies addressed (at some point) all those artificial rules
the first movie ignored.
T2 was all right since it was a well done movie in many other ways.
It must still be given credit for not raising the issue of where the
technology came from. But things got out of hand enough to annoy
me.
T3 it got way out of hand, and it was a big reason why it sucked so
bad, but I suspect it would have sucked even without all that time
travel loonieness.
|
|
Sunday, February 24, 2008, 10:34 AM EST
|
Minor Python (Programming Language) Complaints |
Python is my favorite programming language.
Like all programming languages, it has things I don't like. The
thing about Python is, it has a lot fewer things I don't like than
other languages. A lot. Even the things I don't like are
relatively minor in the end.
So of course I made a page listing what I don't like.
-
Boolean Handling
The Python treatment of booleans is, by far, my biggest gripe with
Python. (Which, you know, is a pretty good thing to have as a biggest
gripe.)
I think booleans should be completely disjoint from all other
types, as they are in Java. If-conditions should have to evaluate to
a boolean, or else it should throw an exception. The and-, or-, and
not-operators should accept only boolean operands and return only
boolean results. (Though I would accept arrays of booleans for the
and-, or-, and not-operators; but not for if-conditions.)
I don't deny that it's convenient to use an "or" that returns the
first "true" value, or that it's sometimes a marginal improvement in
clarity.
I just think this idiom is too error prone, and very often too
misleading, to justify its convenience. There's ordinary
carelessness, of course, where someone writes a function like
this:
def op(datum=None):
result = datum or default
while not stopping to consider that the empty string would be a legal
value for datum in this case. But there's a more insidious danger
that can't be chalked up to carelessness: when the acceptable values
for datum change *after* the function is written. This leads to
subtle breakage.
As far as the user is concerned, this function's correct behavior is
to "use the default when the argument is not specified", but as-is the
function is not robust to future changes or uses. The function is a
poor, non-robust implementation of the desired behavior.
To me this feels like a ticking bomb, a bug waiting to hatch from
it's egg.
More generally: I find that the boundary between what Python
considers to be true and false rarely corresponds exactly to what I'm
trying to do in cases like the above. Usually the true/false test
only works for certain set of expected values that I have in my mind.
When the acceptable values are generalized, when you want to expand
this function's role, does the true/false test still work? I find it
rarely does.
-
True Values
Ok, so Python doesn't have disjoint booleans. Fine.
But I don't agree the values Python considers true and false. In
particular, I disagree with the notion of empty lists being false.
This is because (unlike for numbers or strings) it's not
self-evident what false should be. Python lists, tuples, sets, and
dicts consider empty containers false and all other containers true.
However, for other related types this doesn't hold. Notably, all
built-in python iterator types always return true, even if they will
yield no more values. This can lead to subtle code breakage in
situations like this:
def func(iterable):
if not iterable:
return
initialize()
for item in iterable():
do_something_with_item()
finalize()
Now, this piece of code was written with that the user would pass
an list or tuple in. However, if some wily user decides to pass, say,
a generator in, the result is that is runs the initialization and
finalization even if the generator will yield no values. This is
wasteful at best and possibly buggy at worst.
Another example of container-like types that don't treat emptiness
as false are Numpy arrays. They wisely don't even go there, raising
an exception if someone tries to get their truth value. For numerical
programming it makes sense to apply boolean operations
element-by-element.
The point of all this is that the one-size-fits-all idea that empty
is the one true value for false doesn't work. For various container
and container-like objects, it makes sense for false to be something
else, or for there to be no notion of false at all.
That's why I think Python should do away with the notion of
emptiness being false, and require an explicit test for emptiness
where it's desired.
-
Pathname manipulation
This is a common gripe from Pythonistas. The built-in way to
manipulate paths in Python is with the os.path module. One would type
os.path.join(dirname,basename) to splice a pathname together
from a directory and filename, for instance.
Many Pythonistas don't like typing all that out for a simple
operation. I don't either, but that's not my biggest issue with
os.path. My issue is that it isn't that powerful.
One of the greatest things about Python is that it almost never
lacks a quick and easy way to do something that ought to be quick and
easy. (In fact, Python often makes things that ought to be hard as
hell quick and easy.) The glaring exception to this is os.path
Somehow there are many useful things that os.path doesn't do. A
big one would be something like os.path.splitall: completely splitting
a filename into a list of path components. Another is relativizing a
pathname; os.path can make a relative path absolute but not vice
versa.
The annoying thing is it's right at that point where it's annoying
but not quite annoying enough to move me. I don't do pathname
manipulations enough that I ever feel like working out my own solution
to this problem once and for all. And I don't really like the
third-party solutions, so I'm kind of stuck with this annoyance.
Maybe I'll sit down and do it one day.
-
Distutils
Distutils is one of those things that almost crucially useful at
certain times, but makes me shake my head in astonishment about how
much better it could have been.
It was pretty much designed with poor anticipation of user needs.
If you need to do something that isn't exactly what the authors
envisioned, it can make life supremely difficult. It's not versatile
at all.
Among things is doesn't easily do is to let the user specify custom
build flags (I have to edit setup.py to do that, and sometimes
setup.py is so convoluted in its attempt to be intelligent that I can
hardly find the place). I come across this issue a lot since I have
Python installed in an unusual location.
-
Setuptools
On a related note, there is setuptools, which is becoming the de
facto super-distutils, and while it fixes some of distutils's issues,
it's add its own, and it's probably even less versatile when it comes
to its own issues and alternative needs of users than distutils
was.
Besides that, setuptools also routinely and mind-bogglying-ly
rudely downloads and installs packages on the user's behalf without
asking. This makes me want to literally makes me want to punch
Phillip Eby (the author) through the monitor. Yes, I realize I can
shut the behavior off, but it's annoying.
One thing about setuptools is that is seems needlessly complicated
for what it's trying to do. In particular, it sets up some sort of
homebrew metadata scheme (entry hooks are part of this), and many
packages can't be imported without going through package resources.
The inability to simply import modules is, in my opinion, a terrible
design decision. Modules that do this make things difficult when
distributing binary pagakges.
Conversely, authors who distribute packages that depend on these
entry hooks have likewise made a bad design decision. It might make
sense for enterpise-deployed libraries (where you can depend on users
to follow arcane corporate procedures), but not for you average
third-party library downloaded off the Internet. PyOpenGL was a
notable offender here, and I abandoned it mostly on account of
this.
-
Lack of a set-and-test
People coming to Python from Perl often criticize if for not
supporting the following pattern:
if (/someregexp/) {
do_something();
} elsif (/someotherregexp/) {
do_something_else();
} elsif (/someotherregexpagain/) {
do_still_another_thing();
} else {
do_default_thing();
}
The idiom is useful for many applications, especially text
processing (though it should be refactored when scaling to larger
rules). Python, however, doesn't support this without workarounds.
(The issue with Python is that you can't execute code between if- and
elif-conditions, and a regexp search would need to do that.)
That Python doesn't support this isn't such a big deal; it's fairly
common but is still a rather specialized use, and the workarounds
aren't too bad. It's still a bit annoying.
So that's it. (Well, that's all I could think of right now.) All
in all, if these are my biggest gripes, it's a pretty good thing.
They are really very minor issues compared to other languages.
|
|
Monday, February 11, 2008, 2:34 AM EST
|
New Web Host! |
If you can see this (and it's sufficiently close to February 2008),
then this file is being served on my new web host, Dreamhost.
Dreamhost is now hosting all three of my domains:
aerojockey.com, tamperedevidence.com, and virtualfief.com.
My old host, Total
Choice Hosting, was a very nice service, and I would highly
recommend them to anyone looking to do a basic homepage or small
business site. It's great if your site is mostly static pages with
maybe a few CGI scripts thrown it, which is what my site was. They
were very responsive to issues that would come up. The price was very
reasonable.
However, I pretty much outgrew it. It had a few major limitations
that eventually cramped my style too much. They did not allow shell
access; this was a biggie. Sometimes shell access is indispensible.
(I often worked around this by writing CGI shell scripts that I could
invoke, but it was terribly inconvenient.) Another limitation was a
ban on hosting multiple domains; multiple domains meant multiple
accounts. This wasn't an issue when I had only one domain. When I
got my second domain it was. I actually had two different accounts
with Total Choice Hosting for about a year.
Finally a need arose that Total Choice Hosting couldn't help me
with: namely the need to host a Subversion repository. (It's not open
source, so I couldn't use Sourceforge or Google Code.) I figured it
was time to move on.
What I needed was a fewer limitations, and certain bells and
whistles. After reading a bunch of reviews on the Web I came across
Dreamhost. Many of the reviews I read for Dreamhost were by web
developers who'd moved on from it. They basically said it workable
but suboptimal for their highly advanced. Some of them even continued to
used Dreamhost for serving static content. I don't need highly
advanced stuff, though, so that sounded pretty good to me.
For the price, Dreamhost has a ton of disk space and a ton of
bandwidth. (When I saw Dreamhost's claim that they offer 500 GB of
storage, I kept looking for an asterisk. The only catch I could
discern was that they slam if you go over the limit.) Dreamhost will
host an unlimited number of domains for a single account. They allow
shell access. They host Subversion repositories. Also, most the
tricks I that I used with TotalChoiceHosting (using mod_rewrite, for
example), were also supported by Dreamhost.
The downside, that their customer service has a reputation for
being not so good, is not really a big deal to me. I think I filed
maybe two tickets in 5+ years with Total Choice Hosting. It might be
a problem if there were a lot of downtime, but I would guess most
people's problems are their own fault. (That's never happened to me,
of course.)
|
|
Wednesday, November 28, 2007, 1:42 AM EST
|
Pandas are stupid |
Ok, what is the big deal with pandas?
I mean, really. Whenever you go to a zoo that has pandas, people
will line up for miles just to get a glimpse of these idiotic
evolutionary flukes. What is the big deal? All they do is sit around
eating leaves all day. They're probably the most boring mammal on
earth aside from koalas.
When I go to the zoo, I want to see animals do something
interesting, which most animals manage to do at least slightly.
Foraging for ants? Interesting. Pacing around their enclosure
looking mean and intimidating? Interesting. Having scaly skin?
Interesting. Sniffing things? Not world-shattering, but it's
something. Laying around eating leaves? Mind-numbingly boring.
So what is the big freaking deal about pandas? Why do people stand
in line for half an hour to see a couple animals do nothing?
While I'm at it, I have a few things to say about the stupid names
pandas have. You see, pandas are the property of the People's [sic]
Republic [sic] of China, and one condition China reserves when lending
them is the right to name any babies they pop out. For example, this little
leaf-eater was named Zhen Zhen, which evidently is Chinese for
"Precious", and it's a stupid and unnecessary name, even if you
disregard the obvious problems it'll cause with Gollum.
Therefore, on behalf of The United States of America, I am
declaring jus soli rights to name the panda babies.
Henceforth, this panda's real name is Democracy. Officially she'll
still be known as Zhen Zhen, of course, in same way that officially
Taiwan is a province of China.
Democracy's older brother (who was born in 2003 and is officially
called Mei Sheng) is now called Freedom. And Freedom's older sister
(1999, Hua Mei) is now called Inalienable Rights.
|
|
Thursday, June 21, 2007, 4:36 AM EDT
|
TV Shows with only one funny character |
Ever notice that a lot of TV comedies seem to have only one funny
character, often a supporting character? I started noticing that
whenever I'd mumble about shows I can sit through without cracking a
smile (e.g. Seinfeld). I started noticing that my main complaint
wasn't that the show wasn't funny at all, but that only one person was
really funny (e.g., George).
Well, I made a list.
| Show | Character |
Actor |
| Seinfeld | George | Jason Alexander |
| Friends | Phoebe | Lisa Kudrow |
| Family Guy | Stewie | Seth MacFarlane |
I listed the actors here for an important reason: often when only
one character is funny on the show, the writers are mediocre (and/or
not according to my taste), and it's only the actor's timing and
delivery that manages to make the character funny. Sometimes a show
relies mostly on situational humor, but one character manages to be
funny even without it (e.g. Stewie on Family Guy).
I might as well also list the opposite extreme: shows that have
lots of balance.
(More will be added to these lists as I think of them.)
|
|
Thursday, June 21, 2007, 4:34 AM EDT
|
Major works of literature I've read |
Here is a pretty complete list of literature (excluding short stories
and poems) that I've read. I tend to go for quality over quantity.
My favorites:
- Crime and Punishment by Fyodor Dostoevsky
- A Confederacy of Dunces by John Kennedy Toole
- The Name of the Rose by Umberto Eco
- The Glass Menagerie by Tennessee Williams
- Beowulf
I very much liked these:
- Gulliver's Travels by Johnathan Swift
- The Hobbit by J. R. R. Tolkien
- The Lord of the Rings by J. R. R. Tolkien
- The Hitchhiker's Guide to the Galaxy by Douglas Adams
- To Kill A Mockingbird by Harper Lee
- Tess of the D'Urbervilles by Thomas Hardy
- The Three Musketeers by Alexandre Dumas
- The Great Gatsby by F. Scott Fitzgerald
- The Hound of the Baskervilles by Arthur Conan Doyle
- 2001: A Space Odyssey by Arthur C. Clarke
- The Lion, the Witch, and the Wardrobe by C. S. Lewis
- Prince Caspian by C. S. Lewis
- The Horse and his Boy by C. S. Lewis
- Pygmalion by George Bernard Shaw
- The Importance of Being Earnest by Oscar Wilde
- Lady Windemere's Fan by Oscar Wilde
I liked these:
- The Count of Monte Cristo by Alexandre Dumas
- A Study in Scarlet by Arthur Conan Doyle
- Treasure Island by Robert Louis Stephenson
- A Tale of Two Cities by Charles Dickens
- Focault's Pendulum by Umberto Eco
- War and Peace by Leo Tolstoy
- The Silmarillion by J. R. R. Tolkien
- The Lost World by Arthur Conan Doyle
- The Restaurant at the End of the Universe by Douglas Adams
- Life, the Universe, and Everything by Douglas Adams
- So Long, and Thanks for All the Fish by Douglas Adams
- Animal Farm by George Orwell
- 1984 by George Orwell
- Fahrenheit 451 by Ray Bradbury
- For Whom the Bell Tolls by Ernest Hemmingway
- Voyage of the Dawn Treader by C. S. Lewis
- The Magicians Nephew by C. S. Lewis
- The Last Battle by C. S. Lewis
- Alice's Adventures in Wonderland by Lewis Carroll
- Through the Looking-Glass by Lewis Carroll
- Don Quixote de La Mancha, Part One, by Miguel de Cervantes
- 20,000 Leagues under the Sea by Jules Verne (audio)
- A Streetcar Named Desire by Tennessee Williams
- Death of a Salesman by Arthur Miller
- Picasso at the Lapin Agile by Steve Martin
- The Iliad by Homer
These I didn't like too much:
- Catch-22 by Joseph Heller
- Journey to the Center of the Earth by Jules Verne
- The Silver Chair by C. S. Lewis
- Inherit the Wind by Jerome Lawrence and Robert E. Lee
- Our Town by Thorton Wilder
- Oedipus Rex by Sophocles
I completely disliked these:
- A Separate Peace by Anthony Trolloge
- My Antonia by Willa Cather
- Antigone by Sophocles
These are the books I've found too boring to finish (so far):
- The Amazing Adventures of Kavalier and Clay
by Michael Chabon
- Moby Dick by Herman Melville
Then there is Shakespeare. I find it too hard to pin down exactly
how much I liked most of the plays; it changes all the time. Each one
I've read twice was better the second time. The ones I liked, roughly
in order:
- Macbeth
- The Taming of the Shrew
- King Lear
- Romeo and Juliet
- A Midsummer Night's Dream
- Hamlet
- Julius Caesar
- As You Like It
- I Henry IV
- Richard III
- Measure for Measure
- The Tempest
- Othello, the Moor of Venice
And the ones I didn't like:
- Much Ado About Nothing
- Coriolanus
And the ones I found too boring to finish:
|
|