NOTE: This page has not been updated since 2015. It needs work.
This document describes how to download and build the EPICS V4 toolkit. It is a step by step guide to downloading the appropriate EPICS V4 products and associated software, and to using them to create the example programs. Presently, the document concentrates on interfacing to EPICS Base IOC control data, through the C++ bindings of new EPICS V4 modules pvAccess and pvData, and on developing middleware EPICS data services using the RPC capability of pvAccess in Java and C++.
This is version 20151017 of the Getting Started document. This version has been updated with respect to EPICS V4.5.
A more complete developers guide is in preparation.
EPICS V4 is implemented in C++ and Java. Its APIs are in C++ and Java mainly, though wrappers are being produced for Python and Matlab. However, this document covers only development in Java and C++.
Please note that while we make effort to keep this document up to date, we don't regenerate all examples and graphics to be consistent with every release number etc. Please offer us some latitude in keeping this document perfect.
Release "EPICS V4.5" is comprised of 2 "core" modules: pvData, and pvAccess. These are the minimum required to create V4 clients and services.
In addition there are a number of higher-level modules: pvDatabase and pvaClient make it easier to create services and clients respectively; pvaSrv adds pvAccess services to V3 IOCs; normativeTypes implements certain standard pvData types (the Normative Types). You don't need to use these higher-level. For example you can create V4 applications that don't use the normativeTypes module - either because they don't use Normative Types or because the latter are implemented without using the module. Similarly you can create clients without pvaClient and services without pvDatabase or pvaSrv (and there is an RPC framework in pvAccess to implement RPC services and clients). However using these higher-level modules make it much easier to build many applications.
The specifications for the function of these are (or are presently being) defined as normative documents of the EPICS V4 working group, and available from the homepage the EPICS V4 homepage. There are Java and C++ implementations of each of the core modules. The source code of each can be acquired from Git. To use them, you can download and build them from the source, from Git or from a release bundle tar file, as described below. For Java, the release bundle tar file includes prebuilt Jars. This document deals with acquiring, building, and first steps in using the core modules, plus pvaSrv to connect to EPICS Base IOCs. However, there are many more pieces of software in the EPICS V4 "ecosphere", please see the homepage, and the EPICS V4 Git web site.
The following is a summary of the modules of EPICS V4.5.
C++ Module Summary: pvDataCPP The EPICS V4 data types. pvAccessCPP The EPICS V4 "wire protocol". Supports pvData. normativeTypesCPP Support for EPICS V4 Normative Types. pvaSrv pvAccess interface to EPICS Base IOC databases. pvDatabaseCPP EPICS V4 record/database framework for providing services over pvAccess. pvaClientJava A higher-level API for writing pvAccess clients. pvaPy Python API for pvAccess. exampleCPP Code examples, including use of pvData containers, RPC, demo servers. pvCommonCPP Utility libraries. Java Module Summary: pvDataJava The EPICS V4 data types. pvAccessJava The EPICS V4 "wire protocol". Supports pvData. normativeTypesJava Support for EPICS V4 Normative Types. pvDatabaseJava EPICS V4 record/database framework for providing services over pvAccess. pvaClientJava A higher-level API for writing pvAccess clients. easyPVAJava (Deprecated) Older version of pvaClientJava. exampleJava Code examples, including use of pvData containers, RPC, demo servers. directoryService EPICS V4 interface to classic EPICS directoryService. caj An all Java implementation of the Channel Access protocol. jca A Java API and wrapper interface to the C++ implementation of the Channel Access protocol.
The versions of each module are formally listed in RELEASE_VERSIONS.
The dependency hierarchy between the above is the following:
In addition for C++ there is the utility module pvCommonCPP. This contains boost, needed in particular for shared_pointers, and a microbenchmark framework. If you don't intend to use the latter then you may not need pvCommonCPP, depending on your compilers support for shared_pointers.
When building the modules these interdependencies must be taken into account.
To link the new EPICS V4 modules to EPICS Base IOC records, two basic approaches are possible.
In the first, an embedded pvAccess server inside a Base IOC (say running EPICS V3.14/15) accesses records directly through the database, allowing a V4 client to communicate with the "V3" records through pvAccess. This is provided by pvaSrv and implemented in C++.
Alternatively EPICS V4 can link to the Base IOC records using Channel Access. Starting with the past release V4.3, this may be done in both Java and C++ implementations of pvAccess, though for Java, jca*.jar and caj*.jar, are prerequisites. There are two modes of such interoperation. Firstly, an embedded Channel Access client inside a pvAccess server allows it to communicate with an EPICS Base IOC. Secondly, the pvAccess server (part of pvAccess above) allows an existing EPICS Base Channel Access client to access a pvIOC database. These interoperability functions require JCA and CAJ jcaandcaj. These are available from the EPICS V4 download site http://sourceforge.net/projects/epics-pvdata/files/ or from their reference sources.
When we say "EPICS Base", or loosely "V3", in general we mean EPICS Base version 3.14.12 (preferably <IP_ADDRESS> or later) or 3.15.x.
Prior to 4.5.0, the implementation of pvaSrv did not reflect API changes made in Base 3.15.1. As a result, using pvaSrv required 3.14.12.x. As of 4.5.0 pvaSrv has been updated to build against 3.15.1.
As of EPICS V4.4.0, pvAccessJava requires at least Java 1.7.
The programmers reference documentation for each software component of EPICS V4 is listed in the Literature page. The pvAccess protocol is described in its specification. Environment settings, EPICS_PVA_ADDR_LIST etc, are described in the pvAccess Configuration spreadsheet (Excel). Check CPU architecture compatibility in the Compatibility Tracker (Excel).
If you get into trouble, you might first check the Troubleshooting EPICS V4 cheatsheet, which lists very first steps in finding and resolving problems with EPICS V4 connections. After that, email EPICS tech-talk or contact the EPICS V4 working group.
Since the development cycle (compile, build, etc.) is significantly different for each language, and to match suitable language API description to suitable use cases, this guide is split into 2 major parts. Firstly, Java development and secondly C++ development.
This section is on software development, with and of, the Java implementation of EPICS V4. For C++ development, see below.
V4.4+ Java requires Java 1.7
The Java implementation of the EPICS V4 modules, is made available in two ways. Firstly, you can download EPICS V4 as a tarball of the jar files directly from the EPICS V4 SourceForge site. Alternatively, you can download the Java sources from their Git repos and build it yourself.
You would use the tar file mechanism of acquiring EPICS V4 if you only intend to use EPICS V4's Java implementation as a user. If you want to contribute to development at all, or to examine the source for other reasons, you probably want to acquire EPICS V4 by the method of downloading the Git source, and building with Maven. Each of these will be described below.
Since the minimum EPICS V4 runtime is composed of the 2 modules pvData and pvAccess, you will need at least those two. The sections below will guide you through acquiring them from Jars or building from the source.
If you intend to use EPICS V4's Java client side to talk Channel Access to EPICS Base IOCs, then you will additionally need caj and jca. Those two are bundled in the Java tar file.
The simplest way to acquire EPICS V4's Java implementation is to download the tar file of the jars, from the EPICS V4 SourceForge download site, http://sourceforge.net/projects/epics-pvdata/files/ [downloadsite]. See in particular the README file at the site..
The table above lists the modules that comprise the Java implementation of the EPICS V4 suite. The 2 modules named pvAccess*.jar and pvData*.jar make up the core of EPICS V4 The tar file contains these and others. You'll need at least what's in the tar.gz.
To get off the ground using Java download, see the examples in the epics-pvdata exampleJava Git repo [ev4examples-java]. The setup files of those examples (helloWorld_setup.bash and rdb_setup.bash) are written assuming local .class files, you'll have to convert them so the CLASSPATH points to the jar files instead - as described below ). So far only examples of the "ChannelRPC" functionality of EPICS V4 are included in the exampleJava repo, since it's assumed Java would mainly be used for host side services, but more will be added.
This section is a guide for acquiring and configuring the files in the Java tar.gz. For illustration we test successful execution of the helloWorld client/server example.
% tar xvfz EPICS-Java-4.4.0.tar.gz [if you got it compressed] % tar xvf EPICS-Java-4.4.0.tar [if you got it uncompressed]You should see about 30 jar files, of executable, source and javadoc (exact version numbers may have changed by the time you read this):
% ls EPICS-Java-4.5.0 caj-1.1.15.jar LICENSE.txt caj-1.1.15-javadoc.jar normativeTypesJava-0.1.2.jar caj-1.1.15-sources.jar normativeTypesJava-0.1.2-javadoc.jar directoryService-0.4.2.jar normativeTypesJava-0.1.2-sources.jar directoryService-0.4.2-javadoc.jar pvAccessJava-4.1.2.jar directoryService-0.4.2-sources.jar pvAccessJava-4.1.2-javadoc.jar easyPVAJava-4.1.2.jar pvAccessJava-4.1.2-sources.jar easyPVAJava-4.1.2-javadoc.jar pvaClientJava-4.1.3.jar easyPVAJava-4.1.2-sources.jar pvaClientJava-4.1.3-javadoc.jar exampleJava-4.0.5.jar pvaClientJava-4.1.3-sources.jar exampleJava-4.0.5-javadoc.jar pvDatabaseJava-4.1.2.jar exampleJava-4.0.5-sources.jar pvDatabaseJava-4.1.2-javadoc.jar jca-2.3.6.jar pvDatabaseJava-4.1.2-sources.jar jca-2.3.6-javadoc.jar pvDataJava-5.0.2.jar jca-2.3.6-sources.jar pvDataJava-5.0.2-javadoc.jar lib pvDataJava-5.0.2-sources.jar
% mkdir exampleJava % cd exampleJava % jar xf ../EPICS-Java-4.5.0/exampleJava-4.0.5-sources.jar % ls -l total 8 0 drwxrwxr-x. 3 greg staff 4096 Oct 16 20:28 illustrations 0 drwxrwxr-x. 2 greg staff 4096 Oct 16 20:28 META-INF 0 -rw-rw-r--. 1 greg staff 1211 Oct 16 20:28 overview.html 0 drwxrwxr-x. 4 greg staff 4096 Oct 16 20:28 services
The simplest example of an EPICS V4 pvAccess server that provides functions new in V4, is the helloWorld in exampleJava. It shows a pvAccess server taking a argument, and returning a string based on the argument.
Modify helloWorld_setup.bash.
The helloWorld example is in exampleJava/services/helloWorld/
.
Note that exactly how the setup must be, will depend
on whether you intend to execute the example code from its jar, as download in the
distribution tar, or to extract the source of the example so you can look at it and
build it, or whether thirdly you may have cloned the repos. This example will assume
you want to extract the source of the exampleJava, and compile that, and execute it
using the support in the jar files of the EPICS V4 core. Again note, version ids may be different.
WORKSPACE=$HOME/Temporary/EPICS-Java-4.5.0
EXAMPLES=$HOME/Temporary/exampleJava
CLASSPATH=${EXAMPLES} CLASSPATH=${CLASSPATH}:${WORKSPACE}/pvDataJava-5.0.2.jar CLASSPATH=${CLASSPATH}:${WORKSPACE}/pvAccessJava-4.1.2.jar
cd to exampleJava/services/helloWorld, then $ source helloWorld_setup.bash $ javac *.java
$ chmod +x helloServerRunner helloClientRunner % ./helloServerRunnerTip: If you get a ClassNotFound, you can diagnose your runtime environment's CLASSPATH by sourcing helloWorld_setup.bash, and then running a command like
printenv CLASSPATH | tr : '\n' | xargs -I{} ls {}
% ./helloClientRunner Stefania Hello Stefania
The use case of downloading the source using Git (aka "git"), and building with Maven, would be applicable if you are a Java developer and wish either to contribute to EPICS V4, or like to use a command line for your Java builds, or both.
The EPICS V4 software components (pvData, pvAccess) are each in distinct Git repositories in the SourceForge project epics-pvdata. There are separate Git repos for each of the C++ and Java implementations of each component [EPICSV4repos]. They can all be checked out via the Git unix shell command git, or using a Git GUI client suitable for your platform.
The procedure defined below will help you download the source for the pv core modules above, plus the caj/jca jars, and build pv core jars.
V4.4+ Java requires Java 1.7
Clone from the Git repositories can be done anonymously. Below is an example of how to check out the pvDataJava Git repository, using the git unix command via anonymous access:
% git clone https://github.com/epics-base/pvDataJava.git
Having installed Git, now download the source. You'll create a local Git "repository" for each EPICS V4 module you get.
First, you may want to create a root directory in which to house your repo directories, e.g.:
% pwd /Users/greg/Development/epicsV4/ % mkdir git % cd git
To download the source using Git, use an "git clone" command, executed while in the directory you created, i.e. "git/" in the example above. You will need at least the 2 core "normative" module Java implementations pvDataJava and pvAccessJava (the first 2 below). You may well also want:
[from git/ directory in this example, created above] % git clone https://github.com/epics-base/pvDataJava.git % git clone https://github.com/epics-base/pvAccessJava.git % git clone https://github.com/epics-base/exampleJava.git % git clone https://github.com/epics-base/normativeTypesJava.git ...
See the complete list in the file which formally lists all of the components in each EPICS V4 release, RELEASE_VERSIONS
The build dependencies of the EPICS v4 modules are:
When building (instructions below) you will see warnings, but should not see any errors if the build is successful. Warnings come from both source compiles and many from javadoc compiles. At the end of each "mvn compile install" process, you should see:
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESS [INFO] ------------------------------------------------------------------------
The build itself is handled by Maven for Java builds. The actions for the build of each EPICS V4 module is handled by its own pom.xml file, there is no global one. So, the build process involves "cd" ing to the cloned repository (as they're called in Git speak) of each one of the core modules, and issuing "mvn compile install" in each one. Start with pvDataJava since it has no dependencies, then pvAccessJava, then the others.
If this is really the first Maven build you've done, the first mvn compile line below will result in 2 things: First, it will create your local "m2 repo" (in ~/.m2 by default). Then it will initiate many downloads from sourceForge and Maven as well as prerequisites of Maven. But if you chose this path to EPICS v4, you probably knew that!
% pwd /Users/greg/Development/epicsV4/git [in this example] % cd pvDataJava/ % mvn compile install % cd ../pvAccessJava/ % mvn compile install -Dmaven.test.skip=true
Note that as written here, the mvn compile install commands skip the post compilation tests. These tests would include exception handling tests, the output of which look like errors, because the tests are specifically to test for correctly dealing with runtime errors. If you you would like to include the tests, remove the Maven option -Dmaven.test.skip=true.
The above 2 complete the build of the EPICS v4 core. You may also want to try the examples which are in the exampleJava module, and a somewhat simplified pvAccess API named easyPVA. exampleJava uses easyPVAJava, so get them both and build it with the following:
% cd ../easyPVAJava/ % mvn compile install -Dmaven.test.skip=true % cd ../examplesJava % mvn compile install
The outcome of these builds is that you should see all of the build products in your local Maven repository (~/.m2/repository/ by default).
The minimum EPICS V4 runtime is composed of only 2 Jars, for the core, plus
2 if you want to access EPICS V3 IOCs, so you can
check the outcome of the builds with the find command below, to verify that from the 100s now
in your local Maven directory (probably ~/.m2/
), you have the few you really need. Again, actual
version tags, i.e. "2.1-SNAPSHOT" in the example below, will vary as EPICS V4 matures:
% find ~/.m2 -name "pv*SNAPSHOT.jar" -o -name "*caj*.jar" -o -name "*jca*.jar" .m2/repository/epics/pvData/2.1-SNAPSHOT/pvData-2.1-SNAPSHOT.jar .m2/repository/epics/jca/2.3.6/jca-2.3.6.jar .m2/repository/epics/caj/1.1.10/caj-1.1.10.jar .m2/repository/epics/pvAccess/2.1-SNAPSHOT/pvAccess-2.1-SNAPSHOT.jar .m2/repository/epics/pvIOC/2.1-SNAPSHOT/pvIOC-2.1-SNAPSHOT.jar
Note that the results gave you not only jar files under ~/.m2/
, but the sources and
javadoc jars too (in the Maven standard naming).
The above completes the build of EPICS V4 locally. To use it, you would write code that compiles and executes against the jar files above.
To use or develop these, the steps might be:
For Java client and server V4 service examples, at the time of writing, see the source code in the examplesJava module. You can find this on the epics-pvdata web site [ev4examples-java]. At the time of writing, examplesJava contains 2 examples of RPC style servers (that is, pass arguments to an EPICS V4 pvAccess server, get data back that is dependent on the arguments).
channelRPC
functionality of EPICS V4This section is on software development, with and of, the C++ implementation of EPICS V4. It guides you through the process of acquiring the source, building the modules and running some simple examples.
If you are already an EPICS V3 user, it's likely that, apart from the V4 source, you will already have everything you need to build the EPICS V4 C++ implementation from its source.
In addition to the EPICS V4 C++ source, you will need the following:
An installed version of EPICS (V3) Base. You should use 3.14.12 or later. You will also need the variable EPICS_HOST_ARCH
appropriately set for your host architecture. See Appendix
A for an an example of building a local EPICS Base, <IP_ADDRESS>, and setting EPICS_HOST_ARCH
.
For specific help for building on a Mac, see also Appendix B: Help with Mac OS X build.
You'll need gnu make and the C++ compiler used to build EPICS Base.
To build one example, the Channel Archiver Service, you will also need the EPICS Channel Archiver. See http://ics-web.sns.ornl.gov/kasemir/archiver/. Nothing else depends on this service and this can be omitted if desired.
Some of the steps below will depend on you having specified the location of your EPICS Base installation through the shell variable EPICS_BASE
. For example if your installation is in /epics/R<IP_ADDRESS>/base
:
% export EPICS_BASE=/epics/R<IP_ADDRESS>/base
The Application Developer's Guide has more details on the set up required for building EPICS applications, including setting the host architecture and the versions of the various tools needed.
There are two ways to to get the EPICS V4 C++ source.
The simplest way is to download it as a tar from the Sourceforge website site http://sourceforge.net/projects/epics-pvdata/files/. This is a good option if you wish to deploy EPICS V4 services and clients and want a stable release. The tar consists of a number of EPICS V4 modules and is designed to be relatively easy to build. This is recommended for those new to EPICS V4.
If you want the latest code or wish to contribute to development you will need to clone the Github repositories. In this case you can choose which modules you want.
The next two sections describe how to obtain the source and build it via these two methods.
For those familiar with EPICS V3 and with a V3 base installation and the appropriate toolchain already in place, doing the following should build the source (at least on Linux hosts).
You'll need EPICS_BASE
set to point to your V3 base installation and EPICS_HOST_ARCH
appropriately set. Download the V4.4.0 C++ tar from the SourceForge site
http://sourceforge.net/projects/epics-pvdata/files/4.5.0/, untar, configure and build:
% tar xzf EPICS-CPP-4.5.0.tar.gz % cd EPICS-CPP-4.5.0 % chmod +x configure.sh % make configure % make
[The command make configure
sets your build dependencies. You can alternatively do this by creating and completing a top-level RELEASE.local
based on ExampleRelease.local
, which will work for other host architectures. ]
Then do the following to build pvaPy:
% export EPICS4_DIR=`pwd` % cd pvaPy % make configure % make
For how to build the remaining target, the Channel Archiver Service, consult the sub-section of the step-by-step below.
For those less familiar with EPICS or requiring more information, the following sub-sections will take you through the requirements and build process step-by-step and in a little more detail:
Move the tar to where you want your installation to be and untar it in the usual way:
% tar xzf EPICS-CPP-4.5.0.tar.gz
If you cd into the resulting directory and examine the contents you should see something like
% cd EPICS-CPP-4.5.0 % ls CONFIG_SITE.local Makefile pvaPy pvDataCPP configure.sh normativeTypesCPP pvaSrv README.md exampleCPP pvAccessCPP pvCommonCPP RELEASE_IDS ExampleRelease.local pvaClientCPP pvDatabaseCPP RELEASE_NOTES.md
You can modify the default configuration for your site by setting this in CONFIG_SITE.local. This file is included by the CONFIG_SITE file in each module's configure directory.
The source tar should in general build out the box without modifying this CONFIG_SITE.local. This should be the case if your EPICS Base installation has no site-specific config. If this is not the case however you may have to modify CONFIG_SITE.local. If you have problems building the source tar you can try building against a clean EPICS Base without site-specific config.
Some site-specific configs may by default cause cross compilation for unsupported target architectures. To help ensure the tar builds out the box for as many new users as possible the supplied CONFIG_SITE.local sets
CROSS_COMPILER_TARGET_ARCHS
to be an empty string:
CROSS_COMPILER_TARGET_ARCHS=turning off any cross compilation. You can remove this line or set cross compilation targets here if you wish.
The EPICS build system needs you to specify the locations of the dependencies for each module. The easiest way to do this is to specify this in a single RELEASE.local in the top-level. This file will then be included by the RELEASE file in each module's configure directory.
For Linux host development, a script is provided to make it easy to create your RELEASE.local, provided that you have specified the location of your EPICS Base installation through the shell variable EPICS_BASE
. If your EPICS Base installation is in /epics/R<IP_ADDRESS>/base, from the top level of your EPICS V4 source do the following:
% export EPICS_BASE=/epics/R<IP_ADDRESS>/base % chmod +x configure.sh % make configure
Alternatively create the RELEASE.local based on the supplied example. Save the file ExampleRelease.local as RELEASE.local and modify so that EPICS_BASE
points to your EPICS Base installation and EV4_BASE
points to the top-level EPICS V4 directory. So if you've untarred the source tar in /epicsv4 the file would look like.
EV4_BASE=/epicsv4/EPICS-CPP-4.5.0 PVDATABASE=$(EV4_BASE)/pvDatabaseCPP PVASRV=$(EV4_BASE)/pvaSrv PVACCESS=$(EV4_BASE)/pvAccessCPP NORMATIVETYPES=$(EV4_BASE)/normativeTypesCPP PVDATA=$(EV4_BASE)/pvDataCPP PVCOMMON=$(EV4_BASE)/pvCommonCPP ARCHIVER= EPICS_BASE=/epics/R<IP_ADDRESS>/base
[ Note: An alternative to a single top-level RELEASE.local is to specify the dependency locations on a per-module basis by creating a RELEASE.local in the configure directory. This allows you to specify only those modules you need and thus avoid recursive dependencies. You can do this through the configure script by typing
% make config_multiinstead of
make configure
. ]
Simple type
% make
This will build the default target which consist of the modules pvCommonCPP, pvDataCPP, normativeTypesCPP, pvAccessCPP, pvaSrv, pvDatabaseCPP and pvaClientCPP followed by exampleCPP/HelloWorld.
pvaPy is built separately as it has its own configuration script. From the top directory of the V4 source, do the following to build pvaPy:
% export EPICS_BASE=/epics/R<IP_ADDRESS>/base % export EPICS4_DIR=`pwd` % cd pvaPy % make configure % make
This is an example EPICS V4 service. It is not part of the default target as it has an external dependency on the EPICS Channel Archiver. See http://ics-web.sns.ornl.gov/kasemir/archiver/.
The Channel Archiver can also be a little difficult to build. If it isn't part of your existing installation you may wish to leave this example out initially when getting started with EPICS V4.
To build the Channel Archiver Service example you will need to have built the EPICS Channel Archiver and to specify its location in the RELEASE.local. If your archiver is in the src/ChannelArchiver directory of /epics/R<IP_ADDRESS>/extensions then set in the make configure
% ARCHIVER_DIR=/epics/R<IP_ADDRESS>/extensions make configureor set ARCHIVER in your RELEASE.local
ARCHIVER=/epics/R<IP_ADDRESS>/extensions
Then to build the service, from the top directory, do
% make archSrvor
% cd exampleCPP/ChannelArchiverService % make
For the latest code or to contribute to development you will need to clone the Github repositories. This will of course give you the full revision history of the modules including previous releases and all branches.
Note there is no single, top-level repository, so you will need to obtain the modules you want and build them individually.
The modules can be obtained using the Git clone command.
For this you will need the Git client tools, as described above. Choose the location for your EPICS V4 modules and obtain the required modules with a Git clone using either the SSH or HTTP URI. You're not required to put all the modules in the same directory, but it makes sense and can simplify the build process. The minimum you'll need is the modules pvCommonCPP, pvDataCPP and pvAccessCPP. So if you're using the SSH URI, clone as follows:
[commands issued from the desired location for each repo] % git clone https://github.com/epics-base/pvCommonCPP.git % git clone https://github.com/epics-base/pvDataCPP.git % git clone https://github.com/epics-base/pvAccessCPP.git
Other modules can be obtained similarly:
% git clone https://github.com/epics-base/exampleCPP.git % git clone https://github.com/epics-base/normativeTypesCPP.git % git clone https://github.com/epics-base/pvaSrv.git % git clone https://github.com/epics-base/pvDatabaseCPP.git % git clone https://github.com/epics-base/pvaClientCPP.git % git clone https://github.com/epics-base/pvaPy.git
make
(in contrast to the Java implementation, which uses Maven).
A basic understanding of the EPICS V3 make system is helpful, although the following instructions do not assume this knowledge.
The build command itself is simple - it's just make.
However you will have to do some configuration - in particular specifying where the modules' dependencies are and possibly also which targets are built.
EPICS V4 uses the EPICS build facility. In particular each module has a directory called configure
containing a file, CONFIG_SITE
, which is used to specify build choices and target architectures and another, RELEASE
, which is used to specify directory structures containing files needed by the module (i.e. the locations of dependencies).
For EPICS V4 modules CONFIG_SITE
includes files CONFIG_SITE.local
in the configure
directory or in the module's parent directory (providing these exist).
Similarly RELEASE
includes files RELEASE.local
in the configure
directory or in the module's parent directory (again, providing these exist).
So you can create a configure/RELEASE.local
for each module specifying the module's dependencies or you can create a single RELEASE.local
in the parent directory of a group of modules containing all the dependencies for those modules. The former has the advantage that you can specify only those dependencies you need (which prevents issues with recursive dependencies). The latter has the advantage that you only need specify the dependency locations once.
Similarly if you need to, you can create configure/CONFIG_SITE.local
for each module specifying build choices and targets or you can create a single CONFIG_SITE.local
in the parent directory of the group of modules. For example the line
CROSS_COMPILER_TARGET_ARCHS=specifies that there are no cross compilation targets, i.e. the only target is the host architecture.
You may which to create a top-level makefile to simplify your build process. You can get an example makefile and configuration script, as well as an example RELEASE.local
and CONFIG_SITE.local
from the source tar (see Building the EPICS V4.5.0 C++ Implementation Tar)
or from the EPICS V4 website. For example on Linux or Mac you might wget (if you get Unsupported Scheme error, try curl -O <url> instead):
% wget https://raw.githubusercontent.com/epics-base/pvDataWWW/master/scripts/Makefile % wget https://raw.githubusercontent.com/epics-base/pvDataWWW/master/scripts/configure.sh % wget https://raw.githubusercontent.com/epics-base/pvDataWWW/master/scripts/CONFIG_SITE.local % wget https://raw.githubusercontent.com/epics-base/pvDataWWW/master/scripts/RELEASE.local
The instructions below do not assume a top-level Makefile.
As a minimum you'll need to build the two core modules pvData and pvAccess as well as the module pvCommon on which these depend. The build dependencies of the EPICS v4 core modules are:
It is assumed that your EPICS V4 modules are all in a single parent directory.
To build the core modules
Specify the dependencies for all the modules: In the parent directory (i.e. the directory containing pvCommonCPP, pvDataCPP and pvAccessCPP) create a
RELEASE.local file
which sets EPICS_BASE
to point to your EPICS release and PVCOMMON and PVDATA to point to the locations of pvCommon and pvData respectively. So if your EPICS V4 source is in /epics/v4/latest
and your EPICS Base in /epics/R<IP_ADDRESS>/base
your RELEASE.local
will be
PVDATA=/epics/v4/latest/pvDataCPP PVCOMMON=/epics/v4/latest/pvCommonCPP EPICS_BASE=/epics/R<IP_ADDRESS>/base
In addition set any targets or build choices. For example, if you need to prevent cross-compiling set CROSS_COMPILER_TARGET_ARCHS
to be the empty string by creating a CONFIG_SITE.local
in the parent directory which contains the line
CROSS_COMPILER_TARGET_ARCHS=
Build pvCommon: pvCommonCPP
and build the module:
[from the top level directory of pvCommonCPP, issue make] % make
pvCommon should then build without errors.
Build pvData: pvDataCPP
and build the module:
[from the top level directory of pvDataCPP, issue make] % make
pvData should then build without errors.
Build pvAccess: Again, pvAccessCPP
and build the module:
[from the top level directory of pvAccessCPP, issue make] % make
pvAccess should build without errors.
The module exampleCPP currently contains two C++ examples of RPC-style clients and servers. These services require that you have built the core modules as described above. In addition the Channel Archiver Service has a dependency on the EPICS V3 Channel Archiver. See http://ics-web.sns.ornl.gov/kasemir/archiver/.
To build the HelloWorld, you need to specify the dependency locations in a RELEASE.local
, e.g. this should include the lines like:
EV4_BASE=/epicsv4/latest PVACCESS=$(EV4_BASE)/pvAccessCPP PVDATA=$(EV4_BASE)/pvDataCPP PVCOMMON=$(EV4_BASE)/pvCommonCPP EPICS_BASE=/epics/R<IP_ADDRESS>/basedepending on your EPICS Base and V4 module locations. This file can be located in the parent directory of exampleCPP, in the parent of HelloWorld (i.e. in exampleCPP) or in
HelloWorld/configure
.
Then cd into the HelloWorld directory and type make.
The instructions are similar for ChannelArchiverService, except that you will need to specify the location of the Archiver, e.g.
EV4_BASE=/epicsv4/latest
PVACCESS=$(EV4_BASE)/pvAccessCPP
PVDATA=$(EV4_BASE)/pvDataCPP
PVCOMMON=$(EV4_BASE)/pvCommonCPP
ARCHIVER=/epics/R<IP_ADDRESS>/extensions
EPICS_BASE=/epics/R<IP_ADDRESS>/base
before you cd into the ChannelArchiverService directory and type make.
More detailed instructions for building and running the services are in their respective READMEs HELLOWORLD_README.txt and CHANNEL_ARCHIVER_SERVICE__README.txt (and also available in the source).
The other modules are built in a similar fashion, typing make in each module, after first specifying dependencies in a RELEASE.local
and build choices and targets in a CONFIG_SITE.local
in either each module's configure
directory or in the parent directory.
The remaining EPICS V4 modules have the following dependencies:
A number of examples of C++ EPICS V4 clients and servers are available, either included in the source tar or in EPICS V4 modules cloned from GitHub.
This section describes running a few of these. It assumes you have built the EPICS V4 core modules either from the tar or from clones of the repositories and have put pvAccess/bin/$EPICS_HOST_ARCH
in your path, e.g.
PATH=$PATH:/epicsv4/EPICS-CPP-4.5.0
The module exampleCPP contains examples of C++ clients and servers. You can find this on the epics-pvdata web site [ev4examples-cpp]. As of release 4.3 it is also included in the downloaded sourcefile tar.
Currently examplesCPP contains 2 examples of RPC-style servers.
channelRPC
functionality of EPICS V4 Running the HelloWorld example.
Having built the HelloWorld example you can the server and client. The service is very simple. The client supplies a string and the server responds with a greeting based on the string.
To run the HelloWorld example, start the HelloWorld server: cd to the directory containing HelloWorld and start the server in one terminal
% cd /epicsV4/EPICS-CPP-4.4.0/exampleCPP/HelloWorld % ./helloServerRunner
You should something like:
pvAccess Server v4.0.3 VERSION : pvAccess Server v4.0.3 PROVIDER_NAMES : rpcService BEACON_ADDR_LIST : AUTO_BEACON_ADDR_LIST : 1 BEACON_PERIOD : 15 BROADCAST_PORT : 5076 SERVER_PORT : 5075 RCV_BUFFER_SIZE : 16384 IGNORE_ADDR_LIST: STATE : INITIALIZED
Then on the client, run the HelloWorld Client in a terminal
% cd /epicsV4/EPICS-CPP-4.5.0/exampleCPP/HelloWorld % ./helloClientRunner Daveand you should see
Hello Dave
You can also use the eget utility in pvAccess:
% eget -z -N -s helloService -a "personsname=Dave"which produces
structure string greeting Hello Dave
After you've finished testing the server you can terminate it with a SIGTERM like CTRL-C in the server process window.
More detailed instructions for building and running the services are in their respective READMEs. These services can be used a model for starting to write your own services.
This section describes an example of the use of pvaSrv, the C++ implementation of EPICS V4 to access EPICS V3 PVs. That is, a version 3 IOC makes the values of its V3 channels available through pvAccess to EPICS V4 pvAccess clients.
You should already have built pvaSrv, either from the SourceForge tar or as a module cloned from the Git repository. The pvaSrv build (assuming it was successful) has created a ready-to-run example.
The source code for it is in the directory pvaSrv/testApp/dbPv
. To run it do the following:
From pvaSrv
cd to testTop/iocBoot/testDbPv
.
From here you can start the test IOC (on the host, as a "soft" IOC):
% ../../bin/$EPICS_HOST_ARCH/testDbPv st.cmd
The EPICS databases are in pvaSrv/testApp/db
. You can add db files, templates etc. there.
Edit the st.cmd to make it load your EPICS databases.
sample output from running the IOC.
% ../../bin/$EPICS_HOST_ARCH/testDbPv st.cmd < envPaths epicsEnvSet("ARCH","linux-x86_64") epicsEnvSet("IOC","testDbPv") epicsEnvSet("TOP","/epicsv4/EPICS-CPP-4.5.0/latest/pvaSrv/testTop") epicsEnvSet("PVASRV","/epicsv4/EPICS-CPP-4.5.0/latest/pvaSrv/testTop/..") epicsEnvSet("EV4_BASE","/epicsv4/EPICS-CPP-4.5.0") epicsEnvSet("PVACCESS","/epicsv4/EPICS-CPP-4.5.0/pvAccessCPP") epicsEnvSet("PVDATA","/epicsv4/EPICS-CPP-4.5.0/pvDataCPP") epicsEnvSet("PVCOMMON","/epicsv4/EPICS-CPP-4.5.0/pvCommonCPP") epicsEnvSet("EPICS_BASE","/epics/R<IP_ADDRESS>/base") cd /epicsv4/EPICS-CPP-4.5.0/pvaSrv/testTop ## Register all support components dbLoadDatabase("dbd/testDbPv.dbd") testDbPv_registerRecordDeviceDriver(pdbbase) ## Load record instances dbLoadRecords("db/dbInteger.db","name=byte01,type=byter") dbLoadRecords("db/dbInteger.db","name=short01,type=shortr") dbLoadRecords("db/dbInteger.db","name=ubyte01,type=ubyte") dbLoadRecords("db/dbInteger.db","name=ushort01,type=ushort") dbLoadRecords("db/dbInteger.db","name=uint01,type=ulong") dbLoadRecords("db/dbInteger.db","name=int01,type=longout") dbLoadRecords("db/dbInteger.db","name=wait01,type=wait") dbLoadRecords("db/dbScalar.db","name=float01,type=floatr") dbLoadRecords("db/dbScalar.db","name=double01,type=ai") dbLoadRecords("db/dbArray.db","name=byteArray01,type=CHAR") dbLoadRecords("db/dbArray.db","name=shortArray01,type=SHORT") dbLoadRecords("db/dbArray.db","name=intArray01,type=LONG") dbLoadRecords("db/dbArray.db","name=ubyteArray01,type=UCHAR") dbLoadRecords("db/dbArray.db","name=ushortArray01,type=USHORT") dbLoadRecords("db/dbArray.db","name=uintArray01,type=ULONG") dbLoadRecords("db/dbArray.db","name=floatArray01,type=FLOAT") dbLoadRecords("db/dbArray.db","name=doubleArray01,type=DOUBLE") dbLoadRecords("db/dbString.db","name=string01") dbLoadRecords("db/dbBigstringin.db","name=bigstring01") dbLoadRecords("db/dbStringArray.db","name=stringArray01") dbLoadRecords("db/dbEnum.db","name=enum01") dbLoadRecords("db/dbCounter.db","name=counter01"); dbLoadRecords("db/dbInteger.db","name=byte02,type=byter") dbLoadRecords("db/dbInteger.db","name=short02,type=shortr") dbLoadRecords("db/dbInteger.db","name=ubyte02,type=ubyte") dbLoadRecords("db/dbInteger.db","name=ushort02,type=ushort") dbLoadRecords("db/dbInteger.db","name=uint02,type=ulong") dbLoadRecords("db/dbInteger.db","name=int02,type=longout") dbLoadRecords("db/dbInteger.db","name=wait02,type=wait") dbLoadRecords("db/dbScalar.db","name=float02,type=floatr") dbLoadRecords("db/dbScalar.db","name=double02,type=ai") dbLoadRecords("db/dbArray.db","name=byteArray02,type=CHAR") dbLoadRecords("db/dbArray.db","name=shortArray02,type=SHORT") dbLoadRecords("db/dbArray.db","name=intArray02,type=LONG") dbLoadRecords("db/dbArray.db","name=floatArray02,type=FLOAT") dbLoadRecords("db/dbArray.db","name=doubleArray02,type=DOUBLE") dbLoadRecords("db/dbString.db","name=string02") dbLoadRecords("db/dbStringArray.db","name=stringArray02") dbLoadRecords("db/dbEnum.db","name=enum02") dbLoadRecords("db/dbCounter.db","name=counter02"); dbLoadRecords("db/dbInteger.db","name=byte03,type=byter") dbLoadRecords("db/dbInteger.db","name=short03,type=shortr") dbLoadRecords("db/dbInteger.db","name=ubyte03,type=ubyte") dbLoadRecords("db/dbInteger.db","name=ushort03,type=ushort") dbLoadRecords("db/dbInteger.db","name=uint03,type=ulong") dbLoadRecords("db/dbInteger.db","name=int03,type=longout") dbLoadRecords("db/dbInteger.db","name=wait03,type=wait") dbLoadRecords("db/dbScalar.db","name=float03,type=floatr") dbLoadRecords("db/dbScalar.db","name=double03,type=ai") dbLoadRecords("db/dbArray.db","name=byteArray03,type=CHAR") dbLoadRecords("db/dbArray.db","name=shortArray03,type=SHORT") dbLoadRecords("db/dbArray.db","name=intArray03,type=LONG") dbLoadRecords("db/dbArray.db","name=floatArray03,type=FLOAT") dbLoadRecords("db/dbArray.db","name=doubleArray03,type=DOUBLE") dbLoadRecords("db/dbString.db","name=string03") dbLoadRecords("db/dbStringArray.db","name=stringArray03") dbLoadRecords("db/dbEnum.db","name=enum03") dbLoadRecords("db/dbCounter.db","name=counter03"); cd /epicsv4/EPICS-CPP-4.5.0/latest/pvaSrv/pvaSrv/testTop/iocBoot/testDbPv iocInit() Starting iocInit ############################################################################ ## EPICS R<IP_ADDRESS> $Date: Mon 2012-12-17 14:11:47 -0600$ ## EPICS Base built Mar 18 2015 ############################################################################ iocRun: All initialization complete epicsThreadSleep(2.0) casr Channel Access Server V4.13 No clients connected. startPVAServer VERSION : pvAccess Server v4.1.2 PROVIDER_NAMES : dbPv BEACON_ADDR_LIST : AUTO_BEACON_ADDR_LIST : 1 BEACON_PERIOD : 15 BROADCAST_PORT : 5076 SERVER_PORT : 5075 RCV_BUFFER_SIZE : 16384 IGNORE_ADDR_LIST: STATE : INITIALIZED dbpf string01 10.1 DBR_STRING: "10.1" dbpf wait01 1 DBR_SHORT: 1 0x1 dbpf wait02 2 DBR_SHORT: 2 0x2 dbpf wait03 3 DBR_SHORT: 3 0x3 epics>
An example of downloading and building EPICS V3 version 3.14.12, on Mac OS X, is given below. An EPICS Base install is a prerequisite for compilation of the C++ implementations of the EPICS V4 core modules.
Begin by downloading the tar file of the EPICS Base from the EPICS main web site at Argonne: http://www.aps.anl.gov/epics/base/R3-14/12.php. In this example, having downloaded the tar, it is moved into the directory where EPICS Base is to be built.
% mkdir epicsV3 % cd epicsV3 % mv ~/Downloads/baseR<IP_ADDRESS>.tar . % tar xvf baseR<IP_ADDRESS>.tar % cd base-<IP_ADDRESS>/
You will also need gnu make, perl and, of course, a C++ compiler e.g. g++.
To build you will need to specify your host architecture by setting your host architecture. A script is provided to help you select this. For example for Linux:
% ./startup/EpicsHostArch linux-x86_64 % export EPICS_HOST_ARCH=linux-x86_64
Then build:
% make
See the Application Developer's Guide, especially the Build Facility" section for more details on the setting the host architecture and the required tools.
See below for help with Mac build in Mac OS 10.8 (Mountain Lion) is you have issues with make, compiling or linking.
The EPICS Base build ran perfectly on the author's Mac running Mac OS X 10.7.3. However, for Mac OS 10.8 (Mountain Lion), there were 2 issues. Firstly, it seems make is no longer distributed and installed by default in 10.8. One can however choose to install the Mac OS command line tools, see this comment on Stackoverflow.com for help.
Additionally, there seem to be a change in the compiler support of Mac OS 10.8, causing an error such as the following at link time:
ld: library not found for -lgcc
Try adding the line following line to your configure/os/CONFIG_SITE.Common.darwin-x86 file [Thanks to Andrew Johnson for this help]:
GNU = NOor this line if that doesn't work:
GNU_LDLIBS_YES =
V4.4 requires Java 1.7. Java on a Mac can be a bit confused since Java from Oracle now installs Java differently to the way Apple did it. The Java Control Panel may not know all the versions known by java_home. You may need to set JAVA_HOME explicitly. For example:
$ export JAVA_HOME=`/usr/libexec/java_home -v 1.7`Following the builds of pvCommonCPP, pvDataCPP, pvAccessCPP, pvIOCCPP and pvaSrv detailed above, the envPaths file used to run the V3 Channel test example, pvIOCCPP/iocBoot/testV3Channel, was as follows:
% cat envPaths epicsEnvSet("ARCH","darwin-x86") epicsEnvSet("IOC","testV3Channel") epicsEnvSet("TOP","/Users/greg/Development/epicsV4/ev4hg/pvIOCCPP") epicsEnvSet("EPICS_BASE","/Users/greg/Development/epicsV3/base--- > -->
") epicsEnvSet("PVCOMMON","$(TOP)/../pvCommonCPP") epicsEnvSet("PVDATA","$(TOP)/../pvDataCPP") epicsEnvSet("PVACCESS","$(TOP)/../pvAccessCPP") epicsEnvSet("PVIOC","$(TOP)/../pvIOCCPP")


---
layout: archive
author_profile: true
---
{% include base_path %}
A little bit about me...
Highly capable, creative, result oriented professional with strong technology background.
I graduated from Birla Institute of Technology and Science, Pilani, India (BITS Pilani) in June of 2016, after spending four exciting years.
I am currently working as a Research Fellow at Microsoft Research, India trying to unlock
my research potential as a part of Applied Machine Learning group.
I develop compuatational methods to
improve human well-being combining techniques from data science, social-network analysis, and natural language processing.
I love to work on challenging problems and make significant contributions to interesting, high-impact projects.
{% for post in paginator.posts %}
{% include archive-single.html %}
{% endfor %}
{% include paginator.html %}


{% load staticfiles %}
Enrichment report
{% if advisor %}Advisees of {{ advisor.name }}
{% endif %}{{ slot.date | date:"l, F d, Y" }}
{% if futureWarning %}Warning: This assignment sheet is being printed in advance and is subject to change.
{% endif %}


Ballooncomponent
Balloon is represent to create information or dialog UI. You can put inside any of elements.
Balloon is represent to create information or dialog UI. You can put inside any of elements.
Balloon is represent to create information or dialog UI. You can put inside any of elements.

...

...

...

...

...


Here are some examples that demonstrate how to use NBL.js in a page.
Loading 2 (or more) scripts asynchronously:
<script src="nbl.min.js" data-nbl="[
'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js',
'http://www.google-analytics.com/urchin.js',
function(){nbl_init_xmp1()}
]"></script>
By including this script tag in the head element of this document, NBL.js will dynamically load jQuery from the first url and Urchin from the second url in parallel.
The nbl_init_xmp1()
function will fire when it has
completed loading the second script or when the default timeout has
been reached. If you change the position of the function in the
options like this:
<script src="nbl.min.js" data-nbl="[
'http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js',
function(){nbl_xmp1()},
'http://www.google-analytics.com/urchin.js'
]"></script>
Then nbl_init_xmp1()
will fire when it has
completed loading the first script. Basically, any function after
a script url will be fired when that script has loaded successfully.
You're free to declare a function after every script you load, but
keep in mind only the first function you declare will fire in case
of a timeout.
NBL is now resident, and we can load a new script at any time.
Simply call:
nbl.l(['url', function(){nbl_init_xmp2()}])
and a new script shall be loaded. After completion the nbl_init_xmp2()
function will fire.
Click here to add the jCaption jQuery plugin script to this page.
After you've clicked the link, the photo should now have a nice caption courtesy of the jCaption plugin.
Let's find out what happens when you specify a wrong url for a script. We're going to call nbl.l()
with some
new options, like this:
nbl.l([ 3500, function(){nbl_init_xmp3()},
'http://github.com/vitch/jquery-methods/raw/master/date.js',
['http://www.kelvinluck.com/…/jquery.datePicker.js', 'Non-existent URL']
]);
This will load a script with date extensions and two jQuery plugins, one date-picker and a non-existing one. Trying to load the second plugin should cause an error, let's find out:
Click here to load the date picker scripts.
nbl_xmp3()
fired by jQuery: click first…
Alright, what happened here? First off, jQuery Date Picker and the Date script should load just fine. But Plugin 2
(the Non-existent URL) should fail to load immediately. This will cause NBL's timeout to go into effect, which we
specified to be 3500ms. So the above results should come into view 3.5 seconds after clicking. Plugin 2 will return
the script object with the faulty url still in its src attribute. Furthermore, the timeout function will be called
with the nbl.q
object as its argument e
, indicating there were errors.
I'll wait for Date and Plugin 1 to have loaded before showing you the date-picker link. The link should appear here:
That should cover the basics of NBL.js, I hope I was able to explain its use. If you are unclear about something, feel free to contact me at: github at uncode.net or @berklee on Twitter.
These examples use the following scripts:


