public static final class MethodHandles.Lookup extends Object
A lookup class which needs to create method handles will call
MethodHandles.lookup
to create a factory for itself.
When the Lookup
factory object is created, the identity of the lookup class is
determined, and securely stored in the Lookup
object.
The lookup class (or its delegates) may then use factory methods
on the Lookup
object to create method handles for access-checked members.
This includes all methods, constructors, and fields which are allowed to the lookup class,
even private ones.
The factory methods on a Lookup
object correspond to all major
use cases for methods, constructors, and fields.
Here is a summary of the correspondence between these factory methods and
the behavior the resulting method handles:
Here, the type
lookup expression member behavior
lookup.findGetter(C.class,"f",FT.class)
FT f; (T) this.f;
lookup.findStaticGetter(C.class,"f",FT.class)
static
FT f;(T) C.f;
lookup.findSetter(C.class,"f",FT.class)
FT f; this.f = x;
lookup.findStaticSetter(C.class,"f",FT.class)
static
FT f;C.f = arg;
lookup.findVirtual(C.class,"m",MT)
T m(A*); (T) this.m(arg*);
lookup.findStatic(C.class,"m",MT)
static
T m(A*);(T) C.m(arg*);
lookup.findSpecial(C.class,"m",MT,this.class)
T m(A*); (T) super.m(arg*);
lookup.findConstructor(C.class,MT)
C(A*); (T) new C(arg*);
lookup.unreflectGetter(aField)
(static)?
FT f;(FT) aField.get(thisOrNull);
lookup.unreflectSetter(aField)
(static)?
FT f;aField.set(thisOrNull, arg);
lookup.unreflect(aMethod)
(static)?
T m(A*);(T) aMethod.invoke(thisOrNull, arg*);
lookup.unreflectConstructor(aConstructor)
C(A*); (C) aConstructor.newInstance(arg*);
lookup.unreflect(aMethod)
(static)?
T m(A*);(T) aMethod.invoke(thisOrNull, arg*);
C
is the class or interface being searched for a member,
documented as a parameter named refc
in the lookup methods.
The method or constructor type MT
is composed from the return type T
and the sequence of argument types A*
.
Both MT
and the field type FT
are documented as a parameter named type
.
The formal parameter this
stands for the self-reference of type C
;
if it is present, it is always the leading argument to the method handle invocation.
(In the case of some protected
members, this
may be
restricted in type to the lookup class; see below.)
The name arg
stands for all the other method handle arguments.
In the code examples for the Core Reflection API, the name thisOrNull
stands for a null reference if the accessed method or field is static,
and this
otherwise.
The names aMethod
, aField
, and aConstructor
stand
for reflective objects corresponding to the given members.
In cases where the given member is of variable arity (i.e., a method or constructor) the returned method handle will also be of variable arity. In all other cases, the returned method handle will be of fixed arity.
The equivalence between looked-up method handles and underlying class members can break down in a few ways:
C
is not symbolically accessible from the lookup class's loader,
the lookup can still succeed, even when there is no equivalent
Java expression or bytecoded constant.
T
or MT
is not symbolically accessible from the lookup class's loader,
the lookup can still succeed.
For example, lookups for MethodHandle.invokeExact
and
MethodHandle.invoke
will always succeed, regardless of requested type.
ldc
instruction is not subject to
security manager checks.
Lookup
,
when a method handle is created.
This is a key difference from the Core Reflection API, since
java.lang.reflect.Method.invoke
performs access checking against every caller, on every call.
All access checks start from a Lookup
object, which
compares its recorded lookup class against all requests to
create method handles.
A single Lookup
object can be used to create any number
of access-checked method handles, all checked against a single
lookup class.
A Lookup
object can be shared with other trusted code,
such as a metaobject protocol.
A shared Lookup
object delegates the capability
to create method handles on private members of the lookup class.
Even if privileged code uses the Lookup
object,
the access checking is confined to the privileges of the
original lookup class.
A lookup can fail, because
the containing class is not accessible to the lookup class, or
because the desired class member is missing, or because the
desired class member is not accessible to the lookup class.
In any of these cases, a ReflectiveOperationException
will be
thrown from the attempted lookup. The exact class will be one of
the following:
In general, the conditions under which a method handle may be
looked up for a method M
are exactly equivalent to the conditions
under which the lookup class could have compiled and resolved a call to M
.
Where the JVM would raise exceptions like NoSuchMethodError
,
a method handle lookup will generally raise a corresponding
checked exception, such as NoSuchMethodException
.
And the effect of invoking the method handle resulting from the lookup
is exactly equivalent to executing the compiled and resolved call to M
.
The same point is true of fields and constructors.
If the desired member is protected
, the usual JVM rules apply,
including the requirement that the lookup class must be either be in the
same package as the desired member, or must inherit that member.
(See the Java Virtual Machine Specification, sections 4.9.2, <IP_ADDRESS>, and 6.4.)
In addition, if the desired member is a non-static field or method
in a different package, the resulting method handle may only be applied
to objects of the lookup class or one of its subclasses.
This requirement is enforced by narrowing the type of the leading
this
parameter from C
(which will necessarily be a superclass of the lookup class)
to the lookup class itself.
The JVM represents constructors and static initializer blocks as internal methods
with special names ("<init>"
and "<clinit>"
).
The internal syntax of invocation instructions allows them to refer to such internal
methods as if they were normal methods, but the JVM verifier rejects them.
A lookup of such an internal method will produce a NoSuchMethodException
.
In some cases, access between nested classes is obtained by the Java compiler by creating
an wrapper method to access a private method of another class
in the same top-level declaration.
For example, a nested class C.D
can access private members within other related classes such as
C
, C.D.E
, or C.B
,
but the Java compiler may need to generate wrapper methods in
those related classes. In such cases, a Lookup
object on
C.E
would be unable to those private members.
A workaround for this limitation is the Lookup.in
method,
which can transform a lookup on C.E
into one on any of those other
classes, without special elevation of privilege.
Although bytecode instructions can only refer to classes in
a related class loader, this API can search for methods in any
class, as long as a reference to its Class
object is
available. Such cross-loader references are also possible with the
Core Reflection API, and are impossible to bytecode instructions
such as invokestatic
or getfield
.
There is a security manager API
to allow applications to check such cross-loader references.
These checks apply to both the MethodHandles.Lookup
API
and the Core Reflection API
(as found on Class
).
Access checks only apply to named and reflected methods,
constructors, and fields.
Other method handle creation methods, such as
MethodHandle.asType
,
do not require any access checks, and are done
with static methods of MethodHandles
,
independently of any Lookup
object.
SecurityException
.
Define smgr
as the security manager,
refc
as the containing class in which the member
is being sought, and defc
as the class in which the
member is actually defined.
The calls are made according to the following rules:
smgr.checkMemberAccess(refc, Member.PUBLIC)
is called.
refc
,
then smgr.checkPackageAccess(refcPkg)
is called,
where refcPkg
is the package of refc
.
smgr.checkMemberAccess(defc, Member.DECLARED)
is called.
(Note that defc
might be the same as refc
.)
The default implementation of this security manager method
inspects the stack to determine the original caller of
the reflective request (such as findStatic
),
and performs additional permission checks if the
class loader of defc
differs from the class
loader of the class from which the reflective request came.
defc
and refc
are in different class loaders,
and if the class loader of the lookup class is not
the same as or an ancestor of the class loader of defc
,
then smgr.checkPackageAccess(defcPkg)
is called,
where defcPkg
is the package of defc
.
| Modifier and Type | Field and Description |
|---|---|
static int |
PACKAGE
A single-bit mask representing
package access (default access),
which may contribute to the result of lookupModes . |
static int |
PRIVATE
A single-bit mask representing
private access,
which may contribute to the result of lookupModes . |
static int |
PROTECTED
A single-bit mask representing
protected access,
which may contribute to the result of lookupModes . |
static int |
PUBLIC
A single-bit mask representing
public access,
which may contribute to the result of lookupModes . |
| Modifier and Type | Method and Description |
|---|---|
MethodHandle |
bind(Object receiver,
String name,
MethodType type)
Produces an early-bound method handle for a non-static method.
|
MethodHandle |
findConstructor(Class<?> refc,
MethodType type)
Produces a method handle which creates an object and initializes it, using
the constructor of the specified type.
|
MethodHandle |
findGetter(Class<?> refc,
String name,
Class<?> type)
Produces a method handle giving read access to a non-static field.
|
MethodHandle |
findSetter(Class<?> refc,
String name,
Class<?> type)
Produces a method handle giving write access to a non-static field.
|
MethodHandle |
findSpecial(Class<?> refc,
String name,
MethodType type,
Class<?> specialCaller)
Produces an early-bound method handle for a virtual method,
as if called from an
invokespecial
instruction from caller . |
MethodHandle |
findStatic(Class<?> refc,
String name,
MethodType type)
Produces a method handle for a static method.
|
MethodHandle |
findStaticGetter(Class<?> refc,
String name,
Class<?> type)
Produces a method handle giving read access to a static field.
|
MethodHandle |
findStaticSetter(Class<?> refc,
String name,
Class<?> type)
Produces a method handle giving write access to a static field.
|
MethodHandle |
findVirtual(Class<?> refc,
String name,
MethodType type)
Produces a method handle for a virtual method.
|
MethodHandles.Lookup |
in(Class<?> requestedLookupClass)
Creates a lookup on the specified new lookup class.
|
Class<?> |
lookupClass()
Tells which class is performing the lookup.
|
int |
lookupModes()
Tells which access-protection classes of members this lookup object can produce.
|
String |
toString()
Displays the name of the class from which lookups are to be made.
|
MethodHandle |
unreflect(Method m)
Makes a direct method handle to m, if the lookup class has permission.
|
MethodHandle |
unreflectConstructor(Constructor c)
Produces a method handle for a reflected constructor.
|
MethodHandle |
unreflectGetter(Field f)
Produces a method handle giving read access to a reflected field.
|
MethodHandle |
unreflectSetter(Field f)
Produces a method handle giving write access to a reflected field.
|
MethodHandle |
unreflectSpecial(Method m,
Class<?> specialCaller)
Produces a method handle for a reflected method.
|
public static final int PUBLIC
public
access,
which may contribute to the result of lookupModes
.
The value, 0x01
, happens to be the same as the value of the
public
modifier bit.public static final int PRIVATE
private
access,
which may contribute to the result of lookupModes
.
The value, 0x02
, happens to be the same as the value of the
private
modifier bit.public static final int PROTECTED
protected
access,
which may contribute to the result of lookupModes
.
The value, 0x04
, happens to be the same as the value of the
protected
modifier bit.public static final int PACKAGE
package
access (default access),
which may contribute to the result of lookupModes
.
The value is 0x08
, which does not correspond meaningfully to
any particular modifier bit.public Class<?> lookupClass()
The class implies a maximum level of access permission,
but the permissions may be additionally limited by the bitmask
lookupModes
, which controls whether non-public members
can be accessed.
public int lookupModes()
A freshly-created lookup object on the caller's class has all possible bits set, since the caller class can access all its own members. A lookup object on a new lookup class created from a previous lookup object may have some mode bits set to zero. The purpose of this is to restrict access via the new lookup object, so that it can access only names which can be reached by the original lookup object, and also by the new lookup class.
public MethodHandles.Lookup in(Class<?> requestedLookupClass)
lookupClass
.
However, the resulting Lookup
object is guaranteed
to have no more access capabilities than the original.
In particular, access capabilities can be lost as follows:
requestedLookupClass
- the desired lookup class for the new lookup objectNullPointerException
- if the argument is nullpublic String toString()
Class.getName
.)
If there are restrictions on the access permitted to this lookup,
this is indicated by adding a suffix to the class name, consisting
of a slash and a keyword. The keyword represents the strongest
allowed access, and is chosen as follows:
MethodHandles.lookup
.
Objects created by Lookup.in
always have restricted access, and will display a suffix.
(It may seem strange that protected access should be stronger than private access. Viewed independently from package access, protected access is the first to be lost, because it requires a direct subclass relationship between caller and callee.)
toString
in class Object
in(java.lang.Class<?>)
public MethodHandle findStatic(Class<?> refc, String name, MethodType type) throws NoSuchMethodException, IllegalAccessException
findVirtual
or findSpecial
.)
The method and all its argument types must be accessible to the lookup class.
If the method's class has not yet been initialized, that is done
immediately, before the method handle is returned.
The returned method handle will have
variable arity if and only if
the method's variable arity modifier bit (0x0080
) is set.
Example:
import static java.lang.invoke.MethodHandles.*; import static java.lang.invoke.MethodType.*; ... MethodHandle MH_asList = publicLookup().findStatic(Arrays.class, "asList", methodType(List.class, Object[].class)); assertEquals("[x, y]", MH_asList.invoke("x", "y").toString());
refc
- the class from which the method is accessedname
- the name of the methodtype
- the type of the methodNoSuchMethodException
- if the method does not existIllegalAccessException
- if access checking fails,
or if the method is not static
,
or if the method's variable arity modifier bit
is set and asVarargsCollector
failsSecurityException
- if a security manager is present and it
refuses accessNullPointerException
- if any argument is nullpublic MethodHandle findVirtual(Class<?> refc, String name, MethodType type) throws NoSuchMethodException, IllegalAccessException
refc
) prepended.
The method and all its argument types must be accessible to the lookup class.
When called, the handle will treat the first argument as a receiver
and dispatch on the receiver's type to determine which method
implementation to enter.
(The dispatching action is identical with that performed by an
invokevirtual
or invokeinterface
instruction.)
The first argument will be of type refc
if the lookup
class has full privileges to access the member. Otherwise
the member must be protected
and the first argument
will be restricted in type to the lookup class.
The returned method handle will have
variable arity if and only if
the method's variable arity modifier bit (0x0080
) is set.
Because of the general equivalence between invokevirtual
instructions and method handles produced by findVirtual
,
if the class is MethodHandle
and the name string is
invokeExact
or invoke
, the resulting
method handle is equivalent to one produced by
MethodHandles.exactInvoker
or
MethodHandles.invoker
with the same type
argument.
Example:
import static java.lang.invoke.MethodHandles.*; import static java.lang.invoke.MethodType.*; ... MethodHandle MH_concat = publicLookup().findVirtual(String.class, "concat", methodType(String.class, String.class)); MethodHandle MH_hashCode = publicLookup().findVirtual(Object.class, "hashCode", methodType(int.class)); MethodHandle MH_hashCode_String = publicLookup().findVirtual(String.class, "hashCode", methodType(int.class)); assertEquals("xy", (String) MH_concat.invokeExact("x", "y")); assertEquals("xy".hashCode(), (int) MH_hashCode.invokeExact((Object)"xy")); assertEquals("xy".hashCode(), (int) MH_hashCode_String.invokeExact("xy")); // interface method: MethodHandle MH_subSequence = publicLookup().findVirtual(CharSequence.class, "subSequence", methodType(CharSequence.class, int.class, int.class)); assertEquals("def", MH_subSequence.invoke("abcdefghi", 3, 6).toString()); // constructor "internal method" must be accessed differently: MethodType MT_newString = methodType(void.class); //()V for new String() try { assertEquals("impossible", lookup() .findVirtual(String.class, "<init>", MT_newString)); } catch (NoSuchMethodException ex) { } // OK MethodHandle MH_newString = publicLookup() .findConstructor(String.class, MT_newString); assertEquals("", (String) MH_newString.invokeExact());
refc
- the class or interface from which the method is accessedname
- the name of the methodtype
- the type of the method, with the receiver argument omittedNoSuchMethodException
- if the method does not existIllegalAccessException
- if access checking fails,
or if the method is static
or if the method's variable arity modifier bit
is set and asVarargsCollector
failsSecurityException
- if a security manager is present and it
refuses accessNullPointerException
- if any argument is nullpublic MethodHandle findConstructor(Class<?> refc, MethodType type) throws NoSuchMethodException, IllegalAccessException
(Note: The requested type must have a return type of void
.
This is consistent with the JVM's treatment of constructor type descriptors.)
The returned method handle will have
variable arity if and only if
the constructor's variable arity modifier bit (0x0080
) is set.
Example:
import static java.lang.invoke.MethodHandles.*; import static java.lang.invoke.MethodType.*; ... MethodHandle MH_newArrayList = publicLookup().findConstructor( ArrayList.class, methodType(void.class, Collection.class)); Collection orig = Arrays.asList("x", "y"); Collection copy = (ArrayList) MH_newArrayList.invokeExact(orig); assert(orig != copy); assertEquals(orig, copy); // a variable-arity constructor: MethodHandle MH_newProcessBuilder = publicLookup().findConstructor( ProcessBuilder.class, methodType(void.class, String[].class)); ProcessBuilder pb = (ProcessBuilder) MH_newProcessBuilder.invoke("x", "y", "z"); assertEquals("[x, y, z]", pb.command().toString());
refc
- the class or interface from which the method is accessedtype
- the type of the method, with the receiver argument omitted, and a void return typeNoSuchMethodException
- if the constructor does not existIllegalAccessException
- if access checking fails
or if the method's variable arity modifier bit
is set and asVarargsCollector
failsSecurityException
- if a security manager is present and it
refuses accessNullPointerException
- if any argument is nullpublic MethodHandle findSpecial(Class<?> refc, String name, MethodType type, Class<?> specialCaller) throws NoSuchMethodException, IllegalAccessException
invokespecial
instruction from caller
.
The type of the method handle will be that of the method,
with a suitably restricted receiver type (such as caller
) prepended.
The method and all its argument types must be accessible
to the caller.
When called, the handle will treat the first argument as a receiver,
but will not dispatch on the receiver's type.
(This direct invocation action is identical with that performed by an
invokespecial
instruction.)
If the explicitly specified caller class is not identical with the lookup class, or if this lookup object does not have private access privileges, the access fails.
The returned method handle will have
variable arity if and only if
the method's variable arity modifier bit (0x0080
) is set.
(Note: JVM internal methods named <init>
not visible to this API,
even though the invokespecial
instruction can refer to them
in special circumstances. Use findConstructor
to access instance initialization methods in a safe manner.)
Example:
import static java.lang.invoke.MethodHandles.*; import static java.lang.invoke.MethodType.*; ... static class Listie extends ArrayList { public String toString() { return "[wee Listie]"; } static Lookup lookup() { return MethodHandles.lookup(); } } ... // no access to constructor via invokeSpecial: MethodHandle MH_newListie = Listie.lookup() .findConstructor(Listie.class, methodType(void.class)); Listie l = (Listie) MH_newListie.invokeExact(); try { assertEquals("impossible", Listie.lookup().findSpecial( Listie.class, "<init>", methodType(void.class), Listie.class)); } catch (NoSuchMethodException ex) { } // OK // access to super and self methods via invokeSpecial: MethodHandle MH_super = Listie.lookup().findSpecial( ArrayList.class, "toString" , methodType(String.class), Listie.class); MethodHandle MH_this = Listie.lookup().findSpecial( Listie.class, "toString" , methodType(String.class), Listie.class); MethodHandle MH_duper = Listie.lookup().findSpecial( Object.class, "toString" , methodType(String.class), Listie.class); assertEquals("[]", (String) MH_super.invokeExact(l)); assertEquals(""+l, (String) MH_this.invokeExact(l)); assertEquals("[]", (String) MH_duper.invokeExact(l)); // ArrayList method try { assertEquals("inaccessible", Listie.lookup().findSpecial( String.class, "toString", methodType(String.class), Listie.class)); } catch (IllegalAccessException ex) { } // OK Listie subl = new Listie() { public String toString() { return "[subclass]"; } }; assertEquals(""+l, (String) MH_this.invokeExact(subl)); // Listie method
refc
- the class or interface from which the method is accessedname
- the name of the method (which must not be "<init>")type
- the type of the method, with the receiver argument omittedspecialCaller
- the proposed calling class to perform the invokespecial
NoSuchMethodException
- if the method does not existIllegalAccessException
- if access checking fails
or if the method's variable arity modifier bit
is set and asVarargsCollector
failsSecurityException
- if a security manager is present and it
refuses accessNullPointerException
- if any argument is nullpublic MethodHandle findGetter(Class<?> refc, String name, Class<?> type) throws NoSuchFieldException, IllegalAccessException
refc
- the class or interface from which the method is accessedname
- the field's nametype
- the field's typeNoSuchFieldException
- if the field does not existIllegalAccessException
- if access checking fails, or if the field is static
SecurityException
- if a security manager is present and it
refuses accessNullPointerException
- if any argument is nullpublic MethodHandle findSetter(Class<?> refc, String name, Class<?> type) throws NoSuchFieldException, IllegalAccessException
refc
- the class or interface from which the method is accessedname
- the field's nametype
- the field's typeNoSuchFieldException
- if the field does not existIllegalAccessException
- if access checking fails, or if the field is static
SecurityException
- if a security manager is present and it
refuses accessNullPointerException
- if any argument is nullpublic MethodHandle findStaticGetter(Class<?> refc, String name, Class<?> type) throws NoSuchFieldException, IllegalAccessException
refc
- the class or interface from which the method is accessedname
- the field's nametype
- the field's typeNoSuchFieldException
- if the field does not existIllegalAccessException
- if access checking fails, or if the field is not static
SecurityException
- if a security manager is present and it
refuses accessNullPointerException
- if any argument is nullpublic MethodHandle findStaticSetter(Class<?> refc, String name, Class<?> type) throws NoSuchFieldException, IllegalAccessException
refc
- the class or interface from which the method is accessedname
- the field's nametype
- the field's typeNoSuchFieldException
- if the field does not existIllegalAccessException
- if access checking fails, or if the field is not static
SecurityException
- if a security manager is present and it
refuses accessNullPointerException
- if any argument is nullpublic MethodHandle bind(Object receiver, String name, MethodType type) throws NoSuchMethodException, IllegalAccessException
defc
in which a method
of the given name and type is accessible to the lookup class.
The method and all its argument types must be accessible to the lookup class.
The type of the method handle will be that of the method,
without any insertion of an additional receiver parameter.
The given receiver will be bound into the method handle,
so that every call to the method handle will invoke the
requested method on the given receiver.
The returned method handle will have
variable arity if and only if
the method's variable arity modifier bit (0x0080
) is set
and the trailing array argument is not the only argument.
(If the trailing array argument is the only argument,
the given receiver value will be bound to it.)
This is equivalent to the following code:
whereimport static java.lang.invoke.MethodHandles.*; import static java.lang.invoke.MethodType.*; ... MethodHandle mh0 = lookup().findVirtual
(defc, name, type); MethodHandle mh1 = mh0.bindTo
(receiver); MethodType mt1 = mh1.type(); if (mh0.isVarargsCollector()) mh1 = mh1.asVarargsCollector(mt1.parameterType(mt1.parameterCount()-1)); return mh1;
defc
is either receiver.getClass()
or a super
type of that class, in which the requested method is accessible
to the lookup class.
(Note that bindTo
does not preserve variable arity.)receiver
- the object from which the method is accessedname
- the name of the methodtype
- the type of the method, with the receiver argument omittedNoSuchMethodException
- if the method does not existIllegalAccessException
- if access checking fails
or if the method's variable arity modifier bit
is set and asVarargsCollector
failsSecurityException
- if a security manager is present and it
refuses accessNullPointerException
- if any argument is nullpublic MethodHandle unreflect(Method m) throws IllegalAccessException
accessible
flag is not set,
access checking is performed immediately on behalf of the lookup class.
If m is not public, do not share the resulting handle with untrusted parties.
The returned method handle will have
variable arity if and only if
the method's variable arity modifier bit (0x0080
) is set.
m
- the reflected methodIllegalAccessException
- if access checking fails
or if the method's variable arity modifier bit
is set and asVarargsCollector
failsNullPointerException
- if the argument is nullpublic MethodHandle unreflectSpecial(Method m, Class<?> specialCaller) throws IllegalAccessException
invokespecial
instruction from within the specialCaller
.
The type of the method handle will be that of the method,
with the special caller type prepended (and not the receiver of the method).
If the method's accessible
flag is not set,
access checking is performed immediately on behalf of the lookup class,
as if invokespecial
instruction were being linked.
The returned method handle will have
variable arity if and only if
the method's variable arity modifier bit (0x0080
) is set.
m
- the reflected methodspecialCaller
- the class nominally calling the methodIllegalAccessException
- if access checking fails
or if the method's variable arity modifier bit
is set and asVarargsCollector
failsNullPointerException
- if any argument is nullpublic MethodHandle unreflectConstructor(Constructor c) throws IllegalAccessException
newInstance
operation,
creating a new instance of the constructor's class on the
arguments passed to the method handle.
If the constructor's accessible
flag is not set,
access checking is performed immediately on behalf of the lookup class.
The returned method handle will have
variable arity if and only if
the constructor's variable arity modifier bit (0x0080
) is set.
c
- the reflected constructorIllegalAccessException
- if access checking fails
or if the method's variable arity modifier bit
is set and asVarargsCollector
failsNullPointerException
- if the argument is nullpublic MethodHandle unreflectGetter(Field f) throws IllegalAccessException
accessible
flag is not set,
access checking is performed immediately on behalf of the lookup class.f
- the reflected fieldIllegalAccessException
- if access checking failsNullPointerException
- if the argument is nullpublic MethodHandle unreflectSetter(Field f) throws IllegalAccessException
accessible
flag is not set,
access checking is performed immediately on behalf of the lookup class.f
- the reflected fieldIllegalAccessException
- if access checking failsNullPointerException
- if the argument is null Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2015, Oracle and/or its affiliates. All rights reserved.


