Friday, April 13, 2007

Proposal

I have been a Pidgin user for several years now and have loved it, but I always wished it could be brought into the console. As a Linux user/programmer I live in the console and since I have everything in screen sessions, I rarely leave it. So with the advent of Finch I was in heaven. However, I'm wishing more of Pidgin's features were available in Finch. Over the course of the summer, I hope to become part of the team and bring some of my wishes to reality.

=======
Overview

A prioritized list of deliverables is as follows:

1. Shortcut Keys Overhaul
2. Sound
3. Logging Improvements
4. Buddy List Options
5. Documentation of my changes
6. Crashing bug fixes (if time permits)

========
Shortcut Keys Overhaul

The shortcut keys need some serious work. I have yet to be able to use it without running into issues about it not catching keystrokes. I will build an independent interface that will be be made accessible via a command line option. This interface will prompt the user for the basic keystrokes to survive through the application. A tentative list of these basic keystrokes is:

Up
Down
Left
Right
Basic Alt commands
CTRL-o
ESC
Tab

The key mappings would be stored in a file to be loaded by Finch upon initialization.

To continue on this idea of shortcut keys, I want to add the option to add your own shortcut keys on the fly. Through an interface inside of Finch , a user will have the option to bind keystrokes to a set of predefined actions. A list of actions will be available through a combo box. There will be a list of custom shortcuts already configured, and the option to edit those will be made available.

I will modify how Finch interprets keystrokes in order to be able to detect both 8-bit meta and ESC sequences. This will provide an abstraction to the user in the configuration file. For example, if a user sets the configuration file to bind the keystrokes C-M-a to an action, the program will be able to determine whether C-M-a was hit regardless of how they are being sent from the terminal.

**OPTIONAL IF TIME ALLOWS**
I will also build into Finch the ability to detect when a user is unable to send commands. I'm still unsure exactly how this will be implemented. As of now, I'm thinking of either having it detect when a user has started the program, but hasn't been able to send any valid commands for a predefined amount of time. Another possibility is when a user has sent a series of invalid commands from the start of the execution, it will detect issues. Upon having detected an issue with commands, it will pop up a window that uses basic commands to catch the aforementioned list of basic keystrokes. Research will be done to determine the best way to implement this idea.

====
Sound

I frequently run Finch inside a screen session in the background, and it is very frustrating when I miss someone who tried to talk to me. Since it's not a GUI and doesn't have the ability to pop up a notification, the best way to resolve this problem is with the use of sound. I will add the ability to customize sounds for different events, similar to many existing IM programs. I will also make sounds customizable on a per-buddy basis similar to how you can program custom ring tones for different people in your cellphone.

=====
Logging

The logging features are another feature I will improve. I will build on the same basic ideas found in Pidgin's logging tools. Though there are a few ideas I want to add.

I will add the option to search through all conversations instead of just searching them one by one, or even searching them over a range of dates. There will also be the option to search from a list of logs from different users. From there we can add an array of search capabilities to better search the logs.

===============
Basic Buddy List Options

There are a few options to the buddy list that I think are missing. I will add the ability to hide/show empty groups and to hide/show buddy details.

===========
Documentation

Every good project is always backed up with good documentation. Firstly I will provide user documentation on how to use the features I have implemented. I will provide them in both man format and HTML format. If time allows, I will do some research in possibly putting the docs into LaTeX format, and thus offering centralized documentation that can be exported into multiple formats, ie: man page, HTML, pdf, etc.

==============
Crashing Bug Fixes

A few current features of Finch cause it to crash. For instance, chatting with jabber over GoogleTalk has cause some strange crashes. I have found that sometimes, simply quitting the application causes it to crash. Though the desired result is still achieved, it would be better for it to quit cleanly than to segfault. Due to the inability to predict the amount of time required in researching these bugs and then fixing them, I have chosen to append this project to my plans with an "As time Allows" clause. If I am able to complete my other goals to my satisfaction and more importantly the satisfaction of my mentors, I shall then take on fixing the aforementioned bugs and some others.

=======
ABOUT ME

My name is Eric Polino and am currently attending Southern Adventist University. Though this is only my second year, I am a junior. I am double majoring in Computer Science and Mathematics. Being self-motivated and having spent a few years teaching myself how to program with the help of a few friends, I was able to challenge several courses at the beginning of my freshman year. This allowed me to take advanced classes from the start. I was also named "Standout Freshman" by the School of Computing.

Last year, I was selected, along with two other students, to represent my school at a regional programming contest where we placed 3rd out of 18 teams. I also participated in a recent Programmer of the Month where I placed 8th in their LOAPS contest. http://dinsights.com/POTM/LOAPS/finals.php

Almost since the beginning of my programming career I have worked on large projects. My main project has been my suicide chess AI. I have also had experience working on large professional software projects. See my resume for more details on my work history. http://www.aluink.net:96/Resume.doc I have also used ncurses for various little projects along the way.

Being a Linux user/programmer I practically live in the console and have everything in screen. Thus having a console-based instant messaging application is music to my ears. Being familiar with Pidgin, Finch is a dream come true. Thus working on Finch personally will allow me to bring my own dream to reality. If I could watch movies and look at pictures in the console, I don't think I'd have much need for a gui. Sure, I like and enjoy pretty icons and nice Guifications, but I also believe that console applications are very powerful.

I am a firm believer that you must be committed to do what it takes to have what you want. When I decide to get something done, I'll do what it takes to make sure it gets done and it gets done well. Given the opportunity, I will live by this motto as I work with Finch this summer.

2 comments:

Seth Illgard said...

Double Majoring? God, youre insane! Hey, congratulations. Your proposal is great, congratulations for your acceptance. Hey, here is mine: http://bluecorecms.blogspot.com
(rejected hehe)

Cheers!
Hey, i would like to stay in contact.
Im a physics student, and I finished a major in computer science. Think we have a lot in common.

bgruber said...

Hey, just wanted to thank you for your comments on my own proposal. I should note that the use of the 3rd person was part of LispNYC's suggested form. I do think it lends itself to a slightly more grandiose picture, but I guess that's not bad for an application to a program like this. Good luck with Finch.