|
CryptoAuthLib
Atmel CryptoAuthentication Library
|
These methods define the hardware abstraction layer for communicating with a CryptoAuth device. More...
Data Structures | |
| struct | ATCAHAL_t |
| an intermediary data structure to allow the HAL layer to point the standard API functions used by the upper layers to the HAL implementation for the interface. This isolates the upper layers and loosely couples the ATCAIface object from the physical implementation. More... | |
| struct | atcaI2Cmaster |
| This is the hal_data for ATCA HAL. More... | |
| struct | cdc_device |
| struct | atcacdc |
| struct | atcaSWImaster |
| This is the hal_data for ATCA HAL. More... | |
| struct | hid_device |
| struct | atcahid |
Macros | |
| #define | max(a, b) (((a) > (b)) ? (a) : (b)) |
| #define | min(a, b) (((a) < (b)) ? (a) : (b)) |
| #define | CDC_DEVICES_MAX 10 |
| #define | CDC_BUFFER_MAX 1024 |
| #define | INVALID_HANDLE_VALUE ((int)(-1)) |
| #define | MAX_I2C_BUSES 2 |
| #define | MAX_I2C_BUSES 6 |
| #define | MAX_I2C_BUSES 6 |
| #define | MAX_I2C_BUSES 3 |
| #define | SWI_WAKE_TOKEN ((uint8_t)0x00) |
| flag preceding a command More... | |
| #define | SWI_FLAG_CMD ((uint8_t)0x77) |
| flag preceding a command More... | |
| #define | SWI_FLAG_TX ((uint8_t)0x88) |
| flag requesting a response More... | |
| #define | SWI_FLAG_IDLE ((uint8_t)0xBB) |
| flag requesting to go into Idle mode More... | |
| #define | SWI_FLAG_SLEEP ((uint8_t)0xCC) |
| flag requesting to go into Sleep mode More... | |
| #define | HID_GUID { 0x4d1e55b2, 0xf16f, 0x11cf, 0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } |
| #define | HID_DEVICES_MAX 10 |
| #define | HID_PACKET_MAX 512 |
| #define | MAX_I2C_BUSES 4 |
| #define | KIT_TX_WRAP_SIZE (7) |
| #define | KIT_MSG_SIZE (32) |
| #define | KIT_RX_WRAP_SIZE (KIT_MSG_SIZE + 6) |
| #define | MAX_SWI_BUSES 6 |
| #define | RECEIVE_MODE 0 |
| #define | TRANSMIT_MODE 1 |
| #define | RX_DELAY { volatile uint8_t delay = 90; while (delay--) __asm__(""); } |
| #define | TX_DELAY 90 |
| #define | DEBUG_PIN_1 EXT2_PIN_5 |
| #define | DEBUG_PIN_2 EXT2_PIN_6 |
| #define | MAX_SWI_BUSES 6 |
| #define | RECEIVE_MODE 0 |
| #define | TRANSMIT_MODE 1 |
| #define | RX_DELAY 10 |
| #define | TX_DELAY 93 |
| #define | MAX_SWI_BUSES 6 |
| #define | RECEIVE_MODE 0 |
| #define | TRANSMIT_MODE 1 |
| #define | RX_DELAY 10 |
| #define | TX_DELAY 90 |
Typedefs | |
| typedef struct atcaI2Cmaster | ATCAI2CMaster_t |
| This is the hal_data for ATCA HAL. More... | |
| typedef int | HANDLE |
| typedef struct cdc_device | cdc_device_t |
| typedef struct atcacdc | atcacdc_t |
| typedef struct atcaI2Cmaster | ATCAI2CMaster_t |
| this is the hal_data for ATCA HAL More... | |
| typedef struct atcaI2Cmaster | ATCAI2CMaster_t |
| this is the hal_data for ATCA HAL for ASF SERCOM More... | |
| typedef struct atcaI2Cmaster | ATCAI2CMaster_t |
| this is the hal_data for ATCA HAL for Atmel START SERCOM More... | |
| typedef struct atcaI2Cmaster | ATCAI2CMaster_t |
| this is the hal_data for ATCA HAL for ASF SERCOM More... | |
| typedef struct atcaSWImaster | ATCASWIMaster_t |
| This is the hal_data for ATCA HAL. More... | |
| typedef struct hid_device | hid_device_t |
| typedef struct atcahid | atcahid_t |
| typedef struct atcaI2Cmaster | ATCAI2CMaster_t |
| this is the hal_data for ATCA HAL created using ASF More... | |
| typedef struct atcaSWImaster | ATCASWIMaster_t |
| this is the hal_data for ATCA HAL for ASF SERCOM More... | |
| typedef struct atcaSWImaster | ATCASWIMaster_t |
| this is the hal_data for ATCA HAL for ASF SERCOM More... | |
| typedef struct atcaSWImaster | ATCASWIMaster_t |
| this is the hal_data for ATCA HAL for SWI UART More... | |
Enumerations | |
| enum | i2c_read_write_flag { I2C_WRITE = (uint8_t)0x00, I2C_READ = (uint8_t)0x01 } |
| This enumeration lists flags for I2C read or write addressing. More... | |
| enum | swi_flag { SWI_FLAG_CMD = (uint8_t)0x77, SWI_FLAG_TX = (uint8_t)0x88, SWI_FLAG_IDLE = (uint8_t)0xBB, SWI_FLAG_SLEEP = (uint8_t)0xCC } |
| This enumeration lists flags for SWI. More... | |
Functions | |
| ATCA_STATUS | hal_iface_init (ATCAIfaceCfg *, ATCAHAL_t *hal) |
| Standard HAL API for ATCA to initialize a physical interface. More... | |
| ATCA_STATUS | hal_iface_release (ATCAIfaceType, void *hal_data) |
| releases a physical interface, HAL knows how to interpret hal_data More... | |
| void | atca_delay_us (uint32_t delay) |
| Timer API implemented at the HAL level. More... | |
| void | atca_delay_10us (uint32_t delay) |
| This function delays for a number of tens of microseconds. More... | |
| void | atca_delay_ms (uint32_t delay) |
| This function delays for a number of milliseconds. You can override this function if you like to do something else in your system while delaying. More... | |
| ATCA_STATUS | hal_i2c_init (void *hal, ATCAIfaceCfg *cfg) |
| hal_i2c_init manages requests to initialize a physical interface. It manages use counts so when an interface has released the physical layer, it will disable the interface for some other use. You can have multiple ATCAIFace instances using the same bus, and you can have multiple ATCAIFace instances on multiple i2c buses, so hal_i2c_init manages these things and ATCAIFace is abstracted from the physical details. More... | |
| ATCA_STATUS | hal_i2c_post_init (ATCAIface iface) |
| HAL implementation of I2C post init. More... | |
| ATCA_STATUS | hal_i2c_send (ATCAIface iface, uint8_t *txdata, int txlength) |
| Send byte(s) via I2C. More... | |
| ATCA_STATUS | hal_i2c_receive (ATCAIface iface, uint8_t *rxdata, uint16_t *rxlength) |
| Receive byte(s) via I2C. More... | |
| ATCA_STATUS | hal_i2c_wake (ATCAIface iface) |
| Send Wake flag via I2C. More... | |
| ATCA_STATUS | hal_i2c_idle (ATCAIface iface) |
| Send Idle flag via I2C. More... | |
| ATCA_STATUS | hal_i2c_sleep (ATCAIface iface) |
| Send Sleep flag via I2C. More... | |
| ATCA_STATUS | hal_i2c_release (void *hal_data) |
| Manages reference count on given bus and releases resource if no more reference(s) exist. More... | |
| ATCA_STATUS | hal_cdc_discover_buses (int cdc_buses[], int max_buses) |
| discover cdc buses available for this hardware this maintains a list of logical to physical bus mappings freeing the application of the a-priori knowledge More... | |
| ATCA_STATUS | hal_cdc_discover_devices (int busNum, ATCAIfaceCfg cfg[], int *found) |
| discover any CryptoAuth devices on a given logical bus number More... | |
| ATCA_STATUS | hal_kit_cdc_init (void *hal, ATCAIfaceCfg *cfg) |
| ATCA_STATUS | hal_kit_cdc_post_init (ATCAIface iface) |
| HAL implementation of Kit USB CDC post init. More... | |
| ATCA_STATUS | kit_phy_send (ATCAIface iface, uint8_t *txdata, int txlength) |
| HAL implementation of send over USB CDC. More... | |
| ATCA_STATUS | kit_phy_receive (ATCAIface iface, uint8_t *rxdata, int *rxsize) |
| HAL implementation of kit protocol send over USB CDC. More... | |
| ATCA_STATUS | hal_kit_phy_num_found (int8_t *num_found) |
| Number of USB CDC devices found. More... | |
| ATCA_STATUS | hal_kit_cdc_send (ATCAIface iface, uint8_t *txdata, int txlength) |
| HAL implementation of kit protocol send over USB CDC. More... | |
| ATCA_STATUS | hal_kit_cdc_receive (ATCAIface iface, uint8_t *rxdata, uint16_t *rxsize) |
| HAL implementation of send over USB CDC. More... | |
| ATCA_STATUS | hal_kit_cdc_wake (ATCAIface iface) |
| Call the wake for kit protocol. More... | |
| ATCA_STATUS | hal_kit_cdc_idle (ATCAIface iface) |
| Call the idle for kit protocol. More... | |
| ATCA_STATUS | hal_kit_cdc_sleep (ATCAIface iface) |
| Call the sleep for kit protocol. More... | |
| ATCA_STATUS | hal_kit_cdc_release (void *hal_data) |
| Close the physical port for CDC. More... | |
| ATCA_STATUS | hal_kit_cdc_discover_buses (int i2c_buses[], int max_buses) |
| ATCA_STATUS | hal_kit_cdc_discover_devices (int busNum, ATCAIfaceCfg *cfg, int *found) |
| ATCA_STATUS | hal_i2c_discover_buses (int i2c_buses[], int max_buses) |
| This HAL implementation assumes you've included the ASF TWI libraries in your project, otherwise, the HAL layer will not compile because the ASF TWI drivers are a dependency. More... | |
| ATCA_STATUS | hal_i2c_discover_devices (int busNum, ATCAIfaceCfg cfg[], int *found) |
| discover any CryptoAuth devices on a given logical bus number More... | |
| void | change_i2c_speed (ATCAIface iface, uint32_t speed) |
| method to change the bus speed of I2C More... | |
| ATCA_STATUS | hal_swi_init (void *hal, ATCAIfaceCfg *cfg) |
| hal_swi_init manages requests to initialize a physical interface. It manages use counts so when an interface has released the physical layer, it will disable the interface for some other use. You can have multiple ATCAIFace instances using the same bus, and you can have multiple ATCAIFace instances on multiple swi buses, so hal_swi_init manages these things and ATCAIFace is abstracted from the physical details. More... | |
| ATCA_STATUS | hal_swi_post_init (ATCAIface iface) |
| HAL implementation of SWI post init. More... | |
| ATCA_STATUS | hal_swi_send (ATCAIface iface, uint8_t *txdata, int txlength) |
| Send byte(s) via SWI. More... | |
| ATCA_STATUS | hal_swi_receive (ATCAIface iface, uint8_t *rxdata, uint16_t *rxlength) |
| Receive byte(s) via SWI. More... | |
| ATCA_STATUS | hal_swi_wake (ATCAIface iface) |
| Send Wake flag via SWI. More... | |
| ATCA_STATUS | hal_swi_idle (ATCAIface iface) |
| Send Idle flag via SWI. More... | |
| ATCA_STATUS | hal_swi_sleep (ATCAIface iface) |
| Send Sleep flag via SWI. More... | |
| ATCA_STATUS | hal_swi_release (void *hal_data) |
| Manages reference count on given bus and releases resource if no more reference(s) exist. More... | |
| ATCA_STATUS | hal_swi_discover_buses (int swi_buses[], int max_buses) |
| discover swi buses available for this hardware this maintains a list of logical to physical bus mappings freeing the application of the a-priori knowledge More... | |
| ATCA_STATUS | hal_swi_discover_devices (int busNum, ATCAIfaceCfg cfg[], int *found) |
| discover any CryptoAuth devices on a given logical bus number More... | |
| ATCA_STATUS | hal_swi_send_flag (ATCAIface iface, uint8_t data) |
| HAL implementation of SWI send one byte over UART. More... | |
| ATCA_STATUS | hal_kit_hid_init (void *hal, ATCAIfaceCfg *cfg) |
| HAL implementation of Kit USB HID init. More... | |
| ATCA_STATUS | hal_kit_hid_discover_buses (int i2c_buses[], int max_buses) |
| ATCA_STATUS | hal_kit_hid_discover_devices (int busNum, ATCAIfaceCfg cfg[], int *found) |
| discover any CryptoAuth devices on a given logical bus number More... | |
| ATCA_STATUS | hal_kit_hid_post_init (ATCAIface iface) |
| HAL implementation of Kit HID post init. More... | |
| ATCA_STATUS | kit_phy_num_found (int8_t *num_found) |
| Number of USB HID devices found. More... | |
| ATCA_STATUS | hal_kit_hid_send (ATCAIface iface, uint8_t *txdata, int txlength) |
| HAL implementation of kit protocol send over USB HID. More... | |
| ATCA_STATUS | hal_kit_hid_receive (ATCAIface iface, uint8_t *rxdata, uint16_t *rxsize) |
| HAL implementation of send over USB HID. More... | |
| ATCA_STATUS | hal_kit_hid_wake (ATCAIface iface) |
| Call the wake for kit protocol. More... | |
| ATCA_STATUS | hal_kit_hid_idle (ATCAIface iface) |
| Call the idle for kit protocol. More... | |
| ATCA_STATUS | hal_kit_hid_sleep (ATCAIface iface) |
| Call the sleep for kit protocol. More... | |
| ATCA_STATUS | hal_kit_hid_release (void *hal_data) |
| Close the physical port for HID. More... | |
| ATCA_STATUS | kit_init (ATCAIface iface) |
| HAL implementation of kit protocol init. This function calls back to the physical protocol to send the bytes. More... | |
| ATCA_STATUS | kit_send (ATCAIface iface, uint8_t *txdata, int txlength) |
| HAL implementation of kit protocol send. This function calls back to the physical protocol to send the bytes. More... | |
| ATCA_STATUS | kit_receive (ATCAIface iface, uint8_t *rxdata, uint16_t *rxsize) |
| HAL implementation to receive bytes and unwrap from kit protocol. This function calls back to the physical protocol to receive the bytes. More... | |
| ATCA_STATUS | kit_wake (ATCAIface iface) |
| Call the wake for kit protocol. More... | |
| ATCA_STATUS | kit_idle (ATCAIface iface) |
| Call the idle for kit protocol. More... | |
| ATCA_STATUS | kit_sleep (ATCAIface iface) |
| Call the sleep for kit protocol. More... | |
| ATCA_STATUS | kit_wrap_cmd (uint8_t *txdata, int txlen, char *pkitcmd, int *nkitcmd) |
| Wrap binary bytes in ascii kit protocol. More... | |
| ATCA_STATUS | kit_parse_rsp (char *pkitbuf, int nkitbuf, uint8_t *kitstatus, uint8_t *rxdata, int *datasize) |
| Parse the response ascii from the kit. More... | |
| ATCA_STATUS | swi_uart_init (ATCASWIMaster_t *instance) |
| Implementation of SWI UART init. More... | |
| ATCA_STATUS | swi_uart_deinit (ATCASWIMaster_t *instance) |
| Implementation of SWI UART deinit. More... | |
| void | swi_uart_setbaud (ATCASWIMaster_t *instance, uint32_t baudrate) |
| implementation of SWI UART change baudrate. More... | |
| void | swi_uart_mode (ATCASWIMaster_t *instance, uint8_t mode) |
| implementation of SWI UART change mode. More... | |
| void | swi_uart_discover_buses (int swi_uart_buses[], int max_buses) |
| discover UART buses available for this hardware this maintains a list of logical to physical bus mappings freeing the application of the a-priori knowledge More... | |
| ATCA_STATUS | swi_uart_send_byte (ATCASWIMaster_t *instance, uint8_t data) |
| HAL implementation of SWI UART send byte over ASF. This function send one byte over UART. More... | |
| ATCA_STATUS | swi_uart_receive_byte (ATCASWIMaster_t *instance, uint8_t *data) |
| HAL implementation of SWI UART receive bytes over ASF. This function receive one byte over UART. More... | |
Variables | |
| ATCAI2CMaster_t * | i2c_hal_data [MAX_I2C_BUSES] |
| Logical to physical bus mapping structure. More... | |
| int | i2c_bus_ref_ct = 0 |
| total in-use count across buses More... | |
| atcacdc_t | _gCdc |
| char * | dev = "/dev/ttyACM0" |
| HAL implementation of Kit USB CDC init. More... | |
| int | speed = B115200 |
| ATCAI2CMaster_t * | i2c_hal_data [MAX_I2C_BUSES] |
| Logical to physical bus mapping structure. More... | |
| int | i2c_bus_ref_ct = 0 |
| twi_master_options_t | opt_twi_master |
| ATCAI2CMaster_t * | i2c_hal_data [MAX_I2C_BUSES] |
| logical to physical bus mapping structure More... | |
| int | i2c_bus_ref_ct = 0 |
| ATCAI2CMaster_t * | i2c_hal_data [MAX_I2C_BUSES] |
| int | i2c_bus_ref_ct = 0 |
| ATCAI2CMaster_t * | i2c_hal_data [MAX_I2C_BUSES] |
| logical to physical bus mapping structure More... | |
| int | i2c_bus_ref_ct = 0 |
| ATCASWIMaster_t * | swi_hal_data [MAX_SWI_BUSES] |
| Logical to physical bus mapping structure. More... | |
| int | swi_bus_ref_ct = 0 |
| total in-use count across buses More... | |
| ATCASWIMaster_t * | swi_hal_data [MAX_SWI_BUSES] |
| logical to physical bus mapping structure More... | |
| int | swi_bus_ref_ct = 0 |
| atcahid_t | _gHid |
| ATCAI2CMaster_t * | i2c_hal_data [MAX_I2C_BUSES] |
| logical to physical bus mapping structure More... | |
| int | i2c_bus_ref_ct = 0 |
| struct port_config | pin_conf |
These methods define the hardware abstraction layer for communicating with a CryptoAuth device.
These methods define the hardware abstraction layer for communicating with a CryptoAuth device using SWI interface.
These methods define the hardware abstraction layer for communicating with a CryptoAuth device using SWI Interface.
These methods define the hardware abstraction layer for communicating with a CryptoAuth device using SWI bit banging.
< Uncomment when debugging
These methods define the hardware abstraction layer for communicating with a CryptoAuth device using I2C bit banging.
These methods define the hardware abstraction layer for communicating with a CryptoAuth device using I2C driver of ASF.
| #define CDC_BUFFER_MAX 1024 |
| #define CDC_DEVICES_MAX 10 |
| #define DEBUG_PIN_1 EXT2_PIN_5 |
| #define DEBUG_PIN_2 EXT2_PIN_6 |
| #define HID_DEVICES_MAX 10 |
| #define HID_GUID { 0x4d1e55b2, 0xf16f, 0x11cf, 0x88, 0xcb, 0x00, 0x11, 0x11, 0x00, 0x00, 0x30 } |
| #define HID_PACKET_MAX 512 |
| #define INVALID_HANDLE_VALUE ((int)(-1)) |
| #define KIT_MSG_SIZE (32) |
| #define KIT_RX_WRAP_SIZE (KIT_MSG_SIZE + 6) |
| #define KIT_TX_WRAP_SIZE (7) |
| #define max | ( | a, | |
| b | |||
| ) | (((a) > (b)) ? (a) : (b)) |
| #define MAX_I2C_BUSES 6 |
| #define MAX_I2C_BUSES 3 |
| #define MAX_I2C_BUSES 6 |
| #define MAX_I2C_BUSES 4 |
| #define MAX_I2C_BUSES 2 |
| #define MAX_SWI_BUSES 6 |
| #define MAX_SWI_BUSES 6 |
| #define MAX_SWI_BUSES 6 |
| #define min | ( | a, | |
| b | |||
| ) | (((a) < (b)) ? (a) : (b)) |
| #define RECEIVE_MODE 0 |
| #define RECEIVE_MODE 0 |
| #define RECEIVE_MODE 0 |
| #define RX_DELAY { volatile uint8_t delay = 90; while (delay--) __asm__(""); } |
| #define RX_DELAY 10 |
| #define RX_DELAY 10 |
| #define SWI_FLAG_CMD ((uint8_t)0x77) |
flag preceding a command
| #define SWI_FLAG_IDLE ((uint8_t)0xBB) |
flag requesting to go into Idle mode
| #define SWI_FLAG_SLEEP ((uint8_t)0xCC) |
flag requesting to go into Sleep mode
| #define SWI_FLAG_TX ((uint8_t)0x88) |
flag requesting a response
| #define SWI_WAKE_TOKEN ((uint8_t)0x00) |
flag preceding a command
| #define TRANSMIT_MODE 1 |
| #define TRANSMIT_MODE 1 |
| #define TRANSMIT_MODE 1 |
| #define TX_DELAY 90 |
| #define TX_DELAY 90 |
| #define TX_DELAY 93 |
| typedef struct atcaI2Cmaster ATCAI2CMaster_t |
this is the hal_data for ATCA HAL for ASF SERCOM
| typedef struct atcaI2Cmaster ATCAI2CMaster_t |
this is the hal_data for ATCA HAL for ASF SERCOM
| typedef struct atcaI2Cmaster ATCAI2CMaster_t |
this is the hal_data for ATCA HAL for Atmel START SERCOM
| typedef struct atcaI2Cmaster ATCAI2CMaster_t |
this is the hal_data for ATCA HAL created using ASF
| typedef struct atcaI2Cmaster ATCAI2CMaster_t |
this is the hal_data for ATCA HAL
| typedef struct atcaI2Cmaster ATCAI2CMaster_t |
This is the hal_data for ATCA HAL.
| typedef struct atcaSWImaster ATCASWIMaster_t |
this is the hal_data for ATCA HAL for ASF SERCOM
| typedef struct atcaSWImaster ATCASWIMaster_t |
this is the hal_data for ATCA HAL for SWI UART
| typedef struct atcaSWImaster ATCASWIMaster_t |
this is the hal_data for ATCA HAL for ASF SERCOM
| typedef struct atcaSWImaster ATCASWIMaster_t |
This is the hal_data for ATCA HAL.
| typedef struct cdc_device cdc_device_t |
| typedef int HANDLE |
| typedef struct hid_device hid_device_t |
| enum i2c_read_write_flag |
| enum swi_flag |
| void atca_delay_10us | ( | uint32_t | delay | ) |
This function delays for a number of tens of microseconds.
| [in] | delay | number of 0.01 milliseconds to delay |
| void atca_delay_ms | ( | uint32_t | delay | ) |
This function delays for a number of milliseconds. You can override this function if you like to do something else in your system while delaying.
This function delays for a number of milliseconds.
| [in] | delay | number of milliseconds to delay |
You can override this function if you like to do something else in your system while delaying.
| [in] | delay | number of milliseconds to delay |
| void atca_delay_us | ( | uint32_t | delay | ) |
Timer API implemented at the HAL level.
This function delays for a number of microseconds.
| [in] | delay | number of 0.001 milliseconds to delay |
| [in] | delay | number of 1 microseconds to delay |
| void change_i2c_speed | ( | ATCAIface | iface, |
| uint32_t | speed | ||
| ) |
method to change the bus speed of I2C
method to change the bus speec of I2C
| [in] | iface | interface on which to change bus speed |
| [in] | speed | baud rate (typically 100000 or 400000) |
| ATCA_STATUS hal_cdc_discover_buses | ( | int | cdc_buses[], |
| int | max_buses | ||
| ) |
discover cdc buses available for this hardware this maintains a list of logical to physical bus mappings freeing the application of the a-priori knowledge
| [in] | cdc_buses | - an array of logical bus numbers |
| [in] | max_buses | - maximum number of buses the app wants to attempt to discover |
| ATCA_STATUS hal_cdc_discover_devices | ( | int | busNum, |
| ATCAIfaceCfg | cfg[], | ||
| int * | found | ||
| ) |
discover any CryptoAuth devices on a given logical bus number
| [in] | busNum | - logical bus number on which to look for CryptoAuth devices |
| [out] | cfg[] | - pointer to head of an array of interface config structures which get filled in by this method |
| [out] | *found | - number of devices found on this bus |
| ATCA_STATUS hal_i2c_discover_buses | ( | int | i2c_buses[], |
| int | max_buses | ||
| ) |
This HAL implementation assumes you've included the ASF TWI libraries in your project, otherwise, the HAL layer will not compile because the ASF TWI drivers are a dependency.
discover i2c buses available for this hardware this maintains a list of logical to physical bus mappings freeing the application of the a-priori knowledge
discover i2c buses available for this hardware this maintains a list of logical to physical bus mappings freeing the application of the a-priori knowledge
| [in] | i2c_buses | - an array of logical bus numbers |
| [in] | max_buses | - maximum number of buses the app wants to attempt to discover |
| [in] | i2c_buses | - an array of logical bus numbers |
| [in] | max_buses | - maximum number of buses the app wants to attempt to discover |
| ATCA_STATUS hal_i2c_discover_devices | ( | int | busNum, |
| ATCAIfaceCfg | cfg[], | ||
| int * | found | ||
| ) |
discover any CryptoAuth devices on a given logical bus number
| [in] | busNum | - logical bus number on which to look for CryptoAuth devices |
| [out] | cfg[] | - pointer to head of an array of interface config structures which get filled in by this method |
| [out] | *found | - number of devices found on this bus |
| [in] | busNum | logical bus number on which to look for CryptoAuth devices |
| [out] | cfg | pointer to head of an array of interface config structures which get filled in by this method |
| [out] | found | number of devices found on this bus |
default configuration, to be reused during discovery process
default configuration, to be reused during discovery process
default configuration, to be reused during discovery process
| ATCA_STATUS hal_i2c_idle | ( | ATCAIface | iface | ) |
Send Idle flag via I2C.
idle CryptoAuth device using I2C bus
| [in] | iface | interface of the logical device to idle |
| [in] | iface | interface to logical device to idle |
| [in] | iface | interface to logical device to idle |
Set I2C pins
Address the device and indicate that bytes are to be written
< Word Address Value = Idle
| ATCA_STATUS hal_i2c_init | ( | void * | hal, |
| ATCAIfaceCfg * | cfg | ||
| ) |
hal_i2c_init manages requests to initialize a physical interface. It manages use counts so when an interface has released the physical layer, it will disable the interface for some other use. You can have multiple ATCAIFace instances using the same bus, and you can have multiple ATCAIFace instances on multiple i2c buses, so hal_i2c_init manages these things and ATCAIFace is abstracted from the physical details.
hal_i2c_init manages requests to initialize a physical interface. it manages use counts so when an interface has released the physical layer, it will disable the interface for some other use. You can have multiple ATCAIFace instances using the same bus, and you can have multiple ATCAIFace instances on multiple i2c buses, so hal_i2c_init manages these things and ATCAIFace is abstracted from the physical details.
Initialize an I2C interface using given config.
| [in] | hal | opaque pointer to HAL data |
| [in] | cfg | interface configuration |
initialize an I2C interface using given config
| [in] | hal | - opaque ptr to HAL data |
| [in] | cfg | - interface configuration |
| [in] | hal | - opaque ptr to HAL data |
| [in] | cfg | - interface configuration |
| [in] | hal | - opaque ptr to HAL data |
| [in] | cfg | - interface configuration |
| [in] | hal | - opaque ptr to HAL data |
| [in] | cfg | - interface configuration |
< 0-based logical bus number
< power up state, no i2c buses will have been used
< total across buses
if this is the first time this bus and interface has been created, do the physical work of enabling it
< buses are shared, this is the first instance
assign GPIO pins
store this for use during the release phase
otherwise, another interface already initialized the bus, so this interface will share it and any different cfg parameters will be ignored...first one to initialize this sets the configuration
| ATCA_STATUS hal_i2c_post_init | ( | ATCAIface | iface | ) |
HAL implementation of I2C post init.
| [in] | iface | ATCAIface instance |
| [in] | iface | instance |
| ATCA_STATUS hal_i2c_receive | ( | ATCAIface | iface, |
| uint8_t * | rxdata, | ||
| uint16_t * | rxlength | ||
| ) |
Receive byte(s) via I2C.
HAL implementation of I2C receive function for START I2C.
HAL implementation of I2C receive function for ASF I2C.
| [in] | iface | interface of the logical device to receive data from |
| [in] | rxdata | pointer to where bytes will be received |
| [in] | rxlength | pointer to expected number of receive bytes to request |
| [in] | iface | instance |
| [in] | rxdata | pointer to space to receive the data |
| [in] | rxlength | ptr to expected number of receive bytes to request |
Set I2C pins
Address the device and indicate that bytes are to be read
Receive count byte
Receive the remaining bytes
| ATCA_STATUS hal_i2c_release | ( | void * | hal_data | ) |
Manages reference count on given bus and releases resource if no more reference(s) exist.
manages reference count on given bus and releases resource if no more refences exist
| [in] | hal_data | opaque pointer to hal data structure - known only to the HAL implementation |
| [in] | hal_data | - opaque pointer to hal data structure - known only to the HAL implementation |
| [in] | hal_data | - opaque pointer to hal data structure - known only to the HAL implementation |
| ATCA_STATUS hal_i2c_send | ( | ATCAIface | iface, |
| uint8_t * | txdata, | ||
| int | txlength | ||
| ) |
Send byte(s) via I2C.
HAL implementation of I2C send over START.
HAL implementation of I2C send over ASF.
| [in] | iface | interface of the logical device to send data to |
| [in] | txdata | pointer to bytes to send |
| [in] | txlength | number of bytes to send |
| [in] | iface | instance |
| [in] | txdata | pointer to space to bytes to send |
| [in] | txlength | number of bytes to send |
< Word Address Value = Command
< count Word Address byte towards txlength
Set I2C pins
Address the device and indicate that bytes are to be written
Send the remaining bytes
Send STOP regardless of i2c_status
| ATCA_STATUS hal_i2c_sleep | ( | ATCAIface | iface | ) |
Send Sleep flag via I2C.
sleep CryptoAuth device using I2C bus
| [in] | iface | interface of the logical device to sleep |
| [in] | iface | interface to logical device to sleep |
| [in] | iface | interface to logical device to sleep |
Set I2C pins
Address the device and indicate that bytes are to be written
< Word Address Value = Sleep
| ATCA_STATUS hal_i2c_wake | ( | ATCAIface | iface | ) |
Send Wake flag via I2C.
wake up CryptoAuth device using I2C bus
| [in] | iface | interface of the logical device to wake up |
| [in] | iface | interface to logical device to wakeup |
| [in] | iface | interface to logical device to wakeup |
Set I2C pins
Generate Wake Token
Wait tWHI + tWLO
Receive Wake Response
Compare response with expected_response
| ATCA_STATUS hal_iface_init | ( | ATCAIfaceCfg * | cfg, |
| ATCAHAL_t * | hal | ||
| ) |
Standard HAL API for ATCA to initialize a physical interface.
| [in] | cfg | pointer to ATCAIfaceCfg object |
| [in] | hal | pointer to ATCAHAL_t intermediate datastructure |
| ATCA_STATUS hal_iface_release | ( | ATCAIfaceType | ifacetype, |
| void * | hal_data | ||
| ) |
releases a physical interface, HAL knows how to interpret hal_data
| [in] | ifacetype | - the type of physical interface to release |
| [in] | hal_data | - pointer to opaque hal data maintained by HAL implementation for this interface type |
| ATCA_STATUS hal_kit_cdc_discover_buses | ( | int | i2c_buses[], |
| int | max_buses | ||
| ) |
| ATCA_STATUS hal_kit_cdc_discover_devices | ( | int | busNum, |
| ATCAIfaceCfg * | cfg, | ||
| int * | found | ||
| ) |
| ATCA_STATUS hal_kit_cdc_idle | ( | ATCAIface | iface | ) |
Call the idle for kit protocol.
| [in] | iface | ATCAIface instance that is the interface object to send the bytes over |
| ATCA_STATUS hal_kit_cdc_init | ( | void * | hal, |
| ATCAIfaceCfg * | cfg | ||
| ) |
| ATCA_STATUS hal_kit_cdc_post_init | ( | ATCAIface | iface | ) |
HAL implementation of Kit USB CDC post init.
| [in] | iface | instance |
| ATCA_STATUS hal_kit_cdc_receive | ( | ATCAIface | iface, |
| uint8_t * | rxdata, | ||
| uint16_t * | rxsize | ||
| ) |
HAL implementation of send over USB CDC.
| [in] | iface | instance |
| [in] | rxdata | pointer to space to receive the data |
| [in,out] | rxsize | ptr to expected number of receive bytes to request |
| ATCA_STATUS hal_kit_cdc_release | ( | void * | hal_data | ) |
Close the physical port for CDC.
| [in] | hal_data | The hardware abstraction data specific to this HAL |
| ATCA_STATUS hal_kit_cdc_send | ( | ATCAIface | iface, |
| uint8_t * | txdata, | ||
| int | txlength | ||
| ) |
HAL implementation of kit protocol send over USB CDC.
| [in] | iface | instance |
| [in] | txdata | pointer to bytes to send |
| [in] | txlength | number of bytes to send |
| ATCA_STATUS hal_kit_cdc_sleep | ( | ATCAIface | iface | ) |
Call the sleep for kit protocol.
| [in] | iface | ATCAIface instance that is the interface object to send the bytes over |
| ATCA_STATUS hal_kit_cdc_wake | ( | ATCAIface | iface | ) |
Call the wake for kit protocol.
| [in] | iface | ATCAIface instance that is the interface object to send the bytes over |
| ATCA_STATUS hal_kit_hid_discover_buses | ( | int | i2c_buses[], |
| int | max_buses | ||
| ) |
| ATCA_STATUS hal_kit_hid_discover_devices | ( | int | busNum, |
| ATCAIfaceCfg | cfg[], | ||
| int * | found | ||
| ) |
discover any CryptoAuth devices on a given logical bus number
| [in] | busNum | - logical bus number on which to look for CryptoAuth devices |
| [out] | cfg[] | - pointer to head of an array of interface config structures which get filled in by this method |
| [out] | *found | - number of devices found on this bus |
| ATCA_STATUS hal_kit_hid_idle | ( | ATCAIface | iface | ) |
Call the idle for kit protocol.
| [in] | iface | ATCAIface instance that is the interface object to send the bytes over |
| ATCA_STATUS hal_kit_hid_init | ( | void * | hal, |
| ATCAIfaceCfg * | cfg | ||
| ) |
HAL implementation of Kit USB HID init.
| [in] | hal | pointer to HAL specific data that is maintained by this HAL |
| [in] | cfg | pointer to HAL specific configuration data that is used to initialize this HAL |
| ATCA_STATUS hal_kit_hid_post_init | ( | ATCAIface | iface | ) |
HAL implementation of Kit HID post init.
| [in] | iface | instance |
| ATCA_STATUS hal_kit_hid_receive | ( | ATCAIface | iface, |
| uint8_t * | rxdata, | ||
| uint16_t * | rxsize | ||
| ) |
HAL implementation of send over USB HID.
| [in] | iface | instance |
| [in] | rxdata | pointer to space to receive the data |
| [in,out] | rxsize | ptr to expected number of receive bytes to request |
| ATCA_STATUS hal_kit_hid_release | ( | void * | hal_data | ) |
Close the physical port for HID.
| [in] | hal_data | The hardware abstraction data specific to this HAL |
| ATCA_STATUS hal_kit_hid_send | ( | ATCAIface | iface, |
| uint8_t * | txdata, | ||
| int | txlength | ||
| ) |
HAL implementation of kit protocol send over USB HID.
| [in] | iface | instance |
| [in] | txdata | pointer to bytes to send |
| [in] | txlength | number of bytes to send |
| ATCA_STATUS hal_kit_hid_sleep | ( | ATCAIface | iface | ) |
Call the sleep for kit protocol.
| [in] | iface | ATCAIface instance that is the interface object to send the bytes over |
| ATCA_STATUS hal_kit_hid_wake | ( | ATCAIface | iface | ) |
Call the wake for kit protocol.
| [in] | iface | ATCAIface instance that is the interface object to send the bytes over |
| ATCA_STATUS hal_kit_phy_num_found | ( | int8_t * | num_found | ) |
Number of USB CDC devices found.
| [out] | num_found |
| ATCA_STATUS hal_swi_discover_buses | ( | int | swi_buses[], |
| int | max_buses | ||
| ) |
discover swi buses available for this hardware this maintains a list of logical to physical bus mappings freeing the application of the a-priori knowledge
| [in] | swi_buses | - an array of logical bus numbers |
| [in] | max_buses | - maximum number of buses the app wants to attempt to discover |
| ATCA_STATUS hal_swi_discover_devices | ( | int | busNum, |
| ATCAIfaceCfg | cfg[], | ||
| int * | found | ||
| ) |
discover any CryptoAuth devices on a given logical bus number
| [in] | busNum | - logical bus number on which to look for CryptoAuth devices |
| [out] | cfg[] | - pointer to head of an array of interface config structures which get filled in by this method |
| [out] | *found | - number of devices found on this bus |
default configuration, to be reused during discovery process
| ATCA_STATUS hal_swi_idle | ( | ATCAIface | iface | ) |
Send Idle flag via SWI.
idle CryptoAuth device using SWI interface
| [in] | iface | interface of the logical device to idle |
| [in] | iface | interface to logical device to idle |
Set SWI pin
| ATCA_STATUS hal_swi_init | ( | void * | hal, |
| ATCAIfaceCfg * | cfg | ||
| ) |
hal_swi_init manages requests to initialize a physical interface. It manages use counts so when an interface has released the physical layer, it will disable the interface for some other use. You can have multiple ATCAIFace instances using the same bus, and you can have multiple ATCAIFace instances on multiple swi buses, so hal_swi_init manages these things and ATCAIFace is abstracted from the physical details.
hal_swi_init manages requests to initialize a physical interface. it manages use counts so when an interface has released the physical layer, it will disable the interface for some other use. You can have multiple ATCAIFace instances using the same bus, and you can have multiple ATCAIFace instances on multiple swi buses, so hal_swi_init manages these things and ATCAIFace is abstracted from the physical details.
Initialize an SWI interface using given config.
| [in] | hal | opaque pointer to HAL data |
| [in] | cfg | interface configuration |
initialize an SWI interface using given config
| [in] | hal | - opaque ptr to HAL data |
| [in] | cfg | - interface configuration |
< 0-based logical bus number
< power up state, no swi buses will have been used
< total across buses
if this is the first time this bus and interface has been created, do the physical work of enabling it
assign GPIO pin
store this for use during the release phase
otherwise, another interface already initialized the bus, any different cfg parameters will be ignored...first one to initialize this sets the configuration
| ATCA_STATUS hal_swi_post_init | ( | ATCAIface | iface | ) |
HAL implementation of SWI post init.
| [in] | iface | ATCAIface instance |
| [in] | iface | instance |
| ATCA_STATUS hal_swi_receive | ( | ATCAIface | iface, |
| uint8_t * | rxdata, | ||
| uint16_t * | rxlength | ||
| ) |
Receive byte(s) via SWI.
HAL implementation of SWI receive function over UART.
| [in] | iface | interface of the logical device to receive data from |
| [in] | rxdata | pointer to where bytes will be received |
| [in] | rxlength | pointer to expected number of receive bytes to request |
| [in] | iface | instance |
| [in] | rxdata | pointer to space to receive the data |
| [in] | rxlength | ptr to expected number of receive bytes to request |
Set SWI pin
| ATCA_STATUS hal_swi_release | ( | void * | hal_data | ) |
Manages reference count on given bus and releases resource if no more reference(s) exist.
manages reference count on given bus and releases resource if no more refences exist
| [in] | hal_data | opaque pointer to hal data structure - known only to the HAL implementation |
| [in] | hal_data | - opaque pointer to hal data structure - known only to the HAL implementation |
< track total SWI instances
if the use count for this bus has gone to 0 references, disable it. protect against an unbracketed release
| ATCA_STATUS hal_swi_send | ( | ATCAIface | iface, |
| uint8_t * | txdata, | ||
| int | txlength | ||
| ) |
Send byte(s) via SWI.
HAL implementation of SWI send command over UART.
| [in] | iface | interface of the logical device to send data to |
| [in] | txdata | pointer to bytes to send |
| [in] | txlength | number of bytes to send |
| [in] | iface | instance |
| [in] | txdata | pointer to space to bytes to send |
| [in] | txlength | number of bytes to send |
Skip the Word Address data as SWI doesn't use it
Set SWI pin
Send Command Flag
Send the remaining bytes
| ATCA_STATUS hal_swi_send_flag | ( | ATCAIface | iface, |
| uint8_t | data | ||
| ) |
HAL implementation of SWI send one byte over UART.
| [in] | iface | instance |
| [in] | data | bytes to send |
| ATCA_STATUS hal_swi_sleep | ( | ATCAIface | iface | ) |
Send Sleep flag via SWI.
sleep CryptoAuth device using SWI interface
| [in] | iface | interface of the logical device to sleep |
| [in] | iface | interface to logical device to sleep |
Set SWI pin
| ATCA_STATUS hal_swi_wake | ( | ATCAIface | iface | ) |
Send Wake flag via SWI.
wake up CryptoAuth device using SWI interface
| [in] | iface | interface of the logical device to wake up |
| [in] | iface | interface to logical device to wakeup |
Set SWI pin
Generate Wake Token
Wait tWHI + tWLO
Compare response with expected_response
| ATCA_STATUS kit_idle | ( | ATCAIface | iface | ) |
Call the idle for kit protocol.
| [in] | iface | the interface object to send the bytes over |
| ATCA_STATUS kit_init | ( | ATCAIface | iface | ) |
HAL implementation of kit protocol init. This function calls back to the physical protocol to send the bytes.
| [in] | iface | instance |
| ATCA_STATUS kit_parse_rsp | ( | char * | pkitbuf, |
| int | nkitbuf, | ||
| uint8_t * | kitstatus, | ||
| uint8_t * | rxdata, | ||
| int * | datasize | ||
| ) |
Parse the response ascii from the kit.
| [out] | pkitbuf | pointer to ascii kit protocol data to parse |
| [in] | nkitbuf | length of the ascii kit protocol data |
| [in] | rxdata | pointer to the binary data buffer |
| [in] | datasize | size of the pointer to the binary data buffer |
| ATCA_STATUS kit_phy_num_found | ( | int8_t * | num_found | ) |
Number of USB HID devices found.
| [out] | num_found |
| ATCA_STATUS kit_phy_receive | ( | ATCAIface | iface, |
| uint8_t * | rxdata, | ||
| int * | rxsize | ||
| ) |
HAL implementation of kit protocol send over USB CDC.
HAL implementation of kit protocol send over USB HID.
| [in] | iface | instance |
| [out] | rxdata | pointer to space to receive the data |
| [in,out] | rxsize | ptr to expected number of receive bytes to request |
| ATCA_STATUS kit_phy_send | ( | ATCAIface | iface, |
| uint8_t * | txdata, | ||
| int | txlength | ||
| ) |
HAL implementation of send over USB CDC.
HAL implementation of send over USB HID.
| [in] | iface | instance |
| [in] | txdata | pointer to bytes to send |
| [in] | txlength | number of bytes to send |
| ATCA_STATUS kit_receive | ( | ATCAIface | iface, |
| uint8_t * | rxdata, | ||
| uint16_t * | rxsize | ||
| ) |
HAL implementation to receive bytes and unwrap from kit protocol. This function calls back to the physical protocol to receive the bytes.
| [in] | iface | instance |
| [in] | rxdata | pointer to space to receive the data |
| [in,out] | rxsize | ptr to expected number of receive bytes to request |
| ATCA_STATUS kit_send | ( | ATCAIface | iface, |
| uint8_t * | txdata, | ||
| int | txlength | ||
| ) |
HAL implementation of kit protocol send. This function calls back to the physical protocol to send the bytes.
| [in] | iface | instance |
| [in] | txdata | pointer to bytes to send |
| [in] | txlength | number of bytes to send |
| ATCA_STATUS kit_sleep | ( | ATCAIface | iface | ) |
Call the sleep for kit protocol.
| [in] | iface | the interface object to send the bytes over |
| ATCA_STATUS kit_wake | ( | ATCAIface | iface | ) |
Call the wake for kit protocol.
| [in] | iface | the interface object to send the bytes over |
| ATCA_STATUS kit_wrap_cmd | ( | uint8_t * | txdata, |
| int | txlen, | ||
| char * | pkitcmd, | ||
| int * | nkitcmd | ||
| ) |
Wrap binary bytes in ascii kit protocol.
| [in] | txdata | pointer to the binary data to wrap |
| [in] | txlen | length of the binary data to wrap |
| [out] | pkitcmd | pointer to binary data converted to ascii kit protocol |
| [in,out] | nkitcmd | pointer to the size of the binary data converted to ascii kit protocol |
| ATCA_STATUS swi_uart_deinit | ( | ATCASWIMaster_t * | instance | ) |
Implementation of SWI UART deinit.
HAL implementation of SWI UART deinit.
| [in] | instance | instance |
| void swi_uart_discover_buses | ( | int | swi_uart_buses[], |
| int | max_buses | ||
| ) |
discover UART buses available for this hardware this maintains a list of logical to physical bus mappings freeing the application of the a-priori knowledge
| [in] | swi_uart_buses | - an array of logical bus numbers |
| [in] | max_buses | - maximum number of buses the app wants to attempt to discover |
| ATCA_STATUS swi_uart_init | ( | ATCASWIMaster_t * | instance | ) |
Implementation of SWI UART init.
HAL implementation of SWI UART init.
| [in] | instance | instance |
| void swi_uart_mode | ( | ATCASWIMaster_t * | instance, |
| uint8_t | mode | ||
| ) |
implementation of SWI UART change mode.
HAL implementation of SWI UART change mode.
| [in] | instance | instance |
| [in] | mode | (TRANSMIT_MODE or RECEIVE_MODE) |
| ATCA_STATUS swi_uart_receive_byte | ( | ATCASWIMaster_t * | instance, |
| uint8_t * | data | ||
| ) |
HAL implementation of SWI UART receive bytes over ASF. This function receive one byte over UART.
| [in] | instance | instance |
| [in,out] | data | pointer to space to receive the data |
| ATCA_STATUS swi_uart_send_byte | ( | ATCASWIMaster_t * | instance, |
| uint8_t | data | ||
| ) |
HAL implementation of SWI UART send byte over ASF. This function send one byte over UART.
| [in] | instance | instance |
| [in] | data | byte to send |
| void swi_uart_setbaud | ( | ATCASWIMaster_t * | instance, |
| uint32_t | baudrate | ||
| ) |
implementation of SWI UART change baudrate.
HAL implementation of SWI UART change baudrate.
| [in] | instance | instance |
| [in] | baudrate | (typically 230400 , 160000 or 115200) |
| [in] | instance | instance |
| [in] | baudrate | (typically 230400 or 115200) |
| atcacdc_t _gCdc |
| atcahid_t _gHid |
| char* dev = "/dev/ttyACM0" |
HAL implementation of Kit USB CDC init.
this discovery assumes a udev rule is active which renames the ATCK101 CDC device as a ttyATCAn the udev rule is:
SUBSYSTEMS=="usb", ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2122", MODE:="0777", SYMLINK+="ttyATCA%n"
| [in] | hal | pointer to HAL specific data that is maintained by this HAL |
| [in] | cfg | pointer to HAL specific configuration data that is used to initialize this HAL |
| int i2c_bus_ref_ct = 0 |
total in-use count across buses
| int i2c_bus_ref_ct = 0 |
| int i2c_bus_ref_ct = 0 |
| int i2c_bus_ref_ct = 0 |
| int i2c_bus_ref_ct = 0 |
| int i2c_bus_ref_ct = 0 |
| ATCAI2CMaster_t* i2c_hal_data[MAX_I2C_BUSES] |
Logical to physical bus mapping structure.
map logical, 0-based bus number to index
| ATCAI2CMaster_t* i2c_hal_data[MAX_I2C_BUSES] |
logical to physical bus mapping structure
| ATCAI2CMaster_t* i2c_hal_data[MAX_I2C_BUSES] |
logical to physical bus mapping structure
| ATCAI2CMaster_t* i2c_hal_data[MAX_I2C_BUSES] |
logical to physical bus mapping structure
| ATCAI2CMaster_t* i2c_hal_data[MAX_I2C_BUSES] |
| ATCAI2CMaster_t* i2c_hal_data[MAX_I2C_BUSES] |
Logical to physical bus mapping structure.
| twi_master_options_t opt_twi_master |
| struct port_config pin_conf |
| int speed = B115200 |
| int swi_bus_ref_ct = 0 |
| int swi_bus_ref_ct = 0 |
total in-use count across buses
| ATCASWIMaster_t* swi_hal_data[MAX_SWI_BUSES] |
logical to physical bus mapping structure
| ATCASWIMaster_t* swi_hal_data[MAX_SWI_BUSES] |
Logical to physical bus mapping structure.
map logical, 0-based bus number to index