Use the General page of the Settings/Preferences dialog to configure the editor behaviour and customize its view.


wdel(1) Internet Applications - FTP wdel(1) NAME wdel - A wget-like program for deleting files on ftp servers SYNOPSIS wdel [option]... [URL [file]...]... DESCRIPTION Wdel is a free utility that is able to delete files on an ftp server. Wdel is non-interactive and background-capable. It can delete files or whole directories and is meant to be a robust client even for unstable connections and will therefore retry to delete a file, if the connection broke. Wdel supports connections through proxies, allowing you to use it in an environment that can access the internet only via a proxy or to provide anonymity by hiding your ip-address to the server. For SOCKSv5-proxies Wdel supports also listening mode, allowing you to use port-mode ftp through a proxy (useful if the remote ftp is behind a firewall or a gate‐ way). URL-Input-Handling URLs are recognized by the ftp://-prefix. Wdel first reads the URLs from the command line, and associates every file with the last URL until a new URL is found (note that this is dif‐ ferent from wput). Then, it reads the --input-file (if any) and parses the URLs in the same way. So you can specify e.g. one URL and read all filenames from a file. If there are no explicit filenames given for a singe URL, then the last part of the URL is taken to be the file/directory to be deleted. If there are filenames, then the last part of the URL is considered to be the directory where these files reside in. Slashes at the end of the URL or the filename (in case it is a directory to be deleted) are ignored. OPTIONS There are no special options introduced by Wdel. All of Wputâs options may be supplied, although some will not be of any effect because they do not apply for the process of deleting files. Please see wput(1) for a description of the options. SEE ALSO Many options can be set in a wputrc file. For its documentation consult the sample file provided by Wput. wput(1) describes all setable options. Not all apply for wdel too though. AUTHOR Wdel is written by Hagen Fritsch<EMAIL_ADDRESS>and Jan Larres<EMAIL_ADDRESS>Hagen Fritsch, Jan Larres 0.6.2 wdel(1)


