Wednesday, August 22, 2007

Creating Audiobooks

I love my iPod. I love being able to carry around my entire music collection in my pocket. Being a long-time iTunes user, it's a shame I didn't discover podcasts before the iPod. But the real killer: audiobooks. They took me totally by surprise and I am enamored. Audiobooks from iTunes are expensive, but there are other sources. The problem is, when you rip audiobook CDs, you can get them into iTunes/iPod with no problems, but navigation is a Sisyphean chore.

Sure, iPod and iTunes remember where you left off, but a single inadvertent wheel click can undo that "bookmark." What's worse, my crazy entertainment-center-with-iPod-dock likes to spontaneously start the iPod playing when you turn the system off. No, I want the real thing when it comes to audiobooks. I want a single file or small number of files; I want them to show up in my audiobooks group thingy. There are guides on the web to get you thru these issues. (short version: create a single AAC encoded file and rename to .m4b, then import to iTunes) But the Holy Grail has been chapter breaks. I can remember "Chapter 12" better than 04:23:08. And I want them where the author intended, not necessarily at the unfortunate boundaries imposed by the CD medium.

Slideshow adapter to the rescue! Props to ejsjrnc over at iLounge for finding it and documenting it for the rest of us. It's a geek tool. But if you want what I want, you're probably a geek, too.

Monday, July 02, 2007

Here is Wisdom

Today I heard this on Key Life, and thought it was worth sharing and remembering:

No matter how rich or famous you may become, the number of people who come to your funeral will still depend on the weather.
--Unknown

Wednesday, June 20, 2007

Cole, Take 2



Here's a closer-up shot of the new boy in town.
Posted by Picasa

Bruning, Nebraska: Hot Air Ballooning Hotbed


Since I've begun to crew for a balloon-pilot colleague, I've become interested in this sport. I've been doing a little research. So, having grown up in southeast Nebraska, about 10 miles from Bruning, I was surprised to learn of a significant event that occurred there in 1960. The equipment used in modern hot air ballooning was first demonstrated outside Bruning by Ed Yost (who coincidentally died just a few weeks ago [No! Not in a balloon wreck!].) He was the first to use an airborne heater to keep the balloon aloft.

Of course, hot air ballooning had been around for almost 200 years at that point. The advent of a portable mechanism to keep the air hot allowed the pilot to maneuver in the vertical plane, and the sport received a shot in the arm. Currently there are, according to My Favorite Site in the World, 7500 balloons in the US.

I found it somewhat ironic that Southeast Nebraska would be involved in the revival of a sport which, as far as I know, has almost no participation in that part of the world. I don't recall ever seeing a hot air balloon as a kid. Someone, please correct me if I'm wrong about the dearth of ballooning in SE Nebr.

Ahh...Bruning. I have fond memories of Pastor Thomas Damrow, who shepherded the flock Trinity Lutheran Church in Bruning during my childhood there. God bless you, if you're out there, Pastor.



Tuesday, June 19, 2007

Chomsky Refuted?

While leafing through the Plain Dealer this morning, I came across an unusual spot. Seems there's a tribe of 350 or so in Brazil with an actual "primitive" language. As a student of linguistics, I have long accepted the claim that no language is primitive, that is, any thought can be expressed in any language. Building from these assumptions, smart folks like Noam Chomsky have tried to distill what the common denominators are to all human languages: Which features of human language are "hard-wired" in our brains from birth? What allows us to acquire language and use it to express abstract thought? They have claimed for several decades that certain universals are found in every human language, or shall we say, almost every human language?

The language of the Pirahã tribe of Brazil reportedly lacks some of the "universal" constructs we'd expect to see in a language. According to Der Spiegel, one of these missing constructs is recursion. In English recursion is rendered using subordinate clauses. For example: "This is the dog that bit the man who came to our door." (Relative pronouns underlined, subordinate clauses in italics.) Clauses modify and describe each other, so in the end the full meaning of the discourse is dependent upon its context.

