Tools

Some software I've found useful in my research, but haven't worked on much myself.

Python

Tools for easing development in the Python language.

Depgraph

Scans a Python file for module dependencies, and generates code for Graphviz dot. Originally by Toby Dickenson. Good for giving you `the long view' on how your project is layed out. I've altered the originals a bit.

Construct_call_graph

Also scans a Python file dependencies and generates code for Graphviz dot, but this time sticks to a single file and searches for function dependencies. Originally by Prashanth Ellina. Good for giving you `the short view' for restructuring a single module. I've posted a brief example.

Lex/YACC parsers

David Beazley has written up a fun, pure-python Lex/YACC module called... Python Lex/YACC (or PLY). If you haven't worked with YACC-type parsers before, you might want to look at my implicit-multiplication notes.

LaTeX

Do you love macros? I love macros. Latex lets you write `beautiful documents' (pdf, dvi, html, ...) with macros. It can be a bit tricky to get things just right, but once you figure it out, it's easy to reuse the code.

I'll set up a page on what I've learned at some point, but until then see my packages, the Drexel Liki page, and the source for most of my papers (if you scroll to the bottom of the html for a paper, there is a source files link, or you can just navigate to /~wking/rsrch/papers/some-paper/src/).

Asymptote

Asymptote is a C++ style graphics drawing package for LaTeX. I've written a few libraries to make it easier to draw pictures for physics problem sets.

Web publishing

General html tricks

Server Side Includes and Cascading Style Sheets are a simple way to consolidate your website layout in a central location, making it easier to maintain consistency and apply changes.

XSL Transforms

I played around a bit with eXtensible Markup Language (XML) and the associated eXtensible Style Language (XSL) transforms for converting XML into HTML. While it works fine for making lists of macros, in the future I think I'd use Python. This may be due to my not bothering to install an Emacs mode for colorizing the code :p, but is mostly because I have a better feel for functional systems than for rule-based systems.

Literate Programming

Literate programming is a philosophy of computer programming based on the premise that a computer program should be written similar to literature, with human readability as a primary goal.

Traditional programs have human language comments interspersed in computer language code. Literate programs reverse this style, with computer language "comments" interspersed in a human language essay.

An excellent (and simple) literate programming tool is noweb. There is a hello-world example and some intro information on Wikipedia. There are also official quick and 6 page introductions.

Emacs

The text exitor that does everything. Take a look at the liki pages on emacs in general, unicode, and org-mode.

Xmodmap

Remap your keyboard in X! Ok, so not really a tool, but one of those things you wish someone had told you about earlier. Excellent for getting easy access to all those neat math and Greek UTF-8 symbols. You're welcome to my ~/.Xmodmap file.

gucharmap is a nice tool for finding unicode encodings for whichever character you're looking for.

Git

Git is a distributed verision control system. Highly recommended. For the one line needed to download a repository, look here. There is an excellent tutorial here, or you can take a look at my notes (best viewed in Emacs org-mode). See git-publish for a useful Git public-repository setup script.

Bugs Everywhere

Of course, you'll need a distributed bugtracker to go with your distributed version control system. Bugs Everywhere works well for me, although there are others. Disclaimer: I've done a fair bit of work on BE, so I might be biased.