Hi.
I'm a developer, designer, and photographer based in Providence, Rhode Island.
I believe that technology has an incredible power to make the world better.
I see it as my job to create tools that improve the lives of others.
I'm a student at Brown University, where I study computer science and math, in addition to creative writing,
political science, and cognitive science.
I became a developer because I love watching thousands of lines of code on a screen turn into a
real-world product. I started out with Python, then moved to iOS development with Objective-C,
before arriving at full-stack web development.
Today, I spend my dev time building web applications using frameworks like React and Flux, messing around with backends in Node and Python, and experimenting with design in Photoshop and Illustrator.
I've been part of two startups, and I recently interned at MongoDB, Inc. in New York City. I worked on the Education Team, improving the quality and accessibility of MongoDB University for users.
In addition to coding, I teach classes on coding and math at a local private school, online, and for afterschool enrichment programs.
I love good food (especially coffee), ultimate frisbee, reading, discussing politics, and gaming. Oh, and I can juggle.
|
Software Engineering Intern |
Co-Creator |
Class Assistant and Grader |
Aerie Instructor |
Computer Science and Math |
I'm always interested in development work; both for startups and for established companies. If you're just starting out with coding, I'd love to point you towards some resources. You can contact me at<EMAIL_ADDRESS>You can also find me in a number of other places, listed here:
- You can find a selection of my photography on 500px.
- I answer questions on Quora about politics, introductory computer science, and being a student.
- I occasionally answer StackOverflow questions.
- Code for some of my projects.
- @benjaminmmurphy
- My LinkedIn page.
- My résumé.
- A great resource for computer science students.
- For when you can't remember that CSS rule...
- Outstanding RegEx tester.
- A great programming curriculum I briefly helped with.
- Inspiring speech by one of Silicon Valley's greatest.
- Design process for non-designers.
- Because Internet Explorer just screws everything up.


