ReachMaster User Interface¶
The primary graphical user interface used to control and run experiments.
- Example:
From terminal:
$ python reach_master.py
- Todo:
- Create executable
- Automate unit tests
Root Application Window¶
The root application window provides functionality for selecting a data output directory, a configuration file, connecting to the experiment and robot controllers, accessing the settings windows, basic rig control, as well as selecting and running protocols.
- Examples:
From terminal:
$ python application.py
From python interpreter:
>>> import reachmaster.application >>> rm = application.ReachMaster() >>> rm.run()
- Todo:
- Automated unit tests
-
class
reachmaster.application.
ReachMaster
[source]¶ The primary class for the root ReachMaster application.
Configures and provides callback methods for the root application window. The run() method detects events during normal operation and the on_quit() method is called prior to application destruction.
-
window
¶ Tkinter object that constructs the root application window.
Type: instance
-
config
¶ The current configuration settings for the application.
Type: dict
-
data_dir
¶ Tkinter StringVar that captures the user-selected data output directory.
Type: instance
-
config_file
¶ Tkinter StringVar that captures the user-selected configuration file.
Type: instance
-
port_list
¶ List of serial port names with connected devices.
Type: list(str)
-
exp_control_port
¶ Tkinter StringVar that captures the user-selected port from the port list for the experiment microcontroller.
Type: instance
-
rob_control_port
¶ Tkinter StringVar that captures the user-selected port from the port list for the robot microcontroller.
Type: instance
-
protocol_list
¶ List of protocol options.
Type: list(str)
-
protocol
¶ Tkinter StringVar that captures the user-selected protocol.
Type: instance
-
running
¶ True if the root application window has not been destroyed.
Type: bool
-
exp_connected
¶ True if interface to the experiment microcontroller is active.
Type: bool
-
rob_connected
¶ True if interface to the robot microcontroller is active.
Type: bool
-
protocol_running
¶ True while an experiment protocol is being executed.
Type: bool
-
child
¶ Tkinter Toplevel object that constructs child window selected by the user from the root application window. Defaults to None when child window is closed.
Type: NoneType or instance
-
deliver_water_callback
()[source]¶ Opens the reward solenoid for the reward duration set in experiment settings.
-
exp_connect_callback
()[source]¶ Connects to the experiment microcontroller located at the user selected port.
-
flush_water_callback
()[source]¶ Opens the reward solenoid for the flush duration set in experiment settings.
-
move_rob_callback
()[source]¶ Commands the robot to move to the next position in its currently loaded command sequence.
-
on_quit
()[source]¶ Called prior to destruction of the ReachMaster application.
Prevents destruction if any child windows are open. Asks user to save the configuration file to the data directory. Stops all active interfaces.
-
Camera Settings¶
The camera settings window is opened as a child of the ReachMaster root application. It is designed, mainly to specify settings required by Ximea USB3.0 cameras via the camera interface module and the Ximea API. It provides functionality for specifying the number of cameras, setting their intrinsic parameters (e.g., exposure, gain, triggers, etc.), and data output parameters (e.g., cropping, pixel resolution, etc.). It provides functions to capture images and record videos which can be used by post-hoc camera calibration rotuines. It also provides functions for adding, removing and saving pixels-of-interest which are used by the experiment protocols for reach detection.
- Todo:
- Automate unit tests
-
class
reachmaster.settings.camera_settings.
CameraSettings
(parent)[source]¶ The primary class for the camera settings window.
Configures and provides window callback methods. Also provides methods to stream/record video and capture images that can be used for post hoc analyses (e.g., camera calibration). The on_quit() method is called prior to application destruction.
-
config
¶ The current configuration settings for the application
Type: dict
-
exp_controller
¶ Serial interface to the experiment microcontroller which is used to trigger the cameras
Type: instance
-
exp_connected
¶ True if the experiment interface is active
Type: bool
-
num_cams
¶ Tkinter StringVar that captures the user-selected number of cameras
Type: instance
-
fps
¶ Tkinter StringVar that captures the user-selected frames per second
Type: instance
-
exposure
¶ Tkinter StringVar that captures the user-selected camera exposure
Type: instance
-
gain
¶ Tkinter StringVar that captures the user-selected camera gain.
Type: instance
-
gpi_mode
¶ Tkinter StringVar that captures the camera input mode. Currently, this is selected by the configuration file and not the user as it is assumed all camera interfaces will trigger images with the same method.
Type: instance
-
trigger_source
¶ Tkinter StringVar that captures the user-selected camera trigger source. Defers to the configuration file. Do not change unless you know what you are doing.
Type: instance
-
gpo_mode
¶ Tkinter StringVar that captures the user-selected camera sync output mode.
Type: instance
-
img_width
¶ Tkinter StringVar that captures the user-selected image width in pixels. Must be less than your camera’s maximum allowable image width and divisible by it’s width increment value. See your camera’s manual for details.
Type: instance
-
img_height
¶ Tkinter StringVar that captures the user-selected image height in pixels. Must be less than your camera’s maximum allowable image width and divisible by it’s width increment value. See your camera’s manual for details.
Type: instance
-
offset_x
¶ Tkinter StringVar that captures the user-selected image horizontal offset in pixels. Must be less than your camera’s maximum allowable image width minus the selected img_width. See your camera’s manual for details.
Type: instance
-
offset_y
¶ Tkinter StringVar that captures the user-selected image vertical offset in pixels. Must be less than your camera’s maximum allowable image width minus the selected img_height. See your camera’s manual for details.
Type: instance
-
downsampling
¶ Tkinter StringVar that captures the user-selected image downsampling. Can be ‘XI_1x1’ (full resolution) or ‘XI_2x2’ (1/4 resolution). The latter can only be used when no cropping or offsets are applied.
Type: instance
-
poi_threshold
¶ Tkinter StringVar that captures the user-selected pixel-of-interest (poi) threshold (standard deviations) used for reach detection.
Type: instance
-
streaming
¶ True if camera interface is acquiring and displaying images.
Type: bool
-
cams_connected
¶ True if camera interface is active.
Type: bool
-
draw_saved
¶ True if saved poi’s should be displayed while streaming.
Type: bool
-
add_pois
¶ True if clicking on images should add new poi’s during streaming.
Type: bool
-
remove_pois
¶ True if clicking on images should remove added or saved poi’s during streaming.
Type: bool
-
added_pois
¶ A nested list of added poi coordinates for each camera.
Type: list
-
saved_pois
¶ A nested list of saved poi coordinates for each camera.
Type: list
-
capture
¶ True if image should be saved to png while streaming.
Type: bool
-
record
¶ True while recording video.
Type: bool
-
img_num
¶ Counts captured images
Type: int
-
add_pois_callback
()[source]¶ Allows the user to add new pixels-of-interest by clicking the desired pixel using the cursor. Unsaved added pixels are displayed in red.
-
capture_image_callback
()[source]¶ Allows the user to capture an image while streaming. The image is saved to the calibration images folder in the data output directory.
-
load_pois_callback
()[source]¶ Loads previously saved pixels-of-interest and displays them over the streaming images in green.
-
on_quit
()[source]¶ Called prior to destruction of the camera settings window.
Prior to destruction, the configuration file must be updated to reflect the change in settings, and any active interfaces must be closed.
-
remove_pois_callback
()[source]¶ Allows the user to removed either saved or unsaved pixels-of-interest. However, the user must save all added pixels in order for the changes to be reflected in the configuration file.
-
save_pois_callback
()[source]¶ Saves all added and/or removed pixel-of-interest to the configuration file.
-
Experiment Settings¶
The experiment settings window is opened as a child of the ReachMaster root application. It allows the user to set any experiment parameters required by the experiment microcontroller (e.g., number/size of rewards, trial delays, etc.).
- Todo:
- Move protocol type options here?
- Automate unit tests
-
class
reachmaster.settings.experiment_settings.
ExperimentSettings
(parent)[source]¶ The primary class for the experiment settings window.
-
config
¶ The current configuration settings for the application
Type: dict
-
lights_on_dur
¶ Tkinter StringVar that captures the user-selected duration (ms) lights should remain on during a trial when protocol type is ‘TRIALS’. If a reach is not detected in under this duration, the lights will turn off until the next trial is intitiated.
Type: instance
-
lights_off_dur
¶ Tkinter StringVar that captures the user-selected duration (ms) lights should remain off between trials when prtocol type is ‘TRIALS’.
Type: instance
-
reward_win_dur
¶ Tkinter StringVar that captures the user-selected duration (ms) for which rewards rewards are delivered once the handle is successfully pulled into the reward zone.
Type: instance
-
max_rewards
¶ Tkinter StringVar that captures the user-selected maximum number of rewards (int) delivered for a successful reach.
Type: instance
-
solenoid_open_dur
¶ Tkinter StringVar that captures the user-selected solenoid open duration (ms) which sets the individual reward size. Solenoid calibration must be performed to get the mapping from duration (ms) to volulme (mL).
Type: instance
-
solenoid_bounce_dur
¶ Tkinter StringVar that captures the user-selected minimum duration (ms) the solenoid should remain closed between reward deliveries. Note the redundancy with reward_win_dur and max_rewards.
Type: instance
-
flush_dur
¶ Tkinter StringVar that captures the user-selected duration (ms) the solenoid should remain open while flushing the lines.
Type: instance
-
reach_delay
¶ Tkinter StringVar that captures the user-selected minimum duration animals are required to wait before attempting a reach after a trial is initiated when protocol type is ‘TRIALS’. Once the lights turn on, if a reach is attempted before the end of the delay, the trial is haulted and the lights are turned off. This enforces a timeout period to discourage animals from performing reaches between trials.
Type: instance
-
Robot Settings¶
The robot settings window is opened as a child of the ReachMaster root application. It allows the user to set any parameters required by the robot microcontroller (e.g., position smoothing, valve periods etc.), or having to do with the robot kinematics. It provides options for the user to select previously generated calibration and position command files. Soon it will allow users to run a robot calibration routine from within the ReachMaster application.
- Todo:
- Add labels to specify the microcontroller/kinematics parameters
- Run calibration callback
- Re-add load calibration callback?
- Automate unit tests
-
class
reachmaster.settings.robot_settings.
RobotSettings
(parent)[source]¶ The primary class for the robot settings window.
Configures and provides window callback methods. Also provides methods to select robot calibration files, position command files, as well as methods used to sample positions from the command file. The on_quit() method is called prior to application destruction.
-
config
¶ The current configuration settings for the application
Type: dict
-
pos_smoothing
¶ Tkinter StringVar that captures the user-selected position smoothing parameter (0-1, 0 less smoothing).
Type: instance
-
tol
¶ Tkinter StringVar that captures the user-selected tolerance (bits) for accepting robot convergence to the command position. (i.e., the L2-norm of the potentiometer readings must be less than tol).
Type: instance
-
period
¶ Tkinter StringVar that captures the user-selected valve period (us). Equivalent to pulse width modulation (PWM) period.
Type: instance
-
off_dur
¶ Tkinter StringVar that captures the user-selected minimum off duration (ms) that is enforced between convergence times. Once the robot converges to a command position, it will not move to a new command position for this duration.
Type: instance
-
num_tol
¶ Tkinter StringVar that captures the user-selected number of consecutive periods the robot must be within convergence in order to be considered “in position”.
Type: instance
-
(x/y/z)_(push/pull)_wt
Tkinter StringVar that captures the user-selected weighting coefficient placed on the x/y/z actuator in the push/pull direction. Acts as a gain on the calibration coefficients. Typically defaults to 1 for a good calibration, but gives the user an option to make quick manual adjustments without runnning an entirely new calibration. Not used very often in practice.
Type: instance
-
rew_zone_x
¶ Tkinter StringVar that captures the user-selected minimum x position (bits) the handle must cross in order to enter the reward zone.
Type: instance
-
rew_zone_
(y/z)_(min/max)¶ Tkinter StringVar that captures the user-selected min/max x/z positions (bits) the handle must be within in order to be located in the reward zone. Conditions must be satisfied on all actuators simultaneously.
Type: instance
-
calibration_file
¶ Tkinter StringVar that captures the user-selected robot calibration file.
Type: instance
-
command_file
¶ Tkinter StringVar that captures the user-selected position command file.
Type: instance
-
command_type
¶ Tkinter StringVar that captures the user-selected option determining how commands are generated. Can be read_from_file, sample_from_file, or parametric_sample. The read_from_file option takes the commands directly from the command file. The sample_from_file option generates a sequence of commands by sampling from the command file with replacement. The parametric_sample option does not use the command file. Rather, it samples commands uniformly from the reach volume determined by user-selected inverse kinematics parameters.
Type: instance
-
(y/z)gimbal_to_joint
Tkinter StringVar that captures the user-measured center-to-center distance (mm) from an y/z gimbal to its respective spherical joint (link to hardware page).
Type: instance
-
(x/y/z)gimbal_(x/y/z)offset
Tkinter StringVar that captures the user-measured offset (mm) of the (x/y/z) gimbal from the origin in the (x/y/z) direction.
Type: instance
-
(x/y/z)_origin
Tkinter StringVar that captures the user-measured (x/y/z) position (bits) of the origin.
Type: instance
-
reach_dist_
(min/max)¶ Tkinter StringVar that captures the user-specified (min/max) reach distance of the reach volume.
Type: instance
-
reach_angle_max
¶ Tkinter StringVar that captures the user-specified max reach angle (rad) of the reach volume.
Type: instance
-
calibration_browse_callback
()[source]¶ Allows the user to select a calibration file to be loaded to the robot microcontroller.
-
command_browse_callback
()[source]¶ Allows the user to select a position command file to be loaded to the robot microcontroller.
-
Protocols¶
The protocol window is opened as a child of the ReachMaster root application whenever a protocol is run. It provides basic functionality for interacting with the rig while an experiment is running (e.g., for manual reward delivery, toggling lights, etc.).
- Todo:
- Keep adding new protocol types
- Automate unit tests
-
class
reachmaster.protocols.
Protocols
(parent)[source]¶ The primary class for the protocol window.
Configures and provides window callback methods. Also provides special run methods that implement each of the protocol types. The run methods work in concert with the interface modules and microntroller scripts to implement the event logic required by a specific experiment. If an experiment requires a new protocol type that is not currently available, implementing a new run method will often be a good place to start.
-
ready
¶ True when it is okay to call the run method.
Type: bool
-
config
¶ The current configuration settings for the application.
Type: dict
-
exp_connected
¶ True when experiment controller interface is activated.
Type: bool
-
rob_connected
¶ True when robot controller interface is activated.
Type: bool
-
cams_connected
¶ True when camera interface is activated.
Type: bool
-
lights_on
¶ True if neopixel lights are on.
Type: bool
-
baseline_acquired
¶ True is camera processes have collected all baseline images.
Type: bool
-
reach_detected
¶ True if the minimum pixel of interest deviaton across all cameras in greater than the selected threshold.
Type: bool
-
reach_init
¶ Time at which most recent reach was detected.
Type: int
-
control_message
¶ Character message that is sent to the experiment controller according to the communication protocol.
Type: char
-
exp_response
¶ Character received in response to the control_message from the experiment controller interpreted according to the communication protocol.
Type: char
-
deliver_water_callback
()[source]¶ Opens the reward solenoid for the reward duration set in experiment settings.
-
move_robot_callback
()[source]¶ Commands the robot to move to the next position in its currently loaded command sequence.
-
on_quit
()[source]¶ Called prior to destruction protocol window.
Prior to destruction, all interfaces must be stopped.
-
run
()[source]¶ Execute a single iteration of the selected protocol type.
The currently supported protocol types are TRIALS and CONTINUOUS. In order to add a custom type, developers must write a run_newtype() method and add it to the call search here. The run methods for each protocol type are where all the vital real-time operations are executed via communication with the interface modules.
-
run_continuous
()[source]¶ Operations performed for a single iteration of protocol type CONTINOUS.
If an image is triggered by the experiment controller, reach detection is performed on the images, the images are concatenated, and encoded to mp4 continuously, even during intertrial intervals, in real-time. Consequently, for this protocol type, the lights remain on during the intertrial interval. Messages are sent to the experiment controller to signal important events such as reach detections, beginnings/ends of trials, and to initiate robot movement. Responses are read from the experiment controller and saved to the controller data output file.
- Todo:
- Functionalize code chunks so logic is clearer and custom protocol types are easier to implement.
- Absorb communication codes into experiment interface module and document
-
run_trials
()[source]¶ Operations performed for a single iteration of protocol type TRIALS.
If an image is triggered by the experiment controller, reach detection is performed on the images. For this protocol type, the lights are turned off during the intertrial interval and a separate video is encoded for each trial. Messages are sent to the experiment controller to signal important events such as reach detections, beginnings/ends of trials, and to initiate robot movement. Responses are read from the experiment controller and saved to the controller data output file.
- Todo:
- Functionalize code chunks so logic is clearer and custom protocol types are easier to implement.
- Absorb communication codes into experiment interface module and document
-
Camera Interface¶
This module provides a wrapper library for interfacing with Ximea machine vision USB3.0 cameras via the Ximea API. It also provides a high performance video encoding and online feature detection class for use by protocols that require high frame rates.
- Todo:
- Automated unit tests
- Fix camera connection bug
- Integrate ffmpeg settings into configuration file
- Create a Video Settings module?
-
class
reachmaster.interfaces.camera_interface.
CameraInterface
(config)[source]¶ The primary class for the camera interface module.
Creates a multiprocess object that performs gpu-accelerated video encoding and feature (i.e., reach) detection on separate processes. Interprocess communication and synchronization is achieved using pipe messages.
-
config
¶ The current configuration settings for the application.
Type: dict
-
ffmpeg_command
¶ Arguments to the ffmpeg subprocess for video encoding.
Type: list
-
camera_processes
¶ List of multiprocessing Process objects. One per camera.
Type: list
-
cam_trigger_pripes
¶ List of two-way multiprocessing Pipe objects. Allows the parent process to alert a child camera process that its camera has been triggered. Allows the camera process to alert the parent process when it is triggerable (i.e., after the most recent image has been encoded).
Type: list
-
poi_deviation_pipes
¶ List of one-way multiprocessing Pipe objects. Allows a child camera process to send the parent process the deviation from baseline of the pixels of interest used for reach detection.
Type: list
-
trial_ended_pipes
¶ List of one-way multiprocessing Pipe objects. Allows the parent process to alert a child camera process when a trial has ended.
Type: list
-
cams_started
¶ Boolean multiprocessing shared memory variable. True when camera processing are running.
Type: <class ‘multiprocessing.sharedctypes.Synchronized’>
-
all_triggerable
()[source]¶ Check if camera processes are ready for cameras to be triggered.
Returns: triggerable – True if cameras ready. Return type: bool
-
get_poi_deviation
()[source]¶ Check the smallest deviation from baseline of pixels of interest across all cameras.
Returns: dev – The minimum deviation across all cameras. Return type: int
-
-
reachmaster.interfaces.camera_interface.
get_npimage
(cam, img)[source]¶ Get the most recent image from a camera as a numpy array.
Parameters: - cam (ximea.xiapi.Camera) – A ximea api Camera object.
- img (ximea.xiapi.Image) – A ximea api Image container object
Returns: npimg – The most recently acquired image from the camera as a numpy array.
Return type: numpy.ndarray
-
reachmaster.interfaces.camera_interface.
init_image
()[source]¶ Initialize a ximea container object to store images.
Returns: img – A ximea api Image container object Return type: ximea.xiapi.Image
Experiment Interface¶
This module provides a set of functions for interfacing with the experiment microcontroller. It provides functions to recognize and establish serial connections to the controller, read/write settings, execute common callbacks located in the other modules, and read/write custom messages.
- Todo:
- Object orient
- Automate unit tests
- Limit custom messages by absorbing communication codes from protocols module
-
reachmaster.interfaces.experiment_interface.
deliver_water
(exp_controller)[source]¶ Send a message to experiment controller to open the solenoid for the user-selected reward duration.
Parameters: exp_controller (serial.serialposix.Serial) – The serial interface to the experiment controller.
-
reachmaster.interfaces.experiment_interface.
flush_water
(exp_controller)[source]¶ Send a message to experiment controller to opens the solenoid for the user-selected flush duration.
Parameters: exp_controller (serial.serialposix.Serial) – The serial interface to the experiment controller.
-
reachmaster.interfaces.experiment_interface.
get_ports
()[source]¶ List all serial port with connected devices.
Returns: port_list – Names of all the serial ports with connected devices. Return type: list(str)
-
reachmaster.interfaces.experiment_interface.
move_robot
(exp_controller)[source]¶ Send a message to experiment controller to command the robot to move to the next position in its command sequence.
Parameters: exp_controller (serial.serialposix.Serial) – The serial interface to the experiment controller.
-
reachmaster.interfaces.experiment_interface.
read_response
(exp_controller)[source]¶ Read a line of data from the experiment controller in response to the most recently written message.
Parameters: exp_controller (serial.serialposix.Serial) – The serial interface to the experiment controller. Returns: response – The line of data received from the experiment controller in response to the most recently written message. Return type: str
-
reachmaster.interfaces.experiment_interface.
set_exp_controller
(exp_controller, config)[source]¶ Load the experiment settings to the experiment controller.
Parameters: - exp_controller (serial.serialposix.Serial) – The serial interface to the experiment controller.
- config (dict) – The currently loaded configuration file.
-
reachmaster.interfaces.experiment_interface.
start_experiment
(exp_controller)[source]¶ Send a message to experiment controller to begin executing an experiment protocol.
Parameters: exp_controller (serial.serialposix.Serial) – The serial interface to the experiment controller. Returns: response – The first line of data received from the experiment controller verifying that the protocol has been initiated. Return type: str
-
reachmaster.interfaces.experiment_interface.
start_interface
(config)[source]¶ Establish a serial connection with the experiment controller.
Parameters: config (dict) – The currently loaded configuration file. Returns: exp_controller – The serial interface to the experiment controller. Return type: serial.serialposix.Serial
-
reachmaster.interfaces.experiment_interface.
stop_interface
(exp_controller)[source]¶ Perform a soft reboot of the experiment controller and close the serial connection.
Parameters: exp_controller (serial.serialposix.Serial) – The serial interface to the experiment controller.
-
reachmaster.interfaces.experiment_interface.
toggle_led
(exp_controller)[source]¶ Send a message to experiment controller to toggle the LED located on the robot handle.
Parameters: exp_controller (serial.serialposix.Serial) – The serial interface to the experiment controller.
-
reachmaster.interfaces.experiment_interface.
toggle_lights
(exp_controller)[source]¶ Send a message to experiment controller to toggle the neopixel lights.
Parameters: exp_controller (serial.serialposix.Serial) – The serial interface to the experiment controller.
-
reachmaster.interfaces.experiment_interface.
trigger_image
(exp_controller)[source]¶ Send a message to experiment controller to trigger the cameras to capture an image.
Parameters: exp_controller (serial.serialposix.Serial) – The serial interface to the experiment controller.
-
reachmaster.interfaces.experiment_interface.
write_message
(exp_controller, message)[source]¶ Read a line of data from the experiment controller in response to the most recently written message.
Parameters: - exp_controller (serial.serialposix.Serial) – The serial interface to the experiment controller.
- message (str) – A string that is recognizeable by the experiment controller.
Robot Interface¶
This module provides a set of functions for interfacing with the robot microcontroller. It provides functions to recognize and establish serial connections to the controller, read and write settings, and to load calibration and command files. Soon it will provide methods to load user-selected scripts to/from the controller in order to execute various robot calibration routines.
- Todo:
- Object orient
- Automate unit tests
- Ability to load user-selected controller scipts
-
reachmaster.interfaces.robot_interface.
get_ports
()[source]¶ List all serial port with connected devices.
Returns: port_list – Names of all the serial ports with connected devices. Return type: list(str)
-
reachmaster.interfaces.robot_interface.
load_config_calibration
(rob_controller, config)[source]¶ Load the calibration parameters to the robot controller.
Uses the calibration file selected in the configuration file.
Parameters: - rob_controller (serial.serialposix.Serial) – The serial interface to the robot controller.
- config (dict) – The currently loaded configuration file.
-
reachmaster.interfaces.robot_interface.
load_config_commands
(rob_controller, config)[source]¶ Load the position commands to the robot controller.
Uses the method determined by the command type selected in the configuration file. Currently, the options are read_from_file, sample_from_file, or parametric_sample. The read_from_file option takes the commands directly from the command file. The sample_from_file option generates a sequence of commands by sampling rows from the command file with replacement. For both of these options, the command file is assumed to have three columns ordered as reach distance, azimuth, elevation. The parametric_sample option does not use the command file. Rather, it samples commands uniformly from the reach volume determined by the user-selected inverse kinematics parameters.
- Todo:
- Further functionalize for better clarity.
Parameters: - rob_controller (serial.serialposix.Serial) – The serial interface to the robot controller.
- config (dict) – The currently loaded configuration file.
Returns: config – The configuration file possibly updated to include the command values that were loaded.
Return type: dict
-
reachmaster.interfaces.robot_interface.
set_rob_controller
(rob_controller, config)[source]¶ Load all the robot settings to the robot controller.
Parameters: - rob_controller (serial.serialposix.Serial) – The serial interface to the robot controller.
- config (dict) – The currently loaded configuration file.
Returns: config – The configuration file possibly updated to include the command values that were loaded.
Return type: dict
-
reachmaster.interfaces.robot_interface.
start_interface
(config)[source]¶ Establish a serial connection with the robot controller.
Parameters: config (dict) – The currently loaded configuration file. Returns: rob_controller – The serial interface to the robot controller. Return type: serial.serialposix.Serial
Configuration Files¶
Module for working with configuration files.
Configurations files are json files that store all the settings used in a ReachMaster session. Functions are provided to generate default configuration files, as well as to save and load previous configurations. This encourages persistence of settings across experiments.
- Todo:
- Automate unit tests
- Integrate ffmpeg settings
- Flesh out field descriptions
-
reachmaster.config.
default_config
()[source]¶ Generate a configuration populated with sensible defaults.
Returns: A default configuration. Return type: dict
-
reachmaster.config.
save_config
(config)[source]¶ Save a configuration file.
This is typically called upon closing application if the user responds yes to the save prompt. The configuration is given the current datetime as a name and saved to a json in the config folder of the user-selected data output directory.
Parameters: config (dict) – The currently loaded configuration.
-
reachmaster.config.
load_config
(file_handle)[source]¶ Load a configuration file.
Typically loads a file selected by user from the configuration browser in the root ReachMaster application window.
Parameters: file_handle (file) – An open, previously saved json configuration file. Returns: A default configuration. Return type: dict
-
reachmaster.config.
save_tmp
(config)[source]¶ Save the configuration to a temp file.
The global state of ReachMaster is tracked using a temp file. Whenever a child window of the main application is created or destroyed, the temp file is updated to reflect whatever changes in settings may have occurred. If the user forgets to save the configuration file at the end of a session, this temp file can be used for recovery. It is saved to the temp folder in the ReachMaster root directory. Warning: the temp file is reset to the default configuration whenever a new instance of ReachMaster is started!
Parameters: config (dict) – The currently loaded configuration.


