Sep 082014

Summer is over, and it’s time to really get to work on my Sabbatical project.

I did do some work this summer – I’ve read 3 of the books on my Sabbatical Reading List (and added a few more to the list) and I’ve finally de-lurked on the OpenMRS developer mailing list and in some of the online meetings, and I’ve made a decision to convert all of my course materials to Markdown (the better to track changes on GitHub – see a future post). But, it’s all been pretty passive.

So, the Friday before the Labor Day Weekend, I decided it was time to get back to the “develop code in OpenMRS” part of the project.

Since it had been a couple of months since I had set up  my development environment and tried to build the OpenMRS code, I decided that starting over from scratch (mostly) would not be a bad idea. Here is what I did:

  1. Read OpenMRS’s Getting Started as a Developer wiki page. I had already set up my OpenMRS ID, and signed up for the developer mailing list. I already had a GitHub account, as well.
  2. Read Development ProcessfromOpenMRS Developers’ Guide, and got the code:
    1. Fork openmrs-core repository.
    2. Clone my fork onto my computer.
    3. Set the OpenMRS repository as my upstream remote so that I can pull changes from the main project into my local working copy.
  3. Set up development environment based on Get Set Up from the OpenMRS Developers’ Guide. I chose the section on Manual Installation because Iwantto be able to develop code fortheOpenMRS core application. I followed the general outline of this section, but went about some of the software installations differently.
    1. Install MySQL. Because I am setting up my development environment on a Mac, I installed MySQL using Homebrew
    2. Install Maven using Homebrew
    3. Install Git using Homebrew (actually, I already had Git installed, but I made sure it was up-to-date)
    4. BuildtheOpenMRS code:
      cd openmrs-core
      maven clean install
    5. RuntheOpenMRS web app through the jetty server:
      cd webapp
      mvn jetty:run
    6. The first time you run the web app, it will take you through the Setup wizard
  4. Set up Eclipse. I already had Eclipse installed, but I made sure that my version was up-to-date. Eclipse had been updated to a new major version (Luna) since the last version I installed (Kepler). 1
  5. Git IDE Integration: Since EGit is already installed in current versions of Eclipse, and I’ve already forked and cloned the repository, I really only needed to do the To import as a Maven project section, to get the the projected into Eclipse.
  6. Build the OpenMRS code under Eclipse. I followed the steps in the following section:
    1. How to run the build
    2. How to run Junit
    3. How to Run Web Application

Now that I have a working environment that builds and runs, the next step is to choose a ticket to work on.

  1. In the past, I had just downloaded the newest version, and replaced what I already had installed. I figured that there must be a way to do the update without having to reinstall and reconfigure all of my plugins. It turns out that you can add the release’s repository to the Available Software Sites:
Oct 312013

Some of you will remember the post My Year of Open Source from 1 January 2011 – almost 3 years ago – where I made a New Year’s resolution to participate more in FOSS. Here are the goals I listed for myself for that year:

I have four main goals (at this point):

  1. Learn the tools and processes myself by participating in a FOSS project.
  2. Figure out what FOSS tools and processes I can begin to introduce my students to in earlier courses.
  3. Figure out what FOSS experience(s) I can provide my non-CS students.
  4. Find a project (or projects) to place my Senior CS students into in Spring 2012.

Well, it was as successful as most New Year’s resolutions – meaning, not very. Or maybe, not completely. I was (partially) successful at some of those goals, although almost none were completed within the year that I so rashly promised.

Figure out what FOSS tools and processes I can begin to introduce my students to in earlier courses.

This one was somewhat successful, although not until this past June (2013) when I managed to have my summer Introduction to Programming class (all six students!) use git and Bitbucket to collaborate with their lab partners and to submit their work to me for grading. Fresh from that (small-scale) success, I tried to have my Programming for Non-CS Majors class do the same, and ran into some scaling issues. We’re working on the solution for that right now – more in a future post.

My Spring 2013 capstone project course did use git and GitHub for our project developing an app for a Worcester Art Museum exhibit. But my understanding of git was not a good as it could have been and the student use of git was spotty. We also planned to use Pivotal Tracker, but didn’t get very far. We did successfully use IRC, however.

Find a project (or projects) to place my Senior CS students into in Spring 2012.

