Janet has prior experience teaching software development with community-based projects in her former role at Grinnell College. She is concerned this model may not be sustainable in a department of three faculty and is therefore exploring other models for community-engaged software development.
I finally wrote my blog post about POSSE. It was nice to meet everyone this week!
Reflections on User-Centered Design & Open-Source Software Development
My research is in human-computer interaction (HCI), and I regularly teach user-centered design (UCD). I've also come to regularly teach a software development course. You'd think these things would be entirely compatible, but in fact there are some deep conflicts between the approaches.
I've long been aware of the tensions between agile software development and the user-centered design process. They share the practice of iterative design and development. But where agile says start coding as quickly as possible, user-centered design indicates that you must, at least, have a conceptual model that is well-grounded in understanding the target users and domain. I have made my own contribution to resolving this tension, and I think there is work towards a consensus that designing and validating a conceptual model is part of the practice of doing Just Enough Design Initially.
Reading excerpts from Eric Raymond's The Cathedral and the Bazaar has made me aware of a tension between the underlying values of UCD and open-source software (OSS). Raymond writes in The Social Context of Open-Source Software:
18. To solve an interesting problem, start by finding a problem that is interesting to you.
This stands in sharp contrast with the first principle of UCD:
You are not your user.
This is meant to emphasize that what makes sense to you as the software developer, what is useful to you, may not be useful or what makes sense to the people (usually other people) who will benefit from using your software.
I can see both sides of it. If software is useful to you, yes, chances are good it will be useful to other people as well, and there is value in sharing it. And if there is a need, there should be enough people empowered to develop software that someone in the open-source community is working on fulfilling that need. But it's impossibly idealist to assume it is. There's also a HUGE tension between Raymond's maxim and the idea of involving students in HFOSS, which is engaging students in solving problems that are not their own problems.
I'm going to channel my students and say I find these historical readings not inspiring but problematic. What have women and other people from outside the dominant software culture written about open-source software?
Intro IRC Activity
- How do people interact? Very easily. Darci seems to be in charge of the meeting. She introduces the topics ("updates", "next steps") and records the minutes using the meetbot. From a not-too-careful skim, it looks like everyone takes turns stating their updates and next steps. There is a conversation about each person's updates as others ask questions or offer advice.
- What is the pattern of communication? Is it linear or branched? Formal or informal? One-to-many, one-to-one or a mix? The conversation is branched, informal, and a mix of one-to-many and one-to-one. Sometimes one person holds the floor for several turns.
- Are there any terms that seem to have special meaning? The meetbot commands - #startmeeting, #topic, #info, #action, #link, #endmeeting
- Can you make any other observations? I noticed that john_ has an underscore_ after his name. Is this transcript recorded from his perspective? - Yes. And does "* john_" indicate a private thought rather or a public utterance about oneself in the third person? Also, this is interesting: "18:31:39 <Stoney> (sorry person at door... i'm back... reading)" I think he wrote this because Heidi had just asked him a question but he needed some time to answer it.
- Bonus question: Why didn't Heidi and Darci's actions get picked up by the meetbot? The meetbot seems to be case sensitive. Their usernames were typed incorrectly, with a capital letter ("Heidi", "Darci" instead of "heidi", "darci")
I observed the Ushahidi IRC channel (#ushahidi on Freenet). I found a grad school classmate there, Pat. I tried to start a private conversation, and wrote a public message by accident. I asked if there was much going on, and she invited me to join the Ushahidi skype group. There were a lot more people connected to the Skype channel than to the IRC channel, but still no conversation. About 24 hours later I got an invitation to join the Ushahidi group on HipChat as a guest.
I joined the #sahana-eden channel also.
I tried joining #mousetrap on irc.gnome.org. I found a bot and Kevin Brown. Not much going on. I also joined the Gnome accessibility channel, #a11y.
I finally joined the foss2serve group in hopes of observing something. It was totally quiet! I wonder if I would have seen more if I'd been able to observe on a weekend.
Contributions. I could most easily see my students getting involved as developers, since this would be the point of engaging with the project in an upper level software development class. I could also imagine having students engage in design during part of my HCI class. Students might also draw on their liberal arts skills to engage as content writers or translators. Other possible engagements are contingent. For example, if my local schools wanted to adopt Sugar, my students might also take on roles of People Person or Educator as well.
Tracker. To report a bug, go to the github page, find the relevant activity, sign in to GitHub, and visit the Issues tab, and click the big green button to file a report. If you haven't written bug reports before, read this guide. It looks like you just write a title and some text. I'm not sure if or how this is connected to the information on . How do issues get from GitHub to Trac?
Repository. It looks like  is an out of date link since the last activity was in 2014. There is a new repository hosted at  where the last activity was about two weeks ago, so, a web-based common repository.
Release cycle. The release information says: "Each release cycle will include development, beta, release candidate and final releases." The roadmap is updated by the release team at the beginning of each release cycle.
Community. Sahana Eden has similar roles to Sugar Labs, including Developers, Translators, and Designers. Other roles are conceived differently: Sahana Eden has not Content Writers and Educators but rather GIS Specialists, reflecting a different problem domain. There are Testers, Documenters, and Bug Marshals, all roles I could imagine my software development students getting involved with. There is an explicit SysAdmin role---maybe because Sahana Eden, unlike Sugar Labs, includes a hosting service? It seems like the sysadmin needs for supporting development might be similar, so it's odd Sugar Labs doesn't have this role. Instead of People Persons there are Newsletter Report Writers, maybe reflecting a less involved relationship with the user community.
Tracker. There are lots of categories of bugs, and they seem to be organized by status/severity/urgency instead of by sub-project. The information about each report seems to be pretty similar.
Repository. You get the source code using the command
git clone https://github.com/sahana/eden.git. So there is a web-based repo hosted by GitHub.
Release cycle. The provided link seems to indicate there are three active milestones: 0.9 (2011, 92% complete), 1.0 May 2012, 72% complete), and 2.0 (no date set, 98% complete). I really don't understand this.
Each has a list of key features required. You can click on the progress bar to see information about all the tickets assigned to the corresponding milestone.
I'm kind of lost - I would need some orientation to understand the project status and what happens next.
But going back to the developer page, I found a link to a list of Blueprints -- descriptions of projects that want implementing. I also found a link to Requirements for Sahana 2 which might be a good place to read to understand what's going on with the project.
This activity is pretty challenging since projects seem to reorganize their information from time to time, and there is a lot of different (possibly related) information fragmented across different locations that is not necessarily linked together. I would almost rather have been sent on a scavenger hunt with only a link to the project home page and keywords to put in Google rather than links to specific pages that seem to be maybe out of date.
FOSS Field Trip Activity
Part 1 - SourceForge
I searched for projects under Simulations. There are nearly 3000 projects in this category written in at least 15 different languages. The most common languages are C++, Java, C, and Python.
I could not find definitions of the project statuses on SourceForge. Here's what they mean to the best of my knowledge:
- Inactive - No longer under development; last updated more than 90 days ago (?) - based on looking at the projects with this status and sorting by last update
- Mature - Reliable, actively maintained, field-proven (?) - Stack Overflow: What is mature software?
- Production/Stable - Testing completed and ready to use
- Beta - Black box testing by users, often a select group
- Alpha - White box testing by developers - Source: Software Release Cycle, Wikipedia.
- Pre-Alpha - Not yet ready to be used
- Planning - Implementation hasn't started yet
Automata Editor is listed as Mature, while Logisim is listed as Production. Both were last updated in 2013 and I thought that Logisim was no longer under active development. Automata Editor has had 37 downloads in the last week and two ratings, while Logisim has had thousands of downloads and 84 ratings.
Sweet Home 3D is the most popular in this category at over 125K downloads this week. I sorted by "Most Popular." I suppose it's most popular because it has a broader audience than most software in this category.
I looked more at the GNS3 project. I'm curious about it because once upon a time I used NS3 in my research.
- It is used for simulating computer networks.
- It is written in Python.
- I think it is used by network students and/or administrators, from reading the one review that says something more than "great job."
- The last update was 17 hours ago. It looks like that was a nightly build.
- Nonetheless, it doesn't seem very active. The last bug report is from 2012. How can I find out when the last commit was?
- There are two committers, gns3dev (a group?) and noplay (an individual).
- I would consider using this project since there are 5K downloads a week. I'd probably go do some more reading to find out what the alternatives are.
Part 2 - OpenHub
- OpenMRS Core has over 3.5 million lines of code.
- I couldn't see where there the contributors are. The map never got past "Loading." The average number of contributors over the last 12 months is somewhere between 12 and 20. The top three contributors have all been involved in the project for over two years. The two top contributors have been involved for over five years.
- The average number of commits per month over the last year is somewhere in the ballpark of 50.
Project assessment activity
Hmm, I wonder if I can embed a file here. File:Davisj-openmrs-assessment.xlsx
Yes, it seems I can.
I know how to use a blog. My blog has a wide audience. I do not want to make a post on the suggested topic. I will eventually write a post that more broadly addresses my explorations of software development in the curriculum, including my participation in POSSE.
In response to the blog prompt: Wow, this is kind of overwhelming. I have no idea what kinds of projects I would want my students to contribute to.
Given my research on persuasive technology, what comes most quickly to mind is something related to self-improvement or environmental sustainability. "Environment" is kind of hard to search for... SourceForge is really organized around traditional values of computer use (efficiency and entertainment) rather than values like these. There don't seem to be any active projects on SourceForge related to environmental sustainability. RedNotebook looks kind of interesting, but there is only one contributor.
The FOSS2Serve list of HFOSS projects is way less overwhelming. There's lots of interesting accessibility stuff here. A couple of interesting projects under Ecology... I wonder how much domain knowledge they require. We use Sakai at Whitman, at least for the time being, so that might be interesting for students to contribute to. Several projects related to food pantries, for which I wonder if I could find a local user. Several things under NGO administration. And I wonder if our library uses any of the listed library software? I know some librarians.
CiviCRM looks potentially useful to a range of non-profits.
I see Allen Tucker's Ronald McDonald House project.
This makes me think I am really most interested in a project that has a local user. I would be perfectly happy to have students build on something that already exists and is in widespread use rather than starting from scratch. I need to talk with people here and find out what their needs are.
P.S. I would rather read a paper than watch a lecture video any day. I took the liberty of editing Evaluate a Project (Activity) to include a link to the SIGCSE paper as an alternative to watching the videos.
At the moment there are two courses I'm thinking about, a one-semester, 300-level software design course and a year-long capstone course. Both would be required. Neither course exists yet. (I do not want to teach a course that is explicitly about open source software development. I want flexibility in the capstone, and I want the software design course to focus on CC 2013 learning goals.)
I want the capstone course to accommodate students (and faculty) with different interests. Independent_Capstone_Project_Design is a pretty obvious fit (Hi, Jim!) Although the introduction addresses issues of individual vs team assignments, the assignment seems geared towards individual students. I'd to follow up with Jim and find out if he has actually done this. But in the meantime... I might be teaching a capstone with only three students in 2017-18... It might be nice for them to have the option to do individual projects.
For the software design course...hmmm. I wish more of my predecessors had actually filled out the project description rubric where it says what CC 2013 learning goals are addressed by each activity. Can anyone recommend a textbook? Or an existing course to plug activities like these into? I may need to dig into the CC 2013 exemplars.
Code reading and software design:
- CS2 Data Structures Activity could fit early into the course as a bridge from CS2, especially if my students are just learning Java.
- I like that Backwardly Compatible Code (Activity) is very concrete and self-contained! Same for Finding the Code Responsible for Behavior. I'm really intrigued by the idea of having students dig into the Java code base, but it also seems these activities could be applied to another project as well.
- Document Code with Meaningful Comments (Activity) is interesting but needs an (uncommented) project or module of suitable scope.
- Code Base Understanding looks intriguing---I particularly like that it emphasizes the use of suitable tools to understand a code base---but it's obviously incomplete.
- Perhaps it could be broken out into smaller activities, e.g., focusing on identifying and critically assessing code smells.
- I'm quite interested in the UML a project activity. This would require the identification of a project of suitable scope.
- The Software Design Architecture Comparison seems like a good predecessor or follow up to the UML activity.
- An idea: A design pattern scavenger hunt -- look for naturally occurring examples of patterns (or antipatterns) in an open source project.
- Solving_A_Bug is a nice self-contained activity, though specific to JUnit (maybe appropriate if other activities focus on the Java language?)
- If students haven't already learned Test_Driven_Development, they will need to learn it in this course.
- It's important to teach about Test Coverage with TDD. I like the use of tools. I do not expect students to have used such tools before.
- I really want my students to learn about refactoring with TDD.
Hmmm... I am familiar with the Engineering Software as a Service curriculum. It does a really good job of addressing the CC 2013 learning goals. I wonder if I could choose an open source Rails project for students to dig into? Like maybe look at OpenSourceRails? I wonder if I could get the City of Walla Walla interested in using Loomio...
Okay, now I'm tired. The next IRC meeting is in less than 12 hours and I should go to bed.
P.S. If I wanted to jump over to Java this course looks like it does a lot of what I want.
Part 1 - Bug Reports
- Open a browser and go to the GNOME Accessibility Bugs
- Define what each of the column names below indicate. Include the range of possible values for 2-7 below. Feel free to explore beyond the page to find more information.
- ID - a unique identifier for the bug - Obvious from looking at the report.
- Sev - Critical, Major, Normal, Minor, Enhancement - Revised the table columns to see these.
- Pri - Urgent, High, Normal, Low - Revised the table columns to see these.
- OS - All, Linux, Solaris, Mac, Windows, open. What, no BSD? - Revised the table columns to see these.
- Product - The particular Gnome tool to which the ticket is relevant. There are too many to list here.
- Status - UNCONFIRMED, CONFIRMED, IN_PROGRESS, RESOLVED, NEW, ASSIGNED, REOPENED, NEEDINFO - Listed at the top of the bug list or in the definitions on the Bug Fields page.
- Resolution - FIXED, INVALID, WONTFIX, DUPLICATE, WORKSFORME - Found definitions on the Bug Fields page.
- Summary - A short summary of the bug written by the submitter (can it be revised by others?)
- Describe how you discovered the definitions and how did you find the information from above (hint: the advanced search shows the options or the Reports link has a link)?
- See above
- Identify the order in which the bugs are initially displayed?
- I don't seem to be able to get it back to its initial state. I suppose I could clear my cookies, but that doesn't really seem worth the trouble.
- What is the meaning of the shading of some bug reports?
- I have no idea. I give up.
- What is the meaning of the colors used when describing a bug (red, gray, black)?
- Red - Critical; Gray - Enhancement; Black - Other severity
- Select a bug that you think that you might be able to fix and look at it more closely (click on the bug number). - I looked at Good Tasks for New Developers. I found Bug 323933 - party mode for UI
- Identify when the bug was submitted. - 2005-12-12
- Identify if there has been recent discussion about the bug? - There is a very long discussion, but the last comment was in 2014.
- Is the bug current? - It doesn't seem like it.
- Is the bug assigned? To whom? - Yes, to RhythmBox Maintainers (not a real person?)
- Describe what you would need to do to fix the bug. - I think it is actually an enhancement request. I would need to read the discussion carefully to find out what it the request about, install the product, test it to see what the current behavior is, compare to the enhancement request, and reclassify the request if needed. If it's not already resolved, I would need to read the discussion to find out what other people have tried and go from there.
- Repeat the previous step with a different kind of bug. - Bug 742531 - Album sort - ignore punctuation
- Identify when the bug was submitted. - 2015-01-07
- Identify if there has been recent discussion about the bug? - Yes, the last comment was in May.
- Is the bug current? - Yes.
- Is the bug assigned? To whom? - Yes, to Maia (a real person!)
- Describe what you would need to do to fix the bug. - There's already a patch using regular expressions to remove the punctuation, which is what I would have suggested. The last comment is feedback on the patch indicating that the version number needs to be set correctly and the commit message guideliens followed.
This is useful documentation on bug reports, found by Googling.
Part 2 - Collective Reports
- Click on the “Reports” link on the top of the page.
- Clickk on the "Summary of Bug Activity for the last week".
- How many bug reports were opened in the last week? How many were closed? - 288 opened, 320 closed
- What was the general trend last week? Were more bugs opened than closed or vice versa? - More closed than opened
- Who were the top three bug closers? Why is this important to know? - Matthias Clasen, Michael Gratton, Nicolas Dufresne (stormer). So you can buy them a beer? I supposed they might be good people to ask for help. Or to ask to review your patches.
- Who were the top three bug reporters? Are these the same as the top three bug closes? What is the overlap in these two lists? - Bastien Nocera, Simon McVittie, Allan Day. No overlap, which is not too surprising.
- Who are the top three contributors of patches? - Bastien Nocera, Sebastian Dröge (slomo), Michael Olbrich. There is an overlap here. If we look at Bastien Nocera's reported bugs, he submitted patches for about half of them and they are now resolved.
- Who are the top three reviewers of patches? What is the overlap between these lists and the bug closers and bug reporters? What is the overlap between patch contributors and patch reviewers? - Sebastian Dröge (slomo), Matthias Clasen, Nicolas Dufresne (stormer). There is some overlap here. The top patch reviewer is also a top patch contributor. The next two are also top bug closers (makes sense if you think about it - if the patch is acceptable, close the bug!)
- Click on the “Generate Graphical Reports” link.
- Plot a line graph of the severity of bugs by component for Orca:
- Select "Severity" for the vertical axis
- Select "Component" for the horizontal axis
- Select "Bar Graph" for type of graph
- Leave the "Multiple Images" as <none>
- Scroll down and select Orca from the Product menu.
- Click "Generate Report".
- What class were the majority of the bugs for braille? - Normal severity for the General component
- What other reports can you generate?
Download/install project of choice
After joining the forum and signing up for the email list, I followed the instructions for adding code to Ushahidi.
- I followed these instructions to enable Apache and PHP, and to install MySQL]. Note I had to run
mysqld_safeto start the mysql server before running
mysql_secure_installation. Stop mysql using
- I accidentally lost my mysql root password as soon as I changed it, and had to reset it.
- I forked the repo for the platform API.
- I added my SSH key to my GitHub account.
- I was then able to clone the forked repo.
- And then I went looking for installation instructions, and I saw I should actually be following  these instructions. Grr.
- So I installed vagrant and the
- And then I got my github token and did
vagrant up && vagrant provisionand waited a long time.
- Note: Run vagrant from the platform directory; do not run vagrant as root
- I still get a big nasty error:
There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below. Command: ["modifyvm", "fc4fbff6-3daa-4e8d-bd73-32bc871b8d89", "--nic2", "none", "--nic3", "none", "--nic4", "none", "--nic5", "none", "--nic6", "none", "--nic7", "none", "-- nic8", "none", "--nic9", "none", "--nic10", "none", "--nic11", "none", "--nic12", "none", "--nic13", "none", "--nic14", "none", "--nic15", "none", "--nic16", "none", "--nic17", "none", "--nic18", "none", "--nic19", "none", "--nic20", "none", "--nic21", "none", "--nic22", "none", "--nic23", "none", "--nic24", "none", "--nic25", "none", "--nic26", "none", "--nic27", "none", "--nic28", "none", "--nic29", "none", "--nic30", "none", "--nic31", "none", "--nic32", "none", "--nic33", "none", "--nic34", "none", "--nic35", "none", "--nic36", "none"] Stderr: VBoxManage: error: No network adapter in slot 8 (total 8 adapters) VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component SessionMachine, interface IMachine, callee nsISupports VBoxManage: error: Context: "GetNetworkAdapter(GetOptState.uIndex - 1, nic.asOutParam())" at line 1382 of file VBoxManageModifyVM.cpp
- ADDENDUM: I asked for help and was told to install a newer version of vagrant (1.8.4 vs 1.8.3). This time I got an all new error message ...
- So I deleted my clone of platform and tried again. I still get the new error:
There was an error while executing `VBoxManage`, a CLI used by Vagrant for controlling VirtualBox. The command and stderr is shown below. Command: ["hostonlyif", "create"] Stderr: 0%... Progress state: NS_ERROR_FAILURE VBoxManage: error: Failed to create the host-only adapter VBoxManage: error: VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory VBoxManage: error: Details: code NS_ERROR_FAILURE (0x80004005), component HostNetworkInterface, interface IHostNetworkInterface VBoxManage: error: Context: "int handleCreate(HandlerArg*, int, int*)" at line 66 of file VBoxManageHostonly.cpp
- I go looking in the issue tracker for Vagrant. I don't find exactly my issue, but some others suggest it may be a VirtualBox version issue. So I upgrade VirtualBox to version 5.0.20. (VirtualBox is also an Oracle product now?!)
- All seems to be well now. There is a bunch of stuff installing via puppet script...
- Up to here:
==> default: Running provisioner: puppet... ==> default: Running Puppet with environment platform... ==> default: stdin: is not a tty ==> default: Error: Evaluation Error: Error while evaluating a Resource Statement, Could not find declared class apt at /tmp/vagrant-puppet/environments/platform/manifests/site.pp:11:1 on node ushahidi-platform.dev The SSH command responded with a non-zero exit status. Vagrant assumes that this means the command failed. The output for this command should be in the log above. Please read the output to determine what went wrong.
- I'm stumped. Asking for help again.
- ... I had failed to do both of these steps:
gem install puppet librarian-puppet librarian-puppet install
- I cloned the platform-client repo...
- WTF is
npm? Oh, it's the node.js package manager. Guess I need to install node.js first...
- After installing node.js, I followed the rest of the instructions.
- localhost:8080 seems to work, but there's nothing interesting to see since the Ushahidi server isn't running.
- I asked for help through the handy chat popup on the support page (which seems to connect to a real person and not Clippy).
I like Jim Huggins' Independent Capstone Project Design activity, and my colleagues seemed to buy the idea. Yay! I don't think there's a need to elaborate on this activity further, especially since it will be a year before we first offer the course.
Engineering Software as a Service
So I will focus on the 300-level software design course. To tell the truth, I am starting to think I would really like to build on the Engineering Software as a Service (ESaaS) curriculum, which uses Ruby on Rails. This curriculum teaches design patterns, but students don't see them in action, which means there is a gap to fill. I'd like to have students dig into a code base and look for design patterns in action.
- Discourse is a very actively used Free Software project with a large code base. It's a very large code base, with on the order of 100 models, so either I would need to point students in the right direction, or I would need to choose a project with a smaller code base.
- Loomio has about half that many models and might be more manageable. It's appealing because It is used by many public organizations for shared decision making, which ties into my dissertation work and my current research interest in the relationship between language, persuasion, and technology.
- Or Typo is a blogging engine implemented on Rails, which the ESaaS curriculum uses for its "legacy code" exercises. Here is the SaaSbook fork. Using the same project for multiple exercises would keep things simple. Typo is OSS (MIT licensed). It also has about 50 models. It has a flat pulse, appears to be for Rails 2. I wonder if there are versions for Rails 3 and 4? Indeed, it seems Typo is now Publify for Rails 4, which is quite active.
I would really love to get involved in Loomio. I'm sure I could write a "fix a bug" assignment, which would be similar to the existing "legacy code" assignment. Maybe I will go do Evaluate a Project (Activity) on it.
But we are supposed to come up with an activity for the project we signed up for. Hmm...
Software Design with Ushahidi
I need to have some idea what kind of curriculum this activity is going to fit into. For an HFOSS software design course with the LAMP stack, Tucker, Morelli, and de Silva's Software Development: An Open Source Approach is probably the way to go. Allen Tucker taught his course here in Walla Walla, so I've looked into it a bit already. The way he structured his course, students completed a project for a local client by the end of the semester. This makes me nervous. It also m eans he has to design the assignments so students can't fail. I'd rather save the community clients for the year-long capstone, and have 300-level students working on an open source project where they and nobody else will be disappointed if they don't have working code in the end. Right, his web site is down because it got hacked (that also makes me nervous, but, carry on!) Fortunately, I have an evaluation e-copy of the textbook.
I'm going to look at the textbook exercises and see where there is a gap to fill or something worth fleshing out.
Specifically, I'm looking at Chapter 4, on system architecture, and I'm also looking at my fork of the Ushahidi code base. Getting oriented in the code, and figuring out how it maps onto any kind of architecture, is a challenge in itself. So here are some potential questions and exercises based on the exercises for Chapter 4:
- Learn how the Ushahidi platform implements the layering principle.
- What are the layers, and what are some examples of classes fitting into each layer? This exercise is mine and could definitely be fleshed out more. Besides learning about layering, the real goal would be to get oriented towards the code base. Hmm, that suggests another exercise.
- I will specify some user-facing behavior of the Ushahidi Platform. Students will examine a stack trace (or manually trace through the code?) to understand how that behavior is implemented. See also Finding the Code Responsible for Behavior.
- Find a violation of the layering principle. Eliminate that violation through refactoring the offending code. Rerun the test suite to gain confidence that your changes didn’t introduce other errors into the software. Translated from the textbook
- Using search tools provided in your IDE, find three examples of useless functions in the Ushahidi code base. Remove those functions and run the project’s test suite to gain confidence that your changes didn’t introduce errors into the software. Translated from the textbook
- Compute LCOM by hand on a specific class or small set of classes that is specified by the instructor. Paraphrased from the textbook
- In your fork of Ushahidi, use the PHPMetrics module to measure LCOM and Efferent Coupling. Mine - I don't think this tool used to exist
- How do you interpret these metrics?
- Do some research on your own to learn about the other metrics computed by the PHPmetrics module.
- Considering the various security vulnerabilities described in this chapter, examine the Ushahidi Platform's code base, issue tracker, and user/developer forums. Find a security vulnerability in the code base. Is this vulnerability, or any other vulnerability for that matter, being discussed in the forums? Why or why not? Translated from the textbook
Actually that was a pretty easy translation. I would only have to do the exercises myself to see how they work for Ushahidi (!).
EDIT from Stage 2: Does Ushahidi already have an architectural design document? Could students interpret or update this document?
The textbook doesn't teach UML. With some supplementary reading UML a project could be a good fit. It is a big project, though! I might identify a few closely coupled classes to map by hand. Or I might have students use a tool like Pear to automatically generate UML diagrams and then somehow inspect them.
Let me keep going...
- Examine the Ushahidi Platform code base and its accompanying documentation in Appendix A. Identify at least one instance of each of the following “bad smells” in the code base. Directly translated - I would just need to make sure these smells actually occur, or perhaps pick different ones, or perhaps suggest where to look.
- Long Method
- Too Few Comments
- Data Clumps
- Speculative Generality
- For each of the bad smells identified in the previous exercise, complete a refactoring that will remove it from the code base. Which of these refactorings reduces the size of the code base? Which one(s) improves its readability? Yup, this works.
- After completing the previous exercise, rerun the unit tests to be sure that your refactorings have not compromised any of the project’s functionality. Really part of the previous exercise.
- Apply the PHP coverage tool to measure Ushahidi's test coverage. Needs expanding with more detailed instructions! Actually, it looks like the Ushahidi platform is already using the php-coveralls module. I would need to figure out how students obtain a report. What are some methods that are not well covered by feature tests?
- Write new tests for some specific methods or features chosen by the instructor. I would need to identify some good choices. Awkwardly, the textbook teaches unit tests, whereas the Ushahidi project mostly uses end-to-end acceptance tests, which actually makes a lot of sense for a web application. So some supplemental materials would be needed here to teach
- This would be a good place to have an exercise that involves fixing a bug from the issue tracker (or figuring out where you would start to fix that bug). I should pick a good bug for this activity.
- Similarly, this would be a good place to have an exercise that involves adding an enhancement from the issue tracker (or figuring out a design for implementing that enhancement). I should pick a good enhancement request for this activity.
Chapter 3 is about using project tools. Other people have already written exercises concerning collaboration tools and code management tools. (In fact, we did several of them already!)
One of the interesting things about large web projects is that they are rarely self contained; they depend on modules from the public sphere. One very good exercise might be to do a close reading of composer.json, the configuration file that specifies the project's dependencies.
- Read What is PHP Composer? and Basic Usage Documentation.
- Annotate the file with comments to explain each dependency.
- What is the function or purpose of each module?
- Where is the module used in the code base? Use your IDE's search tool to find out. What IDE do people use for editing PHP, anyway? I've always used vi and the shell. Should I have my students learn grep?
- Identify modules that fall into each of the following categories.
- Modules that are used to evaluate the quality or health of the code base
- Modules that are used for deployment
- Modules that ...?
- What is meant by "require", "require-dev", "minimum-stability", "autoload", "scripts"?
- I should also have students add a dependency and install the dependencies. Do you have to do this to get started anyway? You would if it were a Rails project.
Okay, that's enough for now. I have a much better idea of some exercises I might like to have students do. And I think I have a viable textbook, with some supplements, if I do teach the course using Ushahidi.
Random notes from Stage 2
I participated in:
- Notes on TitanPad - Exercises on Google Drive
- Start with an independent study or summer project
- Download & install
- Make a change
- Contributing a module is an opportunity for a student to stand out
- Use group hand raise to get students' attention
- If people can't get the project running, that's a huge barrier to contributing! Writing or fixing instructions for running the project is a valuable contribution.
- ASK: Are these issues still active or are they out of date? 
- There is funding to develop an activity or series of activities - some will run out next August, some will go on for several more years
- OpenMRS uses design patterns extensively
- Rubrics + peer review improve student work (e.g., blog posts)
- Ask Chris Murphy about mentors in his FOSS course; structure of the prereq SE course
- Contact Ben Coleman at Moravian to find out what he is doing in his course which uses HF OOA&D
- Software Engineering Education Network
- FOSS2Serve project working to develop Evaluation Instruments; Heidi can share IRB applications corresponding to instruments
- Funding to send faculty to POGIL training (though CSPOGIL grant is about to end; another grant pending?)