These are chat archives for openworm/ChannelWorm

18th
Jun 2015
Travis Jacobs
@travs
Jun 18 2015 12:53
Hey this is awesome @VahidGh !!
The plot looks convincing; do you have some sample code or a workflow I can use to get the same result?
This is so cool
Travis Jacobs
@travs
Jun 18 2015 13:40
And also awesome job on getting the web app back online @joebowen
Great to see that the digitizer is working on there too, this is sweeeet
Travis Jacobs
@travs
Jun 18 2015 14:25
Just had a hangout with @wilzh40. Wilson is interested in working on the model completion dashboard idea over the summer
@joebowen
Joe, you're also interested in working on the dashboard project. Right now the idea is that we could build it as part of the existing channelworm web app, since visualizing Ion Channel model completion is something we want for the CW web app anyway
Travis Jacobs
@travs
Jun 18 2015 14:35
This is asynchronous right now, and we can schedule a meeting between the three of us soon, but with the hackathon coming up this Sunday I wanted to be sure each of you has something to work on in that period.
Right now we're tracking this project in the Augment web app milestone
Vahid Ghayoomie
@VahidGh
Jun 18 2015 14:37
@travs, Still working on some improvements. will push it to the repo soon.
Travis Jacobs
@travs
Jun 18 2015 14:39

@VahidGh ok sweet!

@joebowen @wilzh40 There may be things that need to be done before some of these issues are able to be tackled, so if you see something like that please add an issue to the milestone so we can track it

