My Software

FemPy

I've uploaded FemPy to my arch repository for your perusal. A release is coming soon.

Arch trees

This page (and the information on it) is obsolete. Do not use the Arch trees any more--they will go away soon. Please head over to my source control page for the latest and greatest.


This page lists my arch trees, along with their contents. To use these trees, get a copy of baz and type

baz register-archive http://tiker.net/archives/*year*-public

After that, you can get the newest version of the software by saying

baz get inform@REMOVETHIStiker.net--*year*-public/*category*--*branch*--*version*

Note that clicking the links in your browser gives you a 403 Forbidden HTTP error. This is intentional. baz can access these trees just fine.

2006-public

This repository can be found at http://tiker.net/archives/2006-public. It currently contains this:

  fempy
    fempy--mainline
      fempy--mainline--1.0
        base-0

  fempy-suite
    fempy-suite--mainline
      fempy-suite--mainline--1.0
        base-0

  pyangle
    pyangle--mainline
      pyangle--mainline--1.0
        base-0

  pylinear
    pylinear--mainline
      pylinear--mainline--1.0
        base-0 .. patch-1

  pymbolic
    pymbolic--mainline
      pymbolic--mainline--1.0
        base-0

  pytools
    pytools--mainline
      pytools--mainline--1.0
        base-0

  tagpy
    tagpy--mainline
      tagpy--mainline--0
        base-0 .. patch-1

Stuff will branch over from the 2005 tree as time goes by and changes are made.

2005-public

This repository can be found at http://tiker.net/archives/2005-public. It currently contains this:

  aufschrieb
    aufschrieb--mainline
      aufschrieb--mainline--0.0
        base-0 .. patch-2

  clockwork
    clockwork--mainline
      clockwork--mainline--0.0
        base-0 .. patch-2

    clockwork--releases
      clockwork--releases--1.0
        base-0

  fempy
    fempy--mainline
      fempy--mainline--1.0
        base-0 .. patch-1

  find-the-word
    find-the-word--mainline
      find-the-word--mainline--1.0
        base-0

  ixlib
    ixlib--mainline
      ixlib--mainline--1.0
        base-0 .. patch-3

  madman
    madman--production
      madman--production--1.0
        base-0 .. patch-37

  ocaml-library
    ocaml-library--mainline
      ocaml-library--mainline--0.0
        base-0

  pyangle
    pyangle--mainline
      pyangle--mainline--1.0
        base-0

  pylinear
    pylinear--mainline
      pylinear--mainline--1.0
        base-0 .. patch-8

  sdlucid
    sdlucid--releases
      sdlucid--releases--0.91
        base-0 .. patch-1

  tagpy
    tagpy--mainline
      tagpy--mainline--0
        base-0 .. patch-7

    tagpy--releases
      tagpy--releases--0.90
        base-0

  tvinfo-ripper
    tvinfo-ripper--mainline
      tvinfo-ripper--mainline--0.0
        base-0

  wgwam
    wgwam--mainline
      wgwam--mainline--1.0
        base-0

This repository is now closed.

2004-public

This repository can be found at http://tiker.net/archives/2004-public. It currently contains the following trees:

  madman
    madman--production
      madman--production--1.0
        base-0 .. patch-24

  mide
    mide--mainline
      mide--mainline--1.0
        base-0

  pyangle
    pyangle--mainline
      pyangle--mainline--1.0
        base-0

  pylinear
    pylinear--mainline
      pylinear--mainline--1.0
        base-0 .. patch-1

  pyrecious
    pyrecious--mainline
      pyrecious--mainline--1.0
        base-0 .. patch-1

  sokoban-solver
    sokoban-solver--mainline
      sokoban-solver--mainline--1.0
        base-0 .. patch-7

  wgwam
    wgwam--mainline
      wgwam--mainline--1.0
        base-0 .. patch-5

This repository is now closed.

More Drupal wizardry

I've been molding this site according to my publishing needs, and in the process of doing so, I've ventured into the Drupal source code. I've made a few changes that I believe are generally useful. Besides submitting them to the respective maintainers, I'll post them here for added accessibility.

  • I've modified the Drupal core to provide "Clean URLs" without needing proper mod_rewrite support. Instead, you only need to be allowed set the ErrorDocument to the provided 404.php page. There is a slight complication that the implementation handles properly: HTML forms submitted via HTTP POST cannot use these clean URLs since the form data does not propagate through the ErrorDocument redirection. This NOT FOUND: drupal-4.5.1-clean404-2005-01-04-v3.patch=patch against version 4.5.1 of Drupal implements this. (upstream)

    Update 1: It turns out that my web hosting company, Alturo, does support this. In order to enable it, you need to say RewriteBase / in .htaccess. They do not document that, though. (In general, they document fairly little.) As a result of this, I won't be maintaining the Clean-URLs-via-404 patch.

    Update 2: I've put a modified version of the patch onto the Drupal bug tracker that applies to current Drupal CVS.

  • I've modified and fixed inline.module in several ways in this NOT FOUND: inline-2005-01-04-v1.patch=patch: (upstream)

    • You can now specify [ inline:filename.ext] instead of only the number, for added link stability.
    • A bold, red NOT FOUND message is shown if the given file name or number does not exist.
    • The module previously generated spaces around the img and a tags. Those are gone.
    • Images are only inlined if linked to with [ inline:...]. If you say [ file:my.png], this will remain a file link.
    • The recent fix for multiple links in one node is part of this patch.
    • (The spaces were necessary to keep inline.module from picking up these example links.)
  • I've added two patches to the title module.

MiniIDE

mide is a minimal IDE born out of the need to automate the build-test-edit cycle. Its user interface should be pretty self-explanatory: Enter a make command, hit f9, wait, double click on an error message, correct the error, repeat. To compile it, you need Qt version 3 along with the uic. (Qt 2 should work, I haven't tested that. If you do, please let me know.)

A simple "make" should be enough for building, you might have to adjust the Makefile a bit (this works fine for my debian system). Installation is even easier: Copy "mide" and "mide-backend" to your path, that's it. mide-backend is a script that takes care of invoking the correct editor backends. It receives the following arguments:

mide-backend save <i>backend</i>
mide-backend open <i>backend</i> </i>file</i>
mide-backend position <i>backend</i> <i>file</i> <i>line</i>

Currently, only the NEdit backend works, and even for this to work, you need a patch to nedit which is included in the distribution. If you implement more editors, please send me the appropriate snippets of mide-backend. mide will have some zombie processes in most cases, which will go away when mide dies, this is a design limitation in Qt that's hard to work around, sorry.

Hey, and look: It's even version 1.1 now. Version 1.1 adds correct handling of warnings and tooltips containing the error on examine.

Download

You may download the latest version from my software repository.

The current arch tree is called mide--mainline--1.0.

Sokoban

So, I was wasting time before going to bed last night, like, by setting up this site, and by playing Sokoban. KSokoboan to be precise. Now, I made it up to level 12 of David W. Skinner's Microban level set, which is rightfully said to be pretty easy. Well, level 12 wasn't, at least not to me. (I admit that that's embarassing, but who cares.)

So, I made it to the "I can prove this unsolvable" stage of puzzle solving. But since I reckoned that someone would have noticed that this level is unsolvable, my mind immediately went to cheating. Unfortunately, nobody had published move sequences to solve Microban. I was absolutely clueless as to how this level might be solvable, and I just had to know. So, I wrote a Python program to solve Sokoban levels. You'll find sokosolve.py and a few demo levels in the sokoban-solver module of my 2004-public arch tree.

The program itself has two nested applications of A*, a usable (but half-baked) heuristic and a complete game model. In just 215 lines. Python never fails to impress me. Attached to this story you can see a dump of the program solving the level that had me so confused.

Software

I've written a fair bunch of software related to my research:

Active projects

Most of my software these days has to do with research:

  • hedge is an unstructured, high-order, parallel Discontinuous Galerkin (DG) code. Its design is focused on two things: being fast and easy to use. While computational efficiency dictates implementation in a low level language, these same low-level languages become quite cumbersome at a higher level of abstraction. This is where the “h” in hedge comes from; it takes a hybrid approach. It allows the user to specify a DG operator in a high-level, mathematically oriented language and then worries about the details of applying this operator in a matrix-free fashion across a wide array of execution environments, including CPUs, GPUs, and MPI-based clusters of CPUs and GPUs. Available under the terms of the MIT license.

  • PyOpenCL makes the industry-standard OpenCL compute abstraction accessible from Python. It features automatic cleanup functionality and tight integration with Numpy. In the same spirit as PyCUDA, rather than being merely a nice interface, it aims to enable a new, generative style of programming. Available under the terms of the MIT license.

  • PyCUDA makes the Nvidia CUDA compute abstraction accessible from Python. It features automatic cleanup functionality and tight integration with Numpy. But rather than merely a nice interface to CUDA, it aims to enable a new, generative style of GPU programming. It further contains a GPU-based array package and building blocks for common vectorial and reductive operations. Available under the terms of the MIT license.

  • **CGen allows syntax-tree-based generation of C/C++/OpenCL/CUDA source code. Available under the terms of the MIT license.

  • CodePy is a CPU metaprogramming toolkit that supports compilation of C code at runtime and enables dynamic linking of generated code into a running Python instance. Available under the terms of the MIT license.

  • Python bindings for existing software

    • MeshPy allows you to generate quality triangular and tetrahedral finite element meshes directly in Python. (MeshPy itself is MIT-licensed, but the mesh generators have more restrictive licenses that prohibit commercial use.)
    • PyMetis allows you to partition graphs into controllable-size lumps, or, as an application of that, partition finite-element meshes for use on parallel computers. (PyMetis itself is MIT, but Metis is non-free as defined by the DFSG.)
    • PyVisFile allows writing large files of visualization data in the Vtk and silo formats. Pyvisfile is under the MIT license.
    • islpy binds Sven Verdoolaege's integer set library to Python. islpy is under the MIT license, but it depends on the isl, which is under the LGPL.
  • Small "tool" packages

    • Pymbolic is a lightweight library to perform symbolic calculations in Python. If you need to take derivatives, expand polynomials or simplify expressions, Pymbolic is for you. If you neeed heavy-lifting procedures such as limits and integration, you might want to look elsewhere, as I'm not sure these will ever get implemented. Available under the terms of the MIT license.
    • Pytools is a mixed bag of Python usefulness. Most of my other Python hacks need this to work. Available under the terms of the MIT license.
  • Distributing other people's work

Not directly related to research, but still fun:

  • synoptic helps me keep my notes in order--research or otherwise. Available under the terms of the MIT license.
  • PuDB is a source-level debugger for Python. It runs in a terminal and is based on Ian Ward's Urwid library. Available under the terms of the MIT license. (but depends on a GPL library)
  • madman is like iTunes, only better. :) And for Linux. Licensed under the copyleft GPL2.
  • tagpy is a set of Python bindings for the media tagging library TagLib. Available under the terms of the MIT license. (but depends on an LGPL library)
  • A Linux/LIRC interface for the Intervideo XPC-RC01 remote. Available under the terms of the MIT license.
  • A Sokoban solver.
  • A Python/PyGame clone of the PopCap game Bejeweled.
  • The Unicode Input Helper, a unicode character map program with a bias towards typing math.

Inactive projects

  • PyUblas allows seamless interoperability between Numpy and Boost Ublas. Available under the terms of the MIT license.
  • Pyrticle is an experimental hybrid Particle-in-Cell solver based on hedge. It forms the testbed for our research into combining discontinuous Galerkin Maxwell field solvers with particle-based solvers for the Vlasov equation. Licensed under the copyleft GPL3.
  • Clockwork is a small time tracking script.
  • FemPy is a small finite element package in and for Python.
  • PyLinear is a (sparse and dense) matrix computation package for Python.
  • SDLucid is a multimedia wrapper library.
  • ixlib is a (mostly deprecated) tool library for C++.
  • WAM is a jump-n-run-n-shoot game about a mole. Incomplete.
  • Orbit C++ is a CORBA language binding which I helped create. It lives on in ORBit, Gnome's CORBA ORB.
  • MiniIDE is a tool for your edit-compile-debug cycle. Pretty old, but it does work.