XH430-V210
Specifications
| Item | Specifications |
|---|---|
| MCU | ST CORTEX-M3 (STM32F103C8 @ 72Mhz, 32Bit) |
| Position Sensor | Contactless absolute encoder (12Bit, 360°) Maker : ams(www.ams.com), Part No : AS5045 |
| Motor | Maxon |
| Baud Rate | 9600 bps ~ 4.5 Mbps |
| Control Algorithm | PID control |
| Degree of Precision | 0.088° |
| Operating Modes | Current Control Mode Velocity Control Mode Position Control Mode (0° ~ 360°) Extended Position Control Mode Current-based Position Control Mode PWM Control Mode (Voltage Control Mode) |
| Weight | 82g |
| Dimensions (W x H x D) | 28.5mm x 46.5mm x 34mm |
| Gear Ratio | 212.6 : 1 |
| Stall Torque | 2.6Nm @ 24V, 0.7A |
| No Load Speed | 52rpm @ 24V |
| Operating Temperature | -5°C ~ +80°C |
| Input Voltage | 24.0V (Recommended : 24.0V) |
| Standby Current | 36mA |
| Command Signal | Digital Packet |
| Protocol Type | RS485 Asynchronous Serial Communication (8bit, 1stop, No Parity) |
| Physical Connection | RS485 Multidrop BUS |
| ID | 0 ~ 252 |
| Feedback | Position, Velocity, Current, Realtime tick, Trajectory, Temperature, Input Voltage, etc |
| Part Material | Full Metal Gear Metal(Front, Middle), Engineering Plastic(Back) |
Performance Graph
Note
The max torque measurement method for the Stall Torque and Performance Graph is different. Stall torque is measured from the max torque that it can reach. This is generally how RC servos measure their torque. For the Performance graph with the N-T curves, it is measured with the load gradually increasing. The motor operation environment is closer to the performance graph, not stall torque method. This is probably why the performance graph is being broadly used in the industrial market. This is why the max torque of the performance grap can actually be less than the stall torque.
Caution
When connecting to power supply, it is recommended using ROBOTIS controller or SMPS2DYNAMIXEL.
Do not connect or disconnect DYNAMIXEL when power is being supplied.
Control Table
The Control Table is a structure of data implemented in the DYNAMIXEL. Users can read a specific Data to get status of the DYNAMIXEL with Read Instruction Packets, and modify Data as well to control DYNAMIXEL with WRITE Instruction Packets.
Control Table, Data, Address
The Control Table is a structure that consists of multiple Data fields to store status of the DYNAMIXEL or to control the DYNAMIXEL. Users can check current status of the DYNAMIXEL by reading a specific Data from the Control Table with Read Instruction Packets. WRITE Instruction Packets enable users to control the DYNAMIXEL by changing specific Data in the Control Table. The Address is a unique value when accessing a specific Data in the Control Table with Instruction Packets. In order to read or write data, users must designate a specific Address in the Instruction Packet. Please refer to Protocol 2.0 for more details about Instruction Packets.
Note
Two’s complement is applied for the negative value. For more information, please refer to Two’s complement from Wikipedia.
Area (EEPROM, RAM)
The Control Table is divided into 2 Areas. Data in the RAM Area is reset to initial values when the power is reset(Volatile). On the other hand, data in the EEPROM Area is maintained even when the DYNAMIXEL is powered off(Non-Volatile). Data in the EEPROM Area can only be written to if Torque Enable(64) is cleared to ‘0’(Off).
Size
The Size of data varies from 1 to 4 bytes depend on their usage. Please check the size of data when updating the data with an Instruction Packet. For data larger than 2 bytes will be saved according to Little Endian.
Access
The Control Table has two different access properties. ‘RW’ property stands for read and write access permission while ‘R’ stands for read only access permission. Data with the read only property cannot be changed by the WRITE Instruction. Read only property(‘R’) is generally used for measuring and monitoring purpose, and read write property(‘RW’) is used for controlling DYNAMIXEL.
Initial Value
Each data in the Control Table is restored to initial values when the DYNAMIXEL is turned on. Default values in the EEPROM area are initial values of the DYNAMIXEL (factory default settings). If any values in the EEPROM area are modified by a user, modified values will be restored as initial values when the DYNAMIXEL is turned on. Initial Values in the RAM area are restored when the DYNAMIXEL is turned on.
Control Table of EEPROM Area
| Address | Size (Byte) |
Data Name | Description | Access | Initial Value |
|---|---|---|---|---|---|
| 0 | 2 | Model Number | Model Number | R | 1050 |
| 2 | 4 | Model Information | Model Information | R | - |
| 6 | 1 | Firmware Version | Firmware Version | R | - |
| 7 | 1 | ID | DYNAMIXEL ID | RW | 1 |
| 8 | 1 | Baud Rate | Communication Speed | RW | 1 |
| 9 | 1 | Return Delay Time | Response Delay Time | RW | 250 |
| 10 | 1 | Drive Mode | Default Rotation Direction | RW | 0 |
| 11 | 1 | Operating Mode | Operating Mode | RW | 3 |
| 12 | 1 | Secondary(Shadow) ID | Secondary(Shadow) ID | RW | 255 |
| 13 | 1 | Protocol Version | Protocol Version | RW | 2 |
| 20 | 4 | Homing Offset | Home Position Offset | RW | 0 |
| 24 | 4 | Moving Threshold | Velocity Threshold for Movement Detection | RW | 10 |
| 31 | 1 | Temperature Limit | Maximum Internal Temperature Limit | RW | 80 |
| 32 | 2 | Max Voltage Limit | Maximum Input Voltage Limit | RW | 300 |
| 34 | 2 | Min Voltage Limit | Minimum Input Voltage Limit | RW | 110 |
| 36 | 2 | PWM Limit | Maximum PWM Limit | RW | 885 |
| 38 | 2 | Current Limit | Maximum Current Limit | RW | 689 |
| 40 | 4 | Acceleration Limit | Maximum Accleration Limit | RW | 32767 |
| 44 | 4 | Velocity Limit | Maximum Velocity Limit | RW | 380 |
| 48 | 4 | Max Position Limit | Maximum Position Limit | RW | 4095 |
| 52 | 4 | Min Position Limit | Minimum Position Limit | RW | 0 |
| 63 | 1 | Shutdown | Shutdown Error Information | RW | 52 |
Control Table of RAM Area
| Address | Size (Byte) |
Data Name | Description | Access | Initial Value |
|---|---|---|---|---|---|
| 64 | 1 | Torque Enable | Motor Torque On/Off | RW | 0 |
| 65 | 1 | LED | Status LED On/Off | RW | 0 |
| 68 | 1 | Status Return Level | Select Types of Status Return | RW | 2 |
| 69 | 1 | Registered Instruction | Check Reception of Instruction | R | 0 |
| 70 | 1 | Hardware Error Status | Hardware Error Status | R | 0 |
| 76 | 2 | Velocity I Gain | I Gain of Velocity | RW | 1920 |
| 78 | 2 | Velocity P Gain | P Gain of Velocity | RW | 100 |
| 80 | 2 | Position D Gain | D Gain of Position | RW | 0 |
| 82 | 2 | Position I Gain | I Gain of Position | RW | 0 |
| 84 | 2 | Position P Gain | P Gain of Position | RW | 800 |
| 88 | 2 | Feedforward 2nd Gain | 2nd Gain of Feed-Forward | RW | 0 |
| 90 | 2 | Feedforward 1st Gain | 1st Gain of Feed-Forward | RW | 0 |
| 98 | 1 | Bus Watchdog | DYNAMIXEL Bus Watchdog | RW | 0 |
| 100 | 2 | Goal PWM | Target PWM Value | RW | - |
| 102 | 2 | Goal Current | Target Current Value | RW | - |
| 104 | 4 | Goal Velocity | Target Velocity Value | RW | - |
| 108 | 4 | Profile Acceleration | Acceleration Value of Profile | RW | 0 |
| 112 | 4 | Profile Velocity | Velocity Value of Profile | RW | 0 |
| 116 | 4 | Goal Position | Target Position Value | RW | - |
| 120 | 2 | Realtime Tick | Count Time in millisecond | R | - |
| 122 | 1 | Moving | Movement Status | R | 0 |
| 123 | 1 | Moving Status | Detailed Information of Movement Status | R | 0 |
| 124 | 2 | Present PWM | Current PWM Value | R | - |
| 126 | 2 | Present Current | Current Current Value | R | - |
| 128 | 4 | Present Velocity | Current Velocity Value | R | - |
| 132 | 4 | Present Position | Current Position Value | R | - |
| 136 | 4 | Velocity Trajectory | Target Velocity Trajectory Generated by Profile | R | - |
| 140 | 4 | Position Trajectory | Target Position Trajectory Generated by Profile | R | - |
| 144 | 2 | Present Input Voltage | Current Input Voltage | R | - |
| 146 | 1 | Present Temperature | Current Internal Temperature | R | - |
| 168 | 2 | Indirect Address 1 | Indirect Address 1 | RW | 224 |
| 170 | 2 | Indirect Address 2 | Indirect Address 2 | RW | 225 |
| 172 | 2 | Indirect Address 3 | Indirect Address 3 | RW | 226 |
| … | … | … | … | … | … |
| 218 | 2 | Indirect Address 26 | Indirect Address 26 | RW | 249 |
| 220 | 2 | Indirect Address 27 | Indirect Address 27 | RW | 250 |
| 222 | 2 | Indirect Address 28 | Indirect Address 28 | RW | 251 |
| 224 | 1 | Indirect Data 1 | Indirect Data 1 | RW | 0 |
| 225 | 1 | Indirect Data 2 | Indirect Data 2 | RW | 0 |
| 226 | 1 | Indirect Data 3 | Indirect Data 3 | RW | 0 |
| … | … | … | … | … | … |
| 249 | 1 | Indirect Data 26 | Indirect Data 26 | RW | 0 |
| 250 | 1 | Indirect Data 27 | Indirect Data 27 | RW | 0 |
| 251 | 1 | Indirect Data 28 | Indirect Data 28 | RW | 0 |
| 578 | 2 | Indirect Address 29 | Indirect Address 29 | RW | 634 |
| 580 | 2 | Indirect Address 30 | Indirect Address 30 | RW | 635 |
| 582 | 2 | Indirect Address 31 | Indirect Address 31 | RW | 636 |
| … | … | … | … | … | … |
| 628 | 2 | Indirect Address 54 | Indirect Address 54 | RW | 659 |
| 630 | 2 | Indirect Address 55 | Indirect Address 55 | RW | 660 |
| 632 | 2 | Indirect Address 56 | Indirect Address 56 | RW | 661 |
| 634 | 1 | Indirect Data 29 | Indirect Data 29 | RW | 0 |
| 635 | 1 | Indirect Data 30 | Indirect Data 30 | RW | 0 |
| 636 | 1 | Indirect Data 31 | Indirect Data 31 | RW | 0 |
| … | … | … | … | … | … |
| 659 | 1 | Indirect Data 54 | Indirect Data 54 | RW | 0 |
| 660 | 1 | Indirect Data 55 | Indirect Data 55 | RW | 0 |
| 661 | 1 | Indirect Data 56 | Indirect Data 56 | RW | 0 |
Caution
Protocol 1.0 does not support addresses greater than 256. Therefore, Indirect Address 29 ~ 56 and Indirect Data 29 ~ 56 can only be accessed with Protocol 2.0.
Control Table Description
Caution
Data in the EEPROM Area can only be written when the value of Torque Enable(64) is cleared to ‘0’.
Model Number(0)
This address stores model number of the DYNAMIXEL.
Firmware Version(6)
This address stores firmware version of the DYNAMIXEL.
ID(7)
The ID is a unique value in the network to identify each DYNAMIXEL with an Instruction Packet. 0~252 (0xFC) values can be used as an ID, and 254(0xFE) is occupied as a broadcast ID. The Broadcast ID(254, 0xFE) can send an Instruction Packet to all connected DYNAMIXELs simultaneously.
Note
Please avoid using an identical ID for multiple DYNAMIXELs. You may face communication failure or may not be able to detect Dynamixels with an identical ID.
Baud Rate(8)
Baud Rate determines serial communication speed between a controller and DYNAMIXELs.
| Value | Baud Rate | Margin of Error |
|---|---|---|
| 7 | 4.5M | 0.000% |
| 6 | 4M | 0.000% |
| 5 | 3M | 0.000% |
| 4 | 2M | 0.000% |
| 3 | 1M | 0.000% |
| 2 | 115,200 | 0.000% |
| 1(Default) | 57,600 | 0.000% |
| 0 | 9,600 | 0.000% |
Note
Less than 3% of the baud rate error margin will not affect to UART communication.
Return Delay Time(9)
After the DYNAMIXEL receives an Instruction Packet, it delays transmitting the Status Packet for Return Delay Time (9). For instance, if the Return Delay Time(9) is set to ‘10’, the Status Packet will be returned after 20[μsec] when the Instruction Packet is received.
| Unit | Value Range | Description |
|---|---|---|
| 2[μsec] | 0 ~ 254 | Default value ‘250’(500[μsec]), Maximum 508[μsec] |
Drive Mode(10)
Drive Mode is availabe from the firmware version 38.
| Bit | Item | Description |
|---|---|---|
| Bit 1(0x02) ~ 7(0x80) | N/A | Unused, always ‘0’ |
| Bit 0(0x01) | Direction of Rotation | Normal Mode(0): CCW(Positive), CW(Negative) Reverse Mode(1): CCW(Negative), CW(Positive) |
Operating Mode(11)
| Value | Operating Mode | Description |
|---|---|---|
| 0 | Current Control Mode | DYNAMIXEL only controls current(torque) regardless of speed and position. This mode is ideal for a gripper or a system that only uses current(torque) control or a system that has additional velocity/position controllers. |
| 1 | Velocity Control Mode | This mode controls velocity. This mode is identical to the Wheel Mode(endless) from existing DYNAMIXELs. This mode is ideal for wheel-type robots. |
| 3(Default) | Position Control Mode | This mode controls position. This mode is identical to the Joint Mode from existing DYNAMIXELs. Operating position range is limited by Max Position Limit(48) and Min Position Limit(52). This mode is ideal for articulated robots that each joint rotates less than 360 degrees. |
| 4 | Extended Position Control Mode(Multi-turn) | This mode controls position. This mode is identical to the Multi-Turn Mode from existing DYNAMIXELs. 512 turns are supported(-256[rev] ~ 256[rev]). This mode is ideal for multi-turn wrists or conveyer systems or a system that requires an additional reduction gear. |
| 5 | Current-based Position Control Mode | This mode controls both position and current(torque). Up to 512 turns are supported(-256[rev] ~ 256[rev]). This mode is ideal for a system that requires both position and current control such as articulated robots or grippers. |
| 16 | PWM Control Mode (Voltage Control Mode) | This mode directly controls PWM output. (Voltage Control Mode) |
Note
Switching Operating Mode will reset gains(PID, Feedfoward) properly to the selected Operating Mode. The profile generator and limits will also be reset.
- Profile Velocity(112), Profile Acceleration(108) : Reset to ‘0’
- Goal PWM(100), Goal Current(102) : Reset to PWM Limit(36), Current Limit(38) respectively
- Current-based Position Control Mode : Reset to Position Gain(PID) and PWM Limit(36) values.
Changed Position Gain(PID) and PWM Limit(36) values can be read from the Control Table.
Note
PWM is the abbreviation for Pulse Width Modulation that modulates PWM Duty to control motors. The PWM Control Mode changes pulse width to control average supply voltage to the motor and this technique is widely used in the motor control field. Therefore, PWM Control Mode uses Goal PWM(100) value to control supply voltage for DYNAMIXEL. PWM Control Mode is similar to the Wheel Mode of DYNAMIXEL AX and RX series.
Secondary(Shadow) ID(12)
Set the Dynamixel’s Secondary ID. Secondary ID(12) is a value to identify each Dynamixel, just like the ID(7). However, unlike ID(7), Secondary ID(12) is not a unique value. Therefore, Dynamixels with the same Secondary ID value form a group. The differences between Secondary ID(12) and ID(7) are as follows :
- Secondary ID(12) is not a unique value. i.e., a lot of Dynamixels may have the same Secondary ID value.
- ID(7) has a higher priority than Secondary ID(12). i.e., if Secondary ID(12) and ID(7) are the same, ID(7) will be applied first.
- The EEPROM area of the Control Table cannot be modified with Secondary ID(12). Only the RAM area can be modified.
- If Instruction Packet ID is the same as Secondary ID(12), the Status Packet will not be returned.
- If the value of Secondary ID(12) is 253 or higher, the Secondary ID function is deactivated.
| Values | Description |
|---|---|
| 0 ~ 252 | Activate Secondary ID function |
| 253 ~ 255 | Deactivate Secondary ID function, Default value ‘255’ |
The following are examples of operation when there are five Dynamixels with ID (7) set from 1 to 5.
- Set all five Dynamixels’ Secondary ID(12) to ‘5’.
- Send Write Instruction Packet(ID = 1, LED(65) = 1).
- Turn on LED of Dynamixel with ID ‘1’ and return the Status Packet.
- Send Write Instruction Packet(ID = 5, LED(65) = 1).
- Turn on LED on five Dynamixels. However, Status Packet of Dynamixel with ID ‘5’ will be returned.
- Set the Secondary ID(12) of all five Dynamixels to ‘100’.
- Send Write Instruction Packet(ID = 100, LED(65) = 0).
- Turn off LED on five Dynamixels. However, as there is no Dynamixel with ID ‘100’, Status Packet is not returned.
Protocol Version(13)
Users can select Dynamixel protocol version (1.0 and 2.0). It is recommended to use an identical protocol version for multiple Dynamixels.
| Value | Protocol Version | Compatible Dynamixels |
|---|---|---|
| 1 | 1.0 | AX Series, DX Series, RX Series, EX Series, MX Series with Firmware below v39 |
| 2(default) | 2.0 | MX-28/64/106 with Firmware v39 or above, X Series, Pro Series |
Note
The protocol 2.0 is greatly enhanced from the protocol 1.0. Accessing some of the Control Table area might be denied if protocol 1.0 is selected. This manual complies with protocol 2.0. Please refer to the Protocol section of e-Manual for more details about the protocol.
Homing Offset(20)
Users can adjust the Home position by setting Home Offset(20). The Homing Offset value is added to the Present Position(132). Present Position(132) = Actual Position + Homing Offset(20).
| Unit | Value Range | Description |
|---|---|---|
| about 0.088° | -1,044,479 ~ 1,044,479 (-255 ~ 255[rev]) |
4,096 resolution |
Note
In case of the Position Control Mode(Joint Mode) that rotates less than 360 degrees, any invalid Homing Offset(20) values will be ignored(valid range : -1,024 ~ 1,024).
Moving Threshold(24)
This value helps to determine whether the Dynamixel is in motion or not.
When the absolute value of Present Velocity(128) is greater than the Moving Threshold(24), Moving(122) is set to ‘1’, otherwise it is cleared to ‘0’.
| Values | Description | |
|---|---|---|
| Unit | about 0.229 rpm | All velocity related Data uses the same unit |
| Range | 0 ~ 1,023 | - |
Temperature Limit(31)
This value limits operating temperature.
When the Present Temperature(146) that indicates internal temperature of Dynamixel is greater than the Temperature Limit(31), the Over Heating Error Bit(0x04) and Hardware Error Bit(0x80) in the Hardware Error Status(70) will be set.
If Overheating Error Bit(0x04) is configured in the Shutdown(63), Torque Enable(64) is cleared to ‘0’ and Torque will be disabled.
For more details, please refer to the Shutdown(63) section.
| Unit | Value Range | Description |
|---|---|---|
| About 1° | 0 ~ 100 | 0 ~ 100° |
Caution
Do not set the temperature lower/higher than the default value. When the temperature alarm shutdown occurs, wait 20 minutes to cool the temperature before re-use. Keep using the product when the temperature is high can cause severe damage.
Min/Max Voltage Limit(32, 34)
These values are maximum and minimum operating voltages. When current input voltage acquired from Present Input Voltage(144) exceeds the range of Max Voltage Limit(32) and Min Voltage Limit(34), Voltage Range Error Bit(0x01) and Hardware Error Bit(0x80) in the Hardware Error Status(70) are set. If Input Voltage Error Bit(0x10) is configured in the Shutdown(63), Torque Enable(64) is cleared to ‘0’ and Torque is disabled. For more details, please refer to the Shutdown(63) section.
| Unit | Value Range | Description |
|---|---|---|
| About 0.1V | 110 ~ 300 | 11.0 ~ 30.0V |
PWM Limit(36)
This value indicates maximum PWM output. Goal PWM(100) can’t be configured with any values exceeding PWM Limit(36). PWM Limit(36) is commonly used in all operating mode as an output limit, therefore decreasing PWM output will result in decreasing torque and velocity. For more details, please refer to the Gain section of each operating modes.
| Values | Description |
|---|---|
| 0(0%) ~ 885(100%) | 885 = 100[%] output |
Current Limit(38)
This value indicates maximum current(torque) output limit. Goal Current(102) can’t be configured with any values exceeding Current Limit(38). The Current Limit(38) is used in Torque Control Mode and Current-based Position Control Mode, therefore decreasing Current Limit(38) will result in decreasing torque of DYNAMIXEL. For more details, please refer to the Position PID Gain(80 ~ 84).
| Unit | Value Range |
|---|---|
| about 1.34[mA] | 0 ~ 689 |
Note
Current Limit(38) could be differ by each DYNAMIXEL so please check the Control Table.
Acceleration Limit(40)
This value indicates maximum Profile Acceleration(108). Profile Acceleration(108) can’t be configured with any values exceeding Acceleration Limit(40). Profile Acceleration(108) is used in all operating mode except PWM Control Mode in order to generate a target trajectory. For more details, please refer to the Profile Velocity(112).
| Unit | Value Range |
|---|---|
| 214.577 Rev/min2 | 0 ~ 32,767 |
Note
Bit information of the Error field in the Status Packet is different from protocol 1.0 and protocol 2.0. This manual complies with protocol 2.0. Please refer to the Protocol section of e-Manual for more details about the protocol.
Velocity Limit(44)
This value indicates maximum velocity of Goal Velocity(104) and Profile Velocity(112). For more details, please refer to the Profile Velocity(112).
| Unit | Value Range |
|---|---|
| 0.229rpm | 0 ~ 1,023 |
Min/Max Position Limit(48, 52)
These values limit maximum and minimum target positions for Position Control Mode(Joint Mode) within the range of 1 rotation(0 ~ 4,095). Therefore, Goal Position(116) should be configured within the position limit range. These values are not used in Extended Position Control Mode and Current-based Position Control Mode.
| Unit | Value Range |
|---|---|
| 0.088° | 0 ~ 4,095(1 rotation) |
Note
Max Position Limit(48) and Min Position Limit(52) are only used in Position Control Mode with a single turn.
Shutdown(63)
The Dynamixel can protect itself by detecting dangerous situations that could occur during the operation.
Each Bit is inclusively processed with the ‘OR’ logic, therefore, multiple options can be generated.
For instance, when ‘0x05’ (binary : 00000101) is defined as Shutdown(63), Dynamixel can detect both Input Voltage Error(binary : 00000001) and Overheating Error(binary : 00000100).
If those errors are detected, Torque Enable(64) is cleared to ‘0’ and the motor output becomes 0[%].
REBOOT is the only method to reset Torque Enable(64) to ‘1’(Torque ON) after the shutdown.
The followings are detectable situations.
| Bit | Item | Description |
|---|---|---|
| Bit 7 | - | Unused, Always ‘0’ |
| Bit 6 | - | Unused, Always ‘0’ |
| Bit 5 | Overload Error(default) | Detect persistent load that exceeds maximum output |
| Bit 4 | Electrical Shock Error(default) | Detect electric shock on the circuit or insufficient power to operate the motor |
| Bit 3 | Motor Encoder Error | Detect malfunction of the motor encoder |
| Bit 2 | OverHeating Error(default) | Detect internal temperature exceeds the configured operating temperature |
| Bit 1 | - | Unused, Always ‘0’ |
| Bit 0 | Input Voltage Error | Detect input voltage exceeds the configured operating voltage |
Note
If Shutdown occurs, use below method to reboot Dynamixels.
- H/W REBOOT : Turn off the power and turn on again
- S/W REBOOT : Transmit REBOOT Instruction (For more details, please refer to the [Reboot] section of Protocol e-Manual.)
If Shutdown occurs, LED will flicker every second.(Firmware v41 or above)
Torque Enable(64)
Controls Torque ON/OFF. Writing ‘1’ to this address will turn on the Torque and all Data in the EEPROM area will be protected.
| Value | Description |
|---|---|
| 0(Default) | Torque OFF(Free-run) and the motor does not generate torque |
| 1 | Torque ON and all Data in the EEPROM area will be locked |
Note
Present Position(132) can be reset when Operating Mode(11) and Torque Enable(64) are updated. For more details, please refer to the Homing Offset(20) and Present Position(132).
LED(65)
Turn on or turn off the LED on Dynamixel.
| Bit | Description |
|---|---|
| 0(Default) | Turn OFF the LED |
| 1 | Turn ON the LED |
Status Return Level(68)
This value decides how to return Status Packet when Dynamixel receives an Instruction Packet.
| Value | Responding Instructions | Description |
|---|---|---|
| 0 | PING Instruction | Status Packet will not be returned for all Instructions |
| 1 | PING Instruction READ Instruction |
Status Packet will be returned only for READ Instruction |
| 2 | All Instructions | Status Packet will be returned for all Instructions |
Note
If the ID of Instruction Packet is set to Broad Cast ID(0xFE), Status Packet will not be returned for READ and WRITE Instructions regardless of Status Return Level. For more details, please refer to the Status Packet
section for Protocol 1.0 or Protocol 2.0.
Registered Instruction(69)
| Value | Description |
|---|---|
| 0 | REG_WRITE instruction is not received |
| 1 | REG_WRITE instruction is received |
Note
If ACTION instruction is executed, the value will be changed to 0.
Hardware Error Status(70)
This value indicates hardware error status.
The Dynamixel can protect itself by detecting dangerous situations that could occur during the operation.
Each Bit is inclusively processed with the ‘OR’ logic, therefore, multiple options can be generated.
For instance, when ‘0x05’ (binary : 00000101) is defined as Shutdown(63), Dynamixel can detect both Input Voltage Error(binary : 00000001) and Overheating Error(binary : 00000100).
If those errors are detected, Torque Enable(64) is cleared to ‘0’ and the motor output becomes 0[%].
REBOOT is the only method to reset Torque Enable(64) to ‘1’(Torque ON) after the shutdown.
The followings are detectable situations.
| Bit | Item | Description |
|---|---|---|
| Bit 7 | - | Unused, Always ‘0’ |
| Bit 6 | - | Unused, Always ‘0’ |
| Bit 5 | Overload Error(default) | Detect persistent load that exceeds maximum output |
| Bit 4 | Electrical Shock Error(default) | Detect electric shock on the circuit or insufficient power to operate the motor |
| Bit 3 | Motor Encoder Error | Detect malfunction of the motor encoder |
| Bit 2 | OverHeating Error(default) | Detect internal temperature exceeds the configured operating temperature |
| Bit 1 | - | Unused, Always ‘0’ |
| Bit 0 | Input Voltage Error | Detect input voltage exceeds the configured operating voltage |
Note
If Shutdown occurs, use below method to reboot Dynamixels.
- H/W REBOOT : Turn off the power and turn on again
- S/W REBOOT : Transmit REBOOT Instruction (For more details, please refer to the [Reboot] section of Protocol e-Manual.)
If Shutdown occurs, LED will flicker every second.(Firmware v41 or above)
Velocity PI Gain(76, 78)
These values indicate Gains of Velocity Control Mode. Gains of DYNAMIXEL’s internal controller can be calculated from Gains of the Control Table as shown below. The constant in each equations include sampling time. Velocity P Gain of DYNAMIXEL’s internal controller is abbreviated to KVP and that of the Control Table is abbreviated to KVP(TBL).
| Controller Gain | Conversion Equations | Range | Description | |
|---|---|---|---|---|
| Velocity I Gain(76) | KVI | KVI = KVI(TBL) / 65,536 | 0 ~ 16,383 | I Gain |
| Velocity P Gain(78) | KVP | KVP = KVP(TBL) / 128 | 0 ~ 16,383 | P Gain |
Below figure is a block diagram describing the velocity controller in Velocity Control Mode. When the instruction transmitted from the user is received by DYNAMIXEL, it takes following steps until driving the horn.
- An Instruction from the user is transmitted via DYNAMIXEL bus, then registered to Goal Velocity(104).
- Goal Velocity(104) is converted to target velocity trajectory by Profile Acceleration(108).
- The target velocity trajectory is stored at Velocity Trajectory(136).
- PI controller calculates PWM output for the motor based on the target velocity trajectory.
- Goal PWM(100) sets a limit on the calculated PWM output and decides the final PWM value.
- The final PWM value is applied to the motor through an Inverter, and the horn of DYNAMIXEL is driven.
- Results are stored at Present Position(132), Present Velocity(128), Present PWM(124) and Present Current(126).
Note
Ka stands for Anti-windup Gain and ‘β’ is a conversion coefficient of position and velocity that cannot be modified by users. For more details about the PID controller, please refer to the PID Controller at wikipedia.
Position PID Gain(80, 82, 84), Feedforward 1st/2nd Gains(88, 90)
These Gains are used in Position Control Mode and Extended Position Control Mode. Gains of Dynamixel’s internal controller can be calculated from Gains of the Control Table as shown below. The constant in each equations include sampling time. Position P Gain of Dynamixel’s internal controller is abbreviated to KPP and that of the Control Table is abbreviated to KPP(TBL).
| Controller Gain | Conversion Equations | Range | Description | |
|---|---|---|---|---|
| Position D Gain(80) | KPD | KPD = KPD(TBL) / 16 | 0 ~ 16,383 | D Gain |
| Position I Gain(82) | KPI | KPI = KPI(TBL) / 65,536 | 0 ~ 16,383 | I Gain |
| Position P Gain(84) | KPP | KPP = KPP(TBL) / 128 | 0 ~ 16,383 | P Gain |
| Feedforward 2nd Gain(88) | KFF2nd | KFF2nd(TBL) / 4 | 0 ~ 16,383 | Feedforward Acceleration Gain |
| Feedforward 1st Gain(90) | KFF1st | KFF1st(TBL) / 4 | 0 ~ 16,383 | Feedforward Velocity Gain |
Below figure is a block diagram describing the position controller in Position Control Mode and Extended Position Control Mode. When the instruction from the user is received by Dynamixel, it takes following steps until driving the horn.
- An Instruction from the user is transmitted via Dynamixel bus, then registered to Goal Position(116).
- Goal Position(116) is converted to target position trajectory and target velocity trajectory by Profile Velocity(112) and Profile Acceleration(108).
- The target position trajectory and target velocity trajectory is stored at Position Trajectory(140) and Velocity Trajectory(136) respectively.
- Feedforward and PID controller calculate PWM output for the motor based on target trajectories.
- Goal PWM(100) sets a limit on the calculated PWM output and decides the final PWM value.
- The final PWM value is applied to the motor through an Inverter, and the horn of Dynamixel is driven.
- Results are stored at Present Position(132), Present Velocity(128), Present PWM(124) and Present Current(126).
Note
In case of PWM Control Mode, both PID controller and Feedforward controller are deactivated while Goal PWM(100) value is directly controlling the motor through an Inverter. In this manner, users can directly control the supplying voltage to the motor.
Note
Ka is an Anti-windup Gain that cannot be modified by users.
Below figure is a block diagram describing the current-based position controller in Current-based Position Control Mode. As Current-based Position Control Mode is quite similar to Position Control Mode, differences will be focused in the following steps. The differences are highlighted with a green marker in the block diagram as well.
- Feedforward and PID controller calculates target current based on target trajectory.
- Goal Current(102) decides the final target current by setting a limit on the calculated target current.
- Current controller calculates PWM output for the motor based on the final target current.
- Goal PWM(100) sets a limit on the calculated PWM output and decides the final PWM value.
- The final PWM value is applied to the motor through an Inverter, and the horn of DYNAMIXEL is driven.
- Results are stored at Present Position(132), Present Velocity(128), Present PWM(124) and Present Current(126).
Note
Ka is an Anti-windup Gain that cannot be modified by users. For more details about the PID controller and Feedforward controller, please refer to the PID Controller and Feed Forward.
Bus Watchdog(98)
Bus Watchdog (98) is available from firmware v38. It is a safety device (Fail-safe) that stops the DYNAMIXEL if the communication between the controller and DYNAMIXEL communication (RS485, TTL) is disconnected due to an unspecified error. Communication is defined as all the Instruction Packet in the DYNAMIXEL Protocol.
| Values | Description | |
|---|---|---|
| Unit | 20[ms] | - |
| Range | 0 | Deactivate Bus Watchdog Function, Clear Bus Watchdog Error |
| Range | 1 ~ 127 | Activate Bus Watchdog |
| Range | -1 | Bus Watchdog Error Status |
The Bus Watchdog function monitors the communication interval (time) between the controller and DYNAMIXEL when Torque Enable (64) is ‘1’. If the measured communication interval (time) is larger than Bus Watchdog (98), the DYNAMIXEL will stop. Bus Watchdog (98) will be changed to ‘-1’ (Bus Watchdog Error). If the Bus Watchdog Error screen appears, the Goal Value (Goal PWM(100), Goal Current(102), Goal Velocity(104), Goal Position(116)) will be changed to read-only-access. Therefore, when a new value is written to the Goal Value, a Range Error will be returned via the Status packet. If the value of Bus Watchdog (98) is changed to ‘0’, Bus Watchdog Error will be cleared.
Note
For details of Range Error, please refer to the protocol of the e-Manual.
The following are examples of the operation of the Bus Watchdog function.
- After setting the operating mode (11) to speed control mode, change the Torque Enable (64) to ‘1’.
- If ‘50’ is written in the Goal Velocity (104), the DYNAMIXEL will rotate in CCW direction.
- Change the value of Bus Watchdog (98) to ‘100’ (2,000 [ms]). (Activate Bus Watchdog Function)
- If no instruction packet is received for 2,000 [ms], the DYNAMIXEL will stop. When it stops, the Profile Acceleration (108) and Profile Velocity (112) are applied as ‘0’.
- The value of Bus Watchdog (98) changes to ‘-1’ (Bus Watchdog Error). At this time, the access to the Goal Value will be changed to read-only.
- If ‘150’ is written to the Goal Velocity (104), Range Error will be returned via Status Packet.
- If the value of Bus Watchdog (98) is changed to ‘0’, Bus Watchdog Error will be cleared.
- If “150” is written in the Goal Velocity (104), the DYNAMIXEL will rotate in CCW direction.
Goal PWM(100)
In case of PWM Control Mode, both PID controller and Feedforward controller are deactivated while Goal PWM(100) value is directly controlling the motor through an Inverter. In other control modes, this value is used to limit PWM value. This value cannot exceed PWM Limit(36). Please refer to the Gain section in order to see how Goal PWM(100) affects to different control modes.
| Range | Description |
|---|---|
| -PWM Limit(36) ~ PWM Limit(36) | Initial Value of PWM Limit(36) : ‘885’ |
Goal Current(102)
In case of Torque Control Mode, Goal Current(102) can be used to set a target current. This value sets a limit to current in Current-based Position Control mode. This value cannot exceed Current Limit(38).
| Unit | Value Range |
|---|---|
| about 1.34[mA] | -Current Limit(38) ~ Current Limit(38) |
Note
Applying high current to the motor for long period of time might damage the motor.
Goal Velocity(104)
In case of Velocity Control Mode, Goal Velocity(104) can be used to set a target velocity. This value cannot exceed Velocity Limit(44). For now, Goal Velocity(104) is used for target velocity, but this value is not used to limit the velocity.
| Unit | Value Range |
|---|---|
| 0.229 rpm | -Velocity Limit(44) ~ Velocity Limit(44) |
Note
The maximum velocity and maximum torque of DYNAMIXEL is affected by supplying voltage. Therefore, if supplying voltage changes, so does the maximum velocity. This manual complies with recommended supply voltage(12[V]).
Note
If Profile Acceleration(108) and Goal Velocity(104) are modified simultaneously, modified Profile Acceleration(108) will be used to process Goal Velocity(104).
Profile Acceleration(108)
The acceleration of Profile can be set with this value. Profile Acceleration(108) can be used in all control modes except Torque Control Mode. Profile Acceleration(108) cannot exceed Acceleration Limit(40). For more details, please refer to the Profile Velocity(112).
| Unit | Value Range | Description |
|---|---|---|
| 214.577 Rev/min2 | 0 ~ Acceleration Limit(40) | ‘0’ stands for an infinite acceleration |
Profile Velocity(112)
The Maximum velocity of Profile can be set with this value.
Profile Velocity(112) can be used in all control modes except Torque Control Mode and Velocity Control Mode.
Profile Velocity(112) cannot exceed Velocity Limit(44).
Velocity Control Mode only uses Profile Acceleration(108) instead of Profile Velocity(112).
| Unit | Value Range | Description |
|---|---|---|
| 0.229 rpm | 0 ~ Velocity Limit(44) | ‘0’ stands for an infinite velocity |
The Profile is an acceleration/deceleration control method to reduce vibration, noise and load of the motor by controlling dramatically changing velocity and acceleration.
It is also called Velocity Profile as it controls acceleration and deceleration based on velocity.
DYNAMIXEL provides 4 different types of Profile.
The following explains 4 Profiles and how to select them.
Profiles are usually selected by a combination of Profile Velocity(112) and Profile Acceleration(108).
Triangular and Trapezoidal Profiles exceptionally consider total travel distance(ΔPos, the distance difference between target position and current position) as an additional factor.
For convenience, Profile Velocity(112) is abbreviated to VPRFL and Profile Acceleration(108) is abbreviated to APRFL.
‘X’ stands for “Don’t Care” case.
When given Goal Position(116), Dynamixel’s profile creates target velocity trajectory based on current velocity(initial velocity of the Profile).
When Dynamixel receives updated target position from a new Goal Position(116) while it is moving toward the previous Goal Position(116), velocity smoothly varies for the new target velocity trajectory.
Maintaining velocity continuity while updating target velocity trajectory is called Velocity Override.
For a simple calculation, let’s assume that the initial velocity of the Profile is ‘0’.
The following explains how Profile processes Goal Position(116) instruction in Position Control mode, Extended Position Control Mode, Current-based Position Control Mode.
- An Instruction from the user is transmitted via Dynamixel bus, then registered to Goal Position(116).
- Acceleration time(t1) is calculated from Profile Velocity(112) and Profile Acceleration(108).
- Types of Profile is decided based on Profile Velocity(112), Profile Acceleration(108) and total travel distance(ΔPos, the distance difference between target position and current position).
- Selected Profile type is stored at Moving Status(123).(Refer to the Moving Status(123))
- Dynamixel is driven by the calculated target trajectory from Profile.
- Target velocity trajectory and target position trajectory from Profile are stored at Velocity Trajectory(136) and Position Trajectory(140) respectively.
- VPRFL_TRI of ③ and Travel time(t3) to reach Goal Position(116) is calculated as below.
| Condition | Types of Profile |
|---|---|
| VPRFL(112) = 0 | Profile not used (Step Instruction) |
| (VPRFL(112) ≠ 0) & (APRF(108) = 0) | Rectangular Profile |
| (VPRFL(112) ≠ 0) & (APRF(108) ≠ 0) & (VPRFL_TRI ≤ VPRFL(112)) | Triangular Profile |
| (VPRFL(112) ≠ 0) & (APRF(108) ≠ 0) & (VPRFL_TRI ＞ VPRFL(112)) | Trapezoidal Profile |
Note
Dynamixel supports Jerk control in order to minimize dramatic change of acceleration. Therefore, actual travel time by the target trajectory of Profile could be longer than t3(t4 of above figure).
Note
Velocity Control Mode only uses Profile Acceleration(108). Step and Trapezoidal Profiles are supported. Velocity Override and Jerk control are supported as well. Acceleration time(t1) can be calculated as below equation.
t1 = 64 * {Goal Velocity(104) / Profile Acceleration(108)}
Goal Position(116)
Target position can be set with Goal Position(116). From the front view of Dynamixels, CCW is an increasing direction whereas CW is a decreasing direction. The way to reaching Goal Position(116) is differ by 4 Profiles provided by Dynamixels. Please refer to the Profile Velocity(112) for more details.
| Mode | Values | Description |
|---|---|---|
| Position Control Mode | Min Position Limit(52) ~ Max Position Limit(48) | Initial Value : 0 ~ 4,095 |
| Extended Position Control Mode | -1,048,575 ~ 1,048,575 | -256[rev] ~ 256[rev] |
| Current-based Position Control Mode | -1,048,575 ~ 1,048,575 | -256[rev] ~ 256[rev] |
| Degree Conversion Constant | Description |
|---|---|
| 0.088°/Value | 1[rev] : 0 ~ 4,095 |
Note
If Profile Acceleration(108), Profile Velocity(112) and Goal Position(116) are modified simultaneously, Goal Position(116) is processed based on updated Profile Acceleration(108) and Profile Velocity(112).
Realtime Tick(120)
This value indicates Dynamixel’s time.
| Unit | Value Range | Description |
|---|---|---|
| 1 ms | 0 ~ 32,767 | The value resets to ‘0’ when it exceeds 32,767 |
Moving(122)
This value indicates whether Dynamixel is in motion or not. If absolute value of Present Velocity(128) is greater than Moving Threshold(24), Moving(122) is set to ‘1’. Otherwise, it will be cleared to ‘0’. However, this value will always be set to ‘1’ regardless of Present Velocity(128) while Profile is in progress with Goal Position(116) instruction.
| Value | Description |
|---|---|
| 0 | Movement is not detected |
| 1 | Movement is detected, or Profile is in progress(Goal Position(116) instruction is being processed) |
Moving Status(123)
This value provides additional information about the movement. Following Error Bit(0x08) and In-Position Bit(0x01) only work with Position Control Mode, Extended Position Control Mode, Current-based Position Control Mode.
| Details | Description | ||
|---|---|---|---|
| Bit 7 | 0x80 | - | Unused |
| Bit 6 | 0x40 | - | Unused |
| Bit 5 ~ Bit 4 |
0x30 | Profile Type(0x30) Profile Type(0x20) Profile Type(0x10) Profile Type(0x00) |
Trapezoidal Velocity Profile Triangular Velocity Profile Rectangular Velocity Profile Profile is not used |
| Bit 3 | 0x08 | Following Error | Dynamixel fails to reach target position trajectory |
| Bit 2 | 0x04 | - | Unused |
| Bit 1 | 0x02 | Profile Ongoing | Profile is in progress with Goal Position(116) instruction |
| Bit 0 | 0x01 | In-Position | Dynamixel is reached to target position |
Present PWM(124)
This value indicates current PWM. For more details, please refer to the Goal PWM(100).
Present Current(126)
This value indicates current Current. For more details, please refer to the Goal Current(102).
Present Velocity(128)
This value indicates current Velocity. For more details, please refer to the Goal Velocity(104)](#goal-velocity).
Present Position(132)
This value indicates present Position. For more details, please refer to the Goal Position(116).
Note
Present Position(132) represents 4 byte continuous range(-2,147,483,648 ~ 2,147,483,647) when Torque is turned off regardless of Operating Mode(11). However, Present Position(132) will be reset in those cases:
- Present Position(132) is reset with the value within 1 rev (0 ~ 4,095) when Operating Mode(11) is changed to Position Control Mode.
- Present Position(132) is reset with the value within 1 rev (0 ~ 4,095) when Torque is turned on in Position Control Mode.
Reset Present Position(132) value can be affected by Homing Offset(20).
Velocity Trajectory(136)
This is a target velocity trajectory created by Profile. Operating method can be changed based on control mode. For more details, please refer to the Profile Velocity(112).
- Velocity Control Mode : When Profile reaches to the endpoint, Velocity Trajectory(136) becomes equal to Goal Velocity(104).
- Position Control Mode, Extended Position Control Mode, Current-based Position Control Mode : Velocity Trajectory is used to create Position Trajectory(140). When Profile reaches to an endpoint, Velocity Trajectory(136) is cleared to ‘0’.
Position Trajectory(140)
This is a target position trajectory created by Profile. This value is only used in Position Control Mode, Extended Position Control Mode and Current-based Position Control Mode. For more details, please refer to the Profile Velocity(112).
Present Input Voltage(144)
This value indicates present voltage that is being supplied. For more details, please refer to the Max/Min Voltage Limit(32, 34).
Present Temperature(146)
This value indicates internal temperature of Dynamixel. For more details, please refer to the Temperature Limit(31).
Indirect Address, Indirect Data
Indirect Address and Indirect Data are useful when accessing two remote addresses in the Control Table as sequential addresses. Sequential addresses increase Instruction Packet efficiency. Addresses that can be defined as Indirect Address is limited to RAM area(Address 64 ~ 661). If specific address is allocated to Indirect Address, Indirect Address inherits features and properties of the Data from the specific Address. Property includes Size(Byte length), value range, and Access property(Read Only, Read/Write). For instance, allocating 65(Address of LED) to Indirect Address 1(168), Indirect Data 1(224) can perform exactly same as LED(65).
Example 1
Allocating Size 1 byte LED(65) to Indirect Data 1(224).
- Indirect Address 1(168) : change the value to ‘65’ which is the address of LED.
- Set Indirect Data 1(224) to ‘1’ : LED(65) also becomes ‘1’ and LED is turned on.
- Set Indirect Data 1(224) to ‘0’ : LED(65) also becomes ‘0’ and LED is turned off.
Example 2
Allocating Size 4 byte Goal Position(116) to Indirect Data 2(225), 4 sequential bytes have to be allocated.
- Indirect Address 2(170) : change the value to ‘116’ which is the first address of Goal Position.
- Indirect Address 3(172) : change the value to ‘117’ which is the second address of Goal Position.
- Indirect Address 4(174) : change the value to ‘118’ which is the third address of Goal Position.
- Indirect Address 5(176) : change the value to ‘119’ which is the fourth address of Goal Position.
- Set 4 byte value ‘1,024’ to Indirect Data 2 : Goal Position(116) also becomes ‘1024’ and Dynamixel moves.
| Indirect Address Range | Description |
|---|---|
| 64 ~ 661 | EEPROM address can’t be assigned to Indirect Address |
Note
In order to allocate Data in the Control Table longer than 2[byte] to Indirect Address, all address must be allocated to Indirect Address like the above Example 2.
Note
Indirect Address 29 ~ 56 and Indirect Data 29 ~ 56 can only be accessed with Protocol 2.0.
How to Assemble
Wiring through Back Case
Caution
Dynamixel X-Series cable assembly through hollow case
- Organize the entangled cable before assembling the back case.
- Do not assemble the back case with entangled cable. The entangled cable can be squashed by the case and cause communication error.
Option Frame Assembly
Maintenance
Horn and Gear Replacement
The horn is installed on the front wheel gear serration of the DYNAMIXEL whereas the bearing set is installed on the back.
Installing the Horn
When installing horn, carefully match the align markings on the horn and the wheel gear serration.
Once alignment is properly done, gently push the center of the horn toward the actuator.
Gear Replacement
You may need to replace the internal gear set when gears are worn out or damaged. Please follow the gear replacement instruction video.
Reference
Note
Compatibility Guide
Quick Start
Prerequisites
- Power supply to DYNAMIXEL(12V SMPS / Controllers)
- PC with Windows or OSX
- Connection between PC and DYNAMIXEL (Micro USB cable)
R+ Manager 2.0 Install
In order to change settings of DYNAMIXEL, R+ Manager 2.0 must be installed on your system.
You can also use Dynamixel SDK or Dynamixel Workbench.
Connector Information
| Item | TTL | RS-485 |
|---|---|---|
| Pinout | 1 GND2 VDD3 DATA |
1 GND2 VDD3 DATA+4 DATA- |
| Diagram | ||
| Housing | JST EHR-03 | JST EHR-04 |
| PCB Header | JST B3B-EH-A |
JST B4B-EH-A |
| Crimp Terminal | JST SHE-001T-P0.6 | JST SHE-001T-P0.6 |
| Wire Gauge | 21 AWG | 21 AWG |
Drawings
Download
X_430_std_ref.pdf


Preparation time
30 mins to 1 hour
Cooking time
1 to 2 hours
Serves
Serves 8-10
Raymond Blanc shows you an easy way to cook a show-stopping roast turkey for your all-important Christmas dinner.
Remove the turkey from the fridge and bring to room temperature - this will take at least an hour.
When you are ready to cook, preheat the oven to 230C/220C fan/Gas 8.
Heat the rapeseed oil in a large, heavy-based roasting tray on the stove top. Add the chopped turkey wings and neck and fry for 8-10 minutes, turning the pieces over every 2-3 minutes, or until evenly browned all over.
Meanwhile, in a small bowl, soften the butter with the back of a dessert spoon, then season with the salt and freshly ground white pepper. Using a pastry brush or your hands, smear the seasoned butter all over the turkey. Add any remaining butter to the roasting tray once the chopped wings and neck have browned.
Place the turkey on top of the wing and neck pieces, then roast in the oven for 30 minutes.
Remove the turkey from the oven and baste all over with the cooking juices.
Reduce the oven temperature to 160C/150C fan/Gas 3.
Pour the water into the roasting tray, then return the turkey to the oven and continue to cook for a further 1 hour, basting the bird with the cooking juices every 20 minutes (do this quickly to prevent the heat escaping from the oven).
At the end of the cooking time, test that the turkey is cooked through by inserting a skewer or roasting fork into the thickest part of its thigh; if the juices run clear, the meat is cooked. Alternatively, use a meat thermometer; if cooked, the temperature should be 74°C or above. If the turkey is not fully cooked, return it to the oven for a further 20 minutes or until the juices run clear.
Remove the turkey from the oven and transfer the bird to a large, deep-sided tray, reserving the roasting tray the turkey was cooked in along with the cooking juices. Set the turkey aside to rest for a minimum of 30 minutes and up to 1½ hours.
While the turkey is resting, cook your roast potatoes and vegetable dishes.
When you’re almost ready to serve the meal, return the roasting tray used to cook the turkey to the stove top. Bring the cooking juices to the boil over a medium heat, scraping up any burned bits from the bottom of the tray using a wooden spoon.
Collect the juices released by the turkey as it was resting and add them to the gravy. Season, to taste, with salt and freshly ground black pepper, if needed.
Reduce the heat until the gravy is simmering, then stir in the dissolved arrowroot and cook until the gravy has thickened.
Strain the gravy through a fine sieve into a warmed jug. Keep warm.
To serve, bring the turkey to the table and carve into slices. Serve with the roast potatoes and vegetables. Pour over the gravy.


--- layout: default title: "4*101: Page not found" permalink: 404.html ---
Oops! Much like the limit of (-1)^n, that page does not exists! Head back home to return to safety.


Setup
Follow the instructions below to setup and configure your SMARS Robot.
Step 1 - Check wiring
Plug in each servo to the PCA9685 driver board. The correct wiring sequence is as follows:
Press the Check button below to test each servo is responding (it will wiggle when pressed).
| Channel 0 | LEFT_LEG_FRONT | |
| Channel 1 | LEFT_FOOT_FRONT | |
| Channel 2 | LEFT_LEG_BACK | |
| Channel 3 | LEFT_FOOT_BACK | |
| Channel 4 | RIGHT_LEG_BACK | |
| Channel 5 | RIGHT_FOOT_BACK | |
| Channel 6 | RIGHT_LEG_FRONT | |
| Channel 7 | RIGHT_FOOT_FRONT |
Step 2
Each servo has a range of motion between 0º and
180º degrees. However the each robot leg only needs between 0 and
90 degrees of rotation.
The servos are oriented differently for each leg, so the degrees
of rotation for each needs to be understood and set correctly in
the code.


About Me
I have been working with HTML since 2010 when I was unexpectedly volunteered to build a website for a club. At the time I knew nothing about web design, so I set about learning everything I could about it. The more I learned, the more I loved it, and I went on to study web design in college. In May 2013, I graduated from Laramie County Community College with an Associate of Applied Sciences' Degree in Computer Information Systems with certificates in web design, computer security, and PC repair. In May 2019, I graduated from Arizona State University with a Bachelor of Applied Science Degree in Internet and Web Development.
With regards to the writing, I've created stories in one form or another since I was 11, and I later branched out into nonfiction/opinion/reviews. My articles have been featured on MoviePilot, CultBox, and WhatCulture.


|
iSensor-SPI-Buffer
1.15
Firmware for the iSensor-SPI-Buffer board to enable full throughput buffered data capture on Analog Devices IMUs
|
Implementation for for iSensor-SPI-Buffer timer module. Covers microsecond timer and PPS timer. More...
Functions | |
| static void | InitTIM2 (uint32_t timerfreq) |
| Enables IMU sample timestamp timer. More... | |
| static void | InitTIM8 () |
| Enables TIM8 as general 1MHz timer. | |
| static void | ConfigurePPSPins (uint32_t enable) |
| Configure PPS timer based on DIO_INPUT_CONFIG value. More... | |
| static void | DWT_Init () |
| Init DWT peripheral. More... | |
| void | Timer_Init () |
| Initialize all timers for operation. More... | |
| void | Timer_Check_PPS_Unlock () |
| Check if the PPS signal is unlocked (greater than 1100ms since last PPS strobe) More... | |
| void | Timer_Sleep_Microseconds (uint32_t microseconds) |
| Blocking sleep function call. More... | |
| uint32_t | Timer_Get_Microsecond_Timestamp () |
| Gets the current 32-bit value from the IMU sample timestamp timer. More... | |
| uint32_t | Timer_Get_PPS_Timestamp () |
| Gets the current 32-bit value from PPS timestamp registers. More... | |
| void | Timer_Clear_Microsecond_Timer () |
| Reset TIM2 counter to 0. More... | |
| void | Timer_Enable_PPS () |
| Enable PPS input for time stamp synchronization (improved long term stability over 20ppm crystal). More... | |
| void | Timer_Disable_PPS () |
| Disable PPS timer functionality. More... | |
| void | Timer_Increment_PPS_Time () |
| Increment PPS timestamp by 1. More... | |
Variables | |
| uint32_t | g_PPSInterruptMask = 0 |
| static TIM_HandleTypeDef | htim2 |
| static TIM_HandleTypeDef | htim8 |
| static uint32_t | PPS_TickCount |
| static uint32_t | PPS_MaxTickCount |
Implementation for for iSensor-SPI-Buffer timer module. Covers microsecond timer and PPS timer.
Copyright (c) Analog Devices Inc, 2020 All Rights Reserved.
|
static |
Configure PPS timer based on DIO_INPUT_CONFIG value.
| enable | Bool flagging if PPS functionality is being enabled or disabled |
This function sets up the PPS input pin, as well as the expected "PPS" period.
|
static |
Init DWT peripheral.
This peripheral is used to count microseconds for the timer module.
|
static |
Enables IMU sample timestamp timer.
| timerfreq | The desired timer freq (in Hz) |
This function should be called as part of the buffered data acquisition startup process. The enabled timer is TIM2 (32 bit)
| void Timer_Check_PPS_Unlock | ( | ) |
Check if the PPS signal is unlocked (greater than 1100ms since last PPS strobe)
This function should be periodically called as part of the firmware housekeeping process
| void Timer_Clear_Microsecond_Timer | ( | ) |
Reset TIM2 counter to 0.
| void Timer_Disable_PPS | ( | ) |
Disable PPS timer functionality.
| void Timer_Enable_PPS | ( | ) |
Enable PPS input for time stamp synchronization (improved long term stability over 20ppm crystal).
The PPS input can be on any of the DIOx_Slave pins (host processor the iSensor-SPI-Buffer). The selected pin is configured by the PPS_SELECT field in the DIO_INPUT_CONFIG register. The trigger polarity for the PPS signal is configured by the PPS_POLARITY field in the DIO_INPUT_CONFIG register.
Pins:
DIO1: PB4 -> EXTI4 interrupt DIO2: PB8 -> EXTI9_5 interrupt, mask (1 << 8) DIO3: PC7 -> EXTI9_5 interrupt, mask (1 << 7) DIO4: PA8 -> EXTI9_5 interrupt, mask (1 << 8)
| uint32_t Timer_Get_Microsecond_Timestamp | ( | ) |
Gets the current 32-bit value from the IMU sample timestamp timer.
| uint32_t Timer_Get_PPS_Timestamp | ( | ) |
Gets the current 32-bit value from PPS timestamp registers.
| void Timer_Increment_PPS_Time | ( | ) |
Increment PPS timestamp by 1.
This function should be called whenever a PPS interrupt is generated. It handles PPS tick count incrementation, and resetting the microsecond timestamp every time one second has elapsed.
| void Timer_Init | ( | ) |
Initialize all timers for operation.
Timer 2 is used as a 1MHz timer for the timestamp measurements Timer 8 is used as a timeout timer, also at 1MHz
The DWT timer is used for a polling based timer
| void Timer_Sleep_Microseconds | ( | uint32_t | microseconds | ) |
Blocking sleep function call.
| microseconds | The number of microseconds to sleep |
This function uses TIM6 to perform delay.
| uint32_t g_PPSInterruptMask = 0 |
PPS interrupt source. Global scope
|
static |
TIM2 handle
|
static |
TIM8 handle for init
|
static |
Number of PPS ticks per sec
|
static |
Track number of "PPS" ticks which have occurred in last second


HOT RESTAURANT
Make Your Reservation
View Tables
Table Reservation
Name:
Phone Number
Email:
Unique ID:
Submit
API Tables
|
API Waitlist


Lutron Grafik Eye
Connecting to a Grafik Eye system
All Grafik Eye interfaces are supported: GRX-RS232, GRX-CI-RS232, and GRX-CI-NWK-E. Connection to the RS232 interfaces can be done directly using a 3-wire RS232 cable, or via an Ethernet to RS232 interface.
If using an Ethernet to RS232 interface, set it up for 9600 bps, no parity, no flow control, 1 stop bit.
Connection parameters are TCP port and IP address in case of using a network interface.
The password is only needed if using a direct network connection to GRX-CI-NWK-E. The default password for this interface is ‘nwk’.
Important note: Make sure that you enable scene status feedback and raw feedback on the Lutron interfaces. This is done by setting the DIP switches 6 and 7 to ON on the interface itself.
Resources
Resource types supported:
- Dimmer, addressed as
unit:zone
(unit 1 to 8, zone 1 to 8) - Shade, addressed as
unit:zone
- Scene button, addressed as
unit:scene
(unit 1 to 8, scene 0 to 9 and A to G with G corresponding to OFF)


Hi there! Thought you would like to know that {{ mod.user.username }} told us that version {{ latest.friendly_version }} of {{ mod.name }} works great with {{ mod.game.name }} {{ latest.gameversion.friendly_version }}.
If you are already up-to-date, you don't need to do anything. Otherwise, you can grab the latest version here:
{{mod.name}} {{latest.friendly_version}} If you'd prefer us not to email you about this mod, you can hit "Unfollow" on this mod's page and you won't get them any more.


See: Description
| Interface | Description |
|---|---|
| AgreementMethod |
XMLObject representing XML Encryption, version 20021210, AgreementMethod element.
|
| AlgorithmIdentifierType |
XMLObject representing XML Encryption, version 1.1, AlgorithmIdentifierType complex type.
|
| CarriedKeyName |
XMLObject representing XML Encryption, version 20021210, CarriedKeyName element.
|
| CipherData |
XMLObject representing XML Encryption, version 20021210, CipherData element.
|
| CipherReference |
XMLObject representing XML Encryption, version 20021210, CipherReference element.
|
| CipherValue |
XMLObject representing XML Encryption, version 20021210, CipherValue element.
|
| DataReference |
XMLObject representing XML Encryption, version 20021210, DataReference element.
|
| DHKeyValue |
XMLObject representing XML Encryption, version 20021210, DHKeyValue element.
|
| EncryptedData |
XMLObject representing XML Encryption, version 20021210, EncryptedData element.
|
| EncryptedKey |
XMLObject representing XML Encryption, version 20021210, EncryptedKey element.
|
| EncryptedType |
XMLObject representing XML Encryption, version 20021210, EncryptedType type.
|
| EncryptionMethod |
XMLObject representing XML Encryption, version 20021210, EncryptionMethod element.
|
| EncryptionProperties |
XMLObject representing XML Encryption, version 20021210, EncryptionProperties element.
|
| EncryptionProperty |
XMLObject representing XML Encryption, version 20021210, EncryptionProperty element.
|
| Generator |
XMLObject representing XML Encryption, version 20021210, Generator element.
|
| KANonce |
XMLObject representing XML Encryption, version 20021210, KA-Nonce element.
|
| KeyReference |
XMLObject representing XML Encryption, version 20021210, KeyReference element.
|
| KeySize |
XMLObject representing XML Encryption, version 20021210, KeySize element.
|
| MGF |
XMLObject representing XML Encryption, version 1.1, MGF element.
|
| OAEPparams |
XMLObject representing XML Encryption, version 20021210, OAEPparams element.
|
| OriginatorKeyInfo |
XMLObject representing XML Encryption, version 20021210, OriginatorKeyInfo element.
|
| P |
XMLObject representing XML Encryption, version 20021210, P element.
|
| Parameters |
XMLObject representing XML Encryption, version 1.1, Parameters element.
|
| PgenCounter |
XMLObject representing XML Encryption, version 20021210, pgenCounter element.
|
| Public |
XMLObject representing XML Encryption, version 20021210, Public element.
|
| Q |
XMLObject representing XML Encryption, version 20021210, Q element.
|
| RecipientKeyInfo |
XMLObject representing XML Encryption, version 20021210, RecipientKeyInfo element.
|
| ReferenceList |
XMLObject representing XML Encryption, version 20021210, ReferenceList element.
|
| ReferenceType |
XMLObject representing XML Encryption, version 20021210, ReferenceType type.
|
| Seed |
XMLObject representing XML Digital Signature, version 20020212, seed element.
|
| Transforms |
XMLObject representing XML Encryption, version 20021210, Transforms element.
|
| XMLEncryptionBuilder<XMLEncryptionType extends org.opensaml.core.xml.XMLObject> |
Builder for XMLObjects from
org.opensaml.xmlsec.encryption . |
Copyright © 1999–2016 Shibboleth Consortium. All rights reserved.


#include "mgos.h"
#include "mgos_arduino_dallas_temp.h"
#include "mgos_arduino_onewire.h"
Go to the source code of this file.
◆ ONE_WIRE_BUS
Definition at line 6 of file main.c.
◆ get_temp_reading_cb()
| void get_temp_reading_cb |
( |
| ) |
|
Get temperature reading from all sensors.
Definition at line 23 of file main.c.
◆ mgos_app_init()
| enum mgos_app_init_result mgos_app_init |
( |
void |
| ) |
|
Intializing function for mongoose os
Definition at line 23 of file main.c.
◆ deviceCount
Definition at line 8 of file main.c.
◆ dt
Definition at line 7 of file main.c.
◆ ow
Definition at line 6 of file main.c.
◆ tempC
Definition at line 9 of file main.c.


---
layout: archive
---
Candidate for House District 29 Events.
Since September's candidate filing, David has been meeting fellow Oregonians in/around District 29 and across Oregon to listen to their concerns, and answer questions. Join him and say hello at any of these events:
Meet David Molina.
Meet & Greet with David Molina | July 11, 2018 @ 5:30pm - 7:00pm | 3505 Pacific Ave, Forest Grove
David Molina’s Campaign Kick-Off | March 28, 2018 @ 6:00 pm | Cornelius
David Molina at Washington County Business Council | March 13, 2018 @ 7:00 am
Washington County Business Council
Promote Oregon Filing Day Party | March 6, 2018 @ 5:00 pm | Salem
David Molina at Dorchester Conference | March 2-3, 2018 | Salem Convention Center, 200 Commercial St SE, Salem
David Molina at 21st Century Veterans First Inaugural | January 26-27, 2018
Western Oregon University, 345 Monmouth Ave N, Monmouth
David Molina at Timberline | January 25, 2018 @ 5:00 pm | 27500 E Timberline Rd, Government Camp
David Molina at Commissioner Bob Terry’s Campaign Kick-Off for Washington County Chair | January 24, 2018 @ 5:30 pm | 5500 NE Moore Ct, Hillsboro
Healthcare Tax Breakfast Forum | December 13, 2018 @ 7:00 am | The Multnomah Athletic Club, 1849 SW Salmon St, Portland
Promote Oregon Christmas Party | December 12, 2017 @ 3:00 pm | Salem
David Molina at Hillsboro Chamber Conectate | December 6, 2017 @ 8:00 am
5193 NE Elam Young Pkwy, Hillsboro
David Molina at Young Republicans | November 26, 2017 @ 6:00 pm | Wilsonville Old Church & Pub | 30340 SW Boones Ferry Rd, Wilsonville
David Molina at We Love America Overpass Wave | November 25, 2017 @ 11:00 am | Nyberg Over I-5
David Molina at Reagan Dinner | November 9, 2018 @ 6:00 pm | 20001 NW Tanasbourne Dr, Hillsboro
David Molina at Oregon GOP Platform Convention | October 26-28, 2017
Riverhouse on the Deschutes | 3065 N Hwy 97, Bend
David Molina at Forest Grove Mayor’s Dinner & Auction | October 21, 2017
Forest Grove Senior Center | 2037 Douglas St, Forest Grove
David Molina at Oregon GOP Candidate Training | September 21, 2017 | Oregon Farm Bureau, 1320 Capitol St SE, Salem
David Molina at Beaverton-Hillsboro Republican Women’s Candidate Dinner | September 21, 2017 | Rock Creek Country Club, 5100 NW Neakahnie Ave, Portland
If you'd like to invite David to your next event, or hosted fundraiser, get in touch at<EMAIL_ADDRESS>Together, we will return District 29 to the people.


zipWith f xs ys = case (xs, ys) of { (a:as, b:bs) -> f a b : zipWith f as bs ; ([], _) -> [] ; (_ ,[]) -> [] }


{% extends 'layout.html' %} {% set page_title = _('Reset Password') %} {% block body %}
{% trans change_url=url_for('users.edit_profile') %}
Your password was reset to {{ new_password }}
. Please
make sure to change it as soon as possible.
{% endtrans %}
{% else %}
In order to reset your password enter either your username or e-mail address.


--- layout: post title: Migration from BlogSpot to GitHub Pages date: '2021-03-21T16:37:00.003-07:00' author: gojimmypi tags: - Blog - Jekyll - Blogspot - find_forks - forkizard - Blogger - GitHub - GitHub Pages modified_time: '2021-03-21T16:37:36.066-07:00' blogger_id: tag:blogger.com,1999:blog-4109066286647243251.post-799628821502140807 blogger_orig_url: https://gojimmypi.blogspot.com/2021/03/migration-from-blogspot-to-github-pages.html ---
As convenient as blogger.com marginally is... I've decided enough is enough with the wonky editing, complete lack of integrated source control, and always that little bit of nagging wonder if one day google will just pull the plug and decommission it.
It was several years ago I tried to migrate to my GitHub Pages site at gojimmypi.github.io. Although I consider myself rather persistent, I ended up giving up at the time due to unreconcilable issues with Jekyll. (which admittedly were not supposed to be supported in Windows, and WSL was still somewhat new).
Fast forward a few years and WOW! My Jekyll install experience was nearly trouble free.
So ok, once Jekyll is working, there's still the tiny little issue of templates. I found one I liked from jekyllthemes.io, specifically the gridster-jekyll-theme. Alas nothing is ever as easy as it is supposed to be. Of course, if it is too easy, it is no fun, eh? So the issue with this particular theme, is not only that it is old, but there are a few quirky things that need to be fixed. There are literally hundreds of forks. Which one might be of interest?
How about looking at which fork has the most likes? Unfortunately, there's no such feature on GutHub, but stackoverflow to the rescue once again. There was only one answer to the question "How to find the best changes from downstream Github forks?" and it didn't sound promising with the comment "It's 3 years old, I can't seem to get it working, but someone could fork it" - but find_forks
does work!
cd /mnt/c/workspace/
git clone https://github.com/elimohl/find_forks.git
cd find_forks
pip3 install tqdm
pip3 install pygithub
./find_forks.py DigitalMindCH/gridster-jekyll-theme
# usage: find_forks.py [-h] [-u USERNAME] [-p [PASSWORD]] [-s SLEEP_INTERVAL] repo_name
0 $ ./find_forks.py DigitalMindCH/gridster-jekyll-theme
95%|| 197/208 [02:23 00:08, 1.37it/s]Forks Stars
https://github.com/pcesar65/renameme 1
https://github.com/tomer-ben-david/techblog 1
https://github.com/cristinafsanz/paintings 1
https://github.com/zirkc/appworms 0
https://github.com/bullwinkle-org/gridster-jekyll-theme 0
https://github.com/jfcorugedo/jfcorugedo.github.io 0
https://github.com/tanaphum/gridster-jekyll-theme 0
https://github.com/librarywon/librarywon.github.io 0
...
There's also brute-force method to call the GitHub API:
{% include code_header.html %}
curl https://api.github.com/repos/DigitalMindCH/gridster-jekyll-theme/forks?sort=watchers
But that's only so useful.
So what about the most changes in a fork? I found forkizard, but nothing happened after the scan. I noticed an open issue and fortunately a PR to fix it! So the one to use is at the trufanov-nok/forkizard fork. I also created my own fork , just in case it ever gets deleted, as this could be really handy again in the future. It works really quite well:
# The source code is in Go. After this operation, 324 MB of additional disk space will be used:
sudo apt-get install golang-go
git clone https://github.com/trufanov-nok/forkizard.git
go build
Run it like this:
{% include code_header.html %}
0 $ ./forkizard "DigitalMindCH/gridster-jekyll-theme"
2021/03/21 13:14:55 208 forks
208 / 208 [============================================================] 100.00% 1m26s
done
/AwarenessOverload/AwarenessOverload +388 -0
/vikasksrivastava/gridster-jekyll-theme +293 -0
/BrunnaRosa/BrunnaRosa +227 -0
/ickc/gridster-jekyll-theme +138 -0
/NNUP/nnup.github.io +92 -0
/cett/cett.github.io +68 -0
/samyak45/Gridster +66 -0
/UntrustableRus/gridster-jekyll-theme +53 -0
/guriosam/ajudamaceio +43 -0
/thiagohersan-jekyll/gridster-jekyll-theme-simple +43 -0
I ended up choosing the ickc/gridster-jekyll-theme with a demo at ickc.github.io/gridster-jekyll-theme (my fork is located here) I have it installed to a subdirectory in my GitHub.io page like this:
cd /mnt/c/workspace/gojimmypi.github.io
# the repo is over 200MB in size!
git clone https://github.com/gojimmypi/gridster-jekyll-theme.git --depth 1
cd gridster-jekyll-theme
bundle install
bundle update github-pages
bundle exec jekyll serve
The author was also kind in digging up the documentation from the wayback machine, and included it as part of the theme
.


by Curtis Edmonds --<EMAIL_ADDRESS>I walked into the second Austin Powers movie prepared to write a scathingly bad review.  I entered the theater totally prepared for a never-ending cycle of potty jokes, sniggering references to body parts, and gags drawn out far enough past their normal life expectancy to make an actuary cry. And I wasn't a bit disappointed.
Most people who liked the first Austin Powers movie won't be disappointed, either. Mike Myers dons the geeky glasses, the dead-weasel hairpiece, the horribly bad bridgework, the fake chestal hair, the frilly lace cravat and the velvet suit to duel Dr. Evil and save the world yet again. Along the way -- and this is the sort of movie where "along the way" matters more than anything else -- Austin mugs, grimaces, shags, cavorts around naked, and generally acts annoying. Alternatively, the movie presents Myers as Dr. Evil, who combines the worst features of Ernst Blofeld and Ed Sullivan. I am not inclined to argue with people who think these characters are funny, and will merely state that this sort of thing ain't my bag, baby.
If the Powers and Evil characters share one trait, it is their mammoth, gargantuan narcissism. The real battle in The Spy Who Shagged Me isn't between the forces of evil and good, it's between Myers's ego and his generosity. This movie could easily have been a Mike Myers extravaganza of self love, with all other comic possibilities squeezed out. Fortunately, though, the forces of good make some inroads here that weren't made in Austin Powers: International Man of Mystery. The Spy Who Shagged Me is a better movie because Myers is a little more willing to share the wealth and spread out the good lines more evenly. This allows the focus to be taken off the Powers/Evil duality occasionally and allows a little bit of genuine humor to sneak in now and then.
Consider the treatment of the female leads in both movies. Elizabeth Hurley was perfectly cast as Austin's sidechick in the first movie (she's the perfect casting choice for every movie she's ever been in) but the spotlight wasn't really ever on Our Liz. Hurley shows up momentarily in The Spy Who Shagged Me and is generously given one of the truly funny lines in the movie -- not much, but one more than she had before.
In comparison, the lovely Heather Graham as CIA agent Felicity Shagwell redeems the entire movie. In a movie season replete with special effects, the sight of Heather Graham in a micro-miniskirt is still the best piece of eye candy around. Felicity is smart, dangerous, absolutely ravishing, and has a way with the sexy one liner. "You're light on your feet," Austin raves as they dance. "I'm pretty light off my feet, too," says the shagadelic Felicity, in a tone calculated to make a man's knees turn to jelly. This is Heather Graham's happening, baby, and it's groovy, man.
Seth Green had a marginal part in the first movie as Scott Evil, but he stole the show with his criticism of his old man's megalomaniacal ways. Green gets a little more time to shine here, imparting a little bit of Generation X common sense to the Sixties silliness. There's still too strong of a strain of whiny brat in his performance, but he's got the adolescent sneer down pat. When Dr. Evil dubs his newest plan to destroy the world "The Alan Parsons Project", Green is there to poke wicked fun; "I can't wait for Project Bananarama."
Unfortunately, the wealth isn't shared all that equally. Rob Lowe, who was so good in Wayne's World, is well-cast as a young Robert Wagner but gets little to do. (One wishes that Wayne Campbell would make a cameo appearance, if only to remind us how babelicious Heather Graham is.) Kristen Johnson disappears in the second reel, which is too bad -- she's got the Natasha Fatale accent down pat.
I thought The Spy Who Shagged Me was quite a bit funnier than the original. Most of the comedy takes place below the waist, but now and again there's a funny bit that provides a respite from the onslaught of bathroom and sex jokes. It's still not that great, though. (The biggest reaction I heard from the audience was when Austin's own Willie Nelson showed up in a cameo.) Your inner fifteen-year-old will be happy to see see The Spy Who Shagged Me, but those looking for more sophisticated humor should stay away and avoid further disappointment.
-- Curtis D. Edmonds<EMAIL_ADDRESS>"First, you show up. Then you see what happens." -- Napoleon Bonaparte
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


Muddha Development notes
Muddha is a content management system that can be morphed to serve different use cases. A single codebase can be used as a blogging engine a booking platform or an ecommerce application. The core application is lightweight with its entire runtime fitting in <1 mb of ram which allows it to be highly spawnable (you can use one muddha each for your customers on a single production dev). Muddha comes with a large number of compiled themes that can be used to give a unique look to each running muddha. It comes integrated with paypal for payments (there may be support for more payment gateways in the future We'll be using kill bill so there will be many payment gateways integrated from the start, and adding new payment gateways would be as simple as writing a plugin with ruby, yes we'll have to learn ruby but it'll be worth it because it solves a huge pain. )ATM it does not handle shipping and taxes but that may change as well in the future.
Google websites
- So I've been looking at google website builder and what they have right now is very clumsy. It is clumsy because it forces the user to arrange elements on the screen and choose from a very limited set of items. There is support for google drive components (forms, sheets, docs etc) but simple things like positioning description etc is off. So it gives me a bit of hope for muddha.
- The kind of website builder we're building would be very different from the one that google has. We'll give the user an ability to choose from a set of predefined themes. We'll let the user to add content on that theme (by allowing him to upload products, or writing descriptions) and that's it. There will be no need to fiddle with the header images, or to drag and drop components at the perfect location. Most of it will be automatic with a few customization options. The idea is that the users does not have any time to dally around with the page. He wants something to be up quickly so that he can start working on his main business (i.e selling stuff)
Technology stack
-- Akshat Jiwan Sharma


--- layout: post title: ! 'BGMS Week #1: Slow start' date: 2013-09-01 21:56:25.000000000 -07:00 categories: - BGMS - Game Development - Java - Ludum Dare - Programming tags: - BGMS - Game Development - Ludum Dare status: publish type: post published: true meta: _edit_last: '1' dsq_thread_id: '1690880982' author: login: siegedog email<EMAIL_ADDRESS>display_name: siegedog first_name: '' last_name: '' ---
Well, here's my first update, with still not much to show. However, I've managed to add some rudimentary libgdx particle system support, as well as adding dynamically spawned enemies. I've also done some internal refactoring to speed up future development.
BGMS stands for Beasts Grant me Strength, by the way.
An actual demo is hopefully on the way.


Elixir Security 101
String.to_atom/1
vs
String.to_existing_atom/1
Ecto
- Strong protections by default
- Problematic functions: Repo.query, Repo.fragment
- Ecto.Changeset.cast <3
- transactions can lead to ACIDRain attacks
Plug
Plug.CSRFProtection
- Compare parameter/token against token in session
- Update token in session before response
- GET requests are not protected
- Protection agains leaking tokens to external domains
Plug.SSL
- check (and update) `conn.scheme`
- redirect from HTTP to HTTPS
- set HSTS header on HTTPS
- Be careful! HSTS will lock in HTTPS for the current domain!
Plug.Upload and Plug.Parsers
Phoenix
- Phoenix.Controller.protect_from_forgery
- Phoenix.Controller.put_secure_browser_headers
- Phoenix.Endpoint `force_ssl` option
- `filter_parameters` Phoenix.Logger option
- Remember to validate inputs on both sides!
Big thanks!
- Bram Verburg
- blog.voltone.net
- @voltonez
Thank you & questions
Lukasz Skotarek
@dreat_ on Twitter
dreat on Elixir/3cityIt Slack
mail: contact@dreat.info


mystateEngine.onActivate()
This event is generated when the state engine is activated (someone has called the stateEngine's activate() method). This event is broadcast before the state network is first activated. Developers are expected to override this method to provide initialization. The default onActivate event only sends a message to the Output window.


perf
`Prev `__
P
`Next `__
--------------
**perf**: /perf/, n.
Syn. `*chad* <../C/chad.html>`__ (sense 1). The term perfory
/per´f@-ree/ is also heard. The term `*perf* `__ may also
refer to the perforations themselves, rather than the chad they produce
when torn (philatelists use it this way).
--------------
+------------------------------+----------------------------+------------------------------------------------+
| `Prev `__ | `Up <../P.html>`__ | `Next `__ |
+------------------------------+----------------------------+------------------------------------------------+
| percent-S | `Home <../index.html>`__ | perfect programmer syndrome |
+------------------------------+----------------------------+------------------------------------------------+


Elemental v0.1
Written by Serge Meunier
www.sergemeunier.com
Elemental is but a humble period table. Hovering over the element will bring up more info.
Have fun!


The Screencasts
If you have a suggestion for a screencast you'd like to see - please open an issue here.
-
{% for post in site.posts %}
- {{ post.title }} ▸ {% endfor %}
If you have a suggestion for a screencast you'd like to see - please open an issue here.


Library example_mybaby
Back to Coq Main Page
Let us consider a song written in 1924 that later became
one of the standard songs, sung by multiple jazz artists
at different times.
Everybody Loves My Baby (But My Baby Don't Love Nobody But Me);
music by Spencer Williams, lyric by
Jack Palmer
The example was taken from this logic textbook:
Logic
as a Tool by Valentin Goranko, 2016.
The lyrics of this song mentions
humans MyBaby and Me satisfying hypotheses:
If L(x,y) is the predicate to denote that
x loves y, then for every human x: L(x,MyBaby).
In the meantime: for every human x, as long as
x≠Me, then ~L(MyBaby,x)
(namely, MyBaby does not love x).
Let us prove that in this case MyBaby and Me
is the same person.
Let's start with a human-readable proof:
We will need the contrapositive tautology
MyBaby: Jazz Song Analyzed
Human-oriented proof
- ItemA
- Every human loves MyBaby
- ItemB
- On the other hand MyBaby does not love anyone except Me
- Define the set of all humans: HUM.
- Denote elements MyBaby and Me in this set.
- Assume that MyBaby≠Me.
- Substitute in the property (ItemB): x = MyBaby
- Because of the assumption MyBaby≠Me, MyBaby does not love MyBaby, since MyBaby only loves Me
- On the other hand, by assumption (ItemA): everybody must love MyBaby.
- By (ItemA) MyBaby also loves MyBaby.
- This is a contradiction, since L(MyBaby,MyBaby) should be either true or false.
Machine-verified proof
Axiom ContraPos : forall p q: Prop, (p -> q) <-> (~q -> ~p).
We assume two hypotheses (ItemA, ItemB) and
prove Lemma that MyBaby and Me
are equal.
Section mybaby.
Here the same proof is formalized with Coq.
HUM is the set of all humans.
Parameter HUM : Type.
Me and MyBaby are humans.
Parameter Me : HUM.
Parameter MyBaby : HUM.
Parameter MyBaby : HUM.
The predicate L(x,y) is true if and only if
x loves y.
Parameter L : HUM*HUM -> Prop.
Hypothesis ItemA: forall x: HUM, L(x,MyBaby).
Hypothesis ItemB: forall x: HUM, ~(x=Me) -> ~(L(MyBaby,x)).
Lemma who_is_mybaby: MyBaby=Me.
Proof.
assert (MyBaby <> Me -> ~L(MyBaby,MyBaby)).
apply ItemB with (x := MyBaby).
assert (L(MyBaby,MyBaby)).
apply ItemA with (x := MyBaby).
clear ItemA ItemB.
elim (ContraPos (L(MyBaby,MyBaby)) (MyBaby = Me)).
intros.
clear H1.
pose (H2 H) as H3.
pose (H3 H0) as H4.
exact H4.
Qed.
End mybaby.
Hypothesis ItemA: forall x: HUM, L(x,MyBaby).
Hypothesis ItemB: forall x: HUM, ~(x=Me) -> ~(L(MyBaby,x)).
Lemma who_is_mybaby: MyBaby=Me.
Proof.
assert (MyBaby <> Me -> ~L(MyBaby,MyBaby)).
apply ItemB with (x := MyBaby).
assert (L(MyBaby,MyBaby)).
apply ItemA with (x := MyBaby).
clear ItemA ItemB.
elim (ContraPos (L(MyBaby,MyBaby)) (MyBaby = Me)).
intros.
clear H1.
pose (H2 H) as H3.
pose (H3 H0) as H4.
exact H4.
Qed.
End mybaby.


WidthResizer
(
colElId
,
handleElId
,
sGroup
)
- Parameters:
-
colElId <string>
ID of the Column's TH element being resized -
handleElId <string>
ID of the handle element that causes the resize -
sGroup <string>
Group name of related DragDrop items


For the development of PV's 3D art
Moderators: Joe M., Karl G.
-
- Richard. UK's: Model Digging Collection.
by Richard. UK » Wed Jul 02, 2008 4:51 am
- 20 Replies
- 8727 Views
- Last post by Karl G.
Fri Jun 26, 2009 10:18 am
-
- ----¤Please Read folks¤---- ***Updated***
by Serenity » Thu Jan 04, 2007 5:38 pm
- 142 Replies
- 29057 Views
- Last post by marzuku
Mon Mar 16, 2009 2:25 pm
-
- Map Maker Models - The List [with links to concept images]
by Ender » Tue Jan 30, 2007 6:22 pm
- 196 Replies
- 29661 Views
- Last post by Burnt Ferret
Sun Sep 28, 2008 12:45 pm
-
- Spider 01
by Halogram » Wed Jun 17, 2009 4:42 am
- 1 Replies
- 408 Views
- Last post by Joe M.
Wed Jun 17, 2009 6:43 am
-
- UPDATED Models, Map and Otherwise...
by Burnt Ferret » Wed Oct 01, 2008 12:28 am
- 43 Replies
- 4281 Views
- Last post by Joe M.
Mon May 11, 2009 3:55 pm
-
- aurelian concept
by Serenity » Sat Sep 06, 2008 11:58 pm
- 44 Replies
- 4543 Views
- Last post by Rabit561
Thu May 07, 2009 11:16 am
-
- Armor/Weapon concept drawings
by a_link_to_the_past » Sun Oct 05, 2008 7:02 pm
- 35 Replies
- 2895 Views
- Last post by Axel
Thu May 07, 2009 8:09 am
-
- yes
by lordoflotd » Wed Jan 07, 2009 10:20 am
- 1 Replies
- 499 Views
- Last post by Karl G.
Thu Jan 08, 2009 11:52 am
-
- How to handle character models with armor.
by Serenity » Sat Dec 13, 2008 2:06 pm
- 1 Replies
- 486 Views
- Last post by Karl G.
Sat Dec 13, 2008 6:27 pm
-
- 3d animators - CALL TO ACTION!
by Karl G. » Wed Oct 15, 2008 5:46 am
- 1 Replies
- 487 Views
- Last post by Burnt Ferret
Wed Oct 15, 2008 9:08 pm
-
- For lack of a better term
by David T. » Sun Oct 05, 2008 12:24 am
- 16 Replies
- 1458 Views
- Last post by kuba
Tue Oct 07, 2008 8:39 am
-
- More textures
by Karl G. » Mon Oct 06, 2008 6:47 am
- 0 Replies
- 375 Views
- Last post by Karl G.
Mon Oct 06, 2008 6:47 am
-
- Generic textures for models
by Sankt Pauli » Sat Oct 04, 2008 3:35 pm
- 0 Replies
- 394 Views
- Last post by Sankt Pauli
Sat Oct 04, 2008 3:35 pm
-
- sneek peek at the azure set
by thadiusofx3 » Wed Sep 17, 2008 1:29 pm
- 14 Replies
- 1199 Views
- Last post by David T.
Sat Oct 04, 2008 3:37 am
-
- regarding models and animation
by Serenity » Mon Sep 29, 2008 4:46 pm
- 3 Replies
- 605 Views
- Last post by Karl G.
Mon Sep 29, 2008 6:23 pm
-
- Karl
by Serenity » Sun Sep 07, 2008 11:33 am
- 0 Replies
- 407 Views
- Last post by Serenity
Sun Sep 07, 2008 11:33 am
-
- heres some stuff
by JSunJShineR » Thu Aug 21, 2008 12:40 pm
- 1 Replies
- 507 Views
- Last post by JSunJShineR
Thu Aug 21, 2008 12:40 pm
-
- Fun renders...
by Karl G. » Wed Feb 06, 2008 12:58 pm
- 1 Replies
- 587 Views
- Last post by Conceptz
Fri Aug 08, 2008 4:55 pm
-
- karl check this out
by thadiusofx3 » Wed Jul 18, 2007 9:21 pm
- 17 Replies
- 2793 Views
- Last post by Richard. UK
Wed May 07, 2008 8:46 am
-
- (Karl.G) PV Favourite Models Collection -24/07/07-
by Richard. UK » Tue Jul 24, 2007 4:55 am
- 7 Replies
- 1637 Views
- Last post by Simpo
Sat Apr 26, 2008 8:37 pm
-
- Preliminary animation video
by thadiusofx3 » Wed Jul 11, 2007 11:47 pm
- 31 Replies
- 6742 Views
- Last post by Simpo
Sat Apr 26, 2008 8:31 pm
-
- Original Daemon Model
by Necromadon » Wed Feb 20, 2008 7:46 pm
- 2 Replies
- 643 Views
- Last post by Rabit561
Mon Feb 25, 2008 1:22 pm
-
- The Armory
by thadiusofx3 » Mon Jan 07, 2008 10:04 pm
- 5 Replies
- 821 Views
- Last post by thadiusofx3
Tue Jan 08, 2008 10:00 pm
-
- Good program for 3d modeling?
by 4mm0 » Sat Sep 22, 2007 11:56 pm
- 9 Replies
- 1559 Views
- Last post by Charles Babbage
Wed Oct 10, 2007 2:49 am
-
- New shield I made
by thadiusofx3 » Sat Jul 21, 2007 11:58 pm
- 13 Replies
- 2694 Views
- Last post by Vitriol
Wed Jul 25, 2007 7:01 am
Return to Board index
Users browsing this forum: No registered users and 1 guest
Forum permissions
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum


This service is just a simple decorator for $timeout service that adds a "flush" and "verifyNoPendingTasks" methods.
flush([delay]);
Flushes the queue of pending tasks.
| Param | Type | Details |
|---|---|---|
|
delay
(optional)
|
number |
maximum timeout amount to flush up until |
verifyNoPendingTasks();
Verifies that there are no pending tasks that need to be flushed.


transient
fields which
are initialized during normal object construction, but whose class does not have a
readObject
method.
Because transient
fields are not serialized they need
to be initialized separately in a readObject()
method
during deserialization.
Any transient
fields which
are not initialized during normal object construction are considered to use the default
initialization and are not reported by this inspection.
Example:
class Person implements Serializable { transient String name = "Default"; //warning, can actually be a null after deserialization transient String surname; //null is considered as a default value }


|
Apprecie
1
Azure PHP
|
Public Member Functions | |
| setCreatingUser ($creatingUser) | |
| getCreatingUser () | |
| setCreationDate ($creationDate) | |
| getCreationDate () | |
| setIsDeleted ($isDeleted) | |
| getIsDeleted () | |
| setPortalId ($portalId) | |
| getPortalId () | |
| setPortalUserId ($portalUserId) | |
| getPortalUserId () | |
| setStatus ($status) | |
| getStatus () | |
| setTier ($tier) | |
| getTier () | |
| setUserGUID ($userGUID) | |
| getUserGUID () | |
| setUserId ($userId) | |
| getUserId () | |
| clearStaticRoleData () | |
| getSource () | |
| initialize () | |
| getGroups () | |
| getPortal () | |
| getUserLevelEncryptionKey () | |
| addRole ($role) | |
| getUserInterests () | |
| getInterests () | |
| addInterest ($interest, $clearExisting=false) | |
| hasInterest ($interestName) | |
| removeInterest ($interest) | |
| getUserNotes () | |
| getUserNotesAbout ($user) | |
| addUserNote ($aboutUser, $body) | |
| getRoles () | |
| hasRole ($role) | |
| getActiveRole () | |
| setActiveRole ($role) | |
| addDietaryRequirement ($requirement) | |
| hasDietaryRequirement ($requirement) | |
| setCreator ($user) | |
| getCreator () | |
| getParents () | |
| getChildren () | |
| setParentOf ($user) | |
| setChildOf ($user) | |
| getNotifications () | |
| getUserFamilyLinks () | |
| getIndicatedFamilyUsers () | |
| getIndicatedAsFamilyByUsers () | |
| addFamilyMember ($user) | |
| removeFamilyMember ($user) | |
| Public Member Functions inherited from ApprecieModelBase | |
| setParentIsTableBase ($value) | |
| getParentIsTableBase () | |
| setForeignKey ($value) | |
| getHash () | |
| getIsDecrypted () | |
| setDefaultFields ($default) | |
| setEncryptedFields ($encrypted) | |
| getEncryptedFields () | |
| getDefaultFields () | |
| setEncryptionProvider (EncryptionProvider $provider) | |
| getEncryptionProvider () | |
| createEncryptionProvider () | |
| register (IsRegistry $register, $key, $name) | |
| isEncryptionField ($field) | |
| encryptFields () | |
| decryptFields () | |
| onConstruct () | |
| beforeValidationOnCreate () | |
| beforeValidationOnUpdate () | |
| beforeUpdate () | |
| beforeCreate () | |
| afterCreate () | |
| beforeDelete () | |
| afterDelete () | |
| afterFetch () | |
| afterUpdate () | |
| appendMessage ($messages) | |
| Public Member Functions inherited from ApprecieUser | |
| getUserProfile () | |
| getUser () | |
| getUserLogin () | |
| getPortalUser () | |
| getUserReference () | |
| getUserContactPreferences () | |
| getUserDietaryRequirements () | |
Static Public Member Functions | |
| static | getUsersInRole ($roleId, $portalId) |
| static | findByInterests ($categories) |
| Static Public Member Functions inherited from ApprecieModelBase | |
| static | findFirstBy ($field, $values, ApprecieModelBase $instance=null) |
| static | findBy ($field, $values, ApprecieModelBase $instance=null) |
| static | prepareSearchValues ($field, $values, ApprecieModelBase $instance=null) |
| static | resolve ($param, $throw=true, ApprecieModelBase $instance=null) |
Data Fields | |
| $portalId | |
| $creatingUser | |
| $portalUserId | |
| $userGUID | |
| $creationDate | |
| $status | |
| $isDeleted | |
| $tier | |
Protected Attributes | |
| $_activeRole = null | |
| $_roles = null | |
| $_interests = null | |
| $userId | |
| Protected Attributes inherited from ApprecieModelBase | |
| $_defaultFields = array() | |
| $_encryptedFields = array() | |
| $_bitFields = array() | |
| $_isDecrypted = true | |
| $_encryptionProvider = null | |
| $_hash = null | |
| $_parentIsTableBase = false | |
| $_parentTransaction = null | |
| $_foreignKeyField = null | |
Additional Inherited Members | |
| Protected Member Functions inherited from ApprecieModelBase | |
| getForeignKeyField () | |
| getForeignKey () | |
| getEncryptionKey () | |
| processDefaultValues ($onlyIfNull=true) | |
| processBitValues () | |
| unsetBitValues () | |
| getExtractToArray (array $fields) | |
| updateForeignKey (ApprecieModelBase $parentInstance) | |
| getParentInstance () | |
| calculateForeignKeyField () | |
| updateFromParent () | |
Users in the Apprecie system are comprised of 4 separate entities. One of these entities the User entity, sits in the global database accessible by all portals but contains no personal data. This entity contains a guid, a userid, and details of the portal that the user lives in.
All personal data, and by virtue the further 3 user entities are stored under a per portal table isolation scheme.
The connection to these private tables is handled automatically, each is prefixed with the portal guid, and the models are injected with this source on hydration. This means that is is impossible for one portal to access another portals users unless tis si a very deliberate act by the programmer.
The structure of the user entities is as follows :
User ------------------------------isolated tables below this line------------- PortalUser UserLogin UserProfile
In most cases you will want a PortalUser rather than a user, and as all 4 entities support the ApprecieUser interface navigating between these entities is easy and uniform.
User are created top down. So when a user attempts to login (see Security) they login to a specific portal, as the UserLogin entity is in the private portal tables. This happens transparently, based on the portal (domain).
You can then obtain the global user record using ->getUser() so you move from private to global, not global to private
This prevents the mixing of users from different portals, with one exception.
As the developer you are able to use the UserEx::ForceActivePortalForUserQueries() passing the name of the portal that you need to query, from that moment until you call UserEx::ForceActivePortalForUserQueries() with no portal defined (resets to active portal), your user objects will be sourced on the portal that you indicated.
::ForceActivePortalForUserQueries('myportal'); $myportalUsers = ::find(); //returns users from myportal ::ForceActivePortalForUserQueries(''); $activePortalUsers = ::find(); //returns users from the active portal
As soon as you are outside of the force query block, your user objects will no longer relate correctly but will retain already hydrated fields. So all off portal user operations should occur in such as very explicit block.
To login a user or interact with the logged in user see Security.
Class User
| addRole | ( | $role | ) |
Users support multiple roles, and the concept of an active role.
| string | Role|$role The name of an actual role in the system (roles table) |
Implements ApprecieUser.
| clearStaticRoleData | ( | ) |
| getActiveRole | ( | ) |
If no specific active role has been set will return the suers first role
if you need the role object use getRoles()
Implements ApprecieUser.
| getChildren | ( | ) |
Note returns records of the link table userparents for actual user objects use getChildren()
| getInterests | ( | ) |
| getNotifications | ( | ) |
| getParents | ( | ) |
Note returns records of the link table userparents for actual user objects use getParents()
| getRoles | ( | ) |
Returns the models representation of the link table between users and roles.
i.e [] of Role $user->getRoles()[0]->getRole()->name
| getUserGUID | ( | ) |
| getUserId | ( | ) |
| getUserInterests | ( | ) |
| getUserLevelEncryptionKey | ( | ) |
|
static |
Provides a ResultSet of users for the the specified role within the specified portal
| $roleid | The actual id of the role to return i.e. Role::roleid |
| $portalid | The actual portalId to search within i.e. Portal::getPortalId() |
| hasRole | ( | $role | ) |
| string | $role | the name of the role to tests |
Implements ApprecieUser.
| removeInterest | ( | $interest | ) |
You can safely pass this method a list of categories containing interests not assigned to this item, and it will remove the ones that are (bulk ready).
A true response will be given so long as no existing category failed to be removed.
| $interest |
| setCreatingUser | ( | $creatingUser | ) |
| setCreationDate | ( | $creationDate | ) |
| setPortalUserId | ( | $portalUserId | ) |


Micrograph {{ entry.micrograph_id }}
Added by {{ author.username }} ({{ author.email }})
on {{ entry.upload_date }}
Annealing condition: {{ entry.annealing_condition|safe }}
Primary microconstituent: {{ entry.microconstituent }}
Find similar micrographs


DavidLiedle/BikeFrame
An example repository to show structure and workflow.
https://github.com/DavidLiedle/bikeframe


Yes.
A full URL (Uniform Resource Locator) is needed when a page links to another one that is on a different computer. Often pages link to others that are in the same directory. In that case, using just the file name of the linked-to page will work:
Words that the user sees
A web browser shows the "Words that the user sees" underlined and in blue (depending on the preferences setting of the browser.) The user clicks on them to go to the linked-to page.
Hyperlinks go practically anywhere in your web page. The following shows a link that is part of a paragraph:


versions: Query and Install Specific Versions of Packages on CRAN
Installs specified versions of R packages hosted on CRAN and
provides functions to list available versions and the versions of currently
installed packages. These tools can be used to help make R projects and
packages more reproducible. 'versions' fits in the narrow gap between
the 'devtools' install_version() function and the 'checkpoint' package.
devtools::install_version() installs a stated package version from source files
stored on the CRAN archives. However CRAN does not store binary versions of
packages so Windows users need to have RTools installed and Windows and OSX
users get longer installation times. 'checkpoint' uses the Revolution Analytics
MRAN server to install packages (from source or binary) as they were available
on a given date. It also provides a helpful interface to detect the packages
in use in a directory and install all of those packages for a given date.
'checkpoint' doesn't provide install.packages-like functionality however, and
that's what 'versions' aims to do, by querying MRAN. As MRAN only goes back to
2014-09-17, 'versions' can't install packages archived before this date.
Downloads:
Reverse dependencies:
Linking:
Please use the canonical form
https://CRAN.R-project.org/package=versions
to link to this page.