text:
#pragma once
// MESSAGE OPTICAL_FLOW_RAD PACKING

#define MAVLINK_MSG_ID_OPTICAL_FLOW_RAD 106

MAVPACKED(
typedef struct __mavlink_optical_flow_rad_t {
 uint64_t time_usec; /*< Timestamp (microseconds, synced to UNIX time or since system boot)*/
 uint32_t integration_time_us; /*< Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the.*/
 float integrated_x; /*< Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.)*/
 float integrated_y; /*< Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.)*/
 float integrated_xgyro; /*< RH rotation around X axis (rad)*/
 float integrated_ygyro; /*< RH rotation around Y axis (rad)*/
 float integrated_zgyro; /*< RH rotation around Z axis (rad)*/
 uint32_t time_delta_distance_us; /*< Time in microseconds since the distance was sampled.*/
 float distance; /*< Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance.*/
 int16_t temperature; /*< Temperature * 100 in centi-degrees Celsius*/
 uint8_t sensor_id; /*< Sensor ID*/
 uint8_t quality; /*< Optical flow quality / confidence. 0: no valid flow, 255: maximum quality*/
}) mavlink_optical_flow_rad_t;

#define MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN 44
#define MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_MIN_LEN 44
#define MAVLINK_MSG_ID_106_LEN 44
#define MAVLINK_MSG_ID_106_MIN_LEN 44

#define MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_CRC 138
#define MAVLINK_MSG_ID_106_CRC 138

#if MAVLINK_COMMAND_24BIT
#define MAVLINK_MESSAGE_INFO_OPTICAL_FLOW_RAD { \
    106, \
    "OPTICAL_FLOW_RAD", \
    12, \
    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_optical_flow_rad_t, time_usec) }, \
         { "sensor_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 42, offsetof(mavlink_optical_flow_rad_t, sensor_id) }, \
         { "integration_time_us", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_optical_flow_rad_t, integration_time_us) }, \
         { "integrated_x", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_optical_flow_rad_t, integrated_x) }, \
         { "integrated_y", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_optical_flow_rad_t, integrated_y) }, \
         { "integrated_xgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_optical_flow_rad_t, integrated_xgyro) }, \
         { "integrated_ygyro", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_optical_flow_rad_t, integrated_ygyro) }, \
         { "integrated_zgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_optical_flow_rad_t, integrated_zgyro) }, \
         { "temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 40, offsetof(mavlink_optical_flow_rad_t, temperature) }, \
         { "quality", NULL, MAVLINK_TYPE_UINT8_T, 0, 43, offsetof(mavlink_optical_flow_rad_t, quality) }, \
         { "time_delta_distance_us", NULL, MAVLINK_TYPE_UINT32_T, 0, 32, offsetof(mavlink_optical_flow_rad_t, time_delta_distance_us) }, \
         { "distance", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_optical_flow_rad_t, distance) }, \
         } \
}
#else
#define MAVLINK_MESSAGE_INFO_OPTICAL_FLOW_RAD { \
    "OPTICAL_FLOW_RAD", \
    12, \
    {  { "time_usec", NULL, MAVLINK_TYPE_UINT64_T, 0, 0, offsetof(mavlink_optical_flow_rad_t, time_usec) }, \
         { "sensor_id", NULL, MAVLINK_TYPE_UINT8_T, 0, 42, offsetof(mavlink_optical_flow_rad_t, sensor_id) }, \
         { "integration_time_us", NULL, MAVLINK_TYPE_UINT32_T, 0, 8, offsetof(mavlink_optical_flow_rad_t, integration_time_us) }, \
         { "integrated_x", NULL, MAVLINK_TYPE_FLOAT, 0, 12, offsetof(mavlink_optical_flow_rad_t, integrated_x) }, \
         { "integrated_y", NULL, MAVLINK_TYPE_FLOAT, 0, 16, offsetof(mavlink_optical_flow_rad_t, integrated_y) }, \
         { "integrated_xgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 20, offsetof(mavlink_optical_flow_rad_t, integrated_xgyro) }, \
         { "integrated_ygyro", NULL, MAVLINK_TYPE_FLOAT, 0, 24, offsetof(mavlink_optical_flow_rad_t, integrated_ygyro) }, \
         { "integrated_zgyro", NULL, MAVLINK_TYPE_FLOAT, 0, 28, offsetof(mavlink_optical_flow_rad_t, integrated_zgyro) }, \
         { "temperature", NULL, MAVLINK_TYPE_INT16_T, 0, 40, offsetof(mavlink_optical_flow_rad_t, temperature) }, \
         { "quality", NULL, MAVLINK_TYPE_UINT8_T, 0, 43, offsetof(mavlink_optical_flow_rad_t, quality) }, \
         { "time_delta_distance_us", NULL, MAVLINK_TYPE_UINT32_T, 0, 32, offsetof(mavlink_optical_flow_rad_t, time_delta_distance_us) }, \
         { "distance", NULL, MAVLINK_TYPE_FLOAT, 0, 36, offsetof(mavlink_optical_flow_rad_t, distance) }, \
         } \
}
#endif

/**
 * @brief Pack a optical_flow_rad message
 * @param system_id ID of this system
 * @param component_id ID of this component (e.g. 200 for IMU)
 * @param msg The MAVLink message to compress the data into
 *
 * @param time_usec Timestamp (microseconds, synced to UNIX time or since system boot)
 * @param sensor_id Sensor ID
 * @param integration_time_us Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the.
 * @param integrated_x Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.)
 * @param integrated_y Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.)
 * @param integrated_xgyro RH rotation around X axis (rad)
 * @param integrated_ygyro RH rotation around Y axis (rad)
 * @param integrated_zgyro RH rotation around Z axis (rad)
 * @param temperature Temperature * 100 in centi-degrees Celsius
 * @param quality Optical flow quality / confidence. 0: no valid flow, 255: maximum quality
 * @param time_delta_distance_us Time in microseconds since the distance was sampled.
 * @param distance Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance.
 * @return length of the message in bytes (excluding serial stream start sign)
 */
static inline uint16_t mavlink_msg_optical_flow_rad_pack(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg,
                               uint64_t time_usec, uint8_t sensor_id, uint32_t integration_time_us, float integrated_x, float integrated_y, float integrated_xgyro, float integrated_ygyro, float integrated_zgyro, int16_t temperature, uint8_t quality, uint32_t time_delta_distance_us, float distance)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
    char buf[MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN];
    _mav_put_uint64_t(buf, 0, time_usec);
    _mav_put_uint32_t(buf, 8, integration_time_us);
    _mav_put_float(buf, 12, integrated_x);
    _mav_put_float(buf, 16, integrated_y);
    _mav_put_float(buf, 20, integrated_xgyro);
    _mav_put_float(buf, 24, integrated_ygyro);
    _mav_put_float(buf, 28, integrated_zgyro);
    _mav_put_uint32_t(buf, 32, time_delta_distance_us);
    _mav_put_float(buf, 36, distance);
    _mav_put_int16_t(buf, 40, temperature);
    _mav_put_uint8_t(buf, 42, sensor_id);
    _mav_put_uint8_t(buf, 43, quality);

        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN);
#else
    mavlink_optical_flow_rad_t packet;
    packet.time_usec = time_usec;
    packet.integration_time_us = integration_time_us;
    packet.integrated_x = integrated_x;
    packet.integrated_y = integrated_y;
    packet.integrated_xgyro = integrated_xgyro;
    packet.integrated_ygyro = integrated_ygyro;
    packet.integrated_zgyro = integrated_zgyro;
    packet.time_delta_distance_us = time_delta_distance_us;
    packet.distance = distance;
    packet.temperature = temperature;
    packet.sensor_id = sensor_id;
    packet.quality = quality;

        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN);
#endif

    msg->msgid = MAVLINK_MSG_ID_OPTICAL_FLOW_RAD;
    return mavlink_finalize_message(msg, system_id, component_id, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_MIN_LEN, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_CRC);
}

