It's wrong to judge a book by its cover. It's doubly wrong to judge an author by his jacket photo. If you were to do that with me, you would be forced to assume that I was some sort of rogue Muppet, eremite priest, or Russian dictator.

Patrick Rothfuss, author of Name of the Wind, http://www.patrickrothfuss.com/

05.07.13

Is the World Getting Better, or Worse?

Posted in Uncategorized at 4:30 pm

A FaceBook friend posed this question. It was a good opportunity to give a reasonable summary of my current thoughts on the world, so I’m also placing my answer here.

Better. But I have to keep reminding myself that.

Everything looks pretty horrible at the moment, but I think it’s largely because, having made such great strides over the last few centuries, and even the last few decades, some of us are more keenly aware of how very far we have yet to go, than anyone was before.

But racial problems, while still extremely high, particularly between whites and arabs, are still at the lowest they’ve been (compare with century ago when racial intolerance was even higher, and about equally very high against all of them).

Nationalism is a good deal less widespread than in the past, though those who remain nationalistic hold it with at least as much zeal as ever.

Minds are still being misled, controlled, and pacified by the powers that be, and while those who resist are still the vast minority, it is a far greater proportion than any time in history. Those in power, have far too much power, but not particularly more than they’ve always had.

Reason and science is still widely deprecated in favor of superstition and fear, but not as effectively as in the past, and despite horribly draconian controls on information, they are far, far weaker than typical in history. These last several generations have seen immensely more open access to information in general than has ever been available, in all areas (including government).

However, the powerful have learned to be more deceptive and subtle in their control and pacification techniques. They’ve learned that people do not tolerate blatant and obvious injustices done in their name, and yet all they need to do is obfuscate it only slightly, or give people enough doubt to assure themselves with. The age of empires has ended, the people do not tolerate it, but imperialism continues unabated, and empires persist in as great a force as ever, without calling themselves empires, and while pretending to let the nations lead themselves.

And, of course, social problems that never existed before the advent of civilization (i.e., in tribal cultures), such as hungry underclasses living amidst prosperity, severe poverty, many forms of crime, and a variety of problems that were born with the notion of property, are still in the decline they’ve been in ever since civilization was invented.

So overall, I’d say, much much better, and yet still so frustratingly distant from right.

09.11.12

Evidence for Macroevolution

Posted in Science at 1:46 pm

On Facebook recently, my brother asked why, if “macroevolution” is real, there aren’t more variety “in between” the species that exist today. I thought the answer to that question might be worth posting here.

The context of the question, was as comments to a tweet in which I thanked Richard Dawkins, citing his The Selfish Gene and The Ancestors Tales as having been instrumental in my scientific re-education, coming from a creationist homeschooler’s background (which my brother shares).

Among other things, all those in-between species did exist, and we’ve found scads and scads and scads of their fossiles. Most didn’t survive to today (except as fossils), because they were far less fit to compete with both descendents and cousins who were much better suited to their respective environments than today. Evolutionary jumps tend to happen when something in the environment or situation changes in a way that effects survival rates. This tends to provide strong death rates in the members that are poorly suited to deal with the change, providing a huge opportunity for members who are even just slightly better-suited to reproduce exponentially. Every small variation that is introduced that provides any sort of benefit in the new environment, reproduces quickly, because of its usefulness.

But the biggest evidence is in our genes. Every important variation introduced in a species, is genetically present in that species’ ancestors, written much the same way as in the original (minor variations obviously happen, but they bear the clear vesitages of the original genetic code). Sometimes, these features disappear, eradicated to make way for other more important features; but when these features actually disappear, and don’t transform into other ones, the genetic code for the abandoned feature still exists in the descendants’ DNA – either no longer activated to produce proteins, or subdued through variation or other genes, so that the effects they produce are just “quirks”, not particularly useful nor harmful. There are plenty of cases where retro-viruses (viruses which operate by implanting themselves in a cell’s DNA strands) were absorbed into reproductive cells, and deactivated. Those viruses are then passed on to that organism’s descendents (all in the same relative location), which adds very concrete proof that a set of species (often very diverse species) share an ancestor. Human beings, ourselves, carry such viruses as obtained from ancestors we share with chimps and other apes. It’s “garbage” DNA code, that’s inactive and has no effect, and corresponds to a known retro-virus that still exists in the wild. If it were activated, its effect would be the death of the host.