Choose Your Play Mode
play in desktop
play in vr
Team Space ECS Demo
Choose Your Station
navigation
weapons


A collection of functions for the creation and application of highly optimised, robustly evaluated ensembles of support vector machines (SVMs). The package takes care of training individual SVM classifiers using a fast parallel heuristic algorithm, and combines individual classifiers into ensembles. Robust metrics of classification performance are offered by bootstrap resampling and permutation testing.
| Version: | 0.1-2 |
| Depends: | R (≥ 3.0.0), snowfall (≥ 1.84-6), e1071 (≥ 1.6-3), boot (≥ 1.3-11), neldermead (≥ 1.0-9) |
| Imports: | ggplot2 (≥ 1.0-0), optimbase (≥ 1.0-9) |
| Suggests: | RUnit, knitr |
| Published: | 2015-01-12 |
| Author: | Eleni Chatzimichali and Conrad Bessant |
| Maintainer: | Eleni Chatzimichali <ea.chatzimichali at gmail.com> |
| BugReports: | https://github.com/eaHat/classyfire/issues |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| NeedsCompilation: | no |
| Materials: | NEWS |
| CRAN checks: | classyfire results |
| Reference manual: | classyfire.pdf |
| Vignettes: |
Classyfire Cheat Sheet |
| Package source: | classyfire_0.1-2.tar.gz |
| Windows binaries: | r-devel: classyfire_0.1-2.zip, r-release: classyfire_0.1-2.zip, r-oldrel: classyfire_0.1-2.zip |
| OS X binaries: | r-release: classyfire_0.1-2.tgz, r-oldrel: classyfire_0.1-2.tgz |
| Old sources: | classyfire archive |
Please use the canonical form https://CRAN.R-project.org/package=classyfire to link to this page.