dev5forty
We deliver reliability, security and speed backed by expert support. We hand code every WordPress site from scratch, just for you.
We deliver reliability, security and speed backed by expert support. We hand code every WordPress site from scratch, just for you.
Subscribe to our mailing list! No spam, ever. We promise.
You can choose from any of the three web developement services we offer.
 Capicola jerky sirloin ball tip tail, corned beef short ribs pastrami.
 Capicola jerky sirloin ball tip tail, corned beef short ribs pastrami.
 Capicola jerky sirloin ball tip tail, corned beef short ribs pastrami.
 Capicola jerky sirloin ball tip tail, corned beef short ribs pastrami.


| Usage | Synopsis |
|---|---|
| Upload your app without publishing | $ appbuilder appmanager upload wp8 [--download] |
| Upload and publish your app | $ appbuilder appmanager upload wp8 [--download] --publish [--public] [--send-email] [--send-push] [--group <Group ID> [--group <Group ID>]*] |
Builds the project for Windows Phone and uploads the application to Telerik AppManager. If you have not set the --publish
switch, after the upload completes, you need to go to your app in Telerik AppManager, manually configure it for distribution and publish it.
If you want to re-deploy an already deployed Windows Phone 8.1 application, verify that you have updated the BundleVersion property in the project properties. Otherwise, your changes will not be updated on the device.
To update the version property, run the following command.
appbuilder prop set BundleVersion <Value>
--download
- If set, downloads the application package and its decrypted WMAppManifest.xml
to the root of the project.--publish
- If set, after the upload completes, automatically publishes the application package for the members of its distribution groups. You can set additional distribution groups with the --groups
option.--public
- If set, the published application will be available for download without requiring AppManager user credentials.--send-email
- If set, after publishing your app, Telerik AppManager sends an email with the link to the app to the distribution groups, assigned to the published app. This option is applicable only when the --publish
switch is set. --send-push
- If set, after publishing your app, Telerik AppManager sends a push notification that a new version is available to all registered devices in the distribution groups, assigned to the published app. This option is applicable only when the --publish
switch is set.--group
- Assigns additional distribution groups for the application. You can set multiple groups by specifying the --group
option multiple times. You can set a group by index or name. To list the available groups, run $ appbuilder appmanager groups
--publish
switch is set.<Group ID>
is the index or name of the group as listed by $ appbuilder appmanager groups
.--send-email
, --send-push
and --group
options are applicable only when the --publish
switch is set.| Command | Description |
|---|---|
| appmanager upload | Lets you work with Telerik AppManager. |
| appmanager upload ios | Builds the project for iOS and uploads the application to Telerik AppManager. |
| appmanager livesync | Publishes a new update of your application in Telerik AppManager. |
| appmanager groups | Lists the distribution groups configured in your Telerik AppManager portal. |
| appstore | Lets you work with your iTunes Connect account. |
| appstore list | Lists all application records in iTunes Connect. |
| appstore upload | Builds the project and uploads the application to iTunes Connect. |
| certificate | Lists all configured certificates for code signing iOS and Android applications with index and name. |
| certificate create-self-signed | Creates a self-signed certificate for code signing Android applications. |
| certificate export | Exports a selected certificate from the server as a P12 file. |
| certificate import | Imports an existing certificate from a P12 or a CER file stored on your local file system. |
| certificate remove | Removes a selected certificate from the server. |
| certificate-request create | Creates a certificate signing request. |
| certificate-request download | Downloads a pending certificate signing request. |
| certificate-request remove | Removes a pending certificate signing request. |
| certificate-request | Lists all pending certificate signing requests. |
| provision | Lists all configured provisioning profiles for code signing iOS applications with index and name. |
| provision import | Imports the provisioning profile stored in the selected file. |
| provision remove | Removes the selected provisioning profile. |


