POSSCON is upon us!

POSScon is up and coming! This Thursday I will be heading to the Palmetto Open Source Software conference in Columbia, SC. This conference is a great opportunity to meet other employees within the business of open source software, and to hear their opinions on the effects of open source software in the industry. Here are a few presenters I look forward to seeing, as well as a few questions to ask while I am there.

Michael Weinberg

Mr. Weinberg will be discussing the intellectual property ramifications of 3D printing. This talk interests me because 3D printing seems like a viable next step in the chain of newer printing technology. I would like to see his thoughts on the practical matter of developing 3D printers instead of the theoretical and laboratory side of development.

Question: What kind of restrictions could be placed on 3D printers to protect copyright and are they even reasonable/practical solutions?

Kevin Whinnery

Kevin will be talking about mobile development and the open source community surrounding it. Mobile development is a field I am interested in getting into, and I would find it advantageous to hear his thoughts in this field in regards to open source.

Question: How much harder is it to organize an open source community for mobile development rather than stationary? Are there any noticeable differences within the communities?

Jesse Andrews

One of the keynote speakers for this day will be Jesse Andrews. He will be discussing the effect of the cloud upon open source software. Many of the cloud developers have very rigid APIs that hinder development and innovation. Jesse wants to talk about ways to handle this issue. As another newer technology, I look forward to hearing about the cloud’s effect on open source software. It should be an intriguing presentation.

Question: How do the APIs of cloud development on mobile compare to the ones imposed on stationary development? Is one worse than the other?


Exercises in developing domain classes: Part I

Today’s post is a continuation of exercises in RMH Homebase. For these exercises we will be taking a class and further refining it. In this case we will be looking at the person class.

6.1 Define a new pair of functions to set and retrieve the value of variables $employer, $contact_person, and $contact_phone.

Added in variables:

class Person {

private $employer;

private $contact_person;

private $contact_phone;

Added in getters and setters:

function get_employer(){

return $this->employer;


function get_contact_person(){

return $this->contact_person;


function get_contact_phone(){

return $this->contact_phone;


function set_employer($e){



function set_contact_person($cpe){



function set_contact_phone($cph){



6.2 Add four new parameters and corresponding assignments to the constructor for the Person class, so that the status, employer, contact person, and contact person’s phone are properly intitialized. Use the following prototype for your new constructor:

function __construct($f, $l, $a, $c, $s, $z, $p1, $p2, $e, $t, $status, $employer, $contact, $contact_phone, …)

Here is the new initializer:

function __construct($f, $l, $a, $c, $s, $z, $p1, $p2, $e, $t, $status, $employer, $contact, $contact_phone, …){

$this->status = $status;

$this->employer = $employer;

$this->contact_person = $contact;

$this->contact_phone = $contact_phone;

6.3 Modify set_status function to check the the $value passed is valid. Describe unit testing implications of your design decision.

function set_status($st){

if (strcmp($st, “active”)==0 || strcmp($st, “inactive”)==0)

$this->status = $st;


$this->status = “error: bad input”;


This basic design allows for an simple set of test cases. {“active”, “inactive”, “test”}

The first two should change the status and the last should change the status to error. The other test cases needed are longer strings, blank strings, and numeral strings.

6.4 Refactor the person class by removing all the mutators that are not called from anywhere in the code base.

After removing a few mutators I rebuilt the RMH Homebase and tested to make sure the program was working. There were no visible signs of bugs after playing around with it for a hour.

Back on Track!

After a nice spring break, and a good recharge it is time to get back on track. Our main project Drupal is buzzing and busy as always and took no rest, so I took a chance to review some of the bugs from our time line and see if anything has changed. Sure enough, one of the documentation bugs, Bug 1444650, was fixed by the community. They went ahead and tidied up the documentation. Then, Bug 1431512  was reclassified as a non-Drupal related issue and cannot be patched within Drupal itself.

A few lessons are learned from this experience. For one, I learned to be more assertive in tackling bugs. I should go ahead and be more forthright in assigning bugs to myself to prevent other users from patching before me. Also I must be more proactive in addressing bugs so that they are not fixed before I have a chance to look at them. Basically it is all a matter of time management. Bug fixing like all software engineering must be a well-timed and organized process. Without this focus in mind efficiency is sacrificed in both the project and project community.

Thankfully there was one more bug left of my three that had not been looked at yet. So for this post we will focus on this one. Bug 1438990 details a language error that occurs within Drupal. Essentially when a node contains page translations, if the translations are a subset of the entire sites languages then instead of using the default language for the page, the node will use the first language within the array subset. The bug reporter provides some good screen shots to demonstrate the problem.

Notice the array for the node; the language default is set to english:


Now notice that the language is not English but Bulgarian:


In my next post I will provide bug injection details and possible fixes (if time permits). Also I will be reviewing other possible bugs to add to my new revised list. Until then, keep on programming!