Saturday, October 15, 2011

Long Overdue Update


This has been a long overdue update.  Since my last post, quite a lot has been going on.  I have an apartment in New Jersey with a full time job at Verizon Wireless.  My free time may be limited, but I haven't abandoned my opensource personal projects.

Web2Py Symposium Registration System
My major project that I started at the beginning of the summer is my Symposium Registration System.  This project is still going on, my development speed has decreased but is continuing.  Currently I have been working on two major improvements.

The first enhancement I have been working on adding an accessible api.  The api will be able to return xml and json data.  The goal of the api is to be able to give as much control over the data available as possible.  My long term of this api will be to make it generic enough that it could be dropped into any web2py application.  The api has seems to work pretty well, the only issues I am currently facing is how to expand list of references.  I could simply loop over the data but I would like to keep the data processing by the database layer.

While working on the api, I started an overhaul of the entire scheduling system.  This overhaul includes breaking up the schedule into blocks of time, rooms, and sessions that are attached to a room and time block.  This overhaul also adds support for people to be added to a session as a judge.  The agenda screen has been updated to handle this new scheduling scheme as well as the symposium administration pages.  This update is still being worked on, specifically scheduling papers.

GrooveBot
I started the GrooveBot a while back in the FossBox.  GrooveBot was a simple IRC bot that was using the Grooveshark api to allowed us to have a jukebox controlled by anyone through IRC.  Well recently I have started a rewrite on github.  While this shares the same name, it is being completely rewritten.  The new GrooveBot is being designed as more of a framework.  At the moment it is broken up into three parts: a master hub, media sources, and media controllers.

The design of this system allows there to be mutile front-ends and back-ends with the hope to be able to interface with many music services and api's. I plan on implementing a few basic sources like  filesystem, URL Stream, and maybe even an FTP and http upload source to name a few.  I would also like to find a free or fairly cheep music streaming source as well.  A few controllers may also include an  IRC bot, http web service, and even a terminal curses client would be fun.

This new GrooveBot is a very in-progress project that I hope to be spending some serious time on in the near future.

Friday, July 1, 2011

My Humanitarian Open Source Development Class

A while back I took RIT's Humanitarian Open Source Development Class which was great. I then became the T.A. for that class one semester. Our HFOSS Class dealt heavily with the Sugar Community which I think is a great match and hope to see that relationship grow in future offerings of the class. With that said, while I was helping out the class, I found a few things that bothered me about the course. Around this time I wrote up how I would vision a class in open source. Just the other day I stumbled across it again and figured I should share my thoughts.

A Class in Humanitarian Free and Open Source Development

An Open Source Software class should be directly involved with the community. Such a class should teach its students how to be respectful and helpful members of such a community. The work from the class should directly impact the community in a positive manner as well as give the it a few long term supporters. This class should be geared around teaching the students the skill and the tools needed and used by the community and then get those students directly involved. The course will also help the institution by improving its image in the open source world as well as the image of the students coming out of the course.

Goals

  • Students would
    • learn how to interface with the open source community
    • make contributions that directly help the community
    • have work to show off to potential employers
  • bring their own skills to the community
    • Coders can find tickets and bugs to fix
    • Artists can create images and drawings for the community and the software being written
    • UI Designers can help improve existing projects UI as well as help design it for new projects
    • Testers can checkout the projects and test them for usability, bugs, and even test patches.
    • Writers can help improve documentation in the community and it’s projects.
    • Community managers can help organize the community and its tasks. Find and organize people to help out with these tasks, and help get the word out to other communities.
    • People with multi lingual skills could help translate documents and software to languages they are comfortable in.
    • And much more …

Outcomes

  • Community Benefits
    • Introduce and Educate students to the open community.
      • Creates new contributors.
      • Expands the pool of available mentors.
    • Class word benefits open projects
      • Source patches
      • Artwork
      • Expanded discussions
  • Institution Benefits
    • Work committed under the branding of the institution (email address and reputation of class)
    • Builds a new pool of students employers can pull from.
      • Especially employers that embrace Free and Open Source philosophy.
      • Students proven to have good communication and teamwork skills
    • Finds skilled students that can be hired for local projects
  • Student Benefits
    • Builds Reputation
    • Builds Resume/Portfolio
      • All work is in the public community, no Non-disclosures.