Another thing that tells us of our common heritage with the chimp, aside from the fact that 98% of our DNA is identical to that of a chimp, is that the reason we have one fewer chromosomes than chimp DNA, is that two of the chromosomes present in the chimp, are fused to form one chromosome in us. All the same basic code structure is there, but the “chromosome separation marker” got glitched into uselessness, resulting in just a single chromosome where two existed previously.

Random variation tends to be detremental far more often than progressive (usually just resulting in spontaneous abortion, or else a single organism, or a short-lived family, that doesn’t survive or reproduce well in comparison with its cousins), and even the ones that are progressive, are usually tempered with severe drawbacks that undermine survival only _slightly_ less than they improve it. This leads to a pretty volatile state, where every tiny variation that helps improve that instability even a little bit, tends to spread very quickly due to the significant improvement in survival. This tends to lead to what’s basically evolutionary “jumps” between islands of stability, because the species that were introduced in-between those islands died off much more quickly than their more-stable cousins. But we still have proof that those instable in-betweeners existed, due to a truly dizzying array of discovered fossils.

We’re a series of patches, and our biology attests to that. We have far too many flaws built into us to be the work of a perfect designer – the worst of them are simply balanced away by a large array of other patches. One big patch occurs that improves our survival (but introduces other problems), and is usually quickly followed upon by progressively smaller adjustments that help even out the problems produced by earlier “solutions”. Evolutionary jumps start out very, very ugly, but are quickly (in geological terms) smoothed out by additional “hacks” that help us function better.

Aside from Dawkins, an even more important push away from a lot of my creationist misinformation, is this Index to Creationist Claims (and rebuttals).

09.12.11

Lying system calls

Posted in Linux, Software Development at 8:46 pm

Only Debian hackers are likely to grok this.

I just spent a week, maybe more, trying to look into a variety of very bizarre build failures for some packages, after building and installing newer versions of coreutils, dpkg and debhelper. Things like “install -d” dying because its destination wasn’t a directory (I’d check afterwards, it was), tar complaining about a file changing out from under it (always about symlink files, where the block of code in tar that could generate that error could never be evaluated for symlink files), and dpkg-deb –build complaining that a pre-installation script wasn’t executable, when it clearly was.

Of course, I was mostly treating these as separate, bizarre problems that happened to start up within a similar timeframe. Tonight it suddenly dawned on me that maybe all these system calls appear to be lying to me, because they are. They are, and building a package in fact typically involves running a program whose job is specifically to make system calls lie: “fakeroot”.

Fakeroot is of course only intended to lie just enough so that programs think they’re running as root, even though they really aren’t. But fakeroot’s documentation clearly states that it will not work correctly if the programs running underneath it are linked against a different version of the system libraries. The seeds of this problem were sown some years ago when we built and installed a newer version of libc6, but the problem didn’t manifest itself until now, because the most commonly-used utilities for building packages are dpkg, debhelper, and coreutils, all or most of which were not updated until I updated them just a week or so ago. Gah!

05.09.11

Quotes from Wise Man’s Fear

Posted in Uncategorized at 10:02 am

Patrick Rothfuss, author of The Name of the Wind, and its recently-released sequel, The Wise Man’s Fear, recently solicited people on his blog for their favorite quotes from The Wise Man’s Fear. I read it on my Kindle, and highlighted most of my favorite passages, so it wasn’t much work for me to come up with a list, which I posted there. Figured I might as well put it up here on my blog, too, while I’m at it.

As a pianist, I can empathize with, “This is why there are so few musicians. A lot of folks can sing or saw out a tune on a fiddle. A music box can play a song flawlessly, again and again. But knowing the notes isn’t enough. You have to know how to play them.”

