pyshgp.gp.variation module¶
The variation
module defines classes for variation operators.
Variation operators (aka genetic operators) are used in evolutionary/genetic algorithms to create “child” genomes from “parent” genomes.
-
class
pyshgp.gp.variation.
AdditionMutation
(addition_rate: float = 0.01)[source]¶ Bases:
pyshgp.gp.variation.VariationOperator
Uniformly randomly adds some Atoms to parent.
Parameters: rate (float) – The probablility of adding a new Atom at any given point in the parent Genome. Default is 0.01. -
rate
¶ The probablility of adding a new Atom at any given point in the parent Genome. Default is 0.01.
Type: float
-
num_parents
¶ Number of parent Genomes the operator needs to produce a child Individual.
Type: int
-
produce
(parents: Sequence[pyshgp.gp.genome.Genome], spawner: pyshgp.gp.genome.GeneSpawner) → pyshgp.gp.genome.Genome[source]¶ Produce a child Genome from parent Genomes and optional GenomeSpawner.
Parameters: - parents – A list of parent Genomes given to the operator.
- spawner – A GeneSpawner that can be used to produce new genes (aka Atoms).
-
-
class
pyshgp.gp.variation.
Alternation
(alternation_rate=0.01, alignment_deviation=10)[source]¶ Bases:
pyshgp.gp.variation.VariationOperator
Uniformly alternates between the two parent genomes.
Parameters: - rate (float, optional (default=0.01)) – The probablility of switching which parent program elements are being copied from. Must be 0 <= rate <= 1. Defaults to 0.1.
- alignment_deviation (int, optional (default=10)) – The standard deviation of how far alternation may jump between indices when switching between parents.
-
rate
¶ The probablility of switching which parent program elements are being copied from. Must be 0 <= rate <= 1. Defaults to 0.1.
Type: float, optional (default=0.01)
-
alignment_deviation
¶ The standard deviation of how far alternation may jump between indices when switching between parents.
Type: int, optional (default=10)
-
num_parents
¶ Number of parent Genomes the operator needs to produce a child Individual.
Type: int
-
produce
(parents: Sequence[pyshgp.gp.genome.Genome], spawner: pyshgp.gp.genome.GeneSpawner = None) → pyshgp.gp.genome.Genome[source]¶ Produce a child Genome from parent Genomes and optional GenomeSpawner.
Parameters: - parents – A list of parent Genomes given to the operator.
- spawner – A GeneSpawner that can be used to produce new genes (aka Atoms).
-
class
pyshgp.gp.variation.
Cloning
[source]¶ Bases:
pyshgp.gp.variation.VariationOperator
Clones the parent genome.
-
num_parents
¶ Number of parent Genomes the operator needs to produce a child Individual.
Type: int
-
produce
(parents: Sequence[pyshgp.gp.genome.Genome], spawner: pyshgp.gp.genome.GeneSpawner = None) → pyshgp.gp.genome.Genome[source]¶ Produce a child Genome from parent Genomes and optional GenomeSpawner.
Parameters: - parents – A list of parent Genomes given to the operator.
- spawner – A GeneSpawner that can be used to produce new genes (aka Atoms).
-
-
class
pyshgp.gp.variation.
DeletionMutation
(deletion_rate: float = 0.01)[source]¶ Bases:
pyshgp.gp.variation.VariationOperator
Uniformly randomly removes some Atoms from parent.
Parameters: rate (float) – The probablility of removing any given Atom in the parent Genome. Default is 0.01. -
rate
¶ The probablility of removing any given Atom in the parent Genome. Default is 0.01.
Type: float
-
num_parents
¶ Number of parent Genomes the operator needs to produce a child Individual.
Type: int
-
produce
(parents: Sequence[pyshgp.gp.genome.Genome], spawner: pyshgp.gp.genome.GeneSpawner) → pyshgp.gp.genome.Genome[source]¶ Produce a child Genome from parent Genomes and optional GenomeSpawner.
Parameters: - parents – A list of parent Genomes given to the operator.
- spawner – A GeneSpawner that can be used to produce new genes (aka Atoms).
-
-
class
pyshgp.gp.variation.
Genesis
(*, size: Union[int, Sequence[int]])[source]¶ Bases:
pyshgp.gp.variation.VariationOperator
Creates an entirely new (and random) genome.
Parameters: size – The child genome will contain this many Atoms if size is an integer. If size is a pair of integers, the genome will be of a random size in the range of the two integers. -
size
¶ The child genome will contain this many Atoms if size is an integer. If size is a pair of integers, the genome will be of a random size in the range of the two integers.
-
num_parents
¶ Number of parent Genomes the operator needs to produce a child Individual.
Type: int
-
produce
(parents: Sequence[pyshgp.gp.genome.Genome], spawner: pyshgp.gp.genome.GeneSpawner) → pyshgp.gp.genome.Genome[source]¶ Produce a child Genome from parent Genomes and optional GenomeSpawner.
Parameters: - parents – A list of parent Genomes given to the operator.
- spawner – A GeneSpawner that can be used to produce new genes (aka Atoms).
-
-
class
pyshgp.gp.variation.
LiteralMutation
(push_type: pyshgp.push.types.PushType, rate: float = 0.01)[source]¶ Bases:
pyshgp.gp.variation.VariationOperator
,abc.ABC
Base class for mutations of literal Atoms.
Parameters: - push_type (pyshgp.push.types.PushType) – The PushType which the operator can mutate.
- rate (float) – The probablility of applying the mutation to a given Literal.
-
push_type
¶ The PushType which the operator can mutate.
Type: pyshgp.push.types.PushType
-
rate
¶ The probablility of applying the mutation to a given Literal.
Type: float
-
num_parents
¶ Number of parent Genomes the operator needs to produce a child Individual.
Type: int
-
produce
(parents: Sequence[pyshgp.gp.genome.Genome], spawner: pyshgp.gp.genome.GeneSpawner = None) → pyshgp.gp.genome.Genome[source]¶ Produce a child Genome from parent Genomes and optional GenomeSpawner.
Parameters: - parents – A list of parent Genomes given to the operator.
- spawner – A GeneSpawner that can be used to produce new genes (aka Atoms).
-
class
pyshgp.gp.variation.
VariationOperator
(num_parents: int)[source]¶ Bases:
abc.ABC
Base class of all VariationOperators.
Parameters: num_parents (int) – Number of parent Genomes the operator needs to produce a child Individual. -
num_parents
¶ Number of parent Genomes the operator needs to produce a child Individual.
Type: int
-
checknum_parents
(parents: Sequence[pyshgp.gp.genome.Genome])[source]¶ Raise error if given too few parents.
Parameters: parents – A list of parent Genomes given to the operator.
-
produce
(parents: Sequence[pyshgp.gp.genome.Genome], spawner: pyshgp.gp.genome.GeneSpawner = None) → pyshgp.gp.genome.Genome[source]¶ Produce a child Genome from parent Genomes and optional GenomeSpawner.
Parameters: - parents – A list of parent Genomes given to the operator.
- spawner – A GeneSpawner that can be used to produce new genes (aka Atoms).
-
-
class
pyshgp.gp.variation.
VariationPipeline
(operators: Sequence[pyshgp.gp.variation.VariationOperator])[source]¶ Bases:
pyshgp.gp.variation.VariationOperator
Variation operator that sequencially applies multiple others variation operators.
Parameters: operators (list of VariationOperators) – A list of operators to apply in order to produce the child Genome. -
operators
¶ A list of operators to apply in order to produce the child Genome.
Type: list of VariationOperators
-
num_parents
¶ Number of parent Genomes the operator needs to produce a child Individual.
Type: int
-
produce
(parents: Sequence[pyshgp.gp.genome.Genome], spawner: pyshgp.gp.genome.GeneSpawner) → pyshgp.gp.genome.Genome[source]¶ Produce a child Genome from parent Genomes and optional GenomeSpawner.
Parameters: - parents – A list of parent Genomes given to the operator.
- spawner – A GeneSpawner that can be used to produce new genes (aka Atoms).
-
-
class
pyshgp.gp.variation.
VariationStrategy
[source]¶ Bases:
pyshgp.utils.DiscreteProbDistrib
A collection of VariationOperator and how frequently to use them.
-
add
(op: pyshgp.gp.variation.VariationOperator, p: float)[source]¶ Add an element with a relative probability.
Parameters: - op (VariationOperator) – The VariationOperator to add to the variaiton strategy.
- p (float) – The probability of using the given operator relative to the other operators that have been added to the VariationStrategy.
-
-
pyshgp.gp.variation.
choice
(a, size=None, replace=True, p=None)¶ Generates a random sample from a given 1-D array
New in version 1.7.0.
Parameters: - a (1-D array-like or int) – If an ndarray, a random sample is generated from its elements. If an int, the random sample is generated as if a were np.arange(a)
- size (int or tuple of ints, optional) – Output shape. If the given shape is, e.g.,
(m, n, k)
, thenm * n * k
samples are drawn. Default is None, in which case a single value is returned. - replace (boolean, optional) – Whether the sample is with or without replacement
- p (1-D array-like, optional) – The probabilities associated with each entry in a. If not given the sample assumes a uniform distribution over all entries in a.
Returns: samples – The generated random samples
Return type: single item or ndarray
Raises: ValueError
– If a is an int and less than zero, if a or p are not 1-dimensional, if a is an array-like of size 0, if p is not a vector of probabilities, if a and p have different lengths, or if replace=False and the sample size is greater than the population sizeSee also
randint()
,shuffle()
,permutation()
Examples
Generate a uniform random sample from np.arange(5) of size 3:
>>> np.random.choice(5, 3) array([0, 3, 4]) >>> #This is equivalent to np.random.randint(0,5,3)
Generate a non-uniform random sample from np.arange(5) of size 3:
>>> np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0]) array([3, 3, 0])
Generate a uniform random sample from np.arange(5) of size 3 without replacement:
>>> np.random.choice(5, 3, replace=False) array([3,1,0]) >>> #This is equivalent to np.random.permutation(np.arange(5))[:3]
Generate a non-uniform random sample from np.arange(5) of size 3 without replacement:
>>> np.random.choice(5, 3, replace=False, p=[0.1, 0, 0.3, 0.6, 0]) array([2, 3, 0])
Any of the above can be repeated with an arbitrary array-like instead of just integers. For instance:
>>> aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher'] >>> np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3]) array(['pooh', 'pooh', 'pooh', 'Christopher', 'piglet'], dtype='|S11')
-
pyshgp.gp.variation.
get_variation_operator
(name: str, **kwargs) → pyshgp.gp.variation.VariationOperator[source]¶ Get the variaton operator class with the given name.
-
pyshgp.gp.variation.
random
()¶ random_sample(size=None)
Return random floats in the half-open interval [0.0, 1.0).
Results are from the “continuous uniform” distribution over the stated interval. To sample \(Unif[a, b), b > a\) multiply the output of random_sample by (b-a) and add a:
(b - a) * random_sample() + a
Parameters: size (int or tuple of ints, optional) – Output shape. If the given shape is, e.g., (m, n, k)
, thenm * n * k
samples are drawn. Default is None, in which case a single value is returned.Returns: out – Array of random floats of shape size (unless size=None
, in which case a single float is returned).Return type: float or ndarray of floats Examples
>>> np.random.random_sample() 0.47108547995356098 >>> type(np.random.random_sample()) <type 'float'> >>> np.random.random_sample((5,)) array([ 0.30220482, 0.86820401, 0.1654503 , 0.11659149, 0.54323428])
Three-by-two array of random numbers from [-5, 0):
>>> 5 * np.random.random_sample((3, 2)) - 5 array([[-3.99149989, -0.52338984], [-2.99091858, -0.79479508], [-1.23204345, -1.75224494]])


