I started writing this post with the idea that I would just share a few resources that have proved incredibly useful for my/our thesis work. However, after writing the majority of the text for this post, I realized that this could be a good opportunity for others in the group to share some resources. The general prompt: “What are your resources?” Share them with the group. Whether they are blogs that you visit frequently, programming tools you’re interested in, writing samples, books, esoteric wikipedia entries, … etc. Put them here to preserve them for future generations.
Some recent additions to my set of resources:
For any of you in the group who are interested in going further with Python I have complied a brief list of resources that have been useful for me, and one that I have yet to test out but looks very useful. Specifically if you’re looking to implement 3D OpenGL graphics, computer vision, and/or machine learning algorithms in your projects take a look at the following resources.
1. Nicholas Rougier, a research scientist at INRIA, is the author of numerous software libraries. I have been using his OpenGL library for Python + NumPy quite extensively and have been very pleased by the continual development of the package. It has been incredibly useful for building 3D and 2D visualizations. Take a look at some of the examples (some very elegantly written Python code) and download the project from the google project’s page.
2. On image processing, structure from motion, and computer vision. Jan Erik Solem has written a really great book filled with example code and mathematical explanations of computer vision algorithms titled, Programming Computer Vision with Python. The book covers everything from setting up libraries with python, to basic image processing, homography, descriptors, camera modeling, multiple view geometry, and machine learning (clustering, searching, classifying, segmentation, etc). Many of the algorithms in this text are derived from Hartley & Zisserman Multiple View Geometry — the book often referred to as the ‘bible’ of computer vision. Another good resource that I found really useful is Marc Pollefeys’s book/set of notes titled, Visual 3D Modeling from Images. Also, if you are doing some CV projects, you should certainly have OpenCV installed on your machine. If you’re running Mac OS, then you can install OpenCV with Python bindings with incredible ease by using Homebrew, Mac package manager. If you’re new to OpenCV and CV in general take a look at Gary Bradsky’s O’Reilly book Learning OpenCV (you can read this online free via MIT’s library subscription). Bradsky’s book is a little outdated (2008), so you might have better luck just reading the online documentation for the latest version of OpenCV.
3. Also of interest is the Scikit-Learn machine learning in Python package. For a quick start check out some of the examples. This package could be used to directly for computer vision projects as well (even though many ML algorithms are implemented in OpenCV, perhaps this package will be easier to use/integrate into projects… yet to be tested).
4. Git – source control management. In working together on our thesis, Moritz and I needed to find a way to collaboratively work on versions of the same files and manage changes to gigabytes of files. At first we tried working with Subversion for version control, saving everything to a central server. This was working decently well, but we did run into some problems in terms of ignoring files that we didn’t want to upload and in being able to make separate development versions of certain areas that were were tinkering around with. After working with SVN for over two months we made the switch to GIT. We ended up installing GIT on our server and after a few day learning curve, we have found it to be better (for our purposes) than SVN. Maybe you’re familiar with or have visited github while looking for documentation on software or checking out other people’s projects. You can use github for free if you keep your repository within their allotted space limits, or you could set up a repository on your own server. And, if you want to use your MIT server space you can install git there with an auto installer — how convenient! Also, Moritz and I have been using SourceTree as a graphic interface client for our Git repository. Of course you could always just use the terminal…
5. Looking for a nice text editor for programming? Moritz found sublime text, and Carl, Moritz, and I have been testing it out for a few weeks now. The miniature/zoomed out view of the entire document is a cool feature. You can download the beta free. You may have to customize your environment a little bit to get things set up on your machine, but after that, everything works great. Also a plus, it runs on Mac, Linux, and Windows.
6. Want to batch process a bunch of images without using Photoshop or Automator? Try out ImageMagick and do batch edits from the command line. Some of the commands might seem archaic, but it is a really very powerful tool. For Mac users, you can also install this via homebrew package manager.
7. I have been doing some work recently where it is helpful to know the intrinsic parameters of a camera. For most cameras, this information is saved as Exif data in the image file. With Python you can use Python Imaging Library (PIL) to read the exif data for image files, but unfortunately not to write exif data. In terms of reading/writing Exif data Phil Harvey’s ExifTool does the job. I was surprised to learn how many file types contain Exif data… not just images.
8. (Extra)curricular browsing? When there is time I always enjoy reading Cabinet Magazine. Each issue is organized around a concisely stated theme. The most recent issue/theme is “24 Hours.” Also 032c is always excellent (however, many image here may be nsfw). For visual currency/distractions — time for some image-heavy blogs: ilikethisart.net, triangulationblog, rhizome.org.

What have you discovered recently? Or, what have you been using, visiting, looking at, listening to, etc… recently? Reply with links.

Hi DCG, Here are some things I can’t live without. Like Will, a lot of mine relate to programming. I’m curious to hear from others so that we can broaden the scope of this post. That said, here are my essentials:
Oldies but goodies:
1) WordPress. I do love scripting in PHP but I so hate dealing with web databases. (If you’ve ever wanted an if statement inside your html document, PHP is for you!) I use wordpress lately for every website I make, often simply for its “post-as-object” structure and category taxonomy. It’s used to create this site and many others that look nothing like the kind of “blog” it’s often associated with. A wordpress “theme” is a set of php scripts that call wordpress functions (or do anything with php) to generate html content. Themes can be extremely complex but what people often don’t realize when first browsing wordpress.org is that they can also be extremely simple. With a 5-line code that gets some posts and then loops through them, you’re off and running. WordPress is free and open so you can hack it however you please.
2) If you want/need to code in Javascript, Mootools, makes it a pleasant experience. The best mootools primer can be found here: walkthrough.ifupdown.com/walkthrough-1.2/start. JQuery does a similar job but ever since I worked on a project that required mootools I have never used anything else. A lot of internet resources say you need to know javascript before using mootools but I don’t buy that–I think it makes javascript “dive-in-able” for anyone who has programmed in another language.
New(ish) Discoveries:
3) Pygame is my go-to resource for drawing things (especially things that move) on screens and making/reading images. Robust. Straightforward. Works.
4) I also need some way to output vector graphics with Python. The SVG format is a web standard (most modern web browsers render .svg images) so I have been exploring ways to output directly into this format. SVG also supports animation so if you are nostalgic for Flash, you’ll like this. I started out using PySvg but now am much more a fan of the SvgWrite library. SVG files are xml based, which means you can (among other things) open them in a text editor and understand them.
5) Chiplotle! It lets me control my plotters with Python. It also can be used to create .hpgl files, which can be plotted using your friend’s plotter and may be readable even by some contemporary vinyl cutters. (Many devices have an “HPGL emulation mode” which allows them to understand this primitive language)
6) I used to use this horrible shareware app to make animated gifs. I recently discovered you can file-open in photoshop and pick the first image in a sequence, check the image-sequence box, and you’ve got a multi-frame image. Do anything you want like resize or do adjustments then save-for-web as a gif and that’s it. (This may be one of those things that everyone new about except for me.)