Though I love to play, I rarely listen to live or recorded piano performances, because too many people are focused on being technically accurate rather than being emotive. One counter-example would be Rachmaninoff, but of course his recordings are old and low-quality. You can still hear the difference loud and clear, though.

“My rooms were so pleasant it took me almost a full day to realize how much I hated them.”

“I idly wondered how exactly one was supposed to lounge. I couldn’t remember ever doing it myself. After a moment’s consideration, I decided lounging was probably similar to relaxing, but with more money in your pocket.”

“[T]he only act of creation I accomplished was to magically transform nearly a gallon of coffee into marvelous, aromatic piss.”

“I briefly entertained the notion that I was insane and didn’t know it. Then I considered the possibility that I had always been insane, acknowledged it as more likely than the former, then pushed both thoughts from my mind.”

“Only a fool worries over what he can’t control.” (Like the musician quote, this one resonates closely with something I frequently think about.)

And, finally,

“‘But no. I won’t lock you up. You haven’t done anything less than proper.’
  “‘I broke that boy’s arm,’ I said.
  “‘Hmm,’ he rumbled darkly. ‘Forgot about that. He reached into his pocket and brought out ha’penny. He handed it to me. ‘Much obliged.’”

03.30.11

Final Fantasy 7 versus 8

Posted in Uncategorized at 11:06 pm

Recently on Facebook, I mentioned downloading the Japanese version of Final Fantasy VIII, and a college friend of mine on Facebook retorted with a “too bad FF8 sucked” comment. Here was my reply, which I think pretty much sums of the core ideas of VII and VIII fairly well. Please note: I absolutely adore Final Fantasies VII, VIII and X. VII and VIII are tied in terms of my affection for them, though given the descriptions below, from a purely story-focused viewpoint, VIII wins hands down. I think I’d love VI, too, if I could ever play it all the way through. IX and XIII are good too, but not in the same league as the others.

Spoilers ahead. Duh.

Oh, _ouch_.

Come on now, what’s not to like in a story involving a sorceress who can jump through time, a thrilling fight in outer space with your girlfriend who’s become possessed by said empress, a school that turns out to be a giant roving military behemoth (within which you’ll find a civil war), an amnesia-inducing magical necessity, and gorgeous cutscenes? And oh yeah: GUNBLADES!

Meanwhile, FFVII features a hero who lies to everyone (including himself) about his past, his real back story apparently being so loserly as to force him to claim his comrade Jack’s accomplishments as his own, who’s so stupid that even after he finds out that his teammate is a traitor who put the entire world at risk, he continues to allow him to be part of the team anyway, and who himself can be transformed into a helpless robot to do the whim of his enemies at any moment they choose.

I mean, I love both VII and VIII equally, but come on, how can you not love FFVIII? Sure, the amnesia-GF oh-hey-guys-I-just-remembered-we-were-all-kids-together-throughout-our-entire-childhood thing is kinda lame, but are you gonna tell me that Cloud making up his entire life because his real story is that he’s just a lonely, sad experiment gone wrong isn’t lamer? ;)

02.13.11

Announcement: Niwt (Nifty Integrated Web Tools)

Posted in Software Development at 7:06 pm

Alright, I’ve been working my ass off lately on this project, which I haven’t wanted to say a lot about until i had something reasonable to show for it. I now feel that I’ve reached this point (barely, and depending on your point of view).

Niwt is a project that aims to (eventually) reproduce most of the functionality of GNU Wget (and some additional), but with a radically different design philosophy—namely, that it is built entirely around Unix pipelines, and facilities to easily swap out or extend every existing piece of functionality with an alternative (or additional) program that offers equivalent (or improved) functionality. It is expected that this will result in a big trade-off between, the relative efficiency, lower resource consumption, and portability to other systems that Wget enjoys (which Niwt will certainly not), versus extreme and relatively easy customization. If a highly customizable tool is what you need, Niwt may (when it’s finished) fit your needs; if efficiency and general leanness are what is called for, it most likely will not.