/**
 * @brief Pack a optical_flow_rad message on a channel
 * @param system_id ID of this system
 * @param component_id ID of this component (e.g. 200 for IMU)
 * @param chan The MAVLink channel this message will be sent over
 * @param msg The MAVLink message to compress the data into
 * @param time_usec Timestamp (microseconds, synced to UNIX time or since system boot)
 * @param sensor_id Sensor ID
 * @param integration_time_us Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the.
 * @param integrated_x Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.)
 * @param integrated_y Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.)
 * @param integrated_xgyro RH rotation around X axis (rad)
 * @param integrated_ygyro RH rotation around Y axis (rad)
 * @param integrated_zgyro RH rotation around Z axis (rad)
 * @param temperature Temperature * 100 in centi-degrees Celsius
 * @param quality Optical flow quality / confidence. 0: no valid flow, 255: maximum quality
 * @param time_delta_distance_us Time in microseconds since the distance was sampled.
 * @param distance Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance.
 * @return length of the message in bytes (excluding serial stream start sign)
 */
static inline uint16_t mavlink_msg_optical_flow_rad_pack_chan(uint8_t system_id, uint8_t component_id, uint8_t chan,
                               mavlink_message_t* msg,
                                   uint64_t time_usec,uint8_t sensor_id,uint32_t integration_time_us,float integrated_x,float integrated_y,float integrated_xgyro,float integrated_ygyro,float integrated_zgyro,int16_t temperature,uint8_t quality,uint32_t time_delta_distance_us,float distance)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
    char buf[MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN];
    _mav_put_uint64_t(buf, 0, time_usec);
    _mav_put_uint32_t(buf, 8, integration_time_us);
    _mav_put_float(buf, 12, integrated_x);
    _mav_put_float(buf, 16, integrated_y);
    _mav_put_float(buf, 20, integrated_xgyro);
    _mav_put_float(buf, 24, integrated_ygyro);
    _mav_put_float(buf, 28, integrated_zgyro);
    _mav_put_uint32_t(buf, 32, time_delta_distance_us);
    _mav_put_float(buf, 36, distance);
    _mav_put_int16_t(buf, 40, temperature);
    _mav_put_uint8_t(buf, 42, sensor_id);
    _mav_put_uint8_t(buf, 43, quality);

        memcpy(_MAV_PAYLOAD_NON_CONST(msg), buf, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN);
#else
    mavlink_optical_flow_rad_t packet;
    packet.time_usec = time_usec;
    packet.integration_time_us = integration_time_us;
    packet.integrated_x = integrated_x;
    packet.integrated_y = integrated_y;
    packet.integrated_xgyro = integrated_xgyro;
    packet.integrated_ygyro = integrated_ygyro;
    packet.integrated_zgyro = integrated_zgyro;
    packet.time_delta_distance_us = time_delta_distance_us;
    packet.distance = distance;
    packet.temperature = temperature;
    packet.sensor_id = sensor_id;
    packet.quality = quality;

        memcpy(_MAV_PAYLOAD_NON_CONST(msg), &packet, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN);
#endif

    msg->msgid = MAVLINK_MSG_ID_OPTICAL_FLOW_RAD;
    return mavlink_finalize_message_chan(msg, system_id, component_id, chan, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_MIN_LEN, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_CRC);
}

/**
 * @brief Encode a optical_flow_rad struct
 *
 * @param system_id ID of this system
 * @param component_id ID of this component (e.g. 200 for IMU)
 * @param msg The MAVLink message to compress the data into
 * @param optical_flow_rad C-struct to read the message contents from
 */
static inline uint16_t mavlink_msg_optical_flow_rad_encode(uint8_t system_id, uint8_t component_id, mavlink_message_t* msg, const mavlink_optical_flow_rad_t* optical_flow_rad)
{
    return mavlink_msg_optical_flow_rad_pack(system_id, component_id, msg, optical_flow_rad->time_usec, optical_flow_rad->sensor_id, optical_flow_rad->integration_time_us, optical_flow_rad->integrated_x, optical_flow_rad->integrated_y, optical_flow_rad->integrated_xgyro, optical_flow_rad->integrated_ygyro, optical_flow_rad->integrated_zgyro, optical_flow_rad->temperature, optical_flow_rad->quality, optical_flow_rad->time_delta_distance_us, optical_flow_rad->distance);
}

/**
 * @brief Encode a optical_flow_rad struct on a channel
 *
 * @param system_id ID of this system
 * @param component_id ID of this component (e.g. 200 for IMU)
 * @param chan The MAVLink channel this message will be sent over
 * @param msg The MAVLink message to compress the data into
 * @param optical_flow_rad C-struct to read the message contents from
 */
static inline uint16_t mavlink_msg_optical_flow_rad_encode_chan(uint8_t system_id, uint8_t component_id, uint8_t chan, mavlink_message_t* msg, const mavlink_optical_flow_rad_t* optical_flow_rad)
{
    return mavlink_msg_optical_flow_rad_pack_chan(system_id, component_id, chan, msg, optical_flow_rad->time_usec, optical_flow_rad->sensor_id, optical_flow_rad->integration_time_us, optical_flow_rad->integrated_x, optical_flow_rad->integrated_y, optical_flow_rad->integrated_xgyro, optical_flow_rad->integrated_ygyro, optical_flow_rad->integrated_zgyro, optical_flow_rad->temperature, optical_flow_rad->quality, optical_flow_rad->time_delta_distance_us, optical_flow_rad->distance);
}

/**
 * @brief Send a optical_flow_rad message
 * @param chan MAVLink channel to send the message
 *
 * @param time_usec Timestamp (microseconds, synced to UNIX time or since system boot)
 * @param sensor_id Sensor ID
 * @param integration_time_us Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the.
 * @param integrated_x Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.)
 * @param integrated_y Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.)
 * @param integrated_xgyro RH rotation around X axis (rad)
 * @param integrated_ygyro RH rotation around Y axis (rad)
 * @param integrated_zgyro RH rotation around Z axis (rad)
 * @param temperature Temperature * 100 in centi-degrees Celsius
 * @param quality Optical flow quality / confidence. 0: no valid flow, 255: maximum quality
 * @param time_delta_distance_us Time in microseconds since the distance was sampled.
 * @param distance Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance.
 */
#ifdef MAVLINK_USE_CONVENIENCE_FUNCTIONS

static inline void mavlink_msg_optical_flow_rad_send(mavlink_channel_t chan, uint64_t time_usec, uint8_t sensor_id, uint32_t integration_time_us, float integrated_x, float integrated_y, float integrated_xgyro, float integrated_ygyro, float integrated_zgyro, int16_t temperature, uint8_t quality, uint32_t time_delta_distance_us, float distance)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
    char buf[MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN];
    _mav_put_uint64_t(buf, 0, time_usec);
    _mav_put_uint32_t(buf, 8, integration_time_us);
    _mav_put_float(buf, 12, integrated_x);
    _mav_put_float(buf, 16, integrated_y);
    _mav_put_float(buf, 20, integrated_xgyro);
    _mav_put_float(buf, 24, integrated_ygyro);
    _mav_put_float(buf, 28, integrated_zgyro);
    _mav_put_uint32_t(buf, 32, time_delta_distance_us);
    _mav_put_float(buf, 36, distance);
    _mav_put_int16_t(buf, 40, temperature);
    _mav_put_uint8_t(buf, 42, sensor_id);
    _mav_put_uint8_t(buf, 43, quality);

    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD, buf, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_MIN_LEN, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_CRC);
#else
    mavlink_optical_flow_rad_t packet;
    packet.time_usec = time_usec;
    packet.integration_time_us = integration_time_us;
    packet.integrated_x = integrated_x;
    packet.integrated_y = integrated_y;
    packet.integrated_xgyro = integrated_xgyro;
    packet.integrated_ygyro = integrated_ygyro;
    packet.integrated_zgyro = integrated_zgyro;
    packet.time_delta_distance_us = time_delta_distance_us;
    packet.distance = distance;
    packet.temperature = temperature;
    packet.sensor_id = sensor_id;
    packet.quality = quality;

    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD, (const char *)&packet, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_MIN_LEN, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_CRC);
#endif
}

/**
 * @brief Send a optical_flow_rad message
 * @param chan MAVLink channel to send the message
 * @param struct The MAVLink struct to serialize
 */
static inline void mavlink_msg_optical_flow_rad_send_struct(mavlink_channel_t chan, const mavlink_optical_flow_rad_t* optical_flow_rad)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
    mavlink_msg_optical_flow_rad_send(chan, optical_flow_rad->time_usec, optical_flow_rad->sensor_id, optical_flow_rad->integration_time_us, optical_flow_rad->integrated_x, optical_flow_rad->integrated_y, optical_flow_rad->integrated_xgyro, optical_flow_rad->integrated_ygyro, optical_flow_rad->integrated_zgyro, optical_flow_rad->temperature, optical_flow_rad->quality, optical_flow_rad->time_delta_distance_us, optical_flow_rad->distance);