appends values or an array of values to the data object
void
append
(array|string $name, [mixed $val = null], [bool $merge = false])
-
array|string
$name: an associative array of multiple (index=>value) or a string that is the index to use, i.e. a value assigned to "foo" will be accessible in the template through {$foo}
-
mixed
$val: the value to assign, or null if $name was an array
-
bool
$merge: true to merge data or false to append, defaults to false
appends a value by reference to the data object
void
appendByRef
(string $name, &$val, [bool $merge = false], mixed $val)
-
string
$name: the index to use, i.e. a value assigned to "foo" will be accessible in the template through {$foo}
-
mixed
$val: the value to append by reference
-
bool
$merge: true to merge data or false to append, defaults to false
-
&$val
assigns a value or an array of values to the data object
void
assign
(array|string $name, [mixed $val = null])
-
array|string
$name: an associative array of multiple (index=>value) or a string that is the index to use, i.e. a value assigned to "foo" will be accessible in the template through {$foo}
-
mixed
$val: the value to assign, or null if $name was an array
assigns a value by reference to the data object
void
assignByRef
(string $name, &$val, mixed $val)
-
string
$name: the index to use, i.e. a value assigned to "foo" will be accessible in the template through {$foo}
-
mixed
$val: the value to assign by reference
-
&$val
clears a the entire data or only the given key
void
clear
([array|string $name = null])
-
array|string
$name: clears only one value if you give a name, multiple values if you give an array of names, or the entire data if left null
returns a variable if it was assigned
mixed
get
(string $name)
-
string
$name: the variable name
returns the data array
array
getData
()
Implementation of:
- Dwoo_IDataProvider::getData()
- returns the data as an associative array that will be used in the template
returns true if the variable has been assigned already, false otherwise
bool
isAssigned
(string $name)
-
string
$name: the variable name
merges the given array(s) with the current data with array_merge
void
mergeData
( $data, array $data2)
-
array
$data: the array to merge
-
array
$data2: $data3 ... other arrays to merge, optional, etc.
overwrites the entire data with the given array
void
setData
( $data)
-
array
$data: the new data array to use
unassigns/removes a variable
void
unassign
(string $name)
-
string
$name: the variable name
allows to read variables using the object syntax
mixed
__get
(string $name)
-
string
$name: the variable name
supports calls to isset($dwooData->var)
void
__isset
(string $name)
-
string
$name: the variable name
allows to assign variables using the object syntax
void
__set
(string $name, string $value)
-
string
$name: the variable name
-
string
$value: the value to assign to it
supports unsetting variables using the object syntax
void
__unset
(string $name)
-
string
$name: the variable name