By my signature below, I agree to the terms of A Toastmaster’s Promise and the Member’s Agreement and Release stated above and certify that I am 18 years of age or older, in compliance with the Toastmasters Club Constitution for Member Clubs of Toastmasters International. I acknowledge that my electronic signature on this document is legally equiva- lent to my handwritten signature.
I confirm that a complete membership application, including both the signature of the new member and that of a club officer, is on file with the club and will be retained by the club. By my signature below, I certify that this individual has joined the Toastmasters club identified. As a club, we will ensure that this member receives proper orientation and mentoring. I acknowledge that my electronic signature on this document is legally equivalent to my handwritten signature.


North By Northwest (1959) 136m. ***** D: Alfred Hitchcock. Hitchcock matched, but never topped this grand tale of mistaken identity and political intrigue. Cary Grant stars as Roger Thornhill, a Madison Avenue ad executive who is mistaken for a spy by the spies' rivals. After escaping an attempt at his life, Thornhill begins a cross-country chase in search of his alter-ego. Along the way he meets the mysterious Eve, who may be more invovled than she appears. While the film's final half hour can't match the frenetic pace of the beginning (what could?), the total package is extraordinary. Hitchcock utilizes familiar themes (mistaken identity, domineering mother, the icy blond woman), and crafts them into a film possibly equaled, but unsurpassed before or after in sheer entertainment value. Cary Grant is at his deadpan best as Thornhill, the harrowed yet poised everyman. He gets to deliver some of the bestlines in cinema: "These men , they poured a bottle of bourbon down my throat - no mother they didn't give me a chaser." Eve St. Marie is equally adept as the cold, sexy Eve. The rest of the cast, including Martin Landau and James Mason all do fine work in small roles. North By Northwest is a timeless film from a lost era of filmmaking. Time is taken to develop character, to give motivation and give the audience reason to care for or dislike them. Today's filmmakers would do well to study NBNW. The plot never drags, but time is taken to let Grant woo St. Marie on a train, or to let Grant ham it up while playing drunk. While not the deepest, or most disturbing of Hitchcock, NBNW might be the most fun.
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Island Rush Course Director
Home
Troubleshoot
Credits
Report an Issue
Wiki
Database Status: Loading...
Add a Game
Section
Instructor Last Name
Admin Password
Admin Password Confirm
Current Games
Game Id
Section
Instructor Last Name
Game Active
Delete a Game
Game Id
Update Admin Password
Game Id
Admin Password


