I'll be hacking on my hpodder program this weekend. hpodder is a full-featured podcast aggregator that runs on the command line, and has many features over other command-line podcatchers like bashpodder, and even over GUI tools like iPodder.
I originally envisioned hpodder to be something that I'd cron up and run in the background. But I have tended to run it in the foreground more than in the background. Some others have too, and the #1 requested hpodder feature is parallel downloads.
So I am working on that. I already have code working, in fact, that will parallelize both the hpodder update (downloading the feeds) and the hpodder download (downloading the actual episodes) commands.
Unlike ipodder, my code will make sure that no more than 1 thread will ever be downloading from a given server at a given time. ipodder had the terribly annoying habit of pointing all of its threads at a single server, thus pounding it while also providing little benefit for someone with a pipe fatter than the server's.
Before all this multithreaded stuff could be written, I needed to write my own status bar code instead of just letting curl display its own status bar. (That wouldn't work when there are 5 curls running at once)
I decided that I would write some generic status bar code, rather than something specific to hpodder. I took the apt-get status bar as an example, and whipped one up in Haskell and added it to my MissingH Haskell library.
But a status bar just begged for another feature: a generalized progress tracker. Something that could keep track of where a task (and its sub-tasks) are, calculate ETA, estimated time remaining, speed, etc. So I wrote that and made the status bar use it.
AND, a status bar begged for a generalized numeric formatter: something that could render 512 as 512, 2048 as 2K, 1048576 as 1M, etc. So I wrote that, and it's general enough that it can render into both SI and "binary" units by default (and others that users may want).
Finally, I wrote a function to take a number of seconds and render it in something friendly like 23m5s like apt uses, and shoved that in MissingH as well.
So now hpodder will have a status bar, and any other Haskell program can use the same status bar code in minutes because it's all generic. Or if someone just needs to render a number in megabytes, they can do that.
I really enjoy it when a program needs a solution that is generic enough to put in a larger library. I try to put as much of my Haskell code in MissingH as I can, so as to make it useful to others (and my other programs).
Recently, I
asked for opinions on desktop Linux. Thanks very much to those that replied. I've set up an old laptop as an experiment. I'm using Debian, Gnome, and Systemimager. It's been an interesting project (especially getting SystemImager and a splash screen program to do what I want).
I'd like for my desktop machines to mount /home over the network. I could use NFS, but of course that has all the well-known security risks. Is there a better network filesystem that is easy to use, fast, and more secure than NFS?
I'm brainstorming about ways of setting up Linux desktops machines for people used to Window users on a LAN. It could be any size of LAN.
I'd like people to be able to sit down at any Linux machine on the LAN and log in -- probably use a LDAP directory for that, and NFS-mounted home directories. I wouldn't want to NFS-mount the entire thing for performance reasons.
So, some of the things I'm thinking about are:
- Desktop environment: KDE or Gnome? Which would give Windows users all the tools they'd want? Which would they feel most at home with? I'm thinking it's KDE, but Gnome has a more polished "feel" too it.
- Image management. How could the desktops be updated? Just rsync everything except fstab over? Can we actually have a single system image? Is XOrg powerful enough to just recognize hardware at boot and Do The Right Thing? Can we build a unified initrd somehow?
- Distribution. Debian, Ubuntu, Kubuntu? Do the Ubuntus bring anything to the table, if we take as a given that an experienced Debian admin is managing all this?
- Laptops. What do we do about the home directories there? Some sort of automated rsync thingy?
- Installation. FAI? Or some homegrown thing that just boots up, partitions, and runs rsync?
Comments
Sun, 05.10.2008 20:40
There is no denying that there have been plenty of people th at have killed in the name of Christianity. That does [...]
Sun, 05.10.2008 18:34
I think the formula you wanted is git format-patch $(git rev-list HEAD | tail -1)
Sun, 05.10.2008 14:23
I know it sounds nice to you, but, Christianity means an opp ressive, theocratic, brutal, b loody regime to many of [...]
Sat, 04.10.2008 23:47
I agree that there must be sen sible limits on government exp enditure, for sure. Healthc are is one of those wher [...]
Sat, 04.10.2008 23:43
Not at all, and I completely a gree with you. But I wanted to stress that part, because not everyone does.
Sat, 04.10.2008 23:41
Hi Cliff, I agree with you that the "they take jobs Ameri cans won't" argument doesn't m ake sense. I also agree [...]
Sat, 04.10.2008 17:26
I always worry when people cla im their ethics are founded on religious tenets, since most religions have a lot of [...]
Sat, 04.10.2008 08:37
"We are torturing potentially innocent people." Are you i mplying that it's allowed to t orture "guilty" people? [...]