Newest programming project- Library Queue
A couple months ago I started work on a new personal project: Library Queue. The project is to build a website/webservices that will enable users to manage a queue for checking out movies from their local public library much like a Netflix queue. I'm not sure how other library web sites compare, but at least for the Salt Lake City public library (http://slcpl.org) browsing and searching for movies is not user friendly at all. It really could be soooo much better if they were organized and presented in a UI similar to Netflix or Redbox. And the other aspect is a queue of movies you'd like to watch at some point but don't want to put a "hold" on all the movies right then.
I'm thinking that you will be able to configure the queue system to look at your currently checked out movies and the currently on hold movies and then will only move things from in queue to hold when there is "room" for it. Meaning, if I set a limit to "Number of movies checked out or on hold" to 10, then I can only have 10 movies in checkout status or on hold. As soon as I return a checked out movie or cancel a hold on a movie that will open up a spot and the system will automatically take the next movie in my queue and place a hold on it for me.
Then I am free to browse and search for all the movies I want to watch and throw them all in a queue. The system will work through the queue and track everything.
That's the basic idea. I've started working on prototyping it and building tests for portions of the code. But it's still a long way from being functional. I hope to have something usable for myself in the next month or so. If I can get some help (or enough time) to make the UI decent then I might open it up for anyone to use. Right now, I'm building this with the SLC city library, but also plan to support the SL county library too. I've designed it so I should be able to add more libraries in the future.
Raising Money for a Film the New Way
The old way of raising money to make a film consisted of one or a combination of all of the following:
- Use your credit cards, max them out, apply for more and max them out. repeat until deeply deeply depressingly in debt.
- Beg family members, close friends for money for you project.
- Lower everyone's expectations of getting paid, if they had any to begin with.
- Search for and pitch like crazy to investors. This requires connections to those with money.
- Apply for some art grants. This may be difficult unless you or your project fit into the requirements for the grant.
- Mortgage your home.
- Sell plasma at the blood bank.
Ubuntu 10.04 upgrade
I've been using Ubuntu for a few years now and quite like it. And when I saw they had released 10.04 I was excited to upgrade. The last two releases I did an upgrade-in-place with their upgrade tool and I didn't run into any major problems. So I did the same thing for this release. But that's where this story begins.
First I noticed that I was getting warnings and errors related to my X.org config. This was very alarming since I've never seen that before and I don't run any thing unusual in my x.org config. I tried a few different things to address it but could never really solve the problem. Then I noticed that rhythmbox was always crashing on me. Like all the time. Oh and my startup applications would never start up as they were supposed to. And compiz wouldn't work due to complaints about in correct driver even though I did install the correct one.
So after complaining about it for a week to my coworkers they suggested that I back up all my important stuff and then do a fresh install. Complety wipe it and install from scratch with 10.04. So I bought an external hard drive (500G) and did that. The fresh install was soooo easy and quick. I then carefully restored data back to my home folder. If you are doing this be careful not to copy back .gnome2 or .gvfs or anything .g* or at least be very cautious in doing so. Those could break things on an upgrade like this.
Conclusion- the fresh install worked beatifully. Ubuntu 10.04 works great and i'm not seeing any of the problems I had earlier. In fact it also fixed a completely separate issue I was having with my wireless card. So I'm definately still an Ubuntu fan.
ideas for blog posts
I haven't written for a while, but I have gathered several ideas to write about. Here are a few of them:
- My SageTV setup, and why I chose to go with SageTV versus MythTV, or TiVo or others.
- Controltier. This is an automation framework for deploying and managing software. It is a bit complex but can be very powerful. I use this at work.
- My presentation at Postgresql Conference East, entitled "Postgres Administration for Sysadmins". This presentation covers basics of configuration and running Postgres and monitoring your database.
- An updated how-to for Virtual Box- setting up several servers and getting them to talk to each other.
- How-to on getting CUPC (cisco's chat/video thingy app) working in Virtual box vm.
- Snippets of some of my screenplays (works in progress).
As you can see, I actually do have things to write about, now if I could only make the time.....
Music covers are interesting
For some reason I'm drawn to music covers. I like to hear new versions of the same song be different artists and compare styles and interpretations. I have another blog post from a long time ago that mentions an idea for a mp3 player plugin that would connect to SecondHandSongs to query their database of song covers and provide information on the current song and related covers if any.
Well, I actually have renewed the desire for such a plugin and have a few links of resources to help be get started on this:
- http://www.secondhandcongs.com (of course)
- http://code.google.com/p/rhythmtoweb/
- http://live.gnome.org/RhythmboxPlugins/ThirdParty
- http://live.gnome.org/RhythmboxPlugins/WritingGuide
- http://www.grooveshark.com
- http://apidocs.tinysong.com/
My current idea is to ping SecondHandSongs with the song info and retrieve:
1. if this is a cover
2. if this is an original, with other artists covering it
3. if this is not found at all in their database
for 1 and 2, I'll get the list of all covers and artists, and then query TinySong.com to see if they have that song in their database. If so, they will provide a URL to listen to that song in a browser.
So you can listen to a song and say, "Hmm, I wonder if anyone has redone this song...", then right click on it, or something, and choose "Find Song Cover Info...", and then a list of songs and artists get displayed, and when you click on any one of them, it pauses your current music player, launches a web browser with the URL for that song cover and you get to listen to it right there.
Coolness.
learning something new
So I'm spending a little time to learn something new. I've been working on www.todocycle.net for a while now (actual hours spent are still pretty low, but with the little free time I have it's been a long time)... any hoo. I purposely chose to use some technologies with this site that I have never used before but had heard about and wanted to learn.
I started out with a few things that I am very familiar with, so that this project wouldn't take for freaking ever to get off the ground as I learn. I only spend about 3-4 hours a month on it, so my time better be well spent in order to see any visible progress. I started out with Postgres for the database, perl as the coding language, and CGI::Application as the MVC framework. All of which I'm quite comfotable with.
Then I chose a few things to work with to force me to learn. Template Toolkit for templating (I've been using HTML::Template for most other things), DBIx::Class for ORM (I've never really given and ORM a chance), and jQuery for a Javascript toolkit.
So far things have been a mixed bag. Picking up Template Toolkit was no problem at all and I am quite impressed by it. DBIx::Class has been another story. It has been a struggle for me to embrace it, and another one to try to get it to do what I want. I'm not giving up on it yet though. I want to give it a fair shot, but it was not a "learn it in one sitting and go to town" sort of thing like Template Toolkit was.
And then there's jQuery. I actually have been putting that one off becuase I was so focussed on the backend of things until now. I just started reading the docs on jQuery and have to say I am mightily impressed. I used Prototype before and disliked it. At my work, they use Yahoo's YUI toolkit, which seems big and bloated to me. jQuery is tiight, lightweight, and very easy to pick up.
So far:
jQuery A
DBIx::Class B-
Template Toolkit A
How to: Set up a few virtual servers on your desktop
This is an attempt at a how-to for getting a few servers up and running that can talk to each other as well as with your host desktop machine all with vitrtualization. This has been a personal desire for some time and I have read documentation about how to do this and have tried multiple times, and every time it seems that the job is complex and error prone. So this how-to will describe how I finally was able to get it working with almost no effort! Yeah!
First of all, let's set the scene and give ourselves a goal: We want to have a VM web server and a VM database server running on our desktop that runs a simple web application. The two machines need to talk to each other. And we want to be able to open our desktop web browser and access the web application running on these VMs. And do all that without any complex configuration or breaking your desktop's network settings.
The first thing we will use in this setup is VirtualBox (http://www.virtualbox.org/)
Where’s your cube again?
So, I had an idea and wanted to capture it before I forget. A relatively simple tool to graph a floor plan map of office cubicles with info about each cube- person who sits there, department, extension, and any other info about them. It could be done really easily with the right database structure and using the Javascript graphing library wz_jsgraphics.js (http://www.walterzorn.com/jsgraphics/jsgraphics_e.htm).
That way, all you would need is to maintain the data through an easy management tool, then your map is updated realtime online. And anyone can go to the map in their browser and mouse over a cube and get info, or do a search and get a highlighted cube within the map of what they are looking for.
Cover your bases (musically)
So I have an idea that I think would be really interesting. I like music. I like to listen to music. I like hearing new songs and discovering new artists. I also have a weird desire to hear the same song done in different ways by different people- covers.
I stumbled across SecondHandSongs.com and found that there is a database of cover songs (it only lists covers that were recorded and put out by a record label, no do-it-yourself or amateur covers allowed). Fascinating.
Now I come to the idea part. I think it would be cool to have a plugin for your favorite music player (Banshee, iTunes, WInamp, etc) that looks up the song from your play list and lists covers of that song, with other info perhaps or links to find more info. It would be really cool to see a list of others that did that song and be able to click on them to hear a sample of their version, or a link to a music service (or store) to buy/download the other version(s). And perhaps a way to rate them too? Not sure about that one.
Finally a way to build my own collection of nothing but covers of the song "Moon River"! (this is a joke, I actually hate that song).
Minimal AJAX toolkit
So there is a wide world of tools and methods for "web 2.0", and for
developers it is hard to know which one to chose to use and support. I
have tinkered with two AJAX toolkits and found things that I liked and
disliked with them. But overall I found that they were both too big
and too feature rich for simple use.
So it occured to me that for
some of my simple projects all I needed was bare-bone functionality,
meaning the ability to fetch the contents of a given url. Beyond that
I can do what I need in small simple javascript. I didn't need fancy
event handling, or animation, or auto-complete drop downs, or such.
And if I did, then I could probably do that my self later, as long as I
had the ability to easily fetch a URL.