Class Setup

  • Phase One: Introduction to the tools and community. The class would be taught as a lecture and discussion. This first portion of the class gets the class talking with the community.
    • Teach Community: IRC, Mailing Lists, Forums, Wiki, Blogs and Planets, Etiquette
      • At this stage, Require students to join and passively look over the community.
      • Students must start their blog and get on a planet.
      • Assign the Community Arch Assignment
        • This is an assignment where the students will look at all the available communities. Once they have found a community they which to be involved in, they need to analyze its history. Part of the analysis is to figure out how big is the community, how active, hierarchy, how they communicate, and other important and interesting aspects of the community. This assignment will be presented in one of the discussion classes. What do they have in common?
    • Teach Technology: Revision Control Systems (git, svn, cvs, ...), Trackers, patching, Project Management, mailing lists, blogs, wikis, and other teamwork tools.
  • Phase Two: Class interaction with the community
    • Students discuss their strengths and weaknesses as a class
      • How can they personally help the community, what is their skill set?
      • Once the student has decided their role, They must join the community, adding in their skills
        • Coders should start asking/finding bite size tickets.
        • Artists should find projects and other events that could use artists.
        • Community Managers should start seeing the needs of the community. Help organize events, people, or other aspects of the project.
    • Every class would then be structured in an open discussion
      • Every student must report on what they are working on every class
        • If they have finished a patch or notable task, they should talk about the issues that arose and how they got by. Did they speek with anyone in the community, if so who and what did they talk about. They should also discuss how their patch or other asset will help the community. Who will be impacted most by their work. This is to help build a sense of pride that their work will help in the community.
      • Students would talk about issues and observations of the community
      • Professor’s job in this class would be to facilitate discussion, not lecture.
      • Once discussion dries up, social work period.
        • The teacher’s main role at this point is to follow all the students progress.
          • Help the students keep their work public through blogposts, commit logs, tickets, ...
        • At times we could get tasks by the community that the class could work on as a whole.
        • From time to time, guest lectures from the community would be encouraged as well.
    • Everyone would be responsible for keeping notes of their work in their blogs.
      • Grading will be simplified, all tickets, artwork, emails, conversations on IRC, and tasks should be linked and discussed in their blogs.
      • Posts should be made at minimum twice a week. This is their homework.
    • Community would drive the class
      • Instead of preparing lecture material, the teachers work in this class would be to keep an eye on the community. Make the community aware of the style of the class and encourage them to help shape the class.
      • Get feedback on how the students are doing, does anyone stand out?
        • If so what are they doing?
        • How can we help others, bringing up the bar?

Grading (all from reading their blogs)

  • Tasks completed
  • Discussion/analysis of the tasks
  • Examinations:
    • No written exams, instead students will conduct presentations that are open to the community.

Optional Awards:

  • Community Choice
  • Class Choice
  • Most elegant solution
  • Most trivial task
  • Most Complex task
  • Most Important task

Saturday, June 18, 2011

A Short Summer

Well I have finally graduated RIT with a B.S. in Computer Science. It's bitter sweet to see school come to a close. Glad to be done with classes and grades, but sad to leave Foss@RIT and the Innovation Center. I feel that they are just starting to take off after a slow but steady start.


After a good week off in Jamaica with the family, I got back and was immediately going through a series of interviews. After a couple of weeks of interviews, I have finally received a job offer with Verizon Wireless as a Member-Applications Staff. The position will be in New Jersey. I am scheduled to start in Mid-July.

New Symposium Registration System

Other exciting news, I have decided to rewrite my old symposium registration system I wrote for the Innovation Center. The old system was a last minute request with a two day deadline. It served its purpose, a little clunky, but worked. I was then requested to add the ability to add support for multiple symposiums with less then a week deadline when the next symposium came up.

Because of this the code was very poor and held together with quick and messy hacks, I figured I should leave the center with a much better and more complete system. So I decided to spend a few days between all the interviews to do a re-write. Like the old system, the new one is written in web2py. You can find a copy Licensed under GPLv3 on git hub.

Here is a list of some of it's features:
  • User Accounts
    • Email Verification
    • Profiles (new)
  • Symposium Management (new interface)
    • Registration period
    • Event Date
    • Papers registered to each symposium
    • Scheduling Agenda (new interface)
  • Papers
    • Authors
    • Mentors
    • Title
    • Description
    • File
    • Review Process (new)

