AGENDA
=======
0. Preliminaries. 10 mins

1. Beta 2 readiness review. 5 mins (+15).
   + CPP - all good right?
   + Java (*Greg*, mea culpa)
   + Beta 2 demo list (*Matej*)

2. Status and Upcoming Work Review. 20 mins (+35)
   What's important now. Help Greg and Bob restart. Other than the
   Db discussion and charter, what are people up to.
   + EasyPVA status in CPP and Java. Is this complete for now?
   + V3Channel status. Is get and set of a set of V3 channels in same lockset done [3]?
   + Benchmark testbench for EPICS V4. Do *Marty* and *Matej* concede the requirement
     necessity and to undertake work.
   + BPM orbit service (Timo)
   + Model service (Greg)
   + V3-V4 interop (David)
   What else is presently being done? ** What's unfinished **?

3. January meeting agenda review (*Greg*) [4]. 15 mins (+50).
   + Confirm dates 21-23 Jan (note 21t Jan is Martin Luther King holiday!)
   + Will at least EPICS V4 participants agree to provide discussion documents
     and requirements talk at the meeting (Bob, Ralph, Michael).
   + Bob invite Tim?

4. PVDatabase first review (*Marty*), [5]. 40 mins (+90)
   Let's make a read through page by page with initial comments.
   Let's try to distinguish requirements implied by pvDatabase, as opposed to
   design proposals and actual design.
   + Review of mail thread comments made so far, esp Benjamin's and Michael's.


MEETING:
========
Present: TK, MS, MK, GS, GW, DH
Scribe: GW

***********
NEW TOPIC:  Beta 2 readiness review. 5 mins (+15).
***********
    GW: exampleJava should be released before an announcement is made to tech-talk
    GW has added a service giiving an example of NTTable and arguments - a quasi archive service.
    MS: pvAccessCPP and pvIOCCPP contain a file called "demo", which includes instructions 
    for how to start a test server. See the end of this notes.    
    MS: We should have an indenpenent party test beta 2 before making announcement.
    AI on GW by 7-Dec: Create java tar file and upload
    AI on TK by 7-Dec, for completion by 12 Dec: Get a PSI developer to independently test beta 2 prior to announcement.  CPP and java.     
    TK: Made a short test on 2 platforms (sci linux and ubuntu), cpp. Short test of pvput, pvget worked.
    DH: We should link the web site to exampleCPP. Has anyone else tried exampleCPP?
    TK: tried it briefly, but didn't get far.
    DH: I have concern that archive service in exampleCPP has Diamond dependencies, so we need
    indepedent verification of it.
    DH: Will change the README and would like someone to check it.
 
 Verifications required for beta 2
    exampleCPP nondependency on Diamond 
    README of beta 2 release 
    full cpp test including eget and pvget examples below
    full java test   
    
*********
NEW TOPIC: Status and Upcoming Work Review.
*********
   
MK:

EasyPVA status in CPP and Java. Is this complete for now?

For phase I yes.
But it is not done.
In Java lots remains to do.
In C++ almost nothing is done.
Is Matej assigned to finish it?
If not who?

V3Channel status. Is get and set of a set of V3 channels in same lockset done [3]?

Yes.

Benchmark testbench for EPICS V4. Do *Marty* and *Matej* concede the requirement
     necessity and to undertake work.

I agree with necessity.
Do not agree that I should undertake the work.
This is a good chance for someone else to have a deeper understanding
of what Matej and I have done.

MS: It is not sensible to make a comparative test against channel access. 

After discussion: MS will create the microbenchmark test bench. Initially it will test
only pvAccess and pvData (de)serialization (and loopback and wire). Then we will use it
for verifying performance of pvDatabase concepts.

AI on MK by Jan 21: Create a microbenchmarking test bench able to performance test
individual aspects of the processing flow of EPICS V4 client-server interactions and processing.


*********
NEW TOPIC: January meeting agenda review 
*********
Consensus on dates: agreed.
GW: How about the tentaive agenda:
1. Demos of bpm orbit and model services (Timo, Greg) 
2. 2012-2013 charter review (Greg)
3. EPICS V4 control database requirements and design references 
  (Bob, Marty, and ideally Tim, Benjamin, Ralph, Andrew, and Michael hopefully)
