A personal and small business finance application. I have been using this application for over 5 years. Originally developed to replace something similar I had been using on the Palm Pilot, it has been extended over the years to match some of my increasing personal finance issues. The basic system contains just two simple concepts. Firstly there are accounts which are pots of money. Secondly that are transactions which transfer that money between accounts (or to and from the outside world).
The system supports a “home” currency, but allows for transactions to take place in any currency – and can even estimate exchange rates until the reconciliation process fixes the rate that was actually used.
The latest changes include facilities to support my own small business. Firstly accounts can be separated into separate domains – so personal and business finances can be kept separate, but secondly it also now supports allocating a cost or revenue code for each transaction, and then for adding those costs and revenue transactions in their respective codes to produce a profit/lost estimate for the year. Finally this profit lost statement, or the contents of any of the accounts can be formatted as a CSV file for import into a spreadsheet application.
It also allows the main owner to create other user accounts with limited access – so for instance I can allow my accountant to see the business accounts but prevent him from having any access to my personal finances.
MBChat is an Web/Ajax based chat program designed to allow many people to come together in chat rooms and converse. Optionally the chat can be secured, so that all conversations are encrypted.
Each user sees a set of public rooms, together with any number of meeting rooms related to groups that he is a member of. Some of the public rooms are open chat, others are moderated – designed to allow a small group of people to speak and for those watching to queue questions for a moderator.
Additionally, participants (subject to some potential constraints) may whisper (ie speak privately) to one or more friends.
Users are authenticated before joining chat, with the software supporting a local database where the user is looked up or external authentication via another system (the system in use at Melinda’s Backups uses the SMF forum as the authentication system). This authentication system also provides information on roles and capabilities for the user together with the list of additional meeting rooms that he is allowed to see.
There is a secure option for chat in which great care is taken to ensure that only authenticated users may use the chat system (although there is an option to allow guests) and also that the server is the correct server. This uses public/private key RSA encyption. Once every one is authenticated communication takes place using encryted messages based on a symmetric DES key encryption.
The American Football Results Picker is an application which can be used to setup a competition for a number of people to guess the results of American Football matches. It is currently configured to only work with the NFL.
It is linked to an SMF forum (using the forums SSI.php capability) where it gets the user ID, user’s display name and whether they are a member of the “Football Admin Group”. It can also check for underage participants (again via SMF membergroups) and require that they have special approval to join a competition.
The Football Administrators can set up competitions and assign and Administrator for each one. Each competition typically lasts a season.
There are two basic screens – the admin screen and the user screen.
The admin screen allows all aspects of a competition. From opening up for initial registering to play (and eventually closing off that option early in the season) to creating each weekly round of matches (Selecting teams from a preconfigured list), to setting a deadline by which users have to make their pick of results (this includes basic guessing who wins, and also can involve guessing over or under a given score), to entering the results of each match. Also each week there are bonus points for getting a question right that the administrator chooses. Also through out the season there is points for picking which teams make the playoffs.
The user screen allows users to enter their picks for each week. They are presented with a list of matches for which the picking deadline has not yet been reached, and they select their choices via radio buttons. When all choices have been made, hitting the “Make Your Picks” button will store the picks in the database and use them. Picks may be freely altered until the deadline has passed.
The software does the rest, keeping track of all the results and scores and presenting users (on the user screen) with a set of tables with all the detailed and summary results in. Non players can also view this just to get an see results.
This is a full simulation of an Air Hockey game which can be played with two players over the internet. Surrounding this simulation is a clubroom where players may gather to co-ordinate playing with each other. It also contains a scoring ladder, keeping the relative skills of the players.
The core of this game is the simulation of the air hockey table and the interactions between the puck and either the mallets of the players or the table edge. This simulation takes place in the browsers of the two players, which each player being the “master” simulation when the puck is at their end of the table (and in fact the simulation ignores the opponents mallet, relying on the opponent to inform the player if there is a collision between puck and mallet. There is also a practice mode, but in this case the one browser contains two simulations.
This approach requires high speed communication the two players along with accurate identification of any time delays. The software in both players measures its own average delay from the server and then adjusts all the timings related to when events (such as a puck/mallet collision) to server time. The use of unix “pipes” provides a mechanism for the server to connect two players together (see my article “Providing a high speed connection between two web clients“)