This system should help out with managing symposiums. The new system supports multiple symposiums as well as a review process which is hopefully a nice improvement over the old system.

I also wrote an Inventory system a while back that is also available under GPLv3 on git hub as well.

Well I got a few more weeks of summer before I start my new Career. More information to come!

Wednesday, May 18, 2011

School Coming to a Close

Well it looks like school is coming to an end as graduation is just around the corner. I just finished up my last exam and now I am preparing to graduate this weekend!

Quite a lot has been going on for the past month and I have been neglecting to find time to post on the blog. I have had a few projects for classes including writing a micro-code cpu using RIT's Arch Lib Package. So that has been taking up a lot of my time.

Outside of my class projects I have been working with Professor Jacobs to introduce a group of girl scouts to programming and game creation through Scratch. Jacobs has in the pasted used Game Maker and wanted to move to an easier to use open source solution. I have taken these tutorials and made similar tutorials for scratch. Some problems that arose were that Scratch is very simplistic where some of the game tutorials had features that were not available.

The first game was a great candidate for Scratch as it had blocks that would bounce around the screen and give points when clicked. There were also a few other deadly blocks that would end the game when clicked.

The second game was a bit more complicated as it required a moving camera. As Scratch doesn't have a concept of a camera this was not directly possible. The game had a canoe that was paddled by the user to avoid the walls and get to the end of the level. Instead, I had added in objects that user needed to collect and avoid instead of walls. When playing the player gained points by collecting items and the game would end when the canoe collided with an obstacle.

After the two tutorials were written we had a workshop day where we hosted a few girl scout troops. They had a lecture by Jacobs about what makes a game. From there we let the girls play around with a few flash games with different game dynamics and then had a group wide discussion. From there the girls had lunch while hearing and interacting with some successful women in the game industry.

From lunch we introduced them to Scratch and let them go through our tutorials. Overall I think the tutorials were successful. Some of the girls got distracted by the ability to create custom images and designed, but eventually got back on track. In the end a few of the girls were even experimenting with creating their own games. Overall I think that was a huge success.

Outside of that and classwork, I have been working in the Center for Student Innovation on a few projects. One of them being the re-branding of the CSI.

Our artist made a new logo and sent me an image of what the site should look like. This is not best way to make a new template but I was able to manage. At the same time we were re-branding, we migrated our site from a wordpress over to a drupal instance. We felt that our landing page for the center should not be blog styled website and more informational.

As I have been getting closer to graduation I have been putting applications into a few places for work after I leave RIT. I am hoping to land a job somewhere that respects and embrace open source.

Well I hope this is a decent update, hopefully now I will be able to post more often now that I don't have so much to do. Done classes and exams, just a few days for graduation!

Sunday, March 27, 2011

NCIAA, Washington DC

Well I just got back from the NCIAA Open 2011 conference that was held in Washington DC. RIT professors Carl Lundgren, Jon Schull, and Stephen Jacobs submitted a paper entitled Undergraduate Student Experiences at a Summer Research Fellows Program in Rochester Institute of Technology’s Center for Student Innovation (CSI).

Eliza Hammer, Luticha Doucette, Devin Hamilton, Beth Kiefer, Kenneth Stewart, and I (Justin Lewis) attended the conference and presented on our personal experiences with the program.



While at the conference, we had attended a few different panels and presentations. During one panels that we attended about the student perspective of entrepreneurship education, we were asked to join the panel to give out thoughts. That was pretty interesting because our experiences and perspectives differ as we are at a different stage of the entrepreneurship cycle. The innovation center deals with the beginning stages, the innovation where the other panel members were at the later stage of running the business. I think it was pretty interesting to have the contrast.

One of the other panel discussions I went to was with the NCIAA Student Ambassador team. They were discussing their experiences in the Ambassador program as well how the program has impacted their universities. It was a very interesting talk. I was able to take away a few good ideas from the talk that might help move the fellows program and the Innovation Center along. I think in the near future, we may even apply for the ambassador program. Until then, we can use some of their suggestions to improve activity and productivity of our program.

Aside from the conference, this was the first time I have personally been in Washington DC. So we took half a day to explore the capitol and visit a few museums. Overall it was a great experience!

Tuesday, March 1, 2011

FOSS@RIT Hosted Infrastructure