We are SIGCHI, ACM's special interest group for Human-Computer Interaction. CHI is a multidisciplinary field within computer science that focuses on the interaction between humans and computers. We look at how technology can be designed and engineered to help humans. Despite the circumstances of COVID-19, we have decided to continue with the group’s operations online. We will mainly utilize Zoom and Discord for meetings. Join our mailing list for more updates this semester!
We are SIGCHI, ACM's special interest group for Human-Computer Interaction. CHI is a multidisciplinary field within computer science that focuses on the interaction between humans and computers. We look at how technology can be designed and engineered to help humans. Despite the circumstances of COVID-19, we have decided to continue with the group’s operations online. We will mainly utilize Zoom and Discord for meetings. Join our mailing list for more updates this semester!
We are SIGCHI, ACM's special interest group for Human-Computer Interaction. CHI is a multidisciplinary field within computer science that focuses on the interaction between humans and computers. We look at how technology can be designed and engineered to help humans. Despite the circumstances of COVID-19, we have decided to continue with the group’s operations online. We will mainly utilize Zoom and Discord for meetings. Join our mailing list for more updates this semester!
We are SIGCHI, ACM's special interest group for Human-Computer Interaction. CHI is a multidisciplinary field within computer science that focuses on the interaction between humans and computers. We look at how technology can be designed and engineered to help humans. Despite the circumstances of COVID-19, we have decided to continue with the group’s operations online. We will mainly utilize Zoom and Discord for meetings. Join our mailing list for more updates this semester!
We are SIGCHI, ACM's special interest group for Human-Computer Interaction. CHI is a multidisciplinary field within computer science that focuses on the interaction between humans and computers. We look at how technology can be designed and engineered to help humans. Despite the circumstances of COVID-19, we have decided to continue with the group’s operations online. We will mainly utilize Zoom and Discord for meetings. Join our mailing list for more updates this semester!


--- title: "MAPS Crowdsourced Open Science Project: Data Exploration" author: "Corey Pembleton" date: '2019-04-27' slug: crowdsourced-open-science-project-data-exploration categories: [ "R", "dataexploration"] tags: ["data cleaning", "statistics", "naniar", "tidyverse", "kableExtra"] thumbnailImagePosition: "left" thumbnailImage: "/img/naniar.png" output: blogdown::html_page: highlight: tango ---
In this previous post, the OpenNorth team explained the goals of this research project, and now that I have access to the data, it’s time to dig in and have a look at the data used for the analysis, particularly to gain an understanding of the variables used in the 16 models tested, and where NA
values can be found.
One of the contributors of the MAPS study, Robert Arbon, created a synthesized version of the ALSPAC dataset using the R SynthPop
package to account for privacy concerns, and gave a detailed documentation on how the synthetic dataset was created. This synthetic dataset will be used throughout this project.
The way the ALSPAC dataset was constructed means that there are large amounts of missing values (not all of the participants responded to all of the questions), in the original dataset this means that only 12.7% of participants had complete data on outcomes, exposure, and covariates. To address this, the research team uses imputation to fill in the gaps, using a method described as being similar to the Multiple Imputation by Chained Equations (MICE) method (described in detail here). The impacts of this will be reviewed in the next post on this topic.
The flow of how the authors arrived at only 12.7% of participants having completed the required outcomes/exposures/covariates looks like this, a process I’ll be replicating in this post.
As a first step, I would like to replicate the graphic in the figure above using the synthetic dataset provided by the Bristol research team.
The second figure in the flow diagram features 14,665 “live born offspring (singletons and twins) who had not withdrawn from the study”, which is my entire population:
## [1] 13734
The synthetic dataset provided has 13,734 participants, 1,291 less than that used in the study. This difference isn’t explicitly explained in Robert Arbon’s articles, but it is implied that is the result of removing any rows in common with the original dataset.
The next figure in the flow diagram, 4,562, is the number of participants who completed the CIS-R at the age of 18. This is either the variables dep_score
or dep_thoughts
:
## # A tibble: 1 x 1
## count
## <int>
## 1 4513
## # A tibble: 1 x 1
## count
## <int>
## 1 1805
Looks like the score is the variable that has been used, with a value of 4,513.
The third figure in the diagram, the exposure variable, is 3,009 participants with “exposure information at age 16”, meaning those who had screentime at the age of 16.
The authors of the study look at three types of screen use on weekdays and weekends: television screens, texting, and computer screens. I have saved these variables for computer use as vars_model1
:
#function to remove NA values from selection of variables
filter.NA.fun <- function(df, var){
var <- enquo(var)
df %>%
select(one_of(!!var)) %>%
filter_all(all_vars(!is.na(.))) %>%
summarise(count = n())
}
vars_model1 <- c("dep_score", "text_wend", "text_week", "tv_wend", "tv_week",
"comp_week", "comp_wend")
filter.NA.fun(orig_dat, vars_model1)
## # A tibble: 1 x 1
## count
## <int>
## 1 3043
Which gives a count of 3,043, not far from the original 3,009.
In the second model, the authors look at the variables in model 1, with nine additional covariates:
vars_model2 <- c("dep_score", "text_wend", "text_week", "tv_wend", "tv_week",
"comp_week", "comp_wend", "sex","anx_band_15",
"mat_anx_0m","mat_anx_1","mat_anx_18m", "mat_anx_8m",
"mat_dep", "mat_edu", "mat_ses")
filter.NA.fun(orig_dat, vars_model2)
## # A tibble: 1 x 1
## count
## <int>
## 1 1945
reducing the count of participants to 1,945 for Model 2.
Model 3 includes another 11 variables on top of those in Model 2, with 1,575 participants:
vars_model3 <- c("dep_score", "text_wend", "text_week", "tv_wend", "tv_week",
"comp_week", "comp_wend", "sex","anx_band_15",
"mat_anx_0m","mat_anx_1","mat_anx_18m", "mat_anx_8m",
"mat_dep", "mat_edu", "mat_ses", "iq", "pat_pres",
"pat_pres_10", "pat_pres_8", "num_home", "phys_cruel", "emot_cruel",
"child_bull","fam_tv_aft", "fam_tv_eve", "fam_tv_mor")
filter.NA.fun(orig_dat, vars_model3)
## # A tibble: 1 x 1
## count
## <int>
## 1 1575
Which begs the question, which “covariate information” is included in the final 1,869? It seems that it may be with Model 2 only, as Model 3 has nearly 300 participants missing.
The last and final determinant of participant relevance to the study, is the inclusion of a wide range of covariates, which the authors include in additional models 4a to 4l:
“Each of the sub-models of model 4 additionally adjusted for time spent engaging in one other activity on weekdays or weekends (time alone [model 4a], on transport [model 4b], playing outdoors in summer [model 4c], playing outdoors in winter [model 4d], playing with others [model 4e], drawing, making or constructing things [model 4f], exercising [model 4g], completing school or college work [model 4h], reading [model 4i], playing musical instruments [model 4j], talking on a mobile phone [model 4k] and talking on a landline phone [model 4l]).”
To get an idea of what the differences are in data availability across each of the models, I can test and review them using purrr::map()
(variable model lists not shown)):
all_model_vars <- list(vars_model1 = vars_model1, vars_model2 = vars_model2,
vars_model3 = vars_model3, vars_model4a = vars_model4a,
vars_model4b = vars_model4b,
vars_model4c = vars_model4c, vars_model4d = vars_model4d,
vars_model4e = vars_model4e, vars_model4f = vars_model4f,
vars_model4g = vars_model4g, vars_model4h = vars_model4h,
vars_model4i = vars_model4i, vars_model4j = vars_model4j,
vars_model4k = vars_model4k, vars_model4l = vars_model4l)
map_df(all_model_vars, filter.NA.fun, df = orig_dat) %>%
add_column(model = names(all_model_vars)) %>%
kableExtra::kable() %>% kableExtra::kable_styling(bootstrap_options = c("striped"))
| count | model |
|---|---|
| 3043 | vars_model1 |
| 1945 | vars_model2 |
| 1575 | vars_model3 |
| 1573 | vars_model4a |
| 1565 | vars_model4b |
| 1563 | vars_model4c |
| 1567 | vars_model4d |
| 1568 | vars_model4e |
| 1566 | vars_model4f |
| 1555 | vars_model4g |
| 1567 | vars_model4h |
| 1563 | vars_model4i |
| 1566 | vars_model4j |
| 1572 | vars_model4k |
| 1575 | vars_model4l |
While the mystery of why the final figure isn’t solved, I can still explore what the missing values are in the dataset further using the naniar
package, a step that will be useful when considering how to impute additional data later on.
Looking at the first model, what is missing where?
The majority of cases see missing values across all five variables together, although the amount of participants who haven’t completed the CIS-R at the age of 18, followed by those participants who didn’t report on screen use at the age of 16.
Looking at the missing values another way, we can see how each variable may have inconsistencies across sexes:
orig_dat %>% select(one_of(c(vars_model1, "sex"))) %>%
naniar::gg_miss_var(show_pct = TRUE, facet = sex)
Surprisingly, there is consistently more missing values for female than male participants - this can be explored a bit further with a quick count:
## # A tibble: 2 x 2
## sex count
## <chr> <int>
## 1 Female 7102
## 2 Male 6632
Surprisingly, the study has a column “sex” which has gender variables! But I stray from the point: there are 7,102 female and 6,632 male respondents, although this doesn’t speak to why there is proportional inconsistency.Looking at all variables shows a mostly consistent pattern when it comes to gender, so perhaps the distribution isn’t drastically different for the entire dataset:
orig_dat %>% naniar::gg_miss_var(show_pct = TRUE, facet = sex) + ggtitle("% missing values, by sex and variable")
Another interesting variable not thoroughly explored in the study, is economic class of the parents of participants.
Looking at maternal social standing first, it appears that Level (i) has a lower overall % of missing responses:
orig_dat %>% select(one_of(c(vars_model1, "mat_ses"))) %>%
naniar::gg_miss_var(show_pct = TRUE, facet = mat_ses) + ggtitle("% of missing values, by maternal social class")
Which is echoed with paternal social standing as well:
orig_dat %>% select(one_of(c(vars_model1, "pat_ses"))) %>%
naniar::gg_miss_var(show_pct = TRUE, facet = pat_ses)+ ggtitle("% of missing values, by paternal social class")
This indicates that there are proportionately more respondents from class (i), which according to the data dictionary indicates “professional, e.g. occupation”, and fewer from classes (iii) “manual skilled occupation”, (iv) “partly skilled occupation” and (v) “unskilled occupation”. This brings up the question - what is the relationship between social class, screen-time, and depression?
I believe there are many other ways to explore missing data, and understanding it has been a fundamentally important step prior to imputating the results across multiple datasets for analysis.
I would like to thank Nicholas Tierney, Dianne Cook, Miles McBain, Colin Fay, and all other contributors for the wonderful naniar
package, making working with tough data loaded with NA
’s a real pleasure.