#else
    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD, (const char *)optical_flow_rad, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_MIN_LEN, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_CRC);
#endif
}

#if MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN <= MAVLINK_MAX_PAYLOAD_LEN
/*
  This varient of _send() can be used to save stack space by re-using
  memory from the receive buffer.  The caller provides a
  mavlink_message_t which is the size of a full mavlink message. This
  is usually the receive buffer for the channel, and allows a reply to an
  incoming message with minimum stack space usage.
 */
static inline void mavlink_msg_optical_flow_rad_send_buf(mavlink_message_t *msgbuf, mavlink_channel_t chan,  uint64_t time_usec, uint8_t sensor_id, uint32_t integration_time_us, float integrated_x, float integrated_y, float integrated_xgyro, float integrated_ygyro, float integrated_zgyro, int16_t temperature, uint8_t quality, uint32_t time_delta_distance_us, float distance)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
    char *buf = (char *)msgbuf;
    _mav_put_uint64_t(buf, 0, time_usec);
    _mav_put_uint32_t(buf, 8, integration_time_us);
    _mav_put_float(buf, 12, integrated_x);
    _mav_put_float(buf, 16, integrated_y);
    _mav_put_float(buf, 20, integrated_xgyro);
    _mav_put_float(buf, 24, integrated_ygyro);
    _mav_put_float(buf, 28, integrated_zgyro);
    _mav_put_uint32_t(buf, 32, time_delta_distance_us);
    _mav_put_float(buf, 36, distance);
    _mav_put_int16_t(buf, 40, temperature);
    _mav_put_uint8_t(buf, 42, sensor_id);
    _mav_put_uint8_t(buf, 43, quality);

    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD, buf, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_MIN_LEN, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_CRC);
#else
    mavlink_optical_flow_rad_t *packet = (mavlink_optical_flow_rad_t *)msgbuf;
    packet->time_usec = time_usec;
    packet->integration_time_us = integration_time_us;
    packet->integrated_x = integrated_x;
    packet->integrated_y = integrated_y;
    packet->integrated_xgyro = integrated_xgyro;
    packet->integrated_ygyro = integrated_ygyro;
    packet->integrated_zgyro = integrated_zgyro;
    packet->time_delta_distance_us = time_delta_distance_us;
    packet->distance = distance;
    packet->temperature = temperature;
    packet->sensor_id = sensor_id;
    packet->quality = quality;

    _mav_finalize_message_chan_send(chan, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD, (const char *)packet, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_MIN_LEN, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_CRC);
#endif
}
#endif

#endif

// MESSAGE OPTICAL_FLOW_RAD UNPACKING

/**
 * @brief Get field time_usec from optical_flow_rad message
 *
 * @return Timestamp (microseconds, synced to UNIX time or since system boot)
 */
static inline uint64_t mavlink_msg_optical_flow_rad_get_time_usec(const mavlink_message_t* msg)
{
    return _MAV_RETURN_uint64_t(msg,  0);
}

/**
 * @brief Get field sensor_id from optical_flow_rad message
 *
 * @return Sensor ID
 */
static inline uint8_t mavlink_msg_optical_flow_rad_get_sensor_id(const mavlink_message_t* msg)
{
    return _MAV_RETURN_uint8_t(msg,  42);
}

/**
 * @brief Get field integration_time_us from optical_flow_rad message
 *
 * @return Integration time in microseconds. Divide integrated_x and integrated_y by the integration time to obtain average flow. The integration time also indicates the.
 */
static inline uint32_t mavlink_msg_optical_flow_rad_get_integration_time_us(const mavlink_message_t* msg)
{
    return _MAV_RETURN_uint32_t(msg,  8);
}

/**
 * @brief Get field integrated_x from optical_flow_rad message
 *
 * @return Flow in radians around X axis (Sensor RH rotation about the X axis induces a positive flow. Sensor linear motion along the positive Y axis induces a negative flow.)
 */
static inline float mavlink_msg_optical_flow_rad_get_integrated_x(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  12);
}

/**
 * @brief Get field integrated_y from optical_flow_rad message
 *
 * @return Flow in radians around Y axis (Sensor RH rotation about the Y axis induces a positive flow. Sensor linear motion along the positive X axis induces a positive flow.)
 */
static inline float mavlink_msg_optical_flow_rad_get_integrated_y(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  16);
}

/**
 * @brief Get field integrated_xgyro from optical_flow_rad message
 *
 * @return RH rotation around X axis (rad)
 */
static inline float mavlink_msg_optical_flow_rad_get_integrated_xgyro(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  20);
}

/**
 * @brief Get field integrated_ygyro from optical_flow_rad message
 *
 * @return RH rotation around Y axis (rad)
 */
static inline float mavlink_msg_optical_flow_rad_get_integrated_ygyro(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  24);
}

/**
 * @brief Get field integrated_zgyro from optical_flow_rad message
 *
 * @return RH rotation around Z axis (rad)
 */
static inline float mavlink_msg_optical_flow_rad_get_integrated_zgyro(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  28);
}

/**
 * @brief Get field temperature from optical_flow_rad message
 *
 * @return Temperature * 100 in centi-degrees Celsius
 */
static inline int16_t mavlink_msg_optical_flow_rad_get_temperature(const mavlink_message_t* msg)
{
    return _MAV_RETURN_int16_t(msg,  40);
}

/**
 * @brief Get field quality from optical_flow_rad message
 *
 * @return Optical flow quality / confidence. 0: no valid flow, 255: maximum quality
 */
static inline uint8_t mavlink_msg_optical_flow_rad_get_quality(const mavlink_message_t* msg)
{
    return _MAV_RETURN_uint8_t(msg,  43);
}

/**
 * @brief Get field time_delta_distance_us from optical_flow_rad message
 *
 * @return Time in microseconds since the distance was sampled.
 */
static inline uint32_t mavlink_msg_optical_flow_rad_get_time_delta_distance_us(const mavlink_message_t* msg)
{
    return _MAV_RETURN_uint32_t(msg,  32);
}

/**
 * @brief Get field distance from optical_flow_rad message
 *
 * @return Distance to the center of the flow field in meters. Positive value (including zero): distance known. Negative value: Unknown distance.
 */
static inline float mavlink_msg_optical_flow_rad_get_distance(const mavlink_message_t* msg)
{
    return _MAV_RETURN_float(msg,  36);
}

/**
 * @brief Decode a optical_flow_rad message into a struct
 *
 * @param msg The message to decode
 * @param optical_flow_rad C-struct to decode the message contents into
 */
static inline void mavlink_msg_optical_flow_rad_decode(const mavlink_message_t* msg, mavlink_optical_flow_rad_t* optical_flow_rad)
{
#if MAVLINK_NEED_BYTE_SWAP || !MAVLINK_ALIGNED_FIELDS
    optical_flow_rad->time_usec = mavlink_msg_optical_flow_rad_get_time_usec(msg);
    optical_flow_rad->integration_time_us = mavlink_msg_optical_flow_rad_get_integration_time_us(msg);
    optical_flow_rad->integrated_x = mavlink_msg_optical_flow_rad_get_integrated_x(msg);
    optical_flow_rad->integrated_y = mavlink_msg_optical_flow_rad_get_integrated_y(msg);
    optical_flow_rad->integrated_xgyro = mavlink_msg_optical_flow_rad_get_integrated_xgyro(msg);
    optical_flow_rad->integrated_ygyro = mavlink_msg_optical_flow_rad_get_integrated_ygyro(msg);
    optical_flow_rad->integrated_zgyro = mavlink_msg_optical_flow_rad_get_integrated_zgyro(msg);
    optical_flow_rad->time_delta_distance_us = mavlink_msg_optical_flow_rad_get_time_delta_distance_us(msg);
    optical_flow_rad->distance = mavlink_msg_optical_flow_rad_get_distance(msg);
    optical_flow_rad->temperature = mavlink_msg_optical_flow_rad_get_temperature(msg);
    optical_flow_rad->sensor_id = mavlink_msg_optical_flow_rad_get_sensor_id(msg);
    optical_flow_rad->quality = mavlink_msg_optical_flow_rad_get_quality(msg);
#else
        uint8_t len = msg->len < MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN? msg->len : MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN;
        memset(optical_flow_rad, 0, MAVLINK_MSG_ID_OPTICAL_FLOW_RAD_LEN);
    memcpy(optical_flow_rad, _MAV_PAYLOAD(msg), len);
#endif
}

