Mt. Daly Sunrise Timelapse
A timelapse of the sunrise on Mount Daly, Snowmass Village, CO. September 2010.
PermalinkPithos 0.3
...is released.
0.3 brings a few new user-facing features and some major under-the-hood changes. The most requested addition was Last.fm scrobbling support, so I finally got around to adding that.
I also re-implemented the libpiano backend in python. This is in no way a criticism of pianobar, which is a great pandora.com player if you're looking for something command line only. Lars's efforts greatly help Pithos; It's much easier to reverse-engineer some open source C code than decompiling a Flash binary blob. However, the use of libpiano in Pithos was rather unsustainable. It took almost as much code to connect the Pithos python code with libpiano as it does to communicate with Pandora's XMLRPC servers directly. Pianobar moved to an incompatible request-response API several months ago, so all libpiano changes had to be backported to the old, heavily-modified fork I had in Pithos. It got to a point where it was simpler just to rewrite in Python. This means Pithos no longer has a C dependency, allowing for a simpler build process and the use of architecture-independent packages.
Pithos 0.3 also fixes several bugs, and Stephen Ostrow contributed several nice-to-have feature additions.
For more information on these changes, see the new changelog.
Installation/build instructions, more information, and a donate button can be found on the main Pithos site.
PermalinkEquationExplorer adds Vector Field graphing
I added support for vector field graphing on EquationExplorer.
Click here to try it
On a related note, the EquationExplorer source code is now on github.
PermalinkNotes from MIT OCW Physics 8.01 & 8.02
My notes from MIT OpenCourseWare Mechanics (8.01) and Electricity and Magnetism (8.02)
Pithos: A Pandora.com player for the GNOME desktop
Pithos now has its own web site. Click here for the most updated information about Pithos
Pithos is my Pandora client for the GNOME Desktop. The official Flash-based client is a CPU hog, and Pianobar is command-line only. Neither integrate with the desktop very well, missing things like media key support and song notifications. I used libpiano, the backend of pianobar, to create a better Pandora player.
Pithos is already fairly stable and has most of the features of the official Flash version, but there are a few major bugs and important features missing.
You can find the source on launchpad. The UI is Python and pyGTK, but the libpiano backend is written in C.
I also made a PPA with packages for Ubuntu 9.04. You can install an updating Pithos daily build with:
sudo add-apt-repository ppa:kevin-mehall/pithos-daily
sudo apt-get update
sudo apt-get install pithos
Read More »
A Better Way to Manage Long-Running Applications
Many applications that need to constantly run in the background with occasional user interaction put icons in the Notification area. (Not systray! Notification area!)
They treat it as a convenient place to "minimize" themselves without cluttering up the taskbar, and for easy access on all virtual desktops. This abuse undermines the intended use of the notification area: for important system status information and notification of events.
Inconsistency also kills the user experience. Sometimes clicking the close button completely closes the program (GTG, Xchat), while sometimes it minimizes the program to the notification icon (Rhythmbox). Sometimes, clicking the notification icon raises the window immediately, but sometimes it only toggles the visibility state, meaning that it must be double-clicked if the window is open but covered. None of these correspond to what the user actually wants to do: What's that minimize button on the window for again?
Managing background applications is a window management problem. It's a failure on the part of the window list (taskbar) that it does not handle these types of applications very well. It's also with the window list that there exists a solution.
Google Chrome has a really nice feature called "Pin Tab." It shrinks a tab down to just its icon and forces it to the left of all normal tabs.
What if the same were applied to window management?
A little libwnck hacking later, and I had it implemented.
I commandeered the "sticky" ("Show on all desktops") state to pin windows, which means that the pinned windows are visible on all desktops, just like notification icons. They take up hardly any window list space, but are easily accessible. They remain right next to other taskbar entries, and are hidden with the minimize button, just like any other program.
Another benefit is that this does not have to be implemented for each program. Users can put any application there just by right-clicking and choosing "Show on all desktops." One feature that may be useful is automatically pinning certain windows when they are started. I currently have a wmctrl script for this purpose.
To try this out on Ubuntu 9.10, just run
sudo add-apt-repository ppa:kevin-mehall/libwnck
sudo apt-get update
sudo apt-get install libwnck22
killall gnome-panel
and start setting windows as visible on all desktops.
PermalinkMultiple Selection + Drag and Drop in PyGTK
There's no easy way to make PyGTK's TreeView drag and drop operations work together with multiple selection. When clicking to drag, it deselects all items except for the one under the cursor.
The solution is to trap the mouse click event. If the user does not drag, the click is synthesized when the mouse is released so that clicking one item to deselect others behaves normally.
I implemented this in GTG, but here it is in isolated form, under the MIT license, so you are free to re-use it.
The MultiDragDropTreeView class, DragDropTreeView class (that enables DnD operations) and a demo that compares them side-by-side can be downloaded below.
Getting Things Gnome 0.2 Released
The latest version of GTG includes my contributions:
- Integration with Hamster Time Tracking
- Support for "fuzzy" due dates ("now", "soon", and "later")
- Hierarchical tag organization
