Friday, March 26, 2010

Organization Budget and Finance

It was about a year ago when I started working on my Student Council Attendance tool for Speed School Student Council. This tool was designed to solve the problem of accurately tracking member attendance and make my job as DoA easier. After successfully putting this tool into use, I was ready for my next challenge. The next item on my list was creating a way to transparently track our council's budget including how we spend our money. I ended up spending the majority of my spring break this year working on my newest open source PHP tool, Organization Budget and Finance.



This is my first web based application that I designed in such a way that it could very easily be used by other groups or individuals. The design takes into account no special considerations from SSSC and simply attempts to fill a very specific need. This application is not designed to be a complete financial tool or even be used to balance a budget or an account. I am hopeful that someone will come across this tool and find a use for it.

This tool is used for allocating funds and tracking receipts for specific line items. I have implemented almost all of the major features and hope to have our new DoF put this tool into use very soon. The tool is based around the concept of a line item. This is a budgetary item that can have any number of sub line items. This can go as many levels deep as desired or necessary. This essentially creates a tree structure which represents the budget itself. The top level is designed to be used for each years budget. The next level will be used for all of the major events or funded items. The successive levels provide additional details to how funds are allocated. Multiple funding sources can be allocated to each line item. Any number of receipts can also associated with line items and represent money spent. There is not direct connection between the funds and the receipts meaning the allocated funds are treated as essentially one pile of money that receipts deduct from.

The design approach for this tool was to keep it as simple as possible, specifically with respect to the database. However, some interesting features have been built on top of this core set of information. Receipts, sources, and line item's can be made private. The reason for this is that not all information should be made publicly available, at least initially. The obvious use of this feature would be hiding items that are not yet finalized, such as next year's budget, or hiding receipts that have not cleared the account yet or the amount has not been confirmed.

Other features include the ability search the database for specific receipts or line items. This will especially be useful when trying to find out how much was spent on something from a previous year. The budget pages use custom CSS formating which allows for easy printing and avoids all of the fancy styling that is part of the web site. Lastly, the entire database can be easily downloaded in a single click as an XML file for easy backup and data portability.

Why put in all of this work for this tool? In the end it boils down to transparency. I strongly believe that SSSC will benefit from more transparency. It starts with having this tool being open source and ends with our budget being available for anyone to look at. In the end, not many people will care how much we spent on pizza at Fall Festival or how much the E-Expo name tags cost for all of the council members. However, certain council members will care about this information and having an accurate record is priceless.

Our historical records with respect to finances have mostly been lost to time. The real judge of my success will be time. What will the state of these records be 10 years from now? Hopefully I remember to look back and see if I was successful.

Thursday, March 18, 2010

Becoming an Open Source Developer

I have been writing computer programs for a very long time. My first experience was writing Logo programs when I was in elementary school. I have come a long way since then. In high school I began programming in PHP and was able to make functional applications. In college, as a Computer Engineering & Computer science student, I have completed a wide variety of programming projects, but only recently have I started releasing my code open source.


Right now I have 6 projects that I have started and are hosted on Google Code. A list of all my projects are listed on my website under open source projects. Three of these projects are written in C# and three of them are PHP web applications. Two of them are school projects that I worked on with other classmates.

Why do I release my code open source? There are two main reasons. The first reason is that using Google Code provides a Subversion server for storing code, a bug tracker, and wiki for documentation. The second reason is there is no benefit keeping the code closed source. Releasing the code open source maximizes the possible benefit of the code that I write. In some cases this is by simply making the application available for others to use but in other cases the actual source code could be used and extended by other individuals in the future. Additionally, I hope by making these projects open source they may live on past the time where I can focus on their development.