My Spring 2012 capstone project course worked with Eucalyptus, and had some pretty strong interaction with some of the members of the community, but I think that both the students and I felt we weren’t as successful as we could have been due to some technical issues early on in the course. For Spring 2013, I abandoned working in an existing FOSS project in favor of new development when the Worcester Art Museum opportunity presented itself. We did, however, make our code freely available (

Figure out what FOSS experience(s) I can provide my non-CS students.

This goal got very little attention, other than my abortive attempt at using git in the Programming for Non-CS Majors course.

Learn the tools and processes myself by participating in a FOSS project.

And I still have not made any real progress in my own participation in a FOSS project.

However, that’s all going to change. Stay tuned for My Year of Open Source v2…


Apr 122012

Following on Trevor Hodde‘s post First Commit!, it’s time to mention our First Merge!

First Nate Doe, and then Trevor, made commits to our class’ fork of the Eutester repository on GitHub. I submitted a pull request, which has now been merged into the master branch of the repository.

We’re looking forward to more commits, and having them merged into the project. I know that Nate and Trevor have issues assigned to them, and I think that Matt Morrisey will soon.

Feb 012012

My Spring 2012 course is well underway (into the second week), and going well. But, as I was putting up the latest assignments and resources for the class, it struck me: I’m defaulting to CLOSED!

Many of the materials that I’m using are coming from Heidi Ellis‘ course at Western New England University, and from other open, online sources. Yet, here I am, posting them in our Blackboard CMS, where only my students have access to them! And this really is a default action — it’s just what I’m used to doing, so I’ve done it without thinking.

This is a somewhat minor at this point, since Heidi has already made these materials available. But, I’m starting to develop new exercises and assignments that others may want to use. And, just as I borrowed some of the course organization from Heidi’s course, someone else might find my “remix” of her organization useful or inspiring.

So, I’m starting to think about where I want to post my course materials to make them open. (Licensing is not the issue, as I’ve been CC-licensing my course materials for years.) Unfortunately, our school is not good about giving faculty web space that they can easily edit for themselves (our default is Microsoft SharePoint.) But, we have our own departmental server, where we are hosting our departmental blog (acting as a planet), our Git and Subversion servers, and our Wiki. I have a vestigial web site there (that just redirects to my Sharepoint page), so I can probably press that into service as the home for the course.

It may take a bit more work, because it won’t be the default. I’ll have to move all the materials I’ve already posted and remember to post the new ones I’m writing to this more open location.

And, I’ll have to work on making open my new default.

Nov 302011

The Worcester State University CS Department now has its own blog at It was set up to act as an aggregator, so that faculty and students in the department can contribute posts.

I had it set up primarily for the students in my CS 401 class to blog about their Open Source project work, but anyone in the department can submit posts about their classes, projects, or research. It is my hope that it will serve to build a community within the department, so that we can all learn about the cool and interesting things that the members of the department are doing.

The blog is running as a WordPress instance, with the FeedWordPress plugin doing the aggregation. Erin McLaughlin, who is helping me with preparation for my Spring 2011 CS 401 class, did the grunt work of the WordPress install. Thanks Erin!

Jan 012011

I’ve been inspired by Mel Chua‘s post, Join Nicholas: chronicle the start of your own FOSS adventures, which, in turn, was inspired by Nicholas Whittier‘s post, New Year’s Resolution: More open source participation.

Nicholas has made a New Year’s resolution to participate more in Free Open Source Software (FOSS), not just evangelize for its use. Mel has encouraged him to write about it to help document the process of a newbie joining an open source project. Mel very eloquently explains why this is important:

I’m very much looking forward to reading these posts, and have encouraged Nicholas to tag them so they’ll show up on Planet TOS – he’s a keen writer with the ability to reflect on his mental processes while learning something as a novice, which is something that will be incredibly valuable for any open source project trying to get insights into how the participation process looks like from the newbie side, and also to newcomers looking to read about the thoughts of someone going through the process they’re about to launch into.

I hope that more newcomers join Nicholas in writing down their thoughts as they begin their own FOSS journeys. It’s actually the sort of thinking and contribution that we typically lack the most – and something that experienced contributors cannot do. I have some of my own thoughts in this blog from several years ago when I began actively contributing to open source, but they’re faded and fuzzy and I wish I’d done more (I was confident that nobody would care, but as it turns out, I wish I had written more down).

Too often we’re only publicly reflective only when we’re confident and experienced with something – so I applaud (and admire!) the courage being demonstrated here. Good luck, Nicholas – please keep writing, and let us know if we can help you with your adventures in any way.

I felt this lack of documentation for newbies in a FOSS project myself — twice in the last six months. The first was in June when I participated in POSSE Worcester State to learn about teaching students about FOSS participation, and had a very difficult time getting involved in a FOSS project myself (despite having three instructors who all have high-level leadership positions in the project). The second was this past semester, when I required the students in my CS 401 software development class to participate in an FOSS project. The students learned a lot, but it was clear to me that I need to know much more about the process to be able to give them a better learning experience.

So, inspired by Mel and Nicholas, I am going to make a big push this year in FOSS participation myself. I have an entire year until I will be teaching CS 401 again, and in that time, I want to become someone who has participated in a FOSS project. I want to document my experience so that I can help my students more effectively when I throw them off the deep end again in Spring 2012.

I have four main goals (at this point):

  1. Learn the tools and processes myself by participating in a FOSS project.
  2. Figure out what FOSS tools and processes I can begin to introduce my students to in earlier courses.
  3. Figure out what FOSS experience(s) I can provide my non-CS students.
  4. Find a project (or projects) to place my Senior CS students into in Spring 2012.

I’ll write more about each of these goals in future posts. (An unrelated goal is to become more comfortable with blogging — I find this process to be a relatively scary one. As an academic, I find it difficult to discuss the process, rather than the finished product.)

And, with that, I hit Publish

Jun 102010

I spent most of POSSE Day 3 being lost – and not necessarily “productively”.

After spinning my wheels for a while and aimlessly looking at the code for Measure, Aparna and I finally decided to try to add a tool tip to the slider in the sound tools. By lunch we had broken Measure. We finally discovered that the issue is that, while the buttons are Sugar graphics elements, the slider is a GTK element. (Or maybe Kristina told us that – I can’t remember.) So I spent some time looking for where the toolbarbutton is defined. (The Sugar graphics elements are at /usr/lib/python*/site-packages/sugar/graphics – Google knows all…)

After looking at that code, I decided that the “best” fix would be to create a Sugar-based graphics element. I haven’t started on that because it would require changes to Sugar code, not just Measure code, and that seemed like a much bigger task – both coding-wise and process-wise. I may take a look at it later.

I have to do some thinking about how “unproductive” a day this was. It was certainly unproductive in terms of code. However, it was probably productive in terms of realizing what my students may go through while trying to do this next semester. I’ll have to think about what I’ve learned while doing this that I may want to help them with. Even harder will be trying to decide how much to help them. Is there something important for them to learn in spending a stretch of time being “unproductive”?

Jun 092010

Today we spent our time learning how to get the source code for a FOSS project. We used git to get the source for the Abacus activity from Sugar, and then made modifications to Abacus. Jerry Breecher and I added a “decimal” version of the abacus (10 beads on each rod). The changes to the code were easy to make – mostly copying and pasting, and then making some simple changes.

The more difficult part of the task was committing the changes to my local repository and making patches. These were not technically difficult, but I don’t really know enough about how to use git. I think that a more thorough introduction to git would have been useful (although I guess I can just read the documentation on my own…) I also think it would have been helpful to have created our own branches on gitorius and committed our changes there. That would have accomplished multiple things for me:

  1. It would have allowed me to test the ssh key I created on Monday to see if I registered it correctly in gitorius. I also want to find out if that ssh key is machine-specific, in other words, will I have to create a new key on my other main machine and register that one as well, or can I use the same key on both machines?
  2. It would have allowed us to learn how to submit a merge request. Since I was creating the patches in my VM instance of the POSSE Education live CD, I wasn’t sure how I was going to get them off the VM and send them to Walter. It seems it would have been easier to just commit to gitorius and request a merge.

I spent most of the evening not working on the assigned homework. Instead, I spent my time getting a working instance of Sugar on a Stick (SoaS) running on a virtual machine. Since I had been unsuccessful at creating a Live USB version that would boot on the Mac, I wanted a version I could work in to test my Sugar activities. I had been booting the SoaS Live CD in a virtual machine, but that didn’t provide any persistence. After some failed attempts at using zyx-liveinstaller, I contacted Peter Robinson over IRC and found out that I should be using liveinst instead. That worked fine, but it took me a couple of iterations because I made the virtual hard drive too small the first time.

Today, in between assigned tasks, Peter Robinson and I are going to try to get the SoaS Live USB to boot on the Mac. He’s pretty sure he knows how to do it, but has never had a Mac to try it on.

Jun 072010

I am currently participating in POSSE Worcester State, taking place Worcester State College on June 6-11, 2010. This is a week-long bootcamp to prepare Computer Science faculty to participate in Free Open Source Software (FOSS) projects, and to be able to help their students participate as well.

My own goal for this workshop is to prepare for my section of CS 401 Object-Oriented Software Development in Fall 2010. I would like to have my students participate in a existing FOSS project as a way of learning to participate in a large software project with a large codebase and a large number of participants. However, I haven’t done this yet myself, so I am participating this week to learn how it all works.