Wilson said he will be catching up on the existing web-app's codebase in the next couple days, so in the downtime I'm wondering @joebowen what you think about integrating this model completion dashboard with the existing project.
The openshift server will handle it, no?
Milad Jafary
@miladjafary
Jun 18 2015 15:17
Hi
every one
Vahid Ghayoomie
@VahidGh
Jun 18 2015 15:19
@miladjafary, Hi
Travis Jacobs
@travs
Jun 18 2015 15:46
Hi guys, sorry my ride was delayed
@vahidgh @miladjafary
Milad Jafary
@miladjafary
Jun 18 2015 15:47
@travs Hi
what's up?
:D
Vahid Ghayoomie
@VahidGh
Jun 18 2015 15:47
@travs, Hi, no problem
Milad Jafary
@miladjafary
Jun 18 2015 15:49
so , what's the subject ?
Why all of you silence ? :d
Vahid Ghayoomie
@VahidGh
Jun 18 2015 15:53
The meeting was about integrating CW with PyOW I guess
Milad Jafary
@miladjafary
Jun 18 2015 15:55
as a I remember @travs develop an adapter which is get an dajango model and add them to PyOW
Travis Jacobs
@travs
Jun 18 2015 15:55
hi guys sorry, I'm actually back now
Ok yes
So we're here to talk a bit more about the data models and porting between PyOW and CW
Milad Jafary
@miladjafary
Jun 18 2015 15:56
the question is how we can update django model with PyOW adapter and when you should do this?
Travis Jacobs
@travs
Jun 18 2015 15:56
On my side of things I wanted to make sure that the adapters I am creating will be useful. Right now we have one adapter which does something like "CW.patchClamp ---> PyOW.experiment"
Yes @miladjafary that's exactly right
so let's look at the django model for a second
Milad Jafary
@miladjafary
Jun 18 2015 15:57
OK
Travis Jacobs
@travs
Jun 18 2015 15:58
Milad Jafary
@miladjafary
Jun 18 2015 15:59
at this time , you convert CW.pathcClamp -->PyOw.experiment
what about the other model such as Grahp ?
Travis Jacobs
@travs
Jun 18 2015 16:00
Right, so the fields currently in CW.patchclamp are just added to a PyOW.experiment
Milad Jafary
@miladjafary
Jun 18 2015 16:00
@travs exactly :d
Travis Jacobs
@travs
Jun 18 2015 16:00
So the data model structure for a patchclamp experiment (i.e. fields) is actually inside channelworm
Milad Jafary
@miladjafary
Jun 18 2015 16:01
yes.
Travis Jacobs
@travs
Jun 18 2015 16:01
But when we want to get the fields for an ion channel in django, our idea if I'm not mistaken, was to get the fields from PyOW
It seems strange to me that we will define some model structures in PyOW, and others in CW. How do we know which models to define where?
Milad Jafary
@miladjafary
Jun 18 2015 16:02
you mean "ion_channel" model in django?
Travis Jacobs
@travs
Jun 18 2015 16:03
@miladjafary yes
I believe we said that we could pull the fields for this model from the PyOW data structure
and I could certainly make an adapter for that
but my question is whether we should define our models in only one place, so when we want to point to them we don't have to go searching around a lot
does that concern make sense to you guys?
Milad Jafary
@miladjafary
Jun 18 2015 16:04
yes :d
i think we can do this but and reflection
or we can update adapter every time change our model
in django
Travis Jacobs
@travs
Jun 18 2015 16:07
Hmm yes that is possible for the CW --> PyOW models
Milad Jafary
@miladjafary
Jun 18 2015 16:07
so the problem is how to PyOW --> CW ?
Travis Jacobs
@travs
Jun 18 2015 16:07
The experiment adapter actually should not need to be updated as we add fields in django, so I should keep this in mind with the other adapters
Yes @miladjafary
That's right
Milad Jafary
@miladjafary
Jun 18 2015 16:08
how are change PyOW model ?
how change PyOW model ? *
Travis Jacobs
@travs
Jun 18 2015 16:09
The PyOW models should not change drastically in the near future, but since we're still not at 1.0.0, it will undergo some API changes
that may not be compatible with what we have now
So it may be that we have to manually use adapters for each model class, and update these as we go
Milad Jafary
@miladjafary
Jun 18 2015 16:11
I think add new layer or component for updating PyOW-->CW became more complex
Travis Jacobs
@travs
Jun 18 2015 16:11
True
Stephen Larson
@slarson
Jun 18 2015 16:11
Hey guys — sorry I’m lurking here, but I just thought I’d drop this page from the PyOW docs: https://pyopenworm.readthedocs.org/en/latest/making_dataObjects.html
as it is relevant to this question
It shouldn’t be too much more complex; just requires reading the docs (hopefully) :)
Milad Jafary
@miladjafary
Jun 18 2015 16:12
in order to changing PyOW model rarely , so we can update adapter manually.
Travis Jacobs
@travs
Jun 18 2015 16:12
thanks @slarson ! :)
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:12
@slarson, yes :) thanks
Milad Jafary
@miladjafary
Jun 18 2015 16:12
@slarson thanks
Travis Jacobs
@travs
Jun 18 2015 16:13
@miladjafary There should be a way to make the adapters general enough to catch these changes
So this "adapter layer", when complete, would be enough to go from PyOW -> CW and CW -> PyOW
Milad Jafary
@miladjafary
Jun 18 2015 16:14
so we can define an schema in PyOW method
Travis Jacobs
@travs
Jun 18 2015 16:14
That's right
Milad Jafary
@miladjafary
Jun 18 2015 16:15
in this way in the adapter class we can read the schema
of PyOW
Travis Jacobs
@travs
Jun 18 2015 16:15
My original problem was that the schema for patch clamp experiment was defined in CW
but perhaps this is fine, if the PyOpenWorm schema for Experiment is very basic (key: value)
@miladjafary what do you think?
Milad Jafary
@miladjafary
Jun 18 2015 16:15
yes excatly
Travis Jacobs
@travs
Jun 18 2015 16:16
Okay awesome
Milad Jafary
@miladjafary
Jun 18 2015 16:16
@travs @VahidGh Sorry I should go,
Travis Jacobs
@travs
Jun 18 2015 16:16
So I believe we agreed last time that I would give the patch clamp adapter a shot.
Since that's done, now let's decide on some next actions?
Milad Jafary
@miladjafary
Jun 18 2015 16:16
for and hour
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:17
And my problem is again with data consistency
Travis Jacobs
@travs
Jun 18 2015 16:17
Oh! Ok, well I'll be here when you get back @miladjafary :)
@VahidGh Please go on
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:17
@miladjafary. Ok
Milad Jafary
@miladjafary
Jun 18 2015 16:17
if it's possible contuse it one hour later
tnx guys
:D
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:18
Is key,value stable enough when needing to search for something?
Travis Jacobs
@travs
Jun 18 2015 16:18
good point, you mean searching on the PyOW side?
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:19
If I enter some data, how to be sure there is no duplication
Travis Jacobs
@travs
Jun 18 2015 16:19
Because if our adapter going from PyOW to CW resumes the CW schema this will not be a problem
Hmm let me think
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:19
And this is one of the basics that a DBMS needs to handle
Travis Jacobs
@travs
Jun 18 2015 16:20
Right
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:20
And that's why we have tables, keys, etc
Travis Jacobs
@travs
Jun 18 2015 16:21
Well let's take a look at the adapter
We give the PyOW evidence object a doi attribute that comes from CW
so we can implement something in PyOW that ensures no duplicate Evidence (based on doi) is inserted
I don't believe that is currently a feature, but it would be useful
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:23
What about having different patch clamps, models, etc with related to one DOI?
Travis Jacobs
@travs
Jun 18 2015 16:23
and on the CW side, if we convert back to the CW data model we can perform the same operation with the doi attribute over there
That is not a problem because the doi is on an Evidence object
and many Experiments can be referenced by the same Evidence
Does this make sense?
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:27
Yes, but how the ids could be prevented from duplication?
Travis Jacobs
@travs
Jun 18 2015 16:28
In CW?
We can do a unique operation before inserting into the db to make sure that the object is unique
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:28
In CW this is getting handled by sqlite
Travis Jacobs
@travs
Jun 18 2015 16:29
That's right
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:29
But how to ensure ids not getting overwritten in PyOW from different sources?
Travis Jacobs
@travs
Jun 18 2015 16:29
I guess for PyOW, that is the question :)