How to crack a $300 fingerprint gun safe in a few seconds
by Mark FrauenfelderThe LockPickingLawyer has a new video, in which he defeats a fancy biometric biometric fingerprint gun safe in a few seconds using a "jiggler" key.
Image: YouTube


Author
Title

Douglas Adams
Hitchhikers guide to the galaxy

JRR Tolkien
Lord of the rings

[
{author: "Douglas Adams", title: "Hitchhikers guide to the galaxy"} ,
{author: "JRR Tolkien", title: "Lord of the rings"},
{author: "Douglas Richard Hofstadter",
title: "Gödel, Escher, Bach: an Eternal Golden Braid"},
{author: "Brian and Dennis", title: "The C Programming language"},
{author: "Kent Beck", title: "Test Driven Development"},
{author: "Various", title: "Thoughtworks anthology", cover: "twa2.jpg"}
];

Author
Title

{{book.author}}
{{book.title}}

When human features look and move almost like human beings it causes revulsion among human observers
<EMAIL_ADDRESS><EMAIL_ADDRESS>www.thoughtworks.com


Running a database query in Core52 will return a DatabaseResult
object, which encapsulates the query results and several methods that can provide the results in just about any format you’ll ever need.
After running a query, you’ll want to see whether your query ran successfully.
$result = $query->run(); if($result->null_set()) { # no data ... }
$result = $query->run(); echo $result->affected_rows().' rows updated';
$result = $query->run(); $id = $result->insert_id();
To return all rows, use the result()
method:
$result = database()->execute('SELECT name, age FROM users'); print_r($result->result());
Outputs looks like this:
array( StdObject( name => Max age => 34 ), StdObject( name => John age => 41 ), ... )
If you only need a single row, use the row()
method:
$result = database()->execute('SELECT name, age FROM users'); $person = $result->row(); echo 'Person name: '.$person->name;
To return all rows in array format, use the result_array()
method:
$result = database()->execute('SELECT name, age FROM users'); print_r($result->result_array());
Outputs looks like this:
array( array( name => Max age => 34 ), array( name => John age => 41 ), ... )
If you only need a single row, use the row_array()
method:
$result = database()->execute('SELECT name, age FROM users'); $person = $result->row_array(); echo 'Person name: '.$person['name'];
If you need to load a lot of Model objects from the database, you might automatically select a bunch of IDs and create your objects:
$result = database()->execute('SELECT id FROM users'); $models = array(); foreach($result->result() as $row) { $models[] = new User($row->id); // bad - this runs one additional query for each ID found }
A much more efficient way is to select all the data the models normally require, and to use the objects()
method:
$result = database()->execute('SELECT id FROM users'); $models = $result->objects('User');
Not only does this involve much less code, but Models don’t run the query on construct if they are passed an array of data. The above code essentially does the same as this:
$result = database()->execute('SELECT id FROM users'); $models = array(); foreach($result->result_array() as $row) { $models[] = new User($row); // good - does not run queries for each User instance }
If you only need one, use the object()
method:
$result = database()->execute('SELECT id FROM users'); $user = $result->object('User');
The filter()
method allows you to pass a PHP expression (in string
format) and returns an array of all the matching rows (in object
format):
# {row} is a placeholder for the row $bobs = $result->filter('{row}->name == "Bob"'); // returns all rows where name == 'Bob'
Be careful–using filter()
on large datasets will yield poor performance.
If you need to extract all the values of a single column as an array, use the values()
method:
$names = $result->values('name'); // gets all the name values $names = $result->values('name', TRUE); // gets all the unique name values
Filtering is also supported:
$seniors = $result->values('age', FALSE, '{row}->age >= 60');
You can easily compute the sum of all the values of a column:
$age_sum = $result->sum('age'); # filtering is also supported $sum_of_ages_over_sixty = $result->sum('age', '{row}->age > 60');
You can also compute averages:
$average_age = $result->avg('age'); # filtering is also supported $average_senior_age = $result->avg('age', '{row}->age >= 60');
Returns a string with CSV data, ideal for export as a spreadsheet:
# Arguments are optional. Defaults are: # csv($delimiter = ',', $qualifier = '"', $linebreak = "\n", $add_column_names = TRUE); echo $result->csv();
You can also export query data as a no-frills HTML table:
echo $result->table();
Sample table:

Name	Age

Bob	34

Jack	41
 ...


rpl8(8) rpl8(8) NAME rpl8 - Firmware loader for DVD drives SYNOPSIS rpl8 /dev/cdrom [-[dump-only]|firmwarefile] DESCRIPTION rpl8 is a program for Linux 2.4 and upwards that uploads firmware to DVD drives (mostly DVD+RW). rpl8 stands for RICOH Program Loader 8, though it also supports Program Loader 9. The program never updates Program Loader code so that you should always be able to downgrade your firmware in case something goes wrong. So far rpl8 has been tested with the following: * HP dvd100i * Ricoh MP5120A * Philips DVDRW208 * HP dvd200i To run rpl8 correctly, make sure you have no media in drive. Optionally go to single user mode and reboot after uploading the new firmware. OPTIONS -[dump-only] Only backs up the firmware. Note that you might have to reboot even after this. BUGS Getting messages like this is "normal" ide-scsi: Strange, packet command initiated yet DRQ isn't asserted AUTHOR rpl8 is in public domain. This manual page was written by Elias Kunnas<EMAIL_ADDRESS>for the Debian project (but may be used by others). 15 September 2005 rpl8(8)


Sometime it's desired to have bar charts that show one bar per series distributed along the x-axis. If this option is enabled, you need to make sure that you pass a single series array to Chartist that contains the series values. In this example you can see T-shirt sales of a store categorized by size.


MUMFORD
Reviewed by Harvey Karten, Ph.D. Touchstone Pictures Director: Lawrence Kasdan Writer: Lawrence Kasdan Cast: Jane Adams, Ted Danson, Hope Davis, Loren Dean, Jason Lee, Robert Stack, Pruitt Taylor Vince, Alfre Woodard, Mary McDonnell
Sometimes you get the idea that the slogan of the American Medical Association is, "If it ain't broke, we fix it until it is." Doctors, with all their education and degrees--nay, because of their education and degrees--sometimes mess us up really good. Since so many of our ailments originate in our heads, or at least partially so, maybe we'd be better off being "treated" by a good friend or by any nice guy willing to listen carefully and comment graciously on their take. Ivan Reitman acquitted himself just fine six years ago with a similar concept, his "Dave," about an incapacitated president who is replaced by a lookalike phony, an ordinary, likeable fellow, who even hires a local accountant to take care of the federal budget. The country prospers.
"Mumford," like "Dave," is a godsend to those of us who believe that we could well strip away a good deal of jargon- filled fields and substitute good common sense for fancy diagnoses and treatments. Specifically relating to the profession of psychoanalysis, the movie directed by Lawrence Kasdan ("Body Heat") from his own script could have you leaving the theater feeling so good that the eight bucks you paid for admission could be a better value than the $200 you might pay to a shrink for two sessions on the couch. The story's amiability can be credited largely to the down-home performance of Loren Dean, in the role of a true Mr. Nice Guy All-American (despite his commission of a criminal act), who shrinks the heads of a number of people of his village. resolving age-old problems and bringing happiness and good cheer. Of course none of this is believable. Dean's character, Dr. Mumford himself, concedes at one point that psychologists can't do a heck of a lot for people whose problems originated in their early childhoods. Then again, maybe a good friend and not a professional head-doctor could do the job: and that's exactly what Mumford is--a phony, a quack, and a stroke of luck to the village in which he works.
Crosscutting in a conventional manner, sometimes jaggedly from one patient to another, "Mumford" establishes the tone of an outwardly friendly town whose residents are anything but dangerous but whose lodgers have difficulties they take to the doctor's couch. Sofie Crisp (Hope Davis) has been diagnosed with Epstein-Barr syndrome and is so regularly exhausted that she at first cannot even make the walk to the psychologist's office. Skip Skiperton (Jason Lee), as congenial a fellow as you want to meet, has made three billion dollars by cornering the market on the production of modems but cannot have a relationship with a woman because he is sure they are all after his money (and he's right).  One by one, Mumford finds a solution within months for each of these delightfully troubled people, but a discovery made by two envious psychologists (Jane Adams and David Paymer) with the help of the town's snotty lawyer (Martin Short) creates a predicament for Mumford and a loss for the entire town.
Mumford" is an oddity. Starting off with a blast of music and a black-and-white scene from a detective story that sets a tone of danger and tension, Kasdan settles into a phlegmatic style. The entire picture seems to lack energy-- whether a deliberate choice from the director who is taking his audience from the usual Hollywood slam-bang comedy ambience or has himself gotten a touch of the Epstein-Barr bug. I like to think the former is the case. After a summer barrage of obscene, edgy, heart-pounding, and would-be hilarious fare, maybe this is just the ticket to provide a transition to the fall--which promises to include more of the usual melodrama and highly-paced, strenuously directed moviegoing experiences. Loren Dean's a real find, a lookalike and soundalike for Charles Grodin, and Jason Lee turns in an appealing aw-shucks performance of what Bill Gates could very have been like a decade or so ago. "Mumford" was filmed in Sonoma and Napa County California with all the spirit that has made California the archetypically laid-back locale of the States. Despite that area's wide-open spaces, Kasdan has kept the scenes close and intimate, with generally only two people in the frame at one time. That's all to the good--a restful, realistic remedy for the past summer's wild ride.
Rated R. Running Time: 111 minutes. (C) 1999 Harvey Karten
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


Orrery
A CSS Experiment
The orrery at the top of this site is an experiment in CSS 3 animation. (You might need a more modern browser to see it in action.) It uses data from nasa.gov to accurately represent how planets rotate around our sun.
For performance reasons, I’m only showing the first 6 moons (Luna, Phaebos & Daemos of Mars, and Io, Ganymede, & Europa of Jupiter). They are revolving accurately, but have been all been significantly slowed by an arbitrary amount in order to render them visible in the animation.
Orreries
Orreries are mechanical models of the solar system, intended to model how fast planets revolve around the sun. Typically they are not to scale in terms of size or distance from the sun, but rather are an attempt to achieve a highly accurate model of planetary orbit relative to each other with clockwork gearing.
The orrery at the top of this page is visually stylized in terms of planetary placement, orbital size, and shape — however, the planets really do rotate at those speeds relative to each other.
Orreries have been a long-held fascination of mine. I find the natural revolutions of the planets to be exquisitely beautiful. This clip is from a test render I did many years ago which shows gearing that results in a extremely accurate rotations and revolutions of the Earth, in a (virtual) mechanical model.
For my CSS orrery at the top of the page, I chose to include both Pluto and Eris to show how slowly they revolve relative to celestial bodies closer to the sun. (Tip: if you can’t see some planets, try shrinking your browser width.)
The code
The code for the orrery is posted on github if you want to take a detailed look. Here’s a brief walkthrough of the relevant bits.
The markup to generate the orbital rings and planets themselves is relatively simple. Here’s all it takes for Earth — CSS takes care of the color, shape, positioning, and rotation animation:
SCSS function calls
The adjustments to the planets were made by tweaking the following mixin calls until the planets were sized and laid out how I wanted. I mostly eyeballed the orbit size, position, and size of the planets by beginning with accurate numbers and making small adjustments.
Mixin to build the planets
The mixin itself is fairly crude, but it essentially turns a

into a round object using border-radius. A similarly round ::before
pseudo-element
positions the planet right on the edge of the orbit.
The reason I used nesting pseudo objects is because it simplifies the animation process by just requiring the .orbit
element to rotate. Everything else is a child of that, so rotates freely while also following the rotation of its parent.
The CSS animation process
As an example, here’s how we get the Earth to rotate. This block of CSS is the main
engine that will rotate an object indefinitely. We’ll later use the name of this keyframe animation (‘year’) for the
CSS 3 animation
property.
This sets up how fast the planets should rotate relative to each other, modified by the $speed
variable. The speed value was used to fine-tune the speed that the planets rotated altogether so I could adjust it easily. I included Earth as an example below.
Why not use SVG animation?
The main reason for not using SVG animation is that I was trying to learn more about CSS animation performance for rotate transforms. If I do a v2 of the orrery at any point in the future, I will probably try to just create vector graphics of the planets and use an svg animation library like Snap.svg.
In general, the animation is very CPU intensive for rotating this many objects. I included the pause button to limit the resources the page takes up, but it’s something I’d like to fix in the future.


Bizarre 'Ice Eggs' Stranded on Finnish Shore Go Viral – Photo
Grotesque oval ice formations created by a rare coincidence of factors on Hailuoto island in northern Finland have wowed netizens.
Pictures of freaky “eggs” of various sizes captured by Oulu resident and amateur photographer Risto Mattila during a stroll on the nearby beach Marjaniemi in Ostrobothnia have become an Instagram hit.
By his own admission, this is is the first time Mattila has encountered this 30-metre assemblage of oval egg-shaped ice floes in the 25 years he has been living near the sea.
“My wife and I stood there marvelling at the remarkable natural phenomenon.
Pictures of the weird formations, later published by Yle, left the Finnish public mystified and scratching their heads over how these may have appeared. Some joked about eggs without a hen to brood them.
Nothing Supernatural
Ice specialist Jouni Vainio of the Finnish Meteorological Institute explained that while indeed rare, the “ice eggs” have a perfectly scientific explanation.
To appear, they require a seldom seen combination of near-freezing air and water conditions.
The “eggs” are formed around a tiny particle revolving in the frigid ebb and flow, such as a snowflake, a small stone or even a bit of flotsam, with ice slowly growing around it and getting polished by the back-and-forth movement of the water. The right amount of wind is key.
“Too much wind would prevent the ball from forming. On the other hand, if calm, the water would just freeze on the beach in an even layer”, Vainio continued.
He also stressed that Mattila was lucky to encounter the eggs, because they only tend to appear for a short period of time, either melting down or congesting into a large chunk of ice, where individual objects are no longer discernible.


Windows Security Publicprivate Key Exchange Basics
My wife and I saw CITIZENFOUR yesterday during a secret screening. If you have not had the chance to see this movie, please do so as soon as you can - it’s a great documentary! The only complaint I have about the film is that they do not explain Cryptography or Encryption for the “normal” folks. When the film ended, I looked around and their were many non-technical people (including older individuals). I remember hearing someone say “well I guess I’m not going to be using email anymore”. This sentiment is not what the film is about, and I believe the director should have explained this very technical methodology to not confuse the non-techie people.
With all that being said, I’m going to try to explain Public/Private Key Exchange in the simplest form I can……
Imagine that you (mother) are wanting to send an email to someone (son), but you want the contents to be secure from prying eyes. In order to do this, you need to use a form of encryption that it is secure. The most common form of encryption is based on a certificate.
 Think about your college degree or your highschool diploma, you received this certificate from your high school or university. This certificate is really nothing special, just a printed piece of paper, but the one thing that makes this certificate unique is that it’s yours. Additionally, your certificate is unique because it has your name on it, the year you graduated, the school you went to and it possibly has an issue number. All of these things make your certificate unique, this is similar to a certificate we use for encryption.
The only difference between a certificate you received for your graduation and one you use for encryption is that your certificate for encryption is digital. Your digital certificate is typically unique because it comes from trusted source, it’s made specifically for you, and well it means that this is me - you can trust me.
So you have your unique certificate and within your certificate is a public key and a private key. As you can imagine, your private key should always be kept private. This private key is the key (pun intended) to all of your encryption. This means that you do not want to store this private key just anywhere - keep it on a thumb drive in a safe (and buried in the backyard) :) Seriously, keep it as safe as the data you are trying to encrypt needs to be protected.
The other half of your certificate is your public key. Your public key will be, well, public and we (the son) will use this public key to encrypt their data. You may be asking at this point, well okay I have my certificate, I have my public and private key, and my data is now encrypted by my public key, NOW WHAT? Well, once (your) the data is encrypted with your public key then you are the only one that can decrypt the data.
That’s right, your private key is used to decrypt data that has been encrypted by your public key!
Now let’s get to a real world example. Now, back to my example above - Mother wants to send data that’s secure to her son. For the mother to send data securely she first needs to get a certificate. Depending on where the mother lives, she can purchase a certificate from a Certificate Authority (CA) or receive one from her work’s CA. Once the mother has a certificate, she installs into her web browser or email client (for example).
Now that the certificate is installed, the public key (sometimes the private key as well) is installed on her computer and can be used to encrypt her data. Since the mother has a public key, it’s now in the public and is sent with most communication on the web. That’s okay, remember this is your public key. The mother then sends her public key to her son (by sending an email). Once her son has his mothers public key, he can now communicate with his mother securely. Anything that is sent by the son to the mother can be decrypted by the mother because her private key is the only one that can decrypt the message - which is sent encrypted by the mothers public key.
Below is a great graphical explanation of the Public/Private Key Exchange:
This post explains the basics of public/private key exchange and does not go into the details surrounding the multitude of different technologies (i.e. Diffie-Hellman, symmetric and asymmetric key exchanges, etc). I hope this post has helped people understand the absolute basics of encryption.


F
Toggle fullscreen
Space
Play / Pause
Left / Right
Skip - / + five seconds
Up / Down
Adjust subtitle size
Drag and drop a video and .SRT files


ENTRAPMENT (20th Century Fox) Starring: Sean Connery, Catherine Zeta-Jones, Ving Rhames, Will Patton. Screenplay: Ron Bass and William Broyles. Producers: Sean Connery, Michael Hertzberg and Rhonda Tollefson. Director: Jon Amiel. MPAA Rating: PG-13 (profanity, adult themes) Running Time: 114 minutes. Reviewed by Scott Renshaw.
At least ENTRAPMENT lets you know what your in for from its opening shot, a sweeping helicopter approach over water towards the New York skyline. It's a shot that has opened many a recent film, one of those showy mood-setters of which imagination-impaired directors are so very fond. Of course, you can't expect much more from a director when he's working with imagination-impaired writers. There are movies that repulse you, movies that enthrall you, and then there are movies that just plug away joylessly to fill a genre slot on a release schedule. ENTRAPMENT is one of those movies apparently made by people who have spent their entire lives locked away from the world watching other movies...and not even other _good_ movies.
The set-up finds an insurance investigator named Virginia "Gin" Baker (Catherine Zeta-Jones) fascinated with the career of a legendary art thief named Robert "Mac" MacDougal (Sean Connery). Mac has cost Gin's company millions, so Gin convinces her boss (Will Patton) to let her launch a plan to reel him in. Posing as a thief herself, Gin lures Mac into a partnership to steal a priceless Chinese mask. The alliance is, of course, an uneasey one, complicated by the distrust of Mac's partner and supplier Thibadeaux (Ving Rhames) and the romantic feelings developing between the two duplicitous characters.
It's possible that ENTRAPMENT could have gotten away with being just a heist thriller; the elaborately choreographed break-ins are decently crafted, and offer at least an occasional whiff of tension. Unfortunately, the script -- credited to Ron Bass and William Broyles, but actually the work of several more -- wants to cast Gin and Mac as star-crossed lovers, kindred spirits divided by their hidden agendas. It's a thoroughly failed attempt, since the characters are kept so enigmatic that it's never possible to understand their attraction, and their exchanges are so leaden that they might as well have the pages of the script on the table in front of them. Meanwhile, the pacing grows so lugubrious as Gin and Mac exchange loaded glances that you're likely to nod off between break-in set pieces.
The other option for a viewer is to use that time to play Spot the Cliche. Be sure to have your pad and pen ready from that opening helicopter shot, because ENTRAPMENT appears to be the product of a Script-O-Matic. From the B-follows-A dialogue exchanges (She: "There won't be any surprises." He: "There _always_ are surprises.") to the physics-defying disappearing acts, from the ominous location-identifying on-screen titles to the training montage, the film is on auto-pilot from start to finish. Thank heaven for Ving Rhames' vaguely menacing performance, and Maury Chaykin's bizarre Sidney Greenstreet-meets-Truman Capote crime boss, or there might not have been a second of ENTRAPMENT worth remembering a day later. It's designed to be swallowed without chewing.
I suppose that's partially to avoid giving anyone in the audience reason to ponder the jaw-dropping gaps in logic. ENTRAPMENT ends with one of those "betcha didn't see that coming" conclusions which, frankly, I _didn't_ see coming. I'd also long ago given up caring, especially when the behavior of the characters at certain points in the film makes no sense whatsoever when compared to what we eventually learn about them. You can only forgive that kind of laziness-disguised-as-cleverness if a film has been working hard to entertain you, to keep you engaged from start to finish. ENTRAPMENT is a film that just doesn't care. It's a film about theft, all right...of your money, your time, and the devices of a dozen other trite Hollywood star projects.
On the Renshaw scale of 0 to 10 cat bunglers: 3.
Visit Scott Renshaw's Screening Room http://www.inconnect.com/~renshaw/ *** Subscribe to receive new reviews directly by email! See the Screening Room for details, or reply to this message with subject "Subscribe".
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


Home
Services
About Us
Creators
Our Partners
Testimonials
Contact Us
Home
Services
About Us
Creators
Our Partners
Testimonials
Contact Us
Oxygen Cylinder Booking Successful!
It will be send to your address within 30 minutes.
Please Have Patience.
Thanks for Contacting!


Type:
Streams
Baseline
Click on
Load
to retrieve the Streams from PyOSLC-Adaptor.
Please stand by ...
Load
.
Cancel
OK


markdown:
# Heading
## Heading
### Heading
#### Heading
##### Heading
###### Heading
when using headings, remmeber there must be at least one space between #
and heading content like # Heading
.
<!--more-->
is a sign to indicate from where above to show in the home page
The two largest sizes of headings have long underscore and only first two level headers get header lines.
markdown:
First level header
==================
Second level header
-----------------
for two consecutive headers, there should be at least one row space, otherwise the second level header will considered as content of the first level header.
should Old Acquaintance be forgot
should Old Acquaintance be forgot
should Old Acquaintance be forgot
should Old Acquaintance be forgot
should Old Acquaintance be forgot
markdown:
*should Old Acquaintance be forgot*
_should Old Acquaintance be forgot_
**should Old Acquaintance be forgot**
__should Old Acquaintance be forgot__
**_should Old Acquaintance be forgot_**
both symbol *
and symbol _
change the character to italic form, both symbol **
and symbol __
change the character to bold form.
always create a new row space for returning a new line.
Succes Text.
Info Text.
Warning Text.
Error Text.
markdown:
Succes Text.
{:.success}
Info Text.
{:.info}
Warning Text.
{:.warning}
Error Text.
{:.error}


Lists are the foundation of Cena v2 - Create a list for your shopping trip, or even for a recipe. Lists are recursive, ie lists can contain other lists.
To add a recipe to Cena v2 create a new list (Lists -> Add new), and fill out the relevant info. Remember to tag new recipes symantically:
sort-
. So, sort-abc
gets matched with all other sort-abc
s and not with other tags. Anything that doesn't
provide a sort-*
tag is put into the unsorted group.
To set up stores, tag them with tags that start with shop-
; This
means shop-abc
becomes a store that can easily be selected for
an item by clicking the button.
If you want any more tags, add them yourself! Settings -> Tags
.
Type in your tag and hit enter in the box at the bottom of the list.
To add anything into a list, type its name into the textbox above the list and click add. Remember, you can add lists to lists, so list names will also work here. If you add a list and you only want a few things from it, a list of all the components of the list will show up allowing you to delete some unneeded ingredients.
Descriptions should be a short phrase describing the item.
From, Ryan


MyTabs is a designed for the person that uses there browser tabs as micro-bookmarks. When the browser doesn't have a specific set of resources available at all times, you start feeling like something is missing. Not only do you care about having those resources open in a tab, but you also like them in a certain state (ie. logged in to..).
You should now have everything you need to create all those tabs when Firefox opens, but also to create new tabs and build the steps required to get you back where you want to be.
Enjoy!


Recipe 4.13. Extracting a Subset of a Dictionary
Credit: David Benjamin
Problem
You want to extract from a larger
dictionary only that subset of it that corresponds to a certain set
of keys.
Solution
If you want to leave the original dictionary intact:
def sub_dict(somedict, somekeys, default=None):
return dict([ (k, somedict.get(k, default)) for k in somekeys ])
If you want to remove from the original the items
you're extracting:
def sub_dict_remove(somedict, somekeys, default=None):
return dict([ (k, somedict.pop(k, default)) for k in somekeys ])
Two examples of these functions' use and effects:
>>> d = {'a': 5, 'b': 6, 'c': 7}
>>> print sub_dict(d, 'ab'), d
{'a': 5, 'b': 6} {'a': 5, 'b': 6, 'c': 7}
>>> print sub_dict_remove(d, 'ab'), d
{'a': 5, 'b': 6} {'c': 7}
Discussion
In Python, I use dictionaries for many purposesdatabase rows,
primary and compound keys, variable namespaces for template parsing,
and so on. So, I often need to create a dictionary that is based on
another, larger dictionary, but only contains the subset of the
larger dictionary corresponding to some set of keys. In most use
cases, the larger dictionary must remain intact after the extraction;
sometimes, however, I need to remove from the larger dictionary the
subset that I'm extracting. This
recipe's solution shows both possibilities. The only
difference is that you use method get when you
want to avoid affecting the dictionary that you are getting data
from, method pop when you want to remove the items
you're getting.
If some item k of
somekeys is not in fact a key in
somedict, this recipe's
functions put k as a key in the result
anyway, with a default value (which I pass as an optional argument to
either function, with a default value of None).
So, the result is not necessarily a subset of
somedict. This behavior is the one
I've found most useful in my applications.
You might prefer to get an exception for "missing
keys"that would help alert you to a bug in
your program, in cases in which you know all
ks in somekeys
should definitely also be keys in
somedict. Remember,
"errors should never pass silently. Unless
explicitly silenced," to quote The Zen of
Python, by Tim Peters (enter the statement
import this at an interactive Python prompt to
read or re-read this delightful summary of Python's
design principles). So, if a missing key is an error, from the point
of view of your application, then you do want to
get an exception that alerts you to that error at once, if it ever
occurs. If this is what you want, you can get it with minor
modifications to this recipe's functions:
def sub_dict_strict(somedict, somekeys):
return dict([ (k, somedict[k]) for k in somekeys ])
def sub_dict_remove_strict(somedict, somekeys):
return dict([ (k, somedict.pop(k)) for k in somekeys ])
As you can see, these strict variants are even simpler than the
originalsa good indication that Python
likes to raise exceptions when unexpected
behavior occurs!
Alternatively, you might prefer missing keys to be simply omitted
from the result. This, too, requires just minor modifications:
def sub_dict_select(somedict, somekeys):
return dict([ (k, somedict[k]) for k in somekeys if k in somedict])
def sub_dict_remove_select(somedict, somekeys):
return dict([ (k, somedict.pop(k)) for k in somekeys if k in somedict])
The if clause in each list comprehension does all
we need to distinguish these _select variants from
the _strict ones.
In Python 2.4, you can use
generator expressions, instead of list comprehensions, as the
arguments to dict in each of the functions shown
in this recipe. Just change the syntax of the calls to
dict, from dict([. .
.]) to dict(. .
.) (removing the brackets adjacent to the
parentheses) and enjoy the resulting slight simplification and
acceleration. However, these variants would not work in Python 2.3,
which has list comprehensions but not generator expressions.
See Also
Library Reference and Python in a
Nutshell documentation on dict.
|


Thank You!
Please check your email for payment confirmation.
Having trouble?
Contact us
Continue to homepage


 Lol
[dscrd-hush] <gigamesh> hahahah
[dscrd-hush] <Privatoshi> @gigamesh Arguments & disagreements are healthy & common, in jobs like this.. it'd be best to embrace it or act like you didn't hear it, whichever one works best for you. I find it best to let guys get it out.. but that is me
[dscrd-hush] <Privatoshi> It will seem bad, if you think that it is.
[dscrd-hush] <Privatoshi> It happens
[dscrd-hush] <gigamesh> whatever floats your boat, personally i will try and win people over with a smile and gentle push. if they get angry ill hold their hand and try to guide them, if they tell me to fuck i will broaden my smile, and walk away
[dscrd-hush] <Privatoshi> What i do know is that, projects will continue
[dscrd-hush] <Privatoshi> Hahaha
[dscrd-hush] <Privatoshi> I just meant this is a work environment too
[dscrd-hush] <gigamesh> call it my charm offensive
[dscrd-hush] <Privatoshi> Whatever works
[dscrd-hush] <Privatoshi> don't let it affect u
[dscrd-hush] <Privatoshi> Ur work should be spot on regardless
[dscrd-hush] <Privatoshi> I am sure I won't be disappointed ever
[dscrd-hush] <Privatoshi> Devs will be devs
[dscrd-hush] <gigamesh> ultimately different approaches may be complementary, and mostly reflect the depth of a community/family's passion
[dscrd-hush] <Privatoshi> I love crypto & discord
[dscrd-hush] <Privatoshi> It has to be the best medium ever for a community
[dscrd-hush] <Privatoshi> Irc ....yeah
[dscrd-hush] <Privatoshi> a discord is a free storage space
[dscrd-hush] <Privatoshi> for your work, analysis
[dscrd-hush] <Privatoshi> And it's free
[dscrd-hush] <Privatoshi> I want on that Hush Rich List


Account
Membership & Billing
Cancel Membership
Change account email
Password:
Change password
Phone Number:
Change phone number
Paypal:
Update payment method
Billing Details
Redeem gift card or promo code
Where to buy gift cards.
Plan Details


For full functionality of this site it is necessary to enable JavaScript. Here are the
instructions how to enable JavaScript in your web browser
.
Beer List
All
Ales
Lagers
Stouts


Basic website setup. Run gulp in terminal or command prompt to compile styles, javascript, image compression etc...


mart
home
about us
page
shop
blog
contact us
affordable paris tours
city tours/tours tickets/tour guides
new collection
blue tshirt
$26
woman shirt
$31
yellow tshirt
$21
cool lingerie
$56


Share how you feel with loved ones in the most creative and memorable way.
Connect your card with the power of the internet.
Customize your digital keepsake with videos, pictures, audio and more.
Preserve the warm memories for years to come.
Hello World


Eduardo Hernández
Eduardo is an engineer in computer science who is always interested in new technologies, he considers himself a problem solver oriented to business. Eduardo is a 100% self-taught person, quality that has taken him across various sectors and positions within of the industry.
Eduardo started his career as a software engineer, later became a DevOps Engineer involving himself on research and development on OpenStack. After that, he became a OpenStack Sales Engineer and currently positioning himself as a Sales Solution Manager for the Cloud division in Latin America at Huawei. Where he uses the skills that learned throughout his industry years in order to meet the cloud needs of his clients and help Huawei to enrich lives through communication.
Contact Me!


RUSHMORE (director: Wes Anderson; cast: Jason Schwartzman (Max Fischer), Bill Murray (Blume), Olivia Williams (Miss Cross), Brian Cox (Dr. Guggenheim), Seymour Cassel (Bert Fischer), Mason Gamble (Dirk Calloway), Sara Tanaka (Margaret Yang), Stephen McCole (Magnus Buchan), Ronnie McCawley (Ronny Blume), Keith McCawley (Donny Blume), Luke Wilson (Dr. Peter Flynn), 1998)
This is a fantasy film that comically depicts one current student making contact with another former student of the same school, who is now a tycoon, who when he looks back at his high school days, might recall what it was about those years that now fill him with nostalgia, and how he might be an influence to other students not considered to be top flight students yet who possess the guts it takes to become successful.
RUSHMORE opens, as an irrepressible sophomore at an elite private school, the 15-year-old Max Fischer (Schwartzman), who is the future tycoon, is daydreaming that he can solve an impossible math problem his math teacher put on the board for extra-credit that no one else in the world can solve. In reality, he is a poor academic student, having won a scholarship to the school when he was in the 2nd grade, by staging a play that the headmaster (Brian Cox ) of Rushmore Academy was impressed with. His father is the town barber, but Max prefers to tell people that his father is a neurosurgeon. The father is paternally played with a very sweet charm, by veteran actor, Seymour Cassel.
This is an original and quirky story, but it also follows a long tradition of films that took similar routes (FERRIS BUELLER'S DAY OFF, THE GRADUATE), so what seems to be taking place and in what direction it is going and who Max is, cannot be simply or absolutely stated, which is great in some ways but completely mind-blowing in other ways, as this somewhat cheesy story has more holes in it than Swiss cheese, yet no matter how it seems to be served, it always seems to be a story that is tastefully done.
Max appears with thick spectacles, wearing braces, and not appealing to girls or not even liked by any one on campus except for a young student he is an advisor to, Dirk (Mason), who acts as a loyal subject to Max's cause, only disillusioned when he hears that Max made some sexually disparaging remarks about his mother. Max is not exactly a nerd, as he is pushy, being neither completely likable nor obnoxious, who propels himself into the Rushmore scene by pursuing extra-curricular activities to such a degree that it reaches the point of absurdity, as he is involved in so many diverse activities, that it is a wonder he has time to even take off the preppy jacket he loves to wear around the campus. The list of his activities includes: Beekeepers Club, The Dodgeball Society, The French Club, The Debating Team, The Fencing Team, editor of the school's paper, The Piper Cub Club, The Max Fischer Players, they put on plays, which seem ridiculously overplayed, such as Serpico in which he directs and stars in.
Rushmore is Max's symbolic place, tantamount to that august mountain top where replicas of some of our greatest presidents are carved in stone. It is at Rushmore where he is bursting with untold energy for adventure, entrepenureship, and romance. Everything he does is what someone his age might want to do or dream about, but he carries it out from fantasy land into the real world, not deterred by what others may think of him, or of how totally off-the-wall he appears. Oblivious to his poor school work, except when the headmaster reminds him that if he doesn't improve his grades, he will be expelled from school, scholarship or not.
He falls foolishly in love with a 25-year-old elementary teacher at the school, charmingly played by Miss Cross (Williams), who looks bemusedly perplexed at him, but, nevertheless, somehow admires him for the effort he puts forth in stating his feelings for her. Her husband recently died, but spoke fondly of his attending Rushmore, which is the reason she chose for coming here to teach. Max plans to win her over by building her an aquarium, as a token of his affection. The money for this pie-in-the-sky project will come from a steel tycoon, Herman Blume (Murray), whom he met after the former graduate of the school gave a speech there that seemed to only impress him, as the tycoon told what the school meant to him, in a flippant way that alumni usually don't reminisce about when giving a formal speech in an auditorium.
Blume, as the present day tycoon looking back at his days at Rushmore, as the springboard of his success, just as he looks back at his marriage with remorse, develops a natural kinship with Max, the tycoon-in-waiting, that is beautifully presented by an understated performance by Murray, who draws comedy by just raising an eyebrow at the right moment or when befuddled lighting two cigarettes in his mouth, and who evinces pathos when he seems inundated by his dislike of himself for the unfeeling person he has become.
There are many twists to come into play as the story is disarmingly told, forcing us not too get too comfortable in what we expect to be a sane commentary of the going-ons here. The twist in the story that works best, and is both hilariously amusing and deadly serious, is that Blume, trapped in a loveless marriage, falls for the teacher, also, and is able to romance her. Max acts particularly upset by this turn of events, venting out at all the parties he perceives are hurting him. These scenes were wickedly cruel to comprehend, as the story flipped over from comedy to psychological drama, and to a certain extent, a temporary suspension of belief. Yet it was this facet of the story that was most novel and daring about the film, as it let the characters freely play out who they were without contrivance. Therefore, even if you didn't particularly care about the way things were going, you were at least taken aback by seeing how everyone interacted with each other. Max showing himself to be rude and insulting, going to great lengths to end the relationship between the two lovers, somehow believing that he should have been taken seriously as a real suitor. Blume retaliating by smashing the kid's bike. Max getting back at Blume, by cutting the brakes to Blume's Bentley. Miss Cross by showing that she's a sensitive and vulnerable woman, who wants to feel alive and romantic, and doesn't really understood that she is being wooed by men who can't take no for an answer.This is the part of the film that I had the most problems with, especially when we see her going out with an attractive doctor (Luke), a Harvard graduate, like she is, and he seems to be the odd man out for no decipherable reason that the story expands on.
When Max gets kicked out of Rushmore and goes to the inferior public high school, he continues to do poorly in his school work but will excel once again in extra-curricular activities, even putting on an anti-Vietnam War play with live ammo, requiring the audience to put on earplugs and wear goggles. He even finds an Oriental girlfriend (Tanaka), who is not quite the scientist she seems to be, which in this case is a good thing, because that makes her just about right for Max.
The young director's previous film, BOTTLE ROCKET, was also written by him with Owen Wilson, it was also quirky but a bit less professionally done. Both films show promise of better things to come. There are still patches to this story that need further developing and to be pruned along the edges before we can say we have things in order, but after saying that, I must say that this is still a first-rate film, with a lot of bite to it, depicting characters in a discrete way that allows them to be very real and formidable. This is Bill Murray's best role yet, and for newcomer, Jason Schwartzman, the son of actress Talia Shire, a role made for him in filmdom heaven.
REVIEWED ON 4/13/99 GRADE: B
Dennis Schwartz: " Ozus' World Movie Reviews" http://www.sover.net/~ozus
© ALL RIGHTS RESERVED DENNIS SCHWARTZ
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


summer’s little secret—
copper accents
ENDS SUNDAY!
$20 off your purchase of $45 or more
see coupon below
To shop online, copy and paste:
http://links.mkt1917.com/ctt?kn=8&ms=MTMxNDcyODAS1&r=Mzc1MTMwMDUwMTIS1&b=2&j=NzgzMjU0MjQxS0&mt=1&rt=0
into your browser
To find a store near you, copy and paste:
http://links.mkt1917.com/ctt?kn=24&ms=MTMxNDcyODAS1&r=Mzc1MTMwMDUwMTIS1&b=2&j=NzgzMjU0MjQxS0&mt=1&rt=0
into your browser
Accents Make it Perfect
You know it’s always the little touches that make the biggest change.
To shop online, copy and paste:
http://links.mkt1917.com/ctt?kn=15&ms=MTMxNDcyODAS1&r=Mzc1MTMwMDUwMTIS1&b=2&j=NzgzMjU0MjQxS0&mt=1&rt=0
into your browser
NEW Homecoming Accessories
Candle Shade, Tray and more!
To shop online, copy and paste:
http://links.mkt1917.com/ctt?kn=13&ms=MTMxNDcyODAS1&r=Mzc1MTMwMDUwMTIS1&b=2&j=NzgzMjU0MjQxS0&mt=1&rt=0
into your browser
To print coupon, copy and paste:
http://links.mkt1917.com/ctt?kn=32&ms=MTMxNDcyODAS1&r=Mzc1MTMwMDUwMTIS1&b=2&j=NzgzMjU0MjQxS0&mt=1&rt=0
into your browser
Meet our new look…
we’re so excited!
To see what’s new, copy and paste:
http://links.mkt1917.com/ctt?kn=23&ms=MTMxNDcyODAS1&r=Mzc1MTMwMDUwMTIS1&b=2&j=NzgzMjU0MjQxS0&mt=1&rt=0
into your browser


Fantasy Football
Home
(current)
My Team
Fixtures
Transfers
Below is the fixture list for the current week.
Gameweek 11


We use cookies on this website to distinguish you from other users.
We use this data to improve our content experience and for targeted advertising.
By continuing to use this website you consent to our use of cookies.
For more information, please see our
Cookie Policy.


¿ Why is this important?
When you are looking for a new job, a key skill is the ability to learn and transmit knowledge
Show to your future boss what have you have done to be such an awesome professional
Timeline
-
{% for item in timeline_items %}
-
{{ item.start_date }}{% if item.end_date %} - {{ item.end_date }} {% endif %}
{{ item.title }}
{{ item.description }}
{% endfor %}