The method System.console()
can return null
if there is no console device present. This
comes as a surprise to people when they run
their code in an IDE. This post is about overcoming such problems.
Sunday, 19 September 2010
Java: System.console(), IDEs and testing
Thursday, 16 September 2010
Java: "Content is not allowed in prolog" - causes of this XML processing error
Content is not allowed in prolog is an error generally
emitted by the Java XML parsers when data is encountered before the <?xml...
declaration. You may inspect the document in a text editor and think
nothing is wrong, but you need to go down to the byte level to understand
the problem. You probably have a character encoding bug.
Sunday, 1 August 2010
Java: a fluent I/O API (4/4)
This is the fourth post about my experiments with a fluent I/O API. This post covers conclusions and limitations of the implementation. You can find downloads and source repository details further down the page.
Java: a fluent I/O API (3/4)
This is the third post about my experiments with a fluent I/O API. This post covers how the API enhances exception handling.
Java: a fluent I/O API (2/4)
This is the second post about my experiments with a fluent I/O API. This post covers how to extend the API.
Java: a fluent I/O API (1/4)
I've been experimenting with fluent API design. You can find the sources in part 4.
I've often been frustrated with the verbosity of Java I/O. Handling close with decorators got better with the introduction of the Closeable interface, but there's still a bit of boilerplate. This post describes a new fluent API to wrapper around the existing I/O API.
Saturday, 17 April 2010
I18N: comparing character encoding in C, C#, Java, Python and Ruby
Don't assume that the character handling conventions you've learnt in one language/platform will automatically apply in others. I've selected a cross-section of popular languages to contrast the different ways character encoding is handled.
Tuesday, 12 January 2010
Scala: implementing a "did you mean..?" spelling corrector
I was looking at Scala again and decided to implement Peter Norvig's algorithm for suggesting spelling correction suggestions. I suggest you go read How to Write a Spelling Corrector for the clever stuff.
This implementation is limited to the English alphabet. You'll need the big.txt file or a similar set of training data.
Thursday, 17 December 2009
Java: safe character handling and URL building
This post discusses HTTP URLs in Java and how to avoid data loss due to encoding/escaping issues. Special mention is made of the query part, since it is frequently used to store data.
Thursday, 26 November 2009
Java: application to check binary class versions

Here's a simple application based on the code from a previous
post. You can run it on .class
files, .jar
files or directories (it'll recursively search them for .class
files). It will tell you what version of Java the contained code was
compiled for.
Download: javaClassVersionLib_1.1.zip
Tuesday, 17 November 2009
Java: how to use an IllegalArgumentException
Calling my web log Illegal Argument Exception seemed like a clever idea at the time. It is probably just a recipe for confusing Java neophytes searching for their program errors. I should've listened to what my granny used to tell me about clarity, precision, and terseness when choosing identifiers.
To make up for it, here's a short post about IllegalArgumentException
(the exception type).
Friday, 9 October 2009
JSF: working with component identifiers (id/clientId)
This is a post about how to work with IDs in JavaServer Faces. You may find this useful if you want to use JavaScript with JSF.
Example ID developer sets on a JSF component: foo1 What JSF might render in the resultant HTML: j_id_jsp_115874224_691:table1:0:foo1
This is a revised version of JSF: working with component IDs (id vs clientId), though you don't need to read that. This post fixes some of the issues with the code, provides a more robust version of the library and details how to use it to make simpler, more reliable applications. The target JSF version is 1.2.
Friday, 18 September 2009
Java: character inspector application

This is a small application that's useful for solving character encoding bugs. If you've ever wanted to find out exactly what characters you have, or what bytes they encode to with a specific encoding, this app may do the trick.
If you want to know more about character encoding in Java, read Java: a rough guide to character encoding.
Sources
All the sources are available in a public Subversion repository.
Repository:
http://illegalargumentexception.googlecode.com/svn/trunk/code/java/
License: MIT
Project: CharacterInspector
Saturday, 1 August 2009
JSF: a custom format panel control for localising component layout
This post describes a custom JavaServer Faces component for controlling the flow layout of controls based on localised strings.
Wednesday, 22 July 2009
Java: finding class versions
The JVM versions your Java classes will run on is often determined by how you compile them. Failure to take care with your classes and dependencies can lead to an UnsupportedClassVersionError. This post demonstrates how to check your class files.
Saturday, 18 July 2009
Java: effective Unicode
This is my attempt at a list of maxims to abide by when working with text in Java, in the vein of Effective Java or The Ten Commandments of Unicode. It is also a summary of another post on character encoding. The list is in no way comprehensive.
Thursday, 28 May 2009
Java: using XPath with namespaces and implementing NamespaceContext
XPath is a handy expression language for running queries on XML. This post is about how to use it with XML namespaces in Java (javax.xml.xpath).
Wednesday, 27 May 2009
JSF: using component IDs in a data table (h:dataTable vs clientId)
Updated 2009/11/24
This post is obsolete; go read this one instead: JSF: working with component identifiers The approach described in this post may fail if the component identifiers are not unique within the view.
Tuesday, 26 May 2009
Java: dynamically loading scripting engines (Groovy, JRuby and Jython)
Java 6 (via JSR 223) added scripting language support to the standard library. The JVM ships with the Mozilla Rhino JavaScript engine included. Where an engine is available, it is easy to add support for other JVM scripting languages. It is useful to be able to load these engines dynamically.
Tuesday, 19 May 2009
JSF: IDs and clientIds in Facelets
Updated 2009/11/24
This post is obsolete; go read this one instead: JSF: working with component identifiers The approach described in this post may fail if the component identifiers are not unique within the view.