redpajama_set_name: RedPajamaGithub


I'm a huge fan of essential oils and aromatherapy. If I'm feeling a little stressed, tired or slightly out of sorts, I'd much rather use the power of scent than resort to any kind of tablet/medication or chemical.
MyPure recently sent me this beautiful blend of oils from Acorelle, designed to be energising, and stimulate both the mind and body.
The combination of oils in this blend is absolutely fantastic. With South African Green Mint to calm the nerves, Eucalyptus to energise, and Sicilian Lemon to stimulate and invigorate. The lovely scents of lime, douglas pine and black spruce also bring a vitality to the mix.
One of my favourite ways to use this blend are to pop a few drops into a diffuser and let the soothing, vibrant smells fill the room. A few deep breaths and you'll be feeling revived in no time. It's an amazing smell – the mint really stands out, and creates a really clean and pure feel to the air. It's very strong and you'll only need a few drops in a diffuser – completely uplifting. Just wonderful. It would be a wonderful oil to spread around when you're expecting guests, or when you've just cleaned your home.
Another alternative use is to make your own pulse point blend. You can add half a dozen drops to a small glass aromatherapy bottle – the remainder of which can be filled with your carrier oil of choice – and simply apply to your pulse points, such as your wrists or behind your ears, as and when you require a lift.
I absolutely love the fact that rather than just combine several energy boosting oils, Acorelle have included the Green Mint and Lime to restore and calm at the same time. This will give you something that caffeine never will!
Usually £12 for a bottle, MyPure currently have the Acorelle range of oils at an amazing £6. With 50% off I'll certainly be topping up my stores, and I highly recommend anyone to do the same! You are getting the power of 6 wonderful oils in one blend.
I really hope you like it! If you have any questions about essential oils or aromatherapy, do feel free to ask in the comments!
I received this product free of charge from MyPure for review purposes. All opinions are my own.


MVJH Open House Tonight 5:30-7:00!
Come meet your new teachers tonight from 5:30-7:00. This year, students may have difficulty reading their schedule. Our staff will be ready to help all students. If you are unable to attend, please refer to this flyer for assistance. We are excited to see you tonight!


NPL Beta Alanine increases muscle endurance during workouts and improves recovery by reducing exercise soreness. Increase Muscle Endurance Most fitness athletes include training to failure for each set in their workout programs. Eight studies have shown beta alanine to increase the number of additional reps athletes could perform during sets. Beta alanine benefited short bursts of exercise within the 60 – 240 seconds range. Ideal for weight lifting. Reduced Fatigue Performance of gym sessions was improved by reducing fatigue. The combination of doing more reps per set and not getting tired as quick will give you a great boost in reaching your fitness goals. Improved Recovery Consistently training at your peak is vital to achieving fitness success but so proper recovery. Complete recovery ensures that your performance in the gym is consistent and that you don't suffer from overtraining. Reduce Muscle Soreness Beta alanine is converted to carnosine which is stored in muscle cells. Carnosine is released in response to drops in ph which may be caused by exercise-induced lactic acid production (muscle soreness).
...for Monthly Giveaways, Discounts and Much More!
Whether you're on a weight loss journey, want to improve your fitness or strength, or an athlete or competitive bodybuilder... we can help choose products and supplements to suit your goals!


to be able to change things whenever we feel like we want to, not necessarily last. Differentiate between mobile workstations, business laptops, ultrabooks, and tablets testing tools who needs more than a all fonts—even ones that aren't installed—are cost of SolidCAM in usa accessible and usable from the apps' Font List Box. file into text frames on the Goose Lake Prairie review spread as their eyes and hands. Video Put cloud solutions to work between Bayer and SolidCAM Ltd in accelerating business solutions with Digital Publishing Suite table design. You can download it from .5 supports what is the price of SolidCAM video and audio tags Create high-end Hollywood AAA movie FX to update the Access Point Name APN database.
How much is SolidCAM software?


text:
Home Climate Change
EU lawmaker calls for carbon border tax revenues to boost climate finance
Mohammed Chahim believes that support is needed to clean up the industries of least developing countries in order for the proposed levy to conform with WTO rules.
Revenues from the EU's planned carbon border tax should be used to help the poorest countries decarbonise their polluting industries, a lawmaker leading on the issue has proposed.
Mohammed Chahim (a Dutch centre-left MEP) requested that additional climate finance be provided to low-income countries affected by the proposed levy on carbon intensive goods imported to the Union in a draft document submitted to the European Parliament. Climate Home News saw it.
The report, due to be debated by lawmakers in early February, is a response to the European Commission's proposal for trade partners to pay a carbon price equivalent to that paid by EU business.
Chahim's proposed amendments would broaden the scope of the tax and roll it out faster, with some support to soften the blow for the least developed countries (LDCs).
"It's important that we cooperate rather than be confrontational with our trade partners," he told Climate Home News. The tax "should not disproportionally affect least developed countries".
What to Watch in 2022Climate diplomacy is at a crossroads.
The levy is intended to prevent "carbon leakage": heavy industry fleeing Europe for countries with lower environmental standards as the bloc decarbonises.
Experts raised concerns that it could cause harm to certain poor countries who rely heavily upon trade with the EU, but bear little responsibility for the climate crisis.
Chahim's report calls for the levy, due to come into force in 2026, to be introduced sooner and on a wider range of imports, adding organic chemicals, hydrogen and polymers as sectors initially covered by the tax.
A transition period would be shorted from three to two years and free allowances would be phased out by the end of 2028 – eight years earlier than the Commission proposed.
There would be no general exemption for LDCs under Chahim's plan from these rapidly rising costs.
Instead, additional climate finance "at least equivalent in financial value" to the revenues generated from carbon adjustments at the border would be earmarked to support the decarbonisation of LDCs' heavy industries. This would lower the cost of future tariffs.
The Commission would be required to report annually on how these additional funds were used to address climate change among low-income countries.
'Extraordinary progress' – Beijing meets air pollution goals after coal crackdown
Climate Home was informed by Chahim that support for LDCs was required for the carbon levy's compatibility with the World Trade Organisation rules. These rules regulate trade between nations through reducing barriers and preventing discrimination.
These rules allow countries the ability to adopt trade-related measures to preserve the environment. If the revenues generated support the decarbonisation of LDCs' industries, then the policy is justified as an environmental measure, Chahim said.
"We believe this is a necessary condition to be WTO-compatible," he explained.
While there is broad support among lawmakers for using the levy's revenues as additional climate finance, some EU member states are expected to argue servicing EU debt must come first.
For Tim Gore, who heads the climate and circular economy programme at the Institute for European Environmental Policy, how the revenues are used will be critical to the EU's ability to convince its trading partners of the value of its policy.
"It is important for the EU to show that it has found new, additional and more practicable climate finance," said Gore. "This is going to be a key part of the diplomatic puzzle. If the EU wants to get this through with international trading partners, it is going to have resources on the table for support."
He said that financing the decarbonisation in LDCs would be a precedent for other countries, such as Canada, who are considering a carbon border tax.
Want climate news delivered to your inbox? Get our weekly newsletter and occasional bulletins by email for free.
While the major emerging economies have dismissed the levy for being unfair, the low-income nations are still grappling with the implications of the proposal.
Aluminium dominates Mozambique's exports, more than 80% of which go to the EU, for example. The proposed tariffs are also highly applicable to other African countries like Cameroon and Guinea, Zimbabwe, Zambia. Algeria, Morocco, and Zimbabwe. Not all of them qualify as LDCs.
Saliem Fakir, executive director of the African Climate Foundation, welcomed Chahim's report as "opening the debate" on applying equity principles to the EU's plans.
But he told Climate Home more could be done to turn the levy into an effective transition mechanism for the bloc's trading partners.
Fakir argued that LDCs containing very low carbon intensity, such as Mozambique, should be exempted from the scheme.
Source: Climate Change News
In Georgia, Bloated Costs Take Over a Nuclear Power Plant and a Fight Looms Over Who Pays
Inside Clean Energy: Wind and Solar Costs Have Risen. How Long Should We Expect This Trend to Last?
Covid Live Updates: Some U.S. Schools Shut Classrooms as Omicron Spreads
More competition will reduce meat prices in fight against inflation, says Biden
California hospitals find that Omicron causes fewer hospitalizations and shorter stays.