Inspired by Fedora Hosted, I decided it would be pretty neat if we had a similar setup for FOSS@RIT.

For those who are not familiar with Fedora Hosted, Fedora Hosted is a service run by Fedora that gives the foss community access to a trac instance, git repo, and mailing lists. It also provides a nice project management system that allows you to choose who is in your project group which allows commit access to your repository. Overall it is a really nice system.

I figured it would be pretty neat to have something similar to that at RIT. This would allow us to build our own branding and self image as a FOSS community, giving the FOSS projects of RIT a public repository.

Requirements

  • The system should be easy to maintain on economy hardware.
  • Users should be able to easily request and gain access to the system
  • Users should be able to modify their own ssh key for git

Trac

I have used Trac in the past and it is an excellent bug tracker. It has a very large community base with a large set of community plugins available. It was a little tricky at first to figure out how to setup multiple instances on one Trac install.

I have Trac setup as a wsgi extension of the apache web server so that it could integrate smoothly with the running website.

The biggest problem with the current Trac setup is that its user management system is really lacking. Trac needs third party plugins to even provide a simple user management system. In the end, it needs to use some other authentication system to be truly powerful. I could have it use RIT's ldap, but that limits us to only RIT accounts which is unacceptable as once you become an Alumni your ldap account is deactivated. FOSS@RIT would need to run our own authentication server which would not necessarily be too bad, but it is not on my todo list at this time.

The current system uses a basic htpassword authentication scheme which I am not a very big fan of. People can too easily create accounts and spam the system. A few spam fighting plugins do help, but still don't quite cut it. A nice thing about this setup is it allows one account to access all of the Trac projects.

To spin up another Trac project I just need to login to the server and run a few commands through the trac-admin console.

Git

To offer a Git repo, I wanted a system that allows easy control of creating repositories, adding users, and managing their ssh keys. The simplest way would be to give everyone an account on the server and let git run off their accounts. The problem with this is at this time I didn't want to give accounts to everyone. Our server is not very powerful and is running other tasks as well. So I needed a system that allowed us to manage everything over one user.

The solution I found is to use a system called Gitosis. Gitosis is a system that allows us the ability to manage the git server with an admin git repository. I thought that was pretty clever. What makes this a good solution is it allows creation and access control of the repositories in a fairly simple config file. It also controls access through one git account and user ssh keys.

To make this solution even better, I found a plugin for Trac that allows users to manage their ssh keys from Trac.

The biggest problem with this system is that while users can manage their ssh keys, they still don't have a way to manage access control on their repositories. I have been thinking about possibly modifying the plugin to allows repository control. The reason I haven't done so is that how Trac supports multiple instances doesn't give me very fine control over permissions. I have yet to figure out a nice way to get the plugin to be able to manage the individual repositories each project owns while still maintaining security. It currently seems to be an all or none solution.

Mailing Lists

I have not fully looked into this option yet. It would be nice to run our own mailing list server that could integrate with the rest of the services, but that is a bit more complicated then I would like to deal with at this point. It also has to deal with RIT network policies which I don't want to get into at this point.

RIT does have a mailman system setup that we may be able to use for our own mailings, but setting up one for all of our projects might be problematic.

Next Steps

I love Trac, but using it for many projects seems to be a bit difficult. This is mainly how to manage lots of projects and users in a timely manner. I don't like having to run upgrade commands on every project to add a plugin or having to carefully watch the user list for spam signups. I have started looking at other systems like Redmine. It looks promising as it supports many projects and subprojects. I even found a Gitosis plugin that claims to support the user key system as well as the ability to manage git repos. If this is true, that is a huge win! My only problem with Redmine is that it is a Ruby on Rails application which I am not too familiar with, especially as we are mainly a python shop here.

I hate to say it, but it might be more beneficial to use a third party as our infrastructure like Git Hub. But these are only initial thoughts, with some more research and time I am sure I can find or create a very cohesive system. I am still trying out some things with Drupal as well.

I will keep you updated in the future of my findings.

Friday, February 4, 2011

Rochester Great Awards

Last week I posted that OVC was nominated for the Digital Rochester GREAT Awards.

Fran, Taylor, and I won the Student Achievement Award for our work with OVC.

Taylor and I with our awards on display in the foss box.

From Great Awards

From Great Awards



Taylor Rose, Fran Rogers, and Justin Lewis