<-- Back to Andy Balaam Home
Project Ideas
Below are some random things I'd like to do when I get time. Feel free to contact me (andybalaam BZZT artificialworlds.net) if you'd like to help with implementing them or fleshing out the ideas.
Gnome TV Guide
A conversion of my FreeGuide project to Python and GTK+/Gnome.
The implementation would be in the form of a back end library and several front ends.
Back end library
This would provide functions to:
- Supply Programme and Channel data on demand, from the storage area (see next point). This could either be by specific methods, e.g. getProgrammes( channel, start_time, end_time ) which returns all the programmes on the given channel which end after start_time and begin before end_time (this would be used by the main channel view), getSelectedProgrammes( start_time, end_time ) which returns all the selected programmes in a given time period (used by the personalised guide - maybe getSelectedProgrammes( channel_set, start_time, end_time )), getProgrammesMatching( favourite, start_time, end_time) used by the search function, etc. or simply using SQL queries, or both could be offered and the specific methods simply hide the SQL behind a nicer interface.
- Read in XMLTV input data and store in appropriate storage area. This could be either Pickle'd Python objects, or (better?) inserting them into an SQL database, probably using SQLite so we don't introduce any new external dependencies. We would need a Python SQLite wrapper, such as PySQLite.
- Supply a list of favourites, add or remove a favourite
- Supply a list of channel sets, add or remove a channel set
- Change the status of a programme - changing the items in_guide, remind and record.
- Supply the commands used to run the grabber, browser etc. and alter them. The specific storage for this data would probably be in Gnome's GConf registry, but this would be hidden, so interchangeable backends could be used using a different storage mechanism.
- Delete Programme and Channel data older than a given date.
Downloader front end
This would be designed to be called nightly by cron, and would download new listings (presumably using the XMLTV grabbers - commands provided by the back end), and tell the back end to process and store them in the storage area. Stored data would be compared with the list of favourites and any default settings of in_guide, remind or record status would be set for each programme. Any programmes which are on today and which have reminders would be set up in cron or some other timer system to pop up at the right time. Similarly, any programmes which need recording would be set in cron for the process to start at the right time.
Reminder front end
This would pop up a reminder of a programme. It would probably not need to access the back end as the programme name etc. could be supplied as command line arguments.
Main front end
This would show the actual guide to what is on TV - it would have at least these tabs visible on the main screen:
- FreeGuide style "StripView" showing programmes from all channels on a horizontal time line, with an optional personalised guide and programme details panel.
- Single-channel view that has a dropdown for which channel to show and what date (synchronised with the previous panel?), and lists the details of all the programmes on that channel today in an HTML view like the personalised guide. Possibly instead of this show a simple list of titles and have a programme details panel that shows the details of the title you have clicked on.
- Search tab that allows you to see programmes matching a given string in their title or description, and at certain times (e.g. "after now"). This searches the entire storage area.
- (Maybe?) A vertical view like some web sites and other guides that is very similar to the horizontal guide, but vertical.
The program would obviously remember all sorts of things about the visual appearance of the screen etc. including what tab you were on when you exited.
It would also have dialog boxes for editing favourites, channel sets, and options similar to FreeGuide.
All the GUI code would be completely isolated from the program logic, so that different GUIs could be plugged in (e.g. a Windows GUI?). An exception to this might be that each View (in MVC terms) might be both GUI code and logic for that view. Might be good to separate even that.
Gnome Photo Conversion Wizard
A front end to the excellent Unix convert command in the form of a very easy to understand wizard with the following screens:
- Welcome
- Choose photos - like a graphical file chooser that shows the photos you've chosen, and those you might choose, as actual pictures.
- Choose tasks (rename) - Tick boxes for tasks like Resize, Change Format, and maybe others like Average, Number of Colours, Crop, etc. Each of these that the user ticks will launch a little mini-wizard which asks its own questions and either supplies options for the convert command, or options for another command (e.g. one day The Gimp) to perform its translation back to the main program. Imagine we ticked resize and change format:
- Change Size - you can preview a single image (with little arrows to view the other ones you chose) and you can click and drag to resize, and tick a box to allow it to go out of proportion, and type in the size. Display file size of the currently previewed file.
- Change format - you get a preview with a tick box to show it actual size (in a panel with scroll bars) and a dropdown to choose what format to convert to. Display file size of the currently previewed file. The preview shows the size chosen in the previous window (when actual size box is ticked).
- Output filenames (rename) - show a list of input path and their output paths - allow the user to add a prefix, a suffix and an output directory.
Gnome Task Scheduler
A front end to crontab - able to load and save the user's or the system crontab file. Quite simple.
Has this been done by someone else?