Full Width Demo
Slide Transition Demos
blocksReveal
blocksReveal
blocksReveal
verticalSplitReveal
verticalSplitReveal
verticalSplitReveal
zipReveal
zipReveal
zipReveal
shrinkReveal
shrinkReveal
shrinkReveal
expandReveal
expandReveal
expandReveal
verticalSlide
verticalSlide
verticalSlide
Slide Reveal Left
Slide Reveal Left
Slide Reveal Left
Slide Over Left
Slide Over Left
Slide Over Left
Bars Reveal Down
Bars Reveal Down
Bars Reveal Down


Shortcuts
Explore
All men who have turned out worth anything have had the chief hand in their own education.
jkklkgjgujhihnmgnvhggjghgbjjg
jkklkgjgujhihnmgnvhggjghgbjjghg


{% include "patterns/atoms/section-title/section-title.html" with title=page.blogs_section_title %}
{% if blogs_section_heading %}
What our team says
{% endif %}
{% for post in featured_blog_posts %}
{% if feature_first and forloop.first %}
{% include "patterns/molecules/blog-item/blog-item.html" with item=post %}
{% else %}
{% include "patterns/molecules/blog-item/blog-item.html" with item=post %}
{% endif %}
{% endfor %}
{% pageurl blog_index_page as blog_index_url %}
{% include "patterns/atoms/see-more/see-more.html" with text="See more posts" link=blog_index_url filter_by=filter_by %}


