The Java Platform Debugger Architecture (JPDA) API included in the JDK lets you connect to a Java debug session and receive debug events. This code allows you to do the same things you would normally do with jdb or an IDE debugger. This is useful if you want to write your own debug, diagnostics or metrics tools.
Wednesday, 11 March 2009
Saturday, 21 February 2009
Java: finding the validation mechanism for an arbitrary XML document
Unfortunately, there is no 100% foolproof process for determining how to validate an arbitrary XML document. If you are receiving a document, you should not leave choosing the validation mechanism to a remote party (e.g. downloading a DTD using its document-specified URI). Doing so opens your application to, at the very least, a potential denial-of-service attack. A validation mechanism may not even be specified in the document: W3 XML Schema (XSD) does not require it; RELAX NG does not seem to support such a mechanism. Then there are some XML documents that just don't have a schema of any form.
Nevertheless, there are times when you need to inspect a document to find out what it is. Most commonly, support is required for multiple versions of a document, where the structure and validation mechanisms change over time.
Note: when talking about validation, this post is not referring to whether the XML is well formed or not. Any XML parser should be able to check the syntax. This is about external constraints imposed on the document structure via a schema, DTD, etc.
Monday, 16 February 2009
Tuesday, 3 February 2009
I18N: a non-technical software bug
Can you spot the problem with the following dialog?
I expect the developers of the Steam installer are making trade-offs for the benefit of younger users - providing visuals to help match them with their language. However, using flags in software products is generally a bad idea.
Wednesday, 24 December 2008
Java: automating the equals method
I spend quite a lot of time writing Java code. I got to thinking about the time I spent implementing, testing, maintaining and just paging over equals /hashCode implementations. These common building blocks tend to work much the same way in most classes and I wondered if there were a way to make them go away.
Thursday, 2 October 2008
Java: how not to make a mess of stream handling
This article was written with Java 6 in mind.
Updated 2008/12/16.
/**
|
If you aren't careful with streams in Java, you end up with resource leaks. This article addresses some of the pitfalls of stream handling.
The examples that follow use implementations of OutputStream. Which output stream is not important - implementation details are encapsulated by the object and may change between Java versions. It is the developer's responsibility to honour the contract as per the documentation.
OutputStream.close(): Closes this output stream and releases any system resources associated with this stream. The general contract of close is that it closes the output stream. A closed stream cannot perform output operations and cannot be reopened.
New Java developers pick up pretty quickly that they have to close streams. Problems arise when they start thinking about how to do it.
Monday, 18 August 2008
Ant: automated deployment to WebSphere Application Server
It can be useful to automate deployment of enterprise applications to servers during development, either to automatically set up test builds or perform build verification during the kitting process. WebSphere Application Server (WAS) comes with a number of Ant tasks that can be used for this.
Saturday, 16 August 2008
HOWTO: Subversion in RAD7 on Fedora 8
A quick HOWTO on setting up Rational Application Developer 7 as a Subversion client on Fedora 8.
Tuesday, 5 August 2008
Java: int versus Integer
Changes in the Java language have made the differences between
int
and
java.lang.Integer
less obvious but every Java developer should understand them.
Unless otherwise stated, Java 7 syntax and types are used.
Many of these issues apply to all the primitive types and their wrapper types.
This post has been rewritten in 2013. The original post was still generating comments (not the good kind) five years after it was written. This post is more detailed and provides better examples. Old comments have been deleted to avoid confusion - new criticism is welcome.
Friday, 1 August 2008
Java: using XMLBeans to edit web.xml
web.xml (version 2.5) document.
Thursday, 31 July 2008
Java: determining the version of an XML document
A number of technologies can be used to automate this transformation, such as the Apache Commons Digester (a rules-based entity mapper) or XMLBeans (which provides schema-based bean generation).
Monday, 30 June 2008
Java: class names
In Java, it is possible to get a String representation of a class by calling the Class.getName() method.
Since Java 1.5 (AKA Java 5), it has been possible to get the canonical name using Class.getCanonicalName().
Monday, 26 May 2008
Sunday, 25 May 2008
C: Hello, World!
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
Thursday, 1 May 2008
Java: generating a DOS executable
Assembler: Hello, World! [2]
DOS, 16bit, x86
;syntax expected by NASM ;DOS, x86, 16bit org 100h ;start at address 100 mov ax,0200h ;AH=2 mov dx,0048h ;'H' int 21h ;int 21,2 (print char) mov dx,0065h ;'e' int 21h mov dx,006Ch ;'l' int 21h mov dx,006Ch ;'l' int 21h mov dx,006Fh ;'o' int 21h mov dx,002Ch ;',' int 21h mov dx,0020h ;' ' int 21h mov dx,0057h ;'W' int 21h mov dx,006Fh ;'o' int 21h mov dx,0072h ;'r' int 21h mov dx,006Ch ;'l' int 21h mov dx,0064h ;'d' int 21h mov dx,0021h ;'!' int 21h int 20h ;int 20 (terminate)
Compare and contrast with the debug.exe version.
Assembler: using debug.exe to write DOS programs
C:\WINDOWS\system32\debug.exe
Windows (XP) still comes with Debug.
C:\test>DEBUG -a 0C8A:0100 mov ax,0200 0C8A:0103 mov dx,0041 0C8A:0106 int 21 0C8A:0108 int 20 0C8A:010A -h 010A 0100 020A 000A -n PCHAR.COM -rcx CX 0000 :000A -w Writing 0000A bytes -q C:\test>PCHAR.COM A
Assembler: Hello, World!
mov ax,0200 mov dx,0048 int 21 mov dx,0065 int 21 mov dx,006C int 21 mov dx,006C int 21 mov dx,006F int 21 mov dx,002C int 21 mov dx,0020 int 21 mov dx,0057 int 21 mov dx,006F int 21 mov dx,0072 int 21 mov dx,006C int 21 mov dx,0064 int 21 mov dx,0021 int 21 int 20
Wednesday, 30 April 2008
Tuesday, 29 April 2008
C#: Hello, World!
using System;
public class HelloWorld {
public static void Main(String[] args) {
Console.WriteLine("Hello, World!");
}
}