|
PX4 Firmware
PX4 Autopilot Software http://px4.io
|
Go to the source code of this file.
Classes | |
| struct | MPUReport |
| Report conversation within the MPU6000, including command byte and interrupt status. More... | |
Typedefs | |
| typedef device::Device *(* | MPU6000_constructor) (int, int, bool) |
Functions | |
| device::Device * | MPU6000_SPI_interface (int bus, int device_type, bool external_bus) |
| device::Device * | MPU6000_I2C_interface (int bus, int device_type, bool external_bus) |
| int | MPU6000_probe (device::Device *dev, int device_type) |
| #define BIT_H_RESET 0x80 |
Definition at line 131 of file mpu6000.h.
Referenced by MPU6000::check_registers(), MPU9250::check_registers(), MPU6000::reset(), and MPU9250::reset_mpu().
| #define BIT_I2C_IF_DIS 0x10 |
Definition at line 146 of file mpu6000.h.
Referenced by MPU6000::reset(), and MPU9250::reset_mpu().
| #define BIT_INT_ANYRD_2CLEAR 0x10 |
Definition at line 144 of file mpu6000.h.
Referenced by MPU6000::reset(), and MPU9250::reset_mpu().
| #define BIT_RAW_RDY_EN 0x01 |
Definition at line 145 of file mpu6000.h.
Referenced by MPU6000::reset(), and MPU9250::reset_mpu().
| #define BITS_FS_2000DPS 0x18 |
Definition at line 142 of file mpu6000.h.
Referenced by MPU6000::reset(), and MPU9250::reset_mpu().
| #define BITS_FS_250DPS 0x00 |
Definition at line 139 of file mpu6000.h.
Referenced by MPU6000::factory_self_test().
| #define BITS_GYRO_ST_X 0x80 |
Definition at line 136 of file mpu6000.h.
Referenced by MPU6000::factory_self_test().
| #define BITS_GYRO_ST_Y 0x40 |
Definition at line 137 of file mpu6000.h.
Referenced by MPU6000::factory_self_test().
| #define BITS_GYRO_ST_Z 0x20 |
Definition at line 138 of file mpu6000.h.
Referenced by MPU6000::factory_self_test().
| #define ICM20602_DEVICE_PATH_ACCEL_EXT "/dev/icm20602_accel_ext" |
| #define ICM20602_DEVICE_PATH_ACCEL_EXT1 "/dev/icm20602_accel_ext1" |
| #define ICM20602_DEVICE_PATH_GYRO_EXT "/dev/icm20602_gyro_ext" |
| #define ICM20602_DEVICE_PATH_GYRO_EXT1 "/dev/icm20602_gyro_ext1" |
| #define ICM20602_REV_01 1 |
Definition at line 175 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define ICM20602_REV_02 2 |
Definition at line 176 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define ICM20608_DEVICE_PATH_ACCEL_EXT "/dev/icm20608_accel_ext" |
| #define ICM20608_DEVICE_PATH_ACCEL_EXT1 "/dev/icm20608_accel_ext1" |
| #define ICM20608_DEVICE_PATH_GYRO_EXT "/dev/icm20608_gyro_ext" |
| #define ICM20608_DEVICE_PATH_GYRO_EXT1 "/dev/icm20608_gyro_ext1" |
| #define ICM20608_REV_FF 0xff |
Definition at line 180 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define ICM20689_REV_03 0x03 |
Definition at line 185 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define ICM20689_REV_FE 0xfe |
Definition at line 184 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define ICM_ACC_DLPF_CFG_1046HZ_NOLPF 0x00 |
Definition at line 157 of file mpu6000.h.
Referenced by MPU6000::_set_icm_acc_dlpf_filter().
| #define ICM_ACC_DLPF_CFG_10HZ 0x05 |
Definition at line 162 of file mpu6000.h.
Referenced by MPU6000::_set_icm_acc_dlpf_filter().
| #define ICM_ACC_DLPF_CFG_218HZ 0x01 |
Definition at line 158 of file mpu6000.h.
Referenced by MPU6000::_set_icm_acc_dlpf_filter().
| #define ICM_ACC_DLPF_CFG_21HZ 0x04 |
Definition at line 161 of file mpu6000.h.
Referenced by MPU6000::_set_icm_acc_dlpf_filter().
| #define ICM_ACC_DLPF_CFG_420HZ 0x07 |
Definition at line 164 of file mpu6000.h.
Referenced by MPU6000::_set_icm_acc_dlpf_filter().
| #define ICM_ACC_DLPF_CFG_44HZ 0x03 |
Definition at line 160 of file mpu6000.h.
Referenced by MPU6000::_set_icm_acc_dlpf_filter().
| #define ICM_ACC_DLPF_CFG_5HZ 0x06 |
Definition at line 163 of file mpu6000.h.
Referenced by MPU6000::_set_icm_acc_dlpf_filter().
| #define ICM_ACC_DLPF_CFG_99HZ 0x02 |
Definition at line 159 of file mpu6000.h.
Referenced by MPU6000::_set_icm_acc_dlpf_filter().
| #define ICM_WHOAMI_20602 0x12 |
Definition at line 150 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define ICM_WHOAMI_20608 0xaf |
Definition at line 151 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define ICM_WHOAMI_20689 0x98 |
Definition at line 152 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define ICMREG_ACCEL_CONFIG2 0x1D |
Definition at line 156 of file mpu6000.h.
Referenced by MPU6000::_set_icm_acc_dlpf_filter().
| #define MPU6000_ACCEL_DEFAULT_DRIVER_FILTER_FREQ 30 |
Definition at line 207 of file mpu6000.h.
Referenced by MPU6000::init(), and MPU6000::MPU6000().
| #define MPU6000_ACCEL_DEFAULT_RANGE_G 16 |
Definition at line 204 of file mpu6000.h.
Referenced by mpu6000_main(), and MPU6000::reset().
| #define MPU6000_ACCEL_DEFAULT_RATE 1000 |
Definition at line 205 of file mpu6000.h.
Referenced by MPU6000::init(), MPU6000::ioctl(), and MPU6000::MPU6000().
| #define MPU6000_ACCEL_MAX_OUTPUT_RATE 280 |
Definition at line 206 of file mpu6000.h.
Referenced by MPU6000::MPU6000().
| #define MPU6000_DEFAULT_ONCHIP_FILTER_FREQ 98 |
Definition at line 215 of file mpu6000.h.
Referenced by MPU6000::reset().
| #define MPU6000_GYRO_DEFAULT_DRIVER_FILTER_FREQ 30 |
Definition at line 213 of file mpu6000.h.
Referenced by MPU6000::init(), and MPU6000::MPU6000().
| #define MPU6000_GYRO_DEFAULT_RATE 1000 |
Definition at line 210 of file mpu6000.h.
Referenced by MPU6000::_set_sample_rate(), MPU6000::init(), and MPU6000::MPU6000().
| #define MPU6000_GYRO_MAX_OUTPUT_RATE MPU6000_ACCEL_MAX_OUTPUT_RATE |
Definition at line 212 of file mpu6000.h.
Referenced by MPU6000::MPU6000().
| #define MPU6000_HIGH_BUS_SPEED 0x8000 |
Definition at line 253 of file mpu6000.h.
Referenced by MPU6000::check_registers(), MPU6000::factory_self_test(), MPU6000::measure(), and MPU6000::print_info().
| #define MPU6000_HIGH_SPEED_OP | ( | r | ) | MPU6000_SET_SPEED((r), MPU6000_HIGH_BUS_SPEED) |
| #define MPU6000_IS_HIGH_SPEED | ( | r | ) | ((r) & MPU6000_HIGH_BUS_SPEED) |
| #define MPU6000_LOW_BUS_SPEED 0 |
Definition at line 252 of file mpu6000.h.
Referenced by MPU6000::is_i2c(), and MPU6000::test_error().
| #define MPU6000_LOW_SPEED_OP | ( | r | ) | MPU6000_REG((r)) |
Definition at line 258 of file mpu6000.h.
Referenced by MPU6000::read_reg16(), and MPU6000::write_reg().
| #define MPU6000_REG | ( | r | ) | ((r) &~MPU6000_HIGH_BUS_SPEED) |
| #define MPU6000_REV_C4 0x54 |
Definition at line 195 of file mpu6000.h.
Referenced by MPU6000::probe(), and MPU6000::set_accel_range().
| #define MPU6000_REV_C5 0x55 |
Definition at line 196 of file mpu6000.h.
Referenced by MPU6000::probe(), and MPU6000::set_accel_range().
| #define MPU6000_REV_D10 0x5A |
Definition at line 201 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define MPU6000_REV_D6 0x56 |
Definition at line 197 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define MPU6000_REV_D7 0x57 |
Definition at line 198 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define MPU6000_REV_D8 0x58 |
Definition at line 199 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define MPU6000_REV_D9 0x59 |
Definition at line 200 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define MPU6000_SET_SPEED | ( | r, | |
| s | |||
| ) | ((r)|(s)) |
Definition at line 256 of file mpu6000.h.
Referenced by MPU6000::factory_self_test(), MPU6000::measure(), MPU6000::read_reg(), and MPU6000::test_error().
| #define MPU6000ES_REV_C4 0x14 |
Definition at line 190 of file mpu6000.h.
Referenced by MPU6000::probe(), and MPU6000::set_accel_range().
| #define MPU6000ES_REV_C5 0x15 |
Definition at line 191 of file mpu6000.h.
Referenced by MPU6000::probe(), and MPU6000::set_accel_range().
| #define MPU6000ES_REV_D6 0x16 |
Definition at line 192 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define MPU6000ES_REV_D7 0x17 |
Definition at line 193 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define MPU6000ES_REV_D8 0x18 |
Definition at line 194 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define MPU6050_REV_D8 0x28 |
Definition at line 202 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define MPU_CLK_SEL_PLLGYROZ 0x03 |
Definition at line 134 of file mpu6000.h.
Referenced by MPU6000::reset().
| #define MPU_DEVICE_PATH_ACCEL_EXT1 "/dev/mpu6000_accel_ext1" |
| #define MPU_DEVICE_PATH_ACCEL_EXT2 "/dev/mpu6000_accel_ext2" |
| #define MPU_GYRO_DLPF_CFG_10HZ 0x05 |
Definition at line 124 of file mpu6000.h.
Referenced by MPU6000::_set_dlpf_filter().
| #define MPU_GYRO_DLPF_CFG_188HZ 0x01 |
Definition at line 120 of file mpu6000.h.
Referenced by MPU6000::_set_dlpf_filter().
| #define MPU_GYRO_DLPF_CFG_20HZ 0x04 |
Definition at line 123 of file mpu6000.h.
Referenced by MPU6000::_set_dlpf_filter().
| #define MPU_GYRO_DLPF_CFG_2100HZ_NOLPF 0x07 |
Definition at line 126 of file mpu6000.h.
Referenced by MPU6000::_set_dlpf_filter().
| #define MPU_GYRO_DLPF_CFG_256HZ_NOLPF2 0x00 |
Definition at line 119 of file mpu6000.h.
Referenced by MPU6000::_set_dlpf_filter().
| #define MPU_GYRO_DLPF_CFG_42HZ 0x03 |
Definition at line 122 of file mpu6000.h.
Referenced by MPU6000::_set_dlpf_filter().
| #define MPU_GYRO_DLPF_CFG_5HZ 0x06 |
Definition at line 125 of file mpu6000.h.
Referenced by MPU6000::_set_dlpf_filter().
| #define MPU_GYRO_DLPF_CFG_98HZ 0x02 |
Definition at line 121 of file mpu6000.h.
Referenced by MPU6000::_set_dlpf_filter().
| #define MPU_MAX_WRITE_BUFFER_SIZE (2) |
Definition at line 244 of file mpu6000.h.
Referenced by MPU9250_SPI::write().
| #define MPU_WHOAMI_6000 0x68 |
Definition at line 149 of file mpu6000.h.
Referenced by MPU6000::probe().
| #define MPUIOCGIS_I2C (unsigned)(DEVIOCGDEVICEID+100) |
Definition at line 223 of file mpu6000.h.
Referenced by MPU6000::init(), MPU9250::init(), and MPU9250_SPI::ioctl().
| #define MPUREG_ACCEL_CONFIG 0x1C |
Definition at line 89 of file mpu6000.h.
Referenced by MPU6000::factory_self_test(), MPU6000::is_external(), MPU6000::set_accel_range(), and MPU9250::set_accel_range().
| #define MPUREG_CONFIG 0x1A |
Definition at line 87 of file mpu6000.h.
Referenced by MPU6000::_set_dlpf_filter(), MPU9250::_set_dlpf_filter(), and MPU6000::is_external().
| #define MPUREG_GYRO_CONFIG 0x1B |
Definition at line 88 of file mpu6000.h.
Referenced by MPU6000::factory_self_test(), MPU6000::is_external(), MPU6000::reset(), and MPU9250::reset_mpu().
| #define MPUREG_ICM_UNDOC1 0x11 |
Definition at line 169 of file mpu6000.h.
Referenced by MPU6000::check_registers(), MPU6000::is_external(), and MPU6000::reset().
| #define MPUREG_ICM_UNDOC1_VALUE 0xc9 |
Definition at line 170 of file mpu6000.h.
Referenced by MPU6000::reset().
| #define MPUREG_INT_ENABLE 0x38 |
Definition at line 92 of file mpu6000.h.
Referenced by MPU6000::is_external(), MPU6000::reset(), and MPU9250::reset_mpu().
| #define MPUREG_INT_PIN_CFG 0x37 |
Definition at line 91 of file mpu6000.h.
Referenced by MPU6000::is_external(), MPU6000::reset(), and MPU9250::reset_mpu().
| #define MPUREG_INT_STATUS 0x3A |
Definition at line 93 of file mpu6000.h.
Referenced by MPU6000::factory_self_test(), MPU6000::measure(), MPU9250::measure(), MPU6000::test_error(), and MPU9250::test_error().
| #define MPUREG_PRODUCT_ID 0x0C |
Definition at line 114 of file mpu6000.h.
Referenced by MPU6000::is_external(), MPU6000::print_registers(), and MPU6000::probe().
| #define MPUREG_PWR_MGMT_1 0x6B |
Definition at line 109 of file mpu6000.h.
Referenced by MPU6000::check_registers(), MPU9250::check_registers(), MPU6000::is_external(), MPU6000::reset(), and MPU9250::reset_mpu().
| #define MPUREG_PWR_MGMT_2 0x6C |
Definition at line 110 of file mpu6000.h.
Referenced by MPU9250::check_registers(), and MPU9250::reset_mpu().
| #define MPUREG_SMPLRT_DIV 0x19 |
Definition at line 86 of file mpu6000.h.
Referenced by MPU6000::_set_sample_rate(), MPU9250::_set_sample_rate(), and MPU6000::is_external().
| #define MPUREG_TRIM1 0x0D |
Definition at line 115 of file mpu6000.h.
Referenced by MPU6000::factory_self_test().
| #define MPUREG_TRIM2 0x0E |
Definition at line 116 of file mpu6000.h.
Referenced by MPU6000::factory_self_test().
| #define MPUREG_TRIM3 0x0F |
Definition at line 117 of file mpu6000.h.
Referenced by MPU6000::factory_self_test().
| #define MPUREG_TRIM4 0x10 |
Definition at line 118 of file mpu6000.h.
Referenced by MPU6000::factory_self_test().
| #define MPUREG_USER_CTRL 0x6A |
Definition at line 108 of file mpu6000.h.
Referenced by MPU9250_mag::ak8963_setup(), MPU9250_mag::ak8963_setup_master_i2c(), MPU6000::is_external(), MPU6000::reset(), and MPU9250::reset_mpu().
| #define MPUREG_WHOAMI 0x75 |
Definition at line 85 of file mpu6000.h.
Referenced by MPU9250_SPI::probe(), MPU6000::probe(), and MPU9250::probe().
| typedef device::Device*(* MPU6000_constructor) (int, int, bool) |
| device::Device* MPU6000_I2C_interface | ( | int | bus, |
| int | device_type, | ||
| bool | external_bus | ||
| ) |
| int MPU6000_probe | ( | device::Device * | dev, |
| int | device_type | ||
| ) |
| device::Device* MPU6000_SPI_interface | ( | int | bus, |
| int | device_type, | ||
| bool | external_bus | ||
| ) |