Brilliant Jerks Cost More Than They Are Worth, WebArchive Mirror - by Retrospective.co/Anonymous. Takeaway: “Brilliant jerks harm team morale and productivity. They don’t have to worry about being nice, because they are the top dog, and people need their natural talent. They have no incentive to try to improve, because they can simply go somewhere else. If you look carefully, you’ll notice that they often bounce around from place to place. They know they can get away with it.” You must apply a “no jerks” policy.
Brilliant Jerks in Engineering - by Brendan Gregg. Takeaway: Identifies selfless (cares about the company) and selfish (cares primarily about themselves) brilliant jerks.  Colleagues may be genuinely conflicted about how to deal with [the selfish type of "brilliant jerk"]: on the one hand, he is a real jerk, but on the other he is a ‘high performer,’ so isn’t it in the company’s best interest to tolerate his behavior? A policy helps you decide, and it can be as simple as three words: no brilliant jerks.”
Clean Up Corrosive Interpersonal Dynamics on Your Team with This System - by FirstRound. Takeaway: Executive coach Laura Gates describes how to build “vital, authentic conversations into your company’s culture at regular intervals to eliminate built-up tension systematically.”
Hard and Soft Skills in Tech - by Yonatan Zunger. Takeaway: “One very reliable pattern I’ve observed in a lot of situations is that the strength of people’s emotional response to a statement tells you a lot about how close this statement cuts to their biggest worries. It’s sort of obvious if you say it that way, but if you apply it as a detection method, it’s very powerful: strong responses lead you to where the real problems are, the real threats to people.”
The Hidden Toll of Workplace Incivility - by McKinsey. Takeaway: “[D]e-energizing relationships—those that are negative or draining—have a 4 to 7 times stronger negative impact on performance than the positive effects of relationships that are energizing (defined as leaving employees feeling enthused or upbeat).”
A Highly Effective Leadership Habit for Building Relationships - by Douglas R. Conant. Takeaway: Conant avoids expectation mismanagement based upon hoped-for mind reading and confusion by spending one hour “declaring himself” in a conversation. He covers what is important to him, what kind of leader he’s trying to become, what he values in an organization, what he seeks in direct reports, how he believes the industry operates, his planning philosophy, his operating style, his background, and his favorite quotes.
How to Turn Conflict Into a Communication Tool - by Anett Grant. Takeaway: Attack ideas, not people; watch your tone; be mindful of cultural norms; focus on relationship-building; and calculate the opportunity cost.
Kill The Elephants in The Room Before They Kill You. - by Scott Belsky. Takeaway: “A common mistake I observe in leaders of teams big and small is to aspire for peace as a default. You should be challenging peace as a default. Create an environment where people can withstand a fight and engage in friction as it arises. Rather than passively surf the whims of peoples’ hesitations to take action, bring the conflict to the surface[.]”
Learning to Embrace Conflict as a Part of Startup Culture - by Eric Paley. Takeaway: “Ego makes conflict painful because we try to avoid hurting others’ feelings, while protecting our own. But for many, winning the argument becomes more important than the company making the right decision. Therefore, when we engage conflict, we become emotional and want to win for ourselves, confusing this emotion with our desire to win collectively. While each of us struggles with this tension, the problem is exacerbated by the fact that everyone in the debate naturally is subjective on the superior value of their perspective. This tendency can often lead to anger, insecurity, and unnecessary emotion that makes conflict painful, relationship threatening and unproductive. Unfortunately, ego frightens many team members to shift into conflict avoidance.”
Personal User Manual Template - by Yan-David Erlich. Takeaway: Modeled on Urs Hölzle’s Personal User Manual, this template enables people to design their relationships by mapping out communication style particulars and pet peeves/preferences.
A Taxonomy of Troublemakers for Those Navigating Difficult Colleagues - by First Round. Takeaway: “a behavior often isn’t good or bad in and of itself — it’s the application of that behavior to a given context that’s good or bad…Research shows that, in about 70% of cases, difficult people will be shocked about how their behavior is being received and will simply self-correct. They didn’t know, and just stop.” Includes eight archetypes: Narcissus, Bean Counter, Venus Flytrap, Swindler, Distracted, Robotic, Eccentric and Suspicious.
Team Leader Venn Diagram - by Lara Hogan. Takeaway: How to differentiate between product managers, engineering managers and engineering leads. This eliminates confusion and conflict down the road.
These 13 Exercises Will Prepare You for Work’s Toughest Situations - by First Round. Takeaway: A profile of Maggie Leung, who uses the term “dynamic empathy” to describe “quickly gaining an understanding of how a colleague feels and figuring out how to act on it in a swiftly changing environment.”
Three Ways to Cool the Conflict - by Daniel Goleman. Takeaway: Manage self by noticing feelings and reframing situationss, manage conversations by reflecting and pausing, and manage relationships.
Want to Be a Great Leader? Assume Positive Intent - by Jim Whitehurst. The Red Hat CEO explains a key lesson he’s learned from watching open source communities work together: Assume positive intent. In this article, he explains how that lesson impacts the way he views leadership and organizational culture.
Why Is It So Hard to Listen - by Happy Melly. Takeaway: “Not only is listening a key factor in being an effective communicator and a strong leader, it’s also one of the basic necessities when it comes to enhancing our emotional intelligence and living in the moment — which ultimately contributes to our overall happiness at work and in life.” Includes listening challenges to help you improve.
How to Communicate with People Who Disagree with You - by Michael Grothaus. Takeaway: Work backwards from a person’s known belief; opt for in-person communication if possible, because it’s easier for people to dehumanize you via text communication; and use video conferencing instead of email.
Overcome the 5 Dysfunctions of a Team : by The Mission. Takeaway: 1. It takes time to build trust in a team. 2. Never fear conflict, as “the only purpose of productive conflict is to produce the best solution in the shortest period of time.” 3. Commitment is a function of two things: clarity and buy-in. Great teams move forward with complete buy-in, including members who voted against the decision. Therefore, leaders must be comfortable with the prospect of making a decision that turns out to be wrong. 4. Leaders must create a culture of accountability in/to the team by encouraging and allowing the team to serve as the first and primary accountability mechanism. 5. Leaders must set the tone for the team to focus on results. If the team members sense that the leader values anything other than results, they will take that as permission to do the same.
Power up Your Team with Nonviolent Communication Principles - by First Round. An enlightened interview with executive coaches Ann Mehl and Jerry Colonna, who teach major tech companies about nonviolent communication principles through emphasizing awareness, responsibility and empathy.
A Psychologist Studied 6,000 People for 40 Years and Found This 1 Super Effective Conflict Resolution Tactic - by Brenda Barbosa. Takeaway: Taking some cues from psychologist and couples researcher John Gottman, avoid conflict by lightening up; showing empathy; calming yourself down; and showing appreciation for the other person.
Use This Equation to Determine, Diagnose, and Repair Trust - by FirstRound. Takeaway: “Essentially, the amount you trust someone is the sum of how credible you believe they are on a subject, how reliable they’ve proven themselves to be over time, and how authentic you think they are as a person, divided by how much you think they’re acting in their own self interest. Looking at her colleagues’ relationship through this lens, [article subject Anne Raimondi, who’s been a Director of Product at eBay, VP Marketing at SurveyMonkey, CRO at TaskRabbit, SVP Operations at Zendesk, and COO at Earnin] helped them diagnose when and how trust had eroded, and eventually work with them to heal the rift.”
Why We Should Be Disagreeing More at Work - by Amy Gallo. Takeaway: “[M]ost people don’t want to disagree or know how to do it. In fact, we’ve come to equate saying “I see it differently” or “I don’t agree” with being angry, rude, or unkind, so it makes most people horribly uncomfortable…Disagreements are an inevitable, normal, and healthy part of relating to other people. There is no such thing as a conflict-free work environment. You might dream of working in a peaceful utopia, but it wouldn’t be good for your company, your work, or you. In fact, disagreements — when managed well — have lots of positive outcomes."


Drive Me Crazy (1999) *1/2 out of *****
Cast: Melissa Joan Hart, Adrien Grenier, Stephen Collins, Faye Grant Written by: Rob Thomas Based on the novel "How I Created My Perfect Prom Date" written by: Todd Strasser Directed by: John Schultz Running Time: 91 minutes
The Law of Crowd Pleasing Romantic Movies states that the two leads must end up together by film's end. If you're not familiar with this law, then maybe you've seen the trailer for this film which SHOWS that the two leads are together by film's end. Now if you're a regular reader of mine, you've heard me say this countless times: You know how Drive Me Crazy is going to end, but is the journey to get to that ending worth it? No, it definitely is not.
Melissa Joan Hart (from ABC's "Sabrina, the Teenage Witch") likes a hunky stud on the basketball team. Adrien Grenier is her grungy neighbor who's just broken up with his activist girlfriend. Apparently he wants to make his ex-girlfriend jealous enough to take him back, and she wants someone to take her to the big year end dance. So the two pretend to date for some reason, but only after Hart gives Grenier a bath to turn him into a hunky stud. Will Grenier like his new popularity and turn on his friends? Will this crazy scheme work? Do I care?
The teen comedy resurgence of late has been surprisingly good in terms of comedy. What makes movies like Can't Hardly Wait and 10 Things I Hate About You work (and to a lesser extent, She's All That and Never Been Kissed)is because the writers of those films seem to realize that high school is a joke and write their scripts accordingly. I don't know what the writer's intention was with Drive Me Crazy. There was some smart comedy in those films to make the obvious endings worth getting to. Here there's nothing... just teens whining about who's going to take them to the big dance.
In all honesty, the best part of this film is the end credits. Now normally when I say that it's followed with the joke "...because the movie is finally over." In this case though the end credits really are the most entertaining part of the film. After the obligatory second playing of Britney Spears' titular song, there's a quick commercial jingle for a burger joint the kids in the film hang out in and a brief rendition of the school song for their high school. Nothing great, but more entertaining than anything in the 90 minutes which preceded them.
Sci-fi fans take note: there are brief appearances from Stephen Collins (Star Trek:The Motion Picture) and Faye Grant (the TV miniseries "V" and "V:The Final Battle"). [PG-13]
The Jacksonville Film Journal URL:http://users.southeast.net/~chuckd21/<EMAIL_ADDRESS>© 1999 of The Jacksonville Film Journal. No reviews may be reprinted without permission.
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