At this point in time in my career as a programmer, my skill set and reputation are the most important assets I can focus on improving. Any possible monetary benefit of keeping the code I write closed source is offset by the benefits involved in contributing to the open source community. One of the website I have recently discovered is Ohloh, where I promptly created a profile (https://www.ohloh.net/accounts/JaredHatfield) that includes all of my contributions to the open source projects.

Up to this point I have only contributed to open source projects that I have started. However, I want to start contributing to other projects, at least in a small way. However, the projects I am interested in use Git and I am still in the process of learning how to use Git effectively. I will admit that I am partial to Subversion and really like using Google Code. Using Git has been frustrating on Windows, but once I get the time I will start expanding my contributions.

No matter what my future holds for me, I know that developing open source code will be something I continue to do.

Monday, March 8, 2010

NAESC 2010 Best Website: http://speedcouncil.org

Every now and then the hard work that I do gets recognized. I was not able to attend this year's NAESC National conference in Austin Texas, but I did apply for the best publication / website. As it turns out, we won! So I don't have to explain everything, here is our application we turned in to the conference:

1. Describe the publication or web site's purpose, audience, and design.

The Speed School Student Council website serves as the main public face for the council. The main components for the website include individual member history, a list of events and descriptions, a calendar of events, a photo gallery, and council documents. The website uses the Drupal content management system to provide an easy to use navigation structure for browsing all of the content. A new addition to the website is historical meeting minutes dating back to 1948. These newly digitized records amounting to 1,900 pages of content that are now available. Newly created documents are managed in Google Docs and embedded directly in the website. This allows for easy collaboration and a much easier interface for members to modify and update the content.


2. What is the value of the publication or web site?
The biggest innovation of the SSSC website is the attendance records, committees, and achievements. The information displayed on the website is obtained from a web based application called Student Council Attendance (http://code.google.com/p/student-council-attendance/), an open source application developed by a member of SSSC. All of the members of the council are tracked using this system. Attendance at meetings is taken and automatically made available on the website. This includes automated reporting as members fall into bad standing. Committees and their members are also tracked and available on the website. A fun aspect of the website is Council Achievements, which are based off of achievements awarded in video games. Members are awarded achievements for serving on the council and doing various tasks, including attending major events.


3. Please link to a digital copy or image of the publication or the web site.
http://speedcouncil.org


One of our amazing freshman, Jeremy Bozarth, gave a presentation on how we use our website to promote our council and encourage involvement. Our website has a wide number of features that are not present on many other council's websites. While I have not heard all of the details yet, my understanding is the attendance for the presentation was very high and it was an amazing presentation!

Here are the slides from the presentation:

Wednesday, February 17, 2010

Grooming my Social Graph

Google Buzz peaked my interest in my social graph. I knew about Google's Social Graph API but I never looked into it before. It turns out that it uses XHTML Friends Network, XFN for short, to declare links between various services. The entire system is built on top of the existing web and uses links that are already in place. When a person links to another person's page, they describe the relationship using the "rel" attribute. There are several defined ways you can describe your relationship using a link that are shown in the following table:


Depending on how you want to describe your relationship, there will be different values used in the rel attribute. You can also use multiple to describe a single relationship. For example, if you have met someone and are their friend you may use rel="met friend" in a link.


Right now there are a growing number of sites that are using their existing data and simply declaring these relationships. The power comes when big companies such as Google index these pages and can then surface and analyze this information.

The only real way to use this type of information at this point in time is to correct your social graph. When I looked at mine using Google's Site Connectivity tool, I noticed that all of my profiles were not all linked together. When you enter in a URL of on of your profiles on services such at Twitter or Digg or the URL of your personal home page or blog, it uses the public data to connect to all of your other services. Even though I had a lot of established links, it simply was not fully connected.

What I needed to do was update all of my profiles so they provided a two way link using the "me" relationship. This mean each of my profiles on the various services needed to link to one of my pages that I was claiming to be me, I choose my blog because it is where I have the most up to date content. This is just half of the link that is required. A link from my blog would need to be traced back to each profile. This way both ends are in agreement and can substantiate the same claim. The link does not need to be direct and can pass through several nodes. For example if my Twitter account claims my blog, my blog claims my Google profile, and my Google profile claims my Twitter account, this provides the same authority as two profiles claiming each other.

After adding and updating links between all of my profile pages my graph was corrected, but was not updated. Luckily Google provides a tool to force a recrawl of updated pages to correct the graph. The pages you can recrawl are those claimed on your Google Profile, so if you want to correct a link just add it and force the update. I did this for several pages that I then removed from my profile. They were linked to on other places in my social graph, but I did not want them listed on my Google profile.

While it is not yet useful, as more sites support XFN, this may change the way we use the Internet. There are valid concerns about privacy, but the potential applications are very exciting. I'll leave the explaining up to Google:

Monday, February 15, 2010

Google Buzz and the Not-So-Live Web

The thing Google has realized is that people want everything to happen instantly. This is most true when it comes to communication. However, that is not the area in which Google shines. They have probably done more for means of instant communication than any other company on the Internet. The product that comes to mind that no one really cares about is pubsubhubbub. This is a way that instant communication means can scale in a decentralized method.

What it comes down to is alerting other services when an action is performed. In my case this is most often posting a status message on Twitter. Facebook manages to import this message as me status in only a few seconds. Occasionally it doesn't work, but the delay is typically very small.

Now one of the benefits of Buzz is that you can import feeds from other services. One of the first things I did was import my Tweets into Buzz. Twitter is great because typically the things you say are time sensitive. Right now, messages take many hours to be imported into Buzz. So when I say I'm watching TV at 9 PM on Twitter, it gets sent out to the world on Buzz at 3 AM and my friends thing I'm crazy. You would think at the very least they would use the post time included as part of the Atom feed.

The real problem probably doesn't boil down to technology. The problem is more likely companies and openness. Twitter believes it has value in keeping their data locked down, at least slightly. This is not going to be the case moving into the future. Users are going to be in control of their data, and if we want two services to integrate and they do not, something is going to have to give.

Powered By Blogger