---
layout: home
author_profile: true
header:
image: "/images/mainheader.jpg"
---
Welcome to my portfolio!
This is the very early stages of development for my data analytics portfolio.
I hope to post thoughtful and insightful content that promotes analytical thinking.
Some pages may be empty, but I hope to contribute to all areas in my portfolio very soon.
Please be patient, as I am simultaneously working full time and studying for the GMAT.


| I've learned there may be another reason for IG Linick’s firing. His office was investigating—at my request—Trump’s phony emergency declaration so he could send Saudi Arabia weapons. We don’t have the full picture yet, but it’s troubling that Sec Pompeo wanted Linick pushed out. https://t.co/YBs9k45Tko |
5239 |
9671 |
2020-05-18 16:45:28 |
| Today I launched an investigation into President Trump’s firing of State Department Inspector General Steve Linick. @SenatorMenendez and I requested that administration officials preserve all records related to the firing & turn info over to the committees by Friday, May 22. https://t.co/vUtHhgjERG |
3673 |
11359 |
2020-05-16 18:51:23 |
| I have learned that the Office of the Inspector General had opened an investigation into Secretary Pompeo. Mr. Linick’s firing amid such a probe strongly suggests that this is an unlawful act of retaliation. https://t.co/rcpiBDShDz |
3092 |
8303 |
2020-05-16 11:40:53 |
| The Inspector General Act requires @realdonaldtrump to give Congress written reasons for firing an IG 30 days before doing so. He can’t give secret “justifications” just to his allies. @SenatorMenendez and I will get the truth. https://t.co/TssFFzEyge |
502 |
1112 |
2020-05-17 14:17:42 |
| I’ve been investigating acts of retaliation at the @StateDept for nearly two years. The law protects whistleblowers and, as we look into the IG’s firing, I will work tirelessly to ensure that no one who comes forward is bullied or silenced. https://t.co/gnydbqgDUB |
450 |
1186 |
2020-05-17 01:27:50 |
| President Trump’s unprecedented removal of Inspector General Linick is only his latest sacking of an inspector general, our government’s key independent watchdogs, from a federal agency. https://t.co/9XgkNOiIQH |
311 |
831 |
2020-05-16 18:53:48 |
| As @HouseForeign Chair I am keenly aware of the despot playbook. A leader ordering tear-gas to be fired on his own people, so he can walk outside for a photo-op holding a religious text, is not “out of the ordinary” behavior in most dictatorships—but now it’s happening in the US. |
138 |
374 |
2020-06-02 15:35:56 |
| What we’ve just learned makes it even more difficult to understand why Ambassador Bolton did not testify during impeachment. If Trump urged the Chinese leader to help with his reelection the American people deserved to know that information. https://t.co/y1vtWO1hS3 |
138 |
337 |
2020-06-17 22:37:09 |
| What would Republicans say if these exact words came from strongmen Nicolas Maduro or Daniel Ortega? We must take threats to our freedoms seriously no matter who they come from. https://t.co/RE0F0vXDk8 |
134 |
345 |
2020-05-28 14:08:24 |
| If the requested documents are not produced in full by the close of business on June 1, 2020, then I am prepared to issue subpoenas for the relevant documents and the testimony of relevant Department officials. https://t.co/q4MCARt0uk |
112 |
203 |
2020-05-21 17:42:45 |


In POSIX sh, array references are undefined.
(or "In dash, ... are not supported." when using dash
)
#!/bin/sh
var=(foo bar)
echo "${var[1]}"
The easiest solution is to switch to a shell that does support arrays, like bash
:
#!/bin/bash
var=(foo bar)
echo "${var[1]}"
Alternatively, rewrite the logic to use e.g. indirect variable references or set
:
#!/bin/sh
set -- foo bar
echo "$2"
Arrays are supported in bash
and ksh
, but not in dash
or POSIX sh
. Either switch to a shell that supports them, or rewrite your script without relying on arrays. This may not be straight forward.
If you only intend to target shells that supports this feature, you can change the shebang to a shell that guarantees support, or [[ignore]] this warning.
You can use # shellcheck disable=SC3000-SC4000
to ignore all such compatibility
warnings.


Messages Sent
{{messagesSent}}
Users Banned
{{usersBanned}}
Users Joined
{{usersJoined}}
Users Left
{{usersLeft}}
Most active day
{{ mostActiveDay }}
Most active hour
{{mostActiveHour}}:00 GMT
From Team Campfire
Back soon!
No updates right now. Check back later.
{{ event }}
Message Counts over the last 24 hours


The EsGlobe is an educational resource under development with funding from
ESI. It is an interactive data display for rendering environmental or model
data onto a sphere which can be tilted, rotated, and, most importantly allow
interaction with the underlying data sets.


A B C D E F G H I L M N O P R S T U V W Y
All Classes All Packages
All Classes All Packages
All Classes All Packages
T
- Task - Class in Routines
-
Summary
- Task() - Constructor for class Routines.Task
-
the default constructor to be used in conjunction with getters and setters
- Task(String) - Constructor for class Routines.Task
-
The one-arg constructor is to make sure that every task is given a name with which to identify it by, this is the primary constructor used for tasks in the code
- TaskDialog - Class in Routines
-
The Java class to accompany a GUI constructed in FXML.
- TaskDialog() - Constructor for class Routines.TaskDialog
- TaskDialog(String, Routine) - Constructor for class Routines.TaskDialog
- TaskDialog(Task, Routine) - Constructor for class Routines.TaskDialog
- TaskScheduler - Enum in Routines
-
The options of how a Task can be scheduled: BY_PREDECESSOR -which task must come before it start and end times are calculated (default), BY_START -what date/time it must start on and end time is calculated, BY_END -what date is must be completed by and start time is caluclated
- Themes - Enum in Routines
-
Trying something new with this project, available themes enumerated with a method to return a long string to write to the main CSS file, instead of the more complicated writing methods to switch out which stylesheet(s) objects reference
- TimeBasis - Enum in Routines
-
List of manners in which time to carry out a Task can be measured.
- TimePie - Class in Routines
- TimePie(Routine) - Constructor for class Routines.TimePie
- toggleSaveIcon() - Method in class Routines.RoutineController
-
alternates between a red and blue save icon or disables the main menu save button for a visual clue that it has or has not been saved
- toString() - Method in enum Routines.CostBasis
-
overrides default method
- toString() - Method in class Routines.Resource
-
override of default method
- toString() - Method in class Routines.Routine
-
override of default method
- toString() - Method in class Routines.Task
-
override of default method
- toString() - Method in enum Routines.TaskScheduler
-
overrides default method
- toString() - Method in enum Routines.TimeBasis
-
overrides default method
- toString() - Method in class Routines.WorkHours
-
overrides the default method
All Classes All Packages