In terms of functionality, Niwt has virtually nothing to offer at the moment. It can download files. It doesn’t have Wget’s automatic connection recovery (yet), nor does it have timestamping or recursion (yet). The point of this pre-pre-pre-prerelease is not to demonstrate what Niwt does, but what it could eventually do, and how it will allow you to do it. Every bit of Niwt’s operation is open and transparent to the user, and modifiable in every way.

To find out more about this project, please visit http://niwt.addictivecode.org/Niwt, and especially http://niwt.addictivecode.org/TryingOutNiwt to get an idea of how it works (though that page is best enjoyed with your copy of niwt already installed, which you can get from http://niwt.addictivecode.org/InstallingNiwt).

I’ve set up an IRC channel, #niwt @ irc.freenode.net, where I’ll try to be available when I can, and a users’ discussion mailing list at http://addictivecode.org/mailman/listinfo/niwt-users/ .

Try it out and let me know what you think!

Niwt’s source code is free and open source software, and is available under the MIT (simple BSD-style) license.

02.03.11

Japanese Mail Archive Character-Set Transcoder

Posted in Japanese Language, Software Development at 1:55 pm

I have no idea if this will be helpful to anyone else, but I’ll just throw this out there for the search engines to pick up, just in case. I wrote a Perl script to take a Sendmail mbox archive of email messages, and transcode the text of all their bodies, and the Subject and From headers, to UTF-8. This script may be had here. It reads in the archive on standard input, and spits the transcoded archive on standard output.

I’m subscribed to a few Japanese-language mailing lists (well, more accurately, one Japanese-language mailing list, a daily mail of the Slashdot Japan headlines, and Google Alerts for wget and tmux). The idea for this was for me to get Japanese practice by reading regular Japanese content on subjects I’m interested in.

The problem is, I just don’t read it when it comes in. The best time for me to practice Japanese is on the train, during my work commute. Which is why I have a Kindle 3, so I can browse Japanese websites on the train. So, I need these mails web-accessible. No problem, I can use a mail web archive tool, like hypermail.

But hypermail doesn’t like dealing with mbox files that consist of messages that are in various incompatible encodings; some of my mail arrives in UTF-8 (unicode), and others in ISO-2022-JP (a popular encoding for Japanese-language text). Hypermail doesn’t deal with encoded characters in the mail headers, and also I didn’t know what character encoding to configure Apache to tell the browser, because it differed from one mail to the next.

So I wrote this transcoder tool in Perl. It just scans through all the mails, decodes the Subject and From headers (currently leaves the others), and transcodes all ISO-2022-JP (or anything that’s not UTF-8), so all the messages use the same encoding, and I just configure Apache to use UTF-8 for all of them. The best part is that, now that the actual content and the server-specified character encoding agree consistently, I can use online tools like Hiragana Megane to process this web mail archive, and automatically provide pronunciations for words I’m not very familiar with.

The script requires the following Perl modules: MIME::Tools (for parsing email format), Mail::Mbox::MessageParser (for parsing mbox), and Text::Iconv (to handle the transcoding).

11.17.10

Slides from Wget Talk

Posted in Computers, Linux at 5:40 am

I’ve made the slides available from my Wget talk here in PDF form. You can also get the OpenOffice “Impress” file here, but note that it uses non-standard/non-free fonts, so most likely won’t display properly for you.

As part of my talk, I also used some recorded terminal sessions demonstrating wget usage, including prompts to wait for keypresses. I created these sessions using GNU Teseq (a project I wrote for debugging terminal sessions); but the sessions were then edited by hand and played using a specially-modified version of the reseq program (part of the Teseq project); those changes have not yet been pushed to the development sources. When I have time, I’ll push the final changes to the official development sources at savannah.gnu.org, and then make the automated terminal demos available as well.

Please note that full documentation on wget can be had at http://www.gnu.org/software/wget/manual/

Update 2011-01-04: The modifications to Teseq were pushed a few weeks ago, so I’ll go ahead and put the script files up; there’s a script demonstrating Wget’s automatic retry capabilities, and one demonstrating the --continue option, for continuing downloads across different sessions. These scripts are unlikely to be useful to anyone who isn’t familiar with the points I was making during the script’s run, but there you go. You’ll probably want to right-click the links and do a “Save as…”.