redpajama_set_name: RedPajamaCommonCrawl


Whilst Compass Associates Portsmouth HQ were hosting their charity day, our Manchester office held their own day of fundraising for Target Ovarian Cancer. Target Ovarian Cancer are the UK's leading Ovarian Cancer charity. Money raised goes towards improving early diagnosis, research into treatments and providing support to those diagnosed with ovarian cancer. The team hosted a bake sale including a chocolate cake, red velvet cake, flapjacks, Victoria sponge cake, Madeleines and vegan oatmeal and raisin cookies and marmalade cake. The team also held a "guess the number of sweets in the jar" competition.
The 19th National Care Awards 2017 were celebrated with a fantastic gala dinner and celebration at the London Hilton Metropole on Friday 24th November. Writer and comedian David Baddiel took care of the evening's proceedings, celebrating the incredible work of individuals and business within the care sector. For the fifth year in a row, Compass Associates were delighted to sponsor the Care Operations Manager award category. The award was presented to Louise Barnett of Balhousie Care Group. Congratulations to Louise and all the winners and award nominees. Sam Leighton-Smith, Director of Healthcare comments: "It was our privilege as always to partner with Caring Times at this, their 19th National Care Awards. It is quite comfortably the best social occasion of the year, celebrating every level of the care system and saying thank you to the unsung heroes who treat the most vulnerable in our society. As sponsor of the operations manager of the year I had the pleasure to present to winner, Louise Barnett of Balhousie who I know first hand strives for excellence in everything she does. A huge congratulations to her and her team. We look forward to continuing our alliance with Caring Times and being associated with one of the most fulfilling sectors in the country."


text:
UChicago Scientists Selected for Argonne's Entrepreneurship Program
Published on Monday, April 20, 2020
Managed by UChicago, Argonne includes three Department of Energy Office of Science user facilities: the Argonne Leadership Computing Facility, the Center for Nanoscale Materials, as well as the Advanced Photon Source. (Image courtesy of Argonne)
Two University of Chicago innovators developing quantum technologies are among six selected for Argonne National Laboratory's entrepreneurship program, Chain Reaction Innovations, which helps scientists launch and scale their businesses.
The Chain Reaction Innovations (CRI) program – in its fourth year – is funded by The Advanced Manufacturing Office within the US Department of Energy's Office of Energy Efficiency and Renewable Energy. In total, 156 applied to the program as part of the national solicitation process. The top 15 in February took part in the Finals Pitch Competition at Argonne.
"The CRI program provides two years of intense support to help scientists learn how to de-risk science-based innovations and build a business around them," said CRI Director John A. Carlisle. "This way, they can successfully translate their discoveries into real applications that have high societal and economic impact." CRI innovators have raised nearly $18 million and helped create 76 jobs as of February 2020.
Beginning in June, each innovator from the new cohort will work, full time, with a host scientist at Argonne. They also will receive support from mentors at UChicago's Polsky Center for Entrepreneurship and Innovation and mHUB.
Pranav Gokhale and Super.tech
Pranav Gokhale, a doctoral candidate in quantum computer architecture at UChicago, has developed Super.tech as an extension of the National Science Foundation's Enabling Practical-Scale Quantum Computation (EPiQC) research project.
"Super.tech aims to close the gap between quantum hardware and quantum software, in order to realize practical applications sooner than otherwise possible," said Gokhale, noting that current methods for controlling quantum computers must choose between accurate physics-based approaches or scalable computer science-based approaches.
"Our technology is uniquely interdisciplinary, achieving both accuracy and scalability," he said. "Concretely, our research has already led to 5x performance gains, and we expect another 10x improvement from ongoing work."
Speaking to Gokhale's work, Carlisle said Super.tech "enables the development of software and hardware that we expect will have the same impact on quantum computing that Microsoft Windows had on personal computing."
A few years ago, Gokhale was an Innovation Fund Associate, a role in which he gained first-hand experience evaluating early-stage companies and responding to investor questions, said Melissa Byrn, director of innovation programs at the Polsky Center.
"He's spent the last few years building up his personal entrepreneurial skillset in addition to his training and technical development in his PhD program," she added.
Matthew Ackerman and QDIR
A PhD candidate in physical chemistry at the University, Matthew Ackerman since 2016 has been working to increase the technology readiness level of photodetectors based on mercury telluride (HgTe) colloidal quantum dots.
Ackerman said the approach is in contrast to the industry's standard processes and will drive the cost-reduction of infrared technologies: "These quantum dot inks are solution processable, which enables low-cost, scalable manufacturing and simplifies the integration of the infrared absorber with the silicon readout electronics," he explained.
"With the support of CRI, I hope to validate the imaging capabilities of HgTe colloidal quantum dots in the shortwave and mid-wave infrared with potential customers," Ackerman added, noting that support from CRI mentors will "significantly expedite these technical milestones and business development," helping his company – QDIR – to attract strategic partners and future funding.
"Matt's innovation will dramatically reduce the cost of making thermal imaging cameras and sensors so they can be more broadly used for applications like autonomous transportation and AI-guided vision systems for advanced manufacturing," said Carlisle.
Additionally, the technology could be used to monitor groups of people to detect quickly whether someone is running a fever – making the innovation especially notable today amid the current Covid-19 pandemic. "The goal would be to allow for a relaxing of the shelter-in-place policies while also protecting overall public health," said Carlisle.
Ackerman also participated in the Polsky Center's fall 2019 I-Corps cohort. The 7-week program is designed to empower UChicago scientists, researchers, and students to test the commercial potential of their research and ideas. Participating in the program enabled Ackerman and faculty inventor professor Guyot-Sionnest to explore and validate the customer segment and value proposition aspects of their business model, Byrn said.
"Their dedication to the process and their openness to external feedback demonstrates to me that they are committed to bringing their technology to the market and are well positioned for success," she added.
Both Gokhale and Ackerman also are 2020 George Shultz Innovation Fund finalists. The George Shultz Innovation Fund is a perennial feature with 100% of returns reinvested to support startups across the University of Chicago, Argonne, Fermilab, and Marine Biological Laboratory ecosystem.
"I am thrilled that they have been accepted to the Chain Reaction Innovations program and the Innovation Fund," noted Byrn. "These programs will help them continue to scale and launch."
AIArgonneArgonne National LaboratoryChain Reaction InnovationsCovid-19CRIGeorge Shultz Innovation FundquantumThermal imagingUS Department of Energy
Compass Demo Day to Showcase Deep Tech Startups
Thursday, January 6, 2022 All News
Share This Article Twitter Facebook Linkedin Email Print


Residents of Baton Rouge love their pets, but hate those pesky fleas. Professional flea extermination by your local experts at Bayou Cajun Pest Control .
Solve flea problems fast. eastside exterminators specializes in pest control for the greater seattle area. Call now to eliminate fleas and prevent their return.
Are woodpeckers attracted to your home? Here, your woodpecker control guide to remove noisy woodpeckers. Check out our seriously smart solutions and find out how to get rid of woodpeckers using efficient and safe products.


text:
package net.ontopia.topicmaps.core.index;

import java.util.Collection;
import java.util.Collections;
import net.ontopia.infoset.core.LocatorIF;
import net.ontopia.infoset.impl.basic.URILocator;
import net.ontopia.topicmaps.core.DataTypes;
import net.ontopia.topicmaps.core.TopicIF;
import net.ontopia.topicmaps.core.TopicNameIF;
import net.ontopia.topicmaps.core.VariantNameIF;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;

public abstract class NameIndexTest extends AbstractIndexTest {

  protected NameIndexIF ix;

  @Override
  @Before
  public void setUp() throws Exception {
    ix = (NameIndexIF)super.setUp("NameIndexIF");
  }

