Layout PDF documents in Java with iText

iText is a free Java library for generating PDF documents inside your own applications. The library is easy to use and can produce great results with only little programming. The basic usage is pretty simple. Let’s take a look at a small “Hello World” application:

Document document = new Document();
try {
    PdfWriter.getInstance(document, new FileOutputStream("output.pdf"));
    document.open();
    document.add(new Paragraph("Hello World"));
} catch (Exception e) {
}
document.close();

Creating a new document object will initialize a new PDF document with A4 dimensions. The PdfWriter will be used to write the resulting document to an OutputStream, which is in the above example a file. After opening the document you can just add new paragraphs to the document.

Continue reading

NSToolbar basics

Building a Cocoa based user interface using the Interface Builder is really easy and produces great results quickly. But when I wanted to add a toolbar to a window, I had to realize, that Interface Builder does not support toolbars. So I started reading the apple developer documentation regarding the NSToolbar class and found out that it is actually easy to work with toolbars. There is just no Interface Builder support for them. So here comes a small howto about NSToolbar and its use in your applications.

Cocoa works with distinct toolbar identifiers to distinguish between multiple different toolbars in one application. The toolbars can be fully customized by the user and changes to a toolbar are synchronized to all toolbars with the same identifier. For example in an application with multiple edit document windows, all these windows would have a toolbar with the same identifier. If a user would change on toolbar, alle currently opened edit windows would synchronize their toolbars to the new changes.

Continue reading

Importing SSL certificates into svnX

I just wanted to connect to my subversion repository with svnX via the https protocol. Guess what, svnX did not want to connect because it did not trust my selfsigned certificate. The only way to continue was to dismiss the error message with no way to import the certificate.

Turns out that svnX is using the command line svn client to communicate with repositories. So you need to mark the SSL certificate as trusted in the command line client and then svnX will work automatically. To do that, fire up a terminal window and just list the contents of your repository:

svn list https://whatever.server.com/repository/

Now svn will print a certificate validation error and ask whether you want to dismiss or accept the cerificate. Accept it permanently to get rid of that warning. Now you can access the repository via svnX.

Cocoa memory management 101

Ok, so here it comes, my first Cocoa posting. I am pretty new to Cocoa and therefore this might be something you are more than familiar with, but for me it is handy to have a quick reference written down where I can look up things. So today I would like to talk about memory management. My coding background lies about 70% in Java, 20% in PHP and 10% in C/C++. So in the past mostly I did not have to worry about memory management topics, although I am familiar with the low level C/C++ way of allocating and releasing memory. Cocoa uses an approach somehow in the middle between automatic garbage collection and manual management. Once you get used to it, it is a very powerful tool and you have a much better control over the memory consumption in your applications than in Java while being less error prone than the C/C++ mechanism.

If you want to dive into the details of Cocoa memory management, I recommend you read the Memory management Programming Guide For Cocoa from Apple. For me it was the main source of information about this topic.

Continue reading

Converting MySQL character sets

MySQL uses character set definitions on different levels. There is a default character set for the MySQL server, one character set for each database, one for each table and even one for a single column. You should generally take care that you use a consistent dataset for all columns and tables inside a database and the database itself. There exists no SQL-command or command line utility to convert a database from one character set to another. Therefore I will describe a quick way to accomplish this.

Continue reading