<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUUBSHs8fCp7ImA9WhRVGEo.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699</id><updated>2012-01-18T04:00:59.574-05:00</updated><category term="arm" /><category term="gsoc" /><category term="sahana eden task module" /><category term="facility data module" /><category term="catagories" /><category term="javascript" /><category term="irc bots" /><category term="concise instance creation expressions" /><category term="swing" /><category term="the last lecture" /><category term="hoaxes" /><category term="regexp" /><category term="mixins" /><category term="open source" /><category term="exceptions" /><category term="bytecode" /><category term="js" /><category term="python" /><category term="sahana eden" /><category term="computer science. pausch" /><category term="closures" /><category term="sahana" /><category term="google summer of code" /><category term="soc" /><category term="gsoc meetup" /><category term="java7" /><category term="google voice tips and tricks" /><category term="floss" /><category term="google nyc office visit" /><category term="google voice" /><category term="ant" /><category term="java" /><category term="google summer of code 2010" /><category term="ajax" /><category term="google summer of code meetup" /><category term="security" /><category term="programming" /><category term="random" /><category term="gsoc2009" /><category term="hypopara" /><category term="first class methods" /><category term="web2py" /><category term="hfoss" /><category term="properties" /><category term="dwr" /><category term="regex" /><category term="gsoc2010" /><category term="openmrs" /><category term="groovy forms module" /><category term="april fools" /><category term="groovy" /><category term="jerklib" /><category term="cice" /><category term="openeverything" /><category term="bgga" /><category term="survey tool" /><category term="sahana eden survey tool" /><category term="free text messaging" /><category term="regular expressions" /><category term="foss" /><category term="fcm" /><category term="google" /><title>Rob's Musings</title><subtitle type="html">[insert witty tag line here]</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://robbyoconnor.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>55</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/robbyoconnor" /><feedburner:info uri="robbyoconnor" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CUAHRHg9fyp7ImA9WhZbEkQ.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-7808871202005683956</id><published>2011-06-08T00:35:00.006-04:00</published><updated>2011-06-17T02:55:35.667-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-17T02:55:35.667-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code" /><category scheme="http://www.blogger.com/atom/ns#" term="google nyc office visit" /><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code meetup" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc meetup" /><title>Google NYC Office tour finally happens!</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://lh5.googleusercontent.com/-6iVU3jK8gds/Te74DSjNN7I/AAAAAAAAAgs/4A_GPeT2Ivs/s640/photo.JPG"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 539px; height: 402px;" src="https://lh5.googleusercontent.com/-6iVU3jK8gds/Te74DSjNN7I/AAAAAAAAAgs/4A_GPeT2Ivs/s640/photo.JPG" alt="" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;After three years of attempting to organize a Google NYC office visit -- we finally had that happen! The above picture is the Google NYC Reception area. &lt;br /&gt;&lt;br /&gt;I must say that the Google NYC office is amazing! There are many places to eat and take breaks scattered throughout their office spaces on many floors -- one of which is Lego themed! They have the usual conference rooms, a computer museum -- with the usual vintage systems placed around. Did I mention the &lt;a href="https://lh4.googleusercontent.com/-6k_cwIv2ot8/Te75Jp2_QlI/AAAAAAAAAg0/HC9krt8qZyM/s512/IMAG0211.jpg"&gt;view&lt;/a&gt; from one of their kitchens is absolutely breath-taking? Well, it is -- just look for yourself!&lt;br /&gt;&lt;br /&gt;I enjoyed the tour very much -- and I am sure that my fellow Google Summer of Code students did as well! For me, Google Summer of Code has been largely social -- meetups are a big component of this program in my opinion -- sure we have to produce code -- but why not have some fun mingling with students who were fortunate enough to get selected in this very selective program? This was a very successful meetup indeed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-7808871202005683956?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/SibJ7Jo_jlc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/7808871202005683956/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=7808871202005683956" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/7808871202005683956?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/7808871202005683956?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/SibJ7Jo_jlc/google-nyc-office-tour-finally-happens.html" title="Google NYC Office tour finally happens!" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://lh5.googleusercontent.com/-6iVU3jK8gds/Te74DSjNN7I/AAAAAAAAAgs/4A_GPeT2Ivs/s72-c/photo.JPG" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2011/06/google-nyc-office-tour-finally-happens.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAERH0yfip7ImA9Wx5QFU8.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-539233815961890526</id><published>2010-09-03T09:11:00.004-04:00</published><updated>2010-09-03T09:31:45.396-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-09-03T09:31:45.396-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="web2py" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="sahana eden survey tool" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="hfoss" /><title>Google Summer of Code 2010: Code merged!</title><content type="html">Been a bit since an update, most of my updates were sent to the &lt;a href="http://groups.google.com/group/sahana-eden"&gt;mailing list&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.launchpad.net/%7Erobbyoconnor/sahana-eden/surveytool"&gt;My code&lt;/a&gt; has been since &lt;a href="https://code.launchpad.net/%7Erobbyoconnor/sahana-eden/surveytool/+merge/34371"&gt;merged&lt;/a&gt; into &lt;a href="http://eden.sahanafoundation.org/"&gt;sahana eden&lt;/a&gt; &lt;a href="https://code.launchpad.net/%7Eflavour/sahana-eden/trunk"&gt;trunk&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The code in its current state is very buggy and has issues, but most issues were fixed prior to being pushed to trunk. Those issues are mentioned in the &lt;a href="http://eden.sahanafoundation.org/wiki/UserGuidelinesSurveyTool"&gt;user guidelines&lt;/a&gt;. It needs to be updated to reflect current issues, those that have been fixed and those that are still outstanding.&lt;br /&gt;&lt;br /&gt;Development will continue in &lt;a href="http://code.launchpad.net/%7Erobbyoconnor/sahana-eden/surveytool"&gt;my branch&lt;/a&gt; and once I feel the feature is complete and stable, it will be merged to &lt;a href="http://code.launchpad.net/%7Eflavour/sahana-eden/trunk"&gt;trunk&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-539233815961890526?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/KYL0L6TvEaw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/539233815961890526/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=539233815961890526" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/539233815961890526?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/539233815961890526?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/KYL0L6TvEaw/google-summer-of-code-2010-code-merged.html" title="Google Summer of Code 2010: Code merged!" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2010/09/google-summer-of-code-2010-code-merged.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAEQHY5fCp7ImA9WxFWE0s.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-7763466380452311011</id><published>2010-05-31T23:32:00.005-04:00</published><updated>2010-05-31T23:41:41.824-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-31T23:41:41.824-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="sahana" /><category scheme="http://www.blogger.com/atom/ns#" term="web2py" /><category scheme="http://www.blogger.com/atom/ns#" term="sahana eden" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="sahana eden survey tool" /><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc2010" /><category scheme="http://www.blogger.com/atom/ns#" term="hfoss" /><title>Weekly GSoC Survey Tool meeting summary</title><content type="html">The weekly meeting was held in the #sahana-eden IRC channel on irc.freenode.org. Present were: Mark, Gavin, Michael, and of course whatever spectators:&lt;br /&gt;&lt;br /&gt;What was discussed:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;   We removed some of the question types from the functional specification to simplify things&lt;/li&gt;&lt;li&gt;   Discussed how michael did the ADPC _next stuff and how it can be applied to this project&lt;/li&gt;&lt;li&gt;   Gavin suggested localization -- a suggested implementation is specified -- this is a "Nice to Have" as it's outside the scope of this project for GSOC.&lt;/li&gt;&lt;li&gt;   Will discuss on the mailing list how best to generically support "wizard" like uis within S3 elegantly.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;What's on the agenda for the next couple weeks (this week will be scarce):&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;   Noodle over ways to generically support "wizards" in S3 elegantly&lt;/li&gt;&lt;li&gt;   Implement the "Template" stage (page 1 of the wizard) [&lt;span style="font-weight: bold;"&gt;first milestone as per my project plan timeline]&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Resources relevant to this meeting for the purpose of this summary:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://docs.google.com/View?id=df8w66j7_148c7n6bhgf"&gt;The functional spec&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://wiki.sahanafoundation.org/doku.php/foundation:gsoc_oconnor"&gt;The project plan timeline&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt; &lt;a href="http://logs.sahanafoundation.org/sahana/2010-06-01.txt"&gt;Meeting log&lt;/a&gt;  [&lt;span style="font-weight: bold;"&gt;meeting ends at 0109 as per the timestamp in the logs&lt;/span&gt;]&lt;/li&gt;&lt;/ol&gt;Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-7763466380452311011?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/xczlJz7lfxc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/7763466380452311011/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=7763466380452311011" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/7763466380452311011?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/7763466380452311011?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/xczlJz7lfxc/weekly-gsoc-survey-tool-meeting-summary.html" title="Weekly GSoC Survey Tool meeting summary" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2010/05/weekly-gsoc-survey-tool-meeting-summary.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEYASXs6eSp7ImA9WxFXFE8.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-8739303970813919168</id><published>2010-05-21T00:08:00.006-04:00</published><updated>2010-05-21T02:09:08.511-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-21T02:09:08.511-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="sahana eden task module" /><category scheme="http://www.blogger.com/atom/ns#" term="soc" /><category scheme="http://www.blogger.com/atom/ns#" term="sahana" /><category scheme="http://www.blogger.com/atom/ns#" term="web2py" /><category scheme="http://www.blogger.com/atom/ns#" term="survey tool" /><category scheme="http://www.blogger.com/atom/ns#" term="sahana eden" /><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc2010" /><category scheme="http://www.blogger.com/atom/ns#" term="hfoss" /><title>Introducing the Task Module for Sahana Eden</title><content type="html">Hey Folks,&lt;br /&gt;&lt;br /&gt;I needed something simple to get up to speed with &lt;a href="http://eden.sahanafoundation.org/"&gt;Sahana Eden&lt;/a&gt; and a Task Manager is simplest. I was able to bang it out in a few days from start to finish. Web2py is an easy framework to work with, and many code examples exist within &lt;a href="http://eden.sahanafoundation.org/"&gt;Sahana Eden&lt;/a&gt; that I was able to copy/paste.&lt;br /&gt;&lt;br /&gt;You can mosey on over to &lt;a href="http://survey.sahanafoundation.org"&gt;the demo site&lt;/a&gt; and play with it yourself. Just register and you should be set. Do not worry, you won't be spammed and your information will be sold. &lt;br /&gt;&lt;br /&gt;I faced one small problem once I saw everything was setup: I couldn't figure out how to get the widgets to select a user (who both started and finished the task -- these could be two different users). The gears were spun and spun and spun until an &lt;span style="font-weight: bold;"&gt;ah-hah&lt;/span&gt; moment occurred: the following function in &lt;a href="http://bazaar.launchpad.net/%7Erobbyoconnor/sahana-eden/sahana-eden-trunk/annotate/head:/models/00_tables.py#L21"&gt;00_tables.py&lt;/a&gt; in the models directory:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush:py"&gt;&lt;br /&gt;def shn_user_represent(id):&lt;br /&gt;&lt;br /&gt;  if id:&lt;br /&gt;      user = db(db.auth_user.id==id).select()&lt;br /&gt;      if user:&lt;br /&gt;          user = user[0]&lt;br /&gt;          name = user.first_name&lt;br /&gt;          if user.last_name:&lt;br /&gt;              name = "%s %s" % (name, user.last_name)&lt;br /&gt;          return name&lt;br /&gt;  return None&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Helped me to see where I needed to be and once I read this code and understood it, it all made sense to me. The following is how you render a drop-down box containing all registered users:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="brush:py"&gt;&lt;br /&gt;table.started_by.requires = IS_NULL_OR(IS_IN_DB(db,db.auth_user.id,lambda id : shn_user_represent(db.auth_user.id)))&lt;br /&gt;table.finished_by.requires = IS_NULL_OR(IS_IN_DB(db,db.auth_user.id,lambda id : shn_user_represent(db.auth_user.id)))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Where table represents the database table for your model and started_by and finished_by are the fields; the rest is validation. That's it! It was that simple.&lt;br /&gt;&lt;br /&gt;Now next week on Monday, May 24 -- the official start of the &lt;a href="http://socghop.appspot.com/document/show/gsoc_program/google/gsoc2010/faqs#timeline"&gt;program&lt;/a&gt; begins. At that point and time, this project will take a back burner and I will attempt to post AT LEAST a weekly -- if not every other week about all progress that is made throughout the duration of the program.&lt;br /&gt;&lt;br /&gt;Regular updates will be posted to the &lt;a href="http://groups.google.com/group/sahana-eden"&gt;Sahana Eden mailing list&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can follow progress via the &lt;a href="https://code.launchpad.net/%7Erobbyoconnor/sahana-eden/sahana-eden-trunk"&gt;launchpad bazaar branch&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-8739303970813919168?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/Utso5gA8oOk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/8739303970813919168/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=8739303970813919168" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/8739303970813919168?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/8739303970813919168?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/Utso5gA8oOk/introducing-task-module-for-sahana-eden.html" title="Introducing the Task Module for Sahana Eden" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2010/05/introducing-task-module-for-sahana-eden.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IDQHo6cSp7ImA9WxFXFE8.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-5359770526734058827</id><published>2010-04-26T16:54:00.008-04:00</published><updated>2010-05-21T01:59:31.419-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-21T01:59:31.419-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code 2010" /><category scheme="http://www.blogger.com/atom/ns#" term="sahana" /><category scheme="http://www.blogger.com/atom/ns#" term="web2py" /><category scheme="http://www.blogger.com/atom/ns#" term="survey tool" /><category scheme="http://www.blogger.com/atom/ns#" term="sahana eden" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="sahana eden survey tool" /><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code" /><category scheme="http://www.blogger.com/atom/ns#" term="python" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc2010" /><category scheme="http://www.blogger.com/atom/ns#" term="hfoss" /><title>Accepted to Google Summer of Code 2010: HAT TRICK!!</title><content type="html">&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_p26CNvUmZK4/S9pCXq_Da2I/AAAAAAAAAXs/BnGGFzqBqHM/s1600/gsoc2010.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 234px; height: 320px;" src="http://2.bp.blogspot.com/_p26CNvUmZK4/S9pCXq_Da2I/AAAAAAAAAXs/BnGGFzqBqHM/s320/gsoc2010.jpg" alt="" id="BLOGGER_PHOTO_ID_5465754072210697058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I have been &lt;a href="http://twitter.com/robbyoconnor/status/12899105982"&gt;accepted&lt;/a&gt; to &lt;a href="http://socghop.appspot.com/gsoc/student_project/show/google/gsoc2010/sahanafoundation/t127230768409"&gt;Google Summer of Code 2010&lt;/a&gt; for the third year running! This summer I will be working with &lt;a href="http://eden.sahanafoundation.org/"&gt;Sahana Eden&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;The Sahana Free and Open Source Disaster Management System was conceived during the 2004 Sri Lanka tsunami. The system was developed to help manage the disaster and was deployed by the Sri Lankan government's Center of National Operations (CNO), which included the Center of Humanitarian Agencies (CHA). A second round of funding was provided by the Swedish International Development Agency (SIDA). The project has now grown to become globally recognized, with deployments in many other disasters such as the Asian Quake in Pakistan (2005), Southern Leyte Mudslide Disaster in Philippines (2006) and the Jogjarkata Earthquake in Indonesia (2006).&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;The project is now being ported to &lt;a href="http://www.python.org"&gt;Python&lt;/a&gt; as &lt;s&gt;an experimental fork&lt;/s&gt; a replacement for &lt;a href="https://launchpad.net/sahana-agasti/"&gt;Sahana Agasti&lt;/a&gt; so that the software can be extended. &lt;a href="https://launchpad.net/sahana-agasti/"&gt;Sahana Agasti&lt;/a&gt; is written in &lt;a href="http://www.php.net"&gt;PHP&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I will be working with &lt;a href="http://eden.sahanafoundation.org/"&gt;Sahana Eden&lt;/a&gt; to create a tool to create, enter, and manage surveys. This should be a lot of fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-5359770526734058827?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/nPUA7BlyjMU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/5359770526734058827/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=5359770526734058827" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/5359770526734058827?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/5359770526734058827?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/nPUA7BlyjMU/accepted-to-google-summer-of-code-2010.html" title="Accepted to Google Summer of Code 2010: HAT TRICK!!" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_p26CNvUmZK4/S9pCXq_Da2I/AAAAAAAAAXs/BnGGFzqBqHM/s72-c/gsoc2010.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2010/04/accepted-to-google-summer-of-code-2010.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AHRHc6fCp7ImA9WxBaF0o.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-1094044777226307734</id><published>2010-03-28T08:32:00.002-04:00</published><updated>2010-03-28T08:35:35.914-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-28T08:35:35.914-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gsoc2009" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code" /><category scheme="http://www.blogger.com/atom/ns#" term="facility data module" /><category scheme="http://www.blogger.com/atom/ns#" term="hfoss" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>Facility Data Module v1.0 released!</title><content type="html">It is with great pleasure that I announce the release of version 1.0 of the &lt;a href="http://openmrs.org/wiki/Facility_Data_Module_Documentation"&gt;Facility Data Module&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;It is available for downloaded via the OpenMRS &lt;a href="http://modules.openmrs.org/modules/view.jsp?module=facilitydata"&gt;module repository&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Feedback is appreciated!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-1094044777226307734?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/7a9ht0IJHOk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/1094044777226307734/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=1094044777226307734" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/1094044777226307734?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/1094044777226307734?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/7a9ht0IJHOk/facility-data-module-v10-released.html" title="Facility Data Module v1.0 released!" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2010/03/facility-data-module-v10-released.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcCQ3w5fyp7ImA9WxBXFkk.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-8518797272303011247</id><published>2010-01-27T20:22:00.003-05:00</published><updated>2010-01-27T20:27:42.227-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-27T20:27:42.227-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code" /><category scheme="http://www.blogger.com/atom/ns#" term="floss" /><title>Google Summer of Code 2010 is a GO!</title><content type="html">Great news! &lt;a href="http://socghop.appspot.com/"&gt;Google Summer of Code&lt;/a&gt; 2010 is a &lt;span style="font-weight: bold;"&gt;GO!!&lt;/span&gt; Read &lt;a href="http://is.gd/7bKtg"&gt;the initial e-mail&lt;/a&gt; and the &lt;a href="http://is.gd/7bKtg"&gt;follow-up&lt;/a&gt; e-mail for more information! &lt;br /&gt;&lt;br /&gt;Be sure to subscribe to the &lt;a href="http://groups.google.com/group/google-summer-of-code-discuss"&gt;Google Summer of Code Discussion&lt;/a&gt; list to keep yourself informed about the program and to receive updates as they become available.&lt;br /&gt;&lt;br /&gt;Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-8518797272303011247?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/A6p16wTFsso" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/8518797272303011247/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=8518797272303011247" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/8518797272303011247?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/8518797272303011247?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/A6p16wTFsso/google-summer-of-code-2010-is-go.html" title="Google Summer of Code 2010 is a GO!" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2010/01/google-summer-of-code-2010-is-go.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4ASX45cCp7ImA9WxBQGEo.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-7116573361403729699</id><published>2010-01-18T22:47:00.005-05:00</published><updated>2010-01-18T23:55:48.028-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-18T23:55:48.028-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="soc" /><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code" /><category scheme="http://www.blogger.com/atom/ns#" term="facility data module" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>Facility Data updates</title><content type="html">It's been a while since I last updated on the progress of the &lt;a href="http://openmrs.org/wiki/Facility_Data_Module"&gt;Facility Data Module&lt;/a&gt;. So without farther adieu here we go:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;The relation between the FacilityDataFormSchema and FacilityDataFormSection is now Many to Many meaning that sections can now be re-used between several form schemas (or reports).  &lt;/li&gt;&lt;li&gt;It now runs without errors on &lt;a href="http://openmrs.org/"&gt;OpenMRS&lt;/a&gt; 1.5.x&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;The first item was a big problem that was a sore spot for this project since it wasn't too intuitive, ideally a user should be able to re-use a section. The second item was a freebie since the errors were likely all due to the incorrect modeling.&lt;br /&gt;&lt;br /&gt;What's next on my list is the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Allow for sections to be re-ordered within the schema (this is currently not possible and is a show-stopper.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Fix up the calendar management pages -- those are horribly ugly, but this is after all a first pass, so that is to be expected right?&lt;/li&gt;&lt;li&gt;Currently, it does not validate inputs for Numeric data types -- It need to.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There still needs to be the ability to analyze the data that exists in the system to submit to funding sources; those pages need to be implemented but that is phase two of the project.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There are likely other sore spots that exist that I do not see at this point and time that will be fixed at a later date. &lt;/li&gt;&lt;/ol&gt;That is all for now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-7116573361403729699?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/QbJcYqTu6WI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/7116573361403729699/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=7116573361403729699" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/7116573361403729699?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/7116573361403729699?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/QbJcYqTu6WI/facility-data-updates.html" title="Facility Data updates" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2010/01/facility-data-updates.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8EQXoyfSp7ImA9WxBREk8.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-3528988935858726566</id><published>2009-12-30T20:46:00.008-05:00</published><updated>2009-12-30T21:00:00.495-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-30T21:00:00.495-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="free text messaging" /><category scheme="http://www.blogger.com/atom/ns#" term="google voice" /><category scheme="http://www.blogger.com/atom/ns#" term="google voice tips and tricks" /><title>Google Voice tips &amp; tricks: Send free international text messages!</title><content type="html">Just throwing this out there in case anybody wants it. &lt;br /&gt;&lt;br /&gt;You can SMS an international number such as one from the UK to their UK number (+447xxx) using Google Voice, then once they reply you get a special Google Voice number(406-###-####) and once you get this you can SMS them as you would any number and it will relay through google voice at no cost to you! &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Caveat&lt;/span&gt;: Calling this 406 number &lt;span style="font-weight:bold;"&gt;*WILL*&lt;/span&gt; cost you at the Google Voice rate for calling the UK (or whatever country you are SMS'ing to).&lt;br /&gt;&lt;br /&gt;Happy texting!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-3528988935858726566?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/9ciBjU-vaxc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/3528988935858726566/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=3528988935858726566" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/3528988935858726566?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/3528988935858726566?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/9ciBjU-vaxc/google-voice-tips-tricks-send-free.html" title="Google Voice tips &amp; tricks: Send free international text messages!" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2009/12/google-voice-tips-tricks-send-free.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkMHQXs4cSp7ImA9WxNSEkQ.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-8028181397956518950</id><published>2009-08-19T05:56:00.006-04:00</published><updated>2009-08-26T08:40:30.539-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-26T08:40:30.539-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code" /><category scheme="http://www.blogger.com/atom/ns#" term="facility data module" /><category scheme="http://www.blogger.com/atom/ns#" term="hfoss" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>Google Summer of Code 2009  wrap-up</title><content type="html">Google Summer of Code 2009 officially ended on August 17, 2009 at 19:00 UTC (12:00 PDT). I had an amazing time this summer. While stressful at times, it was well worth it.&lt;br /&gt;
&lt;br /&gt;
I would like to thank the following people for my success this summer:&lt;br /&gt;
&lt;br /&gt;
My mentor Mike Seaton for helping me throughout various misunderstandings surrounding the project's requirements. I probably made him work more than he had to. I attribute the success this summer to that one factor. This man is quite brilliant and knows his stuff.&lt;br /&gt;
&lt;br /&gt;
My backup mentor Darius Jazayeri, for stepping in and helping at times and providing guidance when necessary. He is truly a brilliant man.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://blog.eflow.org/"&gt;Ben Wolfe&lt;/a&gt; for answering any questions I had. He didn't have to help, but he did. I am very grateful.&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://docpaul.wordpress.com/"&gt;Paul Biondich&lt;/a&gt; and &lt;a href="http://blog.burkeware.com/"&gt;Burke Mamlin&lt;/a&gt; for believing in me and giving me a second chance this summer. Did I mention these guys are doctors? Burke, an internist and Paul a pediatrician. Sorry for clumping you guys together.&lt;br /&gt;
&lt;br /&gt;
Finally, without &lt;a href="http://www.hawthornlandings.org/"&gt;Leslie Hawthorn&lt;/a&gt;, Cat Allman, and Ellen Ko from &lt;a href="http://code.google.com/soc"&gt;Google&lt;/a&gt;, this program would not exist. They deserve a huge thank you. These three women are amazing. Thank you so much!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-8028181397956518950?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/7gBX3Ta7oyE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/8028181397956518950/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=8028181397956518950" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/8028181397956518950?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/8028181397956518950?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/7gBX3Ta7oyE/google-summer-of-code-wrap-up.html" title="Google Summer of Code 2009  wrap-up" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2009/08/google-summer-of-code-wrap-up.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQGRn89fyp7ImA9WxNTGU0.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-3846840962964561413</id><published>2009-08-17T06:36:00.006-04:00</published><updated>2009-08-21T21:08:47.167-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-21T21:08:47.167-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code" /><category scheme="http://www.blogger.com/atom/ns#" term="facility data module" /><category scheme="http://www.blogger.com/atom/ns#" term="hfoss" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>Facility Data Module User Guide</title><content type="html">&lt;div&gt;The Facility Data Module is a tool to collect non-patient centric aggregate data for reporting to external funding sources.&lt;br /&gt;&lt;br /&gt;To download it use the svn version: do a checkout:&lt;br /&gt;&lt;code&gt;svn co http://svn.openmrs.org/openmrs-modules/facilitydata&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;To create a report:&lt;br /&gt;&lt;br /&gt;1) Create all your questions&lt;br /&gt;&lt;br /&gt;2) Create all of your form sections&lt;br /&gt;&lt;br /&gt;3) Finally add all the sections to your form schema&lt;br /&gt;&lt;br /&gt;I'll go into detail how to do each:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;span style="font-size:180%;"&gt;&lt;b style="color: rgb(0, 0, 0);"&gt;Creating/Managing questions &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/u&gt;From the admin screen: select "Manage Questions."&lt;br /&gt;&lt;div id="b7.h" style="text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id="wzvm" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=df8w66j7_57vvt2h2fx_b" height="335" width="1097" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Now, once on the question management page you will see a list of existing questions. under the "Action" column is a garbage can image -- this deletes the question from the database and is irreversible.&lt;br /&gt;&lt;br /&gt;Once created, a question's data type cannot be changed, this is due to the design.&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div id="uuct" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=df8w66j7_55d9hr7vhn_b" height="385" width="1260" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div id="h5qn" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=df8w66j7_58d74fhrc9_b" height="330" width="1554" /&gt;&lt;/div&gt;Now, once on the "Add New Question" page there are several properties. Most of which are required.&lt;br /&gt;&lt;br /&gt;1) name &lt;b&gt;- &lt;span style="color: rgb(255, 0, 0);"&gt;required&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;2) question data type - &lt;b style="color: rgb(255, 0, 0);"&gt;required&lt;/b&gt;&lt;br /&gt;3) aggregation method - &lt;b&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;required&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;4) description - &lt;b style="color: rgb(255, 0, 0);"&gt;optional&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Question Data Types are as follows:&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;NumericQuestion&lt;/b&gt;&lt;/u&gt; - a question that has a numeric answer (optionally has a min/max value and whether or not to allow decimal values.) -- these fields show only if you select "NumericQuestion."&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;BooleanCodedQuestion  &lt;/b&gt;&lt;/u&gt;&lt;b&gt;- &lt;/b&gt;a coded question with 3 answers: "t","f","not applicable"&lt;br /&gt;&lt;br /&gt;&lt;u&gt;&lt;b&gt;StockQuestion&lt;/b&gt;&lt;/u&gt; - a question that tracks stock of vaccines, supplies, etc. This is a special coded question with the following answers: "not_stocked_out", "stocked_out", "expired", "not_applicable" and the comments field used to track the numbers of days stocked out and reason.&lt;br /&gt;&lt;br /&gt;To add more questions after you save a question -- click "Add New Question" link above the form box.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;u&gt;&lt;b&gt;Creating/Managing Form Sections&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Once you have created all of your questions -- it's time to organize them into sections. You can easily navigate to the "Manage Form Sections" page from the "Add New Question" page.&lt;br /&gt;&lt;br /&gt;&lt;div id="p40x" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=df8w66j7_59g2f7km9f_b" height="278" width="1309" /&gt;&lt;br /&gt;Now, once on the section management page -- you'll see a list of all sections saved and the associated schema. Next, you'll want to click "Add New Form Section"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div id="yv.y" style="text-align: left;"&gt;&lt;div id="ycoj" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=df8w66j7_61f8vpqhc7_b" height="203" width="1355" /&gt;&lt;br /&gt;Now, once on the add questions page: you'll enter:&lt;br /&gt;&lt;br /&gt;1) Display Name - &lt;b&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;required&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;2) Description - &lt;b&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;optional&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;3) Form Schema -&lt;b style="color: rgb(255, 0, 0);"&gt;optional (can be deferred) &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Mentioned seperately is questions you're adding to the section (these are referred to as form questions by the system).&lt;br /&gt;1) Name&lt;br /&gt;2) Question Number&lt;br /&gt;3) Question&lt;br /&gt;4) Description&lt;br /&gt;To add a question: click "Add New Question" to remove a question, click the "Remove" button next to the button (see image after the one below).&lt;br /&gt;&lt;/div&gt;&lt;div id="gpqj" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=df8w66j7_62g47935d8_b" height="416" width="1348" /&gt;&lt;br /&gt;&lt;br /&gt;The section below is a section that was defined programmatically in a mock schema that was designed and used throughout the summer.&lt;br /&gt;As you can see, there is a "Remove" button next to each Form Question in the section.&lt;br /&gt;&lt;/div&gt;&lt;div id="w9ey" style="text-align: left;"&gt;&lt;div id="c1w7" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=df8w66j7_64gvcmjhfm_b" height="531" width="1329" /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;u&gt;Creating/Managing Form Schemas&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;From  the Section creation page: click "Manage Form Schemas"&lt;br /&gt;&lt;br /&gt;&lt;div id="n2-1" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=df8w66j7_65px2f84hf_b" height="524" width="1312" /&gt;&lt;/div&gt;After clicking that link you will see the page below. It allows you to delete a schema, and information relevant to te form schema.&lt;br /&gt;&lt;br /&gt;&lt;div id="oa.u" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=df8w66j7_66d5mt5jc4_b" height="166" width="1315" /&gt;&lt;/div&gt;&lt;br /&gt;Now, after clicking the "Add New Form Schema" link you will see the page below. The following information is needed:&lt;br /&gt;1) Display Name - &lt;b&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;required&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;2) Data Entry Frequency -&lt;b&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;required&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;3) Validity Period &lt;b style="color: rgb(255, 0, 0);"&gt;-optional&lt;br /&gt;&lt;/b&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;4) Description - &lt;b style="color: rgb(255, 0, 0);"&gt;optional&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;5) Sections specified in this form schema (and the ordering) -- just drag them into the left-side of the pane.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Now, for the shortcomings:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ordering of questions cannot be changed once saved&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Sections cannot be associated with two schemas at once.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div id="dgw4" style="text-align: left;"&gt;&lt;img src="http://docs.google.com/File?id=df8w66j7_67c4jf6pgb_b" height="479" width="1299" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;u&gt;&lt;b&gt;Viewing and Entering Data&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Will be completed at a later date.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-3846840962964561413?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/HEpS8dfxQDg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/3846840962964561413/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=3846840962964561413" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/3846840962964561413?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/3846840962964561413?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/HEpS8dfxQDg/facility-data-module-user-guide.html" title="Facility Data Module User Guide" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2009/08/facility-data-module-user-guide.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUAFRHw8fyp7ImA9WxJaE0U.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-8489999414382386844</id><published>2009-08-04T06:51:00.004-04:00</published><updated>2009-08-04T07:01:55.277-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-04T07:01:55.277-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="foss" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code" /><category scheme="http://www.blogger.com/atom/ns#" term="facility data module" /><category scheme="http://www.blogger.com/atom/ns#" term="hfoss" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>Project Update</title><content type="html">So we're in the home stretch folks! 13 days to go until the "Pencils Down" date! Hope everybody's project is going well. Here's how mine is going:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Reports can be saved and reloaded (with all relevant data filled out (fields etc -- reports can be viewed in editable or "view only" mode).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Each component of the report (Questions, Form Questions(allows a question to exist on multiple reports), and Sections can be created in isolation&lt;/li&gt;&lt;li&gt;A page to view the status of a report (complete, partially complete or incomplete) is done for reports that are to be entered daily in a monthly calendar view; monthly still needs to be completed. &lt;/li&gt;&lt;/ul&gt;Overall, i feel the project is progressing well -- I expect to finish either on time, or early. (Let's hope for early!)&lt;br /&gt;&lt;br /&gt;Cheers!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-8489999414382386844?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/MMnPuoahdiI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/8489999414382386844/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=8489999414382386844" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/8489999414382386844?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/8489999414382386844?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/MMnPuoahdiI/project-update.html" title="Project Update" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2009/08/project-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQDSXs8fCp7ImA9WxJUF08.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-8627342073928215552</id><published>2009-07-16T01:31:00.001-04:00</published><updated>2009-07-16T01:32:58.574-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-16T01:32:58.574-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="facility data module" /><category scheme="http://www.blogger.com/atom/ns#" term="hfoss" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>Midterm Progress Update</title><content type="html">Progress has been slow and steady. I'm on track to finish however! What's done:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Reports can be entered, saved, and the values entered will be reloaded into the proper form fields. If edited and if the values have changed -- the old values are voided and new values are saved (retaining the old values in the database for auditing purposes).&lt;/li&gt;&lt;/ul&gt;What's left:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Management pages See &lt;a href="http://is.gd/1AAmo"&gt;this&lt;/a&gt; and &lt;a href="http://is.gd/1AAox"&gt;this&lt;/a&gt; for what it will ultimately look like.&lt;/li&gt;&lt;li&gt;Still need to get the "View Only" pages working; in theory it should work. The "View Only" will be the answers but no form fields present.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The UI to create the report, questions, sections, etc.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Ultimately, I think this shouldn't be too bad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-8627342073928215552?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/eJKTRlMXIdA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/8627342073928215552/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=8627342073928215552" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/8627342073928215552?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/8627342073928215552?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/eJKTRlMXIdA/midterm-progress-update.html" title="Midterm Progress Update" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2009/07/midterm-progress-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUGRHg5fCp7ImA9WxJaEko.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-5683637485562081848</id><published>2009-06-21T00:00:00.009-04:00</published><updated>2009-08-02T23:30:25.624-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-02T23:30:25.624-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="foss" /><category scheme="http://www.blogger.com/atom/ns#" term="soc" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="facility data module" /><category scheme="http://www.blogger.com/atom/ns#" term="hfoss" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>The overdue progress report</title><content type="html">Apologies for not blogging as much as I should. I've focused on getting what needed to be done, done.&lt;br /&gt;&lt;br /&gt;Tasks that have been completed thus far with a target milestone of &lt;span style="color: rgb(0, 0, 0);"&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;using a mock Form, enable persistence of Questions and Values to the database:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;       Mock out a report form using the domain classes     &lt;/li&gt;&lt;li&gt;       Using the mocked up schema, generate a simple report form      &lt;/li&gt;&lt;li&gt;       Design the SQL Schema (for just FacilityDataValue and FacilityDataQuestion)&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;       Write Hibernate Mapping files (for just FacilityDataValue and FacilityDataQuestion)&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;       Write Data Access layer (for FacilityDataValue and FacilityDataQuestion)&lt;br /&gt;   &lt;/li&gt;&lt;li&gt;       Write Service layer (for FacilityDataValue and FacilityDataQuestion)     &lt;/li&gt;&lt;li&gt;       Refactor the rendering logic to use the JSP and write EL function(s) to check types using &lt;b&gt;instanceof&lt;/b&gt;.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;       Allow a simple the mocked form from Week 1 to save the question answers.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Tasks that are are in progress, soon to be finished with a target milestone of removing the code used to mock up everything from the first few weeks; ability to use the saved schemas for rendering the report form:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;       Design SQL Schema for the rest of the domain classes&lt;br /&gt;&lt;/li&gt;&lt;li&gt;       Write mappings for the rest of the domain classes     &lt;/li&gt;&lt;li&gt;       Support loading the previously saved values for a form/startdate/enddate/location into a page for viewing or editing&lt;br /&gt;&lt;/li&gt;&lt;li&gt;       Write methods to save the rest of the domain classes in the data access layer&lt;br /&gt;&lt;/li&gt;&lt;li&gt;       Write methods to save the rest of the domain in the service layer&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Now that I have summarized work completed and in progress, let's explain the overall design:&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;FacilityDataFormSchema &lt;/b&gt;serves as the overall representation of the report form in the system. &lt;/li&gt;&lt;li&gt;&lt;b&gt;FacilityDataFormSection &lt;/b&gt;is simply that, sections on the form, e.g., monitoring equipment status, stock status of vaccinations, number of people vaccinated, etc. &lt;/li&gt;&lt;li&gt;&lt;b&gt;FacilityDataFormQuestion&lt;/b&gt; holds metadata regarding a question. &lt;/li&gt;&lt;li&gt;&lt;b&gt;FacilityDataQuestion &lt;/b&gt;is the question itself; it specifies the datatype; it is subclassed for each question datatype; if not subclassed, then the question is considered to be "freetext" -- in other words: just simply a text-based question.&lt;br /&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;CodedQuestion&lt;/b&gt; is a question that has a coded answer. This too is subclassed for each coded question datatype.&lt;br /&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;StockQuestion &lt;/b&gt;is exactly as the name says, to track stock of items such as vaccinations. The coded answers are: "not_stocked_out","stocked_out","expired","not_applicable"&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;BooleanCodedQuestion  &lt;/b&gt;is a simple "yes","no","not applicable" type of thing; e.g., "Was there mobile clinic today?"&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;b&gt;NumericQuestion&lt;/b&gt; is a question which has a numeric answer, e.g., "Number of Adults Vaccinated."&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;b&gt;FacilityDataValue &lt;/b&gt;is what holds the values entered in the report forms for each question.&lt;/li&gt;&lt;li&gt;&lt;b&gt;FacilityDataReportFormData&lt;/b&gt; is a non-persisted class used for retrieving the answers for a specific report for a specified period. &lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Hopefully this makes up for my lack of updates.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-5683637485562081848?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/GaCa6s7K8Qo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/5683637485562081848/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=5683637485562081848" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/5683637485562081848?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/5683637485562081848?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/GaCa6s7K8Qo/overdue-progress-report.html" title="The overdue progress report" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2009/06/overdue-progress-report.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEQHQXk7cSp7ImA9WxJXGE4.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-2638054448112847234</id><published>2009-06-12T14:39:00.006-04:00</published><updated>2009-06-12T14:45:30.709-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-12T14:45:30.709-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="soc" /><category scheme="http://www.blogger.com/atom/ns#" term="facility data module" /><category scheme="http://www.blogger.com/atom/ns#" term="hfoss" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>The long overdue progress report</title><content type="html">This is gonna be short, sweet and to the point:&lt;br /&gt;&lt;br /&gt;Week 1:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I wrote a mock report form with 10 questions (screenshots in a later post)&lt;/li&gt;&lt;li&gt;I then wrote up some code to render it approriately for each question type.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Week 2 (still ongoing):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Designed the SQL schema, and wrote the service/database layer classes for 2 of the classes.&lt;/li&gt;&lt;li&gt;Wrote in the functionality to save the report data to the database.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Will explain the design at a later date.&lt;br /&gt;&lt;br /&gt;Ciao!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-2638054448112847234?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/wtZGhe64C6A" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/2638054448112847234/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=2638054448112847234" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/2638054448112847234?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/2638054448112847234?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/wtZGhe64C6A/long-overdue-progress-report.html" title="The long overdue progress report" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2009/06/long-overdue-progress-report.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0QNRn05eSp7ImA9WxJTF08.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-8690191771014302701</id><published>2009-04-21T00:11:00.010-04:00</published><updated>2009-04-26T01:56:37.321-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-26T01:56:37.321-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="foss" /><category scheme="http://www.blogger.com/atom/ns#" term="soc" /><category scheme="http://www.blogger.com/atom/ns#" term="openeverything" /><category scheme="http://www.blogger.com/atom/ns#" term="hfoss" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>Open Everything NYC Recap</title><content type="html">I attended &lt;a href="http://nyc.openeverything.us"&gt;Open Everything NYC&lt;/a&gt; on Saturday. For those who do not know, Open Everything is an "un-conference" which is a conference where the participants run the show. There are several open sessions, and a few keynotes. &lt;br /&gt;&lt;br /&gt;Some of the open session topics were on education, Open Source Software licensing, and even relationships! The Open Relationships talk was really interesting. I find it amusing how many people wind up creating alter egos to prevent employers from finding out things about them.&lt;br /&gt;&lt;br /&gt;(Some of) the keynote speakers were amazing: &lt;br /&gt;&lt;br /&gt;Schuyler Erle, a guy who wrote some code for UNICEF, utilized text messaging as a means to track distribution of Bed Nets to prevent malaria via a web application, among other things. If you want to research this it's all on the &lt;a href="http://openeverything.wik.is/New_York/New_York_City"&gt;wiki&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Robert Steele, a former spy (yes a spy!) whose talk in my opinion was pretty much utterly useless! I saw diagrams which were well.. horrid. His talk had ZERO flow planning, it seemed to be a bunch of conspiracies, one after the other. Let alone the fact the guy is abrasive. After his talk, I went up to him to let him know that his site (which he linked in his talk), was down; his response was condescending and &lt;b&gt;RUDE&lt;/b&gt;. I turned to some people behind me as I was leaving, and said that there was no way I could have summarized anything that guy said (I was writing notes for the &lt;a href="http://openeverything.wik.is/New_York/New_York_City"&gt;wiki&lt;/a&gt;); they agreed. The consensus on Robert Steele was pretty universal: Conspiracy nutjob.&lt;br /&gt;&lt;br /&gt;The final speaker, Leslie Hawthorne, a woman I have a lot of respect for gave a talk that was short, sweet, and to the point. She disussed how open source software development can be used in a common sense way to solve complex problems we face. OpenMRS, solving the problem of the HIV/AIDS crisis in the developing world; Sahana for the disaster relief management in areas devastated by floods and such. Amazing talk! Best part, she did not use any slides! &lt;br /&gt;&lt;br /&gt;John Britton, the conference organizer gave the closing talk, and he took notes as to what should change next time. Longer open sessions etc came up. Additionally, we found out: it's possible to do this ongoing, I'd REALLY enjoy that. I met some freaking awesome people.&lt;br /&gt;&lt;br /&gt;We were to screen RIP: "A REMIX MANIFESTO" at McFaddens Bar and Pub by the UN, but the owner didn't allow us to do it; which was stupid. We wound up sitting around half price drinks/appetizers and had some good conversations and fun. &lt;br /&gt;&lt;br /&gt;Overall, I had fun and would do it again. I went into this not knowing what to expect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-8690191771014302701?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/UJNSErV-lQE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/8690191771014302701/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=8690191771014302701" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/8690191771014302701?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/8690191771014302701?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/UJNSErV-lQE/open-everything-nyc-recap.html" title="Open Everything NYC Recap" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2009/04/open-everything-nyc-recap.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMBRHw7fyp7ImA9WxJSEU4.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-6947909951232620345</id><published>2009-04-20T17:05:00.012-04:00</published><updated>2009-04-30T19:17:35.207-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-30T19:17:35.207-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="facility data module" /><category scheme="http://www.blogger.com/atom/ns#" term="hfoss" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>Accepted into Google Summer of Code 2009</title><content type="html">For the second year in a row, I was &lt;a href="http://twitter.com/robbyoconnor/status/1568071039"&gt;accepted&lt;/a&gt; into &lt;a href="http://socghop.appspot.com"&gt;Google Summer of Code&lt;/a&gt;!!! I will be working with &lt;a href="http://www.openmrs.org"&gt;OpenMRS&lt;/a&gt; on the &lt;a href="http://socghop.appspot.com/student_project/show/google/gsoc2009/openmrs/t124023038249"&gt;Facility Data Module&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;My project will focus on developing tools for collecting and ultimately generating reports for aggregate data from external sources.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-6947909951232620345?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/DA4nHYUNO_0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/6947909951232620345/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=6947909951232620345" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/6947909951232620345?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/6947909951232620345?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/DA4nHYUNO_0/accepted-into-google-summer-of-code.html" title="Accepted into Google Summer of Code 2009" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>1</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2009/04/accepted-into-google-summer-of-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QHQ3Y_cCp7ImA9WxVXEU4.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-1278017806932116731</id><published>2009-02-08T17:09:00.004-05:00</published><updated>2009-02-08T17:15:32.848-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-08T17:15:32.848-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="soc" /><category scheme="http://www.blogger.com/atom/ns#" term="groovy forms module" /><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>Groovy Forms Module is NOT dead</title><content type="html">Hey folks! &lt;br /&gt;&lt;br /&gt;I'm still alive and not dead. The Groovy Forms Module is not a dead project, and &lt;b&gt;WILL&lt;/b&gt; be finished. I plan on getting work started back up on it soonish. School is back in session for me. I'm sorry for the long delay.&lt;br /&gt;&lt;br /&gt;That is all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-1278017806932116731?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/2s5t-ePPrCE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/1278017806932116731/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=1278017806932116731" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/1278017806932116731?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/1278017806932116731?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/2s5t-ePPrCE/groovy-forms-module.html" title="Groovy Forms Module is NOT dead" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2009/02/groovy-forms-module.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYFSH8zfCp7ImA9WxRSEEg.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-2335388825686052165</id><published>2008-09-10T10:02:00.004-04:00</published><updated>2008-09-10T10:31:59.184-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-10T10:31:59.184-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="groovy forms module" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>GSoC wrap-up</title><content type="html">The program officially ended on August 18&lt;sup&gt;th&lt;/sup&gt;. I'm awaiting the arrival of my t-shirt!! &lt;br /&gt;&lt;br /&gt;Now, I didn't quite have time to finish my project prior to that date since my uncle suddenly passed away on August 10&lt;sup&gt;th&lt;/sup&gt;.&lt;br /&gt;&lt;br /&gt;The project itself is about 80 percent completed. All that is left is to get the rendering working and finish up the management page to edit the form metadata as it appears in the system.&lt;br /&gt;&lt;br /&gt;My time is now limited since school started up again for me, so as much time as I can I'm going to devote to finishing up this project.&lt;br /&gt;&lt;br /&gt;I'd like to thank the following:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.burkeware.com/"&gt;Burke Mamlin&lt;/a&gt; for helping me and answering all the questions I had and guiding me when I was lost.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://blog.eflow.org/"&gt;Ben Wolfe&lt;/a&gt; for putting up with me and helping me when &lt;a href="http://blog.burkeware.com/"&gt;Burke&lt;/a&gt; was MIA.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.openmrs.org/"&gt;OpenMRS&lt;/a&gt; and its wonderful worldwide network of developers for making this project into what it has become.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://docpaul.wordpress.com"&gt;Paul Biondich&lt;/a&gt; for encouraging me (along with &lt;a href="http://blog.burkeware.com"&gt;Burke&lt;/a&gt;) to apply for summer of code.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt;Last, but certainly not least, &lt;a href="http://www.hawthornlandings.org/"&gt;Leslie Hawthorn&lt;/a&gt; for managing this program and every problem that popped up. She must have super human powers or something.&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;The list can only be so long, I feel like I'm accepting an academy award here. It was a great experience, and I will definately continue to maintain my project in whatever free time I can find.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-2335388825686052165?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/8HQ6DhHL_hc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/2335388825686052165/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=2335388825686052165" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/2335388825686052165?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/2335388825686052165?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/8HQ6DhHL_hc/gsoc-wrap-up.html" title="GSoC wrap-up" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2008/09/gsoc-wrap-up.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMESHc5cCp7ImA9WxdbFEw.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-6494743798965084334</id><published>2008-08-10T21:20:00.003-04:00</published><updated>2008-08-10T21:33:29.928-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-08-10T21:33:29.928-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="groovy forms module" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="google summer of code" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="groovy" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>GSoC 2008: We're in the home stretch</title><content type="html">Well folks, I can't believe it's almost over. What a journey. I never imagined I'd be able to do this. I have an (almost) working project. I have a few more things that need to be done.&lt;br /&gt;&lt;br /&gt;Let's highlight what &lt;span style="font-weight: bold;"&gt;IS&lt;/span&gt; done:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;GroovyForm and its related metadata is stored&lt;/li&gt;&lt;li&gt;Model class is interrogated for its properties and those are stored in a container class.&lt;/li&gt;&lt;li&gt;From the data collected in the container class, I generate markup checking for a predefined set of data types.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The view and its related controller is generated -- sneaking in some groovy magic of course! &lt;/li&gt;&lt;li&gt;GroovyForms are successfully saved into the system, along with their respective, model, view and controller.&lt;/li&gt;&lt;li&gt;Forms are persisted when the module is shutdown and reloaded when it is restarted&lt;/li&gt;&lt;/ol&gt;What's left:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Editing metadata related to the forms currently in the system&lt;/li&gt;&lt;li&gt;Writing the servlet which handles submissions&lt;/li&gt;&lt;li&gt;Create some sample forms&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Documentation &lt;/li&gt;&lt;/ol&gt;I did plan to add a lot of other stuff such as the ability to create custom form widgets, however there were a few problems which caused me to redirect my focus. These will come in after I finish with Summer of Code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-6494743798965084334?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/lYYbZcZkIPA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/6494743798965084334/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=6494743798965084334" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/6494743798965084334?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/6494743798965084334?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/lYYbZcZkIPA/gsoc-2008-were-in-home-stretch.html" title="GSoC 2008: We're in the home stretch" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2008/08/gsoc-2008-were-in-home-stretch.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEMMQXs-eip7ImA9WxdUEU0.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-4038809746169386198</id><published>2008-07-26T15:49:00.003-04:00</published><updated>2008-07-26T16:01:20.552-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-07-26T16:01:20.552-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="the last lecture" /><category scheme="http://www.blogger.com/atom/ns#" term="computer science. pausch" /><title>Randy Pausch dies</title><content type="html">I learned via the &lt;a href="http://googleresearch.blogspot.com"&gt;Official Google Research Blog&lt;/a&gt; that &lt;a href="http://download.srv.cs.cmu.edu/~pausch/"&gt;Randy Pausch&lt;/a&gt; died yesterday. Randy Pausch is famous for delivering a lecture entitled informally "&lt;a href="http://www.youtube.com/watch?v=ji5_MqicxSo"&gt;The Last Lecture: Really Achieving your Childhood dreams&lt;/a&gt;". Pausch was also a Computer Science professor at Carnegie Mellon University (CMU).&lt;br /&gt;&lt;br /&gt;He will be missed greatly. &lt;br /&gt;&lt;br /&gt;RIP Randy Pausch&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-4038809746169386198?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/Y7kljIAiW3Y" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/4038809746169386198/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=4038809746169386198" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/4038809746169386198?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/4038809746169386198?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/Y7kljIAiW3Y/randy-pausch-dies.html" title="Randy Pausch dies" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2008/07/randy-pausch-dies.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0ENQ38yeCp7ImA9WxNSFE8.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-4086146737965789331</id><published>2008-07-02T02:47:00.017-04:00</published><updated>2009-08-27T23:21:32.190-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-27T23:21:32.190-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="open source" /><category scheme="http://www.blogger.com/atom/ns#" term="js" /><category scheme="http://www.blogger.com/atom/ns#" term="javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="soc" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="groovy forms module" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="ajax" /><category scheme="http://www.blogger.com/atom/ns#" term="groovy" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>GSOC 2008: Week 5</title><content type="html">So, it's time for an update. This week got off to a sketchy start, but it's gained momentum. Let me enumerate what I have done thus far with the project. First, I've added AJAX using &lt;a href="http://www.jquery.com/"&gt;jquery&lt;/a&gt;. I figured I would use jquery mainly because it provided painless AJAX goodness. Prior to even thinking of using jquery, I wrote my own AJAX code using &lt;a href="http://java.sun.com/developer/technicalArticles/J2EE/AJAX/RealtimeValidation/index.html"&gt;a tutorial&lt;/a&gt; that I found while googling. I had to tweak it a bit, but for the most part, it seemed very standard. However, after I wrote the AJAX equivalent code, it didn't feel too elegant. So, first I'm going to show the AJAX code I wrote; then I'll show you the jquery version; finally, I'm going to show you the servlet which handles the AJAX on the server-side. &lt;br /&gt;&lt;br /&gt;First, the AJAX I wrote: &lt;br /&gt;&lt;pre class="brush:js" name="code"&gt;&lt;br /&gt;function AjaxValidation(url, callback) {&lt;br /&gt;    var req = init()&lt;br /&gt;    req.onreadystatechange = processRequest&lt;br /&gt;&lt;br /&gt;    function init() {&lt;br /&gt;        if (window.XMLHttpRequest) {&lt;br /&gt;            return new XMLHttpRequest()&lt;br /&gt;        } else if (window.ActiveXObject) {&lt;br /&gt;            return new ActiveXObject("Mircosoft.XMLHTTP")&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    function processRequest() {&lt;br /&gt;        if (req.readyState == 4) {&lt;br /&gt;            if (req.status == 200) {&lt;br /&gt;                if (callback) {&lt;br /&gt;                    chkSyntaxCallBack(req.responseXML)&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    this.doGet = function() {&lt;br /&gt;        req.open("GET", url, true)&lt;br /&gt;        req.send(null)&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;function chkSyntaxCallBack(responseXML) {&lt;br /&gt;    var res = responseXML.getElementsByTagName("result")[0].firstChild.nodeValue&lt;br /&gt;    document.getElementById("out").innerHTML = res&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function checkSyntax() {&lt;br /&gt;    var target = document.getElementById("groovyModel")&lt;br /&gt;    var url = "${pageContext.request.contextPath}/moduleServlet/groovyforms/createGroovyForm?groovyModel=" + escape(target.value)&lt;br /&gt;    var ajax = new AjaxValidation(url, chkSyntaxCallBack)&lt;br /&gt;    ajax.doGet()&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;I warned you that it wasn't too elegant. Understanding this isn't too hard. Here is the call sequence: &lt;code&gt;init() -&amp;gt; doGet() -&amp;gt; processRequest() -&amp;gt; chkSyntaxCallBack()&lt;/code&gt;. Not that bad. Now let's see the jquery version.&lt;br /&gt;&lt;pre class="brush:js" name="code"&gt;&lt;br /&gt;$(window).ready(function () {&lt;br /&gt;    $("#groovyModel").bind("blur", function () {&lt;br /&gt;        $.ajax({&lt;br /&gt;            type: 'POST',&lt;br /&gt;            data: { groovyModel: $("#groovyModel").val() } ,&lt;br /&gt;            url: "${pageContext.request.contextPath}/moduleServlet/groovyforms/createGroovyForm" ,&lt;br /&gt;            cache: false ,&lt;br /&gt;            success: function(data) {&lt;br /&gt;                var res = $(data).find("result").text()&lt;br /&gt;                $("#out").html(res)&lt;br /&gt;&lt;br /&gt;            }&lt;br /&gt;        })&lt;br /&gt;    });&lt;br /&gt;})&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Okay, that's much better. A few things are still happening here. When the window is finished loading, I bind my textarea element which has the CSS id of "groovyModel" to the blur event (lost focus). Then you see the AJAX. Now this is very straight forward. We're using the &lt;b&gt;POST&lt;/b&gt; method, we're sending whatever value is inside of the textarea at the time the event is fired, we're posting to a servlet, not going to cache, and when we're done, it's printed to the screen. Very straight forward. &lt;br /&gt;&lt;br /&gt;Now, like I said, this is all backed on the server-side by a servlet, which is written in &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt;. So here we go: &lt;br /&gt;&lt;pre class="brush:groovy" name="code"&gt;&lt;br /&gt;/**&lt;br /&gt; * The contents of this file are subject to the OpenMRS Public License&lt;br /&gt; * Version 1.0 (the "License") you may not use this file except in&lt;br /&gt; * compliance with the License. You may obtain a copy of the License at&lt;br /&gt; * http://license.openmrs.org&lt;br /&gt; *&lt;br /&gt; * Software distributed under the License is distributed on an "AS IS"&lt;br /&gt; * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the&lt;br /&gt; * License for the specific language governing rights and limitations&lt;br /&gt; * under the License.&lt;br /&gt; *&lt;br /&gt; * Copyright (C) OpenMRS, LLC.  All Rights Reserved.&lt;br /&gt; */&lt;br /&gt;package org.openmrs.module.groovyforms.web&lt;br /&gt;&lt;br /&gt;import javax.servlet.ServletException&lt;br /&gt;import javax.servlet.http.HttpServlet&lt;br /&gt;import javax.servlet.http.HttpServletRequest&lt;br /&gt;import javax.servlet.http.HttpServletResponse&lt;br /&gt;import org.apache.commons.logging.LogFactory&lt;br /&gt;import org.codehaus.groovy.control.CompilationFailedException&lt;br /&gt;&lt;br /&gt;class CreateGroovyFormServlet extends HttpServlet {&lt;br /&gt;  def classLoader&lt;br /&gt;  static final def log = LogFactory.getLog(CreateGroovyFormServlet.class)&lt;br /&gt;  private static final long serialVersionUID = 066373513262051L&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {&lt;br /&gt;    def generateTemplate = request.getParameter("template")&lt;br /&gt;    def generateController = request.getParameter("controller")&lt;br /&gt;    def finalMarkup = request.getParameter("markup")&lt;br /&gt;    def clazz = URLDecoder.decode(request.getParameter("groovyModel"))&lt;br /&gt;    def name = request.getParameter("formName")&lt;br /&gt;    def version = request.getParameter("version")&lt;br /&gt;    def res = this.checkSyntax(clazz)&lt;br /&gt;    if (clazz) {&lt;br /&gt;      if (checkSyntax(clazz)) {&lt;br /&gt;        response.contentType = "text/xml"&lt;br /&gt;        response.setHeader "Cache-Conrol", "no-cache"&lt;br /&gt;        response.writer.write "&lt;result&gt;\n\t$res\n&lt;/result&gt;"&lt;br /&gt;      } else {&lt;br /&gt;        response.contentType = "text/xml"&lt;br /&gt;        response.setHeader "Cache-Control", "no-cache"&lt;br /&gt;        response.writer.write "&lt;result&gt;true&lt;/result&gt;"&lt;br /&gt;      }&lt;br /&gt;    } else {&lt;br /&gt;      response.contentType = "text/xml"&lt;br /&gt;      response.setHeader "Cache-Control", "no-cache"&lt;br /&gt;      response.writer.write "&lt;result&gt;\n\tPlease fill in the Form Model\n&lt;/result&gt;"&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {&lt;br /&gt;    doGet(request, response)&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  void init() throws ServletException {&lt;br /&gt;    if (log.infoEnabled)&lt;br /&gt;      log.info("Initializing...")&lt;br /&gt;    classLoader = getClassLoader()&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  def getClassLoader() {&lt;br /&gt;    def gcl = new GroovyClassLoader(this.getClass().getClassLoader())&lt;br /&gt;    gcl&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * This method is used to relay errors to the user&lt;br /&gt; * @param clazz the class&lt;br /&gt; * @return the exception message or null if it was successful&lt;br /&gt; */&lt;br /&gt;  def checkSyntax(clazz) {&lt;br /&gt;    def sb = new StringBuilder()&lt;br /&gt;    sb &lt;&lt; "import org.openmrs.*\n\n\n"&lt;br /&gt;    sb &lt;&lt; clazz&lt;br /&gt;    def res = null&lt;br /&gt;    try {&lt;br /&gt;      getClassLoader().parseClass(sb.toString())&lt;br /&gt;&lt;br /&gt;    } catch (CompilationFailedException e) {&lt;br /&gt;      res = "Exception: ${e.message}"&lt;br /&gt;    }&lt;br /&gt;    res&lt;br /&gt;&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * Check if it is result groovy code.&lt;br /&gt; * @param clazz the class&lt;br /&gt; * @return whether or not it is result groovy code&lt;br /&gt; */&lt;br /&gt;  def isValidGroovy(clazz) {&lt;br /&gt;    def sb = new StringBuilder()&lt;br /&gt;    sb &lt;&lt; "import org.openmrs.*\n\n\n"&lt;br /&gt;    sb &lt;&lt; clazz&lt;br /&gt;    try {&lt;br /&gt;      getClassLoader().parseClass(sb.toString())&lt;br /&gt;    } catch (CompilationFailedException e) {&lt;br /&gt;      return false&lt;br /&gt;    }&lt;br /&gt;    return true&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;This servlet contains a lot of utility methods. One compiles, one initializes/returns the &lt;a href="http://groovy.codehaus.org/gapi/groovy/lang/GroovyClassLoader.html"&gt;GroovyClassLoader&lt;/a&gt;, and of course doGet(), doPost() and init(). &lt;code&gt;doGet()&lt;/code&gt; and &lt;code&gt;doPost()&lt;/code&gt; both do the same thing, with doPost() simply delegating to doGet(). The code should be reasonably easy to understand. &lt;code&gt;checkSyntax()&lt;/code&gt; returns null if it was parsed cleanly, otherwise it returns the exception message, the stack track wouldn't be useful in my case. It returns an XML tag &amp;lt;result&amp;gt; with "true" if it was successful, the exception message if it was not, and a message stating that the field must be filled in if it's empty or just not passed in. I implicitly import &lt;code&gt;org.openmrs.*&lt;/code&gt; to allow for easier access to the OpenMRS domain model classes. The parent classloader for the GroovyClassLoader is set the servlet container's classloader. This gives me access to the classpath when loading Groovy classes. &lt;br /&gt;&lt;br /&gt;I still have a bit to do, templating needs to be written in, for the most part it's done. Just have a few problems I'm facing, but I'll get through it. Too many people are relying on me succeeding. I feel that this project could help a lot of people, so i feel pressure to succeed. I still need to write in the "Edit" functionality of the "Manage Groovy Forms" page.&lt;br /&gt;&lt;br /&gt;I'm definately making progress. More updates to come, that's for sure.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-4086146737965789331?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/hqbY2Dl2P3Q" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/4086146737965789331/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=4086146737965789331" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/4086146737965789331?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/4086146737965789331?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/hqbY2Dl2P3Q/gsoc-2008-week-5.html" title="GSOC 2008: Week 5" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2008/07/gsoc-2008-week-5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQDSHo6fyp7ImA9WxdXEEQ.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-6882837065981235794</id><published>2008-06-21T18:48:00.010-04:00</published><updated>2008-06-21T20:09:39.417-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-21T20:09:39.417-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="soc" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="dwr" /><category scheme="http://www.blogger.com/atom/ns#" term="groovy forms module" /><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="groovy" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>GSoC 2008: Groovy Forms getting some AJAX!</title><content type="html">No, not the cleaning product! The "Web 2.0" kind of AJAX! Now where will this goodness be placed? The pages for creating the forms and managing the forms.&lt;br /&gt;&lt;br /&gt;First off, I used &lt;a href="http://www.directwebremoting.org/dwr"&gt;Direct Web Remoting (DWR)&lt;/a&gt; to provide a link between my backend java codebase and the front-end javascript! It's quite amazing. You can choose to publish/unpublish the forms with the tick of a checkbox and DWR will magically set the published attribute on the form to the proper state. I then decided to go one step furthur, and provide a mechanism to backup the forms via &lt;a href="http://xstream.codehaus.org/"&gt;xstream&lt;/a&gt; to XML. Now, with the XML files, two files are maintained, one individual XML file for each form, and one global one, which makes up the model for the entire system. The rationale for having the XML file for each form is that you can just zip up the form folder, and unzip it into another &lt;a href="http://www.openmrs.org/"&gt;OpenMRS&lt;/a&gt; install and you're good to go. Adding the ability to re-generate the XML files via the management interface is especially handle so that if you make a quick change on one system, then want to install it onto another you can.&lt;br /&gt;&lt;br /&gt;Now, &lt;a href="http://www.directwebremoting.org/dwr"&gt;DWR&lt;/a&gt; will be used for creating the forms as well. This will be done mostly to easily relay errors, such as syntax errors in the Controller and the Model of the &lt;a href="http://openmrs.org/wiki/GroovyForms_Module"&gt;groovy form&lt;/a&gt;. Don't fear, I'm going to go overboard with AJAX! It'll only be used up until the point of where templates are generated. After that point, a Servlet will take over the bulk of the work (I am undecided on the Servlet bit.).&lt;br /&gt;&lt;br /&gt;Now what's next? Several things need to happen.&lt;br /&gt;&lt;br /&gt;First, creating the form:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;We need to validate that form fields are not empty; also the input must be checked for validity.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The model's syntax needs to be compiled and syntax errors need to be relayed to the user.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;We need to get the fields of the class and store them.&lt;/li&gt;&lt;li&gt;We need to generate templates like: &lt;%= textArea(...); %&gt; -- They will not be run it through the template engine immediately until the user has confirmed what they want,&lt;/li&gt;&lt;li&gt;After the view has been tweaked -- it is run through the template engine; at this point we will also run the controller through and generate that and present it at the same time the final view is presented.&lt;/li&gt;&lt;li&gt;The user will be presented with the HTML of the view and &lt;a href="http://groovy.codehaus.org/"&gt;Groovy&lt;/a&gt; controller and given a final opportunity to tweak it before it is saved to the system.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The form is added to the system -- by default the form is not published.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Finally, to publish the form so that it can be used to enter data, they go to the management screen and tick the checkbox.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The form is now ready to be used for data entry.&lt;/li&gt;&lt;/ol&gt;Pictures are worth a thousand words so here we go: &lt;a href="http://img522.imageshack.us/img522/897/manageforms2mp5.png"&gt;One&lt;/a&gt; and &lt;a href="http://img103.imageshack.us/img103/4825/manageformsuc2.png"&gt;Two&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;First one contains one form which is published, the rest are not. The second, no forms are published.  &lt;br /&gt;&lt;br /&gt;The user interface is intuitive and easy to use. It's a great design, of course I'm biased since It was was me who designed it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-6882837065981235794?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/rabmfCgxqAA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/6882837065981235794/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=6882837065981235794" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/6882837065981235794?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/6882837065981235794?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/rabmfCgxqAA/gsoc-2008-groovy-forms-getting-some.html" title="GSoC 2008: Groovy Forms getting some AJAX!" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2008/06/gsoc-2008-groovy-forms-getting-some.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UFSXw_fyp7ImA9WxdQFUw.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-899389761943681110</id><published>2008-06-14T23:55:00.007-04:00</published><updated>2008-06-15T02:26:58.247-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-15T02:26:58.247-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="gsoc" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><category scheme="http://www.blogger.com/atom/ns#" term="hypopara" /><title>GSoC 2008: Updates and such</title><content type="html">Okay, let's see what was accomplished in the past few weeks:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I tweaked the domain class interrogation code a bit. Basically, now there is a 1:1 relationship between a field and the domain model metadata storage container class instance.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I've started the templating work -- most of it right now is just methods which will be called like: &lt;%= textField(...) %&gt; -- that will generate a text field html form widget.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;I know I haven't accomplished much, but there's a reason, I swear!&lt;br /&gt;&lt;br /&gt;June 11th I went to Rockville, MD to the &lt;a href="http://hpth.org/"&gt;Hypoparathyroidism Association&lt;/a&gt;'s 3rd Annual Hypoparathyroidism Conference. I just got home tonight.&lt;br /&gt;&lt;br /&gt;Let me stray off a bit to explain what hypoparathyroidism is. Basically, the parathyroid is a gland in your neck, underneath the thyroid. Most people get it via surgical error, where the surgeon cuts out, or damages the parathyroid. When this occurs, the PTH (Parathyroid Hormone) is no longer produced. Now, this is responsible for regulating among other things, Calcium. Without this present, the calcium levels in the blood drop, and patients start to experience Tetnay, where their muscles involuntarily contract. It's not fun. If the levels drop low enough, you can go into convulsions, and ultimately seizures. Death is also a possibility, which is why it's important for patients with hypoparathyroidism to take their meds (Calcium Supplements, sometimes Magnesium, Vitamin D (usually D2 or D3), and a medication which is the active form of Vitamin D called Calcitriol.) Some patients also take other meds as well. These must be continued for the rest of their lives. I got Hypoparathyroidism idiopathically -- which means the origin nor the cause is known.&lt;br /&gt;&lt;br /&gt;Back to the point: I was at this conference, and it's such a rare disease that I don't know many people. So I wound up talking with the people there. As a result, not much work was done. Monday, I plan to get the templating working, then probably do some Front end UI work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-899389761943681110?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/Nu0De0GHyJA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/899389761943681110/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=899389761943681110" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/899389761943681110?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/899389761943681110?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/Nu0De0GHyJA/gsoc-2008-updates-and-such.html" title="GSoC 2008: Updates and such" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2008/06/gsoc-2008-updates-and-such.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8CRng6fCp7ImA9WxdQEUg.&quot;"><id>tag:blogger.com,1999:blog-1083890928935553699.post-1326549730017982636</id><published>2008-06-11T00:04:00.005-04:00</published><updated>2008-06-11T00:17:47.614-04:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-06-11T00:17:47.614-04:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="soc" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="ant" /><category scheme="http://www.blogger.com/atom/ns#" term="groovy" /><category scheme="http://www.blogger.com/atom/ns#" term="openmrs" /><title>Well, that's so NOT groovy</title><content type="html">So, I was working on my &lt;a href="http://openmrs.org/wiki/GroovyForms_Module"&gt;summer of code project&lt;/a&gt;, and I have groovy code along side my java code. I needed to add the &lt;a href="http://groovy.codehaus.org/The+groovyc+Ant+Task"&gt;groovyc&lt;/a&gt; ant task. While i assumed that groovy-&lt;b&gt;all&lt;/b&gt;-1.5.6.jar, (note the &lt;b&gt;all&lt;/b&gt;) contained everything that was needed, guess what folks, it doesn't! I spent the greater part of the evening tracking down this problem, and then i added the &lt;b&gt;ant-1.7.0.jar&lt;/b&gt; and &lt;b&gt;ant-launcher.jar&lt;/b&gt; jars, after that suddenly everything worked. That begs the question though, why isn't everything included in the groovy jar?&lt;br /&gt;&lt;br /&gt;The problem: NoClassDefFoundError on &lt;a href="http://dpml.net/api/ant/1.7.0/org/apache/tools/ant/taskdefs/MatchingTask.html"&gt;MatchingTask&lt;/a&gt; class. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I figured I would put this out there for others in case they too experience what I did.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1083890928935553699-1326549730017982636?l=robbyoconnor.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/robbyoconnor/~4/La9YFl-ISbk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://robbyoconnor.blogspot.com/feeds/1326549730017982636/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=1083890928935553699&amp;postID=1326549730017982636" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/1326549730017982636?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/1083890928935553699/posts/default/1326549730017982636?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/robbyoconnor/~3/La9YFl-ISbk/wellthats-so-not-groovy.html" title="Well, that's so NOT groovy" /><author><name>Robert O'Connor</name><uri>http://www.blogger.com/profile/10437521195914796737</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="24" src="http://lh6.ggpht.com/_p26CNvUmZK4/S9I2_JobpEI/AAAAAAAAAWs/m3G4uLyuoes/s800/2010-04-23%2019.42.40.jpg" /></author><thr:total>2</thr:total><feedburner:origLink>http://robbyoconnor.blogspot.com/2008/06/wellthats-so-not-groovy.html</feedburner:origLink></entry></feed>

