Actions module
Actions allow the transformation of properties in time.
Some of butano's classes and namespaces can have actions performed on it.
For example, you can move a sprite from its current position to another and do it over a span of time.
Modules
- module Action templates
Files
- file btn_bg_palettes_actions.h
- file btn_bgs_mosaic_actions.h
- file btn_blending_actions.h
- file btn_camera_actions.h
- file btn_green_swap_actions.h
- file btn_hblank_effect_actions.h
- file btn_inside_window_actions.h
- file btn_music_actions.h
- file btn_rect_window_actions.h
- file btn_regular_bg_actions.h
- file btn_sprite_actions.h
- file btn_sprite_affine_mat_actions.h
- file btn_sprite_animate_actions.h
- file btn_sprite_palette_actions.h
- file btn_sprite_palettes_actions.h
- file btn_sprites_mosaic_actions.h
Classes
- class btn::bg_palette_inverted_manager
- Manages if the colors of a bg_
palette_ ptr must be inverted or not. - class btn::bg_palette_inverted_toggle_action
- Toggles if the colors of a bg_
palette_ ptr must be inverted or not when the action is updated a given number of times. - class btn::bg_palette_grayscale_manager
- Manages the intensity of the grayscale effect applied to a bg_
palette_ ptr. - class btn::bg_palette_grayscale_to_action
- Modifies the intensity of the grayscale effect applied to a bg_
palette_ ptr until it has a given state. - class btn::bg_palette_grayscale_loop_action
- Modifies the intensity of the grayscale effect applied to a bg_
palette_ ptr from a minimum to a maximum. When the intensity is equal to the given final state, it goes back to its initial state and vice versa. - class btn::bg_palette_grayscale_toggle_action
- Changes the intensity of the grayscale effect applied to a bg_
palette_ ptr when the action is updated a given number of times. - class btn::bg_palette_fade_manager
- Manages the intensity of the fade effect applied to a bg_
palette_ ptr. - class btn::bg_palette_fade_to_action
- Modifies the intensity of the fade effect applied to a bg_
palette_ ptr until it has a given state. - class btn::bg_palette_fade_loop_action
- Modifies the intensity of the fade effect applied to a bg_
palette_ ptr from a minimum to a maximum. When the intensity is equal to the given final state, it goes back to its initial state and vice versa. - class btn::bg_palette_fade_toggle_action
- Changes the intensity of the fade effect applied to a bg_
palette_ ptr when the action is updated a given number of times. - class btn::bg_palette_rotate_manager
- Manages the number of colors to rotate to the right in a bg_
palette_ ptr. - class btn::bg_palette_rotate_by_action
- Modifies the number of colors to rotate to the right in a bg_
palette_ ptr by delta_count when the action is updated a given number of times. When the property is over the given maximum, it goes back to the given minimum and vice versa. - class btn::bg_palette_rotate_to_action
- Modifies the number of colors to rotate to the right in a bg_
palette_ ptr until it has a given state. - class btn::bg_palette_rotate_loop_action
- Modifies the number of colors to rotate to the right in a bg_palette_ptrç from a minimum to a maximum. When the number of colors to rotate to the right is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::bg_palette_rotate_toggle_action
- Changes the number of colors to rotate to the right in a bg_
palette_ ptr when the action is updated a given number of times. - class btn::bg_palettes_brightness_manager
- Manages the brightness of all background color palettes.
- class btn::bg_palettes_brightness_to_action
- Modifies the brightness of all background color palettes until it has a given state.
- class btn::bg_palettes_brightness_loop_action
- Modifies the brightness of all background color palettes from a minimum to a maximum. When the brightness is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::bg_palettes_brightness_toggle_action
- Changes the brightness of all background color palettes when the action is updated a given number of times.
- class btn::bg_palettes_contrast_manager
- Manages the contrast of all background color palettes.
- class btn::bg_palettes_contrast_to_action
- Modifies the contrast of all background color palettes until it has a given state.
- class btn::bg_palettes_contrast_loop_action
- Modifies the contrast of all background color palettes from a minimum to a maximum. When the contrast is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::bg_palettes_contrast_toggle_action
- Changes the contrast of all background color palettes when the action is updated a given number of times.
- class btn::bg_palettes_intensity_manager
- Manages the intensity of all background color palettes.
- class btn::bg_palettes_intensity_to_action
- Modifies the intensity of all background color palettes until it has a given state.
- class btn::bg_palettes_intensity_loop_action
- Modifies the intensity of all background color palettes from a minimum to a maximum. When the intensity is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::bg_palettes_intensity_toggle_action
- Changes the intensity of all background color palettes when the action is updated a given number of times.
- class btn::bg_palettes_inverted_manager
- Manages if the colors of all background color palettes must be inverted or not.
- class btn::bg_palettes_inverted_toggle_action
- Toggles if the colors of all background color palettes must be inverted or not when the action is updated a given number of times.
- class btn::bg_palettes_grayscale_manager
- Manages the intensity of the grayscale effect applied to all background color palettes.
- class btn::bg_palettes_grayscale_to_action
- Modifies the intensity of the grayscale effect applied to all background color palettes until it has a given state.
- class btn::bg_palettes_grayscale_loop_action
- Modifies the intensity of the grayscale effect applied to all background color palettes from a minimum to a maximum. When the intensity is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::bg_palettes_grayscale_toggle_action
- Changes the intensity of the grayscale effect applied to all background color palettes when the action is updated a given number of times.
- class btn::bg_palettes_fade_manager
- Manages the intensity of the fade effect applied to all background color palettes.
- class btn::bg_palettes_fade_to_action
- Modifies the intensity of the fade effect applied to all background color palettes until it has a given state.
- class btn::bg_palettes_fade_loop_action
- Modifies the intensity of the fade effect applied to all background color palettes from a minimum to a maximum. When the intensity is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::bg_palettes_fade_toggle_action
- Changes the intensity of the fade effect applied to all background color palettes when the action is updated a given number of times.
- class btn::bgs_mosaic_horizontal_stretch_manager
- Manages the horizontal stretch of the mosaic applied to the backgrounds.
- class btn::bgs_mosaic_horizontal_stretch_to_action
- Modifies the horizontal stretch of the mosaic applied to the backgrounds until it has a given state.
- class btn::bgs_mosaic_horizontal_stretch_loop_action
- Modifies the horizontal stretch of the mosaic applied to the backgrounds from a minimum to a maximum. When the horizontal stretch is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::bgs_mosaic_horizontal_stretch_toggle_action
- Changes the horizontal stretch of the mosaic applied to the backgrounds when the action is updated a given number of times.
- class btn::bgs_mosaic_vertical_stretch_manager
- Manages the vertical stretch of the mosaic applied to the backgrounds.
- class btn::bgs_mosaic_vertical_stretch_to_action
- Modifies the vertical stretch of the mosaic applied to the backgrounds until it has a given state.
- class btn::bgs_mosaic_vertical_stretch_loop_action
- Modifies the vertical stretch of the mosaic applied to the backgrounds from a minimum to a maximum. When the vertical stretch is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::bgs_mosaic_vertical_stretch_toggle_action
- Changes the vertical stretch of the mosaic applied to the backgrounds when the action is updated a given number of times.
- class btn::bgs_mosaic_stretch_manager
- Manages the stretch of the mosaic applied to the backgrounds.
- class btn::bgs_mosaic_stretch_to_action
- Modifies the stretch of the mosaic applied to the backgrounds until it has a given state.
- class btn::bgs_mosaic_stretch_loop_action
- Modifies the stretch of the mosaic applied to the backgrounds from a minimum to a maximum. When the stretch is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::bgs_mosaic_stretch_toggle_action
- Changes the stretch of the mosaic applied to the backgrounds when the action is updated a given number of times.
- class btn::blending_transparency_alpha_manager
- Manages the weight of the transparency blending.
- class btn::blending_transparency_alpha_to_action
- Modifies the weight of the transparency blending until it has a given state.
- class btn::blending_transparency_alpha_loop_action
- Modifies the weight of the transparency blending from a minimum to a maximum. When the weight is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::blending_transparency_alpha_toggle_action
- Changes the weight of the transparency blending when the action is updated a given number of times.
- class btn::blending_intensity_alpha_manager
- Manages the weight of the intensity blending.
- class btn::blending_intensity_alpha_to_action
- Modifies the weight of the intensity blending until it has a given state.
- class btn::blending_intensity_alpha_loop_action
- Modifies the weight of the intensity blending from a minimum to a maximum. When the weight is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::blending_intensity_alpha_toggle_action
- Changes the weight of the intensity blending when the action is updated a given number of times.
- class btn::blending_fade_alpha_manager
- Manages the weight of the fade blending.
- class btn::blending_fade_alpha_to_action
- Modifies the weight of the fade blending until it has a given state.
- class btn::blending_fade_alpha_loop_action
- Modifies the weight of the fade blending from a minimum to a maximum. When the weight is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::blending_fade_alpha_toggle_action
- Changes the weight of the fade blending when the action is updated a given number of times.
- class btn::camera_position_manager
- Manages the position of a camera_
ptr. - class btn::camera_move_by_action
- Modifies the position of a camera_
ptr by a given delta. - class btn::camera_move_to_action
- Modifies the position of a camera_
ptr until it has a given state. - class btn::camera_move_loop_action
- Modifies the position of a camera_
ptr from a minimum to a maximum. When the position is equal to the given final state, it goes back to its initial state and vice versa. - class btn::camera_move_toggle_action
- Changes the position of a camera_
ptr when the action is updated a given number of times. - class btn::green_swap_manager
- Manages if green swap must be enabled or not.
- class btn::green_swap_toggle_action
- Toggles if green swap must be enabled or not when the action is updated a given number of times.
- class btn::hblank_effect_visible_manager
- Manages if a hblank_
effect_ ptr must be committed to the GBA or not. - class btn::hblank_effect_visible_toggle_action
- Toggles if a hblank_
effect_ ptr must be committed to the GBA or not when the action is updated a given number of times. - class btn::inside_window_visible_manager
- Manages if a inside_
window must be committed to the GBA or not. - class btn::inside_window_visible_toggle_action
- Toggles if a inside_
window must be committed to the GBA or not when the action is updated a given number of times. - class btn::music_volume_manager
- Manages the volume of the active music.
- class btn::music_volume_to_action
- Modifies the volume of the active music until it has a given state.
- class btn::music_volume_loop_action
- Modifies the volume of the active music from a minimum to a maximum. When the volume is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::music_volume_toggle_action
- Changes the volume of the active music when the action is updated a given number of times.
- class btn::rect_window_top_manager
- Manages the position of the top boundary of a rect_
window. - class btn::rect_window_move_top_by_action
- Modifies the position of the top boundary of a rect_
window by a given delta. - class btn::rect_window_move_top_to_action
- Modifies the position of the top boundary of a rect_
window until it has a given state. - class btn::rect_window_move_top_loop_action
- Modifies the position of the top boundary of a rect_
window from a minimum to a maximum. When the position is equal to the given final state, it goes back to its initial state and vice versa. - class btn::rect_window_move_top_toggle_action
- Changes the position of the top boundary of a rect_
window when the action is updated a given number of times. - class btn::rect_window_left_manager
- Manages the position of the left boundary of a rect_
window. - class btn::rect_window_move_left_by_action
- Modifies the position of the left boundary of a rect_
window by a given delta. - class btn::rect_window_move_left_to_action
- Modifies the position of the left boundary of a rect_
window until it has a given state. - class btn::rect_window_move_left_loop_action
- Modifies the position of the left boundary of a rect_
window from a minimum to a maximum. When the position is equal to the given final state, it goes back to its initial state and vice versa. - class btn::rect_window_move_left_toggle_action
- Changes the position of the left boundary of a rect_
window when the action is updated a given number of times. - class btn::rect_window_bottom_manager
- Manages the position of the bottom boundary of a rect_
window. - class btn::rect_window_move_bottom_by_action
- Modifies the position of the bottom boundary of a rect_
window by a given delta. - class btn::rect_window_move_bottom_to_action
- Modifies the position of the bottom boundary of a rect_
window until it has a given state. - class btn::rect_window_move_bottom_loop_action
- Modifies the position of the bottom boundary of a rect_
window from a minimum to a maximum. When the position is equal to the given final state, it goes back to its initial state and vice versa. - class btn::rect_window_move_bottom_toggle_action
- Changes the position of the bottom boundary of a rect_
window when the action is updated a given number of times. - class btn::rect_window_right_manager
- Manages the position of the right boundary of a rect_
window. - class btn::rect_window_move_right_by_action
- Modifies the position of the right boundary of a rect_
window by a given delta. - class btn::rect_window_move_right_to_action
- Modifies the position of the right boundary of a rect_
window until it has a given state. - class btn::rect_window_move_right_loop_action
- Modifies the position of the right boundary of a rect_
window from a minimum to a maximum. When the position is equal to the given final state, it goes back to its initial state and vice versa. - class btn::rect_window_move_right_toggle_action
- Changes the position of the right boundary of a rect_
window when the action is updated a given number of times. - class btn::rect_window_top_left_manager
- Manages the position of the top-left corner of a rect_
window. - class btn::rect_window_move_top_left_by_action
- Modifies the position of the top-left corner of a rect_
window by a given delta. - class btn::rect_window_move_top_left_to_action
- Modifies the position of the top-left corner of a rect_
window until it has a given state. - class btn::rect_window_move_top_left_loop_action
- Modifies the position of the top-left corner of a rect_
window from a minimum to a maximum. When the position is equal to the given final state, it goes back to its initial state and vice versa. - class btn::rect_window_move_top_left_toggle_action
- Changes the position of the top-left corner of a rect_
window when the action is updated a given number of times. - class btn::rect_window_bottom_right_manager
- Manages the position of the bottom-right corner of a rect_
window. - class btn::rect_window_move_bottom_right_by_action
- Modifies the position of the bottom-right corner of a rect_
window by a given delta. - class btn::rect_window_move_bottom_right_to_action
- Modifies the position of the bottom-right corner of a rect_
window until it has a given state. - class btn::rect_window_move_bottom_right_loop_action
- Modifies the position of the bottom-right corner of a rect_
window from a minimum to a maximum. When the position is equal to the given final state, it goes back to its initial state and vice versa. - class btn::rect_window_move_bottom_right_toggle_action
- Changes the position of the bottom-right corner of a rect_
window when the action is updated a given number of times. - class btn::regular_bg_visible_manager
- Manages if a regular_
bg_ ptr must be committed to the GBA or not. - class btn::regular_bg_visible_toggle_action
- Toggles if a regular_
bg_ ptr must be committed to the GBA or not when the action is updated a given number of times. - class btn::bg_position_manager
- Manages the position of a regular_
bg_ ptr. - class btn::regular_bg_move_by_action
- Modifies the position of a regular_
bg_ ptr by a given delta. - class btn::regular_bg_move_to_action
- Modifies the position of a regular_
bg_ ptr until it has a given state. - class btn::regular_bg_move_loop_action
- Modifies the position of a regular_
bg_ ptr from a minimum to a maximum. When the position is equal to the given final state, it goes back to its initial state and vice versa. - class btn::regular_bg_move_toggle_action
- Changes the position of a regular_
bg_ ptr when the action is updated a given number of times. - class btn::regular_bg_mosaic_manager
- Manages if the mosaic effect must be applied to a regular_
bg_ ptr or not. - class btn::regular_bg_mosaic_toggle_action
- Toggles if the mosaic effect must be applied to a regular_
bg_ ptr or not when the action is updated a given number of times. - class btn::regular_bg_blending_manager
- Manages if blending must be applied to a regular_
bg_ ptr or not. - class btn::regular_bg_blending_toggle_action
- Toggles if blending must be applied to a regular_
bg_ ptr or not when the action is updated a given number of times. - class btn::sprite_visible_manager
- Manages if a sprite_
ptr must be committed to the GBA or not. - class btn::sprite_visible_toggle_action
- Toggles if a sprite_
ptr must be committed to the GBA or not when the action is updated a given number of times. - class btn::sprite_position_manager
- Manages the position of a sprite_
ptr. - class btn::sprite_move_by_action
- Modifies the position of a sprite_
ptr by a given delta. - class btn::sprite_move_to_action
- Modifies the position of a sprite_
ptr until it has a given state. - class btn::sprite_move_loop_action
- Modifies the position of a sprite_
ptr from a minimum to a maximum. When the position is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_move_toggle_action
- Changes the position of a sprite_
ptr when the action is updated a given number of times. - class btn::sprite_rotation_manager
- Manages the rotation angle of a sprite_
ptr. - class btn::sprite_rotate_by_action
- Modifies the rotation angle of a sprite_
ptr by delta_rotation_angle. When the rotation angle is over 360, it goes back to 0 and vice versa. - class btn::sprite_rotate_to_action
- Modifies the rotation angle of a sprite_
ptr until it has a given state. - class btn::sprite_rotate_loop_action
- Modifies the rotation angle of a sprite_
ptr from a minimum to a maximum. When the rotation angle is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_rotate_toggle_action
- Changes the rotation angle of a sprite_
ptr when the action is updated a given number of times. - class btn::sprite_horizontal_scale_manager
- Manages the horizontal scale of a sprite_
ptr. - class btn::sprite_horizontal_scale_to_action
- Modifies the horizontal scale of a sprite_
ptr until it has a given state. - class btn::sprite_horizontal_scale_loop_action
- Modifies the horizontal scale of a sprite_
ptr from a minimum to a maximum. When the horizontal scale is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_horizontal_scale_toggle_action
- Changes the horizontal scale of a sprite_
ptr when the action is updated a given number of times. - class btn::sprite_vertical_scale_manager
- Manages the vertical scale of a sprite_
ptr. - class btn::sprite_vertical_scale_to_action
- Modifies the vertical scale of a sprite_
ptr until it has a given state. - class btn::sprite_vertical_scale_loop_action
- Modifies the vertical scale of a sprite_
ptr from a minimum to a maximum. When the vertical scale is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_vertical_scale_toggle_action
- Changes the vertical scale of a sprite_
ptr when the action is updated a given number of times. - class btn::sprite_scale_manager
- Manages the scale of a sprite_
ptr. - class btn::sprite_scale_to_action
- Modifies the scale of a sprite_
ptr until it has a given state. - class btn::sprite_scale_loop_action
- Modifies the scale of a sprite_
ptr from a minimum to a maximum. When the scale is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_scale_toggle_action
- Changes the scale of a sprite_
ptr when the action is updated a given number of times. - class btn::sprite_horizontal_flip_manager
- Manages if a sprite_
ptr is flipped in its horizontal axis or not. - class btn::sprite_horizontal_flip_toggle_action
- Toggles if a sprite_
ptr must be flipped in the horizontal axis or not when the action is updated a given number of times. - class btn::sprite_vertical_flip_manager
- Manages if a sprite_
ptr is flipped in its vertical axis or not. - class btn::sprite_vertical_flip_toggle_action
- Toggles if a sprite_
ptr must be flipped in the vertical axis or not when the action is updated a given number of times. - class btn::sprite_mosaic_manager
- Manages if the mosaic effect must be applied to a sprite_
ptr or not. - class btn::sprite_mosaic_toggle_action
- Toggles if the mosaic effect must be applied to a sprite_
ptr or not when the action is updated a given number of times. - class btn::sprite_blending_manager
- Manages if blending must be applied to a sprite_
ptr or not. - class btn::sprite_blending_toggle_action
- Toggles if blending must be applied to a sprite_
ptr or not when the action is updated a given number of times. - class btn::sprite_window_manager
- Manages if a sprite_
ptr must be part of the silhouette of the sprite window or not. - class btn::sprite_window_toggle_action
- Toggles if a sprite_
ptr must be part of the silhouette of the sprite window or not when the action is updated a given number of times. - class btn::sprite_affine_mat_rotation_manager
- Manages the rotation angle of a sprite_
affine_ mat_ ptr. - class btn::sprite_affine_mat_rotate_by_action
- Modifies the rotation angle of a sprite_
affine_ mat_ ptr by delta_rotation_angle. When the rotation angle is over 360, it goes back to 0 and vice versa. - class btn::sprite_affine_mat_rotate_to_action
- Modifies the rotation angle of a sprite_
affine_ mat_ ptr until it has a given state. - class btn::sprite_affine_mat_rotate_loop_action
- Modifies the rotation angle of a sprite_
affine_ mat_ ptr from a minimum to a maximum. When the rotation angle is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_affine_mat_rotate_toggle_action
- Changes the rotation angle of a sprite_
affine_ mat_ ptr when the action is updated a given number of times. - class btn::sprite_affine_mat_horizontal_scale_manager
- Manages the horizontal scale of a sprite_
affine_ mat_ ptr. - class btn::sprite_affine_mat_horizontal_scale_to_action
- Modifies the horizontal scale of a sprite_
affine_ mat_ ptr until it has a given state. - class btn::sprite_affine_mat_horizontal_scale_loop_action
- Modifies the horizontal scale of a sprite_
affine_ mat_ ptr from a minimum to a maximum. When the horizontal scale is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_affine_mat_horizontal_scale_toggle_action
- Changes the horizontal scale of a sprite_
affine_ mat_ ptr when the action is updated a given number of times. - class btn::sprite_affine_mat_vertical_scale_manager
- Manages the vertical scale of a sprite_
affine_ mat_ ptr. - class btn::sprite_affine_mat_vertical_scale_to_action
- Modifies the vertical scale of a sprite_
affine_ mat_ ptr until it has a given state. - class btn::sprite_affine_mat_vertical_scale_loop_action
- Modifies the vertical scale of a sprite_
affine_ mat_ ptr from a minimum to a maximum. When the vertical scale is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_affine_mat_vertical_scale_toggle_action
- Changes the vertical scale of a sprite_
affine_ mat_ ptr when the action is updated a given number of times. - class btn::sprite_affine_mat_scale_manager
- Manages the scale of a sprite_
affine_ mat_ ptr. - class btn::sprite_affine_mat_scale_to_action
- Modifies the scale of a sprite_
affine_ mat_ ptr until it has a given state. - class btn::sprite_affine_mat_scale_loop_action
- Modifies the scale of a sprite_
affine_ mat_ ptr from a minimum to a maximum. When the scale is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_affine_mat_scale_toggle_action
- Changes the scale of a sprite_
affine_ mat_ ptr when the action is updated a given number of times. - class btn::sprite_affine_mat_horizontal_flip_manager
- Manages if a sprite_
affine_ mat_ ptr is flipped in its horizontal axis or not. - class btn::sprite_affine_mat_horizontal_flip_toggle_action
- Toggles if a sprite_
affine_ mat_ ptr must be flipped in the horizontal axis or not when the action is updated a given number of times. - class btn::sprite_affine_mat_vertical_flip_manager
- Manages if a sprite_
affine_ mat_ ptr is flipped in its vertical axis or not. - class btn::sprite_affine_mat_vertical_flip_toggle_action
- Toggles if a sprite_
affine_ mat_ ptr must be flipped in the vertical axis or not when the action is updated a given number of times. -
template<int MaxSize>class btn::sprite_animate_action
- Changes the tile set of a sprite_
ptr when the action is updated a given number of times. -
template<int MaxSize>class btn::sprite_cached_animate_action
- Changes the tile set of a sprite_
ptr when the action is updated a given number of times. - class btn::sprite_palette_inverted_manager
- Manages if the colors of a sprite_
palette_ ptr must be inverted or not. - class btn::sprite_palette_inverted_toggle_action
- Toggles if the colors of a sprite_
palette_ ptr must be inverted or not when the action is updated a given number of times. - class btn::sprite_palette_grayscale_manager
- Manages the intensity of the grayscale effect applied to a sprite_
palette_ ptr. - class btn::sprite_palette_grayscale_to_action
- Modifies the intensity of the grayscale effect applied to a sprite_
palette_ ptr until it has a given state. - class btn::sprite_palette_grayscale_loop_action
- Modifies the intensity of the grayscale effect applied to a sprite_
palette_ ptr from a minimum to a maximum. When the intensity is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_palette_grayscale_toggle_action
- Changes the intensity of the grayscale effect applied to a sprite_
palette_ ptr when the action is updated a given number of times. - class btn::sprite_palette_fade_manager
- Manages the intensity of the fade effect applied to a sprite_
palette_ ptr. - class btn::sprite_palette_fade_to_action
- Modifies the intensity of the fade effect applied to a sprite_
palette_ ptr until it has a given state. - class btn::sprite_palette_fade_loop_action
- Modifies the intensity of the fade effect applied to a sprite_
palette_ ptr from a minimum to a maximum. When the intensity is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_palette_fade_toggle_action
- Changes the intensity of the fade effect applied to a sprite_
palette_ ptr when the action is updated a given number of times. - class btn::sprite_palette_rotate_manager
- Manages the number of colors to rotate to the right in a sprite_
palette_ ptr. - class btn::sprite_palette_rotate_by_action
- Modifies the number of colors to rotate to the right in a sprite_
palette_ ptr by delta_count when the action is updated a given number of times. When the property is over the given maximum, it goes back to the given minimum and vice versa. - class btn::sprite_palette_rotate_to_action
- Modifies the number of colors to rotate to the right in a sprite_
palette_ ptr until it has a given state. - class btn::sprite_palette_rotate_loop_action
- Modifies the number of colors to rotate to the right in a sprite_
palette_ ptr from a minimum to a maximum. When the number of colors to rotate to the right is equal to the given final state, it goes back to its initial state and vice versa. - class btn::sprite_palette_rotate_toggle_action
- Changes the number of colors to rotate to the right in a sprite_
palette_ ptr when the action is updated a given number of times. - class btn::sprite_palettes_brightness_manager
- Manages the brightness of all sprite color palettes.
- class btn::sprite_palettes_brightness_to_action
- Modifies the brightness of all sprite color palettes until it has a given state.
- class btn::sprite_palettes_brightness_loop_action
- Modifies the brightness of all sprite color palettes from a minimum to a maximum. When the brightness is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprite_palettes_brightness_toggle_action
- Changes the brightness of all sprite color palettes when the action is updated a given number of times.
- class btn::sprite_palettes_contrast_manager
- Manages the contrast of all sprite color palettes.
- class btn::sprite_palettes_contrast_to_action
- Modifies the contrast of all sprite color palettes until it has a given state.
- class btn::sprite_palettes_contrast_loop_action
- Modifies the contrast of all sprite color palettes from a minimum to a maximum. When the contrast is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprite_palettes_contrast_toggle_action
- Changes the contrast of all sprite color palettes when the action is updated a given number of times.
- class btn::sprite_palettes_intensity_manager
- Manages the intensity of all sprite color palettes.
- class btn::sprite_palettes_intensity_to_action
- Modifies the intensity of all sprite color palettes until it has a given state.
- class btn::sprite_palettes_intensity_loop_action
- Modifies the intensity of all sprite color palettes from a minimum to a maximum. When the intensity is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprite_palettes_intensity_toggle_action
- Changes the intensity of all sprite color palettes when the action is updated a given number of times.
- class btn::sprite_palettes_inverted_manager
- Manages if the colors of all sprite color palettes must be inverted or not.
- class btn::sprite_palettes_inverted_toggle_action
- Toggles if the colors of all sprite color palettes must be inverted or not when the action is updated a given number of times.
- class btn::sprite_palettes_grayscale_manager
- Manages the intensity of the grayscale effect applied to all sprite color palettes.
- class btn::sprite_palettes_grayscale_to_action
- Modifies the intensity of the grayscale effect applied to all sprite color palettes until it has a given state.
- class btn::sprite_palettes_grayscale_loop_action
- Modifies the intensity of the grayscale effect applied to all sprite color palettes from a minimum to a maximum. When the intensity is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprite_palettes_grayscale_toggle_action
- Changes the intensity of the grayscale effect applied to all sprite color palettes when the action is updated a given number of times.
- class btn::sprite_palettes_fade_manager
- Manages the intensity of the fade effect applied to all sprite color palettes.
- class btn::sprite_palettes_fade_to_action
- Modifies the intensity of the fade effect applied to all sprite color palettes until it has a given state.
- class btn::sprite_palettes_fade_loop_action
- Modifies the intensity of the fade effect applied to all sprite color palettes from a minimum to a maximum. When the intensity is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprite_palettes_fade_toggle_action
- Changes the intensity of the fade effect applied to all sprite color palettes when the action is updated a given number of times.
- class btn::sprites_mosaic_horizontal_stretch_manager
- Manages the horizontal stretch of the mosaic applied to the sprites.
- class btn::sprites_mosaic_horizontal_stretch_to_action
- Modifies the horizontal stretch of the mosaic applied to the sprites until it has a given state.
- class btn::sprites_mosaic_horizontal_stretch_loop_action
- Modifies the horizontal stretch of the mosaic applied to the sprites from a minimum to a maximum. When the horizontal stretch is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprites_mosaic_horizontal_stretch_toggle_action
- Changes the horizontal stretch of the mosaic applied to the sprites when the action is updated a given number of times.
- class btn::sprites_mosaic_vertical_stretch_manager
- Manages the vertical stretch of the mosaic applied to the sprites.
- class btn::sprites_mosaic_vertical_stretch_to_action
- Modifies the vertical stretch of the mosaic applied to the sprites until it has a given state.
- class btn::sprites_mosaic_vertical_stretch_loop_action
- Modifies the vertical stretch of the mosaic applied to the sprites from a minimum to a maximum. When the vertical stretch is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprites_mosaic_vertical_stretch_toggle_action
- Changes the vertical stretch of the mosaic applied to the sprites when the action is updated a given number of times.
- class btn::sprites_mosaic_stretch_manager
- Manages the stretch of the mosaic applied to the sprites.
- class btn::sprites_mosaic_stretch_to_action
- Modifies the stretch of the mosaic applied to the sprites until it has a given state.
- class btn::sprites_mosaic_stretch_loop_action
- Modifies the stretch of the mosaic applied to the sprites from a minimum to a maximum. When the stretch is equal to the given final state, it goes back to its initial state and vice versa.
- class btn::sprites_mosaic_stretch_toggle_action
- Changes the stretch of the mosaic applied to the sprites when the action is updated a given number of times.