We will have to implement something if it does not already exist, but to be clear you mean if I do something like

insert(P.Evidence('Ghayoomi et al.'))
insert(P.Evidence('Ghayoomi et al.'))

How can we be sure Evidence inserted in line 1 is not overwritten?

Or with DOI instead of name
Whichever attribute we decide on
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:32
exactly
in addition to this we need to handle everything a DBMS does automatically.
Such as reserving relationships, FKs, etc
Travis Jacobs
@travs
Jun 18 2015 16:34
Ok, that's a good point. I am making an issue in this milestone to track this
The DBMS stuff should have all been implemented by Mark already, but we can have a deeper look into some specific issues if you'd like
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:37
Yes, but what about when importing an scheme as an object to the PyOW?
PyOW handles those mentioned for it's own
But here we are missing those coming from another DB when storing as an object
Travis Jacobs
@travs
Jun 18 2015 16:39
If I understand correctly, this is where the adapters come in! :)
To create PyOW objects that correspond with objects from another db
@VahidGh
Is there a specific case you are thinking of?
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:40
Right, maybe one object per table can solve this
Travis Jacobs
@travs
Jun 18 2015 16:43
Yes, or smarter adapters ;)
(maybe)
But in any case I think we have some next actions here
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:45
Yes, we just need to answer those questions
Travis Jacobs
@travs
Jun 18 2015 16:46
Right, I will raise the issue regarding duplication of evidence data
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:46
It's more about distributed DB concepts
And how PyOW handles related issues
Travis Jacobs
@travs
Jun 18 2015 16:48
Ok, so we can make a more general issue
I will raise that in the milestone after this meeting
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:48
Yes, this could be a general issue related to PyOW
And the specific issue related to CW is "how" and "when" using PyOW
Travis Jacobs
@travs
Jun 18 2015 16:49
Ok, and in terms of CW I have some more coding to do for the adapters :)
What do you think of having an "Export" django view for getting the data from CW to PyOW. Overkill? Or should we have an"Export" button on each row in each table?
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:51
The long-term objective should be based on not needing to expot
export
Travis Jacobs
@travs
Jun 18 2015 16:52
Ok, so some kind of automatic curation?
I'm not sure what you mean exactly
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:52
I mean not needing to convert (adapter)
Travis Jacobs
@travs
Jun 18 2015 16:54
Hmm, I'm not sure I understand. So what happens to the data in this model?
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:54
We should store what we need in our DB based on conventions and schemes coming from PyOW side
Travis Jacobs
@travs
Jun 18 2015 16:54
Right, but PyOW will need the Channel Models eventually..
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:55
In overall, PyOW should decide in what format which data should be stored
Travis Jacobs
@travs
Jun 18 2015 16:55
I agree
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:56
Yes, and then we will change models based on the PyOW definition of saying a patch clamp schema
Travis Jacobs
@travs
Jun 18 2015 16:56
But I think the channel models should eventually find their way back into PyOW, since the models will end up in other subprojects (e.g. c302)
And we could define patch clamp schema in PyOW for sure, and maybe we could define all schemas in PyOW (this seems cleaner than some in django, some in PyOW)
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:57
Yes, and then we just need to keep DBs synced when some data is curated/validated
Travis Jacobs
@travs
Jun 18 2015 16:57
Right, and that's what I mean by "Export"
When data is curated in CW, it is sent to PyOW
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:58
right
Travis Jacobs
@travs
Jun 18 2015 16:58
Ok, so do you think the admin view should accomplish this?
Vahid Ghayoomie
@VahidGh
Jun 18 2015 16:58
Yes, of course
But with some special permissions
Travis Jacobs
@travs
Jun 18 2015 16:59
Ok, but I mean should there be a "curate/export" view only accessible by admin
or is the admin view empty right now?
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:00
The accounting feature is already exists, we just need to define different roles and authorization issues
Travis Jacobs
@travs
Jun 18 2015 17:02
Ok, perfect
We are coming to the end of our meeting so I want to make sure we have some next actions
I will look into the distributed database capabilities of PyOW, and write more adapters going from PyOW to CW schema
What do you think of giving a try at the admin view? Getting ready to curate data and a button that syncs up PyOW?
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:05
Could be considered with a lower prioroity
Travis Jacobs
@travs
Jun 18 2015 17:06
Ok, what's in development right now? Fitting?
Milad Jafary
@miladjafary
Jun 18 2015 17:06
@travs @VahidGh Hi :d
Travis Jacobs
@travs
Jun 18 2015 17:07
Hey @miladjafary :)
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:07
#63, #75
Travis Jacobs
@travs
Jun 18 2015 17:07
Ok, well I'll raise this as an issue in CW and put it in the backlog
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:07
In addition to fitting
Milad Jafary
@miladjafary
Jun 18 2015 17:09
would you please tell me what's the result meeting :d
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:09
In #63 we need somewhere to get data from PyOW if available
@travs, what do you think about implementing those?
Eventually we need to get those data from somewhere, If we can work with PyOW, then we go to implement needed codes
So, it would be better to start with PyOW from here
@miladjafary, Not much talk without you :)
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:15
This is the first approach if you remember, but now we can define needed schemes in PyOW and reuse them in CW as discussed
Milad Jafary
@miladjafary
Jun 18 2015 17:15
so what the result of syncING pyow --》cw
Great
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:16
The result was: if we can agree on the scheme in both, then we just need a export
Milad Jafary
@miladjafary
Jun 18 2015 17:16
Yes .exactly
Travis Jacobs
@travs
Jun 18 2015 17:17
@VahidGh Yes I agree
Ok, so we will need to define a schema in PyOW for PatchClampExperiment, which can extend Experiment
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:19
@travs, Yes
Milad Jafary
@miladjafary
Jun 18 2015 17:19
So what's the export format
Travis Jacobs
@travs
Jun 18 2015 17:20
Data model for PatchClampExperiment is tracked in an issue over there openworm/PyOpenWorm#154
I think we can handle exporting in adapters going from CW >> PyOW
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:21
@miladjafary, We need some export feature in UI, for some roles, that when some data curated. or flagged as valid, would export to the PyOW
Travis Jacobs
@travs
Jun 18 2015 17:21
CW >> PyOW adapters should be relatively easy, since we are defining the schema for CW in PyOW
@VahidGh that's correct
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:21
This could be an sql file, XML, etc which is understandable by PyOW
Travis Jacobs
@travs
Jun 18 2015 17:22
@VahidGh is it necessary to export files?
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:22
Or if available in the near future, inserting directly to some online DB from PyOW
Travis Jacobs
@travs
Jun 18 2015 17:23
I think we can just handle exports in the adapters class, and export button will just call an export function
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:23
@travs, yes, this is also possible
Milad Jafary
@miladjafary
Jun 18 2015 17:23
@travs agreed
Travis Jacobs
@travs
Jun 18 2015 17:24
Ok, so we have two issues from this as well
  1. Create UI for curator