First Worklow - Requesting a Holiday
Let's define a simple workflow where we are requesting a day off ('holiday' for our international readers). OSWf Process Definitions (workflows) are specified in an XML file, one per file.
Let's start by creating the file called 'holiday.oswf.xml
'. The minimum content for
this file will contain the DTD definition, a set of one or more initial-actions
which
serve as entry points into the workflow and set of steps
and actions
which a process instance will occupy
as the workflow is processed. Steps are also known as nodes and states, while actions may be
referred to as transitions in other workflow implementations.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE workflow PUBLIC "-//Open Source Workflow//DTD OSWf 3.0//EN" "http://oswf.sourceforge.net/OSWf-3.0.dtd"> <workflow> <initial-actions> . . . </initial-actions> <steps> . . . </steps> </workflow>
Note that OSWf will validate the XML file to the specified DTD, thus the workflow definition
has to be valid. You can create and edit workflows using any XML tools and errors will
be highlighted appropriately. The DTD is contained within the oswf-core
JAR file
and can be extracted for use with XML editing and validation tools. It can also be downloaded
from http://oswf.sourceforge.net/OSWf-3.0.dtd
Steps and Actions
Next we specify the initial-actions
, steps
and actions
. The first
important concept to understand the difference between initial-actions, steps and actions in a workflow.
A step is simply a place or position. As a workflow progresses, a process instance moves from one step to another by
way of actions. A step may be occupied for a very short period of time or very long period of
time. A step has the start time when it was entered and a entry status. When acted upon by an action,
a step will have a finished time and an exit status, optionally, a completed step will have an 'actor'
which caused the action to be fired. Actors can be thought of as users, timers or external system
events. Steps can also have auto
actions which occur immediately and have no actor.
In OSWf, initial-actions, steps and actions have a unique numbers and a name. Name need not be unique but are helpful if they are. The name can be used by the application and in reporting, the number is used by the workflow engine. More on this later.
Actions specify the transitions that can take place within a particular step based on
condtions. An action can result in a transition to another step or change the state of the
current step, that is, actions can loop back onto their step of origin.
Examples of actions in our Holiday Request example will be 'Start
Workflow
', 'Request holiday
', 'Approve
', and
'Deny
'. Verbs are commonly used as action names but not required, however, it does
make the workflow easier to read. Every step except terminal step have at least one action
which specifies a default-result
.
Put simply, a step is 'where a process instance is', and an action is 'how the process instance can change'.
Initial actions
are a special type of action that are used to 'kick off' a workflow. When
a workflow is created, it has no state, and it is not in any step. The application must provide
some mechanism to start off the process by choosing from the set of possible initial actions to start the
workflow is specified in <initial-actions>
. That said, most workflows have a single
action, named 'Start Workflow' or simply 'Start'.
For our Holiday workflow, let us assume that we only have one initial-action, 'Start Workflow'.
Add the following action definition inside of <initial-actions>
:
<initial-actions> <action id='1' name='Start Workflow'> <results> <default-result step='100'/> </results> </action> </initial-actions>
This inital-action is the simplest possible type of action. It specifies a single (default) result which moves to a new step.
A brief note about id numbers. The id numbers for initial-actions, actions and steps must be unique within each of XML tag types. This will also apply to other OSWf tags such as splits and joins which we will encounter soon. As a personal convention, I use single digits (1..9) for initial actions, splits and joins as there tend to be few of these in most workflows; for steps I start with 100 and work up in increments of 100, 50 or 10 (100, 200, 300...) leaving room for intermediate steps as the workflow develops. Within each step, action ids start with the step number and increase by one or two (100 101, 102...). Most steps have only one action to move the workflow forward hence this convention works well. This is only a convention but it helps me to organize the workflow description and allows me to insert steps and actions in the future. In the event of large workflow steps can be numbered by 50's or 10's. Ids need not be assigned in any order. Order is only useful for display or reports. You get the idea.
The First Step: Requesting a Holiday
The first step of our simple workflow is for an employee to enter a request for a holiday. This might involve a web page with a form, or a verbal or written request. It is important to note that a workflow system merely tracks the steps and processes the actions of a real world process and DOES NOT IMPLEMENT THE PROCESS. It is the responsibility of the application, human or computer to inform the workflow system of the actions chosen. The workflow system responds and can then be queried by an application process in order to determine what actions are available to the application.
<step id='100' name='Employee request'> <actions> <action id='100' name='Request holiday'> <results> <default-result exit-status='Requested' step='200'/> </results> </action> </actions> </step>
Step Status
The default-result
for this step has an additional attribute called exit-status
.
This is an optional attribute used to indicate the final status of a step, the OSWf default exit-status
is 'Finished'. Here it's a bit useless as we can only exit this step by one action but I wanted
to introduce this option before the next section.
NB: An 'exit-status' attribute is not used by the initial-actions's action tags.
The Next Step: It's the Managers Turn
The workflow has now progressed to step 200, 'Manager Approval'. This is where the manager must decide to allow or deny the employee's holiday based on workload, if other employees are available for coverage, this employee's available balance of holiday time, etc. In workflow language, "a work task has been added to the manager's Work List". He or she must use a web form, application or human to record a decision. Let's look at the available choices as defined in the workflow:
<step id='200' name='Manager Approval'> <actions> <!-- Manager approves holiday ====== --> <action id='201' name='Approve' finish='true'> <results> <default-result exit-status='Revised' /> </results> </action> <!-- Manager denies holiday ======== --> <action id='202' name='Deny' finish='true'> <results> <default-result exit-status='Revised' /> </results> </action> </actions> </step>
This step has two actions named 'Approve' or 'Deny', with ids of 201 and 202. The exit-status for the step in either case will be 'Revised'. But we could have used the OSWf default of 'Finished'. We could have used 'Approve' or 'Deny' and probably should have but I'd like to show you a better way to record the manager's decision in the next few paragraphs.
All done!
Not so fast! How can the employee know of the manager's decision? We need some kind of persistent store, like a database or at very least another step which sends an e-mail to the employee, human resources and payroll departments.
OSWf can save the manager's decision as a name/value pair to a TypedMap
which is
an really neat Java framework also from OpenSymphony and also abandoned like OSWorkflow. Let's add
a post-function to each action, shown in red in our revised workflow steps. You can read about
'post-function' in another tutorial but for now the name should be pretty self-explanatory:
Execute this function after this action has been chosen. For now don't worry about the syntax,
all will be revealed in time.
<step id='200' name='Manager Approval'> <actions> <!-- Manager approves holiday ====== --> <action id='201' name='Approve' finish='true'> <results> <default-result exit-status='Revised' /> </results> <post-functions> <function type='beanshell'> <arg name='script'>typedMap.setString('result', 'approved');</arg> </function> </post-functions> </action> <!-- Manager denies holiday ======== --> <action id='202' name='Deny' finish='true'> <results> <default-result exit-status='Revised' /> </results> <post-functions> <function type='beanshell'> <arg name='script'>typedMap.setString('result', 'denied');</arg> </function> </post-functions> </action> </actions> </step>
There are also ways from within OSWf to save the result of a step or action however you want or wherever you want. You would to write an OSWf function to do this. The TypedMap name/value pair storage is builtin and work nicely for use within OSWf.
Now we can look up the final decision in a database or add a step to send an e-mail to the
employee and notify the human resouces and payroll departments. One more thing,
notice in each action the
attribute finish='true'
. Although, the workflow has no more steps, these actions
will put this process instance into a Completed state.
To download the 'Holiday Request' workflow, click here.


{% extends "registration/templates/base.html" %}
{% from "registration/templates/includes/macros.html" import hero, testimonial %}
{% block title %}Digital Prizm{% endblock %}
{% block head_include %}
{% endblock %}
{% block content %}
Digital Prizm is an integrated online platform for SMEs managing business Digital Prizm
Operational Enterprises
and for supervisors monitoring MSE coaching.
Digital Prizm covers all SME business processes in running business operations, from Production, Marketing, Sales, Purchasing, Personnel, Projects, Finance, to Websites and Online Stores.
(click Tab to see more animations)Digital Prizm is an integrated SME Operational Platform with Dashboard Builder which is used to monitor the development and progress of SMEs.
The Five Stages of Digital Transformation to SMEs goes to class.
At this stage, SME entrepreneurs need to know themselves and their businesses, such as the type of business, the legality required, the business partners, the source of raw materials, the marketing area, and others. This information will form the basic profile of SMEs.
The next step is to record every business-related static data, such as a list of goods, a list of prices, a list of customers, a list of suppliers, and a list of employees. This static data will be useful in recording transactions at a later stage.
Complete the recording, at this stage carried out recording transactions such as purchase transactions, sales, inventory counting, employee payroll, and so forth. Recording of transactions is done in stages in accordance with the needs and abilities of SMEs.
If static data and transactions are well-documented, SME management can be improved by implementing a structured and systematic business process. The important thing in the implementation of business processes is discipline and consistent in running and taking note.
The last stage is to make operational and financial reports. Using these reports SME players can conduct business analyzes that will further support the development and progress of their business.
Let's join together +1 UMKM who has stepped up his efforts with Digital Prizm


|
Bitshares-Core
3.0.0
BitShares blockchain implementation and command-line interface software
|
Transfers from blind to blind. More...
#include <confidential.hpp>
Classes | |
| struct | fee_parameters_type |
Public Member Functions | |
| account_id_type | fee_payer () const |
| void | validate () const |
| share_type | calculate_fee (const fee_parameters_type &k) const |
| void | get_required_authorities (vector< authority > &a) const |
| Public Member Functions inherited from graphene::chain::base_operation | |
| template<typename T > | |
| share_type | calculate_fee (const T ¶ms) const |
| void | get_required_authorities (vector< authority > &) const |
| void | get_required_active_authorities (flat_set< account_id_type > &) const |
| void | get_required_owner_authorities (flat_set< account_id_type > &) const |
| void | validate () const |
| fc::optional< fc::future< void > > | validate_parallel (uint32_t skip) const |
Public Attributes | |
| asset | fee |
| vector< blind_input > | inputs |
| vector< blind_output > | outputs |
Additional Inherited Members | |
| Static Public Member Functions inherited from graphene::chain::base_operation | |
| static uint64_t | calculate_data_fee (uint64_t bytes, uint64_t price_per_kbyte) |
Transfers from blind to blind.
There are two ways to transfer value while maintaining privacy:
When doing account to account transfers, everyone with access to the memo key can see the amounts, but they will not have access to the funds.
When using stealth transfers the same key is used for control and reading the memo.
This operation is more expensive than a normal transfer and has a fee proportional to the size of the operation.
All assets in a blind transfer must be of the same type: fee.asset_id The fee_payer is the temp account and can be funded from the blinded values.
Using this operation you can transfer from an account and/or blinded balances to an account and/or blinded balances.
Stealth Transfers:
Assuming Receiver has key pair R,r and has shared public key R with Sender Assuming Sender has key pair S,s Generate one time key pair O,o as s.child(nonce) where nonce can be inferred from transaction Calculate secret V = o*R blinding_factor = sha256(V) memo is encrypted via aes of V owner = R.child(sha256(blinding_factor))
Sender gives Receiver output ID to complete the payment.
This process can also be used to send money to a cold wallet without having to pre-register any accounts.
Outputs are assigned the same IDs as the inputs until no more input IDs are available, in which case a the return value will be the first ID allocated for an output. Additional output IDs are allocated sequentially thereafter. If there are fewer outputs than inputs then the input IDs are freed and never used again.
Definition at line 236 of file confidential.hpp.
| share_type graphene::chain::blind_transfer_operation::calculate_fee | ( | const fee_parameters_type & | k | ) | const |
Definition at line 139 of file confidential.cpp.
| account_id_type graphene::chain::blind_transfer_operation::fee_payer | ( | ) | const |
graphene TEMP account
If fee_payer = temp_account_id, then the fee is paid by the surplus balance of inputs-outputs and 100% of the fee goes to the network.
Definition at line 99 of file confidential.cpp.
|
inline |
Definition at line 252 of file confidential.hpp.
| void graphene::chain::blind_transfer_operation::validate | ( | ) | const |
This method can be computationally intensive because it verifies that input commitments - output commitments add up to 0
by requiring all inputs to be sorted we also prevent duplicate commitments on the input
Definition at line 108 of file confidential.cpp.
| asset graphene::chain::blind_transfer_operation::fee |
Definition at line 243 of file confidential.hpp.
| vector<blind_input> graphene::chain::blind_transfer_operation::inputs |
Definition at line 244 of file confidential.hpp.
| vector<blind_output> graphene::chain::blind_transfer_operation::outputs |
Definition at line 245 of file confidential.hpp.


Language Functions¶
In this section, we will cover the following functions in-depth listed below:
uadmin.CacheTranslation¶
var CacheTranslation = false
CacheTranslation allows a translation to store data in a cache memory.
To assign a value within an application, visit Cache Translation page for an example.
To assign a value in the code, follow this approach:
Example:
package main
import (
"github.com/uadmin/uadmin"
)
func main() {
// NOTE: This code works only if database does not exist yet.
// Allows a translation to store data in a cache memory
uadmin.CacheTranslation = true
// Prohibits a translation to store data in a cache memory
uadmin.CacheTranslation = false
// ----- IF YOU RUN YOUR APPLICATION AGAIN, DO THIS BELOW -----
// Allows a translation to store data in a cache memory
setting := uadmin.Setting{}
uadmin.Get(&setting, "code = ?", "uAdmin.CacheTranslation")
setting.ParseFormValue([]string{"true"})
setting.Save()
// Prohibits a translation to store data in a cache memory
setting := uadmin.Setting{}
uadmin.Get(&setting, "code = ?", "uAdmin.CacheTranslation")
setting.ParseFormValue([]string{"false"})
setting.Save()
}
Quiz:
uadmin.CustomTranslation¶
var CustomTranslation = []string{
"uadmin/system",
}
CustomTranslation is where you can register custom translation files. To register a custom translation file, always assign it with its key in the this format “{CATEGORY_NAME}/{FILENAME}”. For example:
uadmin.CustomTranslation = append(uadmin.CustomTranslation, "ui/billing")
This will register the file and you will be able to use it if uadmin.Tf. By default there is only one registed custom translation wich is “uadmin/system”.
Let’s create an HTML file named index.html inside the templates folder. It constructs two link texts for the languages which are English and Chinese, and a sample sentence in big heading text.
<!DOCTYPE html>