The chief expert on the Pirahã language today is Daniel Everett, who not surprisingly has been working among the tribe as a Bible translator. It may be that his analysis is incorrect or incomplete. Others apparently have been dispatched to test his claims. The Plain Dealer article (sorry, no link available as of this writing) mentioned that current traditionalists had regarded Everett's claims as "putative" and insufficient to revolutionize the study of human language. I hope that Everett is not being dismissed as a lightweight because of his work as a Bible translator.

In the end it may be that the Pirahã language will serve to advance the claims of the thought-depends-on-language school--those who claim, "You cannot conceive in your mind what you cannot find words for." I don't know. Something in my world view seems to reject this idea...e.g. God, Trinity, infinity. But I must admit I could stand to learn from those who've dedicated much effort in the field.

Friday, June 15, 2007

Coleman Steven

My, how our family has grown! We are proud to announce the birth of Coleman Steven on June 12, 2007. Here's the first official picture of "the boys." Praise the Lord for his blessings!
Posted by Picasa

Monday, April 09, 2007

Which Church Father are You?

As for me, the results are in...










You’re St. Melito of Sardis!


You have a great love of history and liturgy. You’re attached to the traditions of the ancients, yet you recognize that the old world — great as it was — is passing away. You are loyal to the customs of your family, though you do not hesitate to call family members to account for their sins.


Find out which Church Father you are at The Way of the Fathers!



Sunday, April 08, 2007

Harrison Hunting Easter Eggs


This is Harrison crawling around the room with his broken leg. :-( hunting easter eggs. He broke it on Tuesday, we think it was when he was getting out of a toy car. Anyway, he'll have the cast for a 3 weeks. It doesn't slow him down much as you can see. He's definitely an inspiration to me.







Tuesday, January 16, 2007

Sending text and html email with Java

Here's a useful snippet for sending HTML formatted messages with the JavaMail API. One problem that I see out there is that people like nicely formatted HTML messages, but they don't often include a text-only part as well. This makes the message inaccessible to certain mail clients. This Mailer class shows an example of what I consider to be best practice in this arena.

Enjoy!



// $Header$
// $Name$
package com.sherwin.ordering.util;

import java.util.Date;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

public class Mailer {

/**
* @param args
*/
public static void main(String[] args) throws Exception {

if (args.length <>
throw new IllegalArgumentException("2 arguments required");
}

String email1 = args[0];
String email2 = args[1];

Properties mailProperties = new Properties();
mailProperties.setProperty("protocol", "smtp");
mailProperties.setProperty("type", "transport");
mailProperties.setProperty("class", "com.sun.mail.smtp.SMTPTransport");
mailProperties.setProperty("mail.smtp.host",
System.getProperty("mail.smtp.host", // say on cmd line: -Dmail.smtp.host=xxx.yyy.zzz
"smtp.mycompany.com" // default if above not present
));

// setup the sending "session"
Session session = Session.getInstance(mailProperties, null);

String htmlString = "<html><body>This has <i>HTML</i> in it. google.</body></html>";
String txtString = "Hi text";

Address[] recipients = {
new InternetAddress(email1, "Smitty"),
new InternetAddress(email2)
};

// Assemble a MIME message
Message msg = new MimeMessage(session);
msg.addRecipients(Message.RecipientType.TO, recipients);
msg.setFrom(new InternetAddress("do-not-reply@mycompany.com", "My Company, Inc."));
msg.setSubject("Thanks for contacting us");
msg.setSentDate(new Date());
msg.setHeader("X-Mailer", "MyMailer $Name$");

MimeMultipart mp = new MimeMultipart("alternative");

MimeBodyPart txtPart = new MimeBodyPart();
txtPart.setText(txtString);

MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(htmlString, "text/html");

// it's probably important to have the txt part added first
// for the sake of less capable clients
mp.addBodyPart(txtPart);
mp.addBodyPart(htmlPart);
msg.setContent(mp);

Transport.send(msg);
}
}