The Argument from Analogy

random — oliver on September 23, 2009 at 11:48 pm

The ninety-year-old man went to the doctor and said, “Doctor, my eighteen-year-old wife is expecting a baby.” The doctor said, “Well, let me tell you a story. A man went hunting, but instead of a gun, he picked up an umbrella by mistake. When a bear suddenly charged at his wife who was accompanying him in the woods, the man aimed the umbrella, shot the bear, and killed it!” The main said, “Impossible! Someone else must have shot the bear!” The doctor said, “My point exactly.”

Semantic Paradox

random — oliver on September 23, 2009 at 11:43 pm

There is a town in which the only barber, a man, shaves all the townsmen who do not shave themselves. Does the barber shave himself? If he does, he doesn’t. If he doesn’t, he does. Makes sense?

“Ma’, look no streams!”

random — oliver on March 12, 2009 at 2:20 am

Looking for efficient ways of loading files that run in the GB realm, in Java?

I recently played around with Java’s NIO API, which was introduced in JDK 1.4. As you may know, the traditional IO classes deal with streams, whereas the NIO API deals with block-oriented approach, which makes it considerably faster because the filling and draining of buffers is handled by OS, not JVM.

Anyway, what really caught my attention in the API, was the java.nio.MappedByteBuffer class. Memory-mapped IO means that data in a file can directly mapped to physical memory. Nothing new in the OS world, but this was previously not possible in Java. Just be aware that when dealing with writing, you are dealing directly with the disk memory - there is no separation between modifying the data and saving it to the disk (as in the traditional IO).

I’ve written a sample code snippet that uses MappedByteBuffer. The sample code maps the file in increments of 1 kB (block size), just for the demonstrative purposes. If you are dealing with files less than ~1.6GB on Windows or up to 2GB files on the Unix-based OS, you can comfortably make the block size equal to the file size and the entire file would get mapped at once. (Read more about the limit-related issues which will be addressed in JDK 7). I was trying to process a 10GB file, so I had to map the file in “sliding” blocks.

Note, however, that mapping file channels directly into memory makes sense only when dealing with very large files. There is no significant performance improvement when dealing with small files. Since the release of JDK 1.4, the java.io classes are actually implemented by the java.nio classes.

Below is a sample method that maps 1 kB at a time (again, this does not make sense in practice; you can comfortably map 1 GB files at once on any platform). The while-loop executes as long as there is still areas of the file that need to be mapped. The map method is the key, which returns the MappedByteBuffer. In order to make the contents into human-readable format, the buffer gets wrapped by a CharBuffer. Each line in the file, get stored into a class variable lines, which is of type List (see full source for details).

public void load() throws IOException {
	FileInputStream fis = new FileInputStream(fileName);
	FileChannel fc = fis.getChannel();
	MappedByteBuffer mbb = null;
	Charset cs = Charset.forName("ISO-8859-1");
	CharsetDecoder decoder = cs.newDecoder();
	StringBuilder sb = new StringBuilder();

	long bs = 1024L; // block size
	long fs = fc.size(); // file size
	long t = 0L; // total size

	if (fs != 0) {
		while (t < fs) {
			if (t + bs > fs) {
				bs = fs - t;
			}
			mbb = fc.map(FileChannel.MapMode.READ_ONLY, t, bs);
			CharBuffer cb = decoder.decode(mbb);

			while (cb.hasRemaining()) {
				char c = cb.get();

				if (c == ‘n’) {
					lines.add(sb.toString());
					sb = new StringBuilder();
				} else if (c == ‘r’) { // Windows
					continue;
				} else {
					sb.append(c);
				}
			}
			t += bs;
		}
		// The last line may not have ended with n
		if (sb.length() > 0) {
			lines.add(sb.toString());
		}
	}
}

The complete source code of the sample class: MemoryMappingReader.java.

Infinite Humor

random — oliver on February 12, 2009 at 2:00 am

Two cows are standing in the pasture. After a while, one turns to the other and says, “Do you realize that although pi is usually abbreviated to four decimal places, it actually goes to infinity?” And the other cow replies, “Moo.”

Infinite Regress

random — oliver on January 24, 2009 at 1:41 am

When debating the beginning of the universe, many often hide behind the infamous infinite regress idea. In other words, in order to explain the existence of the world by positing a “maker” raises the question of how to explain the existence of the maker. If another maker is posited, the question becomes, “Who made the maker?” And so on, or “ad nauseam,” whichever comes first.

My response to the very first cause of the cosmos? Just pull Lennon’s creatio ex nihilo (creation out of nothing) argument:

“Before Elvis, there was nothing.” — John Lennon

Rational Humor

random — oliver on January 24, 2009 at 1:26 am

The anecdote is motivated by Leibniz’s ideas–he was neither an optimist nor a pessimist, but merely a neutral rationalist.

Optimist: The glass is half full.
Pessimist: The glass is half empty.
Rationalist: The glass is twice as big as it needs to be.

Metaphysics the German Way

random — oliver on January 9, 2009 at 1:11 am

Aristotle is said to have said that meaning of life consists of happiness. St. Augustine thought it was to love God. Martin Heidegger, the famous twentieth-century existentialist, however, thought the authentic meaning of life is to live in full consciousness of death. Now that’s the “bright” way of looking at things…

Origin of the Word “Metaphysics”

random — oliver on January 4, 2009 at 5:15 pm

I recently came across to an interesting fact, which most people, I would claim, are not aware of. Most dictionaries define the word “metaphysics” as a division of philosophy that is concerned with the fundamental nature of reality and being and that includes ontology, cosmology, and often epistemology. One can easily read into the definition and think that the etymology of metaphysics refers to something that concerns matters beyond the physical world. However, the word actually comes from Aristotle’s work which was titled “Metaphysica”–a title given by a first-century scholar. The name referred to the fact that the treatise came after (i.e. meta- or beyond) his other treatise called “Physica.” Thus, the catchy name has nothing to do with matters beyond the physical world.

Estonian-Finnish-Russian Translation Services

random — oliver on January 3, 2008 at 3:36 am

I highly recommend Essenson Translation Services for any translation or interpretation requirements you may have.  They specialize in Estonian, Finnish, and Russian languages.  The company was started by Mai Essenson in 1992.  Quoting the site:

We provide translation services since 1992 and we specialize in Estonian, Finnish, Russian, and English cross-language translation and interpretation services. Please contact us […] for quotes or any additional information. We are currently developing our new website. We apologize for the inconvenience. Thank you!

Fraud Terminology

random — oliver on October 27, 2007 at 11:18 am

Missing Traders, Death Stars, and Spimmers.  Quite interesting page compiled by an Arizona CFE.

Next Page »
By Oliver Kaljuvee. 2007.