<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>

English
Chinese

{{Tf "page/index" .Language "This is a sentence."}}

Once you are done with this step, create a file called page.go to implement the PageHandler in the views folder.
package views
import (
"net/http"
"github.com/uadmin/uadmin"
)
// Build a custom struct to store the language code here so that it can communicate to the Tf that we assigned in index.html.
type PageContext struct {
Language string
}
// PageHandler allows the system to create a connection to the HTML pages.
func PageHandler(w http.ResponseWriter, r *http.Request) {
// Get the value of the language key in the URL requested by client.
// e.g. http://api.example.com/?language=en
lang := r.URL.Query().Get("language")
// Check whether the client passes the URL query where the given language key contains a value.
if lang != "" {
// Assign the name, value, and path to build the language cookie.
langC := http.Cookie{
Name: "language",
Value: lang,
Path: "/",
}
// Set the language cookie to the browser.
http.SetCookie(w, &langC)
} else {
// If no language cookie has been found
if langC, err := r.Cookie("language"); err != nil || (langC != nil && langC.Value == "") {
// Get the default language code from the database instead and assign to this variable.
lang = uadmin.GetDefaultLanguage().Code
} else {
// Assign the value from the language cookie in this variable.
lang = langC.Value
}
}
// Assign the language code in the custom struct to be passed in the front-end part
context := PageContext{
Language: lang,
}
// Pass the context to the specified HTML path.
uadmin.RenderHTML(w, r, "templates/index.html", context)
}
Establish a connection in the main.go to the views by using http.HandleFunc. It should be placed after the uadmin.Register and before the StartServer.
package main
import (
"net/http"
// Specify the username that you used inside github.com folder
"github.com/username/project_name/views"
"github.com/uadmin/uadmin"
)
func main() {
// To avoid having issues when running an application, register function should be called.
uadmin.Register()
// Assign the Root URL value to /admin/. This code allows to resolve multiple registration issue when running an application.
// NOTE: This code works only if database does not exist yet.
uadmin.RootURL = "/admin/"
// ----- IF YOU RUN YOUR APPLICATION AGAIN, DO THIS BELOW -----
setting := uadmin.Setting{}
uadmin.Get(&setting, "code = ?", "uAdmin.RootURL")
setting.ParseFormValue([]string{"/admin/"})
setting.Save()
// Assign the path where to register the custom translation files in static/i18n.
// Format: "{CATEGORY_NAME}/{FILENAME}"
uadmin.CustomTranslation = append(uadmin.CustomTranslation, "page/index")
// Register the Page Handler
http.HandleFunc("/", uadmin.Handler(views.PageHandler))
uadmin.StartServer()
}
Now run your application, go to http://localhost:8080/ and see what happens.
At the moment, if you click the Chinese link text, you may notice that it doesn’t translate automatically in the UI. It’s because we need to activate the Chinese language in the Language model on uAdmin dashboard. In order to do that, go to http://localhost:8080/admin and open LANGUAGES model.
Activate the Chinese language in the form and save it. This should mark as checked in the table.
Go to /static/i18n/page path. This is where the translation files are registered and that’s the usage of uadmin.CustomTranslation. Page is the category name and index.(code).json is the filename.
You may notice that even if the Chinese language is activated in the Language model, it still does not generate the translation file for Chinese in /static/i18n/page path. In order to take effect, you need to rebuild an application.
After you rebuild an application, revisit the /static/i18n/page path. You must be able to see the index.zh.json now. This is the translation file for Chinese. At the moment, both of them are empty object.
Go to http://localhost:8080/ and let’s select the English and Chinese link texts back and forth.
Go back to /static/i18n/page path and you may notice that both English and Chinese translation files generated the key “This is a sentence.” inside an object.
index.en.json
{
"This is a sentence.": "This is a sentence."
}
index.zh.json
{
"This is a sentence.": "Translate me ---> This is a sentence."
}
The keyword Translate me is something that you have to assign the translation manually. In this example, let’s mock up the Chinese translated text for “This is a sentence.” and apply it in the index.zh.json translation file.
{
"This is a sentence.": "这是一个句子。"
}
Now go back to http://localhost:8080/, select the Chinese link text and see what happens.
Result:
Congratulations! You have created a multilingual application covering the English and Chinese languages.
Quiz:
uadmin.GetActiveLanguages¶
func GetActiveLanguages() []Language
GetActiveLanguages returns a list of active languages from the Language model.
Suppose Chinese with the code “zh” and English with the code “en” are active languages in the Language model.
Go to the main.go and apply the following codes below:
func main() {
// Returns the list of active languages from the Language model
activeLanguages := uadmin.GetActiveLanguages()
// Print the result
fmt.Println(activeLanguages)
uadmin.StartServer()
}
Run your application. Check your console for the result.
[zh en]
uadmin.GetDefaultLanguage¶
func GetDefaultLanguage() Language
GetDefaultLanguage returns the default language by code from the Language model.
Suppose Vietnamese is the default language with the code “vi” in the Language model.
Go to the main.go and apply the following codes below:
func main() {
// Returns the default language from the Language model
defaultLanguage := uadmin.GetDefaultLanguage()
// Print the result
fmt.Println(defaultLanguage)
uadmin.StartServer()
}
Run your application. Check your console for the result.
vi
uadmin.Language¶
type Language struct {
Model
EnglishName string `uadmin:"required;read_only;filter;search"`
Name string `uadmin:"required;read_only;filter;search"`
Flag string `uadmin:"image;list_exclude"`
Code string `uadmin:"filter;read_only;list_exclude"`
RTL bool `uadmin:"list_exclude"`
Default bool `uadmin:"help:Set as the default language;list_exclude"`
Active bool `uadmin:"help:To show this in available languages;filter"`
AvailableInGui bool `uadmin:"help:The App is available in this language;read_only"`
}
Language is a system in uAdmin that is used to add, modify and delete the elements of a language.
func (*Language) Save¶
func (l *Language) Save()
Save saves the object in the database.
func (Language) String¶
func (l Language) String() string
String returns the code of the language.
There are 2 ways you can do for initialization process using this function: one-by-one and by group.
One-by-one initialization:
func main(){
// Some codes
language := uadmin.Language{}
language.EnglishName = "English Name"
language.Name = "Name"
}
By group initialization:
func main(){
// Some codes
language := uadmin.Language{
EnglishName: "English Name",
Name: "Name",
}
}
In the following examples, we will use “by group” initialization process.
Page:
Quiz:
uadmin.Tf¶
func Tf(path string, lang string, term string, args ...interface{}) string
Tf is a function for translating strings into any given language.
Parameters:
path (string): This is where to get the translation from. It is in the format of “GROUPNAME/FILENAME” for example: “uadmin/system”
lang (string): Is the language code. If empty string is passed we will use the default language.
term (string): The term to translate
args (…interface{}): Is a list of arguments to fill the term with place holders
First of all, create a back-end validation function inside the todo.go.
// Validate !
func (t Todo) Validate() (errMsg map[string]string) {
// Initialize the error messages
errMsg = map[string]string{}
// Get any records from the database that matches the name of
// this record and make sure the record is not the record we are
// editing right now
todo := Todo{}
system := "system"
if uadmin.Count(&todo, "name = ? AND id <> ?", t.Name, t.ID) != 0 {
errMsg["Name"] = uadmin.Tf("models/Todo/Name/errMsg", "", fmt.Sprintf("This todo name is already in the %s", system))
}
return
}
Run your application and login using “admin” as username and password.
Open “LANGUAGES” model.
Search whatever languages you want to be available in your application. For this example, let’s choose Tagalog and set it to Active.
Open “TODOS” model and create at least one record inside it.
Logout your account and login again. Set your language to Wikang Tagalog (Tagalog).
Open “TODOS” model, create a duplicate record, save it and let’s see what happens.
The error message appears. Now rebuild your application and see what happens.
[ OK ] Initializing DB: [13/13]
[ OK ] Synching System Settings: [51/51]
[ WARNING] Translation of tl at 0% [0/134]
It says tl is 0% which means we have not translated yet.
From your project folder, go to static/i18n/models/todo.tl.json. Inside it, you will see a bunch of data in JSON format that says Translate Me. This is where you put your translated text. For this example, let’s translate the err_msg value in Tagalog language then save it.
Once you are done, go back to your application, refresh your browser and see what happens.
And if you rebuild your application, you will notice that uAdmin has found 1 word we have translated and is telling us we are at 1% translation for the Tagalog language.
[ OK ] Initializing DB: [13/13]
[ OK ] Synching System Settings: [51/51]
[ WARNING] Translation of tl at 1% [1/134]
Congrats, now you know how to translate your sentence using uadmin.Tf.
Quiz:
uadmin.Translate¶
func Translate(raw string, lang string, args ...bool) string
Translate is used to get a translation from a multilingual fields.
Parameters:
raw string: Is the field of the model that you want to access to
lang string: Is the code of the language
args …bool: Series of arguments that returns a boolean value
Before we proceed to the example, read Tutorial Part 9 - Introduction to API to familiarize how API works in uAdmin.
Suppose I have two multilingual fields in my Item record.
Create a file named custom_todo.go inside the api folder with the following codes below:
// CustomTodoHandler !
func CustomTodoHandler(w http.ResponseWriter, r *http.Request) {
r.URL.Path = strings.TrimPrefix(r.URL.Path, "/custom_todo")
r.URL.Path = strings.TrimSuffix(r.URL.Path, "/")
res := map[string]interface{}{}
item := models.Item{}
results := []map[string]interface{}{}
uadmin.Get(&item, "id = 1")
results = append(results, map[string]interface{}{
"Description (en)": uadmin.Translate(item.Description, "en"),
"Description (tl)": uadmin.Translate(item.Description, "tl"),
})
res["status"] = "ok"
res["item"] = results
uadmin.ReturnJSON(w, r, res)
}
Establish a connection in the main.go to the API by using http.HandleFunc. It should be placed after the uadmin.Register and before the StartServer.
func main() {
// Some codes
// CustomTodoHandler
http.HandleFunc("/custom_todo/", uadmin.Handler(api.CustomTodoHandler)) // <-- place it here
}
api is the folder name while CustomTodoHandler is the name of the function inside custom_todo.go.
Run your application and see what happens.
Quiz:
uadmin.TranslateSchema¶
func Translate(raw string, lang string, args ...bool) string
TranslateSchema translate a model schema.