Mr._Robot
Mr. Robot follows Elliot, a young programmer who works as a cyber-security engineer by day and as a vigilante hacker by night. Elliot finds himself at a crossroads when the mysterious leader of an underground hacker group recruits him to destroy the firm he is paid to protect. Compelled by his personal beliefs, Elliot struggles to resist the chance to take down the multinational CEOs he believes are running (and ruining) the world.


Redmi's most advanced Redmi Note yet
Designed for India
12MP + 5MP dual camera
Sony primary sensor,
1.25μm pixels
Sony primary sensor,
1.25μm pixels
20MP front camera
Soft Selfie-light
Soft Selfie-light
Snapdragon 636
Global debut
Global debut
15.2cm (5.99) FHD+
18:9 Full screen display
18:9 Full screen display
4000mAh (typ)
High-capacity battery
High-capacity battery
MIUI 9
Lightning fast
Lightning fast
Snapdragon 636, Global debut
Redmi Note 5 Pro is our fastest Redmi Note yet, and it features the global debut of all-new Snapdragon 636 — Qualcomm's newest 14nm offering.
This cutting-edge octa-core processor implements Kryo architecture which greatly improves overall performance and power efficiency.
The Snapdragon 636 outperforms it's predecessor* by up to 40%.
Up to 6GB of LPDDR4X RAM
Smooth performance, improved power-efficiency by 30%.


integrity
Out of utter honesy and integrity
Treat everyone fairly
Treat everyone fairly
Partner
Dedicated to love and
respect.Enhance human integrity
and creativit and share the
company's success.
respect.Enhance human integrity
and creativit and share the
company's success.
Customer
Customer approval is the
foundation of our existence and
development.The most satisfied
guest is our best publicity
ambassador all of our work is
designed to win lasting customer
loyalty
foundation of our existence and
development.The most satisfied
guest is our best publicity
ambassador all of our work is
designed to win lasting customer
loyalty
Service
Service approval is the
foundation of our existence and
development.The most satisfied
guest is our best publicity
ambassador all of our work is
designed to win lasting customer
loyalty
foundation of our existence and
development.The most satisfied
guest is our best publicity
ambassador all of our work is
designed to win lasting customer
loyalty
Profit
Realized to love and
respect.Enhance human integrity
and creativit and share the
company's success.
respect.Enhance human integrity
and creativit and share the
company's success.


This tool works with a layer of point, line, and area features . This tool summarizes all of the matching values in a field(s), and calculates statistics on them. The most basic statistic is the count of the number of features that have been summarized together, but you can get other statistics as well.
For example, suppose you have point features of store locations with a field representing the DISTRICT_MANAGER_NAME, and you want to summarize coffee sales by manager. You can specify the field DISTRICT_MANAGER_NAME as the field to dissolve on, and all rows of data representing individual managers will be summarized. This means all store locations that are managed by Manager1, will be summarized into one row with summary statistics calculated. In this instance, statistics like the count of the number of stores and the sum of TOTAL_SALES for all stores that Manager1 manages would be calculated, as well as for any other manager listed in the DISTRICT_MANAGER_NAME field.
The layer that will be summarized.
In addition to choosing a layer from your map, you can select Browse Layers found at the bottom of the drop-down list to browse your contents for a big data file share dataset or feature layer.
The fields that will be used to summarize like features. For example, if you chose a field called PropertyType with the values of commercial and residential, all of the residential fields would be summarized together with summary statistics calculated and all of the commercial fields would be summarize together.
You can calculate statistics about attributes of numeric fields of the input layer such as:
You can calculate statistics about attributes of string fields of the input layer, such as:
This is a temporary parameter for the Pre-Release to set the data store that results are saved to. Both data stores are part of ArcGIS Data Store. If you select the spatiotemporal data store, and do not have one installed the tool will fail.
This is the name of the layer that will be created in My Content and added to the map. The default name is based on the tool name and the input layer name. If the layer already exists the tool run will fail.
Using the Save result in drop-down box, you can specify the name of a folder in My Content where the result will be saved.


WITNESS LIST Business & Industry Committee (Subcommittee on Subcommittee on Consumer Fraud) February 23, 2000-10:00A Consumer Fraud For: DeChant, Tom (Self) Fischer, Emil (Self) Provan, Robert (Self) On: Chavez, Esther (Office of the Attorney General, Consumer Fraud Division) Conner, Bonnie (San Antonio City Council) Harrison, Michael (Self and West Telemarketing Corporation) Hinkle, Ron (Public Utility Commission (PUC)) Remlinger, Bob (Self and American Association of Retired Persons (AARP)) Stinson, Bill (TX Association of Realtors) Tiede, Saralee (Public Utility Commission (PUC)) Tooley, Ken (TX Association of Insurance & Financial Advisors) Tuttle, Mary Jo (Self and American Association of Retired Persons (AARP))


{% include head.html %} {% include nav.html %} Download presentation {% include footer.html %} {% include js.html %}


All Reports
Live Report
Fire Service
Name :
Phone Number :
Address :
Longitude :
Latitude :
Esaclate Report
Fire Service
Ambulance
Police
Lastma
Dispatch
Send with attachment
Dismiss Report
Send
09023423234 Ikoyi
Chats
End Report Session


--- layout: chart ---
Figure 14. Composition of Older Adult Total Household (65+) Net Change by Head of Householder Race/Ethnicity and Tenure
City of Chicago, 2012 to 2019
| White | African American/Black | Hispanic/Latino | Asian | All Other Race/Ethnicity | All Older Adult Households |
|---|


