Gearpump Security Guide
Until now Gearpump supports deployment in a secured Yarn cluster and writing to secured HBase, where “secured” means Kerberos enabled. Further security related feature is in progress.
How to launch Gearpump in a secured Yarn cluster
Suppose user gear
will launch gearpump on YARN, then the corresponding principal gear
should be created in KDC server.
-
Create Kerberos principal for user
gear
, on the KDC machinesudo kadmin.local
In the kadmin.local or kadmin shell, create the principal
kadmin: addprinc<EMAIL_ADDRESS>Remember that user
gear
must exist on every node of Yarn. - Upload the
gearpump-2.11-0.7.2.zip
to remote HDFS Folder, suggest to put it under/usr/lib/gearpump/gearpump-2.11-0.7.2.zip
-
Create HDFS folder /user/gear/, make sure all read-write rights are granted for user
gear
drwxr-xr-x - gear gear 0 2015-11-27 14:03 /user/gear
- Put the YARN configurations under classpath.
Before calling “yarnclient launch”, make sure you have put all yarn configuration files under classpath.
Typically, you can just copy all files under
$HADOOP_HOME/etc/hadoop
from one of the YARN cluster machine toconf/yarnconf
of gearpump.$HADOOP_HOME
points to the Hadoop installation directory. -
Get Kerberos credentials to sumbit the job:
kinit<EMAIL_ADDRESS>Here you can login with keytab or password. Please refer Kerberos’s document for details.
yarnclient launch -package /usr/lib/gearpump/gearpump-2.11-0.7.2.zip
How to write to secured HBase
When the remote HBase is security enabled, a kerberos keytab and the corresponding principal name need to be
provided for the gearpump-hbase connector. Specifically, the UserConfig
object passed into the HBaseSink should contain
{("gearpump.keytab.file", "\\$keytab"), ("gearpump.kerberos.principal", "\\$principal")}
. example code of writing to secured HBase:
val principal =<EMAIL_ADDRESS>val keytabContent = Files.toByteArray(new File("path_to_keytab_file))
val appConfig = UserConfig.empty
.withString("gearpump.kerberos.principal", principal)
.withBytes("gearpump.keytab.file", keytabContent)
val sink = new HBaseSink(appConfig, "$tableName")
val sinkProcessor = DataSinkProcessor(sink, "$sinkNum")
val split = Processor[Split]("$splitNum")
val computation = split ~> sinkProcessor
val application = StreamApplication("HBase", Graph(computation), UserConfig.empty)
Note here the keytab file set into config should be a byte array.
Future Plan
More external components support
- HDFS
- Kafka
Authentication(Kerberos)
Since Gearpump’s Master-Worker structure is similar to HDFS’s NameNode-DataNode and Yarn’s ResourceManager-NodeManager, we may follow the way they use.
- User creates kerberos principal and keytab for Gearpump.
- Deploy the keytab files to all the cluster nodes.
- Configure Gearpump’s conf file, specify kerberos principal and local keytab file localtion.
- Start Master and Worker.
Every application has a submitter/user. We will separate the application from different users, like different log folders for different applications. Only authenticated users can submit the application to Gearpump’s Master.
Authorization
Hopefully more on this soon


Transitivity of Leibniz equality
Prove manually the following theorem (already in Coq's base of
theorems) :
forall (A:Set) (a b c:A), a = b -> b = c -> a = c.
- Applying explicitely eq_ind,
- Using Rewrite
Solution
Look at this file
Going home
Pierre Castéran


This package contains various tools for making unit testing much easier.These are discussed throughout the book.


REVIEW: CHAIN REACTION A film review by Michael Redman Copyright 1996 Michael Redman
*1/2 (out of ****)
For some reason director Andrew Davis decided to remake his own movie "The Fugitive" and had the brainstorm to cast Keanu Reeves in the Harrison Ford role. This must be why he's making the big bucks out in Hollywood while the rest of us are slaving away for peanuts.
Eddie Kasalivich, a nice Chicago boy genius, is a grad student techie working on the mysterious Hydrogen Energy Project (mysterious partially because the science doesn't make much sense) when things start to go a little wrong. Immediately after they finally get the thing to work, the chief scientist is murdered and the project blows up, leveling eight blocks of the Windy City. Of course Eddie is on the run from the FBI because they think he is selling secrets to whoever our enemy is nowadays, but it's really the one-armed man...no, wait, that's the other film.
Blazing through this non-start adventure film, Reeves looks as uninvolved as possible, which appears to be the extent of his acting ability. There are a few good scenes -- the explosion in Chicago is well done, although you've seen that on the previews already -- but most of the so-called action scenes will leave you begging for less. The ice boat on the frozen lake sequence is a masterpiece of bad logic, implausibility and poor cinematography.
As various organizations join the chase, the main theme of the film becomes which governmental agency is the most evil: the Chicago Cops, the FBI, the CIA or the CIA Front. Morgan Freeman is the best bad guy/good guy (Fred Ward is definitely not Tommy Lee Jones) owing at least partially to his god-like voice. Although Freeman takes his character as far as possible, we're just talking a short drive in the country.
Davis says that the film was made up as they went along. I believe it. Of all the "Destroy The Cities" films out this summer, this is one that should have been saved for the late show along with the Godzilla movies.
[This appeared in "The Bloomington Voice", Bloomington, Indiana, 8/8/96. Michael Redman can be reached at<EMAIL_ADDRESS>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


|
ovs all
|
#include <rstp-common.h>
Data Fields | |
| char * | name |
| struct ovs_refcount | ref_cnt |
| void(* | send_bpdu )(struct dp_packet *bpdu, void *port_aux, void *rstp_aux) |
| void * | aux |
| bool | root_changed |
| void * | old_root_aux |
| void * | new_root_aux |
| struct ovs_list node rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| bool changes rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| enum port_role_selection_state_machine port_role_selection_sm_state rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| rstp_identifier address rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| uint16_t priority rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| uint32_t ageing_time rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| enum rstp_force_protocol_version force_protocol_version rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| uint16_t bridge_forward_delay rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| uint16_t bridge_hello_time rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| uint16_t bridge_max_age rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| uint16_t migrate_time rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| uint16_t transmit_hold_count rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| bool begin rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| struct rstp_priority_vector root_priority rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| struct rstp_times bridge_times rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| struct rstp_priority_vector bridge_priority rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| rstp_identifier bridge_identifier rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| struct rstp_times root_times rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| uint16_t root_port_id rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| bool rstp_version rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| bool stp_version rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| struct hmap ports rstp::OVS_GUARDED_BY | ( | rstp_mutex | ) |
| void* rstp::aux |
| char* rstp::name |
| void* rstp::new_root_aux |
| void* rstp::old_root_aux |
| struct ovs_refcount rstp::ref_cnt |
| bool rstp::root_changed |


Emergency (EMCY) objects are triggered by the occurrence of a device internal error situation and are transmitted from an emergency producer on the device. Emergency objects are suitable for interrupt type error alerts. An emergency object is transmitted only once per 'error event'. As long as no new errors occur on a device no further emergency objects must be transmitted. The emergency object may be received by zero or more emergency consumers. The reaction on the emergency consumer(s) is not specified.
◆ ComEmcyConsEnable()
| ComStatus_tv ComEmcyConsEnable |
( |
uint8_t |
ubNetV, |
|
|
uint8_t |
ubNodeIdV, |
|
|
uint8_t |
ubEnableV |
|
) |
| |
- Parameters
-
| [in] | ubNetV | - CANopen Network channel |
| [in] | ubNodeIdV | - Node-ID value of CANopen device |
| [in] | ubEnableV | - Enable/Disable EMCY service |
- Returns
- eCOM_ERR_NONE on success, negative ComErr_e value on failure
This function enables (ubEnableV = 1) or disables (ubEnableV = 0) the EMCY consumer service for a Node ID given by ubNodeIdV.
◆ ComEmcyConsEventReceive()
| void ComEmcyConsEventReceive |
( |
uint8_t |
ubNetV, |
|
|
uint8_t |
ubNodeIdV |
|
) |
| |
- Parameters
-
| [in] | ubNetV | - CANopen Network channel |
| [in] | ubNodeIdV | - Node-ID value of CANopen device |
- Returns
- eCOM_ERR_NONE on success, negative ComErr_e value on failure
The function is called by the CANopen Master stack upon reception of an Emergency message (EMCY). The Emergency message has to be configured by ComEmcyConsEnable() in advance.
◆ ComEmcyConsGetData()
| ComStatus_tv ComEmcyConsGetData |
( |
uint8_t |
ubNetV, |
|
|
uint8_t |
ubNodeIdV, |
|
|
uint8_t * |
pubDataV |
|
) |
| |
- Parameters
-
| [in] | ubNetV | - CANopen Network channel |
| [in] | ubNodeIdV | - Node-ID value of CANopen device |
| [in] | pubDataV | - Pointer to data |
- Returns
- eCOM_ERR_NONE on success, negative ComErr_e value on failure
The functions reads the data of the EMCY message from a CANopen device using the Node-ID value ubNodeIdV. The size of the data buffer is 8 bytes.
◆ ComEmcyEnable()
| ComStatus_tv ComEmcyEnable |
( |
uint8_t |
ubNetV, |
|
|
uint8_t |
ubEnableV |
|
) |
| |
- Parameters
-
| [in] | ubNetV | - CANopen Network channel |
| [in] | ubEnableV | - Enable/Disable EMCY service |
- Returns
- eCOM_ERR_NONE on success, negative ComErr_e value on failure
This function enables (ubEnableV = 1) or disables (ubEnableV = 0) the EMCY service of the CANopen Master. The EMCY service is enabled by default.
◆ ComEmcyGetId()
| ComStatus_tv ComEmcyGetId |
( |
uint8_t |
ubNetV, |
|
|
uint32_t * |
pulIdV |
|
) |
| |
- Parameters
-
| [in] | ubNetV | - CANopen Network channel |
| [out] | pulIdV | - Pointer to identifier value |
- Returns
- eCOM_ERR_NONE on success, negative ComErr_e value on failure
- See also
- ComEmcySetId()
This function reads the identifier value used by the EMCY service.
◆ ComEmcyGetInhibit()
| ComStatus_tv ComEmcyGetInhibit |
( |
uint8_t |
ubNetV, |
|
|
uint32_t * |
pulTimeV |
|
) |
| |
- Parameters
-
| [in] | ubNetV | - CANopen Network channel |
| [out] | pulTimeV | - Pointer to EMCY inhibit time |
- Returns
- eCOM_ERR_NONE on success, negative ComErr_e value on failure
- See also
- ComEmcySetInhibit()
This function retrieves the inhibit time between two subsequent EMCY messages. The pointer pulTimeV points to a variable that holds the time value in multiples of one microsecond.


java.lang.Object com.immersion.uhl.ImmVibe
public class ImmVibe
Defines general constants and methods.
| Field Summary | |
|---|---|
static int |
VIBE_BUILTINEFFECT_LONG
Effect index for the long effect in the API's built-in IVT file. |
static int |
VIBE_BUILTINEFFECT_LONG_ON_LONG_OFF
Effect index for the long-on-long-off effect in the API's built-in IVT file. |
static int |
VIBE_BUILTINEFFECT_LONG_ON_MEDIUM_OFF
Effect index for the long-on-medium-off effect in the API's built-in IVT file. |
static int |
VIBE_BUILTINEFFECT_LONG_ON_SHORT_OFF
Effect index for the long-on-short-off effect in the API's built-in IVT file. |
static int |
VIBE_BUILTINEFFECT_MEDIUM
Effect index for the medium effect in the API's built-in IVT file. |
static int |
VIBE_BUILTINEFFECT_MEDIUM_ON_LONG_OFF
Effect index for the medium-on-long-off effect in the API's built-in IVT file. |
static int |
VIBE_BUILTINEFFECT_MEDIUM_ON_MEDIUM_OFF
Effect index for the medium-on-medium-off effect in the API's built-in IVT file. |
static int |
VIBE_BUILTINEFFECT_MEDIUM_ON_SHORT_OFF
Effect index for the medium-on-short-off effect in the API's built-in IVT file. |
static int |
VIBE_BUILTINEFFECT_SHORT
Effect index for the short effect in the API's built-in IVT file. |
static int |
VIBE_BUILTINEFFECT_SHORT_ON_LONG_OFF
Effect index for the short-on-long-off effect in the API's built-in IVT file. |
static int |
VIBE_BUILTINEFFECT_SHORT_ON_MEDIUM_OFF
Effect index for the short-on-medium-off effect in the API's built-in IVT file. |
static int |
VIBE_BUILTINEFFECT_SHORT_ON_SHORT_OFF
Effect index for the short-on-short-off effect in the API's built-in IVT file. |
static int |
VIBE_DEFAULT_STYLE
Default effect style. |
static int |
VIBE_DEFAULT_WAVETYPE
Default wave type. |
static int |
VIBE_DEVACTUATORTYPE_BLDC
Bush-Less Direct Current (BLDC) actuator type. |
static int |
VIBE_DEVACTUATORTYPE_ERM
Eccentric Rotating Mass (ERM) actuator type. |
static int |
VIBE_DEVACTUATORTYPE_LRA
Linear Resonant (LR) actuator type. |
static int |
VIBE_DEVACTUATORTYPE_PIEZO
Piezo-electric actuator type. |
static int |
VIBE_DEVCAPTYPE_ACTUATOR_TYPE
Device capability type to get the acutator type. |
static int |
VIBE_DEVCAPTYPE_APIVERSIONNUMBER
Device capability type to get the API version number. |
static int |
VIBE_DEVCAPTYPE_DEVICE_CATEGORY
Device capability type to get the device category. |
static int |
VIBE_DEVCAPTYPE_DEVICE_NAME
Device capability type to get the device name. |
static int |
VIBE_DEVCAPTYPE_EDITION_LEVEL
Device capability type to get the API edition level. |
static int |
VIBE_DEVCAPTYPE_HANDSET_INDEX
Device capability type to get the handset index. |
static int |
VIBE_DEVCAPTYPE_MAX_EFFECT_DURATION
Device capability type to get the maximum finite duration in milliseconds for simple effects. |
static int |
VIBE_DEVCAPTYPE_MAX_ENVELOPE_TIME
Device capability type to get the maximum attack time or fade time in milliseconds for effect envelopes of simple effects. |
static int |
VIBE_DEVCAPTYPE_MAX_IVT_SIZE_TETHERED
Device capability type to get the maximum size in bytes for IVT files that can be played on a tethered device. |
static int |
VIBE_DEVCAPTYPE_MAX_NESTED_REPEATS
Device capability type to get the maximum number of nested repeat bars supported for Timeline effects. |
static int |
VIBE_DEVCAPTYPE_MAX_PERIOD
Device capability type to get the maximum period for Periodic effects. |
static int |
VIBE_DEVCAPTYPE_MIN_PERIOD
Device capability type to get the minimum period for Periodic effects. |
static int |
VIBE_DEVCAPTYPE_NUM_ACTUATORS
Device capability type to get the number of actuators present on the device. |
static int |
VIBE_DEVCAPTYPE_NUM_EFFECT_SLOTS
Device capability type to get the number of effect slots present on the device. |
static int |
VIBE_DEVCAPTYPE_SUPPORTED_EFFECTS
Device capability type to get the supported effect types. |
static int |
VIBE_DEVCAPTYPE_SUPPORTED_STYLES
Device capability type to get the supported effect styles. |
static int |
VIBE_DEVCAPTYPE_SUPPORTED_WAVE_TYPES
Device capability type to get the supported wave types. |
static int |
VIBE_DEVICECATEGORY_COMPOSITE
Composite device category. |
static int |
VIBE_DEVICECATEGORY_EMBEDDED
Embedded device category. |
static int |
VIBE_DEVICECATEGORY_TETHERED
Tethered device category. |
static int |
VIBE_DEVICECATEGORY_VIRTUAL
Virtual device category. |
static int |
VIBE_DEVICESTATE_ATTACHED
Device state indicating that the device is attached to the system. |
static int |
VIBE_DEVICESTATE_BUSY
Device state indicating that the device is busy playing effects. |
static int |
VIBE_DEVPRIORITY_DEFAULT
Default device priority. |
static int |
VIBE_DEVPROPTYPE_DISABLE_EFFECTS
Device property type to enable/disable effects associated with a device handle. |
static int |
VIBE_DEVPROPTYPE_LICENSE_KEY
Device property type to set the OEM licence key associated with a device handle. |
static int |
VIBE_DEVPROPTYPE_MASTERSTRENGTH
Device property type to get/set the overall master strength for all effects associated with all device handles. |
static int |
VIBE_DEVPROPTYPE_PRIORITY
Device property type to get/set the priority of effects associated with a device handle. |
static int |
VIBE_DEVPROPTYPE_STRENGTH
Device property type to get/set the overall strength for all effects associated with a device handle. |
static int |
VIBE_EDITION_3000
3000 series edition level. |
static int |
VIBE_EDITION_4000
4000 series edition level. |
static int |
VIBE_EDITION_5000
5000 series edition level. |
static int |
VIBE_EFFECT_STATE_NOT_PLAYING
Effect state indicating that the effect is not playing and not paused. |
static int |
VIBE_EFFECT_STATE_PAUSED
Effect state indicating that the effect is paused. |
static int |
VIBE_EFFECT_STATE_PLAYING
Effect state indicating that the effect is playing. |
static int |
VIBE_EFFECT_TYPE_MAGSWEEP
MagSweep effect type. |
static int |
VIBE_EFFECT_TYPE_PERIODIC
Periodic effect type. |
static int |
VIBE_EFFECT_TYPE_STREAMING
Streaming effect type. |
static int |
VIBE_EFFECT_TYPE_TIMELINE
Timeline effect type. |
static int |
VIBE_EFFECT_TYPE_WAVEFORM
Waveform effect type. |
static int |
VIBE_ELEMTYPE_MAGSWEEP
MagSweep effect element of a Timeline effect. |
static int |
VIBE_ELEMTYPE_PERIODIC
Periodic effect element of a Timeline effect. |
static int |
VIBE_ELEMTYPE_REPEAT
Repeat Repeat element of a Timeline effect. |
static int |
VIBE_ELEMTYPE_WAVEFORM
Waveform effect element of a Timeline effect. |
static int |
VIBE_INVALID_DEVICE_HANDLE_VALUE
Invalid device handle. |
static int |
VIBE_INVALID_EFFECT_HANDLE_VALUE
Invalid effect handle. |
static int |
VIBE_INVALID_INDEX
Invalid index. |
static int |
VIBE_MAGSWEEP_EFFECT_SUPPORT
MagSweep effect type support bit flag. |
static int |
VIBE_MAX_CAPABILITY_STRING_LENGTH
Maximum device capability string length. |
static int |
VIBE_MAX_DEV_DEVICE_PRIORITY
Maximum device priority for 3rd-party applications. |
static int |
VIBE_MAX_DEVICE_NAME_LENGTH
Maximum device name length. |
static int |
VIBE_MAX_EFFECT_NAME_LENGTH
Maximum effect name length. |
static int |
VIBE_MAX_LOGICAL_DEVICE_COUNT
Maximum number of actuators that can be supported by a composite device. |
static int |
VIBE_MAX_MAGNITUDE
Maximum force magnitude. |
static int |
VIBE_MAX_OEM_DEVICE_PRIORITY
Maximum device priority for OEM applications. |
static int |
VIBE_MAX_PROPERTY_STRING_LENGTH
Maximum device property string length. |
static int |
VIBE_MAX_STREAMING_SAMPLE_SIZE
Maximum streaming sample size. |
static int |
VIBE_MIN_DEVICE_PRIORITY
Minimum device priority. |
static int |
VIBE_MIN_MAGNITUDE
Minimum force magnitude. |
static int |
VIBE_PERIOD_RESOLUTION_MICROSECOND
Microsecond period bit flag. |
static int |
VIBE_PERIODIC_EFFECT_SUPPORT
Periodic effect type support bit flag. |
static int |
VIBE_REPEAT_COUNT_INFINITE
Infinite repeat count. |
static int |
VIBE_STREAMING_EFFECT_SUPPORT
Streaming effect type support bit flag. |
static int |
VIBE_STYLE_MASK
Effect style mask. |
static int |
VIBE_STYLE_SHARP
Sharp effect style. |
static int |
VIBE_STYLE_SHARP_SUPPORT
Sharp effect style support bit flag. |
static int |
VIBE_STYLE_SMOOTH
Smooth effect style. |
static int |
VIBE_STYLE_SMOOTH_SUPPORT
Smooth effect style support bit flag. |
static int |
VIBE_STYLE_STRONG
Strong effect style. |
static int |
VIBE_STYLE_STRONG_SUPPORT
Strong effect style support bit flag. |
static int |
VIBE_STYLE_SUPPORT_MASK
Effect style support mask. |
static int |
VIBE_TIME_INFINITE
Infinite time. |
static int |
VIBE_TIMELINE_EFFECT_SUPPORT
Timeline effect type support bit flag. |
static int |
VIBE_WAVEFORM_EFFECT_SUPPORT
Waveform effect type support bit flag. |
static int |
VIBE_WAVETYPE_MASK
Periodic effect wave type mask. |
static int |
VIBE_WAVETYPE_SAWTOOTHDOWN
Sawtooth down wave type. |
static int |
VIBE_WAVETYPE_SAWTOOTHDOWN_SUPPORT
Sawtooth down wave type support bit flag. |
static int |
VIBE_WAVETYPE_SAWTOOTHUP
Sawtooth up wave type. |
static int |
VIBE_WAVETYPE_SAWTOOTHUP_SUPPORT
Sawtooth up wave type support bit flag. |
static int |
VIBE_WAVETYPE_SHIFT
Periodic effect wave type shift. |
static int |
VIBE_WAVETYPE_SINE
Sine wave type. |
static int |
VIBE_WAVETYPE_SINE_SUPPORT
Sine wave type support bit flag. |
static int |
VIBE_WAVETYPE_SQUARE
Square wave type. |
static int |
VIBE_WAVETYPE_SQUARE_SUPPORT
Square wave type support bit flag. |
static int |
VIBE_WAVETYPE_SUPPORT_MASK
Wave type support mask. |
static int |
VIBE_WAVETYPE_TRIANGLE
Triangle wave type. |
static int |
VIBE_WAVETYPE_TRIANGLE_SUPPORT
Triangle wave type support bit flag. |
| Method Summary | |
|---|---|
void |
deleteIVTFile(java.lang.String pathName)
Removes an IVT file from persistent storage. |
byte[] |
getBuiltInEffects()
Retrieves the built-in IVT effect data. |
int |
getDeviceCount()
Gets the number of available actuators. |
static ImmVibe |
getInstance(Context context)
Gets the single instance of this class. |
| Methods inherited from class java.lang.Object |
|---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public static final int VIBE_DEVCAPTYPE_DEVICE_CATEGORY
Device.getCapabilityInt32
.
The return value will be one of
public static final int VIBE_DEVCAPTYPE_MAX_NESTED_REPEATS
Device.getCapabilityInt32
.
public static final int VIBE_DEVCAPTYPE_NUM_ACTUATORS
Device.getCapabilityInt32
.
public static final int VIBE_DEVCAPTYPE_ACTUATOR_TYPE
Device.getCapabilityInt32
.
The return value will be one of
public static final int VIBE_DEVCAPTYPE_NUM_EFFECT_SLOTS
Device.getCapabilityInt32
.
public static final int VIBE_DEVCAPTYPE_SUPPORTED_STYLES
Device.getCapabilityInt32
. The return
value will be a bitwise ORing of
public static final int VIBE_DEVCAPTYPE_MIN_PERIOD
Device.getCapabilityInt32
.
public static final int VIBE_DEVCAPTYPE_MAX_PERIOD
Device.getCapabilityInt32
.
public static final int VIBE_DEVCAPTYPE_MAX_EFFECT_DURATION
Device.getCapabilityInt32
.
public static final int VIBE_DEVCAPTYPE_SUPPORTED_EFFECTS
Device.getCapabilityInt32
. The return
value will be a bitwise ORing of
VIBE_MAGSWEEP_EFFECT_SUPPORT
VIBE_PERIODIC_EFFECT_SUPPORT
VIBE_TIMELINE_EFFECT_SUPPORT
VIBE_STREAMING_EFFECT_SUPPORT
VIBE_WAVEFORM_EFFECT_SUPPORT
public static final int VIBE_DEVCAPTYPE_DEVICE_NAME
Device.getCapabilityString
. The maximum
device name length will be VIBE_MAX_DEVICE_NAME_LENGTH
.
public static final int VIBE_DEVCAPTYPE_MAX_ENVELOPE_TIME
Device.getCapabilityInt32
.
public static final int VIBE_DEVCAPTYPE_APIVERSIONNUMBER
Device.getCapabilityInt32
. The return
value format is OxMMNNSPBB, where
public static final int VIBE_DEVCAPTYPE_MAX_IVT_SIZE_TETHERED
Device.getCapabilityInt32
.
public static final int VIBE_DEVCAPTYPE_EDITION_LEVEL
Device.getCapabilityInt32
. The return
value will be one of
public static final int VIBE_DEVCAPTYPE_SUPPORTED_WAVE_TYPES
Device.getCapabilityInt32
. The return
value will be a bitwise ORing of
VIBE_WAVETYPE_SQUARE_SUPPORT
VIBE_WAVETYPE_TRIANGLE_SUPPORT
VIBE_WAVETYPE_SINE_SUPPORT
VIBE_WAVETYPE_SAWTOOTHUP_SUPPORT
VIBE_WAVETYPE_SAWTOOTHDOWN_SUPPORT
public static final int VIBE_DEVCAPTYPE_HANDSET_INDEX
Device.getCapabilityInt32
. The return
value will always be zero on embedded devices.
public static final int VIBE_DEVPROPTYPE_LICENSE_KEY
Device.setPropertyString
. This property
is write-only. It can be set to an OEM license key issued by Immersion in
order to use higher priority levels not normally available to
applications, or to set the master strength. On devices with API version
3.2 or lower, applications must always set this property in order to
unlock the ability to play effects.
public static final int VIBE_DEVPROPTYPE_PRIORITY
Device.getPropertyInt32
and
Device.setPropertyInt32
.
Different applications can use different priorities on the same device.
The priority determines which application's effects are played when
multiple applications attempt to play effects at the same time. The
default priority is VIBE_MIN_DEVICE_PRIORITY
. Priority values
range from VIBE_MIN_DEVICE_PRIORITY
to
VIBE_MAX_DEV_DEVICE_PRIORITY
, or from
VIBE_MIN_DEVICE_PRIORITY
to
VIBE_MAX_OEM_DEVICE_PRIORITY
after calling
Device.setPropertyString
with the
VIBE_DEVPROPTYPE_LICENSE_KEY
device property type to set an OEM license key.
public static final int VIBE_DEVPROPTYPE_DISABLE_EFFECTS
Device.getPropertyBool
and
Device.setPropertyBool
.
public static final int VIBE_DEVPROPTYPE_STRENGTH
Device.getPropertyInt32
and
Device.setPropertyInt32
. The strength
varies from VIBE_MIN_MAGNITUDE
(equivalent to mute) to
VIBE_MAX_MAGNITUDE
(full strength). The default value is
VIBE_MAX_MAGNITUDE
. The strength only applies to the device
instance passed to
Device.getPropertyInt32
or
Device.setPropertyInt32
, not to other
device instances held by the same or a different application. Modifying
the strength does not affect currently playing effects, only effects
played or modified after calling
Device.setPropertyInt32
to use a new
strength.
public static final int VIBE_DEVPROPTYPE_MASTERSTRENGTH
Device.getPropertyInt32
and
Device.setPropertyInt32
.
The master strength varies from VIBE_MIN_MAGNITUDE
(equivalent
to mute) to VIBE_MAX_MAGNITUDE
(full strength). The default
value is VIBE_MAX_MAGNITUDE
. The master strength applies to all
effects on the device, including effects from other applications.
Modifying the master strength immediately affects currently playing
effects and subsequently played or modified effects. Before changing the
master strength, applications must call
Device.setPropertyString
with the
VIBE_DEVPROPTYPE_LICENSE_KEY
device property type to set an OEM license key,
and Device.setPropertyInt32
with the
VIBE_DEVPROPTYPE_PRIORITY
device property type to associate the maximum OEM
priority (VIBE_MAX_OEM_DEVICE_PRIORITY
) with the device handle.
public static final int VIBE_DEVICECATEGORY_VIRTUAL
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_DEVICE_CATEGORY
device capability type.
public static final int VIBE_DEVICECATEGORY_EMBEDDED
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_DEVICE_CATEGORY
device capability type.
public static final int VIBE_DEVICECATEGORY_TETHERED
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_DEVICE_CATEGORY
device capability type.
public static final int VIBE_DEVICECATEGORY_COMPOSITE
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_DEVICE_CATEGORY
device capability type.
public static final int VIBE_DEVACTUATORTYPE_ERM
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_ACTUATOR_TYPE
device capability type.
public static final int VIBE_DEVACTUATORTYPE_BLDC
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_ACTUATOR_TYPE
device capability type.
public static final int VIBE_DEVACTUATORTYPE_LRA
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_ACTUATOR_TYPE
device capability type.
public static final int VIBE_DEVACTUATORTYPE_PIEZO
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_ACTUATOR_TYPE
device capability type.
public static final int VIBE_STYLE_MASK
public static final int VIBE_STYLE_SMOOTH
Device.playMagSweepEffect
Device.playMagSweepEffectDelayed
Device.playPeriodicEffect
Device.playPeriodicEffectDelayed
EffectHandle.modifyPlayingMagSweepEffect
EffectHandle.modifyPlayingPeriodicEffect
public static final int VIBE_STYLE_STRONG
Device.playMagSweepEffect
Device.playMagSweepEffectDelayed
Device.playPeriodicEffect
Device.playPeriodicEffectDelayed
EffectHandle.modifyPlayingMagSweepEffect
EffectHandle.modifyPlayingPeriodicEffect
public static final int VIBE_STYLE_SHARP
Device.playMagSweepEffect
Device.playMagSweepEffectDelayed
Device.playPeriodicEffect
Device.playPeriodicEffectDelayed
EffectHandle.modifyPlayingMagSweepEffect
EffectHandle.modifyPlayingPeriodicEffect
public static final int VIBE_DEFAULT_STYLE
Device.playMagSweepEffect
Device.playMagSweepEffectDelayed
Device.playPeriodicEffect
Device.playPeriodicEffectDelayed
EffectHandle.modifyPlayingMagSweepEffect
EffectHandle.modifyPlayingPeriodicEffect
public static final int VIBE_STYLE_SUPPORT_MASK
public static final int VIBE_STYLE_SMOOTH_SUPPORT
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_SUPPORTED_STYLES
device capability type.
public static final int VIBE_STYLE_STRONG_SUPPORT
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_SUPPORTED_STYLES
device capability type.
public static final int VIBE_STYLE_SHARP_SUPPORT
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_SUPPORTED_STYLES
device capability type.
public static final int VIBE_WAVETYPE_SHIFT
public static final int VIBE_WAVETYPE_MASK
public static final int VIBE_WAVETYPE_SQUARE
public static final int VIBE_WAVETYPE_TRIANGLE
public static final int VIBE_WAVETYPE_SINE
public static final int VIBE_WAVETYPE_SAWTOOTHUP
public static final int VIBE_WAVETYPE_SAWTOOTHDOWN
public static final int VIBE_DEFAULT_WAVETYPE
public static final int VIBE_WAVETYPE_SUPPORT_MASK
public static final int VIBE_WAVETYPE_SQUARE_SUPPORT
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_SUPPORTED_WAVE_TYPES
device capability type.
public static final int VIBE_WAVETYPE_TRIANGLE_SUPPORT
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_SUPPORTED_WAVE_TYPES
device capability type.
public static final int VIBE_WAVETYPE_SINE_SUPPORT
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_SUPPORTED_WAVE_TYPES
device capability type.
public static final int VIBE_WAVETYPE_SAWTOOTHUP_SUPPORT
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_SUPPORTED_WAVE_TYPES
device capability type.
public static final int VIBE_WAVETYPE_SAWTOOTHDOWN_SUPPORT
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_SUPPORTED_WAVE_TYPES
device capability type.
public static final int VIBE_EFFECT_TYPE_PERIODIC
IVTBuffer.getEffectType
.
public static final int VIBE_EFFECT_TYPE_MAGSWEEP
IVTBuffer.getEffectType
.
public static final int VIBE_EFFECT_TYPE_TIMELINE
IVTBuffer.getEffectType
.
public static final int VIBE_EFFECT_TYPE_STREAMING
public static final int VIBE_EFFECT_TYPE_WAVEFORM
IVTBuffer.getEffectType
.
public static final int VIBE_PERIODIC_EFFECT_SUPPORT
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_SUPPORTED_EFFECTS
device capability type.
public static final int VIBE_MAGSWEEP_EFFECT_SUPPORT
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_SUPPORTED_EFFECTS
device capability type.
public static final int VIBE_TIMELINE_EFFECT_SUPPORT
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_SUPPORTED_EFFECTS
device capability type.
public static final int VIBE_STREAMING_EFFECT_SUPPORT
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_SUPPORTED_EFFECTS
device capability type.
public static final int VIBE_WAVEFORM_EFFECT_SUPPORT
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_SUPPORTED_EFFECTS
device capability type.
public static final int VIBE_EDITION_3000
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_EDITION_LEVEL
device capability type.
public static final int VIBE_EDITION_4000
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_EDITION_LEVEL
device capability type.
public static final int VIBE_EDITION_5000
Device.getCapabilityInt32
for the
VIBE_DEVCAPTYPE_EDITION_LEVEL
device capability type.
public static final int VIBE_MIN_DEVICE_PRIORITY
Device.getPropertyInt32
or used with
Device.setPropertyInt32
for the
VIBE_DEVPROPTYPE_PRIORITY
device property type.
public static final int VIBE_MAX_DEV_DEVICE_PRIORITY
Device.getPropertyInt32
or used with
Device.setPropertyInt32
for the
VIBE_DEVPROPTYPE_PRIORITY
device property type.
public static final int VIBE_MAX_OEM_DEVICE_PRIORITY
Device.getPropertyInt32
or used with
Device.setPropertyInt32
for the
VIBE_DEVPROPTYPE_PRIORITY
device property type. This priority
level can be set only after calling
Device.setPropertyString
with the
VIBE_DEVPROPTYPE_LICENSE_KEY
device property type to set an OEM license key.
public static final int VIBE_DEVPRIORITY_DEFAULT
Device.getPropertyInt32
or used with
Device.setPropertyInt32
for the
VIBE_DEVPROPTYPE_PRIORITY
device property type.
public static final int VIBE_DEVICESTATE_ATTACHED
Device.getState
.
public static final int VIBE_DEVICESTATE_BUSY
Device.getState
.
public static final int VIBE_EFFECT_STATE_NOT_PLAYING
EffectHandle.getState
.
public static final int VIBE_EFFECT_STATE_PLAYING
EffectHandle.getState
.
public static final int VIBE_EFFECT_STATE_PAUSED
EffectHandle.getState
.
public static final int VIBE_ELEMTYPE_PERIODIC
public static final int VIBE_ELEMTYPE_MAGSWEEP
public static final int VIBE_ELEMTYPE_REPEAT
public static final int VIBE_ELEMTYPE_WAVEFORM
public static final int VIBE_BUILTINEFFECT_SHORT_ON_SHORT_OFF
getBuiltInEffects
. This effect plays a short
vibration followed by a short rest, repeated indefinitely.
public static final int VIBE_BUILTINEFFECT_SHORT_ON_MEDIUM_OFF
getBuiltInEffects
. This effect plays a short
vibration followed by a medium rest, repeated indefinitely.
public static final int VIBE_BUILTINEFFECT_SHORT_ON_LONG_OFF
getBuiltInEffects
. This effect plays a short
vibration followed by a long rest, repeated indefinitely.
public static final int VIBE_BUILTINEFFECT_MEDIUM_ON_SHORT_OFF
getBuiltInEffects
. This effect plays a medium
vibration followed by a short rest, repeated indefinitely.
public static final int VIBE_BUILTINEFFECT_MEDIUM_ON_MEDIUM_OFF
getBuiltInEffects
. This effect plays a medium
vibration followed by a medium rest, repeated indefinitely.
public static final int VIBE_BUILTINEFFECT_MEDIUM_ON_LONG_OFF
getBuiltInEffects
. This effect plays a medium
vibration followed by a long rest, repeated indefinitely.
public static final int VIBE_BUILTINEFFECT_LONG_ON_SHORT_OFF
getBuiltInEffects
. This effect plays a long
vibration followed by a short rest, repeated indefinitely.
public static final int VIBE_BUILTINEFFECT_LONG_ON_MEDIUM_OFF
getBuiltInEffects
. This effect plays a long
vibration followed by a medium rest, repeated indefinitely.
public static final int VIBE_BUILTINEFFECT_LONG_ON_LONG_OFF
getBuiltInEffects
. This effect plays a long
vibration followed by a long rest, repeated indefinitely.
public static final int VIBE_BUILTINEFFECT_SHORT
getBuiltInEffects
. This effect plays a short
vibration once.
public static final int VIBE_BUILTINEFFECT_MEDIUM
getBuiltInEffects
. This effect plays a medium
vibration once.
public static final int VIBE_BUILTINEFFECT_LONG
getBuiltInEffects
. This effect plays a long
vibration once.
public static final int VIBE_INVALID_INDEX
public static final int VIBE_INVALID_EFFECT_HANDLE_VALUE
public static final int VIBE_INVALID_DEVICE_HANDLE_VALUE
public static final int VIBE_MAX_MAGNITUDE
Device.playMagSweepEffect
Device.playMagSweepEffectDelayed
Device.playPeriodicEffect
Device.playPeriodicEffectDelayed
EffectHandle.modifyPlayingMagSweepEffect
EffectHandle.modifyPlayingPeriodicEffect
public static final int VIBE_MIN_MAGNITUDE
public static final int VIBE_TIME_INFINITE
Device.playMagSweepEffect
Device.playMagSweepEffectDelayed
Device.playPeriodicEffect
Device.playPeriodicEffectDelayed
EffectHandle.modifyPlayingMagSweepEffect
EffectHandle.modifyPlayingPeriodicEffect
public static final int VIBE_PERIOD_RESOLUTION_MICROSECOND
public static final int VIBE_REPEAT_COUNT_INFINITE
public static final int VIBE_MAX_DEVICE_NAME_LENGTH
Device.getCapabilityString
for the
VIBE_DEVCAPTYPE_DEVICE_NAME
device capability type will not
exceed this length.
public static final int VIBE_MAX_EFFECT_NAME_LENGTH
IVTBuffer.getEffectName
will not exceed this length.
public static final int VIBE_MAX_CAPABILITY_STRING_LENGTH
Device.getCapabilityString
will not exceed this length.
public static final int VIBE_MAX_PROPERTY_STRING_LENGTH
Device.getPropertyString
or
set with Device.setPropertyString
will
not exceed this length.
public static final int VIBE_MAX_STREAMING_SAMPLE_SIZE
EffectHandle.playStreamingSample
.
public static final int VIBE_MAX_LOGICAL_DEVICE_COUNT
| Method Detail |
|---|
public static ImmVibe getInstance(Context context)
java.lang.RuntimeException
- The detail message of the exception may consist
of the following values:
public int getDeviceCount()
java.lang.RuntimeException
- The detail message of the exception may consist
of the following values:
public byte[] getBuiltInEffects()
Device.playIVTEffect
Device.playIVTEffectDelayed
Device.playIVTEffectRepeat
Device.playIVTEffectRepeatDelayed
public void deleteIVTFile(java.lang.String pathName)
pathName
- Path name of the file to remove.
java.lang.RuntimeException
- The detail message of the exception may consist
of the following values:
pathName
parameter
is invalid.


T-Mobile announces first Un-Carrier event since Sprint merger was approved
Source: Android Central
What you need to know
- T-Mobile CEO John Legere has teased an Un-Carrier announcement for November 7.
- The announcement will be the first one since the T-Mobile merger with Sprint was approved by the FCC.
- It is uncertain what we might learn from the New T-Mobile Un-carrier 1.0 event, but most likely it will cover the carrier's 5G plans.
T-Mobile CEO John Legere loves a good tease, and he's at it again tweeting out a cryptic save the date for November 7. That's the date Legere has chosen to make the next and very first Un-Carrier announcement since the T-Mobile merger with Sprint was approved by the FCC.
Despite making several Un-Carrier moves in the past, Legere is referring to this one as "the New T-Mobile Un-Carrier 1.0." I guess that makes sense when you consider this is the first move from the "New T-Mobile" which will now include Sprint.
As for what we can expect from this next Un-Carrier move, it's hard to say. In the past, T-Mobile's Un-Carrier initiatives have included programs such as Netflix On Us, Binge On, T-Mobile Tuesdays, and more.
Certainly, this one will include some information regarding Sprint. Whether that will be new plans, new pricing, or a transition of Sprint customers to New T-Mobile is anyone's guess.
Most likely, we can look forward to learning more about New T-Mobile's plans for 5G and possibly more about T-Mobile's broadband internet service. After all, the main focus of the New T-Mobile website is "5G for all."
Back in October, Legere had this to say about New T-Mobile during the Q3 2019 earnings call.
We've spent the better part of the last seven years changing wireless for good, and with the network capabilities of the new T-Mobile, we're going to take Un-carrier to an entirely new level. So, I think it's time we start sharing some of what we mean by next level.
Hopefully, the November 7 Un-Carrier announcement includes a lot more info than this tease and includes plans on offering more coverage for a lower price. At least, that's what T-Mobile has been promising since it first put into motion its plans to merge with Sprint.
T-Mobile / Sprint merger: Here's how it changes the wireless market and how it affects you


Catholic priest gets 15 years for sexual abuse of children
by Associated PressWASHINGTON (AP) — A Catholic priest has been sentenced to 15 years in prison for sexually abusing two child parishioners in the nation’s capital.
The Washington Post reports that most of the more than 80 people who filled the courtroom Friday were supporters of 47-year-old Urbano Vazquez, providing a visual representation of how this case has divided his former parish.
 He groped a 13-year-old in 2015 and kissed and groped a 9-year-old in 2016 while serving as an assistant pastor at the Shrine of the Sacred Heart, a predominantly Latino parish. He maintains his innocence.
His attorney said Vazquez plans to appeal. He still is charged with sexually assaulting another parishioner, now an adult. A hearing is set for September.


This is my son, Trevor. He is one of the reasons I am taking this class. I want him to know that he can do what ever he wants when he grows up and isn't stuck in any one job. I worked at my last job for far too long (11 years!) even though I hated it. He is an amazing kid most of the time and is occassionally a 3 foot tyrant. His friends, Dolly and Mr. Skipit, keep him in line when things get frantic though.


--- layout: default title: About ---
I am currently around 59.342262, 18.112334. You can reach me at {{ site.author.email }}.
Currently I work as Head of Mobile at LinasMatkasse!
I am also a Technical startup advisor with a passion for doing the right thing.
Currently Advising
I bought hussfelt.net for my personal interest in my surename somewhere back in the early 2000. First instance of a website was in the early 2002 - a snapshot from 2003 can be found at the wayback machine. During 2004 I lost the domain in a snapback to some guy in Kenya. I still wonder if he really thought he'd get some money for it! :-) Got the domain back a few years later, and hosted a site in the end of 2008. Ran the blogging-platform syte for a while. Now ended up with Jekyll, hosted on Github!
Some fun facts about the site include:
For comments or questions, feel free to ask me on Twitter or shoot me an email at henrik at henrik dot se.


|
Ray Tracer Common Project
Image rendering program based on the ray tracing technique.
|
Geometric plan. More...
#include <plan.hpp>
Public Member Functions | |
| Plan (const vector &pos, const vector &normal) | |
| Make a new plan. More... | |
| virtual void | update () |
| Update plan coordinates. | |
| const vector & | normal () const |
| The normal of the plan. More... | |
| const vector & | tangent () const |
| A tangent of the plan. More... | |
| virtual vector | uv (const element &) const |
| UV-map a surface element on the plan. More... | |
| virtual std::vector< rt::hit > | hits (const euclidian &e) const |
| Compute hits between the plan and an euclidian. More... | |
| Public Member Functions inherited from rt::Geometry | |
| Geometry (Entity *parent=0) | |
| Main constructor. More... | |
| Geometry (const vector &pos, Entity *parent=0) | |
| Make a new geometry from its position and parent. More... | |
| Geometry (double x, double y, double z, Entity *parent=0) | |
| Make a new geometry from its position and parent. More... | |
| virtual | ~Geometry ()=0 |
| Destructor. | |
| Public Member Functions inherited from rt::Entity | |
| Entity (Entity *parent=0) | |
| Default entity constructor. More... | |
| Entity (const vector &pos, Entity *parent=0) | |
| Make a new entity from its position and parent. More... | |
| Entity (double x, double y, double z, Entity *parent=0) | |
| Make a new entity from its position coordinates and parent. More... | |
| virtual | ~Entity ()=0 |
| Destructor. More... | |
| void | soil () |
| Make an entity dirty. More... | |
| bool | isDirty () const |
| const matrix & | globalMatrix () const |
| The global matrix of the entity. More... | |
| const matrix & | invertedGlobalMatrix () const |
| The invert of the global matrix of the entity. More... | |
| vector | globalPosition () const |
| Global position of the entity. More... | |
| const vector & | position () const |
| Entity location. | |
| const vector & | rotation () const |
| Entity rotation. | |
| void | setPosition (const vector &pos) |
| Set the entity position. More... | |
| void | setRotation (const vector &rot) |
| Set the entity rotation. More... | |
| Entity * | parent () const |
| The parent entity. More... | |
| void | setParent (Entity *) |
| Set the parent entity. More... | |
| Scene * | scene () const |
| The scene of the entity. | |
| void | setScene (Scene *) |
| Set the scene of the entity. More... | |
| const std::unordered_set< Entity * > & | children () const |
| Entity children. | |
| void | addChild (Entity *) |
| Add a child. More... | |
| void | removeChild (Entity *) |
| Remove a child. More... | |
| template<class T > | |
| void | queryAll (std::list< const T *> &list) const |
| Get the list of a specific type of entity. More... | |
Geometric plan.
Make a new plan.
| pos | A point on the plan |
| normal | The normal of the plan |
Compute hits between the plan and an euclidian.
| e | An euclidian in the global space referential. |
Implements rt::Geometry.
| const vector & rt::Plan::normal | ( | ) | const |
The normal of the plan.
| const vector & rt::Plan::tangent | ( | ) | const |
A tangent of the plan.
UV-map a surface element on the plan.
Implements rt::Geometry.


The expressions are algebraically equivalent.
The expressions may not be algebraically equivalent. They differ on lines {{smts[0].compare(smts[1]).join(', ')}}.


{% extends "site.html" %} {% load i18n %} {% load services %} {% load users %} {% load displayutils %} {% block title %}{% if user != none %}{% trans "dashboard" %}{% else %}{% trans "sync your runs, rides & more" %}{% endif %}{% endblock %} {% block content %} {% if user != none %}
{% trans "Decathlon HUB synchronizes your activities between Garmin Connect, Polar Flow and Strava
(your heart rate, cadence, power, and temperature data syncs too)" %}
DECATHLON Connect
DECATHLON Coach
E-Connected
{% trans "Your email, password, and fitness data are kept safe - full details on the" %} {% trans "privacy page" %}.
{% trans "Welcome !" %}
{% trans "Decathlon HUB synchronizes your activities between Garmin Connect, Polar Flow and Strava" %}


Course objectives:
- + Experiencing memory + energy held in the body’s hard + soft tissues
- + Overriding mental inhibitions that hinder creativity + expression
- + Challenging the notions of how you can or should move in your own body + in space
- + Connecting + activating our perceptions of the internal + external, the imagined + the real
- + Tapping the unconscious resources of the body’s innate intelligence
- + Reimagining our physical relationship to technology, objects, + living beings
This class will be highly physical, pursuing a maximum sense of awareness in movement, while respecting and considering each person’s range of ability. Open to everyone. Disabled person is welcome to participate. Physical contact will be part of certain experiences with attention towards safety, respect, and care.
Each class will start with a simple warm up to activate body, senses, and space. Participants will be lead through varrious forms of movement research, improvisation, and repetition of phrases from dance repertory, drawing on some of Kresge’s experiences as a performer in works by Merce Cunningham, Liz Magic Laser, and Rashaun Mitchell + Silas Riener. Participants will develop, teach, and share their own movement sequences with each other in a laboratory setting. The 3rd and final class will culminate with brief presentations that express the participant’s own physical discoveries and may connect to other creative spheres or fields of research.
Cori Kresge
is a NYC based dancer, collaborator, writer, and teacher. Kresge graduated from SUNY Purchase with a BFA in dance and the Dean’s Award. She was a member of the Sri Chinmoy Meditation Center and International Vocal Ensemble. Kresge has been a member of the Merce Cunningham Repertory Understudy Group, functioning as a living archive for Cunningham works from the 60’s, 70’s, and 80’s.
Cori Olinghouse
Co-teacher for Feb 17 class
is an interdisciplinary artist, archivist, and curator. Her work has been commissioned by Danspace Project, New York Live Arts, BRIC Arts Media, Lower Manhattan Cultural Council, Movement Research, and Brooklyn Museum of Art. She is the founder and director of The Portal Project, a living archives initiative dedicated to the transmission of performance through archival and curatorial frameworks.
Maya Man
Teaching Assistant
is a Brooklyn based technologist. Currently, she works as a fiver at the Google Creative Lab, making experiments that combine her love for art and code. Maya graduated from Pomona College with a double major in Computer Science and Media Studies with a focus in digital production. She spends most of her time creating exploratory new media work, dancing in studios and public spaces, and maintaining her love/hate relationship with the internet (mostly love though).


Now for the final step of creating and using a group, assigning users to the user group. The typical first steps towards accessing any object as a buyer-user is to create the necessary objects and then assign them as necessary. This is the first of many create and assign combinations you will be executing. In fact, you will be creating three more objects and completing three more assignments in this course alone!
The reason for all of these assignments outside of the object creations themselves is to fit the profile of the modular nature of OrderCloud. It may seem like it is creating more steps for you to have to create and assign separately, but there is a reason for it. We want you to use exactly what you need to build an application for yourself or your clients, and nothing more. If we started creating nested objects directly inside of other objects (such as products inside of a category or prices inside of a product), it would require you to use more than you really need, thus slowing down the development time and vastly reducing your ability to define a proper project scope (this is the crux of a SAAS application; You have to use the whole package they offer). And as an added plus, you will find to love the modular orientation of OrderCloud once you get comfortable with it, because the separation of concerns makes it easier to manage and intuitively understand the structure of your environment.
A full group assignment object is shown below,
Taking a look at the create.js
script, you can see what is required to
create a new Group assignment. Go ahead and replace the buyerID
variable with
the new buyer you created earlier in this course. In the assignment
variable,
a sample request object is currently stored with 3 values--UserGroupID
, UserID
,
and BuyerID
. Start by taking out the BuyerID
object, as we won't need that (and
it is already assumed in the parameter object).
You will be assigning two of your three new users to this group. You have two options to accomplish this.
First you can process the create.js
script twice with each of the users you
are assigning. The second and more challenging option is to create a second assignment object (with a different
variable name, of course) and process and second SDK call in the same script with that second assignment object.
If you are ready, go ahead and process the request by hitting "Run".


Report Window
Signed Urls
Number of signed urls generated, split by protocol.
Logins by provider
Number of login events, split by login provider.
DRS URI Response Codes
Response codes DRS URI endpoints (/ga4gh/drs/v1/objects) from indexd service.
Logins via Fence as an OIDC client
Number of logins via Fence as an OIDC client
Unique Users
Daily unique authenticated users.
Response Codes
Response codes histogram for requests over the last several days (same date range as unique users above).
Response Times (seconds)
Response time histogram for requests over the last several days (same date range as unique users above).
Users per project
Number of users with access to the given projects according to fence as of the most recent sample taken (last 24 hours).
Loading ...


Log in as Hesham Yahia Logout
| Task | Assigned to | Edit | Delete |
|---|---|---|---|
| Slim Down to 10 kg | Hesham Yahia | edit | delete_forever |
| Go to Team meating | Mostafa Yahia | edit | delete_forever |
| Repair my car | Mohamed Yahia | edit | delete_forever |
| Repair the door | Yahia Zakaria | edit | delete_forever |


Preparation time
less than 30 mins
Cooking time
10 to 30 mins
Serves
Serves 4
Preheat the oven to 240C/450F/Gas 9.
To prepare the herb crust, break the bread into large pieces and place in a food processor or blender and turn into fine crumbs.
Add the herbs and garlic and blitz for a further 30 seconds.
Heat the oil in a large pan with the butter until foaming, but not coloured. Season the racks and add to the pan, skin-side down, and cook for 3-4 minutes on each side (for medium rare). Remove from the pan and leave to rest for 5 minutes.

Press a generous handful of the herb crust over the racks and transfer to a medium-sized roasting tin and roast for 5-15 minutes, depending on how your lamb is preferred. Cover the bones with foil if browning too quickly.
To make the jus, heat the stock and rosemary in a pan over a medium to high heat and reduce by half, stirring occasionally. Check seasoning, strain and keep warm.
Slice the racks in half and serve immediately with aubergine purée and roasted fennel.


This R package provides allometric equations that relate the body size of Southern Ocean taxa to their body part measurements. It is a component of the Southern Ocean Diet and Energetics Database project.
The package currently includes 785 equations, covering mostly cephalopods and fish. A breakdown of the number of equations by taxonomic class and the allometric property that they estimate:
install.packages("devtools")
library(devtools)
install_github("SCAR/solong")
Let’s say we have some measurements of Architeuthis dux squid beaks:
x <- tibble(LRL = c(11.3, 13.9), species = "Architeuthis dux")
x
#> # A tibble: 2 x 2
#> LRL species
#> <dbl> <chr>
#> 1 11.3 Architeuthis dux
#> 2 13.9 Architeuthis dux
It doesn’t matter what the column names are, but we do need to set the properties of the columns so that solong
can find the appropriate data to use in each allometric equation. Here we’ve measured lower rostral length, so:
x$LRL <- sol_set_property(x$LRL, "lower rostral length")
Now we can apply allometric equations to our data. What equations do we have available for our species of interest?
sol_equations() %>% dplyr::filter(taxon_name == "Architeuthis dux") %>% summary
#> equation_id: 342218_ML_Clar1986
#> taxon_name: Architeuthis dux, taxon_aphia_id: 342218
#> equation: function (...) tibble(allometric_value = -55.6 + 59.31 * ...)
#> It takes as 1st input: lower rostral length (units: mm, sample range: unknown to unknown)
#> It estimates: mantle length (units: mm)
#> Indicator of reliability: N=11
#> Reference: Clarke MR (1986). "A handbook for the identification of cephalopod
#> beaks. Clarendon Press, Oxford." As cited in Xavier J & Cherel Y (2009
#> updated 2016) Cephalopod beak guide for the Southern Ocean. Cambridge,
#> British Antarctic Survey, 129pp.
#>
#> equation_id: 342218_WW_Clar1986
#> taxon_name: Architeuthis dux, taxon_aphia_id: 342218
#> equation: function (...) tibble(allometric_value = exp(-1.773 + 4.57 * log(...)))
#> It takes as 1st input: lower rostral length (units: mm, sample range: unknown to unknown)
#> It estimates: wet weight (units: g)
#> Indicator of reliability: N=9
#> Reference: Clarke MR (1986). "A handbook for the identification of cephalopod
#> beaks. Clarendon Press, Oxford." As cited in Xavier J & Cherel Y (2009
#> updated 2016) Cephalopod beak guide for the Southern Ocean. Cambridge,
#> British Antarctic Survey, 129pp.
#>
#> equation_id: 342218_ML_Roel2000
#> taxon_name: Architeuthis dux, taxon_aphia_id: 342218
#> equation: function (...) tibble(allometric_value = 10^((.../11.2) + 1.723214286))
#> It takes as 1st input: lower rostral length (units: mm, sample range: 1 to 19.5)
#> It estimates: mantle length (units: mm)
#> Indicator of reliability: N=43
#> Notes: Noted by Xavier & Cherel: this equation for mantle_length from LRL might be better than the Clarke (1986) one
#> Reference: Roeleveld MAC (2000). "Giant squid beaks: implications for
#> systematics." _Journal of the Marine Biological Association of the UK_,
#> *80*, 185-187.
Here we use the equation with ID 342218_ML_Roel2000
, which is from Roeleveld (2000) and gives the mantle length of Architeuthis dux based on the lower rostral length.
This equation can be applied to to all rows:
sol_allometry(x, "342218_ML_Roel2000")
#> # A tibble: 2 x 6
#> LRL species allometric_value allometric_value_l… allometric_value_u…
#> [mm] <chr> [mm] [mm] [mm]
#> 1 11.3 Architeuthis… 539.6881 NA NA
#> 2 13.9 Architeuthis… 921.0553 NA NA
#> # … with 1 more variable: allometric_property <chr>
Or we can apply a different equation to each row. Here we could use different allometric equations for mantle length:
xa <- sol_allometry(x, c("342218_ML_Roel2000", "342218_ML_Clar1986"))
xa
#> # A tibble: 2 x 6
#> LRL species allometric_value allometric_value_l… allometric_value_u…
#> [mm] <chr> [mm] [mm] [mm]
#> 1 11.3 Architeuthis… 539.6881 NA NA
#> 2 13.9 Architeuthis… 768.8090 NA NA
#> # … with 1 more variable: allometric_property <chr>
The allometric_value
column contains the values that have been estimated, and the allometric_property
column gives the name of the property that has been estimated.
We can also see that the returned allometric_value
is of that specific property, with appropriate units:
sol_get_property(xa$allometric_value)
#> [1] "mantle length"
units(xa$allometric_value)
#> $numerator
#> [1] "mm"
#>
#> $denominator
#> character(0)
#>
#> attr(,"class")
#> [1] "symbolic_units"
We can apply equations that use different inputs, provided that they estimate the same output property. For example, equation 342218_WW_Clar1986
estimates the body weight of the squid Architeuthis dux based on lower rostral length measurements:
sol_equation("342218_WW_Clar1986") %>% summary
#> equation_id: 342218_WW_Clar1986
#> taxon_name: Architeuthis dux, taxon_aphia_id: 342218
#> equation: function (...) tibble(allometric_value = exp(-1.773 + 4.57 * log(...)))
#> It takes as 1st input: lower rostral length (units: mm, sample range: unknown to unknown)
#> It estimates: wet weight (units: g)
#> Indicator of reliability: N=9
#> Reference: Clarke MR (1986). "A handbook for the identification of cephalopod
#> beaks. Clarendon Press, Oxford." As cited in Xavier J & Cherel Y (2009
#> updated 2016) Cephalopod beak guide for the Southern Ocean. Cambridge,
#> British Antarctic Survey, 129pp.
And equation 195932_WW_GaBu1988
estimates the weight of male Weddell seals based on their standard length:
sol_equation("195932_WW_GaBu1988") %>% summary
#> equation_id: 195932_WW_GaBu1988
#> taxon_name: Leptonychotes weddellii, taxon_aphia_id: 195932
#> equation: function (...) tibble(allometric_value = 3.66 * ... - 489.3)
#> It takes as 1st input: standard length (units: cm, sample range: 170 to 236)
#> It estimates: wet weight (units: kg)
#> Indicator of reliability: N=15
#> Notes: Applies to male animals
#> Reference: Gales NJ, Burton HR (1988). "Use of emetics and anaesthesia for dietary
#> assessment of Weddell seals." _Australian Wildlife Research_, *15*,
#> 423-433.
Note that this equation estimates weight in kg, whereas 342218_WW_Clar1986
estimates weight in g. We can apply the two equations together to a single data set:
x <- tibble(LRL = c(11.3, NA_real_),
species = c("Architeuthis dux", "Leptonychotes weddellii"),
SL = c(NA_real_, 175)) %>%
mutate(LRL = sol_set_property(LRL, "lower rostral length"),
SL = sol_set_property(SL, "standard length", "cm"))
xa <- sol_allometry(x, c("342218_WW_Clar1986", "195932_WW_GaBu1988"))
xa %>% dplyr::select(species, allometric_property, allometric_value)
#> # A tibble: 2 x 3
#> species allometric_property allometric_value
#> <chr> <chr> [g]
#> 1 Architeuthis dux wet weight 11029.72
#> 2 Leptonychotes weddellii wet weight 151200.00
The output values are of property “wet weight” and have all been provided in g (because the output column allometric value
must have a single set of units):
sol_get_property(xa$allometric_value)
#> [1] "wet weight"
units(xa$allometric_value)
#> $numerator
#> [1] "g"
#>
#> $denominator
#> character(0)
#>
#> attr(,"class")
#> [1] "symbolic_units"
If we try to apply equations that estimate different properties, we will get a warning:
x <- tibble(LRL = c(11.3, 13.9), species = "Architeuthis dux") %>%
mutate(LRL = sol_set_property(LRL, "lower rostral length"))
xa <- sol_allometry(x, c("342218_ML_Roel2000", "342218_WW_Clar1986"))
xa %>% dplyr::select(species, allometric_property, allometric_value)
#> # A tibble: 2 x 3
#> species allometric_property allometric_value
#> <chr> <chr> <dbl>
#> 1 Architeuthis dux mantle length 540.
#> 2 Architeuthis dux wet weight 28417.
And while the allometric_property
column still says which property was estimated for each row, the property type and units of the returned allometric_value
will not be set, because they are not consistent across the different equations:
sol_get_property(xa$allometric_value)
#> character(0)
What happens if we don’t have the required information in our data to use a particular equation? The 234631_SL~OL_WiMc1990
equation is for fish length, and requires otolith length (not present in our test data).
tryCatch(
sol_allometry(x, "234631_SL~OL_WiMc1990"),
error = function(e) conditionMessage(e)
)
#> [1] "could not find required input properties (otolith length) in data"
Most equations have been published with the number of samples used to fit the equation (N) and the resulting goodness-of-fit of the equation to the data (R^2). These two quantities (if provided by the original source) can be found in the reliability
component of an equation, and can be used to help decide if a given equation is appropriate for your data.
Some equations, typically from more recent publications, also provide the standard errors of the coefficients (or similar information) and thereby allow the allometric_value_lower
and allometric_value_upper
values to be estimated (the upper and lower bounds on the estimate). These should give a more reliable indicator of the precision of the estimated quantities.
x <- tibble(TL = 10 %>% sol_set_property("carapace length", with_units = "mm"))
sol_allometry(x, "369214_WW_Lake2003") %>%
dplyr::select(allometric_value, allometric_value_lower, allometric_value_upper)
#> # A tibble: 1 x 3
#> allometric_value allometric_value_lower allometric_value_upper
#> [g] [g] [g]
#> 1 0.8919773 0.6986516 1.138799
Attempts are made to avoid allowing an equation to extrapolate beyond its valid input data range. Some equations will explicitly return NA
results for such inputs. The inputs
component of the equation may also hold information about the range of the inputs used to fit the equation, which may help assess whether your data lie within its valid range.
http://www.fishbase.org provides estimates of length-weight coefficients. These can be obtained via the sol_fb_length_weight()
function (which uses the rfishbase
package under the hood). For example:
myeq <- sol_fb_length_weight("Electrona antarctica", input_properties = "standard length")
summary(myeq)
#> equation_id: fishbase::11437
#> taxon_name: Electrona antarctica, taxon_aphia_id: 217697
#> equation: function (L) tibble(allometric_value = 0.00742 * (L^3.27))
#> It takes as 1st input: standard length (units: cm, sample range: unknown to unknown)
#> It estimates: wet weight (units: g)
#> Indicator of reliability: R^2=0.957
x <- tibble(SL = 10) %>%
mutate(SL = sol_set_property(SL, "standard length", with_units = "cm"))
sol_allometry(x, myeq)
#> # A tibble: 1 x 5
#> SL allometric_value allometric_value… allometric_value… allometric_prop…
#> [cm] [g] [g] [g] <chr>
#> 1 10 13.81669 NA NA wet weight
TODO: document, including what to do when a property is not part of the sol_properties()
collection.
Equations are registered against taxon_name and taxon_aphia_id (the species identifier in the World Register of Marine Species). The taxon_aphia_id may be more reliable than species names, which can change over time. Users might like to look at the worrms package for interacting with the World Register of Marine Species.
Is equation X included in the package? Call sol_equations()
to get all equations that are part of the package, and have a rummage through that.
To see the references from which equations have been drawn, do something like:
eqs <- sol_equations()
## the first few
head(unique(eqs$reference))
#> [[1]]
#> Clarke MR (1986). "A handbook for the identification of cephalopod
#> beaks. Clarendon Press, Oxford." As cited in Xavier J & Cherel Y (2009
#> updated 2016) Cephalopod beak guide for the Southern Ocean. Cambridge,
#> British Antarctic Survey, 129pp.
#>
#> [[2]]
#> Roeleveld MAC (2000). "Giant squid beaks: implications for
#> systematics." _Journal of the Marine Biological Association of the UK_,
#> *80*, 185-187.
#>
#> [[3]]
#> Lu CC, Williams R (1994). "Contribution to the biology of squid in the
#> Prydz Bay region, Antarctica." _Antarctic Science_, *6*, 223-229. doi:
#> 10.1017/S0954102094000349 (URL:
#> https://doi.org/10.1017/S0954102094000349).
#>
#> [[4]]
#> Rodhouse PG, Prince PA, Clarke MR, Murray AWA (1990). "Cephalopod prey
#> of the grey-headed albatross Diomedea chrysostoma." _Marine Biology_,
#> *104*, 353-362. doi: 10.1007/BF01314337 (URL:
#> https://doi.org/10.1007/BF01314337), As cited in Xavier J & Cherel Y
#> (2009 updated 2016) Cephalopod beak guide for the Southern Ocean.
#> Cambridge, British Antarctic Survey, 129pp.
#>
#> [[5]]
#> Clarke M (1962). "The identification of cephalopod "beaks" and the
#> relationship between beak size and total body weight." _Bulletin of the
#> British Museum of Natural History B_, *8*, 421-480. As cited in Xavier
#> J & Cherel Y (2009 updated 2016) Cephalopod beak guide for the Southern
#> Ocean. Cambridge, British Antarctic Survey, 129pp.
#>
#> [[6]]
#> Lu CC, Ickeringill R (2002). "Cephalopod beak identification and
#> biomass estimation techniques: tools for dietary studies of southern
#> Australian finfishes." _Museum Victoria Science Reports_, *6*, 1-65.
Grab all equations from Eastman (2019):
eq <- sol_equations() %>% dplyr::filter(grepl("East2019", equation_id)) %>%
## some equations have been included twice with different species names - drop the duplicates
dplyr::filter(!grepl("Accepted taxon name", notes))
Reproduce Figure 2 from that paper:


SetFontStyle ( slot, style )
Sets the style of the given font.
STYLE (THESE CAN BE COMBINED WITH ANDBIT)
0 = NORMAL
1 = BOLD
2 = ITALIC
4 = UNDERLINE
8 = STRIKETHROUGH
Example:


| Class | Description |
|---|---|
| Agency |
Agency holds the JUnit Code Coverage Tests for the Agency Product Module.
|
| AssetBacked |
AssetBacked holds the JUnit Code Coverage Tests for the Asset Backed Product Module.
|
| Bloomberg |
Bloomberg holds the JUnit Code Coverage Tests for the Bloomberg Pricing Commands for the Product Module.
|
| Bond |
Bond holds the JUnit Code Coverage Tests for the Bond Product Module.
|
| BondAPI |
BondAPI holds the JUnit Code Coverage Tests for the Bond Product API Module.
|
| BondEOS |
BondEOS holds the JUnit Code Coverage Tests for the Bond EOS Product Module.
|
| BondFixed |
BondFixed holds the JUnit Code Coverage Tests for the Fixed Bond Product Module.
|
| BondFloat |
BondFloat holds the JUnit Code Coverage Tests for the Floater Bond Product Module.
|
| BondMetrics |
BondMetrics holds the JUnit Code Coverage Tests for the Bond Metrics for the Product Module.
|
| BondSink |
BondSink holds the JUnit Code Coverage Tests for the Sinker Bond Product Module.
|
| BondSwap |
BondSwap holds the JUnit Code Coverage Tests for the Swap Rate Floater Bond Product Module.
|
| CapFloor |
CapFloor holds the JUnit Code Coverage Tests for the IR Volatility Product Service Module.
|
| CMA |
CMA holds the JUnit Code Coverage Tests for the LATAM Sovereign and Corporate Bond Product Module.
|
| CMS |
CMS holds the JUnit Code Coverage Tests for the Constant Maturity Swap Product Module.
|
| Corporate |
Corporate holds the JUnit Code Coverage Tests for the Corporate Bond Product Module.
|
| Credit |
Credit holds the JUnit Code Coverage Tests for the Credit Product Module.
|
| CreditOption |
CreditOption holds the JUnit Code Coverage Tests for the Credit Option Product Module.
|
| Cross |
Cross holds the JUnit Code Coverage Tests for the Cross Currency Fix Float Component Product Module.
|
| Dual |
Dual holds the JUnit Code Coverage Tests for the Dual Cross Currency Product Module.
|
| FedFund |
FedFund holds the JUnit Code Coverage Tests for the FedFund Product Module.
|
| FixFloat |
FixFloat holds the JUnit Code Coverage Tests for the FixFloat IRS Product Module.
|
| FixFloatOption |
FixFloatOption holds the JUnit Code Coverage Tests for the FixFloat IRS Option Product Module.
|
| FloatFloat |
FloatFloat holds the JUnit Code Coverage Tests for the FloatFloat Product Module.
|
| ForwardRateFutures |
ForwardRateFutures holds the JUnit Code Coverage Tests for the Forward Rate Futures Product Module.
|
| FRA |
FRA holds the JUnit Code Coverage Tests for the FRA Product Module.
|
| Loan |
Loan holds the JUnit Code Coverage Tests for the Loan Product Module.
|
| Municipal |
Municipal holds the JUnit Code Coverage Tests for the Municipal Product Module.
|
| OIS |
OIS holds the JUnit Code Coverage Tests for the OIS Product Module.
|
| OISAPI |
OISAPI holds the JUnit Code Coverage Tests for the OIS API Product Module.
|
| Option |
Option holds the JUnit Code Coverage Tests for the Option Product Module.
|
| Preferred |
Preferred holds the JUnit Code Coverage Tests for the Preferred Product Module.
|
| SecuritySuite |
SecuritySuite holds the JUnit Code Coverage Tests for the Security Suite Product Module.
|
| StochasticVolatility |
StochasticVolatility holds the JUnit Code Coverage Tests for the StochasticVolatility Product Module.
|
| XCCY |
XCCY holds the JUnit Code Coverage Tests for the XCCY Product Module.
|


This page shows automated results of the Southern delta-Aquariids 2014, based on visual observations reported by citizen scientists through the report form of the International Meteor Organization (IMO). The information on this page is generated automatically; for scientific use please refer to manual analyses published in scientific journals (such as WGN). Send your feedback regarding this page to Geert Barentsen.
Page contents:
Note that the data will finally go into the Visual Meteor Database (VMDB) with manual inspection and rectifications. We are curretly completing the files of 2008-2011. The VMDB is an enormous project - any help will be greatly appreciated.
Page generated: 2014 September 14 at 16:20 UTC.
The graph below shows the ZHR (Zenithal Hourly Rate), which is the number of meteors an observer would see under a very dark sky with the radiant of the shower in zenith.
ZHRmax = 29 based on 1105 sdaquariids reported in 507 intervals, assuming population index r = 3.0
| Time (UTC) | Solarlon | nINT | nSDA | ZHR | Particle density | |
|---|---|---|---|---|---|---|
| 2014-07-19 10:44 | 116.500 | 6 | 2 | 5 | ±3 | 31 / 109·km3 |
| 2014-07-22 11:32 | 119.395 | 4 | 7 | 9 | ±3 | 56 / 109·km3 |
| 2014-07-24 08:03 | 121.167 | 17 | 28 | 8 | ±1 | 50 / 109·km3 |
| 2014-07-25 21:12 | 122.646 | 18 | 30 | 8 | ±1 | 50 / 109·km3 |
| 2014-07-26 03:44 | 122.906 | 11 | 31 | 10 | ±2 | 62 / 109·km3 |
| 2014-07-26 22:14 | 123.643 | 7 | 30 | 12 | ±2 | 74 / 109·km3 |
| 2014-07-27 06:22 | 123.967 | 4 | 34 | 18 | ±3 | 111 / 109·km3 |
| 2014-07-27 19:03 | 124.472 | 11 | 34 | 13 | ±2 | 80 / 109·km3 |
| 2014-07-28 03:34 | 124.811 | 7 | 36 | 15 | ±2 | 93 / 109·km3 |
| 2014-07-28 22:08 | 125.551 | 7 | 32 | 25 | ±4 | 155 / 109·km3 |
| 2014-07-29 00:03 | 125.627 | 16 | 55 | 17 | ±2 | 105 / 109·km3 |
| 2014-07-29 02:46 | 125.735 | 6 | 30 | 18 | ±3 | 111 / 109·km3 |
| 2014-07-29 07:46 | 125.935 | 6 | 40 | 25 | ±4 | 155 / 109·km3 |
| 2014-07-29 19:43 | 126.411 | 12 | 31 | 15 | ±3 | 93 / 109·km3 |
| 2014-07-29 23:16 | 126.552 | 18 | 53 | 16 | ±2 | 99 / 109·km3 |
| 2014-07-30 01:20 | 126.635 | 14 | 47 | 19 | ±3 | 118 / 109·km3 |
| 2014-07-30 07:53 | 126.896 | 3 | 43 | 29 | ±4 | 179 / 109·km3 |
| 2014-07-30 21:21 | 127.433 | 9 | 34 | 16 | ±3 | 99 / 109·km3 |
| 2014-07-31 01:18 | 127.590 | 6 | 32 | 18 | ±3 | 111 / 109·km3 |
| 2014-07-31 19:22 | 128.310 | 9 | 31 | 20 | ±4 | 124 / 109·km3 |
| 2014-07-31 23:10 | 128.462 | 18 | 43 | 13 | ±2 | 80 / 109·km3 |
| 2014-08-01 09:40 | 128.880 | 18 | 40 | 8 | ±1 | 50 / 109·km3 |
| 2014-08-02 14:48 | 130.042 | 19 | 30 | 6 | ±1 | 37 / 109·km3 |
| 2014-08-02 23:26 | 130.386 | 51 | 54 | 6 | ±1 | 37 / 109·km3 |
| 2014-08-03 01:09 | 130.455 | 23 | 53 | 14 | ±2 | 87 / 109·km3 |
| 2014-08-03 23:38 | 131.351 | 13 | 31 | 14 | ±2 | 87 / 109·km3 |
| 2014-08-04 01:14 | 131.415 | 16 | 43 | 18 | ±3 | 111 / 109·km3 |
| 2014-08-05 00:34 | 132.346 | 47 | 68 | 9 | ±1 | 56 / 109·km3 |
| 2014-08-05 19:35 | 133.104 | 28 | 31 | 8 | ±1 | 50 / 109·km3 |
| 2014-08-07 10:37 | 134.662 | 18 | 10 | 2 | ±1 | 12 / 109·km3 |
| 2014-08-09 00:12 | 136.163 | 40 | 31 | 6 | ±1 | 37 / 109·km3 |
| 2014-08-09 03:38 | 136.300 | 25 | 11 | 4 | ±1 | 25 / 109·km3 |
The reported intervals are automatically added together into the bins shown above, based on the number of meteors and the distribution of the intervals. For each bin, the following parameters are computed:
Data has been received from 76 observers in 24 countries. Thank you for your efforts!
Note: click on the map for an interactive version.
| Observer | Country | Teff | nSDA |
|---|---|---|---|
| Marina Arnaut | Serbia | 3.17h | 4 |
| Dorina Balind | Hungary | 1.23h | 6 |
| Martina Birosikova | Slovakia | 0.95h | 0 |
| Chengye Cao | China | 0.40h | 1 |
| Martin Dana | Czech Republic | 2.00h | 0 |
| Jose Vicente Diaz Martinez | Spain | 1.00h | 5 |
| Jozef Drga | Slovakia | 0.75h | 2 |
| Jaroslav Drgona | Slovakia | 1.83h | 0 |
| John Drummond | New Zealand | 2h | 26 |
| Bratislav Filipovic | Serbia | 5.33h | 15 |
| William Godley | United States | 2h | 4 |
| Ljubica Grasic | Serbia | 4.27h | 14 |
| Pavol Habuda | Slovakia | 0.45h | 0 |
| Gabriel Hickel | Brazil | 2.81h | 37 |
| Yurun Huang | China | 2.48h | 8 |
| Milos Igrutinovic | Serbia | 2.33h | 6 |
| Jovana Jankov | Serbia | 7.24h | 24 |
| Csilla Kalup | Hungary | 2.09h | 7 |
| Desislava Kalaidjieva | Bulgaria | 6.72h | 24 |
| Dusanka Kovacevic | Serbia | 4.42h | 17 |
| Samuel Koys | Slovakia | 1.57h | 3 |
| Pete Kozich | United States | 0.70h | 6 |
| Juraj Kubica | Slovakia | 1.59h | 3 |
| Irina Kurteva | Bulgaria | 6.77h | 4 |
| Maciej Kwinta | Poland | 4.67h | 7 |
| Martin Labudik | Slovakia | 2.00h | 0 |
| Caslav Lukic | Serbia | 1.90h | 2 |
| Ema Lupsic | Serbia | 7.66h | 19 |
| Boris Majic | Serbia | 5.54h | 27 |
| Ivana Majranovic | Serbia | 2.00h | 9 |
| Aleksei Makarow | Russia | 1.00h | 3 |
| Daniel Marek | Czech Republic | 2.00h | 0 |
| Nikoleta Martinakova | Slovakia | 1.78h | 0 |
| Bruce Mccurdy | Canada | 3.5h | 7 |
| Artem Mirgorod | Ukraine | 0.75h | 1 |
| Vladimir Obradovic | Serbia | 3.5h | 8 |
| Aleksa Pantic | Serbia | 1.68h | 2 |
| Ina Rendtel | Germany | 10.22h | 31 |
| Martin Sallai | Hungary | 1.60h | 6 |
| Jazmin Sikar | Hungary | 1.52h | 4 |
| Ivan Stankovic | Serbia | 11.65h | 66 |
| Ilian Stefchov | Bulgaria | 1.93h | 2 |
| Stefani Stefanova | Bulgaria | 5.18h | 3 |
| Wesley Stone | United States | 2.56h | 18 |
| Fengwu Sun | China | 0.83h | 1 |
| Matej Sustr | Slovakia | 0.72h | 2 |
| Kitti Szabo | Hungary | 0.98h | 5 |
| Thomas Weiland | Austria | 40.26h | 242 |
| Maciek Myszkiewicz | Poland | 39.85h | 48 |
| Terrence Ross | United States | 24.71h | 153 |
| Pierre Bader | Germany | 4.95h | 5 |
| Konstantin Morozov | Belarus | 5.5h | 10 |
| Stefan Schmeissner | Germany | 17.45h | 22 |
| Pierre Martin | Canada | 9.84h | 46 |
| Jurgen Rendtel | Germany | 10.19h | 10 |
| Anna Levina | Israel | 6.85h | 32 |
| Javor Kac | Slovenia | 13.23h | 24 |
| Branisla Savic | Serbia | 2.21h | 12 |
| Koen Miskotte | Netherlands | 11.99h | 14 |
| Alexsandr Morozov | Russia | 2.01h | 9 |
| Christoph Gerber | Germany | 7.02h | 3 |
| Branislav Savic | Serbia | 11.69h | 35 |
| Dunja Pavlovic | Serbia | 3.99h | 10 |
| Debora Pavela | Serbia | 3.50h | 4 |
| Alexandr Maidik | Ukraine | 16h | 37 |
| Alexandr Maidik Maidik | Ukraine | 1.00h | 3 |
| Mitja Govedic | Slovenia | 2.85h | 5 |
| Dusan Pavlovic | Serbia | 0.47h | 1 |
| Snezana Todorovic | Serbia | 7.92h | 13 |
| Oliver Toskovic | Serbia | 2.50h | 7 |
| Mate Toth | Hungary | 1.68h | 3 |
| Shigeo Uchiyama | Japan | 3.83h | 17 |
| Nikola Vlajnic | Serbia | 10.55h | 19 |
| Radim Volek | Czech Republic | 2.00h | 0 |
| Frank Waechter | Germany | 1.03h | 1 |
| Sabine Waechter | Germany | 1.08h | 3 |
| Adam Weinhardt - Kovacs | Hungary | 1.68h | 5 |
| Oliver Wusk | Germany | 1.50h | 2 |
| Yulia Yancheva | Bulgaria | 3.50h | 4 |
| Igor Zahornacky | Slovakia | 1.72h | 1 |
| Matej Zahornacky | Slovakia | 1.00h | 1 |
| Paul Zeller | United States | 3.81h | 2 |
| Miroslav Zivanovic | Serbia | 12.56h | 32 |
Create your own analysis. The files below can be opened using Excel:
sda2014_rate.csv (number of meteors per interval per observer)
sda2014_magn.csv (number of meteors per magnitude bin per observer)
The information on this page may be distributed freely provided credit is given to the International Meteor Organization (IMO) and, when possible, to the individual observers. The computer facilities to generate this page are provided by ESA/RSSD and Armagh Observatory.
References:


Velocity
Velocity is a Java-based template framework which provides the default HTML rending engine
for Click. Velocity is very easy to learn, simple to use, and is also very capable.
Velocity is an open source
Apache project licensed using the Apache Software License.
Velocity's comprehensive online documentation is included in this distribution.
Object References
With Click you add objects to your page template using the Page's model. You can then access these objects
using Velocities $ reference notation. By default the ClickServlet adds the
following objects to page templates:
-
any public Page fields using the fields name
- context -
the Servlet context path, e.g. /mycorp
- cssImports -
the CSS imports and style blocks to include in the pages header.
Please see PageImports
for more details.
- format -
the Format
object for formatting the display of objects.
- imports -
the CSS and JavaScript imports to include in the pages header.
Please see PageImports
for more details.
- jsImports -
the JavaScript imports and script blocks to include in the pages footer.
Please see PageImports
for more details.
- messages -
the MessagesMap adaptor
for the Page getMessage()
method.
- path -
the path
of the page template to render.
- request -
the pages HttpServletRequest
object.
- response -
the pages HttpServletResponse
object.
- session -
the SessionMap adaptor
for the users HttpSession.
In your page templates you can access object references using a dot path notation. For example:
Welcome: $session.user.fullName
Or by using a more explicit Java notation:
Welcome: $session.get("user").getFullName()
Directives
In Velocity directives are prefixed by a # symbol. While
references access stuff, directives do stuff. The full set of Velocity directives are:
- #if #elseif #else -
output conditional on truth of statements.
- #foreach -
loops through a list of objects.
- #macro -
allows users to define a Velocimacro (VM), a repeated segment of a VTL template, as required.
- #set -
establishes the value of a reference.
- #include -
renders local file(s) that are not parsed by Velocity.
- #parse -
renders a local template that is parsed by Velocity.
- #stop -
stops the template engine.


2 references to CimIndicationArrived
Microsoft.Management.Infrastructure.CimCmdlets (2)
CimIndicationWatcher.cs (2)
121
/// and listen to the incoming indications, event <see cref="
CimIndicationArrived
"/>
220
EventHandler<CimIndicationEventArgs> temp = this.
CimIndicationArrived
;


Easily manage text messages in a new and up to date format compliant with the Android design guidelines and visually based on the stock messaging app from Google, with added features.
Features:
Pro Features:
MMS success will depend on your APN settings from your carrier currently, confirmed working on GSM carriers in the US, and should work on most carriers.
For startup speed issues, be sure to check the option in advanced settings for "run as background service".
If you are having problems receiving notifications, you may need to uninstall 3rd party messengers such as Go SMS.
When using this app, do not disable the stock messaging app as I use it to permanently save messages to the phone. You can however, disable notifications for it so that you don't receive 2 of them.
Please remember the app is still in beta and evolving every day. Let me know if something is missing or not working how you feel it should and I will do my best to correct it!
Go Back


{% include head.html %}
{{ site.title }}
{{ site.description }}
GitHub
Email
© 2014. {{ site.author.name }} All rights reserved.
{{ content }}


[gecode-users] Retrieval of status and elimination of the SS_BRANCH case
Efstratios Kalogirou
efkalog at gmail.com
Tue May 30 15:50:49 CEST 2006
Hi all,
I am using the status method to get the status of my space. In case the
status returns SS_BRANCH I would like to branch the search tree and find out
if the status is SS_SOLVED or SS_FAILED. In other words I want to eliminate
the case where the status returns SS_BRANCH [only solved or failed spaces
are accepted]. I am doing something like:
QSpace* qs=new QSpace; //this is a subclass of Space where my problem is
defined
qs->getStatus(); //this is where I print the status of my
space. In my case this returns SS_BRANCH
DFS<QSpace> e(qs,25,200); //this is where I am using the Depth First
Engine to search through the tree
qs->getStatus(); //this is where I would expect to see
either SS_SOLVED or SS_FAILED but not SS_BRANCH
The problem is that after the second retrieval of the status I get again
SS_BRANCH. What am I doing wrong?
Best,
Stratos Kalogirou
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.ps.uni-sb.de/pipermail/users/attachments/20060530/99124adc/attachment.htm>
More information about the gecode-users
mailing list


Menu EN > English ภาษาไทย Bahasa Indonesia Bahasa Malaysia 中文 Icon 20,000 Icon Icon Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Icon Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Icon Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Icon Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Icon Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor.


Go to home page
About developer
Report Your problem
Your name
Your email
Sugession or Problem You'r facing
Submit


LibriTTS is a multi-speaker English corpus of approximately 585 hours of read English speech at 24kHz sampling rate, prepared by Heiga Zen with the assistance of Google Speech and Google Brain team members. The LibriTTS corpus is designed for TTS research. It is derived from the original materials (mp3 audio files from LibriVox and text files from Project Gutenberg) of the LibriSpeech corpus. The main differences from the LibriSpeech corpus are listed below:
The MD5 checksums of the downloads are as follows (note: not everyone will want to know this).
0c3076c1e5245bb3f0af7d82087ee207 dev-clean.tar.gz 815555d8d75995782ac3ccd7f047213d dev-other.tar.gz 7bed3bdb047c4c197f1ad3bc412db59f test-clean.tar.gz ae3258249472a13b5abef2a816f733e4 test-other.tar.gz 4a8c202b78fe1bc0c47916a98f3a2ea8 train-clean-100.tar.gz a84ef10ddade5fd25df69596a2767b2d train-clean-360.tar.gz 7b181dd5ace343a5f38427999684aa6f train-other-500.tar.gz


I’m a bit later dot N L
ikbenwatlater.nl (I’m a bit later dot N L) is a site I created to notify you when your train is delayed or cancelled. Sign up, chose a trajectory and times between which you want to be notified, and you will receive an email when your train is in trouble.
This will save you some time waiting at the train station.
The site is build on google app engine, and uses the NS (dutch railroad) API to find delays.


--- title: "Manifestos for March AGM" author: qaisjp roles: - title: President people: - name: Elspeth Smith, 1st year url: https://drive.google.com/open?id=1JxmgGp_jKWhE-J9zz9JTHFaltBrPriFV - name: Ege Elgun, 1st year url: https://drive.google.com/open?id=0BwDda2PoGbNNelFyNWh6X184SXhCbWNBX0huX0g0NmtJa0k4 - name: Gurz Singh, 2nd year url: https://drive.google.com/open?id=17_Y0MMpAYzzRoXLm62xDHon4s9gqCF_e - title: Vice-President people: - name: Alan Savio Paul, 1st year url: https://drive.google.com/open?id=17nGyCLZgLFpBwpbv0HGc6a9fy2B4yYuW - name: Rokas Gudavicius, 1st year url: https://drive.google.com/open?id=1eYn8uaKrS6zWK_lHowN-ymmH6T4lh48a - title: Secretary people: - name: Caterina Mrose, 1st year url: https://drive.google.com/open?id=1yRvaoysyhC4Y0gjTgU8nOQ75Z1Odf4Ex - name: Valentine Dragan, 1st year url: https://drive.google.com/open?id=1_h7sN2V3IG7S3GndkEwyksSa9tV5NNvb - title: Treasurer people: - name: Joao Maio, 2nd year url: https://drive.google.com/open?id=1RLwDB1vUa3oNz_fkDSfgtVQSMhkXUvUP - title: HackSec people: - name: Elena Lape, 2nd year url: https://drive.google.com/open?id=1VHuA-uCZwXyFV0GiuzLrd5wKjkxoAjlp - title: TechSec people: - name: Michael (Mikey), 1st year url: https://drive.google.com/open?id=1Zy4yJfWn2ewiU74_rvUZonUYLxaSolfq - name: Qais Patankar, 2nd year url: https://drive.google.com/open?id=1l75igPg3ghS_EHS6VZ42wKzcVpLjbjy7 - title: SocialSec people: - name: Nobody has run for this position. You could stand for election! - title: 2nd Year Rep people: - name: Dylan Oshima, 1st year url: https://drive.google.com/open?id=1Y5Siw6C7HpEZH6hqKrjE4N2P5JihjLIw - title: 3rd Year Rep people: - name: Likhitha Modalavalasa, 2nd year url: https://drive.google.com/file/d/1mOfiZTe-LfG_vdFzayy-6cx2XpQA26pf/view?usp=sharing - title: Final Year Rep people: - name: Nobody has run for this position. You could stand for election! - title: Postgraduate Rep people: - name: Nobody has run for this position. You could stand for election! - title: Old Person Rep people: - name: Kit Barnes url: https://drive.google.com/open?id=18lLUAfPrTr6_7ZXiBjbONeMktrkZUXkz ---
On Wednesday at 6pm we have our monthly Student Tech Meetup as well as our Annual General Meeting. Mark yourself as going on Facebook so we have enough food for you, and drop us a message if you have any special requirements.
We have a good number of people running for election, so once you've reviewed the various positions, take a look at who is running for election!
If you haven't submitted a manifesto and would still like to run for election, please read the elections page.
| {{ role.title }} | |
| {{ person.name }} {% if person.url %} | view manifesto{% endif %} |
We hope you think carefully about who you choose to elect tomorrow — please vote based on manifestos and speeches! Note that you may also vote for Ron (reopen nominations) for all positions.
Election candidates - please remember that if you are running for President, VP, Secretary or Treasurer, your speech may be up to 2 minutes. Other roles have up to 1 minute. If you haven't bought membership yet, do that now.
See you tomorrow,
CompSoc <3 You!


If you’re writing C/C+ code, it’s natural to write your unit tests in the same language (or use C++ for your C test code). All the well-known unit testing tools take this approach.
I think we can agree that neither language offers the best developer productivity among all the language choices out there. Most of us use either language because of perceived performance requirements, institutional and industry tradition, etc.
There’s growing interest, however, in mixing languages, tools, and paradigms to get the best tool for a particular job. <shameless-plug>I’m giving a talk March 7th at SD West on this very topic, called Polyglot and Poly-Paradigm Programming </shameless-plug>.
So, why not use a more productive language for your C or C++ unit tests? You have more freedom in your development chores than what’s required for production. Why not use Ruby’s RSpec, a Behavior-Driven Development tool for acceptance and unit testing? Or, you could use Ruby’s version of JUnit, called Test::Unit. The hard part is integrating Ruby and C/C++. If you’ve been looking for an excuse to bring Ruby (or Tcl or Python or Java or…) into your C/C++ environment, starting with development tasks is usually the path of least resistance.
I did some experimenting over the last few days to integrate RSpec using SWIG (Simplified Wrapper and Interface Generator), a tool for bridging libraries written in C and C++ to other languages, like Ruby. The Ruby section of the SWIG manual was very helpful.
Here is a zip file of my experiment: http://tbd.com. This is far from a complete and working solution, but I think it shows promise. See the Current Limitations section below for details.
Unzip the file into a directory. I’ll assume you named it rspec_for_cpp
. You need to have gmake
, gcc
, SWIG and Ruby installed, along with the RSpec “gem”. Right now, it only builds on OS X and Linux (at least the configurations on my machines running those OS’s – see the discussion below). To run the build, use the following commands:
$ cd rspec_for_cpp/cpp
$ make
You should see it finish with the lines
( cd ../spec; spec *_spec.rb )
.........
Finished in 0.0***** seconds
9 examples, 0 failures
Congratulations, you’ve just tested some C and C+ code with RSpec! (Or, if you didn’t succeed, see the notes in the Makefile
and the discussion below.)
I’ll briefly walk you through the files in the zip and the key steps required to make it all work.
cexample.h
Here is a simple C header file.
/* cexample.h */
#ifndef CEXAMPLE_H
#define CEXAMPLE_H
#ifdef __cplusplus
extern "C" {
#endif
char* returnString(char* input);
double returnDouble(int input);
void doNothing();
#ifdef __cplusplus
}
#endif
#endif
Of course, in a pure C shop, you won’t need the #ifdef __cplusplus
stuff. I found this was essential in my experiment when I mixed C and C++, as you might expect.
cpp/cexample.c
Here is the corresponding C source file.
/* cexample.h */
char* returnString(char* input) {
return input;
}
double returnDouble(int input) {
return (double) input;
}
void doNothing() {}
cpp/CppExample.h
Here is a C++ header file.
#ifndef CPPEXAMPLE_H
#define CPPEXAMPLE_H
#include <string>
class CppExample
{
public:
CppExample();
CppExample(const CppExample& foo);
CppExample(const char* title, int flag);
virtual ~CppExample();
const char* title() const;
void title(const char* title);
int flag() const;
void flag(int value);
static int countOfCppExamples();
private:
std::string _title;
int _flag;
};
#endif
cpp/CppExample.cpp
Here is the corresponding C++ source file.
#include "CppExample.h"
CppExample::CppExample() : _title("") {}
CppExample::CppExample(const CppExample& foo): _title(foo._title) {}
CppExample::CppExample(const char* title, int flag) : _title(title), _flag(flag) {}
CppExample::~CppExample() {}
const char* CppExample::title() const { return _title.c_str(); }
void CppExample::title(const char* name) { _title = name; }
int CppExample::flag() const { return _flag; }
void CppExample::flag(int value) { _flag = value; }
int CppExample::countOfCppExamples() { return 1; }
cpp/example.i
Typically in SWIG, you specify a .i
file to the swig
command to define the module that wraps the classes and global functions, which classes and functions to expose to the target language (usually all in our case), and other assorted customization options, which are discussed in the SWIG manual. I’ll show the swig
command in a minute. For now, note that I’m going to generate an example_wrap.cpp
file that will function as the bridge between the languages.
Here’s my example.i
, where I named the module example
.
%module example
%{
#include "cexample.h"
#include "CppExample.h"
%}
%include "cexample.h"
%include "CppExample.h"
It looks odd to have header files appear twice. The code inside the %{...%}
(with a ’#’ before each include
) are standard C and C++ statements, etc. that will be inserted verbatim into the generated “wrapper” file, example_wrap.cpp
, so that file will compile when it references anything declared in the header files. The second case, with a ’%’ before the include
statements1, tells SWIG to make all the declarations in those header files available to the target language. (You can be more selective, if you prefer…)
Following Ruby conventions, the Ruby plugin for SWIG automatically names the module with an upper case first letter (Example
), but you use require 'example'
to include it, as we’ll see shortly.
See the cpp/Makefile
for the gory details. In a nutshell, you run the swig
command like this.
swig -c++ -ruby -Wall -o example_wrap.cpp example.i
Next, you create a dynamically-linked library, as appropriate for your platform, so the Ruby interpreter can load the module dynamically when required. The Makefile
can do this for Linux and OS X platforms. See the Ruby section of the SWIG manual for Windows specifics.
If you test-drive your code, which tends to drive you towards minimally-coupled “modules”, then you can keep your libraries and build times small, which will make the build and test cycle very fast!
spec/cexample_spec.rb
and spec/cppexample_spec.rb
Finally, here are the RSpec files that exercise the C and C++ code. (Disclaimer: these aren’t the best spec files I’ve ever written. For one thing, they don’t exercise all the CppExample
methods! So sue me… :)
require File.dirname(__FILE__) + '/spec_helper'
require 'example'
describe "Example (C functions)" do
it "should be a constant on Module" do
Module.constants.should include('Example')
end
it "should have the methods defined in the C header file" do
Example.methods.should include('returnString')
Example.methods.should include('returnDouble')
Example.methods.should include('doNothing')
end
end
describe Example, ".returnString" do
it "should return the input char * string as a Ruby string unchanged" do
Example.returnString("bar!").should == "bar!"
end
end
describe Example, ".returnDouble" do
it "should return the input integer as a double" do
Example.returnDouble(10).should == 10.0
end
end
describe Example, ".doNothing" do
it "should exist, but do nothing" do
lambda { Example.doNothing }.should_not raise_error
end
end
and
require File.dirname(__FILE__) + '/spec_helper'
require 'example'
describe Example::CppExample do
it "should be a constant on module Example" do
Example.constants.should include('CppExample')
end
end
describe Example::CppExample, ".new" do
it "should create a new object of type CppExample" do
example = Example::CppExample.new("example1", 1)
example.title.should == "example1"
example.flag.should == 1
end
end
describe Example::CppExample, "#title(value)" do
it "should set the title" do
example = Example::CppExample.new("example1", 1)
example.title("title2")
example.title.should == "title2"
end
end
describe Example::CppExample, "#flag(value)" do
it "should set the flag" do
example = Example::CppExample.new("example1", 1)
example.flag(2)
example.flag.should == 2
end
end
If you love RSpec like I do, this is a very compelling thing to see!
And now for the small print:
As I said, this is just an experiment at this point. Volunteers to make this battle-ready would be most welcome!
Makefile
FileYou’ve probably already solved this problem for your own make files. Just merge in the example Makefile
to pick up the SWIG- and RSpec-related targets and rules.
Some definitions are probably unique to my OS X and Linux machines. Windows is not supported at all. However, this is also easy rectify. Start with the notes in the Makefile
itself.
module.i
File Must Be Hand Edited for Each File ChangeSince the format is simple, a make task could fill a template file with the changed list of source files during the build.
It should be straightforward to provide scripts, IDE/Editor shortcuts, etc. that automate some of the tasks of adding new methods and classes to your C and C++ code when you introduce them first in your “spec” files. (The true TDD way, of course.)
I don’t know of any other C-specific issues, so unit testing with Ruby is most viable today for C code. Although I haven’t experimented extensively, C functions and variables are easily mapped by SWIG to a Ruby module. The Ruby section of the SWIG manual discusses this mapping in some detail.
More work will be required to make this viable. It’s important to note that SWIG cannot handle all C++ constructs (although there are workarounds for most issues, if you’re committed to this approach…). For example, namespaces, nested classes, some template and some method overloading scenarios are not supported. The SWIG manual has details.
Also, during my experiment, SWIG didn’t seem to map const std::string&
objects in C++ method signatures to Ruby strings, as I would have expected (char*
worked fine).
Once the General issues listed above are handled, I think this approach would work very well for C code. For C++ code, there are more issues that need to be addressed, and programmers who are committed to this strategy will need to tolerate some issues (or just use C++-language tools for some scenarios).
I’d like to see this approach pushed to its logical limit. I think it has the potential to really improve the productivity of C and C++ developers and the quality of their test coverage, by leveraging the productivity and power of dynamically-typed languages like Ruby. If you prefer, you could use Tcl, Python, even Java instead.
This code is complete open and free to use. Of course, use it at your own risk; I offer it without warranty, etc., etc. When I polish it to the point of making it an “official” project, I will probably release under the Apache license.
1 I spent a lot of time debugging problems because I had a ’#’ where I should have had a ’%’! Caveat emptor!


python setup.py install
from robotsoccer import SoccerClient
sc = SoccerClient()
sc.connect(host, port)
while True:
force_left_motor = 1
force_right_motor = 1
sc.act(force_left_motor, force_right_motor)
from robotsoccer import TLFNClient
sc = TLFNClient('weightfile.wts')
sc.connect(host, port)
sc.run()
Client interface for a robot soccer match simulator.
All methods of this class are relative to own robot, i.e, the robot_id robot.
Notice that world_height, world_width, goal_length actually are the half of real size. This values come directly from robot soccer match.
Does action for the robot. Receives the forces of left and right motor.
Calculates angle difference in radians between robot and the nearest obstacle.
Calculates distance in milimeters between robot and the nearest obstacle.
Gets own attacking goal’s center. Notice the goal of robots[1] (right) is goal[0] (left) and vice versa.
Gets attacking goal’s center of the rival. Notice the goal of robots[1] (right) is goal[0] (left) and vice versa.
Robot SoccerClient using TLFN network.