4. PVDatabase proposal (Marty), and review (above item 3 people)
5. Demo all normative types to pvget and eget (Matej)
6. Microbenchmark testbench design and initial performance breakdown report (Matej)
7. V3-V4 interop user guide review (David, Marty).
consensus: agreed

********
NEW TOPIC: PVDatabase first review
********
MK: Goes through initial reading of pvDatabaseCPP:
http://epics-pvdata.sourceforge.net/informative/pvDatabaseCPP.html

- MK emphasises that pvDatabase personifies the idea that the V4 IOC will not
itself initially include the specialized record support that are the key parts of a V3 IOC 
and pvJavaIOC. Rather it's just a harness for support coming later.

GS: re subpackage xml: xml is too complicated and if one were to express only a V3 
database in V4, the XML syntax would be too complicated. You'd be making something
simple into something complicated.
GW: disagrees. XML 1.0 or "angle bracket syntax" is just a textual serialization of the XML Infoset,
and one that can be confusing to view. But then you should use an XML formatter,
an XML editor to clean up your angle-bracet XML, or use a subset of XML (MicroXML) or a
different character encoding of XML Infoset (JSON).
-> discussion on suitability of XML followed. No concensus.

MK continued to review teh subpackges of pvIOCJava.

GW: I think some record support and drivers, such as teh functionality of asynDriver, should
be developed in parallel with pvDatabase, in order to check the functionality of pvDatabase.

MK: One of the best things about V4 pvDatabase, is that we provide a clean interface. That
way we can basically port asynDriver directly from its V3 implementation!

DH: Feels that it's hard to understand the association of pvAccess and pvDatabase, and
other interfaces. 

MK: likes that Dh looking closely at code. Encourages codng help

DH: Wants to create an image server.
MK: Bob thinks so too.
DH: I'm well on the way to creating an image server, including connection to a camera. But DH is
more thinking that he'd like to be involved in the pvDatabase development. That is, be a contributor to 
the requirements and a co-editor.

GW: has 2 worries: i. that pvIOCJava, pvDatabaseCPP and pvIOCCPP, are too asymetric, and will
be for a while. ii. That MK has no help on pvDatabase. We need more real editors in the pvDatabase
effort.

DH: On i, once pvDatabase basic is done, we should pull the support parts out of pvIOCJava, and create pvDatabaseJava. On ii DH would very much like to help subject to time constraints.

MK: My goal for phase 1, is to get it far enough to interface to asynManager. So a user can talk to 
areaDetector. Then a pvAccess client can access that stuff.

GW:+1

 

APPENDIX: pvAccess DEMO
-------------------------


First run a pvAccess test server (portable channel access server equvivalent) by
running ./runTestServer in another terminal (or in background).

pvget, pvput and eget utilities are delivered by pvAccessCPP (caget and caput equvivalents).
They are located in pvAccessCPP/bin/$EPICS_HOST_ARCH directory.

1. Get the value of a V4 scalar PV
----------------------------------
> pvget testValue
testValue                      0


2. Put the value of a V4 scalar PV
----------------------------------
> pvput testValue 1.23
Old : testValue                      0
New : testValue                      1.23


3. Get the value of a V4 array PV
----------------------------------
> pvget testArray10_1
testArray10_1 10 0 1 2 3 4 5 6 7 8 9


4. Put the value of a V4 array PV
----------------------------------
> pvput testArray10_1 3 11 22 33
Old : testArray10_1 10 0 1 2 3 4 5 6 7 8 9
New : testArray10_1 3 11 22 33


5. Get the values of all the fields of V4 record (-r is pvAccess request string)
--------------------------------------------------------------------------------
> pvget -r 'field()' testValue
testValue
uri:ev4:nt/2012/pwd:NTScalar 
    double value 1.23
    alarm_t alarm
        int severity 0
        int status 0
        string message 
    time_t timeStamp
        long secondsPastEpoch 0
        int nanoSeconds 0
        int userTag 0
    display_t display
        double limitLow 0
        double limitHigh 0
        string description 
        string format 
        string units 
    control_t control
        double limitLow 0
        double limitHigh 0
        double minStep 0
    valueAlarm_t valueAlarm
        boolean active false
        double lowAlarmLimit 0
        double lowWarningLimit 0
        double highWarningLimit 0
        double highAlarmLimit 0
        int lowAlarmSeverity 0
        int lowWarningSeverity 0
        int highWarningSeverity 0
        int highAlarmSeverity 0
        double hystersis 0