@** Using Checkboxes for objects in arrays is problematic, because the order of the objects in the array
** would be relevant for the checked status of the checkboxes (i -> value)
**
** Using Play's checkbox FormHelper should either be limited to singular attributes or to fixed order
** Arrays
@checkbox(productForm("tags[0].id"), '_label -> "Test", 'value -> "1", '_text -> "lightweight")
@checkbox(productForm("tags[1].id"), '_label -> "Test", 'value -> "2", '_text -> "metal")
@checkbox(productForm("tags[2].id"), '_label -> "Test", 'value -> "3", '_text -> "plastic")
*@


{% extends "viewemail.html" %}
{% block email_content %}
Hello Mr. Walters!
I'm reminding you that you still have considerable funds on your account
and we should meet to discuss possible investment options.
Your money would be better protected if it was invested. It isn't wise to
have such a large sum on a checking account. The mafia has been known to
try to get ransom money from recent millionaires.
PS: Your answer is vhs bank account, if you're wondering. :)
{% endblock %}


Copyright © 2011, Cargo Chief, All rights
reserved.
Contact Name
Contact Email
Contact Phone
Quote Contact Information
Best Quote is Great for:
• A price sensitive
shipment
• A large shipment
• You have a bit of time
to get the best price
How Much You are Shipping
X LTL
Less
Than Truckload
Up
to 6 pallets
X TL/Partial TL
Truckload
or Partial Truckload
Point
to point transport
7-26
pallets
Driver to assist in loading: Yes ( ) No
(●)
Zip Code
State ę
City
(●) Location with Dock or Forklift
( ) Location W/O Dock or Forklift
( ) Convention Center/Tradeshow
( ) Construction Site
Driver to assist in unloading: Yes ( ) No
(●)
Zip Code
State ę
City
Destination “To” Location
(●) Location with Dock or Forklift
( ) Location W/O Dock or Forklift
( ) Convention Center/Tradeshow
( ) Construction Site


Listen for changes in a child attribute from the parent. The child attribute
does not have to exist.
// create an observablevar observe = new $.Observe({
foo : {
bar : "Hello World"
}
})
//listen to changes on a property
observe.delegate("foo.bar","change", function(ev, prop, how, newVal, oldVal){// foo.bar has been added, set, or removed
});
// change the property
observe.attr('foo.bar',"Goodbye Cruel World")
Types of events
Delegate lets you listen to add, set, remove, and change events on property.
add
An add event is fired when a new property has been added.
var o = new $.Observe({});
o.delegate("name","add", function(ev, value){// called once
$('#name').show()
})
o.attr('name',"Justin")
o.attr('name',"Brian");
Listening to add events is useful for 'setup' functionality (in this case
showing the #name element.
set
Set events are fired when a property takes on a new value. set events are
always fired after an add.
o.delegate("name","set", function(ev, value){// called twice
$('#name').text(value)
})
o.attr('name',"Justin")
o.attr('name',"Brian");
remove
Remove events are fired after a property is removed.
o.delegate("name","remove", function(ev){// called once
$('#name').text(value)
})
o.attr('name',"Justin");
o.removeAttr('name');
Wildcards - matching multiple properties
Sometimes, you want to know when any property within some part
of an observe has changed. Delegate lets you use wildcards to
match any property name. The following listens for any change
on an attribute of the params attribute:
Listen for changes in a child attribute from the parent. The child attribute does not have to exist.
Types of events
Delegate lets you listen to add, set, remove, and change events on property.
add
An add event is fired when a new property has been added.
Listening to add events is useful for 'setup' functionality (in this case showing the
#name
element.set
Set events are fired when a property takes on a new value. set events are always fired after an add.
remove
Remove events are fired after a property is removed.
Wildcards - matching multiple properties
Sometimes, you want to know when any property within some part of an observe has changed. Delegate lets you use wildcards to match any property name. The following listens for any change on an attribute of the params attribute:
Using a single wildcard (
) matches single level properties. Using a double wildcard (
*
) matches any deep property.


Stock Dashboard
Basic Setup
AlphaVantage API Key:
Target Stock:
Update Frequency:
MySQL Setup
Connect to a MySQL database
Host:
Port:
User:
Password:
Database:


{% extends 'headless.html' %} {% block app-content %}
This page does not exist or your privileges are not enough to see it.
Please contact with your site admin if you think it is a problem.


Deploy to existing Heroku app or create a new one for this repository
Name of app to create
When tests pass, automatically deploy to Heroku. If this is unchecked, deployments must be triggered manually.
If you would like to stop deploying this repo to Heroku, click the button below.


I must apologise for the dearth of decisive prose at Hooting Yard over the last while. At first I attributed the absence of fizzing sparks in my cranium to my becoming enwrapped in M P Shiel, but I am beginning to think there is another cause.  Is there any other subject worthy of the attentions of the writer of today? I think not. But then, how to treat, in mere prose, an incident that seems to me more and more numinous and mythic?
No doubt I will shake off this sluggishness and return to the fray, but right now I feel hampered by my sheer inability to do justice to The Greatest Story Ever Told.


CHOP CHOP MAKES IT EASY TO EAT THE VEGGIES & FRUIT YOU NEED
Snacking
A large selection, all sourced locally when possible.
Make Salads
We soak our vegetables in special non-chemical mixtures to ensure cleanliness.
Make Smoothies
Gloved employees with expert cutting skills chop your order.
Cook Easier
All packages can be composted which help us in our effort to reduce waste.


The canvas is an HTML element that by default has no content; it’s a blank slate. You need to add to it by drawing on it.
✅ Read more about the Canvas API on MDN.
Here’s how it’s typically declared, as part of the page’s body:
Above we are setting the id
, width
and
height
.
id
: set this so you can obtain a reference when you need to
interact with it.
width
: this is the width of the element.height
: this is the height of the element.
The Canvas is using a cartesian coordinate system to draw things. Thus it
uses an x-axis and y-axis to express where something is located. The
location 0,0
is the top left position and the bottom right is
what you said to be the WIDTH and HEIGHT of the canvas.
Image from MDN
To draw on the canvas element you will need to go through the following steps:
Code for the above steps usually looks like so:
// draws a red rectangle
//1. get the canvas reference
canvas = document.getElementById("myCanvas");
//2. set the context to 2D to draw basic shapes
ctx = canvas.getContext("2d");
//3. fill it with the color red
ctx.fillStyle = "red";
//4. and draw a rectangle with these parameters, setting location and size
ctx.fillRect(0, 0, 200, 200); // x,y,width, height
✅ The Canvas API mostly focuses on 2D shapes, but you can also draw 3D elements to a web site; for this, you might use the WebGL API.
You can draw all sorts of things with the Canvas API like:
✅ Try it! You know how to draw a rectangle, can you draw a circle to a page? Take a look at some interesting Canvas drawings on CodePen. Here’s a particularly impressive example.
You load an image asset by creating an Image
object and set
its src
property. Then you listen to the
load
event to know when it’s ready to be used. The code looks
like this:
const img = new Image();
img.src = "path/to/my/image.png";
img.onload = () => {
// image loaded and ready to be used
};
It’s recommended to wrap the above in a construct like so, so it’s easier to use and you only try to manipulate it when it’s fully loaded:
function loadAsset(path) {
return new Promise((resolve) => {
const img = new Image();
img.src = path;
img.onload = () => {
// image loaded and ready to be used
resolve(img);
};
});
}
// use like so
async function run() {
const heroImg = await loadAsset("hero.png");
const monsterImg = await loadAsset("monster.png");
}
To draw game assets to a screen, your code would look like this:
async function run() {
const heroImg = await loadAsset("hero.png");
const monsterImg = await loadAsset("monster.png");
canvas = document.getElementById("myCanvas");
ctx = canvas.getContext("2d");
ctx.drawImage(heroImg, canvas.width / 2, canvas.height / 2);
ctx.drawImage(monsterImg, 0, 0);
}
You will build a web page with a Canvas element. It should render a black
screen 1024*768
. We’ve provided you with two images:
Hero ship
5*5 monster
Locate the files that have been created for you in the
your-work
sub folder. It should contain the following:
Open the copy of this folder in Visual Studio Code. You need to have a
local development environment setup, preferably with Visual Studio Code
with NPM and Node installed. If you don’t have npm
set up on
your computer,
here’s how to do that.
Start your project by navigating to the your_work
folder:
The above will start a HTTP Server on address
http://localhost:5000
. Open up a browser and input that
address. It’s a blank page right now, but that will change
Note: to see changes on your screen, refresh your browser.
Add the needed code to your-work/app.js
to solve the below
/app.js
, setting the
ctx
element to be black and the top/left coordinates to be
at 0,0 and the height and width to equal that of the canvas.
await loadTexture
and passing in the image path. You
won’t see them on the screen yet!
drawImage
API to draw heroImg to the
screen, setting canvas.width / 2 - 45
and
canvas.height - canvas.height / 4)
;
Draw 5*5 monsters
tip: Now you can uncomment the code to draw enemies on the screen. Next, go to the
createEnemies
function and build it out.
First, set up some constants:
const MONSTER_TOTAL = 5;
const MONSTER_WIDTH = MONSTER_TOTAL * 98;
const START_X = (canvas.width - MONSTER_WIDTH) / 2;
const STOP_X = START_X + MONSTER_WIDTH;
then, create a loop to draw the array of monsters onto the screen:
The finished result should look like so:
Please try solving it yourself first but if you get stuck, have a look at a solution
You’ve learned about drawing with the 2D-focused Canvas API; take a look at the WebGL API, and try to draw a 3D object.
Learn more about the Canvas API by reading about it.


A set of functions to build simple
GUI controls for R functions. These are built on the 'tcltk' package.
Uses could include changing a parameter on a graph by animating it
with a slider or a "doublebutton", up to more sophisticated control
panels.
Some functions for specific graphical tasks, referred to as 'cartoons',
are provided.
| Version: |
1.1-4 |
| Depends: |
R (≥ 3.0), tcltk |
| Suggests: |
tkrplot, rgl, sp, geoR, RandomFields, akima, MASS, denstrip, lattice, sm, maps, mgcv, colorspace, ggplot2 |
| Published: |
2018-05-07 |
| Author: |
Bowman, Bowman, Gibson and Crawford |
| Maintainer: |
Adrian Bowman <adrian.bowman at glasgow.ac.uk> |
| License: |
GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| NeedsCompilation: |
no |
| SystemRequirements: |
BWidget |
| Citation: |
rpanel citation info |
| Materials: |
ChangeLog |
| CRAN checks: |
rpanel results |


{% extends "base.html" %} {% block title %}{{ page.title }}{%endblock%} {% block description %}Vacancies{% endblock %} {% block page_picture %}{{ IMGURL }}/{{SITE_PICTURE}}{% endblock %} {% block content %} {% include 'blocks/breadcrumbs.html' %}
We welcome good master's and bachelor's students to perform academic research in our group. We offer various projects that can be tuned to match your thesis requirements. You can also browse through our research pages to read about the different research topics of our group.
The positions below are closed, please do not apply. They are listed to give you an idea of the kind of positions we regularly offer.
Vacancies


Lumo comes with a set of icons that are designed to fit in with the default Lumo style.
Click/focus an icon to view details.
The SVG sprites are used with the iron-icon
element.
Use the icon size custom properties to set consistent sizes for all icons across your app. The Lumo icons are drawn on a 24×24 pixel canvas – the M size fits that by default.
You need to import sizing.html
to use the sizing properties.


Lgcjs is an online gamebook editor, developed by Luca Fabbian and supported by LGL community. Enable javascript to try it now!


public final class EncryptableProperties
extends java.util.Properties
Subclass of java.util.Properties which can make use of a
StringEncryptor
or
TextEncryptor
object to decrypt property values
if they are encrypted in the .properties file.
A value is considered "encrypted" when it appears surrounded by ENC(...), like:
Decryption is performed on-the-fly when the getProperty(String)
or
getProperty(String, String)
methods are called, and only these two
methods perform decryption (note that neither get(Object)
nor
Hashtable.toString()
do). Load and store operations are not affected
by decryption in any manner.
Encrypted and unencrypted objects can be combined in the same properties file.
Please note that, altough objects of this class are Serializable, they cannot be serialized and then de-serialized in different classloaders or virtual machines. This is so because encryptors are not serializable themselves (they cannot, as they contain sensitive information) and so they remain in memory, and live for as long as the classloader lives.
| Constructor and Description |
|---|
EncryptableProperties(java.util.Properties defaults,
StringEncryptor stringEncryptor)
Creates an EncryptableProperties instance which will use
the passed
StringEncryptor object to decrypt encrypted values,
and the passed defaults as default values (may contain encrypted values). |
EncryptableProperties(java.util.Properties defaults,
TextEncryptor textEncryptor)
Creates an EncryptableProperties instance which will use
the passed
TextEncryptor object to decrypt encrypted values,
and the passed defaults as default values (may contain encrypted values). |
EncryptableProperties(StringEncryptor stringEncryptor)
Creates an EncryptableProperties instance which will use
the passed
StringEncryptor object to decrypt encrypted values. |
EncryptableProperties(TextEncryptor textEncryptor)
Creates an EncryptableProperties instance which will use
the passed
TextEncryptor object to decrypt encrypted values. |
| Modifier and Type | Method and Description |
|---|---|
Object |
get(Object key)
Obtains the property value for the specified key (see
Hashtable#get(Object) ), decrypting it if needed. |
String |
getProperty(String key)
Obtains the property value for the specified key (see
Properties.getProperty(String) ), decrypting it if needed. |
String |
getProperty(String key,
String defaultValue)
Obtains the property value for the specified key (see
Properties.getProperty(String) ), decrypting it if needed. |
list, list, load, load, loadFromXML, propertyNames, save, setProperty, store, store, storeToXML, storeToXML, stringPropertyNames
clear, clone, compute, computeIfAbsent, computeIfPresent, contains, containsKey, containsValue, elements, entrySet, equals, forEach, getOrDefault, hashCode, isEmpty, keys, keySet, merge, put, putAll, putIfAbsent, rehash, remove, remove, replace, replace, replaceAll, size, toString, values
public EncryptableProperties(StringEncryptor stringEncryptor)
Creates an EncryptableProperties instance which will use
the passed StringEncryptor
object to decrypt encrypted values.
stringEncryptor
- the StringEncryptor
to be used do decrypt
values. It can not be null.public EncryptableProperties(TextEncryptor textEncryptor)
Creates an EncryptableProperties instance which will use
the passed TextEncryptor
object to decrypt encrypted values.
textEncryptor
- the TextEncryptor
to be used do decrypt
values. It can not be null.public EncryptableProperties(java.util.Properties defaults, StringEncryptor stringEncryptor)
Creates an EncryptableProperties instance which will use
the passed StringEncryptor
object to decrypt encrypted values,
and the passed defaults as default values (may contain encrypted values).
defaults
- default values for properties (may be encrypted).stringEncryptor
- the StringEncryptor
to be used do decrypt
values. It can not be null.public EncryptableProperties(java.util.Properties defaults, TextEncryptor textEncryptor)
Creates an EncryptableProperties instance which will use
the passed TextEncryptor
object to decrypt encrypted values,
and the passed defaults as default values (may contain encrypted values).
defaults
- default values for properties (may be encrypted).textEncryptor
- the TextEncryptor
to be used do decrypt
values. It can not be null.public String getProperty(String key)
Obtains the property value for the specified key (see
Properties.getProperty(String)
), decrypting it if needed.
getProperty
in class java.util.Properties
key
- the property keypublic String getProperty(String key, String defaultValue)
Obtains the property value for the specified key (see
Properties.getProperty(String)
), decrypting it if needed.
If no value is found for the specified key, the default value will be returned (decrypted if needed).
getProperty
in class java.util.Properties
key
- the property keydefaultValue
- the default value to returnpublic Object get(Object key)
Obtains the property value for the specified key (see
Hashtable#get(Object)
), decrypting it if needed.
get
in interface java.util.Map<Object,Object>
get
in class java.util.Hashtable<Object,Object>
key
- the property keyCopyright © 2019 The JASYPT team. All Rights Reserved.


DVP
Park Lawn
Ellis
Colborne Lodge
Sunnyside
Jameson
Dunn
Britsh Columbia
Ontario Place
Battery Park
Rememberance
Rees St.
Bay
Yonge
Jarvis St.
Parliment St.
Don Roadway
Leslie St.
Back


Applies Batch Normalization over a 4D input (a mini-batch of 2D inputs with optional additional channel dimension)
The mean and standard-deviation are calculated per-dimension over the mini-batches and
\(\gamma\( and \(\beta\) are learnable parameter vectors of size \(C\) (where \(C\) is the
input size). By default, the elements of \(\gamma\) are set to 1 and the elements of
\(\beta\) are set to 0. The standard-deviation is calculated via the biased estimator,
equivalent to dsharp.var(input, unbiased=False)
.
Also by default, during training this layer keeps running estimates of its computed mean and variance, which are then used for normalization during evaluation. The running estimates are kept with a default momentum of 0.1.
If trackRunningStats is set to False, this layer then does not keep running estimates, and batch statistics are instead used during evaluation time as well.
| Constructor | Description |
Full Usage:
BatchNorm2d(numFeatures, ?eps, ?momentum, ?affine, ?trackRunningStats, ?reversible)
Parameters:
int
?eps : double
?momentum : Tensor
?affine : bool
?trackRunningStats : bool
?reversible : bool
Returns: BatchNorm2d
|
|
© Copyright 2021, DiffSharp Contributors.


Regular summer-like outfit. @ladies: Watch out.. It is going to be windy.
Have a walk on a beach or the dunes
Don't forget to protect yourself to from sunlight!


Bringing a closed source, or just simply an internally managed code base, into the wild of open source software can be an arduous and surreal process. In this article I’m going to ramble on about exactly that, with a few learned lessons and key successes I’ve had.
I’m currently helping the Home Depot Quote Center determine what is useful software to open source, and then helping them move toward open sourcing that software. In the past I’ve managed the open source development of .NET Extensions of Cloud Foundry, called Iron Foundry, which provided .NET support to the Cloud Foundry Platform. I’ve also helped organize and run open source efforts for plugins at New Relic, Basho, and a host of other smaller companies. Sometimes I’ve been a code contributor, sometimes I’m just interacting with contributors and managing pull requests. Either way it has been a lot of fun and every time it has been a seriously intense learning opportunity.
Lesson 1: Open Source & Individual Freedom
One thing to keep in mind, which I realize, but find myself being reminded of, is that people are truly free to either contribute, use, or completely disregard or ignore your open source project.
Of course, an open source project might have paid contributors. If a project has paid contributors we at least get back to a contained room of cat herding. But either way, never forget that someone may or may not build that feature, or close the issue, or submit a pull request the way you’ve set out to have the project run. Which brings me to the next lesson.
Lesson 2: Write Up Roles, Rules, Process, & Guidelines
As soon as the team goes from one person to two, effort should immediately be put into creating roles, rules, and process for how contributions will be accepted, pull requests will be committed, how to submit or work on issues, and the whole host of work flow associated with getting things done for the project.
Roles, in this particular instance, can be broken down in different ways. Sometimes a project might have somebody managing the pull requests coming in, someone else or even several people are managing the product development issues for new features, another person might be handing bug issues that come up, and the possibilities continue. Some simple examples often look like this:
- Project Leader - (Manager, Boss, Head Honcho, or whatever the title) would be in charge of and might even be the person who started the project.
- Contributor - Individual submitting features via pull request to the project.
- Feature Creator - Individual submitting feature requests and ideas via issues listings.
Slightly more complex examples might be something like this:
- Project Creator - Again, the person who created, started, and owns the project.
- Feature Architect - Some who specifically designs features from a technical stand point.
- Feature User Experience - Someone who works with users of the OSS project to determine how and in which ways the community is using the project and determine ways to make the experience better.
- Feature Contributor - Someone who contributes code for features, implementing based on contributor specs, etc.
Beyond that, one just merely needs to detail the roles as much as necessary to help people determine what and how they’ll be contributing to the project.
Rules for a project can cover a wide range of things. One increasingly popular and sometimes useful thing to add, especially with a diverse group of people working on a project, is a basic code of conduct. This helps outline what is or is not appropriate behavior on the issue threads and general public conversation within the group. We have to remember that open source often has people involved that aren’t exactly employees or directly related to the person that started a project. Because of this individuals often come to a project without any particular guidelines about what is or isn’t appropriate behavior.
Other rules that are dramatically simpler and easier to deal with, are breaking down and defining what is considered an acceptable pull request, how things should be documented, code standards, and other related technical rules.
Process for a project is often key to keeping people involved over time. Without a good process in which contributors really feel like they’re part of the team and getting their pull requests accepted, things can fall apart pretty quickly. Nothing like a bored programmer to go find something else to do that has nothing to do with your open source project!
A good process helps to define the steps that a contributor would need to go through to contribute a piece of code to a feature, who they would need to communicate with, how to submit a pull request, and finally how to wrap up getting the pull request pulled from the latest code. This is as important to people and it is to defining the technical steps for the system itself to be sustaining from an ongoing continuous integration and deployment point of view.
Once these core things are formalized it dramatically decreases tedious communication about working through the most basic of tasks while working on a project.
 I can hear the naysayers immediately on this topic. But rest assured, branding and marketing will either make or break a project. If you’re repo is kind of clunky and cluttered it sends a bad message that you aren’t really paying attention to your project. If someone comes to your repo and immediately sees a reasonable logo, or some type of consistent README.md with useful information and messaging (that’s marketing by the way) about what, where, how, and why this project exists, you’re exponentially more likely to get people involved in contributing and even more dramatically more likely to get people using the project.
In the OSS Manifesto a baseline of files are suggested for an OSS project:
- Have a readme file
- Have a contributing file
- List all core team members in the readme file
- Have a license file
- Have a changelog
- Follow semantic versioning
- Tag all major releases
- Provide documentation
I’ll add to this, throw in an .svg or reasonably usable .png of a logo or some easily identifiable symbol for the project. Every major project has some sort of logo, it really doesn’t even matter if its a pretty lousy looking logo, it just needs to be there to make the project easily identifiable.
Lesson 4: The Software Needs to Work
Having the respective readme, contributing file, general doc, listing of all core members; these things I’ve listed so far are all nice but there’s one more thing I’ve not mentioned yet. That is having a working publicly accessible continuous integration build that is working. Any and every open source project should have a repository setup with a running build. Any new pull requests gets accepted or even the smallest commit should get a build started.
There are many ways, more so for open source projects than probably any other kind, to get a continuous integration build going. Check out products and services like Codeship, TeamCity, Appveyor, or Travis CI. These are just a few of the many options to get a continuous integration setup running for your open source project.
Lesson 5: There will be other lessons to learn
An open source project is a pretty wild ride of code chops, organizational skills, and keep systemic development sustainable for a project. It can be tough, but a lot of fun, and very rewarding.
With that, happy hacking and stay tuned, there’s more to come!


Use reprex(venue = "rtf")
to get output in Rich Text Format. This is useful for creating syntax highlighted code snippets – rendered or not – to paste into software such as Keynote or PowerPoint.
Why is RTF special? Although Pandoc can produce RTF and, therefore, so can rmarkdown::render()
and reprex::reprex()
, Pandoc’s syntax highlighting is unavailable for RTF output. For now, we’ve got to get the functionality from somewhere else. Syntax highlighting is a non-issue for venue = "gh"
(GitHub) and venue = "so"
(Stack Overflow), because the target sites take care of that when the Markdown content is displayed.
reprex(venue = "rtf")
was introduced in v0.2.1 and is experimental. It requires the installation of the highlight command line tool and has only been tested on macOS. It is useful to me already and accumulating some usage is the best way to figure out how to make it useful to others. It would be preferable to use something like the highlight package at some point in the future, but let us experiment with this hack in the meantime.
If you use homebrew, here’s an easy way to install highlight from the shell:
brew install highlight
Here is the highlight call implied by the default behaviour of reprex(..., venue = "rtf")
:
highlight foo_reprex.R --out-format rtf --no-trailing-nl --encoding=UTF-8 --style darkbone --font 'Courier Regular' --font-size 50 > foo_reprex.rtf
If you don’t like the defaults, control highlight command line arguments by setting reprex.highlight.*
options. Why options? I didn’t want to burden reprex()
with even more arguments and this is usually something you want to set globally for yourself or for an entire project or talk or course.
Example of setting options in .Rprofile
:
options(
reprex.highlight.hl_style = "darkbone",
reprex.highlight.font = "Source Code Pro",
reprex.highlight.font_size = 50
)
The supported options are reprex.highlight.hl_style
, reprex.highlight.font
, reprex.highlight.font_size
(all shown above), and reprex.highlight.other
(a catchall for anything else, shown below).
You could set options for all your reprexing by doing this in your user-level .Rprofile
. Create or open this file via usethis::edit_r_profile()
.
You could also set options for a specific Project in .Rprofile
inside the Project. Create or open this file via usethis::edit_r_profile("project")
.
hl_style
must be one of your existing highlight themes and font
must be one of your installed fonts.
List available themes:
highlight --list-scripts=themes
Galleries of highlighting styles (likely to overlap with the ones you have):
http://www.andre-simon.de/doku/highlight/en/theme-samples.php
https://rclickhandbuch.files.wordpress.com/2014/09/knitrthemesoverview.pdf
You can also override defaults on-the-fly. Here’s how to do that for a single call using withr and, as a bonus, how to use reprex.highlight.other
to send arbitrary command line arguments to highlight:
withr::with_options(
new = c(
reprex.highlight.hl_style = "dusk",
reprex.highlight.font = "Fira Code Regular",
reprex.highlight.font_size = 35,
reprex.highlight.other = "--line-numbers --line-number-length=2 --zeroes"
),
reprex::reprex(input = c("(x <- rnorm(3))", "mean(x)"), venue = "rtf")
)
Here’s how to set highlight options for part of an R session:
If you just want to highlight code, but not render it, set chunk option eval = FALSE
option, i.e. put a special comment as the first line of your reprex source:
The above source, when reprex()
ed, will not include the usual output. This is not specific to venue = "rtf"
, but it’s more likely to come up in this setting.
When preparing snippets for a presentation, you may not have the luxury of making each snippet completely self-contained. In the future, we may create a way to run the reprex in the current workspace, as opposed to the usual reprex practice of using a separate R process. For now you can use chunk options to selectively hide code, i.e. to run a large snippet, but only include a small bit in the output.
This is easiest to show by example. If you reprex()
this code, only the last three lines and their output will appear in the output. But the other lines will be run, i.e. str_reverse()
will be defined, as will the bizzaro()
generic and default method.
#+ include = FALSE
str_reverse <- function(x) {
vapply(
strsplit(x, ""),
FUN = function(z) paste(rev(z), collapse = ""),
FUN.VALUE = "")
}
#+ include = FALSE
bizarro <- function(x) {
UseMethod("bizarro")
}
bizarro.default <- function(x) {
stop(
"Don't know how to make bizzaro <",
class(x)[[1]], ">",
call. = FALSE
)
}
#+ include = TRUE
bizarro.character <- function(x) str_reverse(x)
bizarro(c("abc", "def"))
bizarro(1:5)


---
layout: null
section-type: about
title: Astrophysics
---
## Astrophysics
How do galaxies evolve? is the question at the heart of my research. In search of answers, I examine the reservoirs of gas (chiefly atomic hydrogen) in galaxies along with the internal and external processes that combine to regulate star formation and the build-up of stellar mass. My specialism lies in the simultaneous analysis of large, multi-wavelength datasets in order to understand the galaxy population as a whole.
To complete this work, much of my time is spent developing and optimising bespoke software for handling, visualising and analysing big data.
Here are up-to-date copies of my academic and industry CVs.
orcid.org/0000-0003-1845-0934


information
About Me
About Me
I'm Uday Kiran &
I always look for an opportunity to work in a creative and challenging environment, where I can use my technical skills sets, implement new things and help both me as well as organization to grow by giving creative input.
Birthday: 25-08-1997
Website: www.udaykirank.com
Phone: +91<PHONE_NUMBER>
Degree:
M. Tech (CS with Specialization in Information Security) VIT Vellore
(2019-2021)
B. Tech (IT) CVR College of Engineering, India (2015 – 2019)
Mail<EMAIL_ADDRESS>Instagram: @rootxkaran
Ability
My skills
Python
Nmap
Nikto
OllyDBG/ IDApro debugger
MySQL
Wireshark
Cryptography
Metasploit
CSS 3.0, HTML 5.0, WordPress
Protocols known: TCP/IP
Portfolio
Projects
Detecting Phishing Websites Using Machine learning
Proposed an algorithm to detect websites using few basic parameters. Developed using Python.
Image Steganography Using LSB Technique
LSB is a technique which uses least significant bit to hide the encrypted text.
Implementation of Quantum Steganography based Encryption using Grover search
Paper presented in SET Conference 2020 in VIT. Using AES encryption and Grover search.
Certificates
Work Experience
Internships
Web development intern in 50hands organization


Devops?
Devops is evaporated herbal tea without the herbs.
Devops is that funny feeling you get when you reach for the Snickers bar and come back holding a slurpee.
Devops is the 43 1/3rd state, next to Wyoming.
Devops is this really, really tall mountain.
Devops is the reason boxes of condoms carry twelve instead of ten.
Devops is the blue stripes in the road that never get painted.
Devops is place where those socks vanish off to in the laundry.
Devops is an arcade game like Pacman without the little dots.
Devops is a little pufflike cloud you see at 5pm.
Devops is the tool the dentist uses on unruly patients.
Devops is the blank paper that cassette labels are printed on.
Devops is where the buses hide at night.
Devops is the empty pages at the end of the book.
Devops is the screw that falls from the car for no reason.
Devops is why Burger King uses paper instead of foam.
Devops is the little green pebble in your shoe.
Devops is the orange print in the yellow pages.
Devops is a pickle without the bumps.
Devops is why ducks eat trees.
Devops is toast without bread.
Devops is a venetian blind without the slats.
Devops is the lint in the navel of the mites that eat the lint in the navel of the mites that eat the lint in Devops's navel.
Devops is an apostrophe on drugs.
Devops is the bucket where they keep the unused serifs for H*lvetica.
Devops is the gunk that sticks to the inside of your car's fenders.
Devops is the source of all the zero bits in your computer.
Devops is the echo of silence.
Devops is the parsley on the plate of life.
Devops is the sales tax on happiness.
Devops is the preposition at the end of sixpence.

Devops is the reason latent homosexuals stay latent.
Devops is the donut hole.
Devops is the whole donut.
Devops is an annoying series of email messages.
Devops is the color only blind people can see.
Devops is the serial number on a box of cereal.
Devops is the Universe with decreasing entropy.
Devops is a naked woman with herpes simplex 428.
Devops is the yin without yang.
Devops is a pyrotumescent retrograde onyx obelisk.
Devops is why lisp has so many parentheses.
Devops is the the four-leaf clover with a missing leaf.
Devops is double-jointed and has a cubic spline.
Devops never sleeps.
Devops is the "een" in baleen whale.
Devops is neither a particle nor a wave.
Devops is the space in between the pixels on your screen.
Devops is the guy that writes the Infiniti ads.
Devops is the nut in peanut butter and jelly.
Devops is an antebellum flagellum fella.
Devops is a sentient vacuum cleaner.
Devops is the smallest number greater than zero.
Devops lives in the empty space above a decimal point.
Devops is the odd-colored scale on a dragon's back.
Devops is the redundant coin slot on arcade games.
Devops was last seen in Omaha, Nebraska.
Devops is the founding father of the phrase "founding father".

Devops is Jesus's speech advisor.
Devops keeps a spare eyebrow in his pocket.
Devops invented the green hubcap.
Devops is why doctors ask you to cough.
Devops is the "ooo" in varooom of race cars.
Devops uses two bathtubs at once.
I cannot escape them No matter how I try They wait for me everywhere I cannot pass them by.
Driving down the street I see "Jesus Is Lord" And then immediately after I hear the word "DEVOPS!"
Innocuous sayings and parables And on the evening news I hear the word "DEVOPS!" And suddenly I'm confused
I sit alone in my room And I'm feeling rather bored I turn on the tube and guess what I hear the word "DEVOPS!"


Given the following recursive function signature, write the function code such that this function takes a string and should return true if the bracketing operators in str are balanced, which means that they are correctly nested and aligned. If the string is not balanced, the method returns false. Assume that the brackets are { and }. For example, a string "{{}}" considered balance while "{{{}" considered not balanced.