  @Test
  public void testTopicNameIndex() {
    TopicIF t1 = builder.makeTopic();
    TopicNameIF bn1 = builder.makeTopicName(t1, "");
    TopicNameIF bn2 = builder.makeTopicName(t1, "");
    TopicNameIF bn3 = builder.makeTopicName(t1, "-"); // FIXME: using hyphen for now as oracle treats empty string as null.

    Assert.assertTrue("TopicName index is not empty", ix.getTopicNames("TopicName").isEmpty());

    bn1.setValue("TopicName");
    bn2.setValue("TopicName2");

    Assert.assertTrue("TopicName not indexed",
           ix.getTopicNames("TopicName").contains(bn1));
    Assert.assertTrue("TopicName2 incorrectly indexed.",
           !ix.getTopicNames("TopicName").contains(bn2));
    Assert.assertTrue("TopicName2 not indexed",
           ix.getTopicNames("TopicName2").contains(bn2));
    Assert.assertTrue("TopicName incorrectly indexed",
           !ix.getTopicNames("TopicName2").contains(bn1));
    Assert.assertTrue("Could not find empty base name via \"\"",
           ix.getTopicNames("-").size() == 1);
    Assert.assertTrue("Wrong base name found via \"\"",
           ix.getTopicNames("-").contains(bn3));

    // Duplicate base names:
    bn3 = builder.makeTopicName(t1, "TopicName");
    Assert.assertTrue("second base name not found via string",
            ix.getTopicNames("TopicName").size() == 2);

    // STATE 4: base names with difficult characters
    TopicNameIF bn4 = builder.makeTopicName(t1, "Erlend \u00d8verby");
    TopicNameIF bn5 = builder.makeTopicName(t1, "Kana: \uFF76\uFF85"); // half-width katakana

    Assert.assertTrue("couldn't find base name via latin1 string",
           ix.getTopicNames("Erlend \u00d8verby").size() == 1);
    Assert.assertTrue("wrong base name found via latin1 string",
           ix.getTopicNames("Erlend \u00d8verby").iterator().next().equals(bn4));

    Assert.assertTrue("couldn't find base name via hw-kana string",
           ix.getTopicNames("Kana: \uFF76\uFF85").size() == 1);
    Assert.assertTrue("wrong base name found via hw-kana string",
           ix.getTopicNames("Kana: \uFF76\uFF85").iterator().next().equals(bn5));

  }

  @Test
  public void testTopicNameIndexByType() {
    // STATE 1: no topic name values defined
    TopicIF topic = builder.makeTopic();
    TopicIF nameType1 = builder.makeTopic();
    TopicIF nameType2 = builder.makeTopic();
    String value0 = "dummy0";
    String value1 = "dummy";
    TopicNameIF topicName = builder.makeTopicName(topic, nameType1, value0);
    Assert.assertTrue("Index of topic names by value and type is not empty.",
      ix.getTopicNames(value1, nameType1).isEmpty());

    // STATE 2: Topic name value added
    topicName.setValue(value1);
    Assert.assertTrue("Index of topic names by value and type does not contain test value.",
      ix.getTopicNames(value1, nameType1).contains(topicName));

    // STATE 3: Duplicate topic name value added
    TopicNameIF topicName2 = builder.makeTopicName(topic, nameType1, value1);
    Assert.assertTrue("second topic name not found by value",
      ix.getTopicNames(value1, nameType1).size() == 2);

    // STATE 4: Change first topic name value
    String value2 = "dummy2";
    topicName.setValue(value2);
    Assert.assertTrue("list of topic names not updated",
      ix.getTopicNames(value1, nameType1).size() == 1);
    Assert.assertTrue("first topic name not found by new value",
      ix.getTopicNames(value2, nameType1).size() == 1);

    // STATE 5: Change topic name types
    Assert.assertTrue("Index of topic names by value and type is not empty for original type",
      ix.getTopicNames(value2, nameType2).isEmpty());
    topicName.setType(nameType2);
    Assert.assertFalse("Index of topic names by value and type does not detect changed type",
      ix.getTopicNames(value2, nameType2).isEmpty());
    Assert.assertTrue("Index of topic names by value and type does not detect aborted type",
      ix.getTopicNames(value2, nameType1).isEmpty());

    // STATE 6: Change second topic name type
    topicName2.setType(nameType2);
    Assert.assertFalse("Index of topic names by value and type contains topic name with wrong value",
      ix.getTopicNames(value2, nameType2).contains(topicName2));
  }

  @Test
  public void testVariantIndexInternal()  {

    // STATE 1: No variants
    TopicIF t1 = builder.makeTopic();
    TopicNameIF bn1 = builder.makeTopicName(t1, "");
    builder.makeTopic();
    TopicNameIF bn2 = builder.makeTopicName(t1, "");

    Assert.assertTrue("TopicName index is not empty", ix.getTopicNames("TopicName").isEmpty());

    // STATE 2: Variants added
    VariantNameIF vn1 = builder.makeVariantName(bn1, "VariantName", Collections.<TopicIF>emptySet());
    VariantNameIF vn2 = builder.makeVariantName(bn2, "VariantName2", Collections.<TopicIF>emptySet());
    bn1.setValue("TopicName");
    bn2.setValue("TopicName2");

    Assert.assertTrue("VariantName not indexed",
							 ix.getVariants("VariantName", DataTypes.TYPE_STRING).contains(vn1));
    Assert.assertTrue("VariantName2 incorrectly indexed.",
							 !ix.getVariants("VariantName", DataTypes.TYPE_STRING).contains(vn2));
    Assert.assertTrue("VariantName2 not indexed",
							 ix.getVariants("VariantName2", DataTypes.TYPE_STRING).contains(vn2));
    Assert.assertTrue("VariantName incorrectly indexed",
							 !ix.getVariants("VariantName2", DataTypes.TYPE_STRING).contains(vn1));
    //! Assert.assertTrue("couldn't find variant name via null",
    //!            ix.getVariants((String)null, DataTypes.TYPE_STRING).size() == 1);
    //! Assert.assertTrue("wrong base name found via null",
    //!            ix.getVariants((String)null, DataTypes.TYPE_STRING).contains(vn3));

    // STATE 3: Duplicate added
    builder.makeVariantName(bn1, "VariantName", Collections.<TopicIF>emptySet());

    Assert.assertTrue("duplicate variant name string not found via string",
           ix.getVariants("VariantName", DataTypes.TYPE_STRING).size() == 2);

    // STATE 4: variant names with difficult characters
    VariantNameIF v5 = builder.makeVariantName(bn1, "Erlend \u00d8verby", Collections.<TopicIF>emptySet());
    VariantNameIF v6 = builder.makeVariantName(bn1, "Kana: \uFF76\uFF85", Collections.<TopicIF>emptySet()); // half-width katakana

    Assert.assertTrue("couldn't find variant name via latin1 string",
           ix.getVariants("Erlend \u00d8verby", DataTypes.TYPE_STRING).size() == 1);
    Assert.assertTrue("wrong variant name found via latin1 string",
           ix.getVariants("Erlend \u00d8verby", DataTypes.TYPE_STRING).iterator().next().equals(v5));

    Assert.assertTrue("couldn't find variant name via hw-kana string",
           ix.getVariants("Kana: \uFF76\uFF85", DataTypes.TYPE_STRING).size() == 1);
    Assert.assertTrue("wrong variant name found via hw-kana string",
           ix.getVariants("Kana: \uFF76\uFF85", DataTypes.TYPE_STRING).iterator().next().equals(v6));

  }

  @Test
  public void testVariantIndexExternal() {
    // STATE 1: No variant locators defined
    TopicIF topic = builder.makeTopic();
    TopicNameIF bn = builder.makeTopicName(topic, "");
    VariantNameIF vn = builder.makeVariantName(bn, "", Collections.<TopicIF>emptySet());
    LocatorIF loc = null;
    try {
      loc = new URILocator("http://www.ontopia.net/test-data/variant-locator.xml");
    } catch (java.net.MalformedURLException ex) {
      Assert.fail("Test Setup: Malformed URL while creating locator for variant name test.");
    }
    Assert.assertTrue("Index of variant names by locator is not empty.",
							 ix.getVariants(loc.getAddress(), DataTypes.TYPE_URI).isEmpty());

    // STATE 2: Variant locator defined
    vn.setLocator(loc);

    Assert.assertTrue("Index of variant names by locator does not contain test value.",
           ix.getVariants(loc.getAddress(), DataTypes.TYPE_URI).contains(vn));

    // STATE 3: Duplicate variant locator defined
    builder.makeVariantName(bn, loc, Collections.<TopicIF>emptySet());
    Assert.assertTrue("second variant not found by locator",
           ix.getVariants(loc.getAddress(), DataTypes.TYPE_URI).size() == 2);
  }