Keyboard Navigation
Usage
- Press Ctrl+Space to highlight links
- Use the numbers to choose the link to follow
- (Use Backspace to correct, Escape to cancel)
- Press Enter to follow the link
Custom shortcut
Use the built-in Chrome shortcut editor:
chrome://extensions/configureCommands
You need to copy & paste this url into a new tab. Linking to a chrome:// URL doesn't work here, sorry.
Credits
Made by Matthias Schneider - flurp.de.
This extension is open source. Please report new ideas and issues there.


"If the user trusts the CA and can verify the CA's signature, then he can also assume that a certain public key does indeed belong to whoever is identified in the certificate."
Mutual authentication systems are designed to authenticate the two communicating parties to each other. In most scenarios an ssl certificate authenticates the server. Whereas the client is authenticated by the means of a username and password. SSL certificates however, can also be used to authenticate the client. The easiest way to set up a certificate based authentication is to create our own certificate authority. But before we do that lets quickly address the most important question regarding the CA
Why do we even need a CA?
When you get a certificate from a CA what becomes most important is the fact that its authenticity is protected. In other words a CA digitally signs the certificate with its private key. A public (unsigned) certificate can be hijacked and used maliciously. But a digitally signed certificate can't be reproduced since the hijacker does not have a private key to sign the certificate with.
To state simply if you have a CA on your server and you can ensure the protection of the CA's private key any certificate that is signed by the CA comes with a guarantee that it has been issued by a trusted source. An unsigned certificate has no such guarantee.
Now when it comes to server side certificates this guarantee is provided by organizations like GeoTrust, go daddy, letsencrypt etc. This ensures that when our server is accessed by clients like web browser, which already come prepackaged with the public certificates of these organizations, the signature of the server certificate can be verified and the end user can safely assume that his connection is secure.
We are free to create our own CA. It won't be recognized by client tools like web browsers but it provides more than enough trust for using it in, say, backend api services as long as the private key is protected. Enough with the theory though. It's time for some action.
I like my sugar sweet
To create a certificate authority all we need is a couple of lines of openssl magic
--For generating the CA Key--
-- openssl genrsa -des3 -passout pass:abba -out ../utils/test_certs/ca.key 4096
--For generating the CA certificate--
--openssl req -new -x509 -days 365 -key ../utils/test_certs/ca.key -passin pass:abba -out ../utils/test_certs/ca.cert -subj "/C=IN/ST=HR/L=GGN/O=wrinq/CN=www.wrinq.com"
And that's basically all there is to it. Let's quickly go through the parameters used to generate the key and the certificate.
The `-passout` parameter specifies a password to encrypt the private key with. It ensures that even if the private key gets stolen to attacker is not able to do much with it. The password can also be supplied via a file using the notation `-passout file:path`. Supplying the password via a file has the advantage it it can't be read by the utilities like `ps`.
Similarly the -passin parameter specifies the password to decrypt the file. Just like `-passout` it may be supplied in a file to prevent it from being read from utilities like `ps` .
The `out` parameter accepts the path to which the output file is written.
The `subj` allows you to pass the Distinguished Name (DN) as command line arguments instead of being prompted on the terminal.
If the commands are executed successfully you should see the "ca.cert" and the "ca.key" files in the "test_certs" directory.So much for the generation of the Certificate Authority. Now we may create client certificates and have them signed by our CA.
The steps involved for creation of a client certificate are not all that different from the creation of a CA certificate.
#create a private key for the client
openssl genrsa -des3 -passout pass:abba -out utils/test_certs/client_new.key
#create a certificate signing request using the clients private key
openssl req -new -key utils/test_certs/client_new.key -out utils/test_certs/client_new.csr -passin pass:abba -subj<EMAIL_ADDRESS>#create the client certificate from the CSR and digitally sign it with the CA certificate that we created previously
openssl x509 -req -days 365 -in utils/test_certs/client_new.csr -CA utils/test_certs/ca.cert -CAkey utils/test_certs/ca.key -passin pass:abba -set_serial 01 -out utils/test_certs/shail.cert
The only difference between creating a client certificate and creating a CA is that, while creating a client, we introduce an additional step where it's digitally signed by our CA. And since we've already discussed the importance of signing it with a CA lets move look at the directives needed to configure nginx to accept client certificates.
Nginx configuration for client side certificates
The the ssl configuration for nginx is simple enough
## server certificate configuration
ssl_certificate ./utils/test_certs/test_cert.pem;
ssl_certificate_key ./utils/test_certs/test_key.pem;
## CA certificate configuration
ssl_client_certificate ./utils/test_certs/ca.cert;
ssl_verify_client on;
## Other ssl directives
ssl_session_timeout 5m;
ssl_protocols SSLv2 SSLv3 TLSv1 TLSv1.2 TLSv1.1;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_prefer_server_ciphers on;
The ssl configuration can be divided into three distinct sections. The `ssl_certificate` and the `ssl_certificate_key` directives specify the path for certificate and key files for the server. These directives allow the client to authenticate the server.
The `ssl_client_certificate` directive allows our server to verify the authenticity of the client by ensuring that a certificate send by the client request is digitally signed by our CA.
There are some other ssl directives for configuring the timeout, ciphers to be used etc but they are not pertinent to the discussion.
With the following configuration in place:-
Additional processing on parsed certificate parameters
Nginx gives you access to certain parameters that allow you to determine the status of client certificate. They are documented on the nginx's official website. Among the listed variables I found the `ssl_client_s_dn` variable to be most useful because it gives you the distinguished name in a parsed format like so:-
<EMAIL_ADDRESS>You can parse this information and perform additional processing on the parameters. It's pretty simple if you are using openresty (which you should be since its the best thing in the world). Here's all that you need to do:
local dn = ngx.var.ssl_client_s_dn
This one line of code opens up all sorts of possibilities for us. One that I particularly like is to have a database entry on the email field of the distinguished name. This way we ensure that we issue only one certificate per email address (which by the way is a standard practice among the big CAs) and if we have to look up additional details for person to whom the certificate belongs we can simply look up the corresponding email. The certificate ensures the authenticity or the request and the rest of the details are kept safe in the database.
Shouldn't a serial number be used to uniquely identify a certificate?
A serial number uniquely identifies a certificate issued by a CA. That is two certificates issued by two different CA's can have same serial numbers. In our case, since we are our own CA, a serial number seems like a good choice .But our goal here is not to uniquely identify a certificate. Rather to uniquely identify a certificate holder. A valid email account with an organization is a good indicator of authenticity of a certificate holder. A serial number is just a random string that conveys no useful information regarding "the face behind" the certificate. However do experiment for yourself and see what parameter best fits your needs.
Testing our MAS server
There is only so much that can be written about the concepts and strategy. A program is meant to be run. So without wasting anymore words lets see how our code behaves in run time. Clone this repository and follow the instructions in the README file.
You should be able to verify that:-
The concept of mutual authentication systems is underutilized only because most of the client side certificates don't work with the browsers. However in the day and age of microservices the client certificates provide a very convent way to authenticate your consumers.
-Akshat Jiwan Sharma


