I know I have a ton of work to do, but I’m thinking it shouldn’t be too hard, as in it shouldn’t be impossible. I feel like I know exactly what needs to happen inside and out of this project, I have intentionally designed mockups, and I even have a suggested starting line with the obsconverter module.
Then I dove into obsconverter/src/org/openmrs/module/obsconverter… or maybe I wanted obsconverter/web/src/org/openmrs/module/obsconverter/web… or mergeconcepts/something… what was I looking for again? Slowly but surely I was figuring out the whole module code structure and getting comfortable with it. Then I was reminded that this victory should have been mine a long time ago. Glen mentioned doing something with obsconverter on May 21st, the first day of coding, but then we got to talking about user stories, concept tables, use cases, community involvement, asking questions, mockups, and the presentation, then a new project timeline… All kinds of important things that did not involve one line of code. So, all of a sudden it is Tuesday, June 26th, and I found myself a little lost, but as motivated as ever.
Tuesday night into Wednesday, things started breaking again when I realized the project was called “mergedconcepts” instead of “mergeconcepts” so I renamed it. In hindsight, maybe that wasn’t a good idea. I should have asked someone before I started trying things and making a mess. I was so excited to WRITE THIS CODE, but somehow I broke Eclipse again. I almost decided to quit and become a math major. Then I got this text from Tiny Hands International about two girls being rescued in Nepalgunj that put things back in perspective: “‘We went through fire & water, but you brought us 2 a place of abundance.’ Ps. 65:12…” I can’t help but wonder what those girls would do if they had the same opportunities I have. It is so frustrating when all I want to do is work on my project and I can’t because of all the fire and water, errors and exceptions that I don’t know how to deal with, BUT I know myself. I know I can do this, and that it will be worth all of this trouble even if it takes me longer than one summer.
There is one thing keeping me motivated. People. I know the people who are going to benefit from and be excited about my work. I want to give something back to this community of people that put its faith in me to finish this project.
 Beyoncé lyrics of the day: “There’s not a real way to live this for real// Just remember stay relentless// Don’t stop running until it’s finished// It’s up to you, the rest is unwritten.”
Monday, I took my computer to school for some professional help. It had been temperamental for the past week, but after a few hours we got MySQL working back to normal. At that point, my workspace in Eclipse was still broken and tangly, so we renamed it “closemrsspace” and I started over.
Now that my development environment was running again, I could finally check out code I needed, namely the obsconverter module and others that had some elements I was going for. I started to feel slight resentment towards my academic program for letting me ace three semesters of java-intensive classes plus web programming and never mentioning these Java Server Page things. Computer science is crazy because there is so much to learn and it’s always changing. What you can do is make friends and learn how to google effectively. 🙂
I spent Tuesday and Wednesday preparing for what I decided the most important ten minute presentation in my life to date. It was good to revisit everything I have learned this summer, especially the importance of users and their stories. Thursday was the Developers Forum: GSoC Presentations. I was way less nervous practicing for my cat, but it went okay. From the questions community members were asking, I learned that I was going to need to dig deeper to make sure I had a comprehensive understanding of everything that needs to be changed with a merging of concepts. I would also need two other things as soon as possible: a schedule and working code.
I had a working development environment, user stories, mockups, and everything all worked out in my head, but I have a developer-head. That means my user interface designs, the workflow, and my understanding up to this point needed to be validated… but how?
I assembled a project page, and Glen suggested making a screen cast to explain the module so far as a way of engaging potential users who had finished my survey and were open to more communication. My two-minute video took hours to make, but it was fun and effective. I had to choose a screen recording software, decide how to present my mockups and what to say, and then record and direct the thing. The first time I made it through without using the word “um” I posted it to youtube and sent out the link.
I couldn’t imagine getting more helpful feedback. People had all kinds of ideas for usability, functionality, and future enhancements. I updated accordingly.
Early this week, I spent time parsing the ticket for insight about how its submitters / watchers operate, assuming they were potential users of this project. My mentors invited me to question such assumptions (everything) and come up with a list of hypotheses related to my user stories that we could prove true or false. From this list, I generated a survey to send the ticket watchers/ submitters and the implementers list. In this way, I asked questions about implementers’ relationship with the concept dictionary and how they maintain one or more sites. I was able to follow-up-Skype with Ellen, the ticket-submitter from PIH, and e-mailed some other friendly survey-respondents to learn even more about duplicate concepts, the scenarios and scope that this module should cover, some history of concept management. And, as it turns out, Ellen knows all about FACE AIDS and has met the team I stayed with in Kirehe, Rwanda.
To be honest, I don’t know how much of this information is related to the code behind the module that will take references from one concept and point them to another concept, but it gives my whole project some perspective. From here, I can ask potential users smarter questions when they come up because I understand their situations, and better yet I know where in cyberspace to find them.
OpenMRS University this Wednesday was about Concept Mappings in 1.9+ with Andy Kanter. Perfect. 🙂 I recognized multiple attendees’ names. I even thought of a question. This was an important moment because Glen has encouraged me to speak up and be involved with the community. I asked about what happens to mappings after a concept is retired. A little later, someone mentioned my GSoC project. Perfect opportunity to chat it up. My friends know this – I struggle with wording. I was still thinking about whether or not to add an exclamation mark and if a smiley face was appropriate, and by then the subject had already changed. Oops. It didn’t even really matter what I said, but if I had turned on my microphone and said something, some of these OpenMRS friends would know that Jordan is the girl working on this concept project… Lesson learned.
I spent the rest of the week digesting my new knowledge of concept management and using it to make mockups.
As an OpenMRS implementer, you put a lot of time into creating maybe a thousand+ concepts for your site. What happens when you want to import another concept dictionary for the sake of having more concepts or compatibility with other sites? I was on a mission to find out.
In OpenMRS, I made myself a form with custom concepts, and a patient to try out the form. My next goal was finding and importing the MVP dictionary without losing my patient’s data. After aquainting myself with MySQL Workbench (and Navicat when Workbench wasn’t cooperating), it was easy to generate an sql file from the OpenMRS 1.9 standalone database tables containing the MVP dictionary I wanted and then compare the flags with an older version of this sql file from a reliable source.
One problem: “DROP TABLE IF EXISTS”
I realized there is no straight forward way to adopt an outside dictionary without jeopardizing local cocepts. Furthermore, even if I was already using the MVP dictionary and I had any local concepts in my instance of OpenMRS, there would be no easy way of updating it. I was released from that mission and ready to move on.
Almost two full weeks into the “Summer of Code” I was anxious to write code, but wasn’t ready. Without proper guidance, I might have been tempted to read the ticket about a hundred times and go for gold. This is where Agile comes in.
I also spent time that week making a diagram of all of the concept tables in the OpenMRS data model, and trying out these missions recommended by Janet. 🙂