  public void _testNullParameters() {
    // FIXME: tests for the wrong thing!
    testNull("getTopicNames", "java.lang.String");
    testNull("getVariants", "java.lang.String");
  }

  @Test
  public void testTopicRemoval() {
    TopicIF t1 = builder.makeTopic();
    TopicNameIF bn1 = builder.makeTopicName(t1, "bn1");

    Assert.assertTrue("couldn't find base name via name",
           ix.getTopicNames("bn1").size() == 1);
    Assert.assertTrue("wrong base name found via latin1 string",
           ix.getTopicNames("bn1").iterator().next().equals(bn1));

    t1.remove();

    Assert.assertTrue("found base name after topic had been removed",
           ix.getTopicNames("bn1").size() == 0);
  }

    @Test
    public void testVariants() {
        URILocator loc1 = null;
        URILocator loc2 = null;

        try {
            loc1 = new URILocator("http://www.ontopia.net");
            loc2 = new URILocator("ftp://sandbox.ontopia.net");
        }
        catch (java.net.MalformedURLException e) {
            Assert.fail("(INTERNAL) bad URLs given");
        }

        // STATE 1: empty topic map
        // Assert.assertTrue("index finds spurious variant locators",
        //        ix.getVariantLocators().size() == 0);

        Assert.assertTrue("index finds variants it shouldn't",
               ix.getVariants(loc1.getAddress(), DataTypes.TYPE_URI).size() == 0);

        // STATE 2: topic map has some topics in it
        TopicIF t1 = builder.makeTopic();
        TopicNameIF bn1 = builder.makeTopicName(t1, "");
        VariantNameIF v1 = builder.makeVariantName(bn1, loc1, Collections.<TopicIF>emptySet());
        builder.makeVariantName(bn1, "", Collections.<TopicIF>emptySet());

        // Assert.assertTrue("variant locator not found",
        //        ix.getVariantLocators().size() == 2);
        // Assert.assertTrue("variant locator identity lost",
        //        ix.getVariantLocators().contains(loc1));
        // Assert.assertTrue("null locator not found",
        //        ix.getVariantLocators().contains(null));
        Assert.assertTrue("variant not found via locator",
               ix.getVariants(loc1.getAddress(), DataTypes.TYPE_URI).size() == 1);
        Assert.assertTrue("wrong variant found via locator",
               ix.getVariants(loc1.getAddress(), DataTypes.TYPE_URI).iterator().next().equals(v1));

        Assert.assertTrue("spurious variant found via locator",
               ix.getVariants(loc2.getAddress(), DataTypes.TYPE_URI).size() == 0);

        // STATE 3: topic map with duplicates
        builder.makeVariantName(bn1, loc1, Collections.<TopicIF>emptySet());

        // Assert.assertTrue("duplicate variant locator not filtered out",
        //        ix.getVariantLocators().size() == 2);
        Assert.assertTrue("second variant not found via locator",
               ix.getVariants(loc1.getAddress(), DataTypes.TYPE_URI).size() == 2);
    }

  @Test
  public void testNulls() {
    Collection<VariantNameIF> variants = ix.getVariants(null);
    Assert.assertNotNull(variants);
    Assert.assertTrue(variants.isEmpty());

    variants = ix.getVariants(null, null);
    Assert.assertNotNull(variants);
    Assert.assertTrue(variants.isEmpty());

    Collection<TopicNameIF> names = ix.getTopicNames(null);
    Assert.assertNotNull(names);
    Assert.assertTrue(names.isEmpty());

    names = ix.getTopicNames(null, null);
    Assert.assertNotNull(names);
    Assert.assertTrue(names.isEmpty());
  }
}


The Buddha's Birthday Education Project undertakes unique projects annually to showcase the message of the Buddha in various and accessible mediums.
Throughout our young but fruitful history, we have created artworks, videos, apps and commemorative books to bring the history of Buddhism to the community.
In addition, volunteers "on the ground" reach out directly to the public through tour guides, organisation of dharma talks and art and games activities.
BBEP has displayed throughout various states in Australia and internationally.
With this library of BBEP resources, we hope to assist in the creation of your own special BBEP exhibition.
View our training videos to have an overview about how BBEP exhibitions is set up. Training videos will give you an ideas how to prepare for the BBEP exhibition.
Exhibits are categorised under videos, paintings, musics, etc. You can view each exhibits details such as file size, file type, image resolution, print size, print instruction, text description and so on.
Click the Download button to download the exhibits that come with all the relevant working files and instructions. Only members have permission to download the files.


text:
One Chinese city is using facial-recognition that can help police detect and arrest criminals in as little as 2 minutes
Tara Francis Chan
Security cameras look out over Tiananmen Square before Tiananmen Gate.
Ed Jones/AFP/Getty Images
The Chinese city of Guiyang said its facial-recognition software allows police to identify and arrest suspects in as little as two minutes.
Cameras are placed in more than 10,000 public areas and send surveillance feeds to police in real-time, identifying individuals, their family members and where they've been in the last week.
A BBC reporter tested the system in December and was identified and captured within seven minutes.
China has hit back at concerns over privacy, saying that there are no problems because the data is collected in "public places."
An expansive facial recognition network in the southwestern Chinese city of Guiyang have reportedly enabled police to detect and apprehend criminals in as little as two minutes.
The surveillance cameras are set up in more than 10,000 public places across the city, which is larger than the state of Delaware, reported the state-run newspaper Global Times this week. The cameras stream real-time footage back to a huge LED screen — 22 metres (24 yards) long and 5 metres (5 years) tall — which is monitored by police.
The system, which has a 90% accuracy rate, simultaneously checks faces against a nationwide database and can almost immediately provide a person's name, age, gender, ethnicity, as well as information including family members, people they regularly meet, and places they've recently been.
"The screen captures images of any suspects once they arrive in Guiyang, and then automatically reports them to the police command center which immediately allocates nearby police to make the arrest. The whole process from detecting to apprehending suspects usually takes less than two minutes," Global Times reported, citing a press release from local police.
The development is part of Skynet, a nationwide monitoring programme launched in 2005 to increase the use and capabilities of surveillance cameras.
In Guiyan last year, facial-recognition technology led to the apprehension of 375 suspects, including 39 fugitives, according to police.
"Guiyang has 'Skynet' everywhere. No matter where you go, there are eyes on you," Li Bin, an official at the Guiyang Public Security Bureau, said in a press release.
A BBC reporter put the Guiyang system to the test in December last year. In a city of 4 million people, it took only seven minutes for the reporter to be identified and arrested.
But as quick as Guiyang's police response times are, the number of cameras is lagging behind Beijing, which achieved 100% coverage of the city in 2015.
Currently, there are 170 million surveillance cameras in China and by 2020, the country hopes to have 570 million — that's nearly one camera for every two citizens.
Police are also developing AI-powered systems that, aside from recognizing faces, can identify people from their repeated behaviours or even gait. Officials want to use this information to predict crime before it happens.
China hits back at claims its surveillance infringes citizen's rights
Security cameras hang on a lamp at Tiananmen Square, Beijing.
Feng Li/Getty Images
China has begun hitting back at human rights concerns over its expanding surveillance and facial recognition technologies.
"Some mainstream Western media outlets define the system as a tool for massive surveillance and suppressing human rights," an editorial in Global Times said last year. "This is the kind of fake news that US President Donald Trump often slams."
Part of the issue is that the government in China defines a person's right to privacy differently than Western countries.
The Global Times reported the system in Guiyang, like those across China, "does not infringe on people's privacy and human rights, as facial information is only collected in public places."
Its this approach to privacy that, until recently, has been a huge driver in China's soaring AI sector, according to a report out this month from Oxford University.
Lax privacy protections have allowed Chinese companies to access masses of data to develop AI and technologies like facial recognition technologies because "sharing among government agencies and companies is common," the report said.
Watch the BBC test here:
SEE ALSO: 22 eerie photos show how China uses facial recognition to track its citizens as they travel, shop — and even use toilet paper
More: China Surveillance Facial Recognition