Previous | Contents | Index | Next
Public key authentication is an alternative means of identifying yourself to a login server, instead of typing a password. It is more secure and more flexible, but more difficult to set up.
In conventional password authentication, you prove you are who you claim to be by proving that you know the correct password. The only way to prove you know the password is to tell the server what you think the password is. This means that if the server has been hacked, or spoofed (see section 2.2), an attacker can learn your password.
Public key authentication solves this problem. You generate a key pair, consisting of a public key (which everybody is allowed to know) and a private key (which you keep secret and do not give to anybody). The private key is able to generate signatures. A signature created using your private key cannot be forged by anybody who does not have that key; but anybody who has your public key can verify that a particular signature is genuine.
So you generate a key pair on your own computer, and you copy the public key to the server. Then, when the server asks you to prove who you are, PuTTY can generate a signature using your private key. The server can verify that signature (since it has your public key) and allow you to log in. Now if the server is hacked or spoofed, the attacker does not gain your private key or password; they only gain one signature. And signatures cannot be re-used, so they have gained nothing.
There is a problem with this: if your private key is stored unprotected on your own computer, then anybody who gains access to that will be able to generate signatures as if they were you. So they will be able to log in to your server under your account. For this reason, your private key is usually encrypted when it is stored on your local machine, using a passphrase of your choice. In order to generate a signature, PuTTY must decrypt the key, so you have to type your passphrase.
This can make public-key authentication less convenient than password authentication: every time you log in to the server, instead of typing a short password, you have to type a longer passphrase. One solution to this is to use an authentication agent, a separate program which holds decrypted private keys and generates signatures on request. PuTTY's authentication agent is called Pageant. When you begin a Windows session, you start Pageant and load your private key into it (typing your passphrase once). For the rest of your session, you can start PuTTY any number of times and Pageant will automatically generate signatures without you having to do anything. When you close your Windows session, Pageant shuts down, without ever having stored your decrypted private key on disk. Many people feel this is a good compromise between security and convenience. See chapter 9 for further details.
There is more than one public-key algorithm available. The most common are RSA and ECDSA, but others exist, notably DSA (otherwise known as DSS), the USA's federal Digital Signature Standard. The key types supported by PuTTY are described in section 8.2.2.
PuTTYgen is a key generator. It generates pairs of public and private keys to be used with PuTTY, PSCP, PSFTP, and Plink, as well as the PuTTY authentication agent, Pageant (see chapter 9). PuTTYgen generates RSA, DSA, ECDSA, and EdDSA keys.
When you run PuTTYgen you will see a window where you have two main choices: ‘Generate’, to generate a new public/private key pair, or ‘Load’ to load in an existing private key.
This is a general outline of the procedure for generating a new key pair. The following sections describe the process in more detail.
Your key pair is now ready for use. You may also want to copy the public key to your server, either by copying it out of the ‘Public key for pasting into OpenSSH authorized_keys file’ box (see section 8.2.12), or by using the ‘Save public key’ button (section 8.2.11). However, you don't need to do this immediately; if you want, you can load the private key back into PuTTYgen later (see section 8.2.14) and the public key will be available for copying and pasting again.
Section 8.3 describes the typical process of configuring PuTTY to attempt public-key authentication, and configuring your SSH server to accept it.
Before generating a key pair using PuTTYgen, you need to select which type of key you need.
The current version of the SSH protocol, SSH-2, supports several different key types, although specific servers may not support all of them. PuTTYgen can generate:
PuTTYgen can also generate an RSA key suitable for use with the old SSH-1 protocol (which only supports RSA); for this, you need to select the ‘SSH-1 (RSA)’ option. Since the SSH-1 protocol is no longer considered secure, it's rare to need this option.
The ‘Number of bits’ input box allows you to choose the strength of the key PuTTYgen will generate.
(This is entirely optional. Unless you know better, it's entirely sensible to skip this and use the default settings.)
On the ‘Key’ menu, you can also optionally change the method for generating the prime numbers used in the generated key. This is used for RSA and DSA keys only. (The other key types don't require generating prime numbers at all.)
The prime-generation method does not affect compatibility: a key generated with any of these methods will still work with all the same SSH servers.
The available methods are:
The ‘probable primes’ method sounds unsafe, but it's the most commonly used prime-generation strategy. There is in theory a possibility that it might accidentally generate a number that isn't prime, but the software does enough checking to make that probability vanishingly small (less than 1 in 2^80, or 1 in 10^24). So, in practice, nobody worries about it very much.
The other methods cause PuTTYgen to use numbers that it is sure are prime, because it generates the output number together with a proof of its primality. This takes more effort, but it eliminates that theoretical risk in the probabilistic method.
There in one way in which PuTTYgen's ‘proven primes’ method is not strictly better than its ‘probable primes’ method. If you use PuTTYgen to generate an RSA key on a computer that is potentially susceptible to timing- or cache-based side-channel attacks, such as a shared computer, the ‘probable primes’ method is designed to resist such attacks, whereas the ‘proven primes’ methods are not. (This is only a concern for RSA keys; for other key types, primes are either not secret or not involved.)
You might choose to switch from probable to proven primes if you have a local security standard that demands it, or if you don't trust the probabilistic argument for the safety of the usual method.
For RSA keys, there's also an option on the ‘Key’ menu to use ‘strong’ primes as the prime factors of the public key. A ‘strong’ prime is a prime number chosen to have a particular structure that makes certain factoring algorithms more difficult to apply, so some security standards recommend their use. However, the most modern factoring algorithms are unaffected, so this option is probably not worth turning on unless you have a local standard that recommends it.
Once you have chosen the type of key you want, and the strength of the key, press the ‘Generate’ button and PuTTYgen will begin the process of actually generating the key.
First, a progress bar will appear and PuTTYgen will ask you to move the mouse around to generate randomness. Wave the mouse in circles over the blank area in the PuTTYgen window, and the progress bar will gradually fill up as PuTTYgen collects enough randomness. You don't need to wave the mouse in particularly imaginative patterns (although it can't hurt); PuTTYgen will collect enough randomness just from the fine detail of exactly how far the mouse has moved each time Windows samples its position.
When the progress bar reaches the end, PuTTYgen will begin creating the key. The progress bar will reset to the start, and gradually move up again to track the progress of the key generation. It will not move evenly, and may occasionally slow down to a stop; this is unfortunately unavoidable, because key generation is a random process and it is impossible to reliably predict how long it will take.
When the key generation is complete, a new set of controls will appear in the window to indicate this.
The ‘Key fingerprint’ box shows you a fingerprint value for the generated key. This is derived cryptographically from the public key value, so it doesn't need to be kept secret; it is supposed to be more manageable for human beings than the public key itself.
The fingerprint value is intended to be cryptographically secure, in the sense that it is computationally infeasible for someone to invent a second key with the same fingerprint, or to find a key with a particular fingerprint. So some utilities, such as the Pageant key list box (see section 9.2.1) and the Unix ssh-add
utility, will list key fingerprints rather than the whole public key.
By default, PuTTYgen will display SSH-2 key fingerprints in the ‘SHA256’ format. If you need to see the fingerprint in the older ‘MD5’ format (which looks like aa:bb:cc:...
), you can choose ‘Show fingerprint as MD5’ from the ‘Key’ menu, but bear in mind that this is less cryptographically secure; it may be feasible for an attacker to create a key with the same fingerprint as yours.
If you have more than one key and use them for different purposes, you don't need to memorise the key fingerprints in order to tell them apart. PuTTYgen allows you to enter a comment for your key, which will be displayed whenever PuTTY or Pageant asks you for the passphrase.
The default comment format, if you don't specify one, contains the key type and the date of generation, such as rsa-key-20011212
. Another commonly used approach is to use your name and the name of the computer the key will be used on, such as simon@simons-pc
.
To alter the key comment, just type your comment text into the ‘Key comment’ box before saving the private key. If you want to change the comment later, you can load the private key back into PuTTYgen, change the comment, and save it again.
The ‘Key passphrase’ and ‘Confirm passphrase’ boxes allow you to choose a passphrase for your key. The passphrase will be used to encrypt the key on disk, so you will not be able to use the key without first entering the passphrase.
When you save the key, PuTTYgen will check that the ‘Key passphrase’ and ‘Confirm passphrase’ boxes both contain exactly the same passphrase, and will refuse to save the key otherwise.
If you leave the passphrase fields blank, the key will be saved unencrypted. You should not do this without good reason; if you do, your private key file on disk will be all an attacker needs to gain access to any machine configured to accept that key. If you want to be able to log in without having to type a passphrase every time, you should consider using Pageant (chapter 9) so that your decrypted key is only held in memory rather than on disk.
Under special circumstances you may genuinely need to use a key with no passphrase; for example, if you need to run an automated batch script that needs to make an SSH connection, you can't be there to type the passphrase. In this case we recommend you generate a special key for each specific batch script (or whatever) that needs one, and on the server side you should arrange that each key is restricted so that it can only be used for that specific purpose. The documentation for your SSH server should explain how to do this (it will probably vary between servers).
Choosing a good passphrase is difficult. Just as you shouldn't use a dictionary word as a password because it's easy for an attacker to run through a whole dictionary, you should not use a song lyric, quotation or other well-known sentence as a passphrase. DiceWare (www.diceware.com
) recommends using at least five words each generated randomly by rolling five dice, which gives over 2^64 possible passphrases and is probably not a bad scheme. If you want your passphrase to make grammatical sense, this cuts down the possibilities a lot and you should use a longer one as a result.
Do not forget your passphrase. There is no way to recover it.
In some environments, user authentication keys can be signed in turn by a ‘certifying authority’ (‘CA’ for short), and user accounts on an SSH server can be configured to automatically trust any key that's certified by the right signature.
This can be a convenient setup if you have a very large number of servers. When you change your key pair, you might otherwise have to edit the authorized_keys
file on every server individually, to make them all accept the new key. But if instead you configure all those servers once to accept keys signed as yours by a CA, then when you change your public key, all you have to do is to get the new key certified by the same CA as before, and then all your servers will automatically accept it without needing individual reconfiguration.
To get your key signed by a CA, you'll probably send the CA the new public key (not the private half), and get back a modified version of the public key with the certificate included.
If you want to incorporate the certificate into your PPK file for convenience, you can use the ‘Add certificate to key’ menu option in PuTTYgen's ‘Key’ menu. This will give you a single file containing your private key and the certificate, which is everything you need to authenticate to a server prepared to accept that certificate.
To remove the certificate again and restore the uncertified PPK file, there's also a ‘Remove certificate from key’ option.
(However, you don't have to incorporate the certificate into your PPK file. You can equally well use it separately, via the ‘Certificate to use with the private key’ option in PuTTY itself. See section 4.22.2. It's up to you which you find more convenient.)
When the currently loaded key in PuTTYgen contains a certificate, the large ‘Public key for pasting’ edit box (see section 8.2.12) is replaced by a button that brings up an information box telling you about the certificate, such as who it certifies your key as belonging to, when it expires (if ever), and the fingerprint of the CA key that signed it in turn.
Once you have generated a key, set a comment field and set a passphrase, you are ready to save your private key to disk.
Press the ‘Save private key’ button. PuTTYgen will put up a dialog box asking you where to save the file. Select a directory, type in a file name, and press ‘Save’.
This file is in PuTTY's native format (*.PPK
); it is the one you will need to tell PuTTY to use for authentication (see section 4.22.1) or tell Pageant to load (see section 9.2.2).
(You can optionally change some details of the PPK format for your saved key files; see section 8.2.13. But The defaults should be fine for most purposes.)
RFC 4716 specifies a standard format for storing SSH-2 public keys on disk. Some SSH servers (such as ssh.com
's) require a public key in this format in order to accept authentication with the corresponding private key. (Others, such as OpenSSH, use a different format; see section 8.2.12.)
To save your public key in the SSH-2 standard format, press the ‘Save public key’ button in PuTTYgen. PuTTYgen will put up a dialog box asking you where to save the file. Select a directory, type in a file name, and press ‘Save’.
You will then probably want to copy the public key file to your SSH server machine. See section 8.3 for general instructions on configuring public-key authentication once you have generated a key.
If you use this option with an SSH-1 key, the file PuTTYgen saves will contain exactly the same text that appears in the ‘Public key for pasting’ box. This is the only existing standard for SSH-1 public keys.
The OpenSSH server, among others, requires your public key to be given to it in a one-line format before it will accept authentication with your private key. (SSH-1 servers also used this method.)
The ‘Public key for pasting into OpenSSH authorized_keys file’ gives the public-key data in the correct one-line format. Typically you will want to select the entire contents of the box using the mouse, press Ctrl+C to copy it to the clipboard, and then paste the data into a PuTTY session which is already connected to the server.
See section 8.3 for general instructions on configuring public-key authentication once you have generated a key.
Selecting ‘Parameters for saving key files...’ from the ‘Key’ menu lets you adjust some aspects of PPK-format private key files stored on disk. None of these options affect compatibility with SSH servers.
In most cases, it's entirely sensible to leave all of these at their default settings.
This defaults to version 3, which is fine for most uses.
You might need to select PPK version 2 if you need your private key file to be loadable in older versions of PuTTY (0.74 and older), or in other tools which do not yet support the version 3 format (which was introduced in 2021).
The version 2 format is less resistant to brute-force decryption, and doesn't support any of the following options to control that.
All of the following options only affect keys saved with passphrases. They control how much work is required to decrypt the key (which happens every time you type its passphrase). This allows you to trade off the cost of legitimate use of the key against the resistance of the encrypted key to password-guessing attacks.
These options only affect PPK version 3.
PuTTYgen allows you to load an existing private key file into memory. If you do this, you can then change the passphrase and comment before saving it again; you can also make extra copies of the public key.
To load an existing key, press the ‘Load’ button. PuTTYgen will put up a dialog box where you can browse around the file system and find your key file. Once you select the file, PuTTYgen will ask you for a passphrase (if necessary) and will then display the key details in the same way as if it had just generated the key.
If you use the Load command to load a foreign key format, it will work, but you will see a message box warning you that the key you have loaded is not a PuTTY native key. See section 8.2.15 for information about importing foreign key formats.
SSH-2 private keys have no standard format. OpenSSH and ssh.com
have different formats, and PuTTY's is different again. So a key generated with one client cannot immediately be used with another.
Using the ‘Import’ command from the ‘Conversions’ menu, PuTTYgen can load SSH-2 private keys in OpenSSH's format and ssh.com
's format. Once you have loaded one of these key types, you can then save it back out as a PuTTY-format key (*.PPK
) so that you can use it with the PuTTY suite. The passphrase will be unchanged by this process (unless you deliberately change it). You may want to change the key comment before you save the key, since some OpenSSH key formats contained no space for a comment, and ssh.com
's default comment format is long and verbose.
PuTTYgen can also export private keys in OpenSSH format and in ssh.com
format. To do so, select one of the ‘Export’ options from the ‘Conversions’ menu. Exporting a key works exactly like saving it (see section 8.2.10) - you need to have typed your passphrase in beforehand, and you will be warned if you are about to save a key without a passphrase.
For OpenSSH there are two options. Modern OpenSSH actually has two formats it uses for storing private keys. ‘Export OpenSSH key’ will automatically choose the oldest format supported for the key type, for maximum backward compatibility with older versions of OpenSSH; for newer key types like Ed25519, it will use the newer format as that is the only legal option. If you have some specific reason for wanting to use OpenSSH's newer format even for RSA, DSA, or ECDSA keys, you can choose ‘Export OpenSSH key (force new file format)’.
Most clients for the older SSH-1 protocol use a standard format for storing private keys on disk. PuTTY uses this format as well; so if you have generated an SSH-1 private key using OpenSSH or ssh.com
's client, you can use it with PuTTY, and vice versa. Hence, the export options are not available if you have generated an SSH-1 key.
PuTTYgen supports a set of command-line options to configure many of the same settings you can select in the GUI. This allows you to start it up with your own preferences ready-selected, which might be useful if you generate a lot of keys. (For example, you could make a Windows shortcut that runs PuTTYgen with some command line options, or a batch file or Powershell script that you could distribute to a whole organisation containing your local standards.)
The options supported on the command line are:
-t
keytype
rsa
, dsa
, ecdsa
, eddsa
, ed25519
, ed448
, or rsa1
. See section 8.2.2.
-b
bits
--primes
method
probable
, proven
, and proven-even
. See section 8.2.4.
--strong-rsa
--ppk-param
key=
value,
...
Aspects to change are specified as a series of key=
value pairs separated by commas. The keys are:
version
3
or 2
.
kdf
argon2id
, argon2i
, and argon2d
.
memory
time
passes
time
: specifies the number of hash passes required to attempt decrypting the key.
parallelism
-E
fptype
sha256
or md5
. See section 8.2.6.
Connect to your SSH server using PuTTY with the SSH protocol. When the connection succeeds you will be prompted for your user name and password to login. Once logged in, you must configure the server to accept your public key for authentication:
.ssh
directory under your home directory, and open the file authorized_keys
with your favourite editor. (You may have to create this file, if this is the first key you have put in it.) Then switch to the PuTTYgen window, select all of the text in the ‘Public key for pasting into OpenSSH authorized_keys file’ box (see section 8.2.12), and copy it to the clipboard (Ctrl+C
). Then, switch back to the PuTTY window and insert the data into the open file, making sure it ends up all on one line. Save the file.
(In very old versions of OpenSSH, SSH-2 keys had to be put in a separate file called authorized_keys2
. In all current versions, the same authorized_keys
file is used for both SSH-1 and SSH-2 keys.)
ssh.com
's product and is using SSH-2, you need to save a public key file from PuTTYgen (see section 8.2.11), and copy that into the .ssh2
directory on the server. Then you should go into that .ssh2
directory, and edit (or create) a file called authorization
. In this file you should put a line like Key mykey.pub
, with mykey.pub
replaced by the name of your key file.
You may also need to ensure that your home directory, your .ssh
directory, and any other files involved (such as authorized_keys
, authorized_keys2
or authorization
) are not group-writable or world-writable; servers will typically ignore the keys unless this is done. You can typically do this by using a command such as
chmod go-w $HOME $HOME/.ssh $HOME/.ssh/authorized_keys
Your server should now be configured to accept authentication using your private key. Now you need to configure PuTTY to attempt authentication using your private key. You can do this in any of three ways:
-i
option. See section <IP_ADDRESS> for details.
If you want to provide feedback on this manual or on the PuTTY tools themselves, see the Feedback page.
[PuTTY release 0.78]