. 2. Create export function
Milad Jafary
@miladjafary
Jun 18 2015 17:24
We can handle it in adapter class on read from an facade in the PyOW
Travis Jacobs
@travs
Jun 18 2015 17:24
Wow, gitter renders "2." as "1." at the start of a line :|
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:24
@travs, Is there any plan for PyOW to have an Online DB in the near future?
Travis Jacobs
@travs
Jun 18 2015 17:25
Not in the near future, unless it is part of the model completion dashboard (so maybe...)
I see what you are saying though, this would be convenient instead of having to host PyOW ourselves?
Or sync via github...
@miladjafary that's true, I suppose the export function will be a facade of sorts
Milad Jafary
@miladjafary
Jun 18 2015 17:28
Great
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:31
What about working on some code that automatically convert a table schema from PyOW to a django class?
Milad Jafary
@miladjafary
Jun 18 2015 17:32
What's the point? @VahidGh
Travis Jacobs
@travs
Jun 18 2015 17:32
@miladjafary I think to keep the model structures in sync
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:33
This way anyone can have access to defined schemes in PyOw within the Django easily
@travs, exactly
Travis Jacobs
@travs
Jun 18 2015 17:33
I was thinking of this as part of the adapter, but at worst it will be built on top of the adapter
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:33
Instead of defining every class by hand and comparing with PyOW
manually, I mean :)
Milad Jafary
@miladjafary
Jun 18 2015 17:35
Good idea
But i think the idea of schema
Is t
Is this
Travis Jacobs
@travs
Jun 18 2015 17:37
@VahidGh @miladjafary perhaps this is a question of terminology? :)
Milad Jafary
@miladjafary
Jun 18 2015 17:38
:+1:
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:38
@travs, yes, and now we can return to the first question
Travis Jacobs
@travs
Jun 18 2015 17:38
haha ok
What was that?
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:39
Are key-values reliable?
Milad Jafary
@miladjafary
Jun 18 2015 17:39
Yes what's that
Travis Jacobs
@travs
Jun 18 2015 17:39
Ah, right
Well, let's say PyOW has a feature that prevents data duplicity based on DOI
Is that enough? Or should there be more checks?
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:39
If someday we change our scheme, we have a new key
data is the same in the original DB but in different keys within PyOW
Travis Jacobs
@travs
Jun 18 2015 17:40
You are right
But this is solved by something you said earlier: that we can define our schema entirely in PyOW
which negates this problem
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:41
As discussed before, we need to reserve Primary/Foreign keys, relationships etc
Travis Jacobs
@travs
Jun 18 2015 17:41
Yes, this will be inside the data model definition inside PyOW, correct?
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:41
Yes, now getting out of loop
:)
Milad Jafary
@miladjafary
Jun 18 2015 17:41
I think the point is here
The PyOW is no SQL
And define fk and pk
Is belongs to relatonal dB
So is it require to sync keys cw with Pyopenworm
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:46
@miladjafary, we discussed about this when you were not here
Milad Jafary
@miladjafary
Jun 18 2015 17:46
OK :D
SO tell me about it later
Travis Jacobs
@travs
Jun 18 2015 17:47
Good point @miladjafary we need to keep those differences in db's in mind as we go forward
So guys I have to get going in a few mins
but I have some issues raised
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:47
@miladjafary, OK :)
Milad Jafary
@miladjafary
Jun 18 2015 17:47
OK
Travis Jacobs
@travs
Jun 18 2015 17:48
in particular, #91 and #92
and openworm/PyOpenWorm#154
Milad, can I assign you to #91, since you have experience with views from the current app?
Milad Jafary
@miladjafary
Jun 18 2015 17:49
OK no problem
Travis Jacobs
@travs
Jun 18 2015 17:50
And Vahid, you said that you are working on #63 and #75, as well as fitting, correct? (boy you are working hard :) )
@miladjafary awesome! I see you're also working on #63 and #75, you guys are great!
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:50
@travs, actually Milad and I
Milad Jafary
@miladjafary
Jun 18 2015 17:50
Kidding me :d
Travis Jacobs
@travs
Jun 18 2015 17:51
@VahidGh Ah youre correct. Ok, as long as we know who is doing what things
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:52
I'm working more on the fitter which is related to the dependency of the #75 :)
Travis Jacobs
@travs
Jun 18 2015 17:52
And I will do openworm/PyOpenWorm#154, openworm/PyOpenWorm#153 and #92
@VahidGh ah that's right.
@VahidGh let me know when I am able to run the fitter! I really want to see it in action :D
GA is too cool
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:53
Now, you can by running the example
Travis Jacobs
@travs
Jun 18 2015 17:54
Oh! Ok well I will tell you my results!
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:54
But I'm working on an improvement that needs much less effort for digitization
Travis Jacobs
@travs
Jun 18 2015 17:54
But for now I have to go guys, good chatting with you. When we get some of the linked issues worked through we'll meet again?
Vahid Ghayoomie
@VahidGh
Jun 18 2015 17:54
When getting this integrated with data model, it is possible to run it by the web app
Ok, good night/evening/morning everyone :)
Milad Jafary
@miladjafary
Jun 18 2015 17:56
OK @/all
Goodbye