I’m Jacky and I’m 22. I’m an autodidact web developer, a technology enthusiast and an aspiring hacker. I began my journey into tech a year ago and now teach at Tunapanda Institute in Kibera, Nairobi.
I have a knack for UI/UX development and testing. Interest and passion for software development and education. Impact oriented individual with the drive of problem solving and changing the little things I can in the world. Eager to be challenged in order to grow and improve my IT skills gained through previous experiences in the Technology and education sector
With great power comes great responsibility (Spider Man)
A successful man is built of a Thousand Failures (Ray Allen)
"Tell me and I forget.
Teach me and I remember.
Involve me and I learn.
Benjamin Franklin"


WITNESS LIST State Affairs Committee March 15, 1999-1:30P HB 601 For: Briskman, Mark (Self and Anti-Defamation League) Davis, Derek (Self) Kesari, Dimitri (Justice Fellowship; Religious Freedom Alliance) McFarland, Steven (Christian Legal Society; National Coalition for Free Exercise of Religion) Shackelford, Kelly (Self and Free Market Foundation; Liberty Legal Institute) Strickland, Phil (Texas Baptist Christian Coalition; RFRA Coalition) Against: Aaronson, Maxine (Texas Neighborhoods Together) Bowers, Christopher (Self and National Alliance of Preservation Commission, City of Dallas) Denton, Lowell (Self and City Attorney/City of Boerne) Emrich, Ron (Self) Erkan Jr, Habib (City of San Antonio) Garcia, Hector (Self) Hamilton, Marci (Self) Heath, Patrick (City of Boerne, Texas) Horsey, Catherine (Self and Preservation Dallas) McAlester, Virginia (Self) Miller, Laura (Self and Legislative Affairs Committee of Dallas City Council) Pate, Russ (Guadalupe Social Center CDC) Quimby, Marcel (National Trust for Historic Preservation/ SW Office) Spellerberg, Shirley (Self and City of Corinth) Thompson, Howard (Self) Villasana, Sol (Self) On: Laycock, Douglas (Self) Lee, Donald (Texas Conference of Urban Counties) Reynolds, Carl (Texas Department of Criminal Justice) Rickard, Frances (Texas Historical Commission) Wallace, Casey (Michael P. Fleming, Harris County Attorney) Willett, Don (Governor's Policy Office) HB 845 For: Smith, Tom "Smitty" (Public Citizens Members) Against: Floyd, Robert (Texas Society of Association Executives) HB 1016 On: Hassay, Jason (Dept of Information Resources) Martin, Robert (Library and Archives Commission) Piper, Michael (Texas State Library & Archives Commission) Zottarelli, Martha (Dept of Information Resources) HB 1264 On: Esquivel, Eddie (Dept of Information Resources) Zottarelli, Martha (Dept of Information Resources) HB 1450 Against: Dalby, Giles (Self and Texas Association of Counties) Hunter, Todd (Tx Assoc of Counties - Workers Compensation Self Insurance Fund & TAC - County Govt Risk Mgmt Pool) Stafford II, Harrison (Self and Texas Association of Counties Risk Management Pool) Thompson, John (County Judge & Commissioners Assoc) HJR 44 For: Baird, Charles (Self) Brannon, Bill (Self) Stouffer, Bill (Self and Common Cause)


-
We got to see my parents for an hour on a layover in Chicago from our long day of connections from Peru to Alaska.
-
A little reflection time during one of our layovers. We are really doing it!
-
In our first 5 minutes in Alaska, we see this massive moose in the middle of a residential area! Thankfully we didn't have too many more encounters during our riding and camping in the wilderness.
-
This guy was our hero! Thanks for putting our bikes together on such short notice!
-
The packing project. What do you bring on a 2 year bike tour?
-
So many emotions
-
Gemini twins
-
Alyssa started off our string of kind people taking us in during our biking journey.
-
Day #1
-
We quickly found out that there will be detours.
-
Ready to hit those mountains!
-
Day #2
-
-
-
You never know who you will meet on the road. Thanks David and Astro for the delicious juice and chats about life, adventure, and the environment. This man has lived!
-
We caught the one week of Fall in Alaska!
-
The things you see when taking it slow.
-
Beautiful lunch breaks
-
-
Camp life
-
We love this tent
-
-
-
My life is my message
-
-
We mostly had the roads to ourselves!

-
-
Yummy dehydrated food.. we were always so hungry that anything tasted delicious.
-
Morning pancakes.
-
-
Playtime
-
-
-
-
6 days in we had our first breakdown near the driveway of this house. We Mcmahan family welcomed us into our home for the weekend. We were in heaven with our first shower, laundry, and delicious home-cooked meals. One of the best weekends of our entire journey.
-
Fun with the kids.
-
-
We were always so hungry
-
Fixing the bikes.
-
MAKING the tool we needed.
-
Picking potatoes from the garden
-
Future bicycle tourists
-
-
-
-
Giving the legs a break
-
-
-
-
Quite nights along the Alaska highway
-
The one day of rain while biking in Alaska
-
The night a herd of Caribou ran past us while cooking. That's wilderness camping..
-
Road construction. A couple miles of a bike break
-
Beautiful roads
-
Out of the mountain pass
-
-
After fixing up this old bus, Jay and Debbie have had travelers from all over the world stay a night in this bear proof bus-home. Offering free coffee and free nights on the bus or camping, Jay says "You know...it's not all about the money." After many years at a high paying corporate job, Jay finds his happiness owning a small mom-and-pop shop in Alaska and helping out strangers. When we asked if we could buy a wrench from their store (just in case), they gave us one out of their toolbox, threw in a brand new leatherman multi-tool and wouldn't take our money. Good people
-
Lunch spots
-
-
Give the legs a break
-
Moving closer to the border
-
-
Canada here we come!
-
Hello Yukon!! Our first border crossing.


Getting to Yes
What is a good agreement?
Fisher and Ury explain that a good agreement is one which is wise and efficient, and which improves the parties’ relationship. Wise agreements satisfy the parties’ interests and are fair and lasting.
What are the 4 principles of principled negotiation?
- separate the people from the problem
- focus on interests rather than positions
- generate a variety of options before settling on an agreement
- insist that the agreement be based on objective criteria
3 stages to the negotiation process:
- analysis of the situation or problem, of the other parties’ interests and perceptions, and of the existing options
- plan ways of responding to the situation and the other parties
- the parties discuss the problem trying to find a solution on which they can agree.
Separating People and Issues
Separating the people from the issues allows the parties to address the issues without damaging their relationship. It also helps them to get a clearer view of the substantive problem.
The parties should try to put themselves in the other’s place. The parties should not simply assume that their worst fears will become the actions of the other party. Nor should one side blame the other for the problem. Each side should try to make proposals which would be appealing to the other side. The more that the parties are involved in the process, the more likely they are to be involved in and to support the outcome.
The first step in dealing with emotions is to acknowledge them, and to try to understand their source. The parties must acknowledge the fact that certain emotions are present, even when they don’t see those feelings as reasonable. Dismissing another’s feelings as unreasonable is likely to provoke an even more intense emotional response. The parties must allow the other side to express their emotions. They must not react emotionally to emotional outbursts. Symbolic gestures such as apologies or an expression of sympathy can help to defuse strong emotions.
The parties should employ active listening. The listeners should give the speaker their full attention, occasionally summarizing the speaker’s points to confirm their understanding. It is important to remember that understanding the other’s case does not mean agreeing with it. Speakers should direct their speech toward the other parties and keep focused on what they are trying to communicate. Each side should avoid blaming or attacking the other, and should speak about themselves.
Generally the best way to deal with people problems is to prevent them from arising. People problems are less likely to come up if the parties have a good relationship, and think of each other as partners in negotiation rather than as adversaries.
Focus on Interests
Good agreements focus on the parties’ interests, rather than their positions. As Fisher and Ury explain, “Your position is something you have decided upon. Your interests are what caused you to so decide.”[p. 42] Defining a problem in terms of positions means that at least one party will “lose” the dispute. When a problem is defined in terms of the parties’ underlying interests it is often possible to find a solution which satisfies both parties’ interests.
The first step is to identify the parties’ interests regarding the issue at hand. This can be done by asking why they hold the positions they do, and by considering why they don’t hold some other possible position. Each party usually has a number of different interests underlying their positions. And interests may differ somewhat among the individual members of each side. However, all people will share certain basic interests or needs, such as the need for security and economic well-being.
Once the parties have identified their interests, they must discuss them together. If a party wants the other side to take their interests into account, that party must explain their interests clearly. The other side will be more motivated to take those interests into account if the first party shows that they are paying attention to the other side’s interests. Discussions should look forward to the desired solution, rather than focusing on past events. Parties should keep a clear focus on their interests, but remain open to different proposals and positions. Generate Options
Fisher and Ury identify four obstacles to generating creative options for solving a problem.
-
Parties may decide prematurely on an option and so fail to consider alternatives
-
The parties may be intent on narrowing their options to find the single answer
-
The parties may define the problem in win-lose terms, assuming that the only options are for one side to win and the other to lose.
-
A party may decide that it is up to the other side to come up with a solution to the problem.
The authors also suggest four techniques for overcoming these obstacles and generating creative options. First it is important to separate the invention process from the evaluation stage. The parties should come together in an informal atmosphere and brainstorm for all possible solutions to the problem. Wild and creative proposals are encouraged. Brainstorming sessions can be made more creative and productive by encouraging the parties to shift between four types of thinking: stating the problem, analyzing the problem, considering general approaches, and considering specific actions. Parties may suggest partial solutions to the problem. Only after a variety of proposals have been made should the group turn to evaluating the ideas. Evaluation should start with the most promising proposals. The parties may also refine and improve proposals at this point.
Participants can avoid falling into a win-lose mentality by focusing on shared interests. When the parties’ interests differ, they should seek options in which those differences can be made compatible or even complementary. The key to reconciling different interests is to “look for items that are of low cost to you and high benefit to them, and vice versa.”[p. 79] Each side should try to make proposals that are appealing to the other side, and that the other side would find easy to agree to. To do this it is important to identify the decision makers and target proposals directly toward them. Proposals are easier to agree to when they seem legitimate, or when they are supported by precedent. Threats are usually less effective at motivating agreement than are beneficial offers. Use Objective Criteria
When interests are directly opposed, the parties should use objective criteria to resolve their differences. Allowing such differences to spark a battle of wills will destroy relationships, is inefficient, and is not likely to produce wise agreements. Decisions based on reasonable standards makes it easier for the parties to agree and preserve their good relationship.
The first step is to develop objective criteria. Usually there are a number of different criteria which could be used. The parties must agree which criteria is best for their situation. Criteria should be both legitimate and practical. Scientific findings, professional standards, or legal precedent are possible sources of objective criteria. One way to test for objectivity is to ask if both sides would agree to be bound by those standards. Rather than agreeing in substantive criteria, the parties may create a fair procedure for resolving their dispute. For example, children may fairly divide a piece of cake by having one child cut it, and the other choose their piece.
There are three points to keep in mind when using objective criteria. First each issue should be approached as a shared search for objective criteria. Ask for the reasoning behind the other party’s suggestions. Using the other parties’ reasoning to support your own position can be a powerful way to negotiate. Second, each party must keep an open mind. They must be reasonable, and be willing to reconsider their positions when there is reason to. Third, while they should be reasonable, negotiators must never give in to pressure, threats, or bribes. When the other party stubbornly refuses to be reasonable, the first party may shift the discussion from a search for substantive criteria to a search for procedural criteria. When the Other Party Is More Powerful
No negotiation method can completely overcome differences in power. However, Fisher and Ury suggest ways to protect the weaker party against a poor agreement, and to help the weaker party make the most of their assets.
Often negotiators will establish a “bottom line” in an attempt to protect themselves against a poor agreement.  Negotiators decide in advance of actual negotiations to reject any proposal below that line. Fisher and Ury argue against using bottom lines. Because the bottom line figure is decided upon in advance of discussions, the figure may be arbitrary or unrealistic. Having already committed oneself to a rigid bottom line also inhibits inventiveness in generating options.
Instead the weaker party should concentrate on assessing their best alternative to a negotiated agreement (BATNA). The authors note that “the reason you negotiate is to produce something better than the results you can obtain without negotiating.”[p. 104] The weaker party should reject agreements that would leave them worse off than their BATNA. Without a clear idea of their BATNA a party is simply negotiating blindly. The BATNA is also key to making the most of existing assets. Power in a negotiation comes from the ability to walk away from negotiations. Thus the party with the best BATNA is the more powerful party in the negotiation. Generally, the weaker party can take unilateral steps to improve their alternatives to negotiation. They must identify potential opportunities and take steps to further develop those opportunities. The weaker party will have a better understanding of the negotiation context if they also try to estimate the other side’s BATNA. Fisher and Ury conclude that “developing your BATNA thus not only enables you to determine what is a minimally acceptable agreement, it will probably raise that minimum.”[p. 111] When the Other Party Won’t Use Principled Negotiation
Sometimes the other side refuses to budge from their positions, makes personal attacks, seeks only to maximize their own gains, and generally refuses to partake in principled negotiations. Fisher and Ury describe three approaches for dealing with opponents who are stuck in positional bargaining. First, one side may simply continue to use the principled approach. The authors point out that this approach is often contagious.
Second, the principled party may use “negotiation jujitsu” to bring the other party in line. The key is to refuse to respond in kind to their positional bargaining. When the other side attacks, the principles party should not counter attack, but should deflect the attack back onto the problem. Positional bargainers usually attack either by asserting their position, or by attacking the other side’s ideas or people. When they assert their position, respond by asking for the reasons behind that position. When they attack the other side’s ideas, the principle party should take it as constructive criticism and invite further feedback and advice. Personal attacks should be recast as attacks on the problem. Generally the principled party should use questions and strategic silences to draw the other party out.
When the other party remains stuck in positional bargaining, the one-text approach may be used. In this approach a third party is brought in. The third party should interview each side separately to determine what their underlying interests are. The third party then assembles a list of their interests and asks each side for their comments and criticisms of the list. She then takes those comments and draws up a proposal. The proposal is given to the parties for comments, redrafted, and returned again for more comments. This process continues until the third party feels that no further improvements can be made. At that point, the parties must decide whether to accept the refined proposal or to abandon negotiations. When the Other Party Uses Dirty Tricks
Sometimes parties will use unethical or unpleasant tricks in an attempt to gain an advantage in negotiations such as good guy/bad guy routines, uncomfortable seating, and leaks to the media. The best way to respond to such tricky tactics is to explicitly raise the issue in negotiations, and to engage in principled negotiation to establish procedural ground rules for the negotiation.
Fisher and Ury identify the general types of tricky tactics. Parties may engage in deliberate deception about the facts, their authority, or their intentions. The best way to protect against being deceived is to seek verification the other side’s claims. It may help to ask them for further clarification of a claim, or to put the claim in writing. However, in doing this it is very important not to bee seen as calling the other party a liar; that is, as making a personal attack. Another common type of tactic is psychological warfare. When the tricky party uses a stressful environment, the principled party should identify the problematic element and suggest a more comfortable or fair change. Subtle personal attacks can be made less effective simply be recognizing them for what they are.  Threats are a way to apply psychological pressure. The principled negotiator should ignore them where possible, or undertake principled negotiations on the use of threats in the proceedings.
The last class of trick tactics are positional pressure tactics which attempt to structure negotiations so that only one side can make concessions. The tricky side may refuse to negotiate, hoping to use their entry into negotiations as a bargaining chip, or they may open with extreme demands. The principled negotiator should recognize this as a bargaining tactic, and look into their interests in refusing to negotiate. They may escalate their demands for every concession they make. The principled negotiator should explicitly identify this tactic to the participants, and give the parties a chance to consider whether they want to continue negotiations under such conditions. Parties may try to make irrevocable commitments to certain positions, or to make-take-it-or-leave-it offers. The principled party may decline to recognize the commitment or the finality of the offer, instead treating them as proposals or expressed interests.


--- layout: archive title: Zulip Chat Archive permalink: /stream/113488-general/topic/goal.20selectors.html ---
In Coq they have really nice goal selectors. You can write things like
2,5,8: cbn; by rewrite right_identity. 3,4: symmetry; apply left_identity.
in your proof scripts. How hard would it be to get that for Lean tactic proofs?
I remember @Scott Morrison had a work_on_goal 1 { tac }
tactic that is used by tidy scripts; that could be adapted to select multiple goals
But it's still quite verbose
It would be nice if we could now hack Lean to support really short goal selectors
I'm not sure I want to encourage this kind of proof style though
No, I think the cost of hacking Lean to support this is way higher than the value of the slightly shorter proofs it would allow.
numeric indexes are rarely the most maintainable
ok, fair enough
what's the recommended way to deal with proofs with lots of cases where there's perhaps lots of duplication at the start of some cases, somewhere in the middle of some cases and at the end of some cases?
assume that lemmas might not make sense because due to their specialized nature they will only be used in this one proof, and that we can't change the predicates that we work on to cause less duplication.
I will often use ; try { tac }
if tac
works on say 4 of the 16 goals I just got
in the past i've used multiple any_goals
commands to deal with this, but it's terrible for maintainability because it makes the proofs very difficult to follow
case
already accepts multiple goal tag names. Unfortunately goal tags aren't used widely in Lean 3.
@Sebastian Ullrich nice! I didn't even know that.
{% endraw %}Last updated: Apr 24 2020 at 19:02 UTC


ArxivKit
ArxivKit is a Swift DSL wrapper for arXiv API. It includes an embedded Domain-specific language for constructing arXiv queries in a type-safe way. For detailed explanation of all the available APIs see project documentation page.
This project is not affiliated with arXiv.org.
Supported Platforms
Minimal version of Swift required for building the package is 5.3. Following platforms are supported:
- macOS (from v11.0)
- iOS, iPadOS, Mac Catalyst (from v14.0)
- Linux (tested on Ubuntu 20.04)
Installation
To use in an Xcode project, add https://github.com/ivicamil/ArxivKit.git
as package dependency as explained in Apple developer documentation.
In package-based projects, add ArxivKit
dependency to Package.swift
as explained bellow:
// swift-tools-version:5.3
import PackageDescription
let package = Package(
name: "ProjectName",
platforms: [],
dependencies: [
// Replace the version string with your own desired minimal version.
.package(url: "https://github.com/ivicamil/ArxivKit.git", from: "2.0.0")
],
targets: [
.target(
name: "ProjectName",
dependencies: ["ArxivKit"])
]
)
Usage
Networking
ArxivKit
uses URLSession
for sending API requests. It is strongly recommended to reuse a single session instance for multiple related tasks. For detailed information about creating, configuring and using URLSession
and related APIs see Apple Developer documentation for the class. In many cases, including all the examples from this document, a session with default configuration is enough:
let session = URLSession(configuration: .default)
or
let session = URLSession(configuration: .default, delegate: nil, delegateQueue: .main)
ArxivKit
defines convenience extension methods on URLSession
and ArxivRequest
that create URLSessionDataTask
for sending arXiv API requests and parsing received response. In more advanced cases, clients can implement their own custom networking layer and still use this library as a Domain Specific Language for constructing ArxivRequest
values. In that case, ArxivParser
can be used for parsing raw API responses to ArxivReponse
values.
Arxiv Query
ArxivQuery
type specifies different possible information that can be searched on arXiv. ArxivQuery
conforms to ArxivRequest
protocol and it can be used to create and run fetch tasks. Before fetching, an ArxivRequest
can be configured with various modifier methods to define desired number of articles per page, sorting order and criterion etc.
ArxivKit
enables construction of all the search queries available in Arxiv API. Articles can be searched for a term in any of the available fields, by arXiv subject or by publication and update dates. All the subjects are available as constants under following namespaces:
Physics
Astrophysics
CondensedMatter
NonlinearSciences
OtherPhysicsSubjects
Mathematics
ComputerScience
QuantitativeBiology
ElectricalEngineeringAndSystemsScience
Statistics
QuantitativeFinance
Economy
Queries are constructed by using an embedded Domain Specific Language created with Swift feature called Result Builders, that was first used in Apple’s SwiftUI Framework. The DSL enables creating arbitrarily complex query trees by using an intuitive syntax.
After a query is constructed and configured, fetch(using:completion:)
or other related methods can be used to construct and run a fetch task. If no error occurs, fetch task returns an ArxivResponse
, a parsed arXiv API atom feed. The response stores various metadata and a list of ArxivEntry
values. Each entry stores information about a single arXiv article, such as its title, abstract, authors, PDF link etc.
Bellow are the examples of few common use scenarios.
Performing Search Using async/await (iOS 15, macOS 12 or greater)
do {
let response = try await term("electron").fetch(using: session)
let articles = response.entries
print("Found \(response.totalResults) articles")
print()
print(articles.map { $0.title }.joined(separator: "\n\n"))
} catch {
print("Could not fetch articles: \(error.localizedDescription)")
}
Performing Search Using Completion Handler
term("electron").fetch(using: session) { result in
switch result {
case let .success(response):
let articles = response.entries
print("Found \(response.totalResults) articles")
print()
print(articles.map { $0.title }.joined(separator: "\n\n"))
case let .failure(error):
print("Could not fetch articles: \(error.localizedDescription)")
}
}
Simple Queries
term("dft")
term("dft", in: .title)
term("dft", in: .abstract)
term("Feynman", in: .authors)
term("20 pages", in: .comment)
term("AMS", in: .journalReference)
subject(Physics.computationalPhysics)
submitted(in: .past(.month))
lastUpdated(in: .past(5, unit: .day))
Complex Queries
all {
any {
term("dft", in: .title)
term(#""ab initio""#, in: .title)
}
subject(Physics.computationalPhysics)
}
.excluding {
term("conductivity", in: .title)
}
Fetching Specific Articles
ArxivIdList("2101.02212", "2101.02215")
.fetch(using: session) { result in
// Do something with the result
}
Fetching All Versions of an Article
let entry: ArxivEntry = ...
ArxivIdList(ids: entry.allVersionsIDs)
.fetch(using: session) { result in
// Do something with the result
}
Paging Example
var currentResponse: ArxivResponse?
func fetchElectronArticles(startIndex i: Int) {
term("electron")
.itemsPerPage(20)
.startIndex(i)
.fetch(using: session) { result in
switch result {
case let .success(response):
currentResponse = response
print("Page \(response.currentPage) fetched.")
case let .failure(error):
// Deal with error
}
}
}
// Fetch the first page
fetchElectronArticles(startIndex: 0)
// When we are sure that the first page is fetched, we can fetch the second page
if let response = currentResponse, let secondPageIndex = response.nextPageStartIndex {
fetchElectronArticles(startIndex: secondPageIndex)
}
Configuring Request
term("electron")
.sorted(by: .relevance)
.sortingOrder(.descending)
.itemsPerPage(20)
.startIndex(60)
.fetch(using: session) { result in
// Do something with the result
}
Advanced Processing of ArxivKit
Results with Combine (Apple Platforms Only)
On Apple platforms, Combine framework can be used for advanced processing of URL Session data task results, as explained in this Apple Developer Documentation article. ArxivKit
works naturally with Combine
. Bellow is a simple example of creating a publisher for receiving arXiv API results and subscribing to it:
import Combine
var cancelable: AnyCancellable?
cancelable = session
.dataTaskPublisher(for: term("electronic configuration").url)
.tryMap(ArxivParser().parse)
.receive(on: DispatchQueue.main)
.sink(
receiveCompletion: { completion in
let outcome: String
switch completion {
case .finished:
outcome = "successfully"
case let .failure(error):
outcome = "with error: \(error)"
}
print("Publisher completed \(outcome).")
},
receiveValue: { response in
print ("Received arXiv feed:\n\n \(response)\n")
}
)
License
ArxivKit
is released under MIT license. For terms and conditions of using the arXiv API itself see arXiv API Help.


This sample demonstrates the fade effect when moving between tabs.
Note the cross-fade effect when switching between tabs.


It's always good to have links around:
CSS Tricks
MDN reference for
background-position
Official Whitehouse website
StackOverflow Q&A site
Maybe you would like to read some interesting stuff today?
A Dozen Things I’ve Learned from Elon Musk About Business and Investing
The Most Mysterious Object in the History of Technology
A political rally in action
Source:
https://s3-us-west-2.amazonaws.com/s.cdpn.io/2522641/rally.jpg
How many days are in a week?
5
8
7
3


Not getting any album downloads
-
jsheehan
I am a new user (just got license) and am using lasted release of Synergy. My experience so far is that I can never get any album art downloads from Amazon. All I get is a question mark. It's a little hard to believe that an item such as The Beatles Abbey Road is not available online. So any thoughts why I am not getting Synergy to look up or find artwork? I do have internet access.
John sheehan
-
Greg Hurrell
Sorry for taking so long to reply; this thread somehow slipped under the radar.
For general troubleshooting information see:
For information specific to the album covers feature and how it works see:
http://wincent.com/a/products/synergy-classic/album-covers/
Finally, it is worth checking that if you have a tool like Little Snitch running that it isn't blocking Synergy's attempts to reach Amazon.
Let me know if you have any further questions.
Reply
This topic is now closed.


HBV (.%) hepatitis (.–.) HIV Health []. criteria adults AVT data therapy {border-style DNA Sciences px;} #ffffff;} ;():–. ALT study Medicine Zambia men monoinfected patients EASL HBsAg-positivity chronic individuals treatment virus Pathogens infection review (–) Africa HBsAg-positive Hepatitis age based health proportion sample women (.) CI, Viral defined guidelines increased versus Reference University [], eligibility liver need odds population ART Africa. Biology Median Treat-B U/L Zambian antiviral cirrhosis eligible met ratio sex IU/ml Liver World compared elevation including pregnant px; risk similar survey using {font-family > <. CI) Ministry Study assessed associated font-size general household infection. reported rural testing used >, >. (i.e., .%; Africa, African Clinical European HBsAg Life Lusaka, Men Microbial antiretroviral coinfected decompensated diagnosed did double; evaluated evaluation fibrosis global higher income kPa low physical sciences survey, viral years (.% (AOR, .–.) ALT, Association Gastroenterology HBsAg-positives Infectious Microbiology Organisms Viruses WHO, ZamPHIA analysis, available border-color border-width countries developed elimination guidelines. incidence index large likely link men, original pathogens performed population-based recent score signs solid; status taking tested transmission use {font-style {font-weight <, ./j.jhep... ./journal.pone..tTable .–.). APRI AST-to-platelet AVT. Abbreviations: Disease Global HBV, HBsAg-positivity. HCC HIV-HBV IU/ml, Immunodeficiency International Lancet Lentivirus: National Research Retroviruses Survey Viruses: Zambia. Zambia[], ages antigen assess bold care cirrhosis, community confidence courier; criteria, current draftWriting em; facility gap hepatology. history hospital identified inclusion life major male medical participants performance pt;} referred slightly study, therapy. times years,


Q1: Healthcare Professionals can report incidents and unsafe situations without leaving their duty post. 1 2 3 4
Q2: Hospital Risk Officers categorise and report each notified incident according to its seriousness. 1 2 3 4
Q3: Hospital Management ensure Healthcare Professionals can take immediate action to limit harm to Patient, Visitors and Healthcare Professionals, before reporting Incidents. 1 2 3 4
Q4: Hospital Unit Staff that make reports in a careful manner and cooperate about shortcomings in Care Processes suffer no negative effect of their Reporting. 1 2 3 4
Q5: Hospital Management encourage Patients to report incidents and unsafe situations witnessed. 1 2 3 4
Q6: The Hospital has a Recall System for tracing and calling up of Patients if defects are noticed in materials, resources and equipment used in the care which could constitute a risk to Patient Safety. 1 2 3 4
Q7: The Hospital ensure Data collection of Incidents which enables understanding of Structural shortcomings in the Care Processes and other Hospital Processes. 1 2 3 4
Q8: The Hospital’s management periodically reports the results of the risk measurements to the Governance Body. 1 2 3 4
Q9: Hospital Management ensure situations with unacceptable risk for Quality can be stopped immediately and improved as necessary. 1 2 3 4
Q10: Hospital Management issue warnings about possible epidemics and how to identify, manage and control Epidemics. 1 2 3 4
Q11: Hospital has a Quality Assurance System for the central kitchen. 1 2 3 4
Q12: Hospital has Procedures for purchasing, handling, storage, preparation and distribution of foodstuffs and beverages. 1 2 3 4
Q13: Hospital Management has Procedures to guarantee Hygiene and Safety of Foodstuffs including both tastiness and attractiveness. 1 2 3 4
Q14: Hospital Management conduct Satisfaction Surveys into Patient and Staff including both tastiness and attractiveness of Food. 1 2 3 4
Q15: Hospital Management conducts periodic Risk Analysis on foodstuff provision, to identify and monitor critical points and make adjustments as necessary. 1 2 3 4
Q16: Hospital Management documents the outcomes of the risk analysis and monitoring in food provision chain in writing. 1 2 3 4
Q17: Hospital has documented and validated Procedures for enteral nutrition and dietary preparations. 1 2 3 4
Q18: Hospital has Maintenance and Quality Control Procedures for water, according to the various Uses like drinking, water for haemodialysis, water for equipment maintenance, etc. 1 2 3 4
Q19: Hospital has Maintenance and Quality Control Procedures for Air in Hospital Units that have a controlled ventilation system. 1 2 3 4
Q20: Hospital regularly assesses local attitudes towards non-injectable medications and addresses misconceptions about the effectiveness of non-injectable medications 1 2 3 4
Q21: Hospital provides training to health care workers on the effectiveness of non-injectable medications 1 2 3 4
Q22: Hospital provides information resources for Patients and their family Caregivers about the alternatives to injectable medications. 1 2 3 4
Q23: Hospital Management ensures medication is only given by injection when medically necessary and when an equivalent oral formulation is not available. 1 2 3 4
Q24: Hospital Management ensures Single-use injection for preventive and therapeutic injections like medication administration by injection or via an intravenous line. 1 2 3 4
Q25: Hospital Management ensures use of Safety Boxes and Sterile, single use injection devices for injection and reconstitution 1 2 3 4
Q26: The Hospital has Procedures for Use and Handling of ionization radiation generating equipment to minimise Patients, Healthcare Professionals and Visitor exposure to radiation. 1 2 3 4
Q27: Hospital ensures Ionization radiation generating equipment is exclusively operated by Hospital staff authorised to do so 1 2 3 4
Q28: Hospital has appointed an expert who is also responsible for the Procedure of handling ionization radiation generating equipment. 1 2 3 4
Q29: Hospital has Procedures for Use and Handling of Laser equipment that guarantees the safety of patients, Healthcare Professionals and Visitors. 1 2 3 4
Q30: Hospital Management ensure Laser equipment is exclusively operated by members of staff who are authorised to do so. 1 2 3 4
Q31: Hospital Management record and monitor exposure of authorised Healthcare Professionals to Radiation. 1 2 3 4
Q32: Hospital Management establishes the Policy, Structure and Responsibilities for Specific Prevention Programs. 1 2 3 4
Q33: The Medical Committee, Healthcare Practitioners and Director of Nursing are involved in developing Policies on specific prevention programs. 1 2 3 4
Q34: Hospital Management periodically train Health professionals on Specific Prevention Programs. 1 2 3 4
Q35: Hospital Management provide Adequate systems and Resources for operating Specific Prevention Programs. 1 2 3 4
Q36: Hospital Management assesses the effectiveness of Specific Prevention Programs and measures to improve the Program are implemented. 1 2 3 4
Q37: Hospital Management analyse Data obtained from Specific Prevention Programs and used the result to improve Professional Practice. 1 2 3 4
Q38: Hospital Management regularly inform Healthcare Professionals about Specific Prevention Programs with information obtained from national and regional structures relating to these programs passed on to prescribing doctors. 1 2 3 4
Q39: Hospital Management has developed a Transfusion Safety Program consisting of the Policy, Resources and Responsibilities for Transfusion Safety 1 2 3 4
Q40: Hospital Management ensures that Healthcare Professionals are aware of and observe the Procedures governing Transfusion Safety. 1 2 3 4
Q41: Hospital Transfusion Safety Policy also cover the use of labile blood derivatives. 1 2 3 4
Q42: Hospital Management includes The Medical Committee, Healthcare Practitioners and Director of Nursing in developing Transfusion Safety Policies and Program. 1 2 3 4
Q43: Hospital Management regularly train Healthcare Professionals on Transfusion Safety. 1 2 3 4
Q44: Hospital Management ensure Healthcare Professionals are aware of their obligation to report Sentinel Events relating to the use of Blood and Blood Products. 1 2 3 4
Q45: Hospital Management provide adequate Resources for operating Transfusion Safety Programs. 1 2 3 4
Q46: Hospital Management ensures that Transfusion Record is kept for Patients that receive Blood Transfusion. 1 2 3 4
Q47: Hospital Management ensures various stages of the transfusion process are conducted in compliance with good practice. 1 2 3 4
Q48: Hospital evaluates the application of protocols and procedures governing the various stages of the transfusion process. 1 2 3 4
Q49: Hospital Management ensure Healthcare Professionals observe and report Blood Transfusion Reactions. 1 2 3 4
Q50: Hospital Management continuously improve the Transfusion Safety Program with Data from Sentinel Events. 1 2 3 4
Q51: Hospital Management train Healthcare Professionals in the Procedures to be followed in the event of any incident. 1 2 3 4
Q52: Hospital Unit Staff monitor and inform all Patients that have received Blood Transfusion,which is recorded in Patient Record 1 2 3 4
Q53: Hospital Management has developed and continuously improve Procedures to ensure Hospital has Reliable Blood Supplies. 1 2 3 4
Q54: Hospital has an experienced Healthcare Professional responsible for supply,prescription and administering of blood and blood products. 1 2 3 4
Q55: Hospital Management ensure Medical products and devices prescribed in the Hospital are traceable. 1 2 3 4
Q56: Hospital Management has developed a Protocol for responding to health alerts concerning medical products and devices for therapeutic use. 1 2 3 4
Q57: Hospital Management analyses Data obtained from Specific Prevention Programs to improve Professional Practice regarding use of medical products and devices. 1 2 3 4
Q58: Hospital Management ensure that Healthcare Professionals are aware of their obligation to report any undesirable events relating to the use medical devices or elements. 1 2 3 4
Q59: Hospital Management ensure Healthcare Professionals are aware of their obligation to report Sentinel Events relating to the use of Derivatives of the Human Body 1 2 3 4
Q60: Hospital has Procedures for the preparation, processing , logistical management, prescription, administering and monitoring of Medication. 1 2 3 4
Q61: Hospital has an experienced Healthcare Professional responsible for the supply, preparation, processing, prescription and administering of medication. 1 2 3 4
Q62: Hospital Management has Protocols and Procedures for the prescribing and administering Antibiotics. 1 2 3 4
Q63: Hospital has Protocols and Procedures for the prescribing and administering Oncolytic agents. 1 2 3 4
Q64: Hospital has Protocols and Procedures for prescribing and administering radioactive substances like radiopharmaceuticals. 1 2 3 4
Q65: Hospital has specific Procedures for securing and tracking Poisons, Opiates and other addictive substances. 1 2 3 4


abstract class CGL::AnyGraph(V)
- CGL::AnyGraph(V)
- Reference
- Object
Direct Known Subclasses
Defined in:
cgl/algorithms/paths/shortest.crcgl/algorithms/paths/simple.cr
cgl/format/dot.cr
cgl/igraph.cr
cgl/traversal/breadth_first_search.cr
cgl/traversal/depth_first_search.cr
cgl/traversal/visitor.cr
Instance Method Summary
-
#==(other : self)
Whether
self
is equal to other. -
#==(other)
Returns
false
(other can only be aValue
here). - #accept(visitor : Visitor(V))
-
#add_edge(u : V, v : V)
Add an edge between vertices u and v.
-
#add_edge(edge : AnyEdge(V))
Add the given edge to the graph.
-
#add_vertex(v : V)
Add a single vertex (a.k.a.
-
#breadth_first_search(from vertex : V) : Iterator(V)
Returns an iterator over vertices from the given source v in a breadth-first search (DFS).
-
#breadth_first_search(from vertex : V, &)
Yields vertices from the given source v in a breadth-first search (DFS).
-
#clear
Empties an
AnyGraph
and returns it. -
#clone
Returns a deep copy of
self
. -
#count_simple_paths(source : V, target : V)
Count all simple paths between the two given vertices, where a simple path is a path with no repeated nodes.
-
#degree_of(v : V) : Int32
Returns the degree of the given vertex v.
-
#density : Float64
Returns the density of
self
. -
#depth_first_search(from vertex : V) : Iterator(V)
Returns an iterator over vertices from the given source v in a depth-first search (DFS).
-
#depth_first_search(from vertex : V, &)
Yields vertices from the given source v in a depth-first search (DFS).
- #depth_first_search(vertex : V, *, colors : Hash(V, Color), &)
-
#depth_first_search(&)
Yields all vertices of
self
, which are traversed following a depth-first search (DFS) on the whole graph. -
#depth_first_search : Iterator(V)
Returns an iterator over all vertices of
self
, which are traversed following a depth-first search (DFS) on the whole graph. -
#directed? : Bool
Whether
self
is directed. -
#dup
Returns a shallow copy of
self
. -
#each_adjacent(u : V) : Iterator(V)
Returns an iterator over each vertex adjacent to u in the graph.
-
#each_adjacent(u : V, & : V -> )
Yields each vertex adjacent to u in the graph.
-
#each_edge : Iterator(AnyEdge(V))
Returns an iterator over each edge in the graph.
-
#each_edge(& : AnyEdge(V) -> )
Yields each edges in the graph.
-
#each_edge_from(u : V, & : AnyEdge(V) -> )
Yields each edge incident to u in the graph.
-
#each_vertex(& : V -> )
Yields each vertex of the graph.
-
#each_vertex : Iterator(V)
Returns an iterator over each vertex of the graph.
-
#edge(u : V, v : V)
Returns an edge data structure between u and v if present in the graph, otherwise raises an
EdgeError
. -
#edge(u : V, v : V, &)
Returns an edge data structure between u and v if present in the graph, otherwise returns the value of the given block.
-
#edge?(u : V, v : V)
Returns an edge data structure between u and v if present in the graph, otherwise returns
nil
. -
#edges : Array(AnyEdge(V))
Returns an array of edges belonging to this graph.
-
#empty? : Bool
Whether the graph is empty.
-
#has_edge?(edge : Labelable) : Bool
Whether the given edge is part of the graph.
-
#has_edge?(u : V, v : V, weight, label) : Bool
Whether the edge between u and v with the given attributes is part of the graph.
-
#has_edge?(u : V, v : V) : Bool
Whether the edge between u and v is part of the graph.
-
#has_edge?(edge : Weightable) : Bool
Whether the given edge is part of the graph.
-
#has_edge?(edge : AnyEdge(V)) : Bool
Whether the given edge is part of the graph.
-
#has_vertex?(v : V) : Bool
Whether the given vertex v is part of the graph.
-
#hash(hasher)
See
Object#hash(hasher)
-
#in_degree_of(v : V) : Int32
Returns the incoming degree of the given vertex v.
-
#label_of(u : V, v : V)
Returns the label associated with the given edge if it exists, raises
EdgeError
otherwise -
#label_of?(u : V, v : V)
Returns the label associated with the given edge if it exists, otherwise returns
nil
. -
#labeled? : Bool
Whether edges are labeled.
-
#order : Int32
Returns the number of vertices in
self
. -
#out_degree_of(v : V) : Int32
Returns the outgoing degree of the given vertex v.
-
#remove_edge(u : V, v : V)
Deletes the given edge and returns it, otherwise returns
nil
. -
#remove_vertex(v : V)
Remove given vertex v from this graph.
-
#shortest_path(source : V, target : V)
Returns a shortest path between the given vertices.
-
#shortest_path_dijkstra(source : V, target : V)
Returns the shortest weighted path between the given vertices.
-
#shortest_path_unweighted(source : V, target : V)
Returns the shortest unweighted path between the given vertices.
-
#size : Int32
Returns the number of edges in
self
. -
#subgraph(vertices : Enumerable(V), *, clone : Bool = false) : AnyGraph(V)
Returns a subgraph containing the given vertices as well as the existing edges between those vertices.
-
#subgraph(edges : Enumerable(AnyEdge(V)), *, clone : Bool = false) : AnyGraph(V)
Returns a subgraph containing the given edges.
-
#to_a : Array(AnyEdge(V))
See
#edges
. -
#to_dot(path : String)
Generates a DOT file representing the graph at the given path.
-
#to_dot(io : IO)
Generates a DOT representation of the graph using the given
IO
. -
#weight_of(u : V, v : V)
Returns the weight associated with the given edge if it exists, otherwise
EdgeError
otherwise. -
#weight_of?(u : V, v : V)
Returns the weight associated with the given edge if it exists, otherwise returns
nil
. -
#weighted? : Bool
Whether edges are weighted.
Instance Method Detail
Returns false
(other can only be a Value
here).
Add an edge between vertices u and v.
The given vertices are automatically added if they are not already part of the graph.
A weight and/or a label can be associated to the edge if the concrete class supports it.
Add the given edge to the graph.
See #add_edge(u : V, v : V, weight, label)
Add a single vertex (a.k.a. node) to this graph.
g = CGL::Graph(String).new
g.add_vertex("Hello")
Returns an iterator over vertices from the given source v in a breadth-first search (DFS).
Yields vertices from the given source v in a breadth-first search (DFS).
Returns a deep copy of self
.
Similar to #dup
, but duplicates the nodes and edges attributes as well.
Count all simple paths between the two given vertices, where a simple path is a path with no repeated nodes.
Returns the degree of the given vertex v.
For directed graphs, the value equals #out_degree_of
.
For undirected graphs, the value is the sum of #in_degree_of
and
#in_degree_of
.
Returns the density of self
.
Self loops are counted in the total number of edges so graphs with self loops can have density higher than 1.
Returns an iterator over vertices from the given source v in a depth-first search (DFS).
Yields vertices from the given source v in a depth-first search (DFS).
Yields all vertices of self
, which are traversed following a
depth-first search (DFS) on the whole graph.
Returns an iterator over all vertices of self
, which are traversed
following a depth-first search (DFS) on the whole graph.
Returns an iterator over each vertex adjacent to u in the graph.
Yields each vertex adjacent to u in the graph.
g = Graph(String).new(edges: [{"b", "a"}, {"a", "c"}])
g.each_adjacent("a") do |v|
puts v
end
Output:
b
c
For directed graphs, adjacent vertices are found following outgoing edges.
g = DiGraph(String).new(edges: [{"b", "a"}, {"a", "c"}])
g.each_adjacent("a") do |v|
puts v
end
Output:
c
Yields each edge incident to u in the graph.
Returns an edge data structure between u and v if present in the
graph, otherwise raises an EdgeError
.
Returns an edge data structure between u and v if present in the graph, otherwise returns the value of the given block.
Returns an edge data structure between u and v if present in the
graph, otherwise returns nil
.
Whether the edge between u and v with the given attributes is part of the graph.
Whether the edge between u and v is part of the graph.
Returns the incoming degree of the given vertex v.
For undirected graphs, the value equals #degree_of
.
Returns the label associated with the given edge if it exists, raises
EdgeError
otherwise
Returns the label associated with the given edge if it exists, otherwise
returns nil
.
Returns the outgoing degree of the given vertex v.
For undirected graphs, the value equals #degree_of
.
Remove given vertex v from this graph. Edges incident to v are also removed.
Raises a GraphError
if vertex is not part of the graph.
g = CGL::Graph(String).new(edges: [{"a", "b"}, {"b", "c"}])
g.size # => 2
g.remove_vertex("b")
g.size # => 0
Returns a shortest path between the given vertices.
Note: Tries to select the most appropriate algorithm for self
.
Returns the shortest weighted path between the given vertices.
Raises if self
is not a weighted graph.
Note: Uses Dijkstra's algorithm. Not appropriate for graphs with negative weights and/or negative cycles.
Returns the shortest unweighted path between the given vertices.
Returns a subgraph containing the given vertices as well as the existing edges between those vertices.
If copy is set to true
, the vertices as well as edge attributes are
deep copies, otherwise they are shallow copies.
Returns a subgraph containing the given edges.
If copy is set to true
, the vertices as well as edge attributes are
deep copies, otherwise they are shallow copies.
Returns the weight associated with the given edge if it exists, otherwise
EdgeError
otherwise.
Returns the weight associated with the given edge if it exists, otherwise
returns nil
.


Why I became a web developer
Well this is a long story.
I began my journey with a bachelor degree in cultural science. While I was studying I were fascinated by how to work with communication to gain trust and attention from a choosen target group and that´s why I choose to build (with help from a friend) a website to a choir in Gothenburg. I liked both the programming and communication part so after a short brief in my life I decided to continue my journey towards communication studies.
While I were studying communication I took every opportunity to build websites (again with help from a friend) and started to learn basic programming at my spare time. I also noticed I were more interested in communication on websites than write strategies.
So, eventually I tried my luck and applied to YRGOs web developer program and I were accepted. It´s been a hard and fun journey. The more I learn, the more I understand that there is so much more to learn. It can be a struggle but it is also fun to actually see my own progress. To look back at a code I wrote months ago and see how to improve it, make it more effective and more readable.
That is why I continue my journey. To get better, to learn new smarter ways, learn new programming languages and make better and safer websites.
Education
| Year | School/Program |
|---|---|
| 2016-2018 | Web developer, YRGO |
| 2014-2015 | Communication Program with focus on government and public administration, Gothenburg University |
| 2013 | Project management, Umeå University |
| 2010-2013 | Culture bachelor program, Gothenburg University |
Skills
| HTML | Good |
| CSS | Good |
| JavaScript | Beginner |
| PHP | Beginner |
| Git | Beginner |
| C# | Know the basics |
| Wordpress | Beginner |
Experience
Currently I´m working at Handelsmarketing as a web developer. Main focus is to develop websites in Wordpress.
Want to see some of my projects? Visit my Github to see some examples.
How to contact me
Maria Gustafsson Niså
+46-70 206 72 91
maria.gnisa@gmail.com


Coquette 2.0
June 30, 2017: Coquette 2.0 is a significant update. The big news is three new weights: Thin, Extrabold, and Black…
June 30, 2017: Coquette 2.0 is a significant update. The big news is three new weights: Thin, Extrabold, and Black…
June 30, 2008: A couple of weekends ago, I attended the “Back to the Fifties” car show in St. Paul. This was the first time for me, despite the fact that we live within walking distance of the Minnesota State Fair Grounds…
You might wonder: Where does a type designer like me spend his days? Do I have a fancy office in a skyscraper in downtown Saint Paul? Do I have a receptionist? An H.R. department? Interns? An espresso bar? None of that. I work by myself out of a repurposed back bedroom in a modest 1920s-era bungalow in the quiet residential Saint Paul neighborhood of Saint Anthony Park. Let me show you around...


Custom icons
Custom made png icons for Swatch theme. They come in big resolution so that they will look great even on retina displays. Big, flat and gorgeous, enjoy them.
Custom made png icons for Swatch theme. They come in big resolution so that they will look great even on retina displays. Big, flat and gorgeous, enjoy them.


This is an article about the object oriented design based on the application domain. We are going to look at certain Java objects that we use so often that we often didn’t realize that they could be made better by understanding the domain that they are in and applying the domain driven design to them.
- Assertion
- XML fixture
- BuildMaster
- Cotta
- Selenium (web testing)
Assertion in Unit Testing
The style of assertion that most people are familiar with is the one using the API of Assert
class.
assertEquals(5, list.size());