Username: {{report.login}}
Repositories: {{report.public_repos}}
Followers: {{report.followers}}
Following: {{report.following}}
Bio : {{report.bio}}
Visit:{{report.html_url}}


This is probably a bad idea. But I will do it anyway. Created by @rishigb
solitude
meme
dank
voice
travel
raspberrypi
places
philosophy
people
history
experiments
evenings
alexa
© 2017. All rights reserved.


| Total net profit | -17.79 | Gross profit | 9.84 | Gross loss | -27.63 |
| Profit factor | 0.36 | Expected payoff | -1.19 | ||
| Absolute drawdown | -18.98 | Maximal drawdown (%) | 21.05 (1016.91%) | ||
| Total trades | 15 | Profit trades (% of total) | 6 (40.0%) | Loss trades (% of total) | 9 (60.0%) |
| Long positions (won %) | 9 (44.44%) | Short positions (won %) | 6 (33.33%) | ||
| Largest | profit trade | 3.4 | loss trade | -4.01 | |
| Average | profit trade | 1.64 | loss trade | -3.07 | |
| Minimum | profit trade | 0.64 | loss trade | -2.29 | |
| Maximum | take profit in pips | 62.9 | stop loss in pips | -43.6 | |
| Average | take profit in pips | 20.0 | stop loss in pips | -32.4 | |
| Minimum | take profit in pips | 4.7 | stop loss in pips | -22.0 | |
| Maximum | Reward-Risk | 2.1 | Duration in minutes | 3328 | |
| Average | Reward-Risk | 0.7 | Duration in minutes | 367.9 | |
| Minimum | Reward-Risk | 0.1 | Duration in minutes | 16 | |
| Maximum | consecutive wins (profit in money) | 2.0 (4.04) | consecutive losses (loss in money) | 5.0 (-14.85) | |
| Average | consecutive wins | 1.0 | consecutive losses | 2.0 |
| Total net profit | -9.45 | Gross profit | 7.3 | Gross loss | -16.75 |
| Profit factor | 0.44 | Expected payoff | -1.05 | ||
| Absolute drawdown | -10.64 | Maximal drawdown (%) | 12.71 (614.01%) | ||
| Total trades | 9 | Profit trades (% of total) | 4 (44.44%) | Loss trades (% of total) | 5 (55.56%) |
| Largest | profit trade | 3.4 | loss trade | -4.01 | |
| Average | profit trade | 1.82 | loss trade | -3.35 | |
| Minimum | profit trade | 0.64 | loss trade | -2.72 | |
| Maximum | take profit in pips | 62.9 | stop loss in pips | -43.6 | |
| Average | take profit in pips | 21.5 | stop loss in pips | -36.1 | |
| Minimum | take profit in pips | 4.7 | stop loss in pips | -27.4 | |
| Maximum | Reward-Risk | 2.1 | Duration in minutes | 3328.0 | |
| Average | Reward-Risk | 0.6 | Duration in minutes | 465.1 | |
| Minimum | Reward-Risk | 0.1 | Duration in minutes | 16.0 | |
| Maximum | consecutive wins (profit in money) | 2.0 (4.04) | consecutive losses (loss in money) | 3.0 (-9.18) | |
| Average | consecutive wins | 1.0 | consecutive losses | 2.0 |
| Total net profit | -8.34 | Gross profit | 2.54 | Gross loss | -10.88 |
| Profit factor | 0.23 | Expected payoff | -1.39 | ||
| Absolute drawdown | -10.88 | Maximal drawdown (%) | 8.06 (-285.82%) | ||
| Total trades | 6 | Profit trades (% of total) | 2 (33.33%) | Loss trades (% of total) | 4 (66.67%) |
| Largest | profit trade | 1.37 | loss trade | -2.92 | |
| Average | profit trade | 1.27 | loss trade | -2.72 | |
| Minimum | profit trade | 1.17 | loss trade | -2.29 | |
| Maximum | take profit in pips | 28.4 | stop loss in pips | -30.1 | |
| Average | take profit in pips | 17.6 | stop loss in pips | -26.9 | |
| Minimum | take profit in pips | 12.0 | stop loss in pips | -22.0 | |
| Maximum | Reward-Risk | 1.2 | Duration in minutes | 772.0 | |
| Average | Reward-Risk | 0.7 | Duration in minutes | 222.2 | |
| Minimum | Reward-Risk | Duration in minutes | 40.0 | ||
| Maximum | consecutive wins (profit in money) | 2.0 (2.54) | consecutive losses (loss in money) | 4.0 (-10.88) | |
| Average | consecutive wins | 2.0 | consecutive losses | 4.0 |


Current Temperature:
℃
London
New York
Paris
Tokyo
Controller
+
-
reset
Power Saving Mode:
Energy Usage Indicator


Before Change
continue
invalid_sites.append(site)
if invalid_sites:
raise Exception("Invalid state value for sites: " + str(invalid_sites))
// ensure compartment is a Compartment
if compartment and not isinstance(compartment, Compartment):
After Change
continue
invalid_sites.append(site)
if invalid_sites:
raise Exception("Invalid state value for sites: " + " ".join(["%s=%s" % (s,str(site_conditions[s])) for s in invalid_sites]))
// ensure compartment is a Compartment
if compartment and not isinstance(compartment, Compartment):
raise Exception("compartment is not a Compartment object")


Select a threshold on number of occurrences of words
Words below or equal the threshold will be removed from the rest of the work-flow
The filter allows you to remove words below or equal to the occurrence threshold.
Single words are used instead of tags. The reason is that word combinations are far less frequent
and most of the tags would have a occurrence of 1.
A threshold of 2 means that a need to have at least 2 occurrences to stay in the dataset.
This should be used if the dataset is too big to be computed in a reasonable time.
Occurrences
Number of remaining words: {{ ctrl.totalCount() - ctrl.newCount() }}


Welcome to Websockets w/ Flask
This is a demonstration of using WebSockets with Flask and
Kenneth Reitz's Flask-Sockets for the Python server-side
code and Angular.js for the client side code.
Messages are sent to the server and the server responds
back to each one with an 'O HAI!' message.


--- layout: page title: Communicating finance permalink: /resources/communicating-finance/ main_image_path: main_image_caption: aside: true _options: image: width: 1200 height: 1200 resize_style: contain mime_type: image/jpeg _comments: ---
Additional information for Communicating financial management with non-finance people, Practical Action Publishing, 2012


I am a task oriented and passion driven developer with excellent problem-solving skills who thrives on creating robust projects in *MERN Stack* - MongoDB, Express, React Js, Node Js, as well as MySQL database. Please click on my personal website below and explore some of the projects I have developed or contributed to.
New technologies always excite me and using new technologies to convert ideas into functional projects is even more fascinating. For that, I have been dedicated to learning and mastering web development skills just like I did to be licensed as a CPA.
MERN Stack Dental Clinic Patient Management System
Technologies Used:
MongoDb | Express | React Js | node Js | coockie | Bcrypt | ReactStrap | html 5 | css 3 | Javascript| bootstrap4 |
Dent-Soft is a streamlined and standardized electronic system specially designed for multiple users in dental clinics, and it can be used by dentists to maintain daily records of their patients. DS provides user-friendly and comprehensive functionalities, covering treatment plan, schedule appointments, record medical exams, and accounts report management with all the facilities to maintain patient history.
AirBnb like Parking Sharing App
Technologies Used:
html 5 | css 3 | javascript | bootstrap4 | jQuery | node | express | SQL | googleAPI | sequelized npm | session storage | sha-256 encryption | Heroku | JawsDBRestaurant Food Processing App
Technologies Used:
html 5 | css 3 | javascript | bootstrap4 | jQuery | node | express | MySQL | sequelized npm | Heroku | JawsDBStudents and Tutors Platform
Technologies Used:
html 5 | css 3 | Javascript | bootstrap4 | jQuery | Google Firebase | Mozilla API | Anime.js | AJAXLead Contributer and organizer of a parking space sharing platform with MySQL database and MVC models that allows users to post listings and make reservations with account settings.
Technologies Used: html 5 | css 3 | javascript | React Js | node Js | express | MongoDB | Mongoose npm | Google + | sha-256 encryption | Heroku | mLab
GPA: 3.56


Knob is a form component to define number inputs with a dial.
Knob is an input component and used with the standard ngModel directive.
Boundaries are configured with the min and max values whose defaults are 0 and 100 respectively.
Step factor is 1 by default and can be customized with step option.
Default size of the Knob is 100 pixels for width and height, use the size property to customize it per your requirements.
| Name | Type | Default | Description |
|---|---|---|---|
| size | number | 100 | Size of the component in pixels. |
| disabled | boolean | false | When present, it specifies that the component should be disabled. |
| readonly | boolean | false | When present, it specifies that the component value cannot be edited. |
| step | number | null | Step factor to increment/decrement the value. |
| min | number | 0 | Mininum boundary value. |
| max | number | 100 | Maximum boundary value. |
| valueColor | string | null | Background of the value. |
| rangeColor | number | null | Background color of the range. |
| textColor | number | null | Color of the value text. |
| strokeWidth | number | 14 | Width of the knob stroke. |
| showValue | boolean | true | Whether the show the value inside the knob. |
| valueTemplate | string | {value} | Template string of the value. |
| style | object | null | Inline style of the component. |
| styleClass | string | null | Style class of the component. |
| Name | Parameters | Description |
|---|---|---|
| onChange | value: New value | Callback to invoke when the value changes. |
Following is the list of structural style classes, for theming classes visit theming page.
| Name | Element |
|---|---|
| p-knob | Container element. |
| p-knob-text | Text element. |
| p-knob-value | Value element. |
| p-knob-text | Text element. |
None.


js-charts-lab: Experiments with charts in JavaScript
Donut Charts
Donut Chart with ChartJS
Donut Chart with D3.js