6. Get the values of some fields of V4 record (-r is pvAccess request string)
--------------------------------------------------------------------------------
> pvget -r 'field(value,timeStamp,alarm)' testValue
testValue
structure 
    double value 1.23
    time_t timeStamp
        long secondsPastEpoch 0
        int nanoSeconds 0
        int userTag 0
    alarm_t alarm
        int severity 0
        int status 0
        string message 


6. Monitor the value of a V4 scalar PV
--------------------------------------
> pvget -m testCounter
testCounter                    406
testCounter                    407
testCounter                    408
testCounter                    409
^C


7. Get a NTMatrix and print as a matrix
---------------------------------------
> eget -a columns=3 -a rows=5 -s testNTMatrix
  0.677423  0.456543   0.11271
   1.31041   1.10541   1.64136
   2.41162   2.11947   2.01143
   3.06775   3.67029   3.55055
    4.0458   4.71389   4.38239


8. Get a NTMatrix and print its transponse matrix
-------------------------------------------------
> eget -a columns=3 -a rows=5 -t -s testNTMatrix
  0.677924   1.66402   2.42248    3.8881   4.22758
  0.874961   1.20251   2.56682   3.21442   4.92651
   0.47145   1.65475    2.4864   3.79319   4.80394


9. Get a NTTable and print as a table
-------------------------------------
> eget -a columns=3 -s testNTTable
    column0    column1    column2
     0.6783    1.62252    2.48407
   0.188775    1.72518    2.72885
   0.740506    1.11392    2.75991
   0.679227    1.58597    2.80799
   0.775342     1.3701    2.83385
   0.164793    1.19263    2.52135
   0.680618    1.46619    2.29619
   0.152323    1.28396    2.98274
  0.0926253    1.44459    2.96131
   0.753354    1.23773    2.66854


pvIOCCPP DEMO
---------------------------

First run a pvAccess server providing access to EPICS V3 channels via pvAccess protocol by
running ./runV3Channel in another terminal (or in background).

pvget, pvput and eget utilities are delivered by pvAccessCPP (caget and caput equvivalents).
They are located in pvAccessCPP/bin/$EPICS_HOST_ARCH directory.

1. Get the value of a V3 scalar PV
----------------------------------
> pvget double01
double01                       0


2. Put the value of a V3 scalar PV
----------------------------------
> pvput double01 1.23
Old : double01                       0
New : double01                       1.23


3. Get the value of a V3 array PV
----------------------------------
> pvget doubleArray01
doubleArray01 0

(returns an array with zero elements)


4. Put the value of a V3 array PV
----------------------------------
> pvput doubleArray01 3 11 22 33
Old : doubleArray01 0
New : doubleArray01 3 11 22 33


5. Get the values of all the fields of V3 record (-r is pvAccess request string)
--------------------------------------------------------------------------------
> pvget -r 'field()' double01
double01
uri:ev4:nt/2012/pwd:NTScalar 
    double value 1.23
    alarm_t alarm
        int severity 2
        int status 0
        string message LOLO
    time_t timeStamp
        long secondsPastEpoch 1353588502
        int nanoSeconds 133410000
        int userTag 0
    display_t display
        double limitLow 0
        double limitHigh 10
        string description 
        string format %f
        string units Counts
    control_t control
        double limitLow -0.1
        double limitHigh 9.9
        double minStep 0
    valueAlarm_t valueAlarm
        boolean active false
        double lowAlarmLimit 2
        double lowWarningLimit 4
        double highWarningLimit 6
        double highAlarmLimit 8
        int lowAlarmSeverity 0
        int lowWarningSeverity 0
        int highWarningSeverity 0
        int highAlarmSeverity 0
        double hystersis 0


6. Get the values of some fields of V3 record (-r is pvAccess request string)
--------------------------------------------------------------------------------
> pvget -r 'field(value,timeStamp,alarm)' double01
double01
uri:ev4:nt/2012/pwd:NTScalar 
    double value 1.23
    alarm_t alarm
        int severity 2
        int status 0
        string message LOLO
    time_t timeStamp
        long secondsPastEpoch 1353588502
        int nanoSeconds 133410000
        int userTag 0


6. Monitor the value of a V3 scalar PV
--------------------------------------
> pvget -m counter01
counter01                      4
counter01                      5
counter01                      6


pvIOCJava has similar DEMO too.