Mount Sion CBS Secondary School Anti-Bullying Policy
- In accordance with the requirements of the Education (Welfare) Act 2000 and the code of behaviour guidelines issued by the NEWB, the Board of Management of Mount Sion CBS Secondary School has
adopted the following anti-bullying policy within the framework of the school’s overall code of behaviour. This policy fully complies with the requirements of the Anti-Bullying Procedures
for Primary and Post-Primary Schools which were published in September 2013.
- The Board of Management recognises the very serious nature of bullying and the negative impact that it can have on the lives of pupils and is therefore fully committed to the following key
principles of best practice in preventing and tackling bullying behaviour:
- A positive school culture and climate which
- is welcoming of difference and diversity and is based on inclusivity
- encourages pupils to disclose and discuss incidents of bullying behaviour in a non-threatening environment
- promotes respectful relationships across the school community
- Effective leadership
- A school-wide approach
- A shared understanding of what bullying is and its impact
- Implementation of education and prevention strategies (including awareness raising measures) that
- build empathy, respect and resilience in pupils
- explicitly address the issues of cyber-bullying and identity-based bullying including in particular, homophobic and transphobic bullying
- Effective supervision and monitoring of pupils
- Supports for staff
- Consistent recording, investigation and follow up of bullying behaviour (including use of established intervention strategies)
- On-going evaluation of the effectiveness of the anti-bullying policy
- In accordance with the Anti-Bullying Procedures for Primary and Post-Primary Schools bullying is defined as follows:
Bullying is unwanted negative behaviour, verbal, psychological or physical conducted, by an individual or group against another person (or persons) and which is repeated over time. The
following types of bullying behaviour are included in the definition of bullying:
- deliberate exclusion, malicious gossip and other forms of relational bullying,
- cyber-bullying
- identity-based bullying such as homophobic bullying, racist bullying, bullying based on a person’s membership of the Traveller community and bullying of those with disabilities or special
educational needs
Isolated or once-off incidents of intentional negative behaviour, including a once-off offensive or hurtful text message or other private messaging, do not fall within the definition of
bullying and should be dealt with, as appropriate, in accordance with the school’s code of behaviour. However, in the context of this policy, placing a once-off offensive or hurtful public
message, image or statement on a social network site or other public forum where that message, image or statement can be viewed and/or repeated by other people will be regarded as bullying
behaviour. Negative behaviour that does not meet this definition of bullying will be dealt with in accordance with the school’s code of behaviour.
- Types of bullying
The following are some of the types of bullying behaviour that can occur amongst pupils:
- Physical aggression: This behaviour includes pushing, shoving, punching, kicking, poking and tripping people. It may also take the form of severe physical assault. While pupils
often engage in ‘mess fights’, they can sometimes be used as a disguise for physical harassment or inflicting pain.
- Intimidation: Some bullying behaviour takes the form of intimidation. It may be based on the use of very aggressive body language with the voice being used as a weapon.
Particularly upsetting can be a facial expression which conveys aggression and/or dislike.
- Isolation/exclusion and other relational bullying: This occurs where a certain person is deliberately isolated, excluded or ignored by some or all of the class group. This
practice is usually initiated by the person engaged in bullying behaviour and can be difficult to detect. It may be accompanied by writing insulting remarks about the pupil in public places, by
passing around notes about or drawings of the pupil or by whispering insults about them loud enough to be heard. Relational bullying occurs when a person’s attempts to socialise and form
relationships with peers are repeatedly rejected or undermined. One of the most common forms includes control: “Do this or I won’t be your friend anymore”(implied or stated); a
group ganging up against one person pupil; non-verbal gesturing; malicious gossip; spreading rumours about a person or giving them the “silent treatment”.
- Cyber-bullying: This type of bullying is increasingly common and is continuously evolving. It is bullying carried out through the use of information and communication
technologies such as text, social network sites, e-mail, instant messaging (IM), apps, gaming sites, chat-rooms and other online technologies. Being the target of inappropriate or hurtful messages
is the most common form of online bullying. As cyber-bullying uses technology to perpetrate bullying behaviour and does not require face to face contact, cyber-bullying can occur at any time (day
or night). Many forms of bullying can be facilitated through cyber-bullying. For example, a target may be sent homophobic text messages or pictures may be posted with negative comments about a
person’s sexuality, appearance etc.
- Name calling: Persistent name-calling directed at the same individual(s) which hurts, insults or humiliates should be regarded as a form of bullying behaviour. Often
name-calling of this type refers to physical appearance, e.g., size or clothes worn. Accent or distinctive voice characteristics may attract negative attention. Academic ability can also provoke
name calling. This tends to operate at two extremes. There are those who are singled out for attention because they are perceived to be weak academically. At the other extreme there are those who,
because they are perceived as high achievers, are also targeted.
- Damage to property: Personal property can be the focus of attention for bullying behaviour. This may result in damage to clothing, mobile phone or other devices, school books
and other learning material or interference with a pupil’s locker or bicycle. The contents of school bags and pencil cases may be scattered on the floor. Items of personal property may be
defaced, broken, stolen or hidden.
- Extortion: Demands for money may be made, often accompanied by threats (sometimes carried out in the event of the targeted pupil not delivering on the demand). A pupil may also
be forced into theft of property for delivery to another who is engaged in bullying behaviour.
- The relevant teachers in Mount Sion CBS for investigating and dealing with bullying are the Principal or Deputy Principal. Any teacher, SNA, or member of staff may report an incident of
behaviour and the Principal or Deputy Principal will investigate same. On completion of the investigation, the Principal or Deputy Principal with reference to DES Anti-Bullying Procedures will make
a determination as to whether the incident will be recorded on the Bullying Record per DES Anti-Bullying Procedures.
If circumstances warrant it any teacher may act as a relevant teacher.
- Education and Prevention Strategies that will be used in the school are as follows:
School-wide approach
- A school-wide approach to the fostering of respect for all members of the school community
- The promotion of the value of diversity to address issues of prejudice and stereotyping, and highlight the unacceptability of bullying behaviour
- The fostering and enhancing of the self-esteem of all our pupils through both curricular and extracurricular activities. Pupils will be provided with opportunities to develop a positive sense
of self-worth through formal and informal interactions
- Whole staff professional development on bullying to ensure that all staff develop an awareness of what bullying is, how it impacts on pupils’ lives and the need to respond to
it-prevention and intervention
- Professional development with specific focus on the training of the relevant teacher(s)
- School wide awareness raising and training on all aspects of bullying, to include pupils, parent(s)/guardian(s) and the wider school community
- Supervision and monitoring of classrooms, corridors, school grounds, school tours and extra- curricular activities. Non-teaching and ancillary staff will be encouraged to be vigilant and report
issues to relevant teachers. Supervision will also apply to monitoring student use of communication technology within the school
- Involvement of the student council in contributing to a safe school environment e.g. Mentoring, and other student support activities that can help to support pupils and encourage a culture of
peer respect and support
- Development and promotion of an Anti-Bullying code for the school-to be included in student journals and displayed publicly in classrooms and in common areas of the school.
- The school’s anti-bullying policy is discussed with pupils and all parent(s)/guardian(s)s are access directed to a copy as part of the Code of Behaviour of the school
- Encouraging a culture of responsible reporting with particular emphasis on the importance of bystanders. This confidence factor is of vital importance. It should be made clear to all pupils
that when they report incidents of bullying they are not considered to be telling tales but are behaving responsibly.
- Ensuring that pupils know who to tell and how to tell, when bullying situations arise
- Parent(s)/guardian(s)are encouraged to approach the school if they suspect that their child is being bullied
- Acceptable Use Policy in the school will include the necessary steps to ensure that the access to technology within the school is strictly monitored. The use of mobile phones and multimedia
devices is governed by the school Code of Behaviour
- The listing of supports currently being used in the school
Implementation of School Curricula
- The full implementation of the SPHE and CSPE curricula and the RSE programme
- Continuous Professional Development for staff in delivering these programmes
- The school will specifically consider the additional needs of SEN pupils with regard to programme implementation and the development of skills and strategies to enable all pupils to respond
appropriately
Other relevant School Policies.
- Mount Sion CBS Code of Behaviour
- Child Protection Policy
- Healthy Living Policy
- Education Tours Policy
- And all such policies governing the operation of the school and the supervision of its pupil cohort
- The school’s procedures for investigation, follow-up and recording of bullying behaviour and the established intervention strategies used by the school for dealing with cases of bullying
behaviour are as follows
Procedures for Investigating and Dealing with Bullying The primary aim in investigating and dealing with bullying is to resolve any issues and to restore, as far as is
practicable, the relationships of the parties involved (rather than to apportion blame). The school’s procedures will be consistent with the following approach. Every effort will be made to
ensure that all involved (including pupils, parent(s)/guardian(s)) understand this approach from the outset. Reporting bullying behaviour
- Any pupil or parent(s)/guardian(s) may bring a bullying incident to any teacher in the school.
- All reports, including anonymous reports of bullying, will be investigated and dealt with by the Principal or Deputy Principal
- Teaching and non-teaching staff such as secretaries, special needs assistants (SNAs), bus escorts, caretakers, cleaners must report any incidents of bullying behaviour witnessed by them, or
mentioned to them, to the Principal or Deputy Principal
Investigating and dealing with reported incidents: In investigating and dealing with reported incidents, the Principal or Deputy Principal will exercise his professional
judgement to determine whether bullying has occurred and how best the situation might be resolved.
- Where possible, incidents should be investigated outside the classroom situation to ensure the privacy of all involved. All interviews should be conducted with sensitivity and with due regard
to the rights of all pupils concerned
- A calm, unemotional problem-solving approach is essential
- Parent(s)/guardian(s) and pupils are required to co-operate with any investigation and assist the school in resolving any issues and restoring, as far as is practicable, the relationships of
the parties involved as quickly as possible
- Pupils who are not directly involved can also provide very useful information in this way
- When analysing incidents of reported bullying behaviour, the Principal or Deputy Principal should seek answers to questions of what, where, when, who and why. This should be done in a calm
manner, setting an example in dealing effectively with a conflict in a non-aggressive manner
- If a group is involved, each member may be interviewed individually at first. Thereafter, all those involved may be met as a group where deemed appropriate
- Each member of a group should be supported through the possible pressures that may face them from the other members of the group after the interview
- Follow up meeting may be appropriate to confirm that the incident has been resolved
Procedures for dealing with confirmed incidents of bullying
- In cases where it has been determined by the Principal or Deputy Principal that bullying behaviour has occurred, the following procedure will be followed
- the parent(s)/guardian(s) of the parties involved will be contacted to inform them of the matter and explain the actions being taken (by reference to the school policy)
- it will be made clear to the pupil engaged in bullying behaviour how he is in breach of the school’s anti-bullying policy and efforts will be made to try to get him to see the situation
from the perspective of the pupil being bullied
- the pupil engaged in the bullying behaviour will be given the opportunity to immediately cease the bullying behaviour and thereby avoid any school sanction
- the victim will agree to inform the Principal or Deputy Principal immediately of any further bullying behaviour
- the pupil engaged in the bullying behaviour and victim if agreeable will meet the Principal or Deputy Principal and in a restorative session will be made aware of the proposed way to a
resolution
- in the event of a recurrence of the bullying behaviour the pupil engaged in the bullying behaviour will be subject to the appropriate sanctions as per the school Code of Behaviour
- the school will give parent(s)/guardian(s) an opportunity of discussing ways in which they can reinforce or support the actions being taken by the school and the supports provided to the
pupils
- It will also be made clear to all involved (each set of pupils and parent(s)/guardian(s)) that in any situation where disciplinary sanctions are required, this is a private matter between the
pupil being disciplined, his or her parent(s)/guardian(s) and the school
Follow up and recording
- In determining whether a bullying case has been adequately and appropriately addressed the the Principal or Deputy Principal must, as part of his professional judgement, take the following
factors into account:
- whether the bullying behaviour has ceased;
- whether any issues between the parties have been resolved as far as is practicable;
- whether the relationships between the parties have been restored as far as is practicable;
- any feedback received from the parties involved or their parent(s)/guardian(s)
- Follow-up meetings with the relevant parties involved should be arranged separately or together if appropriate
- Where a parent(s)/guardian(s) is not satisfied that the school has dealt with a bullying case in accordance with these procedures, the parent(s)/guardian(s) must be referred, as appropriate, to
the school’s complaints procedures, by reference to The Board of Management
- In the event that a parent(s)/guardian(s) has exhausted the school's complaints procedures and is still not satisfied, the school must advise the parent(s)/guardian(s) of their right to make a
complaint to the Ombudsman for Pupils
- All confirmed incidents of bullying will recorded by the Principal or Deputy Principal on standard form (Mount Sion CBS Record of Bullying Behaviour) and will be retained on file
Established intervention strategies
- Teacher interviews with all pupils
- Negotiating agreements between pupils and following these up by monitoring progress. This can be on an informal basis or implemented through a more structured mediation process
- Working with parent(s)/guardian(s)s to support school interventions
- No Blame Approach
- Other such strategic that form best practise as Anti-Bullying Interventions.
- Behaviour Management approach via the school Code of Behaviour
- Strengthening the victim
- Mediation
- The school’s programme of support for working with pupils affected by bullying is as follows
- All in-school supports and opportunities will be provided for the pupils affected by bullying to participate in activities designed to raise their self-esteem, to develop friendships and social
skills and build resilience e.g.
- Pastoral care system
- Guidance & Counselling
- Mentoring system
- Support and monitoring system
- Aistear programme
- If pupils require counselling or further supports the school will endeavour to liaise with the appropriate agencies to organise same. This may be for the pupil affected by bullying or involved
in the bullying behaviour
- Pupils should understand that there are no innocent bystanders and that all incidents of bullying behaviour must be reported to a teacher
- Supervision and Monitoring of Pupils
The Board of Management confirms that appropriate supervision and monitoring policies and practices are in place to both prevent and deal with bullying behaviour and to facilitate early
intervention where possible. The classroom supervision system is governed by the Supervision and levels of supervision policy, to include the Substitution and Personal Day rotas. School grounds and
social circulation areas draw supervision from the annual supervision/substitution scheme. Additional supervisory elements are governed as appropriate to the educational tours policy, acceptable use
policy, supervised Study policy etc. The School Child Protection Policy applies in all situations relevant to pupil supervision. 10. Application beyond the School Campus. The School
reserves the right to apply its bullying policy in respect of bullying that occurs at a location, activity, function, or program that is not school related if in the opinion of the Principal and/or
the Board of Management the alleged bullying has created a hostile environment at school for the victim, has infringed on the rights of the victim at the school and/or has materially or
substantially disrupted the education process or the orderly operation of the school. 11. Prevention of Harassment The Board of Management confirms that the school will, in
accordance with its obligations under equality legislation, take all such steps that are reasonably practicable to prevent the sexual harassment of pupils or staff or the harassment of pupils or
staff on any of the nine grounds specified i.e. gender including transgender, civil status, family status, sexual orientation, religion, age, disability, race and membership of the Traveller
community This policy has been made available to school personnel, published on the school website and provided to the Parents’ Association. A copy of this policy will be made available to the
Department of Education & Skills and the patron, Edmund Rice Schools Trust, if requested. This policy and its implementation will be reviewed by the Board of Management once in every school
year. Written notification that the review has been completed will be made available to school personnel, published on the school website and provided to the Parents’ Association. A record of
the review and its outcome will be made available, if requested, to the patron and the Department.