In order to process them, you need to go grab the development sources of Teseq; you do this by obtaining the Mercurial revision control software and the GNU autotools (autoconf, automake, etc), and then running “hg clone http://hg.savannah.gnu.org/hgweb/teseq/” somewhere suitable. Within the source directory, run ./autogen.sh and then do the typical ./configure && make && make install (all that’s actually needed to generate the reseq program is the ./configure step).

Once you have reseq installed, you run the scripts like: reseq --replay --halts auto-retries.seq. Press a key whenever prompted to do so by a green-colored message. You’ll want to do this replay in an xterm-compatible emulator, at least 80 columns wide. You can also play it without the prompts/pauses by removing the --halts option from the invocation.

11.06.10

Upcoming Wget Talks

Posted in Computers, Linux at 1:38 pm

If you’re interested in GNU Wget, and live in California within a reasonable distance of either Davis (semi-near Sacramento, in Yolo County) or Mountain View (Silicon Valley), then you may be interested in coming to one of the talks I’m scheduled to give at those two locations about GNU Wget. More information can be found here (Davis) and here (Mountain View). The Davis one will take place Novemeber 15th (a week from Monday), and the Mountain View one is January 5th.

Here’s the blurb.

GNU Wget is a computer program that retrieves content from web servers. It supports downloading via HTTP, HTTPS, and FTP protocols, the most popular TCP/IP-based protocols used for web browsing.

Its features include recursive download, conversion of links for offline viewing of local HTML, support for proxies, and much more. It appeared in 1996, coinciding with the boom of popularity of the Web, causing its wide use among Unix users and distribution with most major Linux distributions. Written in portable C, Wget can be easily installed on any Unix-like system and has been ported to many environments, including Mac OS X, Microsoft Windows, OpenVMS, MorphOS and AmigaOS.

It has been used as the basis for graphical programs such as GWget for the GNOME Desktop and KGet for the KDE Desktop and VisualWget for Windows. [From Wikipedia].

Micah Cowan was maintainer of Wget between mid-2007 and early 2010. His talk will discuss:

  • What is Wget?
  • My history with Wget
  • How to use Wget
    • Restartable downloads
    • Website archiving/recursive downloads
    • Fine-grained controls over which links to follow
    • Content conversions for local browsing
  • Wget shortcomings
  • Lessons learned while maintaining Wget
  • Issues unique to maintaining a GNU project
  • 09.21.10

    (Mostly) Harmless Faiths

    Posted in Religion at 6:41 pm

    I just started following Atheist Quote of the Day on Facebook. Today it asked its constituents the question, Most of us will agree that a faith based without evidence is irrational and negative, as most religious faiths are. However, what forms of faith, if any, do you think are good?

    Here was my answer:

    I like Buddhism, if you strip out the mythology and concepts like reincarnation. Siddhartha is said to have refused to make a definite statement about nebulous concepts such as reincarnation (see the book “Buddhism Without Beliefs”, which I must admit to not having finished).

    I like the Quakers (the Religious Society of Friends). Their faith is very simple and non-specific; the more liberal varieties don’t require a god (there are Atheist Quakers, though I don’t know many). They hold that every human has “the divine light”, which is non-specific enough that you could arguably define it to be “the human spirit” (which doesn’t have to be a non-physically-based entity)… Best of all, it does not approve of basing your life on a book. I’ve known of a few Atheists and Agnostics who came from a Quaker background, which honestly seems a fairly natural progression.

    Unitarianism seems okay. It’s not for me, being old enough to feel kind of stuffy and liturgical. On the one hand, by acknowledging some basic truth among all faiths, it might be considered to give some undue credibility to them; on the other hand, being forced to treat them all alike, it effectively prevents any specific dogmas or creeds from drawing too much attention and approval.

    Don’t know much about it, but from the little I do know Ba’hai seems alright. Probably suffers the same basic problems as Unitarianism. It has the key feature of not getting too caught up in any particular beliefs, because God supposedly is revealing himself through a series of clearer pictures (Christianity, then Islam, then Ba’hai…), and theirs is not the last revelation.