The previous past couple of weeks I have been neglecting the Modify Dosage System ticket due to switching gears and reading (skimming through parts) the Head First Design Pattern book. I found the book to be enjoyable to read and full of useful information. It would be a great book to somehow integrate into the new software development track. Design patterns play such an essential role in developing software that is efficient and maintainable that I believe it would be a great benefit for freshmen to become familiar with them. I enjoyed listening to everyone’s presentations, it was a great way to find out the books material without having to read it yourself. I believe that for the most part everyone enjoyed this project learned a great deal from their own and other’s presentations.
With book presentations over my plans for the final week is to (with help from above) be able to figure out how to correctly connect our new modify dosage system to the existing database that the current drug dosage system is using. The last time I was working on it I was able to input information but when I attempted to save the new dose it would get replaced with the current dose instead. I get the feeling that some function is being triggered dynamically somewhere which leads to my input getting reverted to the original dose. The calendar input box will select the date and save correctly and the save button also functions the way we want it to, so it’s really just the dosage button that is being a nuisance. Hopefully this week we can put some significant time towards this issue, I prefer to leave this class with my head held high and a modify dosage system works! TR and I plan to meet for a full day to see if we can resolve this issue. We also plan to work on our presentation so it would be great if we could get the system to actually work before Wednesday’s class.
Till Next Time,
This week I made little to no progress on the modify dosage system. I have spent most my time on reading the Head First Design Patten book. Seeing that the book is about 620 pages I was unable to truly read through all of the content, so I had to pick and choose certain sections to read and skim through the rest. My first impression of the Book was that I was intrigued by the outline of the book. The book does a great job keeping you interested by a variety of ways. Some of which include crossword puzzles, humor and plenty of interactive diagrams. The book also teaches in more of a conversational problem solving manner giving you the feel that you are actually working through problems with other programmers instead of dry technical explanation for the examples. The patterns covered in the text include the Strategy, Observer, Decorator, Singleton, Iterator, Composite, Factory, Facade, State, Proxy, Command and Template Method. An appendix provides a very quick rundown on a few more that didn’t make it into the main text. These patterns are introduced in a gently gradually growing manner that adds additional objects to extend the patterns as you gain the idea of and master array of patterns. I liked the way that the book made you think about and decide which pattern would most effectively solve the problem at hand. Throughout the book they introduce real-life problems that the author has you consider many possible solutions. He even has you consider solutions that aren’t the best idea. After the consideration of the solutions the author will even describe to you why the bad solutions are as such. The entire books examples are written in java so it fits in well with Worcester States courses seeing that the majority of the programming classes are java based. I feel that introducing design patterns in a freshmen course would be beneficial seeing that design patterns are used in every real world application. The book continuously stresses the idea of favoring composition over inheritance in most cases, as well as programming to an interface. The author tries to stress a “Has A” relationship is much better than an “IS A” relationship. The book uses a great example of this; the example states that not all bathrooms have bathtubs, so we probably don’t want to include a bathtub in a Bathroom class. I wish I would have had more time to actually be able to read the entire book, but with all of my other classes and final project going on I just didn’t have the time. I also want to try to finish the modify dosage system before this semester ends, so TR and I are going to try to find a decent amount of time to get together and work on it. We are still having trouble correctly data binding some of our textboxes and drug selection drop downs. A lot of the code comes from several levels of classes, so it is difficult finding exactly where implementation is needed. As I stated in my last post I was able to create a drug concept and add it to a current patient, so I will start to work on this project after this upcoming Monday.
The majority of this week was spent switching from OpenMRS 2.0 and applying the earlier and more stable version of OpenMRS, version 1.9.7. I also decided to reinstall the large test database that was downloadable through OpenMRS. The reasoning behind this was that I was unable to create a drug regimen and then modify that regimen for a current patient. I thought that it might have something to do with the way I initially installed OpenMRS and or the test database. I wanted to see if I was getting the java.Lang errors because the data wasn’t getting parsed into OpenMRS correctly. So I began by uninstalling the latest version of OpenMRS and reinstalled the earlier and more stable version 1.9.7. Once I made the switch and ran mvn clean install and jetty:run, I reconnected to OpenMRS and remembered that I no longer had my large patient database, so I decided to move forward to create a patient instead of reinstalling the entire database. After I created the patient I once again attempted to add a new drug regimen to the patient and again just as before I was given two general errors when I would attempt to add a drug regimen. The first error stated that the start date for the drug regimen had to parse a year in a four digit format (which was happening). The second error was complaining that there was no existing drug ID for the drug name I was trying to assign to the patient. Growing in frustration over the fact that I have been unable to add a regimen so that TR and I can actually get to test our modify dosage system I decided to reload the large patient database one last time and see if that would make a difference. Once I reinstalled it I started MySQL I opened the tables just to make sure that my copy of data wasn’t corrupt. After I satisfied myself that the data was not corrupt I again restarted OpenMRS. Now armed with a full database I tried adding regimens to dozens of different patients with no avail. With this approach obviously not working I started to think that maybe my permissions were set wrong on my development account. So, I went into my Manage User page just to check and I found that my permissions were set correctly. Now totally frustrated I decided to take a break and rethink my current dilemma. Instead of trying to add a drug regimen to a patient I decided to create my own drug and concept and assign it to a patient under the Manage Drug Orders option in the Administration page. First I created a concept because I found out that you cannot create a drug without having a concept first. So with the creation of my concept I went ahead and created the drug Advil, yes Advil, surprisingly enough Advil was not in their database for an available drug. After the concept and drug were created I went into the Manage Drug Orders page in the Administration section and was able to select a patient and actually assign that patient to the new drug I just created. Although this method worked it is still not the correct way to assign someone to a drug regimen. Seeing that TR and I are running out of time to complete this ticket in class we are going to just have to accept that our system may not ever add regimens correctly, but at least now we are able to begin testing whether or not our implementation is functioning correctly. If it is not we will at least have time to re-work the code.
Till next time,
Last week TR and I basically finished implementing the layout of the Modify Dosage System. We set up a clear button along with a submit button. There is a drop down menu that should populate with the current drug name that the patient is currently taking or will be taking in the foreseeable future. We have a start date input box that pops up a calendar for selecting a start date for the modification of the drug dosage. This calendar will also override the calendar’s start date in the Current Patients Drug Regimen. The dosage input textbox will also override the Current Patients drug Dosage textbox. We have included a Drug Brand input textbox that is not needed to complete the drug dosage modification but more of an option for the end user. Everything seems to be data bound correctly so now we focus on testing and debugging our work.
As soon as we began trying to test or code we ran into issues. For starters when we tried to create a new drug regimen we would receive multiple exceptions that included incorrect date format even thought it was being inputted in the specified format. Drug ID’s that should have been connected to a valid drug were giving invalid drug selection exceptions. Thinking that these issues might have something to do with the version of OpenMRS I was running I uninstalled my OpenMRS and reinstalled it, I also deleted the 5000 patient database and reinstalled that is well. After the reinstallation of both OpenMRS and the sample database I again ran into the same issues that I originally began with. I also tried to swap out to the latest edition of the War file that was available for download, but had no success nothing really changed. Recently TR emailed Daniel Kayiwa (JIRA) from OpenMRS and we are awaiting word on the next actions we should take to resolve this issue. Until then we are kind of at a standstill.
Till Next Time,
Initially I went forward setting up my machine which runs on Windows 8 OS. After running into issues with the JDK installing properly. I decided to go ahead and install Ubuntu on VM Ware. I’m glad I made this decision early because I feel as though I saved myself a lot of headaches. First of all it was nice that Ubuntu made it simple to update to java and javac 18.104.22.168_04, so after I installed that I went ahead and installed MySQL. Again I was pleased to find that Ubuntu came pre-packaged with MySQL 5.5 which again made installation a breeze just set up username and password and I was good to go with that. Next came installing the SDK for OpenMRS. This is where I hit my first snag. The version that was in the OpenMRS Users Guide OpenMRS 1.0.6 didn’t play well with the version of javac I had installed, so I did some searching and found a version new OpenMRS SDK that was 1.0.7. Once I unzipped it and created a folder in the /var/lib/ called OpenMRS it automatically created a file called openmrs-runtime.properties along with other files. After that was set up I then turned to install Maven. Once Maven was installed. I went to install Github, once again the version of Github on the OpenMRS Guide didn’t compile correctly on my machine so I searched and found Git version 22.214.171.124. I then cloned the openmrs-core repository on GitHub using my Git client with the command git clone https://github.com/openmrs/openmrs-core.git. I then changed directories to openmrs-core by cd \openmrs-core where I ran a clean build by the mvn clean install command. I had a successful build with:
[INFO] Reactor Summary:
[INFO] OpenMRS ……………………………………….. SUCCESS [16.781s]
[INFO] openmrs-tools ………………………………….. SUCCESS [6.550s]
[INFO] openmrs-test …………………………………… SUCCESS [1.312s]
[INFO] openmrs-api ……………………………………. SUCCESS [3:16.633s]
[INFO] openmrs-web ……………………………………. SUCCESS [1:20.083s]
[INFO] openmrs-webapp …………………………………. SUCCESS [35.861s]
[INFO] openmrs-release-test ……………………………. SUCCESS [33.070s]
[INFO] BUILD SUCCESSFUL
[INFO] Total time: 6 minutes 11 seconds
[INFO] Finished at: Fri Feb 21 13:07:01 PST 2014
[INFO] Final Memory: 68M/174M
After I ran the build I again switched directories to webapp by cd /opennmrs-core/webapp. Once in the webapp directory I ran the command mvn jetty:run. Upon running that command I was able to access OpenMRS using the url http://localhost:8080/openmrs/index.htm not the url given in the Developers Guide. Once I completed the required the initial setup I was good to go! All in all I think the entire setup process went fairly smoothly, but I do think that the Developer’s Guide itself needs some updating. Mainly with the types of versions that play nice with each other, and give a complete localhost address.
Till next time,
The Wiki Editing I felt was a great learning experience. I’ve never had my own personal wiki page so that’s pretty neat. I like the fact that I now have a page that I can store, edit and share information with others is very powerful. I often use Wiki to look up everything from types of dinosaur’s to answer my son’s questions, to computer science questions for my own use. I’m not use to putting information out there for the world to access, I’m one of those people who feel as though once you put something out there it’s out there forever. I imagine having this wiki page will break me out of my shell!
Issue Tracker Activity
The Issue Tracker Activity was fun. It really gave you a lot of information in a single activity. This activity was definitely one of my favorites. Although I have some previous experience with other types of Issue Trackers it was a great refresher. Having you have us list all of the different definitions for the key terms really made me familiarize myself with the Issue Navigator itself. Part 2 of the exercise was just as helpful for understanding how OpenMRS sets up its projects in their trunk. It was fantastically easy to navigate thought their interface to find the information that was requested. Everything seemed to be in order and the layout of the trunks information was obviously thought out.
Git Videos and Tutorials
The Git Videos and Tutorials were very informative and useful. One of my favorite features described on the Git video was Git’s ability to operate completely off-line. I think that’s amazing coming from Tortoise SVN where you would need a network connection to do any pulls, forks, merges or commits. I was also surprised that Git has been around for several years. I guess over that time it has been able to implement useful features and easy commands that make it a leader in version control software today. I like the fact that the software is simple enough to navigate and operate for the novice developer, but has the capabilities to conform to a more advanced developer. I also like the fact that Git follows content and not the files themselves, Git actually will follow the code through the files and that’s pretty neat!
The Git Challenge was fun, I earned my badge! I enjoyed the format of the exercise. Being able to see the Git commands and type them simultaneously and then observe the output was very helpful in grasping the basics of Git. I believe I will continue to go through the tutorials when I have free time.
Selecting three issues
Create a German messages.properties translation file
Description – It would be convenient to have a German translation of the messages.properties file.
Why this ticket? I’ve worked with translation tools such as LocBaml and Redpin for .Net applications in the past so I think this would be a great way to get my feet wet.
Saving the same name more than once should not be allowed.
Description – I Can save Relationship Types, Concept Classes, Patient Identifier Types, Field Types, Drug Order Types, with the same name, any number of times. I guess this behavior is not intended.
Why this ticket? It seems like a bit of redundancy that could be cleaned up. Maybe having multiple name saves could lead to conflicts.
Description – There have been many, many confused users who cannot get their reports to run because their scheduler username and password global property is not set to a valid user with appropriate credentials.
We should check this on the run report page and ensure that such a valid user exists before allowing a user to run any report. If the credentials are invalid, we should provide a clear error / warning, and provide instructions for the administrator to update these settings.
Why this ticket? I think with this improvement the user would at least get an immediate warning that invalid credentials are being entered, leading to less confusion and time loss.
IRC Activity and Weekly Readings
The IRC activity was interesting to say the least. Like I mentioned in my previous blog I have never used an IRC before. The company I previously worked for used Skype and Go to Meeting for conversing when all team members weren’t on site. My first impression of the IRC was that it was just a chat room of sorts, but after doing the activity in class I could tell that it was a much more powerful tool than that! I liked that the MeetBot was able to keep track of the meeting topic and minutes. That could be very useful for future referencing. I also think it’s cool that there can be multiple chairs for a single meeting. During our exercise in class I found it a little tough for me to keep up. Usually when I wanted to respond or comment on a topic, the topic had already changed. I think as time goes on and I get used to communicating with the IRC my contributions will grow. In general, I’m more used to conversing in person with team mates, so I truly believe that this IRC will break me out of that shell. Also I realize that at some point I will have a question that more than likely my team members will not be able to answer so via the IRC, I can ask a question and possibly receive an answer within minutes! The commands also seem very straight forward and easy to implement with some practice. All in all it was a very interesting and amusing experience given the rooms sereneness.
In the OpenMRS reading I got the feel that this project really does have a sense of community and that they care and respect eachothers thoughts and ideas. The OpenMRS’s Code of Conduct seems well thought out and looks to lay a solid foundation for a productive environment. Some of my favorite codes are “When you disagree, consult others” and “When you are unsure, ask for help”. I believe it’s important to bring in a third party into a discussion that is not bias’s to either side to hash out your disagreement. It’s also important to ask a fellow developer or mentor for help if you run into a snag. Mistakes can be made or time can be wasted if you are too proud or nervous to ask for help! I think the commit early and often will not be that big of a problem for me. While at CNC Software Inc. we often had to commit our changes that same day so that it could get tested and implemented into the nightly build so that the next morning everyone had the latest version of the software. I’ve been getting used to finding my way around GitHub and it reminds me of the old Tortoise SVN.
In 14 Ways to Contribute to Open Source without Being a Programming Genius or a Rock Star, I honestly didn’t realize that there were 14 ways to contribute. A couple ways to contribute that I found interesting were to close fixed bugs. You would think that if bugs were actually fixed that closing that ticket would actually be an exciting moment, but I guess after you’ve fixed bug after bug, attention to certain details slips or priorities simply change to fast to tie up all the loose ends. Another contribution that I found very important and valuable is adding comments in code that is not well documented or documented at all. I remember at Mastercam we had specific software that would make you enter comments in a certain fashion that conformed to specific conditions before you were allowed to commit your changes. Thus, eliminating a great deal of confusion.
While going through the list of “How to Contribute to Open Source without Coding” some caught my eye. One in particular was to suggest new features and options. While some people might be brilliant at programming they might not have the artistic/visionary gene. So having ideas or options from people who don’t even program might be a huge benefit to a projects growth or choice of direction. Another that I thought would be beneficial to the entire programming community is to build a glossary of technical terms. This way everyone can be on the same page when speaking or describing certain aspects of a problem or program feature. Leading to less confusion or arguments.
As always I think Wikipedia does a great job disbursing information on the topic at hand. Their components were very detailed in explaining the entire bug tracking system or defect tracking system.
Until next week,
My expectations of this course is to gain a solid foundation on the complete developmental lifecycle of a piece of software along with the legalities surrounding the licensing or freedoms that go along with it. I have previous experience in Agile/Scrum so I would like to build upon those previous experiences of being part of a development team and I also intend to become an active member of the OpenMRS community.
I enjoyed reading the three articles. In the article the Cathedral and the Bazaar, I felt that Mr. Raymond focused more on the bazaar methodology and his transformation of popclient to fetchmail. Although Mr. Raymond makes valid points about the Bazaar methodology and its ability to produce software that is robust and cutting edge by releasing early and often and having many sets of eyes analyzing a particular problem which in turn lead to less buggy software. I believe it is also necessary to have proprietary software. I think having closed software creates a healthy competition between companies to expand and advance their software while at the same time supplying hundreds of thousands with jobs. In one of Mr. Raymond’s quotes he stated “Too often software developers spend their days grinding away for pay at programs they neither need nor love.” Well, too often carpenters spend their days grinding away for pay building houses they neither need nor love, but they do it because it’s their source of income. Unfortunately millions of Americans are unable to work on projects of passion during business hours. In the Free vs. Open readings, I was impressed with the clarity of the Free Software Definitions. With that set of freedoms you can see why a piece of free software has the ability to develop at an exceptional rate and quality. One thing I don’t understand about free software is the ability to receive a copy of software, modify that software to fit your needs and then sell your modified software for a monetary value. I understand the saying you should think of “free” as in “free speech,” not as in “free beer”., but if some people pay while others don’t pay for the same software it seems to be a little confusing and misleading. The first four chapters of the OpenMRS development guide was a great introduction on what OpenMSR is and what OpenMRS’s goal is. Open source projects like this one that have a humanitarian goal must be very fulfilling to those who contribute. It seems to be a win/win for all parties. For the patients themselves they now have the ability to have their medical information in a central place where it can be accessed, monitored and updated. It also benefits the patient by less medical mistakes where hand- written physician records are misinterpreted and incorrect medication is provided to a patient. For the software users in the hospitals and clinics it gives them the opportunity to become more accurate and efficient when entering or retrieving patient data. For the developer they get to contribute to a piece of software that can truly make an impact on millions of lives.
I have heard of IRC but have yet to actually make use of it, so I am looking forward to using it. While I was working at MasterCam CNC Software Inc., if a team meeting were taking place over the internet we would generally use Skype or some form of Go to Meeting. Skype was great because you could easily embed code snippets right into the textbox for your group to see. It was also great for quickly sending files and links to team members.
The Git activity was interesting. Using the Git Bash felt a little foreign to me. I’ve used version software before called TortoiseSVN. TortoiseSVN came with a pretty polished GUI that made finding and handling conflicts on large files a breeze. Push, pull and commit were also simple. I liked the way it displayed and highlighted conflicting areas of the files side by side, which could make a real stressful commit a little less stressful. I’ve also noticed that Git comes with a GUI so I think I will use that feature while working on OpenMRS.