IzPack 4.3.0 is out!
I am very pleased to announce the immediate availability of IzPack 4.3.0!
About IzPack
IzPack is a one-stop solution for packaging, distributing and deploying applications. IzPack is opensource, released under the liberal Apache Software License 2.0.
It is fully cross-platform and generates a single installer. As such, it is
an alternative to native solutions such as platform-specific installers and package managers.
IzPack-generated installers only require a Java virtual machine to run.
Many companies and projects have been using IzPack over the years, including Sun Microsystems, JBoss/RedHat, the Scala language project, some ObjectWeb/OW2 projects, XWiki and many more.
Downloading IzPack
IzPack can be obtained free of charge from its website at http://izpack.org/
Getting professional services
IzPack creator and project leader Julien Ponge offers paid professional services:
- one-time and subscription-based support
- consulting
- custom developments
- installer creation bootstrap.
Do not hesitate to contact Julien and get more informations from http://izpack.proservices.ponge.info/
Those services directly help in sustaining and improving IzPack.
About this release
This release is the result of a collective effort where our developers and contributors worked hand-in-hand to improve IzPack. Also, new developers have joined the project to bring further ideas and energy to the project.
About a hundred issues have been resolved in this release. The complete list along with JIRA issues can be reviewed at http://jira.codehaus.org/browse/IZPACK/fixforversion/14763
New features highlights
The release contains its usual set of bug fixes, small enhancements and documentation improvements. The new features include:
- Scripting support through the Apache Bean Scripting Framework
- Full console manual and automated installations
- Removal of NanoXML in favor of a javax.xml backend
- Ability to call Java classes before and after each panel
- Privileges elevation improvements
- Graphical reporting of launch-time errors
- AntActionListener improvement
- Configuration of the uninstaller path
- Compile-time variable substitutions
Greetings
The IzPack team would like to thank its developers and contributors for having made this release possible! We would also like to thank our numerous and growing users worldwide for pushing us forward!
Other thanks go to:
- The Codehaus Foundation and especially Ben Walding:Â http://codehaus.org/
- JetBrains for their amazing IntelliJ IDEA IDE:Â http://www.jetbrains.com/
- Atlassian for the tools that power some Codehaus services:Â http://www.atlassian.com/
- Sun Microsystems, especially the Glassfish and IPS teams:Â http://www.sun.com/
Further links
- IzPack website:Â http://izpack.org/
- Codehaus space:Â http://xircles.codehaus.org/projects/izpack/
- Mailing-lists:Â http://xircles.codehaus.org/projects/izpack/lists
- Confluence wiki:Â http://docs.codehaus.org/display/IZPACK
- News feed:Â http://feeds.feedburner.com/IzPack
- Subversion repository:Â http://svn.codehaus.org/izpack/
- Git repository (synchronized from svn):Â http://github.com/jponge/izpack/tree/master
- FishEye SVN browser:Â http://svn.izpack.codehaus.org/
- JIRA issues tracker:Â http://jira.codehaus.org/browse/IZPACK
A todo list on Google App Engine… Python
It seems like everyone is getting crazy those days with the availability of Java for Google App Engine. While this is certainly a great addition to the Google cloud computing offering, I remain a bit puzzled on what it means for Java. Indeed:
- lots of libraries and frameworks need to be tweaked to run on GAE
- there is a whitelist for the classes that you can use, which means no threads, no static files for writing and so on
- datastore entries are bound by a 1Mb limit, which means no big uploads in your applications
- the effort to support specifications like JPA is great, yet I doubt it will be easy to port existing JPA-enabled applications over GAE as the persistence in GAE is not based on a relational model (which is not necessarily a bad idea by itself!).
Should you care about GAE / Java? My take is that it is a nice cloud computing offering, but if you choose to use it then you should expect to develop your applications specifically for it. Making hybrid GAE / normal webapps is probably worth too many headaches
People should not forget that GAE first appeared with Python, a great language by itself. The GAE Python framework is quite simple to use, while the view rendering part is based on the elegant Django templates.
Just to break with the massive trend toward playing with GAE / Java, I wrote a stupid todo lists manager with the Python flavor:
- live at http://jpz-todolists.appspot.com/ (works with your Google account)
- code at http://github.com/jponge/pyappenginetodolist/tree/master
Building the application in Python was relatively simple and painless. The only point that annoyed me a bit is the handling of URL mappings, as you need to specify it in your app.yaml and also in your controller class, which sounds like breaking the DRY principle.
The persisted model definition can't be any simpler:
class TodoEntry(db.Model): user = db.UserProperty() text = db.StringProperty()
db.UserProperty() allows to link with a Google Account.
Fetching one user todo entries is simple:
entries = db.GqlQuery("SELECT * FROM TodoEntry WHERE user = :userid", userid=user)
Handling the authentication is also very simple:
def authenticate(self): user = users.get_current_user() if not user self.redirect(users.create_login_url(self.request.uri)) else: return user
One last excerpt: rendering a view through a Django template:
values = { 'userid': user.nickname(), 'entries': entries, 'logout_url': users.create_logout_url(self.request.uri) } tpl = os.path.join(os.path.dirname(__file__), 'todo.html') self.response.out.write(template.render(tpl, values))
Look at the code, it is quite straightforward and easy to understand, so if you already know Python, don't forget that GAE / Python works just great too
Scala and DSLs
Tonight I wrote something quick in Scala to make a small DSL (just for fun).
I started with a small Email class:
class Email(name:String, address:String) { def standardForm = name + " <" + address + ">" override def toString = this.standardForm }
which is really stupid: it wraps a name along with an email address, and it adds a convenient textual output form.
Now I would like to be able to write something like:
val me = "Julien Ponge" is "julien" at "gmail.com" println(me)
To do that I wrote a simple builder:
class EmailBuilder(name:String) { var id:String = "" def is(str:String):EmailBuilder = { id = str this } def at(str:String):Email = { new Email(name, id + "@" + str) } }
then an implicit conversion function:
implicit def emailBuilder(name:String):EmailBuilder = new EmailBuilder(name)
And that's it.
You should always learn new languages: they are all worth something great! Be polyglot, seriously.
By the way I heard that some of the Scala features are coming to the next major version of Groovy, which is going to be exciting!
IzPack 4.3.0-rc2 released
We need you to:
The full list of changes is available from our JIRA tracker.
Thanks for testing!

