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
|