My Favourite Actresses
Shraddha Kapoor
Actor/Singer
Find Her on @shraddha
Follow
Alia Bhatt
Actor/Singer
Find Her on @alia
Follow
Scarlett Johansson
Actor/Voice Artist
Find Her on @scarlett
Follow
Elizabeth Olsen
Actor/
Find Her on @elizabeth
Follow


Hello, I like working on my car. I'm a real grease monkey/car enthusiast!
I look much younger than my age. Being a developer was never my dream but my dreams don't offer the salaries I want.
This should be a paragraph. Not sure what else to put here so I will fill with a rant.
I should have make a checklist to make sure I have everything needed for this experiment. Let's make this another 2 sentence paragraph.


| sonic_blocksync_sim |
sonic_blocksync_sim
1.0
|
| 2<IP_ADDRESS>:00:36 |
Generation Report |
| Output Directory |
/home/hwang/sonic/projects/sonic_fpga_bugfix/pcie-refactor-twovc/testsuite/full_blocksync_sim/testbench/ |
| Instantiations |
|
Generation Messages
2<IP_ADDRESS>:04:13 [Warning] sonic_blocksync_sim.sonic_blocksync_sim_top: TOP_LEVEL_MODULE automatically set to sonic_blocksync_testbench
2<IP_ADDRESS>:00:36 [Debug] sonic_blocksync_sim.sonic_blocksync_sim_top_0: Timing: QME:1/1.651s(0.0s)
2<IP_ADDRESS>:00:36 [Warning] sonic_blocksync_sim.sonic_blocksync_sim_top_0.xcvr_rx_dataout_0: The channel signal isn't wide enough to support the number of channels.
2<IP_ADDRESS>:00:36 [Warning] sonic_blocksync_sim.sonic_blocksync_sim_top_0.xcvr_rx_dataout_1: The channel signal isn't wide enough to support the number of channels.
2<IP_ADDRESS>:00:36 [Warning] sonic_blocksync_sim.sonic_blocksync_sim_top_0.xcvr_tx_datain_0: The channel signal isn't wide enough to support the number of channels.
2<IP_ADDRESS>:00:36 [Warning] sonic_blocksync_sim.sonic_blocksync_sim_top_0.xcvr_tx_datain_1: The channel signal isn't wide enough to support the number of channels.
2<IP_ADDRESS>:00:36 [Debug] sonic_blocksync_sim.xcvr_dataout_0: add_interface_port: Added reset port reset to clk_reset instead of clk
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_dataout_0: Use Valid set to zero - omitting src_valid port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_dataout_0: Use Ready set to zero - omitting src_ready port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_dataout_0: Use Packets set to zero - omitting src_startofpacket, src_endofpacket and src_empty ports
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_dataout_0: Use Empty set to zero - omitting src_empty port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_dataout_0: Use Channels set to zero - omitting src_channel port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_dataout_0: Use Error set to zero - omitting src_error port
2<IP_ADDRESS>:00:36 [Debug] sonic_blocksync_sim.xcvr_dataout_0: Timing: VAL:1/0.000s ELA:1/0.002s
2<IP_ADDRESS>:00:36 [Warning] sonic_blocksync_sim.xcvr_dataout_0.src: The channel signal isn't wide enough to support the number of channels.
2<IP_ADDRESS>:00:36 [Debug] sonic_blocksync_sim.xcvr_datain_0: add_interface_port: Added reset port reset to clk_reset instead of clk
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_datain_0: Use Valid set to zero - omitting sink_valid port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_datain_0: Use Ready set to zero - omitting sink_ready port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_datain_0: Use Packets set to zero - omitting sink_startofpacket, sink_endofpacket and sink_empty ports
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_datain_0: Use Empty set to zero - omitting sink_empty port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_datain_0: Use Channels set to zero - omitting sink_channel port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_datain_0: Use Error set to zero - omitting sink_error port
2<IP_ADDRESS>:00:36 [Debug] sonic_blocksync_sim.xcvr_datain_0: Timing: VAL:1/0.000s ELA:1/0.002s
2<IP_ADDRESS>:00:36 [Warning] sonic_blocksync_sim.xcvr_datain_0.sink: The channel signal isn't wide enough to support the number of channels.
2<IP_ADDRESS>:00:36 [Debug] sonic_blocksync_sim.xcvr_dataout_1: add_interface_port: Added reset port reset to clk_reset instead of clk
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_dataout_1: Use Valid set to zero - omitting src_valid port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_dataout_1: Use Ready set to zero - omitting src_ready port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_dataout_1: Use Packets set to zero - omitting src_startofpacket, src_endofpacket and src_empty ports
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_dataout_1: Use Empty set to zero - omitting src_empty port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_dataout_1: Use Channels set to zero - omitting src_channel port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_dataout_1: Use Error set to zero - omitting src_error port
2<IP_ADDRESS>:00:36 [Debug] sonic_blocksync_sim.xcvr_dataout_1: Timing: VAL:1/0.000s ELA:1/0.001s
2<IP_ADDRESS>:00:36 [Warning] sonic_blocksync_sim.xcvr_dataout_1.src: The channel signal isn't wide enough to support the number of channels.
2<IP_ADDRESS>:00:36 [Debug] sonic_blocksync_sim.xcvr_datain_1: add_interface_port: Added reset port reset to clk_reset instead of clk
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_datain_1: Use Valid set to zero - omitting sink_valid port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_datain_1: Use Ready set to zero - omitting sink_ready port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_datain_1: Use Packets set to zero - omitting sink_startofpacket, sink_endofpacket and sink_empty ports
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_datain_1: Use Empty set to zero - omitting sink_empty port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_datain_1: Use Channels set to zero - omitting sink_channel port
2<IP_ADDRESS>:00:36 [Info] sonic_blocksync_sim.xcvr_datain_1: Use Error set to zero - omitting sink_error port
2<IP_ADDRESS>:00:36 [Debug] sonic_blocksync_sim.xcvr_datain_1: Timing: VAL:1/0.001s ELA:1/0.001s
2<IP_ADDRESS>:00:36 [Warning] sonic_blocksync_sim.xcvr_datain_1.sink: The channel signal isn't wide enough to support the number of channels.