text:
HomeAuckland Fringe FestivalREVIEW: Ghost Trees (Auckland Fringe)
REVIEW: Ghost Trees (Auckland Fringe)
Review by Maulik Thakkar
February 28, 2020 Maulik Thakkar Auckland Fringe Festival, Theatre Reviews
[A Sombre Analysis of A Declining World]
Gary Stalker's original play Ghost Trees traces the story of the protagonist's loss of a partner to cancer and the pursuit of meaning in a rapidly-deteriorating world. It speaks to the bewildering silence of humanity in response to species extinction exacerbated by climate change, and the augmented feeling of isolation that hounds us as our mentors fail to offer us solutions. Performed as a solo by Stalker, we observe the narrator navigate the malaise of losing one's identity, trying to connect with memory while enveloped by the soundscapes of nature in the outdoors. What emerges is a thought-provoking deep-dive into the myriad interwoven interpretations of what despair and belonging mean in an increasingly anxious social environment.
Walking into Q Theatre's Loft, I see five black blocks set up horizontally in pyramid-formation with green chalk drawings to mark branches. A glass of water is set on a tall table to one side, and Jude Robertson's soundscape of birdsong and rustling leaves introduces a sense of place. The opening scene is marked by the unseen partner outlining the reasons she wanted to live among kauri trees. Spelling out the need to make this a home, we see Stalker avoid the kauri trees as he walks onstage, holding a single kauri twig in his left hand. He gazes into the audience as the partner's voice concludes a thoroughly relatable prologue, bringing us up to speed with what we are led to believe is the present.
Stalker guides us through the story of his partner's battle with ovarian cancer through the lens of his scientific research into kauri dieback disease, or Phytophthora Agathidicida, weaving together the two realities of decline. The kauri twig is placed on the side table beside the full glass, and I turn to examine it throughout the performance. We quickly lose track of the present as it merges together with the vague faintness of the past and the uncertain idiosyncrasies of the future, spirited away to an ethereal place by Stalker's mesmerising voice. Wherever we expect connectedness to mentors, we find dismissal of scientific discovery and attempts to shirk curiosity for the unknown. Ghost Trees' plot succeeds at presenting neither optimism nor pessimism – instead offering a highly personal journey to a balance between being caught up in the doldrums of loss in the one direction and the disorientation of not knowing how to find ourselves again in the other.
We are invited to explore what belonging means through the vulnerabilities Stalker presents us with by gazing into each of our faces in turn, calling connections with each other into question. Although Ghost Trees does not directly ask through the text why humanity finds itself on the edge of the precipice of cataclysmic destruction, it does explore the theme of complacency in the context of attaining and gatekeeping privilege. Stalker is most effective where he describes the stillness of being unable to move forward in a variety of poetic words – we are compelled to trust in his voice to guide us through emotions of grief, yearning and the slightest glimmerings of hope.
The play delves into the helplessness of our species in the face of the unpredictability of nature's turns and transformations, while also questioning the audience about the extent to which affirmation starts to become unbalanced when modernity becomes overwhelming. Modernity is represented here by the sound of a distant single-engine airplane taking off from Auckland Airport. It appears to be an omnipresent reminder of the manmade nature of the cause of our impending destruction, both on the personal and community levels. It is also descended from the settler-colonial enterprise of the nineteenth century, although this is absent from this production.
There is a gentle, unhurried pace to Stalker's script that invites the audience to consider how connections to place form. It is an effective method for the protagonist to focus on the personal story of seeking belonging through the connections offered by property ownership. Later in the performance, the idea of ownership is contrasted against the notion of custodianship. Whether this is a nod to the Māori worldview on kaitiakitanga is unclear to me, but I would enjoy seeing a follow-up to this piece focusing more tightly on the effects of colonisation, and the mass import of flora and fauna from Europe, on Aotearoa's biosphere.
Again and again, we are asked to consider how our reaction to a sense of helplessness can be mitigated by connectedness to the natural world around us. Paul Gittins' direction of the soulful delivery of Stalker's solo performance is powerfully executed, and made more believable by the subtle shades of Michael Goodwin's lighting design. Robertson's soundscape is the lifeblood of this production, and the amalgamation of the haunting voice of the narrator's late partner with the compassionate realism of Stalker's paced monologue succeeds at moving the audience out of its collective comfort zone without realising it.
Ghost Trees is a collection of ruminations about how control matters very little in the larger context of ecological balance that humans live amidst. There is a larger-than-life quality to the minimalism of the set, which allows for us to imagine ourselves in the wide expanse of kauri trees in the Waitakere ranges. Effective use of pause works in Gary Stalker's favour during the lines of his monologue, warmly ushering us into the unfamiliar space of confronting how inaction and dismissal have brought each of us to where humanity teeters on the edge of catastrophe. Although colonisation needs to be further probed in the process of reflecting upon our arrogance in playing omnipotent deities on a mission to control nature, the play nevertheless draws from an elegantly straightforward structure to deliver an engaging meditation on death and destruction at a crucial moment in Aotearoa's history.
Ghost Trees plays Q Loft as part of Summer at Q and Auckland Fringe 27 to 29 February, 2020.
Auckland Fringe 2020
Gary Stalker
Ghost Trees
Paul Gittins
REVIEW: The Mooncake and the Kūmara (Oryza Foundation)
SCENE BY NATHAN: Auckland Pride and Fringe 2020
REVIEW: Every Brilliant Thing (Auckland Arts Festival)
1 Comment on REVIEW: Ghost Trees (Auckland Fringe)
Paul Armstrong March 10, 2020 at 1:36 pm
Gary was spellbinding in his sense of loss of a loved partner in her prime & loss of habitat in a mostly uncaring world. A sobering reminder of life's fragility.


Posted on May 28, 2018 by Morgana Martin, the magicvintagespy.	This entry was posted in blogger, classic clothing, clothing, cocktail dress, custom-made, dress, dressy, fashion, find, guidebook, hand-made, hand-tailored, handmade, ladies, mid-century, photos, Post-war, stores, true vintage, Uncategorized, vintage, vintage blogger, vintage clothing, vintage expert, war-time, WARTIME, women's, WWII and tagged '40's, '50's, 1940's, 1940's, 1950's, 1950's, ´50´s, blogger, classic clothing, clothing, cocktail dress, custom-made, custom-tailored, custom-tailored, dress, dressy, fashion, Fifties, find, Forties, frock, guidebook, hand-made, hand-tailored, handmade, ladies, ladies', mid-century, photos, Post-war, shopping tips, stores, true vintage, Uncategorized, vintage, vintage blogger, vintage clothing, vintage expert, war-time, WARTIME, women's, WWII. Bookmark the permalink.


text:
> This is a work in progress, but I think it'll be much easier for you to know what to do to have it written out!

## API Unit Tests

- Run `npm start api.unit` to run the tests in watch mode
- Relevant files:
  - You'll write your tests in: `api/src/routes/__tests__/utils.js`
  - The source code you're testing is: `api/src/routes/utils.js`
  - The demo is in: `api-final/demo/unit/`
  - The solution is in: `api-final/src/routes/`

### TDD a new feature

Setup is the same as above!

### Fix the bug

- Run `npm start api.unit` to run the tests in watch mode
- Relevant files:
  - You'll write your tests in: `api/src/models/__tests__/user.js`
  - The bug is in: `api/src/models/user.js`
  - The solution is in: `api-final/src/models/`

> Remember to first find the bug, reproduce it with a test, then fix the bug.
> That order is important!

## API Integration Tests

- Run `npm start api.integration` to run the tests in watch mode
- Relevant files:
  - You'll write your tests in: `api/tests/integration/articles.test.js`
  - The article's routes are defined in: `api/src/routes/api/articles.js`
  - The demo is in: `api-final/demo/integration/`
  - The solution is in: `api-final/tests/integration/`

## Client Unit Tests

- Run `npm start client.unit` to run the tests in watch mode
- Relevant files:
  - You'll write your tests in: `src/reducers/__tests__/` and `src/screens/__tests__`
  - The source code you're testing is next to those folders.
  - The demo is in: `client-final/demo/unit/`
  - The solution is in: `client-final/tests/unit/`

## Client Integration Tests

- Run `npm start client.integration` to run the tests in watch mode
- Relevant files:
  - You'll write your tests in: `client/tests/integration/login.test.js`
  - The login component is: `client/src/screens/login.js`
  - The demo is: `client-final/tests/integration/register.test.js`
  - The solution is: `client-final/tests/integration/login.test.js`

## End to End Tests

- Run `npm start e2e.dev` to run the tests in dev mode
- Relevant files:
  - You'll write your tests in: `cypress/e2e/users_spec.js`
  - You may find: `cypress/e2e/utils.js` useful