Thursday, August 23, 2007

GUIs are evil

Well, not really. Like most things a GUI is neither good nor evil, but a shade of something in between. However, for a while, before I caught myself, I was spending large amounts of time writing GUIs for analysis. Time that would have been better spent writing analysis code and debugging it and documenting it and writing papers as a result of it. I taped a piece of paper in front of my desk that said 'NO GUIs' to remind myself.

Programming a GUIs is a time trade. Creating a GUI trades time now for time later. The catch is that the time later usually goes to an 'end user' rather than you.

When to write a GUI:
  • A GUI for MATLAB or Python is good for code that will be repeatedly used to run analysis by people who have no interest in knowing the underlying code.
  • A GUI is good for tasks that have a strong visual component: this means analysis that is done by displaying data on screen on which you have to indicate things by clicking on them.
  • Your analysis code is all finished and documented and you are regularly running analysis with it and you are getting tired of some repeated typing or repeated actions. Again, first think if you could write a glue script (in Python for example) rather than a GUI.
When to resist the devil's call:
  • The code is for exploratory analysis that may or may not yield results.
    "But I need to see stuff graphically, and I need to click on things to select regions or points", you say. Yes, MATLAB has ginput (look it up) and matplotlib has connect that can connect mouse and keyboard events to a graph. Don't make a full blown GUI that also makes coffee. That is the dark side.
  • The code has no graphical component to it (besides loading data and creating graphs).
  • Your sketch of the GUI has nothing but buttons and text boxes with parameters: replace the GUI with a nice, commented parameter file where the parameters have names. With the time saved write more documentation, take your spouse/SO/friends out or play video games.
  • You are coding the GUI before you have coded the smaller programs the GUI will eventually call. That is the dark side. Write the analysis components first, then decide if it will need a GUI package.
Also see:

Tuesday, August 14, 2007

Plotting packages for python

No time to check them all out now.

Loading matlab binary (.mat) files into python

It happens. You have old data in matlab .mat format or your colleagues insist, for some obscure reason, on using MATLAB. You need scipy.io.loadmat and scipy.io.savemat from scipy.

import scipy.io
X = scipy.io.loadmat('mydata.mat')


X now contains a dictionary whose keys correspond to the variable names saved in the original mat file.

UPDATE:
Nested dictionaries seem to be a problem. A kind soul has a short set of methods that converts nested dictionaries here.

UPDATE:

Look here (scipy cookbook) for how to handle mat files from recent versions of matlab

Sunday, August 12, 2007

Wikipedia vandalism

I have one data point for how long an act of vandalism stays on wikipedia:

On the page about fictional computers, at 17:23, 17 July 2007 a user from IP 82.7.212.36 added vandalism to the Before 1950s section of the article. It has been there until I removed it on August 12 2007.

So, this particular piece of vandalism lasted 27 days.

Sunday, August 5, 2007

Gravity Pods

I was looking for a 'game' just like this!



Set your initial trajectory so that the projectile winds is way to the target following a iso-potential line. Adjust sources and 'sinks' of gravity to adjust the iso-potential lines so that your projectile hits the target.

Betch'a didn't even think of iso-potential lines as you were busily setting up that rube-goldberg contraption!

Friday, August 3, 2007

Importing pdfs to inkscape

Install ghostscript and gsview. Load the pdf with gsview, goto edit->convert to vector format and choose svg.