A badge consists of a small circle, typically containing a number or other characters, that appears in proximity to another object.


Local outlier factor (LOF) is an algorithm for finding anomalous data points by measuring the local deviation of a given data point with respect to its neighbours (Breunig et al., 2000).
Input data in the text box with format:
ID x y
Breunig, M. M.; Kriegel, H.-P.; Ng, R. T.; and Sander, J. (2000). LOF: Identifying Density-based Local Outliers. Proceedings of the 2000 ACM SIGMOD International Conference on Management of Data (SIGMOD). pp. 93–104. doi:10.1145/335191.335388. ISBN 1-5811-3217-4.


KISS 💋 News Blog Install KISS Team Guidestones FAQ
Community (NEW) Scrots Package System Testimonials Style
Ports (non-x86-64) Software Contact Donate GitHub ->
Subject https://k1ss.org
From Dylan Araps<EMAIL_ADDRESS>Date Mon, 18 Feb 2020 14:15:27 +0100
I wrote a little about the new website in my weekly post
yesterday but felt the need to write something in depth
about it.
Each blog post will now be formatted as if it were taken
from a mailing list archive. Why? It's fun and familiar.
HOW ARE PAGES WRITTEN?
The new site doesn't use Markdown or any other kind of
Markup language. Instead each page is written in plain
text with the ability to use HTML tags if needed.
The entire page is wrapped in pre tags with the .txt file
inserted in-between at "compile" time. Mimicking how a
browser displays a .txt file (to some extent).
Writing posts is as simple as writing a .txt file. All
line breaks and white-space add spacing
(they also aren't condensed into a singular break).
There's no need to worry about formatting, typography,
layout, etc as it will display exactly how it is written.
I can forget about everything and just write!
PORTABILITY
The website should display perfectly in text-based
browsers, browsers like netsurf or dillo and modern
browsers such as Firefox or Chromium.
It can also be viewed using your pager and curl by
appending .txt to each URL which will download the plain
text version (as I wrote it in my text editor).
This entire site will also serve as local documentation for
the distribution through storing the txt files in
/usr/share/doc/kiss.
A Ctrl+A allows you to copy the entire page as plain-text
as another means of locally storing the contents as they
are displayed.
PERFORMANCE
Each page takes up a single 3-10KB~ network request when
there are no images on the page.
The content of each page makes up the majority of the size
so the exact number differs based on how much is written.
Each page is so small that caching the CSS and any other
resources doesn't make sense at all. The overhead of the
surrounding boilerplate is < 1KB in size.
There is no Javascript, analytics or what have you on this
site. It's simply text with the occasional image where
appropriate.
CUSTOMIZATION
The reader has the ability to customize the font and font
sizing through their browser settings as this website will
use whatever the browser settings are.
There is also a tiny amount of CSS to enable a dark theme
if the user's device sends 'prefers-color-scheme:dark'.
@media (prefers-color-scheme:dark) {
body {
background: #000;
color: #fff;
}
a {
color: #6CF
}
}
The idea is that one can digest the information here in
whatever way they please. Through a terminal browser,
regular browser, text-editor, pager, etc.
THE END
Dylan
The registered trademark Linux(R) is used pursuant to a
sublicense from the Linux Foundation, the exclusive
licensee of Linus Torvalds, owner of the mark on a
worldwide basis.
(C) Dylan Araps 2019-2020
View page source


---
layout: post
title: 'Coverage Probability'
subtitle: 'Coverage Probability is an important operating characteristic of methods for constructing interval estimates (particularly confidence intervals)..'
date: 2020-03-13 00:04:13
background: '/img/posts/percent.jpg'
pagination:
enabled: false
collection: posts
---
Introduction
In this blog post, we explore a concept known as the “Coverage
Probability”. Coverage probability is an important operating
characteristic for constructing the interval estimates of statistical methods,
particularly Confidence Intervals. To explore this concept, I will
perform a simulation to calculate the coverage probability of the 95%
confidence interval of the median when computed from through the Maximum
Likelihood Estimation, MLE.
For the purposes of this blog post, let’s define the 95% confidence
interval of the median to be the middle 95% of sampling distribution of
the median. Similarly, the 95% confidence interval of the mean, standard
deviation, etc. is the middle 95% of the respective sampling
distribution.
In the same light, let’s define the coverage probability as the long run
proportion of intervals that capture the population parameter of
interest. Conceptualy, one can calculate the coverage probability with
the following steps: 1. generate a sample of size N from a known
distribution 2. construct a confidence interval 3. determine if the
confidence captures the population parameter 4. Repeat steps 1 - 3 many
times. Estimate the coverage probability as the proportion of samples
for which the confidence interval captured the population parameter.
Generating Data
First, using “rnorm”, let’s generate a sample from a Standard Normal
Distribution of size N = 201.
We see that the the mean and standard deviation for the generated sample
are about 0 and 1, respectively.
Calculating the Confidence Interval for the Median
We now get to use the mean and standard deviations we estimated
through the MLE to generate a sample that we will compute the median
of, by running 5000 simulations.
As mentioned earlier, the 95% confidence interval of the median will
be assumed to be the middle 95% of the sampling distribution of the
median.
The lower and upper confidence limits for the median are the 0.025
and 0.975 quantiles, respectively.
boot.meds.ci <- function(parameters){
R <- 5000
sample.meds <- NA
for (i in 1:R){
sample.meds[i] <- parameters %>% generate_data()%>% median
}
quantile(sample.meds,c(0.025,0.975))
}
The True Median
The median of a Standard Normal Distribution is 0. A Confidence Interval
will capture the median if the lower confidence limit is less than zero
or the upper confidence limit is greater than zero. The chunk of code
below returns a 1 if the confidence interval captured the true median or
a 0 if the confidence interval failed to do so.
capture_median <- function(ci){
1*(ci[1]<0 & 0
}
Coverage Probability
As mentioned earlier, the Coverage Probability is an important operating
characteristic of methods for constructing interval estimates,
particularly confidence intervals. Wikipedia defines it as the
proportion of the time that the interval contains the true value of
interest.
The plot above shows the 95% confidence interval of 50 samples.
Intervals in black capture the population parameter of interest; the
ones in blue do not. In this instance, the coverage probability is ~
49/50.
Coverage Probability of the Median
Taking the 95% confidence interval calculated for 5000 samples, we can
compute the Coverage Probability as the proportion of samples for which
the Confidence Interval captured the true value of the Median:
M <- 5000
captures <- rep(NA, M)
for(i in 1:M){
captures[i] <- true.parameters %>% generate_data %>% est.mle %>% boot.meds.ci %>% capture_median
}
capture_prob <- mean(captures)
capture_prob
Answer: 0.9868
The Coverage Probability for the 5000 simulations we run is ~ 98%.
Ideally, a 95% confidence interval will capture the population parameter
of interest in about 95% of the sample. Our simulations did slightly
better than 95%.


{% extends "Default/default.html" %} {% block content %}
Grove is a system for wiring up sensor and control modules using standardized connectors and cables. It makes it easy to hook up any of the 100s of available Grove modules to a microprocessor system without a messy tangle of wires. Each module provides a single function, such as sensing temperature or driving an LCD.
All kit parts have their name at the bottom of each part.
This is the adapter for connecting Grove modules to a 96Boards baseboard. It provides 18 Grove connectors, an Arduino compatible shield socket, and an ATMEGA328P microcontroller.
This Grove module is a simple momentary on/off button. When pressed, it pulls the data line up to VCC to output a HIGH signal. When released, the data line drops down to output LOW.
A simple touch sensor that behaves in a similar fashion to the button. Outputs high when touching the sensor with finger, and low otherwise.
An LED in Grove module form. Plug your favourite colour of LED into the socket, and it will glow brightly when the signal line is driven HIGH. Long part of the LED goes into the "+" and the short side goes into the "-".
This module is a piezo buzzer that will emit a tone when the data line is driven HIGH, or can be made to play notes and effects by connecting it to a pulse-width modulation (PWM) output.
This Grove module outputs an analog signal between 0V and VCC based on the position of the potentiometer. It has an angular range of 300 degrees.
This is a sound sensing module with a simple microphone. It can be used to detect the volume of sound in the area. The resistance of the sensor decreases as the level of sound increases.
This module detects the intensity of light shining on the sensor. The resistance of the sensor decreases as the amount of illumination increases.
The Grove servo is an actuator that is controlled by a PWM signal. The angle of the servo can be adjusted by changing the pulse width of the input PWM signal.
The Grove Relay has a normally-open SPST relay that is controlled by a single digital pin. It can be used to control power at much higher voltages that the Sensors mezzanine can handle. When the signal is LOW the relay is open. When it is driven HIGH the relay will close. Use it to control lights and equipment at up to 250V at 10 amps, but be careful when working with mains voltages.
This Grove module is a high accuracy temperature and humidity sensor.
This is a great little display module that is easy to control. It is a 16x2 character display with an RGB backlight controller so you can set it to whatever colour you like. This module is controlled using the I2C bus.
The 96Boards Sensors Mezzanine board included in this kit is an IO adapter for connecting sensors, actuators and other devices to any 96Boards baseboard. The Sensors mezzanine has exactly the same footprint as a standard size 96Boards Consumer Edition baseboard and fits perfectly on top. Sensors and other devices are connected to the board via 4 pin Grove connectors or via the Arduino compatible shield socket. Additionally, the Sensors mezzanine has a USB to UART adapter for accessing the 96Boards UART console.
Features


The target option ticker. This is useful when the option ticker does not match the underlying, e.g. SPX index and the SPXW weekly option. If None is provided will use underlying.
*Nullable<Resolution>
resolution
(Optional) Resolution of the index option contracts, i.e. the granularity of the data.
*Boolean
fillForward
(Optional) If True, this will fill in missing data points with the previous data point.


|
Chicago Tribune for members Register | Log in | More info
Please register to read stories on chicagotribune.com -- it's FREE! |
|
|
Latest news
Updated 9:13 PM CST
Bargain hunters usher in shopping season
Lured by a bevy of “early bird” specials, shoppers descended on stores in greater numbers than expected today, snapping up bargains on everything from digital cameras to Spider-Man toys.
Beware of pickpockets, police say
CTA expands service, schedule during holidays
Kenya Attacks Probed for al-Qaida Link
With Israeli and American authorities casting suspicion on al-Qaida or its allies, Kenyan authorities investigating the twin assaults on Israeli targets there focused quickly on foreign suspects, reporting Friday they had arrested six Pakistanis, four Somalis, an American and a Spaniard.
Mideast Peace Plan May Miss Target Date
A U.S.-backed plan for ending the Israeli-Palestinian conflict won't be ready by its Dec. 20 target date and may be delayed until after the Israeli elections a month later, a Palestinian official said Friday.
Robber kidnaps cashier, her son
Police were seeking a robber who they said took $117,000 from the safe of a South Side currency exchange after he briefly kidnapped a cashier and her son from their home and forced her to open the safe.
Judge to let jury decide tiger case
Pregnant driver killed on way to work
SUV crashes into an empty church
Other top headlines:
Shares dive as United faces cloudy future
Polls suggest Gore has Democratic edge
UN inspectors revisit Iraqi sites
Favoritism charges linger in Iowa star's sex scandal
Hormones now a men's issue
Hammond charity group spurns strip club's gift
Jordan playing final NBA season
Zsa Zsa Gabor in serious condition
>> More news: Local | Nation/World
|
|
| |
Search Chicago's freshest jobs
|
|
|
|
|
|
|


|
1-Wire API for .NET Version 4.00
|
Inherits com::dalsemi::onewire::container::OneWireContainer, and com::dalsemi::onewire::container::PasswordContainer.
Public Member Functions | |
| OneWireContainer37 () | |
Creates a new OneWireContainer for communication with a DS1977. | |
| OneWireContainer37 (DSPortAdapter sourceAdapter, byte[] newAddress) | |
Creates a new OneWireContainer for communication with a DS1977. | |
| OneWireContainer37 (DSPortAdapter sourceAdapter, long newAddress) | |
Creates a new OneWireContainer for communication with a DS1977. | |
| OneWireContainer37 (DSPortAdapter sourceAdapter, String newAddress) | |
Creates a new OneWireContainer for communication with a DS1977. | |
| void | setupContainer (DSPortAdapter sourceAdapter, byte[] newAddress) |
| Provides this container with the adapter object used to access this device and the address of the iButton or 1-Wire device. | |
| void | setupContainer (DSPortAdapter sourceAdapter, long newAddress) |
| Provides this container with the adapter object used to access this device and the address of the iButton or 1-Wire device. | |
| void | setupContainer (DSPortAdapter sourceAdapter, String newAddress) |
| Provides this container with the adapter object used to access this device and the address of the iButton or 1-Wire device. | |
| Enumeration | getMemoryBanks () |
| Gets an enumeration of memory bank instances that implement one or more of the following interfaces: MemoryBank, PagedMemoryBank, and OTPMemoryBank. | |
| int | getMaxSpeed () |
| Returns the maximum speed this iButton device can communicate at. | |
| String | getName () |
Gets the Maxim Integrated Products part number of the iButton or 1-Wire Device as a java.lang.String . | |
| String | getAlternateNames () |
| Retrieves the alternate Maxim Integrated Products part numbers or names. | |
| String | getDescription () |
| Gets a short description of the function of this iButton or 1-Wire Device type. | |
| synchronized void | setSpeedCheck (boolean doSpeedCheck) |
| Directs the container to avoid the calls to doSpeed() in methods that communicate with the Thermocron. | |
| int | getReadOnlyPasswordLength () throws OneWireException |
| Retrieves the password length for the read-only password. | |
| int | getReadWritePasswordLength () throws OneWireException |
| Retrieves the password length for the read/write password. | |
| int | getWriteOnlyPasswordLength () throws OneWireException |
| Retrieves the password length for the write-only password. | |
| int | getReadOnlyPasswordAddress () throws OneWireException |
| Retrieves the address the read only password starts. | |
| int | getReadWritePasswordAddress () throws OneWireException |
| Retrieves the address the read/write password starts. | |
| int | getWriteOnlyPasswordAddress () throws OneWireException |
| Retrieves the address the write only password starts. | |
| boolean | hasReadOnlyPassword () |
| Tells whether the device has a read only password. | |
| boolean | hasReadWritePassword () |
| Tells whether the device has a read/write password. | |
| boolean | hasWriteOnlyPassword () |
| Tells whether the device has a write only password. | |
| boolean | getDeviceReadOnlyPasswordEnable () throws OneWireException |
| Tells whether the read only password has been enabled. | |
| boolean | getDeviceReadWritePasswordEnable () throws OneWireException |
| Tells whether the read/write password has been enabled. | |
| boolean | getDeviceWriteOnlyPasswordEnable () throws OneWireException |
| Tells whether the write only password has been enabled. | |
| boolean | hasSinglePasswordEnable () |
| Returns true if this device has the capability to enable one type of password while leaving another type disabled. | |
| void | setDevicePasswordEnableAll (boolean enableAll) throws OneWireException, OneWireIOException |
| void | setDeviceReadOnlyPassword (byte[] password, int offset) throws OneWireException, OneWireIOException |
| Attempts to change the value of the read password in the device's register. | |
| void | setDeviceReadWritePassword (byte[] password, int offset) throws OneWireException, OneWireIOException |
| Attempts to change the value of the read/write password in the device's register. | |
| void | setDeviceWriteOnlyPassword (byte[] password, int offset) throws OneWireException, OneWireIOException |
| Attempts to change the value of the write only password in the device's register. | |
| void | setDevicePasswordEnable (boolean enableReadOnly, boolean enableReadWrite, boolean enableWriteOnly) throws OneWireException, OneWireIOException |
| void | setContainerReadOnlyPassword (byte[] password, int offset) throws OneWireException |
| Sets the value of the read password for the container. | |
| void | getContainerReadOnlyPassword (byte[] password, int offset) throws OneWireException |
| Returns the read password used by this container to read the memory of the device. | |
| boolean | isContainerReadOnlyPasswordSet () throws OneWireException |
| Returns true if the container's read password has been set. | |
| void | setContainerReadWritePassword (byte[] password, int offset) throws OneWireException |
| Sets the value of the read/write password for the container. | |
| void | getContainerReadWritePassword (byte[] password, int offset) throws OneWireException |
| Returns the read/write password used by this container to read from and write to the memory of the device. | |
| boolean | isContainerReadWritePasswordSet () throws OneWireException |
| Returns true if the container's read/write password has been set. | |
| void | setContainerWriteOnlyPassword (byte[] password, int offset) throws OneWireException |
| Sets the value of the read/write password for the container. | |
| void | getContainerWriteOnlyPassword (byte[] password, int offset) throws OneWireException |
| Returns the read/write password used by this container to read from and write to the memory of the device. | |
| boolean | isContainerWriteOnlyPasswordSet () throws OneWireException |
| Returns true if the container's read/write password has been set. | |
Static Public Attributes | |
| static final byte | WRITE_SCRATCHPAD_COMMAND = (byte)0x0F |
| 1-Wire command for Write Scratchpad | |
| static final byte | READ_SCRATCHPAD_COMMAND = (byte)0xAA |
| 1-Wire command for Read Scratchpad | |
| static final byte | COPY_SCRATCHPAD_PW_COMMAND = (byte)0x99 |
| 1-Wire command for Copy Scratchpad With Password | |
| static final byte | READ_MEMORY_PW_COMMAND = (byte)0x69 |
| 1-Wire command for Read Memory With Password | |
| static final byte | VERIFY_PSW_COMMAND = (byte)0xC3 |
| 1-Wire command for Verifing the Password | |
| static final byte | READ_VERSION = (byte)0xCC |
| 1-Wire command for getting Read Version | |
| static final int | PASSWORD_CONTROL_REGISTER = 0x7FD0 |
| Address of the Password Control Register. | |
| static final int | READ_ACCESS_PASSWORD = 0x7FC0 |
| Address of Read Access Password. | |
| static final int | READ_WRITE_ACCESS_PASSWORD = 0x7FC8 |
| Address of the Read Write Access Password. | |
Protected Attributes | |
| final byte[] | readPassword = new byte[8] |
| The current password for readingfrom this device. | |
| final byte[] | readWritePassword = new byte[8] |
| The current password for reading/writing from/to this device. |
1-Wire® container for a 32K bytes of read-only and read/write password protected memory, DS1977. This container encapsulates the functionality of the 1-Wire family type 37 (hex).
The memory can be accessed through the objects that are returned from the getMemoryBanks method.
The following is a list of the MemoryBank instances that are returned:
For examples regarding memory operations,
Creates a new OneWireContainer
for communication with a DS1977.
Note that the method setupContainer(DSPortAdapter,byte[])
must be called to set the correct DSPortAdapter
device address.
| OneWireContainer37 | ( | DSPortAdapter | sourceAdapter, |
| byte[] | newAddress | ||
| ) |
Creates a new OneWireContainer
for communication with a DS1977.
| sourceAdapter | adapter object required to communicate with this iButton |
| newAddress | address of this DS1977 |
| OneWireContainer37 | ( | DSPortAdapter | sourceAdapter, |
| long | newAddress | ||
| ) |
Creates a new OneWireContainer
for communication with a DS1977.
| sourceAdapter | adapter object required to communicate with this iButton |
| newAddress | address of this DS1977 |
| OneWireContainer37 | ( | DSPortAdapter | sourceAdapter, |
| String | newAddress | ||
| ) |
Creates a new OneWireContainer
for communication with a DS1977.
| sourceAdapter | adapter object required to communicate with this iButton |
| newAddress | address of this DS1977 |
| String getAlternateNames | ( | ) |
Retrieves the alternate Maxim Integrated Products part numbers or names.
A 'family' of MicroLAN devices may have more than one part number depending on packaging. There can also be nicknames such as "Crypto iButton".
Reimplemented from OneWireContainer.
| void getContainerReadOnlyPassword | ( | byte[] | password, |
| int | offset | ||
| ) | throws OneWireException |
Returns the read password used by this container to read the memory of the device.
| password | Holds the 8-byte value of container's read password. |
| offset | Index to start copying the password into the array. |
Implements PasswordContainer.
| void getContainerReadWritePassword | ( | byte[] | password, |
| int | offset | ||
| ) | throws OneWireException |
Returns the read/write password used by this container to read from and write to the memory of the device.
| password | Holds the 8-byte value of container's read/write password. |
| offset | Index to start copying the password into the array. |
Implements PasswordContainer.
| void getContainerWriteOnlyPassword | ( | byte[] | password, |
| int | offset | ||
| ) | throws OneWireException |
Returns the read/write password used by this container to read from and write to the memory of the device.
| password | Holds the 8-byte value of container's read/write password. |
| offset | Index to start copying the password into the array. |
Implements PasswordContainer.
| String getDescription | ( | ) |
Gets a short description of the function of this iButton or 1-Wire Device type.
Reimplemented from OneWireContainer.
| boolean getDeviceReadOnlyPasswordEnable | ( | ) | throws OneWireException |
Tells whether the read only password has been enabled.
| OneWireException |
Implements PasswordContainer.
| boolean getDeviceReadWritePasswordEnable | ( | ) | throws OneWireException |
Tells whether the read/write password has been enabled.
| OneWireException |
Implements PasswordContainer.
| boolean getDeviceWriteOnlyPasswordEnable | ( | ) | throws OneWireException |
Tells whether the write only password has been enabled.
| OneWireException |
Implements PasswordContainer.
| int getMaxSpeed | ( | ) |
Returns the maximum speed this iButton device can communicate at.
Reimplemented from OneWireContainer.
| Enumeration getMemoryBanks | ( | ) |
Gets an enumeration of memory bank instances that implement one or more of the following interfaces: MemoryBank, PagedMemoryBank, and OTPMemoryBank.
Enumeration
of memory banks Reimplemented from OneWireContainer.
| String getName | ( | ) |
Gets the Maxim Integrated Products part number of the iButton or 1-Wire Device as a java.lang.String
.
For example "DS1977".
Reimplemented from OneWireContainer.
| int getReadOnlyPasswordAddress | ( | ) | throws OneWireException |
Retrieves the address the read only password starts.
Implements PasswordContainer.
| int getReadOnlyPasswordLength | ( | ) | throws OneWireException |
Retrieves the password length for the read-only password.
| OneWireException |
Implements PasswordContainer.
| int getReadWritePasswordAddress | ( | ) | throws OneWireException |
Retrieves the address the read/write password starts.
Implements PasswordContainer.
| int getReadWritePasswordLength | ( | ) | throws OneWireException |
Retrieves the password length for the read/write password.
| OneWireException |
Implements PasswordContainer.
| int getWriteOnlyPasswordAddress | ( | ) | throws OneWireException |
Retrieves the address the write only password starts.
Implements PasswordContainer.
| int getWriteOnlyPasswordLength | ( | ) | throws OneWireException |
Retrieves the password length for the write-only password.
| OneWireException |
Implements PasswordContainer.
| boolean hasReadOnlyPassword | ( | ) |
Tells whether the device has a read only password.
Implements PasswordContainer.
| boolean hasReadWritePassword | ( | ) |
Tells whether the device has a read/write password.
Implements PasswordContainer.
| boolean hasSinglePasswordEnable | ( | ) |
Returns true if this device has the capability to enable one type of password while leaving another type disabled.
i.e. if the device has Read-Only password protection and Write-Only password protection, this method indicates whether or not you can enable Read-Only protection while leaving the Write-Only protection disabled.
true
if the device has the capability to enable one type of password while leaving another type disabled. Implements PasswordContainer.
| boolean hasWriteOnlyPassword | ( | ) |
Tells whether the device has a write only password.
Implements PasswordContainer.
| boolean isContainerReadOnlyPasswordSet | ( | ) | throws OneWireException |
Returns true if the container's read password has been set.
The return value is not affected by whether or not the read password of the container actually matches the value in the device's password register.
true
if the container's read password has been set Implements PasswordContainer.
| boolean isContainerReadWritePasswordSet | ( | ) | throws OneWireException |
Returns true if the container's read/write password has been set.
The return value is not affected by whether or not the read/write password of the container actually matches the value in the device's password register.
true
if the container's read/write password has been set. Implements PasswordContainer.
| boolean isContainerWriteOnlyPasswordSet | ( | ) | throws OneWireException |
Returns true if the container's read/write password has been set.
The return value is not affected by whether or not the read/write password of the container actually matches the value in the device's password register.
true
if the container's read/write password has been set. Implements PasswordContainer.
| void setContainerReadOnlyPassword | ( | byte[] | password, |
| int | offset | ||
| ) | throws OneWireException |
Sets the value of the read password for the container.
This is the value used by this container to read the memory of the device. If this password does not match the value of the read password in the device's password register, all subsequent read operations will fail.
| password | New 8-byte value of container's read password. |
| offset | Index to start copying the password from the array. |
Implements PasswordContainer.
| void setContainerReadWritePassword | ( | byte[] | password, |
| int | offset | ||
| ) | throws OneWireException |
Sets the value of the read/write password for the container.
This is the value used by this container to read and write to the memory of the device. If this password does not match the value of the read/write password in the device's password register, all subsequent read and write operations will fail.
| password | New 8-byte value of container's read/write password. |
| offset | Index to start copying the password from the array. |
Implements PasswordContainer.
| void setContainerWriteOnlyPassword | ( | byte[] | password, |
| int | offset | ||
| ) | throws OneWireException |
Sets the value of the read/write password for the container.
This is the value used by this container to read and write to the memory of the device. If this password does not match the value of the read/write password in the device's password register, all subsequent read and write operations will fail.
| password | New 8-byte value of container's read/write password. |
| offset | Index to start copying the password from the array. |
Implements PasswordContainer.
| void setDevicePasswordEnable | ( | boolean | enableReadOnly, |
| boolean | enableReadWrite, | ||
| boolean | enableWriteOnly | ||
| ) | throws OneWireException, OneWireIOException |
Enables/disables passwords by writing to the devices password control register. For this to be successful, either passwords must be disabled, or the read/write password for this container must be set and must match the current value of the read/write password in the device's register.
WARNING: Enabling passwords requires that both the read password and the read/write password be re-written to the part. Before calling this method, you should set the container read password and read/write password values. This will ensure that the correct value is written into the part.
| enable | if true , device passwords will be enabled. All subsequent read and write operations will require that the passwords for the container are set. |
Implements PasswordContainer.
| void setDevicePasswordEnableAll | ( | boolean | enableAll | ) | throws OneWireException, OneWireIOException |
Enables/Disables passwords for this device. If the part has more than one type of password (Read-Only, Write-Only, or Read/Write), all passwords will be enabled. This function is equivalent to the following: owc37.setDevicePasswordEnable( owc37.hasReadOnlyPassword(), owc37.hasReadWritePassword(), owc37.hasWriteOnlyPassword() );
For this to be successful, either write-protect passwords must be disabled, or the write-protect password(s) for this container must be set and must match the value of the write-protect password(s) in the device's register.
WARNING: Enabling passwords requires that both the read password and the read/write password be re-written to the part. Before calling this method, you should set the container read password and read/write password values. This will ensure that the correct value is written into the part.
| enableAll | if true , all passwords are enabled. Otherwise, all passwords are disabled. |
Implements PasswordContainer.
| void setDeviceReadOnlyPassword | ( | byte[] | password, |
| int | offset | ||
| ) | throws OneWireException, OneWireIOException |
Attempts to change the value of the read password in the device's register.
For this to be successful, either passwords must be disabled, or the read/write password for this container must be set and must match the value of the read/write password in the device's register.
WARNING: Setting the read password requires that both the read password and the read/write password be written to the part. Before calling this method, you should set the container read/write password value. This will ensure that the correct value is written into the part.
| password | the new value of 8-byte device read password, to be copied into the devices register. |
| offset | the offset to start copying the 8 bytes from the array |
Implements PasswordContainer.
| void setDeviceReadWritePassword | ( | byte[] | password, |
| int | offset | ||
| ) | throws OneWireException, OneWireIOException |
Attempts to change the value of the read/write password in the device's register.
For this to be successful, either passwords must be disabled, or the read/write password for this container must be set and must match the current value of the read/write password in the device's register.
| password | the new value of 8-byte device read/write password, to be copied into the devices register. |
| offset | the offset to start copying the 8 bytes from the array |
Implements PasswordContainer.
| void setDeviceWriteOnlyPassword | ( | byte[] | password, |
| int | offset | ||
| ) | throws OneWireException, OneWireIOException |
Attempts to change the value of the write only password in the device's register.
For this to be successful, either passwords must be disabled, or the read/write password for this container must be set and must match the current value of the read/write password in the device's register.
| password | the new value of 8-byte device read/write password, to be copied into the devices register. |
| offset | the offset to start copying the 8 bytes from the array |
Implements PasswordContainer.
| synchronized void setSpeedCheck | ( | boolean | doSpeedCheck | ) |
Directs the container to avoid the calls to doSpeed() in methods that communicate with the Thermocron.
To ensure that all parts can talk to the 1-Wire bus at their desired speed, each method contains a call to doSpeed()
. However, this is an expensive operation. If a user manages the bus speed in an application, call this method with doSpeedCheck
as false
. The default behavior is to call doSpeed()
.
| doSpeedCheck | true for doSpeed() to be called before every 1-Wire bus access, false to skip this expensive call |
| void setupContainer | ( | DSPortAdapter | sourceAdapter, |
| long | newAddress | ||
| ) |
Provides this container with the adapter object used to access this device and the address of the iButton or 1-Wire device.
| sourceAdapter | adapter object required to communicate with this iButton |
| newAddress | address of this 1-Wire device |
Reimplemented from OneWireContainer.
| void setupContainer | ( | DSPortAdapter | sourceAdapter, |
| String | newAddress | ||
| ) |
Provides this container with the adapter object used to access this device and the address of the iButton or 1-Wire device.
| sourceAdapter | adapter object required to communicate with this iButton |
| newAddress | address of this 1-Wire device |
Reimplemented from OneWireContainer.
| void setupContainer | ( | DSPortAdapter | sourceAdapter, |
| byte[] | newAddress | ||
| ) |
Provides this container with the adapter object used to access this device and the address of the iButton or 1-Wire device.
| sourceAdapter | adapter object required to communicate with this iButton |
| newAddress | address of this 1-Wire device |
Reimplemented from OneWireContainer.
final int PASSWORD_CONTROL_REGISTER = 0x7FD0 [static] |
Address of the Password Control Register.
final int READ_ACCESS_PASSWORD = 0x7FC0 [static] |
Address of Read Access Password.
final int READ_WRITE_ACCESS_PASSWORD = 0x7FC8 [static] |
Address of the Read Write Access Password.


We're sorry but knife4j-vue doesn't work properly without JavaScript enabled. Please enable it to continue.


| Next {quantmod} | R Documentation |
Create a new series with all values advanced forward one period.
The value of period 1, becomes the value at period 2,
value at 2 becomes the original value at 3, etc. The opposite
of Lag
. NA
is used to fill.
Next(x, k = 1) ## S3 method for class 'quantmod.OHLC' Next(x,k=1) ## S3 method for class 'zoo' Next(x,k=1) ## S3 method for class 'data.frame' Next(x,k=1) ## S3 method for class 'numeric' Next(x,k=1)
x |
vector or series to be advanced |
k |
periods to advance |
Shift series k-periods up, appending NA
s to end of series.
Specifically designed to handle quantmod.OHLC
and
zoo
series within the quantmod workflow.
If no S3 method is found, a call to lag
in base is made,
with the indexing reversed to shift the time series forward.
The original x
appended with k
NA
s and
missing the leading k
values.
The returned series maintains the number of obs. of the original.
Unlike Lag
, only one value for k
is allowed.
This function's purpose is to get the “next” value of
the data you hope to forecast, e.g. a stock's closing value
at t+1. Specifically to be used within
the quantmod framework of specifyModel
, as a
functional wrapper to the LHS of the model equation.
It is not magic - and thus will not get tomorrow's values...
Jeffrey A. Ryan
Stock.Close <- c(102.12,102.62,100.12,103.00,103.87,103.12,105.12) Close.Dates <- as.Date(c(10660,10661,10662,10665,10666,10667,10668),origin="1970-01-01") Stock.Close <- zoo(Stock.Close,Close.Dates) Next(Stock.Close) #one period ahead Next(Stock.Close,k=1) #same merge(Next(Stock.Close),Stock.Close) ## Not run: # a simple way to build a model of next days # IBM close, given todays. Technically both # methods are equal, though the former is seen # as more intuitive...ymmv specifyModel(Next(Cl(IBM)) ~ Cl(IBM)) specifyModel(Cl(IBM) ~ Lag(Cl(IBM))) ## End(Not run)


Interface for various ID retrieval method types (i.e.
The generic interface to a name generation algorithm.
A class for holding application data structures.
Information about behaviors of a table.
A Class for holding data about a column used in an Application.
A class for holding a column default value.
A NameGenerator implementation for table-specific constraints.
NameGenerator
A class for holding data about a domain used in the schema.
A Class for information about foreign keys of a table.
Information related to an ID method.
Information about indices of a table.
A Class for information regarding possible objects representing a table
A name generation factory.
A NameGenerator implementation for PHP-esque names.
A class that maps PropelTypes to PHP native types, PDO types (and Creole types).
Data about a validation rule used in an application.
Data about a table used in an application.
Information about unique columns of a table.
Validator.
Object to hold vendor-specific info.
An abstract class for elements represented by XML tags (e.g.
Interface for reverse engineering schema parsers.
Base class for reverse engineering a database schema.
Microsoft SQL Server database schema parser.
Mysql database schema parser.
SQLite database schema parser.
Oracle database schema parser.
Postgresql database schema parser.
"inner" class
"inner class"
A class that is used to parse an input xml schema file and creates an AppData PHP object.
A Class that is used to parse an data dump XML file and create SQL using a DataSQLBuilder class.