|
Imperx Camera Python SDK
<IP_ADDRESS>
|
DeviceInfo class provides the information about the device. More...
#include <IpxCameraApiPy.h>
Inherits PythonExtension< PyDeviceInfo >.
Public Member Functions | |
| Py::Object | GetInterface () |
| This method returns the interface of the device object. More... | |
| Py::Object | GetModel () |
| This method returns the Camera device model name of the device object. More... | |
| Py::Object | GetVendor () |
| This method returns the device vendor name of the device object. More... | |
| Py::Object | GetVersion () |
| This method returns the version of the Camera device. More... | |
| Py::Object | GetSerialNumber () |
| This method returns the serial number of the Camera device. More... | |
| Py::Object | GetDisplayName () |
| This method returns the user readable display name of the Camera device object. More... | |
| Py::Object | GetUserDefinedName () |
| This method returns the user defined name. More... | |
| Py::Object | GetAccessStatus () |
| Returns the device access status. More... | |
| Py::Object | GetIPAddress () |
| Returns the IP address of the GEV camera. More... | |
| Py::Object | GetIPMask () |
| Returns the IP subnet mask of the GEV camera. More... | |
| Py::Object | GetIPGateway () |
| Returns the IP gateway of GEV camera. More... | |
| Py::Object | ForceIP (const Py::Tuple &args) |
| Set the IP address to GEV camera. More... | |
DeviceInfo class provides the information about the device.
The device info class can be used to retrieve information about the device.DeviceInfo class provides the information about the camera device.
The DeviceInfo class can be used to retrieve the information about the device, and to create the IpxCamPy.PyDevice object by PyIpxCameraApi.PyIpxCreateDevice() method call IpxCamPy.PyDeviceInfo Python class is wrapper around C++ class IpxCam::DeviceInfo
| Py::Object IpxCamPy::PyDeviceInfo::GetInterface | ( | ) |
This method returns the interface of the device object.
Returns the IpxCamPy.PyDeviceInterface object for the camera device, associated with the PyDeviceInfo object
| Py::Object IpxCamPy::PyDeviceInfo::GetModel | ( | ) |
This method returns the Camera device model name of the device object.
| Py::Object IpxCamPy::PyDeviceInfo::GetVendor | ( | ) |
This method returns the device vendor name of the device object.
| Py::Object IpxCamPy::PyDeviceInfo::GetVersion | ( | ) |
This method returns the version of the Camera device.
| Py::Object IpxCamPy::PyDeviceInfo::GetSerialNumber | ( | ) |
This method returns the serial number of the Camera device.
| Py::Object IpxCamPy::PyDeviceInfo::GetDisplayName | ( | ) |
This method returns the user readable display name of the Camera device object.
| Py::Object IpxCamPy::PyDeviceInfo::GetUserDefinedName | ( | ) |
This method returns the user defined name.
| Py::Object IpxCamPy::PyDeviceInfo::GetAccessStatus | ( | ) |
Returns the device access status.
This method returns the information about the current access status of the Camera device
0
(AccessStatusUnknown) - The current availability of the device is unknown.1
(AccessStatusReadWrite) - The device is available for Read/Write access2
(AccessStatusReadOnly) - The device is available for Read only access3
(AccessStatusNoAccess) - The device is not available either because it is already open or because it is not reachable.1001
(IpSubnetMismatch) - The device is available, but IP address does not match to the host subnet mask. | Py::Object IpxCamPy::PyDeviceInfo::GetIPAddress | ( | ) |
Returns the IP address of the GEV camera.
This method returns the IP address of the GEV camera, retrieved from DISCOVERY_ACK packet, received from the camera device
| Py::Object IpxCamPy::PyDeviceInfo::GetIPMask | ( | ) |
Returns the IP subnet mask of the GEV camera.
This method returns the IP subnet mask of the GEV camera, retrieved from DISCOVERY_ACK packet, received from the camera device
| Py::Object IpxCamPy::PyDeviceInfo::GetIPGateway | ( | ) |
Returns the IP gateway of GEV camera.
This method returns the IP gateway of the GEV camera, retrieved from DISCOVERY_ACK packet, received from the camera device
| Py::Object IpxCamPy::PyDeviceInfo::ForceIP | ( | const Py::Tuple & | args | ) |
Set the IP address to GEV camera.
This method sets the specified IP address to the GEV camera, using ForceIP GVCP command
| [in] | args[0] | IP Address string to set |
| [in] | args[1] | IP Address subnet mask string |
| [in] | args[2] | Gateway address string |


RELOAD Design InformationRELOAD was built as an open source project on SourceForge. For information on the original design and accompanying documentation see http://www.reload.ac.uk. Older versions of RELOAD are available on SourceForge at http://sourceforge.net/scm/?type=cvs&group_id=76357. Source files for this version of RELOAD are currently only available as part of the downloaded zip file. A future version will be integrated into the SourceForge baseline. RELOAD is a Java application with a Swing GUI. Many 3rd party components are used where applicable. JavaDoc documentation is available in all RELOAD source as well as 3rd party components. RELOAD source is available in the build\src directory. Java Ant build files are available in the build\src\make directory. |


My HTML & CSS skills are brighter than 1,000 suns.
JavaScript es Muy Bien!
I'll put you on cloud 9 with Angular.
I'll npm install all the greatest modules, and hook up your backend.
Components are the future, and I'm right there with you.
Your databases will be normalized, and analyzed with precision.
Throwing in some smooth functionality and animations with jQuery.
Just one of the many Javascript libraries I've played with.
Compile those stylesheets, and make them more stream lined.


Dojo’s widget for providing in-place, popup confirmation to verify user’s actions.
Features
- Appears “in-place” either above or below the action trigger
- Supports an optional underlay to provide additional focus
- Fully customizable trigger and popup content


PTPusherPresenceChannel Class Reference
| Inherits from | PTPusherPrivateChannel : PTPusherChannel : NSObject |
| Declared in | PTPusherChannel.h PTPusherChannel.m |
Overview
A PTPusherPresenceChannel object represents a Pusher presence channel.
Presence channels build on the security of Private channels and expose the additional feature of an awareness of who is subscribed to that channel. This makes it extremely easy to build chat room and “who’s online” type functionality to your application.
Presence channel names always have the prefix of “presence-”.
Unlike the Pusher Javascript client API, PTPusherPresenceChannel does not use events to notify when members are added or removed. Instead, you should assign a presenceDelegate which will be notified of these events.
Tasks
Properties
-
presenceDelegate
The presence delegate for the receiver.
property -
members
Returns the current list of channel members.
property -
– infoForMemberWithID:
Returns a dictionary of member metadata (email, name etc.) for the given member ID.
-
– memberIDs
Returns an array of available member IDs
-
– memberCount
Returns the number of members currently connected to this channel.
Properties
members
Returns the current list of channel members.
@property (nonatomic, readonly) NSDictionary *members
Discussion
Returns the current list of channel members.
Members are stored as a dictionary of dictionaries, keyed on the member’s “user_id” field.
@deprecated Use the methods below for accessing member data.
Declared In
PTPusherChannel.h
presenceDelegate
The presence delegate for the receiver.
@property (nonatomic, assign) id<PTPusherPresenceChannelDelegate> presenceDelegate
Discussion
The presence delegate for the receiver.
The presence delegate will be notified of presence channel-specific events, such as the initial member list on subscription and member added/removed events.
Declared In
PTPusherChannel.h
Instance Methods
infoForMemberWithID:
Returns a dictionary of member metadata (email, name etc.) for the given member ID.
- (NSDictionary *)infoForMemberWithID:(NSString *)memberID
Discussion
Returns a dictionary of member metadata (email, name etc.) for the given member ID.
Declared In
PTPusherChannel.h


This is an EPICS areaDetector driver for reading images from a URL. It can be used to read images from Web cameras, Axis video servers, or simply from a disk file. It reads the images using GraphicsMagick and can thus read images encoded in any of the formats supported by GraphicsMagick, such as JPEG, TIFF, PNG, etc.
The driver simply reads images from the specified URL at the rate determined by the AcquirePeriod. Web cameras and Axis video servers have a URL address from which the current image can be read. There are often several addresses for different image sizes.
This driver inherits from ADDriver. It implements many of the parameters asynNDArrayDriver.h and in ADArrayDriver.h. It also implements a number of parameters that are specific to the URL driver.The URL driver class documentation describes this class in detail.
The following table describes how the URL driver implements some of the standard driver parameters.
| Implementation of Parameters in asynNDArrayDriver.h and ADDriver.h, and EPICS Record Definitions in ADBase.template and NDFile.template | ||
| Parameter index variable | EPICS record name | Description |
|---|---|---|
| ADAcquirePeriod | $(P)$(R)AcquirePeriod | This controls the period between reading images. The driver attempts to collected images at this rate determined by this value. NOTE: If this value is set to 0 or too small a value can result in the driver using 100% of the CPU and becoming unresponsive to EPICS. |
The URL driver implements the following parameters in addition to those in asynNDArrayDriver.h and ADDriver.h.
| Parameter Definitions in URLDriver.cpp and EPICS Record Definitions in URLDriver.template | ||||||
| Parameter index variable | asyn interface | Access | Description | drvInfo string | EPICS record name | EPICS record type |
|---|---|---|---|---|---|---|
| URLName | asynOctet | r/w | The name of the URL to read images from. There are 10 output records to control the URL name. | URL_NAME |
$(P)$(R)URLName[1-10] $(P)$(R)URLName_RBV |
waveform waveform |
The URLs for Web cameras and video servers are typically long strings, which are difficult to remember and to type. Thus, for convenience there is an EPICS mbbo record which is used to select 1 of 10 URLs. This allows easily switching between cameras, etc. The mbbo menu string fields (e.g. ZRST, ONST, etc.) can be edited to supply a useful short description of each camera (e.g. "Sample camera"), and the corresponding URL waveform record will store the actual URL. Both are in save/restore. Note that when the mbbo menu string fields are edited then one will need to close the main URLDriver.adl medm screen and reopen it to see the new menu choices. This is due to restrictions in medm and Channel Access.
The URL driver does not support many of the standard driver parameters because it does not provide control of image acquisition. Thus AcquireTime, binning, region to read out, trigger modes, etc. are not supported.
The URL driver is created with the URLDriverConfig command, either from C/C++ or from the EPICS IOC shell.
int URLDriverConfig(const char *portName, int maxBuffers, size_t maxMemory, int priority, int stackSize)
For details on the meaning of the parameters to this function refer to the detailed documentation on the URLDirverConfig function in the URLDriver.cpp documentation and in the documentation for the constructor for the URLDriver class.
There an example IOC boot directory and startup script (iocBoot/iocURL/st.cmd) provided with areaDetector.
The following show the MEDM screens that are used to control the URL driver. Note that the general purpose screen ADBase.adl can be used, but it exposes many controls that are not applicable to the URL driver, and lacks some fields that are important for the URL driver.
URLDriver.adl
is the main screen used to control the URL driver.
URLDriverSetup.adl
is the screen used to configure the mbbo menu choices
and the URL strings for up to 10 preset URLs. Note that when a new value is entered
into any of the URL string waveform records that URL will be immediately displayed,
even if it is not the URL currently selected in the mbbo menu.
The following is an ImageJ viewer window looking at the URL driver connected to analog camera through an Axis video server.