| [00:29:23] |
<maveriick> |
!ping |
| [00:29:23] |
<OpenMRSBot> |
pong |
| [00:59:39] |
*** |
shahid_ has joined #openmrs |
| [00:59:39] |
*** |
maveriick has quit IRC |
| [01:00:15] |
*** |
shahid_ is now known as maveriick |
| [01:01:04] |
<maveriick> |
Nice! |
| [01:13:39] |
*** |
TorLye has joined #openmrs |
| [01:53:37] |
*** |
maveriick has quit IRC |
| [04:14:26] |
*** |
njero has joined #openmrs |
| [04:14:26] |
*** |
ChanServ sets mode: +v njero |
| [05:11:59] |
*** |
sioraiocht has joined #openmrs |
| [06:10:13] |
*** |
TorLye has quit IRC |
| [06:10:18] |
*** |
TorLye has joined #openmrs |
| [07:32:39] |
*** |
sioraiocht has quit IRC |
| [07:52:23] |
*** |
sioraiocht has joined #openmrs |
| [08:11:13] |
*** |
sioraiocht has quit IRC |
| [08:23:17] |
*** |
nribeka has joined #openmrs |
| [09:07:55] |
*** |
nribeka has quit IRC |
| [09:26:42] |
*** |
TorLye has quit IRC |
| [09:28:58] |
*** |
TorLye has joined #openmrs |
| [09:56:04] |
*** |
TorLye has quit IRC |
| [09:56:16] |
*** |
TorLye has joined #openmrs |
| [10:43:41] |
*** |
njero has quit IRC |
| [10:59:16] |
*** |
TorLye_ has joined #openmrs |
| [11:00:09] |
*** |
TorLye has quit IRC |
| [11:08:52] |
*** |
njero has joined #openmrs |
| [11:08:52] |
*** |
ChanServ sets mode: +v njero |
| [11:30:20] |
*** |
nribeka has joined #openmrs |
| [11:55:09] |
*** |
njero has quit IRC |
| [11:55:46] |
*** |
njero has joined #openmrs |
| [11:55:47] |
*** |
ChanServ sets mode: +v njero |
| [12:17:22] |
*** |
njero has quit IRC |
| [12:18:43] |
*** |
pearlbear has joined #openmrs |
| [12:18:43] |
*** |
ChanServ sets mode: +v pearlbear |
| [12:20:40] |
*** |
TorLye_ has quit IRC |
| [12:41:07] |
*** |
TorLye has joined #openmrs |
| [13:38:09] |
*** |
sgrannis has joined #openmrs |
| [13:38:22] |
*** |
ChanServ sets mode: +v sgrannis |
| [13:40:12] |
<sgrannis> |
nribeka: u there? |
| [13:44:17] |
*** |
sgrannis has quit IRC |
| [13:59:56] |
*** |
pearlbear has quit IRC |
| [14:06:43] |
<r0bby> |
meh |
| [14:25:49] |
*** |
TorLye has quit IRC |
| [14:26:08] |
*** |
TorLye has joined #openmrs |
| [15:22:06] |
*** |
lh has joined #openmrs |
| [15:32:53] |
<r0bby> |
lh: o/ |
| [15:33:02] |
<r0bby> |
what'd I do :( |
| [15:33:13] |
<r0bby> |
this can't be good :< |
| [15:33:28] |
<lh> |
r0bby: you say whatever is on your mind. this is not always a bad thing, but sometimes it is worth exercising restraint |
| [15:33:52] |
<r0bby> |
Shouldn't this be said in private, not where its logged? |
| [15:34:19] |
<r0bby> |
and not publically chastising(sp?) me |
| [15:35:29] |
<r0bby> |
ugh |
| [15:37:15] |
<r0bby> |
lh: you're never in here |
| [15:37:19] |
<r0bby> |
or rarely |
| [15:42:07] |
<r0bby> |
:x |
| [15:47:58] |
<r0bby> |
:/ |
| [15:55:12] |
<r0bby> |
I hate my life. |
| [16:29:30] |
<r0bby> |
I wish burke were accessible :| |
| [16:29:36] |
<r0bby> |
esp. considering midterm is coming up |
| [16:44:37] |
*** |
njero has joined #openmrs |
| [16:44:38] |
*** |
ChanServ sets mode: +v njero |
| [16:46:57] |
<r0bby> |
njero: o/ |
| [16:47:12] |
<njero> |
heya r0bby |
| [16:48:12] |
<r0bby> |
Concept c = "WEIGHT IN (KG)".concept() |
| [16:48:15] |
<r0bby> |
NICE!!!!!!!!!!! |
| [16:48:36] |
<njero> |
ooooh |
| [16:48:39] |
<njero> |
that is fancy |
| [16:49:22] |
<njero> |
Personally I am tending away from any string constants for concepts in code... but that is elegant |
| [16:49:39] |
<r0bby> |
wanna see the code? |
| [16:49:46] |
<njero> |
heck ya |
| [16:49:50] |
<njero> |
pastie.org |
| [16:49:58] |
<r0bby> |
String.metaClass.concept << { |
| [16:49:58] |
<r0bby> |
Context.conceptService.getConceptByName(delegate) |
| [16:49:59] |
<r0bby> |
} |
| [16:50:19] |
<njero> |
Yeah that is nice |
| [16:50:38] |
<njero> |
I love when cool code is short |
| [16:50:44] |
<r0bby> |
I need to see if this works via an abstract class |
| [16:51:26] |
<njero> |
you could do more weird stuff like ["Identifier Type", "Identifier"].patient() |
| [16:51:37] |
<njero> |
but that is not as natural |
| [16:52:00] |
<r0bby> |
njero: sure I could |
| [16:52:18] |
<r0bby> |
you can do some weird stuff in your controller/model if you know what you're doing |
| [16:52:39] |
<njero> |
Like I say though, in the Baobab/PIH registration system we have *one* concept hard coded like "WEIGHT IN (KG)" in the code and there are lots of commets around it saying that it is evil |
| [16:53:08] |
<r0bby> |
heh |
| [16:53:23] |
<njero> |
but it was hard code, or spend two weeks reworking things |
| [16:53:27] |
<r0bby> |
Okay if i don't get this done I won't pass midterm -- or i'm paranoid i wont |
| [16:53:51] |
<njero> |
you seem to have quite a bit working from the sounds |
| [16:53:51] |
* |
r0bby hugs lh |
| [16:53:56] |
<r0bby> |
thanks for helping me |
| [16:54:14] |
<r0bby> |
yes |
| [16:54:21] |
<r0bby> |
I have some ajax goodness working |
| [16:54:28] |
<njero> |
I didn't realize lh was in this channel |
| [16:54:29] |
<r0bby> |
it's hot |
| [16:54:44] |
<r0bby> |
I think she's here about me, not sure though |
| [16:54:50] |
<r0bby> |
:/ |
| [16:55:07] |
<njero> |
I am really excited bout the stuff you are working on... |
| [16:55:18] |
<r0bby> |
Yeh that's what's motivating me |
| [16:56:26] |
<r0bby> |
njero: as a user |
| [16:56:46] |
<r0bby> |
would it help if I gave you the template, or if I just gave the final markup? |
| [16:57:02] |
<r0bby> |
the template being something like <%= textArea(...) %> |
| [16:57:03] |
<njero> |
Probably not... we have a lot vested in Ruby... I want to see how you did it then clone it... or clone you |
| [16:57:26] |
<r0bby> |
Hell no, i'm not re-writing this thing |
| [16:57:32] |
<njero> |
No I will :) |
| [16:57:47] |
<r0bby> |
oh you can look at my design right now |
| [16:57:53] |
<njero> |
:) |
| [16:57:59] |
<r0bby> |
but i assume you want the final product? |
| [16:57:59] |
<njero> |
I want to steal all of your work |
| [16:58:17] |
<r0bby> |
nobody steals my workl and gets away with it |
| [16:58:22] |
<njero> |
Yeah... for general openmrs Groovy is really important |
| [16:58:25] |
* |
r0bby dials up his hitman |
| [16:58:30] |
<njero> |
we are weird and iconoclastic |
| [16:58:46] |
<r0bby> |
njero: but yeh -- I'd be willing to help you |
| [16:58:54] |
<njero> |
Would be killer |
| [16:59:23] |
<r0bby> |
If ruby has a built in templating engine the templating would be easy |
| [16:59:31] |
<njero> |
erb |
| [16:59:33] |
<r0bby> |
also -- you need to interrogate your model's properties |
| [16:59:43] |
<njero> |
yep, easy too |
| [17:00:06] |
<njero> |
The hard part is doin it all from a module and using the services on the backend... |
| [17:00:14] |
<njero> |
what you are figuring out... |
| [17:00:32] |
<r0bby> |
The data types I'm implementing for are: sublcasses of Number, Concept, Patient, String and Boolean/boolean |
| [17:00:41] |
<r0bby> |
also Date |
| [17:00:44] |
<njero> |
hmm |
| [17:00:50] |
<njero> |
It is not loosely typed? |
| [17:01:24] |
<njero> |
Does groovy have magic like method_missing? |
| [17:01:38] |
<r0bby> |
I use a container class to store the data types (when i interrogate the properties; i have a list of the container class) |
| [17:01:41] |
<r0bby> |
yup |
| [17:02:03] |
<r0bby> |
it's how Builders work in groovy |
| [17:02:18] |
<njero> |
it seems like instead of impementing all of the possible classes you could cheat and use method missing to get at properties, raise an exception if not there |
| [17:02:44] |
<r0bby> |
no, different widgets need to be rendered |
| [17:03:13] |
<njero> |
c = "WEIGHT IN (KG)".concept() / c.dataType() == "Numeric" |
| [17:03:16] |
<njero> |
or some such |
| [17:03:30] |
<r0bby> |
http://dev.openmrs.org/browser/openmrs-modules/groovyforms/src/org/openmrs/module/groovyforms/util/GroovyFormsGenerationUtil.groovy |
| [17:03:36] |
<njero> |
.dataType is not defined, instead it gets handled by method_missing |
| [17:03:36] |
<OpenMRSBot> |
<http://ln-s.net/20cM> (at dev.openmrs.org) |
| [17:03:52] |
<r0bby> |
maybe after midterm |
| [17:04:04] |
<r0bby> |
but right now let's get the basic system in place |
| [17:04:21] |
<njero> |
yeah, wise plan |
| [17:04:38] |
<njero> |
Have you ever seen our code? |
| [17:04:48] |
<r0bby> |
no I haven't |
| [17:04:54] |
* |
r0bby doesn't know ruby well |
| [17:05:19] |
<njero> |
It is *very* similar to groovy |
| [17:05:50] |
<r0bby> |
I know |
| [17:05:52] |
<r0bby> |
seen it |
| [17:06:00] |
<r0bby> |
except closure syntax is slightly different |
| [17:06:07] |
<r0bby> |
|x| for passing params iirc |
| [17:06:14] |
<r0bby> |
vs |
| [17:06:17] |
<r0bby> |
x -> |
| [17:06:57] |
<njero> |
yep |
| [17:07:08] |
<njero> |
This is our concept model (the whole thing) http://github.com/baobab/mateme/tree/master/app/models/concept.rb |
| [17:07:15] |
<OpenMRSBot> |
<http://ln-s.net/20cO> (at github.com) |
| [17:08:42] |
<r0bby> |
nice |
| [17:09:09] |
<r0bby> |
njero: what's your license? |
| [17:09:21] |
<njero> |
Hmm, I think MIT |
| [17:09:41] |
<njero> |
We are pretty dang open to re-releasing under other licenses |
| [17:09:55] |
<njero> |
But I think officially MIT |
| [17:10:10] |
<njero> |
We would have used the OpenMRS license but there is specific wording to Java |
| [17:10:12] |
<r0bby> |
good then you're fine w/ basically ripping my code :> |
| [17:10:38] |
<njero> |
Your license is OpenMRS or other? |
| [17:11:12] |
<r0bby> |
OpenMRS License is MIT license w/ a medical liability clause i think |
| [17:11:33] |
* |
r0bby is cloning your sourc e |
| [17:12:20] |
* |
r0bby will look when soc is over |
| [17:12:28] |
<njero> |
Yeah, that is why we went there |
| [17:12:51] |
<njero> |
The code will be much prettier then |
| [17:12:53] |
<njero> |
:) |
| [17:13:30] |
<r0bby> |
if I get this working i'll show you it shouldn't be too bad |
| [17:13:51] |
<njero> |
We were on an amazing run of cutting the code base in half every two weeks while simultaneously adding features and making it more readable |
| [17:14:12] |
<njero> |
If only that could continue forever |
| [17:14:24] |
<r0bby> |
njero: the cool thing about my code is AJAX validates as you go :) |
| [17:14:41] |
<njero> |
eventually our source code would be "OpenMRS" or "openMRS()" in groovy :) |
| [17:14:50] |
<r0bby> |
so you get near instant feedback -- it doesn't do it as you type but when you hit tab (de-focus on the text area it does) |
| [17:14:56] |
<njero> |
Aha, what kind of on the fly validation? |
| [17:15:03] |
<r0bby> |
sorta yeh |
| [17:15:04] |
<njero> |
what fields? |
| [17:15:17] |
<r0bby> |
ideally all of them |
| [17:15:32] |
<njero> |
How are you building the validation rules? |
| [17:16:01] |
<njero> |
reasonableMin, allowableMin? isn't there something like that in ConceptNumeric? |
| [17:17:07] |
<r0bby> |
oh it's just doing checks |
| [17:17:24] |
<r0bby> |
right now I have it checking 1) syntax 2) there *MUST* be fields |
| [17:17:32] |
<r0bby> |
and that's it |
| [17:17:36] |
<njero> |
aha |
| [17:17:41] |
<njero> |
makes sense |
| [17:20:28] |
<r0bby> |
in order to check syntax i parse it through the classloader |
| [17:20:38] |
<njero> |
Aha |
| [17:20:39] |
<r0bby> |
\if an exception occurs i display the exception |
| [17:20:45] |
<njero> |
yeah, makes sense |
| [17:21:10] |
<r0bby> |
Basically in orderr to do this in ruby you'll need to dynamically load ruby from ruby ;) |
| [17:21:21] |
<r0bby> |
and compile (or at least parse it) |
| [17:21:25] |
<njero> |
Could create a lot of traffic especially in satellite (latent) internet environments... but if that is configrable it is good |
| [17:21:36] |
<r0bby> |
it could |
| [17:22:14] |
<njero> |
heh |
| [17:22:22] |
<r0bby> |
One concern i have is resource leaks w/ the classloader |
| [17:22:37] |
<njero> |
Worry about that after midterm |
| [17:22:41] |
<r0bby> |
yeh |
| [17:22:49] |
<r0bby> |
i know it's in the back of my mind though |
| [17:22:53] |
<njero> |
classloader/leak issues are hydras |
| [17:23:03] |
<r0bby> |
yeh I know |
| [17:23:12] |
<r0bby> |
I have to get creative |
| [17:23:32] |
<njero> |
and whenever you change the code you change the issue. And you will surely change the code along the way... so why deal with the issue twice? |
| [17:23:54] |
<r0bby> |
It has to be parsed |
| [17:24:07] |
<r0bby> |
no way around it |
| [17:24:23] |
<njero> |
Fair enough... but leaking is fine for now |
| [17:24:25] |
<njero> |
:) |
| [17:24:37] |
<r0bby> |
I can fix it later |
| [17:24:45] |
<r0bby> |
When i have people battle test it |
| [17:24:47] |
<r0bby> |
aka a beta release =) |
| [17:27:58] |
<r0bby> |
retaining references in templates is hard |
| [17:28:08] |
<r0bby> |
considering that in the ened it's just a string |
| [17:29:27] |
<njero> |
give an example |
| [17:30:00] |
<r0bby> |
well |
| [17:30:14] |
<r0bby> |
to generate the concept answer selector i need a Concept object ;) |
| [17:30:50] |
<r0bby> |
I think i'll generate all the markup right away before i process.. |
| [17:31:06] |
<r0bby> |
actually funny thing |
| [17:31:15] |
<r0bby> |
I may not even need to run it through the engine! |
| [17:34:06] |
<njero> |
hmm |
| [17:34:14] |
<njero> |
I am a little lost, but uh.... |
| [17:34:35] |
<njero> |
I think I get it |
| [17:36:58] |
<r0bby> |
njero: I'll try to document the code as best as possible for you |
| [17:37:14] |
<njero> |
you're the best: ) |
| [17:37:15] |
<r0bby> |
Note: I used duck typing a crapton your best docs are my unit tests |
| [17:37:28] |
* |
njero <3 r0bby |
| [17:38:12] |
<r0bby> |
oddly enough that's the best way to learn about what code does |
| [17:38:51] |
<njero> |
Wait till you start specing :) |
| [17:39:41] |
<njero> |
Let me find a sample |
| [17:40:34] |
<njero> |
http://github.com/baobab/mateme/tree/master/spec/models/encounter_spec.rb |
| [17:40:40] |
<OpenMRSBot> |
<http://ln-s.net/20co> (at github.com) |
| [17:41:12] |
<njero> |
Then you get to stories which are even more fun... http://github.com/baobab/mateme/tree/master/stories/login_story |
| [17:41:17] |
<OpenMRSBot> |
<http://ln-s.net/20cp> (at github.com) |
| [17:41:28] |
<njero> |
executable documentation |
| [17:42:59] |
<r0bby> |
oh joy |
| [17:43:06] |
<r0bby> |
I'm not specing |
| [17:43:30] |
<r0bby> |
no way in hell I'll document -- and trust me documenting isn't going to be fun =( |
| [17:43:47] |
<r0bby> |
njero: i'll use yours as a guideline |
| [17:44:31] |
<njero> |
heh |
| [17:44:37] |
<njero> |
you are welcome to it |
| [17:44:44] |
<r0bby> |
for future reference my gmail/aim/yahoo/email are on my user page |
| [17:44:58] |
<njero> |
we actually gave a presentation on story driven development in Druban |
| [17:45:01] |
<njero> |
Durban* |
| [17:45:12] |
<r0bby> |
you'll have more mileage on those than irc privmsgs |
| [17:46:13] |
<r0bby> |
you can either speak w/ me or burke both of us know this project fairly well (burke knowing it better than me, but i'm more or less driving it) |
| [17:46:44] |
<njero> |
cool |
| [17:47:21] |
<r0bby> |
ben is my backup mentor but he's helpin w/ openmrs stuff not groovy and such |
| [17:47:47] |
<r0bby> |
I'm learning to be independent in solving complex issues |
| [17:48:09] |
<r0bby> |
ugh |
| [17:48:30] |
<r0bby> |
I have no idea how to run this through the engine |
| [17:48:54] |
<njero> |
the dreaded eval |
| [17:49:01] |
<r0bby> |
yeh |
| [17:49:32] |
<njero> |
Otherwise break it down into params and do things like "Concept".classify() |
| [17:49:41] |
<njero> |
or somesuch (in Ruby) |
| [17:50:21] |
<r0bby> |
it's not that |
| [17:50:35] |
<r0bby> |
the controller is piss easy |
| [17:50:47] |
<njero> |
ah, I thought this was the helper |
| [17:50:53] |
<r0bby> |
yeh it is |
| [17:51:00] |
<r0bby> |
but i'm specifically referring to the view |
| [17:51:21] |
<r0bby> |
I have a reference to the model =) |
| [17:51:32] |
<njero> |
tsk tsk |
| [17:51:42] |
<r0bby> |
model's properties is hould say (a list of GroovyFormsDomainModelMetaData objects |
| [17:51:51] |
<njero> |
oh, fair then |
| [17:52:10] |
<r0bby> |
I store the name, value, and type |
| [17:52:18] |
<r0bby> |
all the things we're interested in :) |
| [17:52:29] |
<r0bby> |
for a concept the reference is in the value |
| [17:53:11] |
<njero> |
ah, as an object not an id in the db? |
| [17:55:07] |
<r0bby> |
there is no database |
| [17:55:12] |
<r0bby> |
this is serialized to XML :) |
| [17:55:22] |
<r0bby> |
Burke and I chose to use flat files |
| [17:55:59] |
<r0bby> |
this indeed motivates me to get this done so you can copy my work and not credit me :< |
| [17:56:28] |
<njero> |
heh |
| [17:56:37] |
<r0bby> |
njero: one thing that's cool about groovy |
| [17:56:57] |
<r0bby> |
def writer = new StringWriter(); writer << "hai" << "\n" << "bai"; |
| [17:57:23] |
<njero> |
the << operator? |
| [17:57:34] |
<r0bby> |
overridden |
| [17:57:53] |
<r0bby> |
in groovy operator overloading existing |
| [17:57:56] |
<r0bby> |
exists* |
| [17:58:02] |
<njero> |
Yeah, it is a rubyism... but nice :) |
| [17:58:27] |
<r0bby> |
njero: yeh don't piss on my picnic |
| [17:58:32] |
<r0bby> |
wait til i'm done eating |
| [17:58:34] |
<njero> |
More languages should embrace it |
| [17:58:39] |
<njero> |
you are right :) |
| [18:26:48] |
*** |
TorLye has quit IRC |
| [18:51:00] |
*** |
sgrannis has joined #openmrs |
| [18:51:23] |
*** |
ChanServ sets mode: +v sgrannis |
| [19:53:14] |
*** |
sgrannis has quit IRC |
| [20:29:42] |
*** |
upul has joined #openmrs |
| [20:58:42] |
*** |
upul has quit IRC |
| [20:58:43] |
*** |
upul_ has joined #openmrs |
| [21:07:29] |
*** |
bwolfe has joined #openmrs |
| [21:07:29] |
*** |
ChanServ sets mode: +o bwolfe |
| [21:23:17] |
*** |
upul has joined #openmrs |
| [21:23:24] |
*** |
upul_ has quit IRC |
| [21:51:05] |
*** |
bwolfe has quit IRC |
| [22:19:48] |
*** |
upul has quit IRC |