Types are documented using Closure Compiler type expressions.
Data feed that returns stores based on a given bounds and a set of features.
// always returns the same stores function SimpleStaticFeed(stores) { this.stores = stores; } SimpleStaticFeed.prototype.getStores = function(bounds, features, callback) { callback(this.stores); }; new storeLocator.View(map, new SimpleStaticFeed());
| Name | Description | Returns |
|---|---|---|
getStores(
|
Fetch stores, based on bounds to search within, and features to filter on. |
undefined
|
Representation of a feature of a store. (e.g. 24 hours, BYO, etc).
var feature = new storeLocator.Feature('24hour', 'Open 24 Hours');
| Parameter | Type | Description |
|---|---|---|
id
|
string
|
unique identifier for this feature. |
name
|
string
|
display name of this feature. |
| Name | Description | Returns |
|---|---|---|
getDisplayName(
|
Gets this Feature's display name. |
string
this feature's display name.
|
getId(
|
Gets this Feature's ID. |
string
this feature's ID.
|
A mutable, ordered set of storeLocator.Feature
s.
var feature1 = new storeLocator.Feature('1', 'Feature One'); var feature2 = new storeLocator.Feature('2', 'Feature Two'); var feature3 = new storeLocator.Feature('3', 'Feature Three'); var featureSet = new storeLocator.FeatureSet(feature1, feature2, feature3);
| Parameter | Type | Description |
|---|---|---|
var_args
|
...storeLocator.Feature
|
the initial features to add to the set. |
| Name | Type | Description |
|---|---|---|
NONE |
storeLocator.FeatureSet |
Empty feature set. |
| Name | Description | Returns |
|---|---|---|
add(
|
Adds a feature to the set. |
undefined
|
asList(
|
Get the contents of this set as an Array. |
Array.<!storeLocator.Feature>
the features in the set, in the order
they were inserted.
|
contains(
|
Check if a feature exists within this set. |
boolean
true if the set contains the given feature.
|
getById(
|
Gets a Feature object from the set, by the feature id. |
storeLocator.Feature
the feature, if the set contains it.
|
remove(
|
Removes a feature from the set, if it already exists in the set. If it does not already exist in the set, this function is a no op. |
undefined
|
toggle(
|
Adds the given feature to the set, if it doesn't exist in the set already. Else, removes the feature from the set. |
undefined
|
A DataFeed where stores are provided by Google Maps Engine.
Note: the table that contains the stores needs to be publicly accessible.
var dataFeed = new storeLocator.GMEDataFeed({ tableId: '12421761926155747447-06672618218968397709', apiKey: 'AIzaSyAtunhRg0VTElV-P7n4Agpm9tYlABQDCAM', propertiesModifier: function(props) { return { id: transformId(props.store_id), title: props.store_title }; } }); new storeLocator.View(map, dataFeed);
| Parameter | Type | Description |
|---|---|---|
opts
|
!storeLocator.GMEDataFeedOptions
|
the table ID, API key and a transformation function for feature/store properties. |
| Name | Type | Description |
|---|---|---|
tableId |
string |
The table's asset ID. |
apiKey |
string |
The API key to use for all requests. |
propertiesModifier |
?(function(Object): Object) |
A transformation function. The first argument is the feature's properties.
Return an object useful for the "props" argument in the
storeLocator.Store constructor. The default properties modifier
function passes the feature straight through.
Note: storeLocator.GMEDataFeed expects an |
An info panel, to complement the map view. Provides a list of stores, location search, feature filter, and directions.
var container = document.getElementById('panel'); var panel = new storeLocator.Panel(container, { view: view, locationSearchLabel: 'Location:' }); google.maps.event.addListener(panel, 'geocode', function(result) { geocodeMarker.setPosition(result.geometry.location); });
| Parameter | Type | Description |
|---|---|---|
el
|
!Node
|
the element to contain this panel. |
opt_options
|
storeLocator.PanelOptions
|
| Name | Description | Returns |
|---|---|---|
hideDirections(
|
Hides the directions panel. |
undefined
|
searchPosition(
|
Search and pan to the specified address. |
undefined
|
setView(
|
Sets the associated View. |
undefined
|
showDirections(
|
Shows directions to the selected store. |
undefined
|
| Name | Arguments | Description |
|---|---|---|
featureFilter_changed
|
None
|
Fired when the Panel 's featureFilter property
changes. |
geocode
|
result:google.maps.PlaceResult|
|
Fired when searchPosition has been called. This happens when the user has searched for a location from the location search box and/or autocomplete. |
selectedStore_changed
|
None
|
Fired when the Panel 's selectedStore property
changes. |
stores_changed
|
None
|
Fired when the Panel 's stores property changes. |
view_changed
|
None
|
Fired when the Panel 's view property changes. |
| Name | Type | Description |
|---|---|---|
locationSearchLabel |
string |
The label to show above the location search box. Default is "Where are you now?". |
featureFilter |
boolean |
Whether to show the feature filter picker. Default is true. |
directions |
boolean |
Whether to provide directions. Deafult is true. |
view |
storeLocator.View |
The store locator model to bind to. |
A DataFeed with a static set of stores. Provides sorting of stores by proximity and feature filtering (store must have all features from the filter).
var dataFeed = new storeLocator.StaticDataFeed(); jQuery.getJSON('stores.json', function(json) { var stores = parseStores(json); dataFeed.setStores(stores); }); new storeLocator.View(map, dataFeed);
| Name | Description | Returns |
|---|---|---|
getStores(
|
undefined
|
|
setStores(
|
Set the stores for this data feed. |
undefined
|
Represents a store.
var latLng = new google.maps.LatLng(40.7585, -73.9861); var store = new storeLocator.Store('times_square', latLng, null);
var features = new storeLocator.FeatureSet( view.getFeatureById('24hour'), view.getFeatureById('express'), view.getFeatureById('wheelchair_access')); var store = new storeLocator.Store('times_square', latLng, features, { title: 'Times Square', address: '1 Times Square<br>Manhattan, NY 10036' });
store.distanceTo(map.getCenter()); // override default info window store.getInfoWindowContent = function() { var details = this.getDetails(); return '<h1>' + details.title + '<h1>' + details.address; };
| Parameter | Type | Description |
|---|---|---|
id
|
string
|
globally unique id of the store - should be suitable to use as a HTML id. |
location
|
!google.maps.LatLng
|
location of the store. |
features
|
storeLocator.FeatureSet
|
the features of this store. |
props
|
Object.<string, *>=
|
any additional properties.
Recommended fields are: 'title', 'address', 'phone', 'misc', 'web'. |
| Name | Description | Returns |
|---|---|---|
distanceTo(
|
Gets the distance between this Store and a certain location. |
number
the distance from this store to a given point.
|
getDetails(
|
Gets additional details about this store. |
Object
additional properties of this store.
|
getFeatures(
|
Gets this store's features. |
storeLocator.FeatureSet
this store's features.
|
getId(
|
Gets this store's ID. |
string
this store's ID.
|
getInfoPanelContent(
|
Gets the HTML content for this Store, suitable for use in suitable for use in the sidebar info panel. |
string
a HTML version of this store.
|
getInfoPanelItem(
|
Gets a HTML element suitable for use in the InfoPanel. |
Node
a HTML element.
|
getInfoWindowContent(
|
Gets the HTML content for this Store, suitable for use in an InfoWindow. |
string
a HTML version of this store.
|
getLocation(
|
Gets this store's location. |
google.maps.LatLng
this store's location.
|
getMarker(
|
Gets this store's Marker |
google.maps.Marker
the store's marker.
|
hasAllFeatures(
|
Checks whether this store has all the given features. |
boolean
true if the store has all features, false otherwise.
|
hasFeature(
|
Checks whether this store has a particular feature. |
boolean
true if the store has the feature, false otherwise.
|
setMarker(
|
Sets this store's Marker. |
undefined
|
| Name | Arguments | Description |
|---|---|---|
marker_changed
|
marker:google.maps.Marker
|
Fired when the Store 's marker property changes. |
The main store locator object.
new storeLocator.View(map, dataFeed);
var features = new storeLocator.FeatureSet(feature1, feature2, feature3); new storeLocator.View(map, dataFeed, { markerIcon: 'icon.png', features: features, geolocation: false });
// refresh stores every 10 seconds, regardless of interaction on the map. var view = new storeLocator.View(map, dataFeed, { updateOnPan: false }); setTimeout(function() { view.refreshView(); }, 10000);
// custom MarkerOptions, by overriding the createMarker method. view.createMarker = function(store) { return new google.maps.Marker({ position: store.getLocation(), icon: store.getDetails().icon, title: store.getDetails().title }); };
| Parameter | Type | Description |
|---|---|---|
map
|
google.maps.Map
|
the map to operate upon. |
data
|
storeLocator.DataFeed
|
the data feed to fetch stores from. |
opt_options
|
storeLocator.ViewOptions
|
| Name | Description | Returns |
|---|---|---|
addStoreToMap(
|
Add a store to the map. |
undefined
|
clearMarkers(
|
Clears the visible markers on the map. |
undefined
|
createMarker(
|
Create a marker for a store. |
google.maps.Marker
a new marker.
|
getFeatureById(
|
Gets a feature by its id. Convenience method. |
storeLocator.Feature|
The feature, if the id is valid.
undefined if not.
|
getFeatures(
|
Gets all possible features for this View. |
storeLocator.FeatureSet
All possible features.
|
getInfoWindow(
|
Get a InfoWindow for a particular store. |
google.maps.InfoWindow
the store's InfoWindow.
|
getMap(
|
Gets the view's Map. |
google.maps.Map
the view's Map.
|
getMarker(
|
Get a marker for a store. By default, this caches the value from createMarker(store) |
google.maps.Marker
the marker.
|
highlight(
|
Select a particular store. |
undefined
|
refreshView(
|
Refresh the map's view. This will fetch new data based on the map's bounds. |
undefined
|
| Name | Arguments | Description |
|---|---|---|
featureFilter_changed
|
None
|
Fired when the View 's featureFilter property
changes. |
load
|
None
|
Fired when the View is loaded. This happens once immediately,
then once more if geolocation is successful. |
selectedStore_changed
|
store:storeLocator.Store
|
Fired when the View 's selectedStore property
changes. This happens after highlight() is called. |
stores_changed
|
None
|
Fired when the View 's stores property changes. |
updateOnPan_changed
|
None
|
Fired when the View 's updateOnPan property changes. |
| Name | Type | Description |
|---|---|---|
updateOnPan |
boolean |
Whether the map should update stores in the visible area when the visible
area changes. refreshView() will need to be called
programatically. Defaults to true. |
geolocation |
boolean |
Whether the store locator should attempt to determine the user's location for the initial view. Defaults to true. |
features |
storeLocator.FeatureSet |
All available store features. Defaults to empty FeatureSet. |
markerIcon |
string| |
The icon to use for markers representing stores. |


--- layout: post title: "Android Development on Ubuntu 10.04" date: 2010-06-15 03:56:26 +0000 permalink: /2010/06/15/android-development-on-ubuntu-1004/ category: Linux tags: - Android - Ubuntu redirect_from: - /blog/android-development-on-ubuntu-1004/ ---
If you've been trying to use the Android SDK on Ubuntu 10.04, you might be getting an error like:
No command line parameters provided, launching UI.
See 'android --help' for operations from the command line.
Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-gtk-3550 or swt-gtk in swt.library.path, java.library.path or the jar file
at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
at org.eclipse.swt.internal.Library.loadLibrary(Unknown Source)
at org.eclipse.swt.internal.C.<clinit>(Unknown Source)
at org.eclipse.swt.internal.Converter.wcsToMbcs(Unknown Source)
at org.eclipse.swt.internal.Converter.wcsToMbcs(Unknown Source)
at org.eclipse.swt.widgets.Display.<clinit>(Unknown Source)
at com.android.sdkmanager.Main.showMainWindow(Main.java:265)
at com.android.sdkmanager.Main.doAction(Main.java:249)
at com.android.sdkmanager.Main.run(Main.java:94)
at com.android.sdkmanager.Main.main(Main.java:83)
If you're getting this, try installing libswt-gtk-3.5-java and then running the android SDK via: ANDROID_SWT=/usr/lib/java ./android
Hope this helps somebody.


This is a 9"x12" watercolor on Arches 140lb cold press 100% cotton rag circa 2015.
The Process
In creating this piece I started with what I would call meaningful doodling where I sketch the lines on some scratch paper to see if there's an image that I could find particular meaningful. The loops at the bottom right came first and the rest of the lines proceeded from there. I used two resists to create this, the first to block out the main image and paint the background, the second to mask the lines to leave them white.
The Meaning
When I was creating this a felt some trepidation as if I was embarking on something taboo. It invoked the idea of the third eye and the three circular loops at toward the center of the triangle were like lines of energy flowing into then out of it and up in undulating waves. I was looking very closely when I saw it as a third eye but when I step back I gain a bigger perspective: there's someone meditating there, their legs obviously crossed and with the lines glowing as they are this is a very deep meditation indeed. My feeling is that the person meditating is me, I often feel some active energy when I do although perhaps not so dramatic as this painting.
I have found good insight from other people on my pieces, and in this case my mother mentioned the word restoration due to the blue of the piece. So here I sit meditating and the energies are rising. As I reach a state of peace the damages of the past are healed and I am restored.


Funeral scheduled for boy shot at high school football game
ATLANTIC CITY, N.J. (AP) - Funeral services will be held this weekend for a 10-year-old boy who died after being shot during a New Jersey high school football playoff game.
Micah Tennant’s family says the service will be held at 11 a.m. Saturday at New Shiloh Baptist Church in Atlantic City.
The child was shot in the neck when gunfire erupted in the stands during a Nov. 15 game between Pleasantville and Camden. He died five days later, just hours before the game was resumed.
A 15-year-old boy was also grazed in the incident.
Six men have been charged in the shooting, including a 27-year-old man who was shot. Authorities have said he was targeted by the shooter.
The suspected gunman faces numerous counts including murder, two counts of attempted murder and weapons offenses.
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


---
sort_order: 52
tei_id: rdx_b5j2m.p.idm59646880
annotation_count: 0
images:
small-thumbnail: http://readux.library.emory.edu/books/emory:b5j2m/pages/emory:p7533/mini-thumbnail/
json: http://readux.library.emory.edu/books/emory:b5j2m/pages/emory:p7533/info/
full: http://readux.library.emory.edu/books/emory:b5j2m/pages/emory:p7533/fs/
page: http://readux.library.emory.edu/books/emory:b5j2m/pages/emory:p7533/single-page/
thumbnail: http://readux.library.emory.edu/books/emory:b5j2m/pages/emory:p7533/thumbnail/
title: Page 52
number: 52
---
{% raw %}48 MRS. H. BEECHER STOWE'S " UNCLE TOM."{% endraw %}
{% raw %}seeing that the allurements of the crowd were pro¬{% endraw %}
{% raw %}ducing a manifest effect, I sternly assumed the{% endraw %}
{% raw %}captain, and ordered the boat to be pushed off into the{% endraw %}
{% raw %}stream. A shower of curses followed me from the{% endraw %}
{% raw %}shore; but the negroes under me, accustomed to{% endraw %}
{% raw %}obey, and, alas! too degraded and ignorant of the{% endraw %}
{% raw %}advantages of liberty to know what they were for¬{% endraw %}
{% raw %}feiting, offered no resistance to my command.{% endraw %}
{% raw %}Often since that day has my soul been pierced{% endraw %}
{% raw %}with bitter anguish, at the thought of having been{% endraw %}
{% raw %}thus instrumental in consigning to the infernal{% endraw %}
{% raw %}bondage of slavery, so many of my fellow-beings. I{% endraw %}
{% raw %}have wrestled in prayer with God for forgiveness.{% endraw %}
{% raw %}Having experienced myself the sweetness of liberty,{% endraw %}
{% raw %}and knowing too [well the after-misery of a number{% endraw %}
{% raw %}of these slaves, my infatuation has often seemed to{% endraw %}
{% raw %}me to have been the unpardonable sin. But I con¬{% endraw %}
{% raw %}sole myself with the thought that I acted according{% endraw %}
{% raw %}to my best light, though the light that was in me was{% endraw %}
{% raw %}darkness. Those were my days of ignorance. I{% endraw %}
{% raw %}knew not then the glory of free manhood, or that the{% endraw %}
{% raw %}title-deed of the slave-owner is robbery and outrage.{% endraw %}
{% raw %}What advantages I may have personally lost by{% endraw %}
{% raw %}thus throwing away an opportunity of obtaining{% endraw %}
{% raw %}freedom ! But the perception of my own strength of{% endraw %}
{% raw %}character, the feeling of integrity, the sentiment of{% endraw %}
{% raw %}high honour, I thus gained by obedience to what I{% endraw %}
{% raw %}believed right, are advantages which I prize. He{% endraw %}
{% raw %}that is faithful over a little, will be faithful over{% endraw %}
{% raw %}much. Before God I tried to do my best, and the{% endraw %}
{% raw %}error of judgment lies at the door of the degrading{% endraw %}
{% raw %}pystem under which I had been nurtured.{% endraw %}


Medicord a healthcare blockchain application. It guarantee every doctor a trusted, portable and private place to store your medical information.
Below is a detailed list of your appointment and prescription history, cryptographically signed and committed to the blockchain ledger


Upcoming Conference
K-CAP 2023
Twelfth International Conference on Knowledge Capture
December 5 - 7, 2023
Pensacola, Florida, USA
Previous K-CAP Conferences
K-CAP 2021
Eleventh International Conference on Knowledge Capture
December 2 - 3, 2021
Virtual Conference
K-CAP 2019
Tenth International Conference on Knowledge Capture
November, 2019
Marina del Rey, California
K-CAP 2017
Ninth International Conference on Knowledge Capture
4th - 6th December, 2017
Austin, TX
K-CAP 2015
Eighth International Conference on Knowledge Capture
October, 2015
Palisades, NY
K-CAP 2013
Seventh International Conference on Knowledge Capture
Jun. 23-26, 2013
Banff, Alberta
K-CAP 2011
Sixth International Conference on Knowledge Capture
Jun. 25-29, 2011
Banff, Alberta
K-CAP 2009
Fifth International Conference on Knowledge Capture
Sep. 1-4, 2009
Redondo Beach, CA
K-CAP 2007
Fourth International Conference on Knowledge Capture
Oct. 28-31, 2007
Whistler, BC
K-CAP 2005
Third International Conference on Knowledge Capture
Oct. 23-25, 2005
Banff, Alberta
K-CAP 2003
Second International Conference on Knowledge Capture
Oct. 23-25, 2003
Florida, USA
K-CAP 2001
First International Conference on Knowledge Capture
Oct. 21-23, 2001
Victoria, B.C, Canada
Motivation for the K-CAP conference series
The K-CAP conference series is sponsored by
the Association for Computing Machinery's
Special Interest Group on Artificial Intelligence
For more information about k-cap.org, send email to
info@k-cap.org


--- author_id: 022 author_name: Mateo Lara genre: Creative Nonfiction usual_genre_grammared: Poetry issue: 2 title: Mortal Kombat categories: issue2 layout: creative-post private_email<EMAIL_ADDRESS>twitter: killeremm website: N/A bio: Orpheus, EOAGH, Empty Mirror, and The New Engagement. They are an editor for RabidOak online literary journal Zoetic Press. interview_1: My preferred genre is poetry. I think I hide behind my words a lot, but also I have so many thoughts and feelings about particular things, and the best way to say them is through poetry. I just like to run around and create magic and abstraction, and poetry helps me do that. interview_2: I wanted to document an important moment of my journey in a new city with a new friend. interview_3: I think the challenge has always been just being honest with myself and saying something clear and not hiding behind a simile or metaphor. Trying to be honest and open and not being afraid of it. ---
is a queer latinx originally from Bakersfield, California. They received their BA in English at CSU Bakersfield. They are currently working on their MFA in Poetry at Randolph College in Lynchburg, VA. Their poems have been featured in
“the morning tastes like bruises”—Erika L. Sanchez
Something shimmers at the corner of my eye, another day holds itself up, dangling sanity like a carrot, another day to double down on expectations and learning to thrive in a city who wants me dead.
I know it does—I hear its growling when I sleep.
It has been five months and I have no new friends. I live day to day wondering if my Lyft drivers will kill me and if I’ll ever have enough money to take one here and there.

I have edges all over and I’ve yet to smooth them out.
I’ve been looking for a therapist out here, but it all seems like a dream, a really good one, healthy living, a smile that traps a boy and me together, something to love with all its sting and bite. I wish getting my degree were easier, but I see white deities and devils trying to lead me places I never intended to go.
What did Jesus do in the desert so long?
What am I to live for when I don’t believe in the sin or the blood or the cross I wear around my neck?
It’s fatal, it’s fatality, like those moves I make in the game I play every night before work. Ridding my mind of its violent intentions to harm itself, I harm the characters I fight.
I do my bidding like all witches do, with fire.

I play video games every day to ease the tension in my body. I imagine all my coworkers think I’m too much or try to be, since I’m from California and they’ve never seen a proper setting sun. I’m used to differences. I’m used to fighting my way out of a brutality or a fatality, learning to spit poison or stay reckless to protect myself but in the process puncture myself further.
I trade sleep for boys who never comfort me or ease the wounds.
It’s not their job, but goddammit, I wish it were.
My new coworker has helped me, slowly, reimagine a world of safety. Though, I know, that’s a stretch—more of the community dies each day.
I read an article that said another one of our transgender-sisters was killed. I think about sunsets and time, and I feel like crying because the world sharpens its teeth and smirks, and our president doesn’t even care.
What is there to live for when the best of us is gone?
My coworker is a veteran, and he’s beautiful. His trauma etches his smile, the skin that lays itself to be better—he calls me bud and I hate that, but I know he’s sincere and doesn’t harm me.
 I wish life were this simple all the time.
A way to let a fire burn down, settle itself, boys with trauma finding solace in each other’s company, let it be like this, unafraid and unhindered by society.
Less blood, more brevity, heal and resurrect those beautiful members of our community trying to survive each day. They live as the true deities, and they are the best at the real-world mortal kombat. I sense darkness when I shut my eyes and I’m trying to see a world where I have moments like me and my coworker had on a cold night in Lynchburg.
Simply existing, a little cosmic dust in the space of demons, looking to destroy our lives.

I wish it were that easy, how we wish.
I work overnight while the world knocks itself out for the day, I see something shimmer at the corner of my eye, I feel torn to shreds and my phone blinks and it’s someone I love asking how I am, it’s raining back home, the cold is what they miss.
I miss them. I slowly catch myself down, resisting an emotion like waves beating against a cliff, push and give, the weight slowly putting me out and now, I’m wanting to brutally fight it to death, this feeling—to pick my favorite character and have a go and beat it into my favorite fatality move. FINISH HIM.