Michael Kerrin

Web, Python, JavaScript and related technologies

Open Data Hack Day, Galway – Saturday May 14th

leave a comment »

An other Open Data Hack Day will be held on Saturday the 14th May from 10am to 5pm in the 091labs in Galway city center.

The goal of this Hack Day is to build on the work that gone into the previous hack days and to build on the opendata.ie website to promote Open Data in Ireland. But if anyone wants to come along with their own idea for a project we will find other interested parties to push the project forward.

To give people an idea of what happens on the day the following is an incomplete list of projects that people have worked on at previous hack days. Each project involved finding and collecting data, and in most cases writing a computer application to visualize and make sense of the data:

But for those that aren’t of a technical nature but are interested in Open Data, please come along during the day to see what is happening and to share your ideas of what would be a really cool application that you are interested in.

We will be around all day so everyone is encouraged to come along for the whole day or only for as long as they can make it.


Written by mkerrin

2011, April 29 at 7:25 pm

Posted in Open Data

pwt.jinja2js 0.6.0

with 2 comments

I have just uploaded a version 0.6.0 of pwt.jinja2js. This adds support for default values for macros arguments. So now you can do this:

{% macro defaultparam1(name = "World") -%}
Hello {{ name }}!
{%- endmacro %}


And you can call this like so to produce the desired output:

defaultparam1({}) -> "Hello World"
defaultparam({name: 'Michael'}) -> "Hello Michael"


Written by mkerrin

2011, April 5 at 10:33 am

pwt.recipe.closurebuilder 0.9.3

leave a comment »

Released new version of pwt.recipe.closurebuilder to PyPI. This just contains small updates to the closure libraries from Google.

Written by mkerrin

2011, April 4 at 10:30 am

pwt.jinja2js documentation

leave a comment »

The documentation for pwt.jinja2js has now been uploaded to PyPI. See them here.

Written by mkerrin

2011, April 4 at 9:45 am


leave a comment »

I have just released pwt.jinja2js This is my compiler for Jinja2 templates that compiles to Java Script. If anyone noticed I renamed the project from pwt.jscompiler that I previously announced on this blog. But pwt.jinja2js is now released to PyPI which should make it easier to use and fixes the name in stone now.

I started this project so that I could easily use templates in my Java Script code. Most other Java Script templates require web developers to include the template they want to render inside the HTML returned from the server. This is annoying as you have to remember to include both Java Script and your HTML snippet in the response, increasing the load of the HTML page resulting in slower website. I found and used Closure templates for a while. This does what pwt.jinja2js does and inspired me to work on this project. But closure templates is a Java project and the only way to use it in a Python project is via the command line which is annoying.

pwt.jinja2js works by compiling any macros found inside your Jinja2 template into a Java Script function that you can call just like any other Java Script function and it will return a rendered string of your template and data. It is then up to you to do what you want with this string. In order to know what function to call pwt.jinja2js uses the name of the macro as the name of the Java Script function but also includes a special namespace node that you can include in the top of the Jinja2 template so that all the Java Script functions are called after their macro name prefixed with the namespace supplied. So that you can avoid namespace conflicts.

pwt.jinja2js can be invoked numerous ways, the two main ways been on the command line by calling the jinja2js script which you get for free after running easy_install pw.jinja2js, which just writes the output of templates disc which can then be served along with all your other static files. The other way is to configure a WSGI server to run the pwt.jinja2.wsgi.Resource application. This will find all your templates in the same way as Jinja2 does and will render them on the fly and return them with the correct mine type so your browser will treat it as Java Script. For performance considerations you should compress your Java Script including the generated Java Script from your templates with a tool like Closure compiler, YUI Compressor, or any other similar tools. I personally use pwt.recipe.closurebuilder to integrate the closure compiler with my zc.buildout build to get the best result.


Written by mkerrin

2011, April 1 at 3:55 pm


with one comment

Following up on my pwt.recipe.closurebuilder announcement, I have pushed a new project to github called pwt.jscompiler. The goal of this project is to write a JavaScript compiler for Jinja2 template engine. My work builds on Jinja2 reusing as much as possible. The idea is to write templates that can be reused to a limited degree between your Python code running on the server and your JavaScript code running in the browser. There will be limits to what can be supported for now. This is a pre-alpha release. It needs a bit more work to be fully functional and with as few bugs as possible.

pwt.jscompiler will take a Jinja2 template with macros in it, and compile all the macros to JavaScript functions. I have added a namespace node to Jinja2 so that I can generate meaningful names on the macros and so that I can use Closure library namespace and dependency management features. Currently I don’t support not using closure library but this is a bug and will be fixed in the future.

Other features of the pwt.jscompiler is the ability to serve the templates via a WSGI application that compiles the template to JavaScript. This is handy for development where you can put <script> tags in your page pointing to the WSGI application and template name. It also supports integration with the pwt.recipe.closurebuilder. To use integration all you need to do is change the dependency recipe that finds and maps all your JavaScript dependencies from pwt.recipe.closurebuilder:dependency to pwt.jscompiler:dependency and include the directories of your Jinja2 templates like you would for any JavaScript dependencies. The integration will compile your templates to JavaScript into a temporary file and add this to your dependency tree getting compiled down along with the rest of your JavaScript dependencies.

Written by mkerrin

2011, March 3 at 3:11 pm


with one comment

Its been a while but I am going to be releasing some open source packages in the near future.

First up is pwt.recipe.closurebuilder. This is a zc.buildout recipe that integrates with closure-library build system. Then pwt.recipe.closurebuilder makes it easy to find and minify all your JavaScript files that make up your application into one or more files. Obviously if you don’t use zc.buildout that it is not going to be of much use, but the idea behind the closure JavaScript dependencies is worth reading about IMO.

pwt.recipe.closurebuilder contains two recipes. One to generate a JavaScript file containing a database of dependencies between all your JS files using closure library namespaces. This is equivalent to the depswriter tool from Google.

The second recipe invokes the closure compiler to produce a minimized version of your code base. It uses the information gathered through the first recipe to find a list of all the files that you want to collect and minify into one small JavaScript file. This file is saved in a output directory specified by you and whose name is the md5 sum of the contents of the generated JavaScript file. This recipe is equivalent to the closurebuilder tool from Google.

The closure compiler is the best JavaScript to JavaScript compiler out there that minimizes your code the most. But using it repeatable and consistently can be a problem. As I use zc.buildout whenever possible integrating the minimization of your JavaScript into my build system of choice makes life easier.

Written by mkerrin

2011, February 22 at 9:08 am