| Top |
| enum | GdkEventType |
| enum | GdkEventMask |
| #define | GDK_CURRENT_TIME |
| #define | GDK_PRIORITY_EVENTS |
| #define | GDK_PRIORITY_REDRAW |
| #define | GDK_EVENT_PROPAGATE |
| #define | GDK_EVENT_STOP |
| #define | GDK_BUTTON_PRIMARY |
| #define | GDK_BUTTON_MIDDLE |
| #define | GDK_BUTTON_SECONDARY |
| GdkEventSequence |
This section describes functions dealing with events from the window system.
In GTK+ applications the events are handled automatically in
gtk_main_do_event()
and passed on to the appropriate widgets, so these
functions are rarely needed. Though some of the fields in the
Event Structures are useful.
gboolean
gdk_events_pending (void
);
Checks if any events are ready to be processed for any display.
GdkEvent *
gdk_event_peek (void
);
If there is an event waiting in the event queue of some open
display, returns a copy of it. See gdk_display_peek_event()
.
a copy of the first GdkEvent on some event
queue, or NULL
if no events are in any queues. The returned
GdkEvent should be freed with gdk_event_free()
.
[nullable]
GdkEvent *
gdk_event_get (void
);
Checks all open displays for a GdkEvent to process,to be processed
on, fetching events from the windowing system if necessary.
See gdk_display_get_event()
.
the next GdkEvent to be processed, or NULL
if no events are pending. The returned GdkEvent should be freed
with gdk_event_free()
.
[nullable]
void
gdk_event_put (const GdkEvent *event
);
Appends a copy of the given event onto the front of the event
queue for event->any.window’s display, or the default event
queue if event->any.window is NULL
. See gdk_display_put_event()
.
GdkEvent *
gdk_event_new (GdkEventType type
);
Creates a new event of the given type. All fields are set to 0.
Since: 2.2
GdkEvent *
gdk_event_copy (const GdkEvent *event
);
Copies a GdkEvent, copying or incrementing the reference count of the resources associated with it (e.g. GdkWindow’s and strings).
void
gdk_event_free (GdkEvent *event
);
Frees a GdkEvent, freeing or decrementing any resources associated with it.
Note that this function should only be called with events returned from
functions such as gdk_event_peek()
, gdk_event_get()
, gdk_event_copy()
and gdk_event_new()
.
gboolean gdk_event_get_axis (const GdkEvent *event
,GdkAxisUse axis_use
,gdouble *value
);
Extract the axis value for a particular axis use from an event structure.
event |
a GdkEvent |
|
axis_use |
the axis use to look for |
|
value |
location to store the value found. |
[out] |
gboolean gdk_event_get_button (const GdkEvent *event
,guint *button
);
Extract the button number from an event.
Since: 3.2
gboolean gdk_event_get_click_count (const GdkEvent *event
,guint *click_count
);
Extracts the click count from an event.
Since: 3.2
gboolean gdk_event_get_coords (const GdkEvent *event
,gdouble *x_win
,gdouble *y_win
);
Extract the event window relative x/y coordinates from an event.
event |
a GdkEvent |
|
x_win |
location to put event window x coordinate. |
[out][optional] |
y_win |
location to put event window y coordinate. |
[out][optional] |
gboolean gdk_event_get_keycode (const GdkEvent *event
,guint16 *keycode
);
Extracts the hardware keycode from an event.
Also see gdk_event_get_scancode()
.
Since: 3.2
gboolean gdk_event_get_keyval (const GdkEvent *event
,guint *keyval
);
Extracts the keyval from an event.
Since: 3.2
gboolean gdk_event_get_root_coords (const GdkEvent *event
,gdouble *x_root
,gdouble *y_root
);
Extract the root window relative x/y coordinates from an event.
event |
a GdkEvent |
|
x_root |
location to put root window x coordinate. |
[out][optional] |
y_root |
location to put root window y coordinate. |
[out][optional] |
gboolean gdk_event_get_scroll_direction (const GdkEvent *event
,GdkScrollDirection *direction
);
Extracts the scroll direction from an event.
Since: 3.2
gboolean gdk_event_get_scroll_deltas (const GdkEvent *event
,gdouble *delta_x
,gdouble *delta_y
);
Retrieves the scroll deltas from a GdkEvent
event |
a GdkEvent |
|
delta_x |
return location for X delta. |
[out] |
delta_y |
return location for Y delta. |
[out] |
Since: 3.4
gboolean
gdk_event_is_scroll_stop_event (const GdkEvent *event
);
Check whether a scroll event is a stop scroll event. Scroll sequences with smooth scroll information may provide a stop scroll event once the interaction with the device finishes, e.g. by lifting a finger. This stop scroll event is the signal that a widget may trigger kinetic scrolling based on the current velocity.
Stop scroll events always have a a delta of 0/0.
Since: 3.20
gboolean gdk_event_get_state (const GdkEvent *event
,GdkModifierType *state
);
If the event contains a “state” field, puts that field in state
. Otherwise
stores an empty state (0). Returns TRUE
if there was a state field
in the event. event
may be NULL
, in which case it’s treated
as if the event had no state field.
guint32
gdk_event_get_time (const GdkEvent *event
);
Returns the time stamp from event
, if there is one; otherwise
returns GDK_CURRENT_TIME. If event
is NULL
, returns GDK_CURRENT_TIME.
GdkWindow *
gdk_event_get_window (const GdkEvent *event
);
Extracts the GdkWindow associated with an event.
Since: 3.10
GdkEventType
gdk_event_get_event_type (const GdkEvent *event
);
Retrieves the type of the event.
Since: 3.10
GdkEventSequence *
gdk_event_get_event_sequence (const GdkEvent *event
);
If event
if of type GDK_TOUCH_BEGIN
, GDK_TOUCH_UPDATE
,
GDK_TOUCH_END
or GDK_TOUCH_CANCEL
, returns the GdkEventSequence
to which the event belongs. Otherwise, return NULL
.
Since: 3.4
void
gdk_event_request_motions (const GdkEventMotion *event
);
Request more motion notifies if event
is a motion notify hint event.
This function should be used instead of gdk_window_get_pointer()
to
request further motion notifies, because it also works for extension
events where motion notifies are provided for devices other than the
core pointer. Coordinate extraction, processing and requesting more
motion events from a GDK_MOTION_NOTIFY
event usually works like this:
1 2 3 4 5 6 7 |
{ // motion_event handler x = motion_event->x; y = motion_event->y; // handle (x,y) motion gdk_event_request_motions (motion_event); // handles is_hint events } |
Since: 2.12
gboolean gdk_events_get_angle (GdkEvent *event1
,GdkEvent *event2
,gdouble *angle
);
If both events contain X/Y information, this function will return TRUE
and return in angle
the relative angle from event1
to event2
. The rotation
direction for positive angles is from the positive X axis towards the positive
Y axis.
Since: 3.0
gboolean gdk_events_get_center (GdkEvent *event1
,GdkEvent *event2
,gdouble *x
,gdouble *y
);
If both events contain X/Y information, the center of both coordinates
will be returned in x
and y
.
Since: 3.0
gboolean gdk_events_get_distance (GdkEvent *event1
,GdkEvent *event2
,gdouble *distance
);
If both events have X/Y information, the distance between both coordinates
(as in a straight line going from event1
to event2
) will be returned.
Since: 3.0
gboolean
gdk_event_triggers_context_menu (const GdkEvent *event
);
This function returns whether a GdkEventButton should trigger a
context menu, according to platform conventions. The right mouse
button always triggers context menus. Additionally, if
gdk_keymap_get_modifier_mask()
returns a non-0 mask for
GDK_MODIFIER_INTENT_CONTEXT_MENU
, then the left mouse button will
also trigger a context menu if this modifier is pressed.
This function should always be used instead of simply checking for
event->button == GDK_BUTTON_SECONDARY
.
Since: 3.4
GdkSeat *
gdk_event_get_seat (const GdkEvent *event
);
Returns the GdkSeat this event was generated for.
Since: 3.20
int
gdk_event_get_scancode (GdkEvent *event
);
Gets the keyboard low-level scancode of a key event.
This is usually hardware_keycode. On Windows this is the high word of WM_KEY{DOWN,UP} lParam which contains the scancode and some extended flags.
Since: 3.22
gboolean
gdk_event_get_pointer_emulated (GdkEvent *event
);
Returns whether this event is an 'emulated' pointer event (typically from a touch event), as opposed to a real one.
Since: 3.22
void gdk_event_handler_set (GdkEventFunc func
,gpointer data
,GDestroyNotify notify
);
Sets the function to call to handle all events from GDK.
Note that GTK+ uses this to install its own event handler, so it is
usually not useful for GTK+ applications. (Although an application
can call this function then call gtk_main_do_event()
to pass
events to GTK+.)
func |
the function to call to handle events from GDK. |
|
data |
user data to pass to the function. |
|
notify |
the function to call when the handler function is removed, i.e. when
|
void (*GdkEventFunc) (GdkEvent *event
,gpointer data
);
Specifies the type of function passed to gdk_event_handler_set()
to
handle all GDK events.
event |
the GdkEvent to process. |
|
data |
user data set when the event handler was installed with
|
[closure] |
gboolean
gdk_get_show_events (void
);
Gets whether event debugging output is enabled.
void
gdk_set_show_events (gboolean show_events
);
Sets whether a trace of received events is output.
Note that GTK+ must be compiled with debugging (that is,
configured using the --enable-debug
option)
to use this option.
void gdk_event_set_screen (GdkEvent *event
,GdkScreen *screen
);
Sets the screen for event
to screen
. The event must
have been allocated by GTK+, for instance, by
gdk_event_copy()
.
Since: 2.2
GdkScreen *
gdk_event_get_screen (const GdkEvent *event
);
Returns the screen for the event. The screen is
typically the screen for event->any.window
, but
for events such as mouse events, it is the screen
where the pointer was when the event occurs -
that is, the screen which has the root window
to which event->motion.x_root
and
event->motion.y_root
are relative.
Since: 2.2
GdkDevice *
gdk_event_get_device (const GdkEvent *event
);
If the event contains a “device” field, this function will return
it, else it will return NULL
.
Since: 3.0
void gdk_event_set_device (GdkEvent *event
,GdkDevice *device
);
Sets the device for event
to device
. The event must
have been allocated by GTK+, for instance, by
gdk_event_copy()
.
Since: 3.0
GdkDevice *
gdk_event_get_source_device (const GdkEvent *event
);
This function returns the hardware (slave) GdkDevice that has
triggered the event, falling back to the virtual (master) device
(as in gdk_event_get_device()
) if the event wasn’t caused by
interaction with a hardware device. This may happen for example
in synthesized crossing events after a GdkWindow updates its
geometry or a grab is acquired/released.
If the event does not contain a device field, this function will
return NULL
.
Since: 3.0
void gdk_event_set_source_device (GdkEvent *event
,GdkDevice *device
);
Sets the slave device for event
to device
.
The event must have been allocated by GTK+,
for instance by gdk_event_copy()
.
Since: 3.0
GdkDeviceTool *
gdk_event_get_device_tool (const GdkEvent *event
);
If the event was generated by a device that supports
different tools (eg. a tablet), this function will
return a GdkDeviceTool representing the tool that
caused the event. Otherwise, NULL
will be returned.
Note: the GdkDeviceTool<!-- -->s will be constant during
the application lifetime, if settings must be stored
persistently across runs, see gdk_device_tool_get_serial()
Since: 3.22
void gdk_event_set_device_tool (GdkEvent *event
,GdkDeviceTool *tool
);
Sets the device tool for this event, should be rarely used.
Since: 3.22
gboolean gdk_setting_get (const gchar *name
,GValue *value
);
Obtains a desktop-wide setting, such as the double-click time,
for the default screen. See gdk_screen_get_setting()
.
Specifies the type of the event.
Do not confuse these events with the signals that GTK+ widgets emit. Although many of these events result in corresponding signals being emitted, the events are often transformed or filtered along the way.
In some language bindings, the values GDK_2BUTTON_PRESS
and
GDK_3BUTTON_PRESS
would translate into something syntactically
invalid (eg Gdk.EventType.2ButtonPress
, where a
symbol is not allowed to start with a number). In that case, the
aliases GDK_DOUBLE_BUTTON_PRESS
and GDK_TRIPLE_BUTTON_PRESS
can
be used instead.
|
a special code to indicate a null event. |
||
|
the window manager has requested that the toplevel window be hidden or destroyed, usually when the user clicks on a special icon in the title bar. |
||
|
the window has been destroyed. |
||
|
all or part of the window has become visible and needs to be redrawn. |
||
|
the pointer (usually a mouse) has moved. |
||
|
a mouse button has been pressed. |
||
|
a mouse button has been double-clicked (clicked twice
within a short period of time). Note that each click also generates a
|
||
|
alias for |
||
|
a mouse button has been clicked 3 times in a short period
of time. Note that each click also generates a |
||
|
alias for |
||
|
a mouse button has been released. |
||
|
a key has been pressed. |
||
|
a key has been released. |
||
|
the pointer has entered the window. |
||
|
the pointer has left the window. |
||
|
the keyboard focus has entered or left the window. |
||
|
the size, position or stacking order of the window has changed.
Note that GTK+ discards these events for |
||
|
the window has been mapped. |
||
|
the window has been unmapped. |
||
|
a property on the window has been changed or deleted. |
||
|
the application has lost ownership of a selection. |
||
|
another application has requested a selection. |
||
|
a selection has been received. |
||
|
an input device has moved into contact with a sensing surface (e.g. a touchscreen or graphics tablet). |
||
|
an input device has moved out of contact with a sensing surface. |
||
|
the mouse has entered the window while a drag is in progress. |
||
|
the mouse has left the window while a drag is in progress. |
||
|
the mouse has moved in the window while a drag is in progress. |
||
|
the status of the drag operation initiated by the window has changed. |
||
|
a drop operation onto the window has started. |
||
|
the drop operation initiated by the window has completed. |
||
|
a message has been received from another application. |
||
|
the window visibility status has changed. |
||
|
the scroll wheel was turned |
||
|
the state of a window has changed. See GdkWindowState for the possible window states |
||
|
a setting has been modified. |
||
|
the owner of a selection has changed. This event type was added in 2.6 |
||
|
a pointer or keyboard grab was broken. This event type was added in 2.8. |
||
|
the content of the window has been changed. This event type was added in 2.14. |
||
|
A new touch event sequence has just started. This event type was added in 3.4. |
||
|
A touch event sequence has been updated. This event type was added in 3.4. |
||
|
A touch event sequence has finished. This event type was added in 3.4. |
||
|
A touch event sequence has been canceled. This event type was added in 3.4. |
||
|
A touchpad swipe gesture event, the current state is determined by its phase field. This event type was added in 3.18. |
||
|
A touchpad pinch gesture event, the current state is determined by its phase field. This event type was added in 3.18. |
||
|
A tablet pad button press event. This event type was added in 3.22. |
||
|
A tablet pad button release event. This event type was added in 3.22. |
||
|
A tablet pad axis event from a "ring". This event type was added in 3.22. |
||
|
A tablet pad axis event from a "strip". This event type was added in 3.22. |
||
|
A tablet pad group mode change. This event type was added in 3.22. |
||
|
marks the end of the GdkEventType enumeration. Added in 2.18 |
A set of bit-flags to indicate which events a window is to receive. Most of these masks map onto one or more of the GdkEventType event types above.
See the input handling overview for details of event masks and event propagation.
GDK_POINTER_MOTION_HINT_MASK
is deprecated. It is a special mask
to reduce the number of GDK_MOTION_NOTIFY
events received. When using
GDK_POINTER_MOTION_HINT_MASK
, fewer GDK_MOTION_NOTIFY
events will
be sent, some of which are marked as a hint (the is_hint member is
TRUE
). To receive more motion events after a motion hint event,
the application needs to asks for more, by calling
gdk_event_request_motions()
.
Since GTK 3.8, motion events are already compressed by default, independent
of this mechanism. This compression can be disabled with
gdk_window_set_event_compression()
. See the documentation of that function
for details.
If GDK_TOUCH_MASK
is enabled, the window will receive touch events
from touch-enabled devices. Those will come as sequences of GdkEventTouch
with type GDK_TOUCH_UPDATE
, enclosed by two events with
type GDK_TOUCH_BEGIN
and GDK_TOUCH_END
(or GDK_TOUCH_CANCEL
).
gdk_event_get_event_sequence()
returns the event sequence for these
events, so different sequences may be distinguished.
|
receive expose events |
||
|
receive all pointer motion events |
||
|
deprecated. see the explanation above |
||
|
receive pointer motion events while any button is pressed |
||
|
receive pointer motion events while 1 button is pressed |
||
|
receive pointer motion events while 2 button is pressed |
||
|
receive pointer motion events while 3 button is pressed |
||
|
receive button press events |
||
|
receive button release events |
||
|
receive key press events |
||
|
receive key release events |
||
|
receive window enter events |
||
|
receive window leave events |
||
|
receive focus change events |
||
|
receive events about window configuration change |
||
|
receive property change events |
||
|
receive visibility change events |
||
|
receive proximity in events |
||
|
receive proximity out events |
||
|
receive events about window configuration changes of child windows |
||
|
receive scroll events |
||
|
receive touch events. Since 3.4 |
||
|
receive smooth scrolling events. Since 3.4 |
||
|
receive touchpad gesture events. Since 3.18 |
||
|
receive tablet pad events. Since 3.22 |
||
|
the combination of all the above event masks. |
#define GDK_CURRENT_TIME 0L
Represents the current time, and can be used anywhere a time is expected.
#define GDK_PRIORITY_EVENTS
This is the priority that events from the X server are given in the GLib Main Loop.
#define GDK_PRIORITY_REDRAW (G_PRIORITY_HIGH_IDLE + 20)
This is the priority that the idle handler processing window updates is given in the GLib Main Loop.
#define GDK_EVENT_PROPAGATE (FALSE)
Use this macro as the return value for continuing the propagation of an event handler.
Since: 3.4
#define GDK_EVENT_STOP (TRUE)
Use this macro as the return value for stopping the propagation of an event handler.
Since: 3.4
#define GDK_BUTTON_PRIMARY (1)
The primary button. This is typically the left mouse button, or the right button in a left-handed setup.
Since: 3.4
#define GDK_BUTTON_SECONDARY (3)
The secondary button. This is typically the right mouse button, or the left button in a left-handed setup.
Since: 3.4


HCI Researcher - Postdoctoral Researcher
I am an incoming Assistant Professor at Rice University Electrical & Computer Engineering starting summer 2023 as part of the Digital Health Initiative. My research focuses on modeling and enhancing human-machine interaction (HMI) to support accessibility and health using biosignals and control theory applied to the field of HCI (human-computer interaction). I am currently a CREATE postdocoral scholar at the University of Washington in Seattle, WA, advised by Prof. Jennifer Mankoff.
My dissertation research leveraged control theory methods to model and enhance continuous HMIs and explore biosignals like electromyography (EMG) as accessible machine inputs for people with and without disabilities. My current research interests include how multi-input biosignals can improve HMI accessibility for new and emerging technology like virtual reality and support the health of people with disabilities.
I have received fellowships from the University of Washington Institute for Neuroengineering and the University of Washington College of Engineering. I am a 2021 University of Washington College of Engineering Student Research Award recipient. My postdoctoral research is funded by Meta Research and CREATE .
"I'm Just Overwhelmed": Investigating Physical Therapy Access and Technology Design Recommendations for People with Disabilities and/or Chronic Conditions
M Yamagami, K Mack, J Mankoff, KM Steele
TACCESS (ACM Transactions on Accessible Computing), 2022
Two-in-One: A Design Space for Mapping Unimanual Input into Bimanual Interactions in VR for Users with Limited Movement
M Yamagami, S Junuzovic, M Gonzalez Franco, J Porter, E Ofek, E Cutrell, A Wilson, M Mott
TACCESS (ACM Transactions on Accessible Computing), 2022
"That's Frustrating": Perceptions of Ankle Foot Orthosis Provision, Use, and Needs Among People with Cerebral Palsy and Caregivers
NL Zaino, M Yamagami, DJ Gaebler-Spira, KM Steele, KF Bjornson, HA Feldner
Prosthetics and Orthotics International, 2022
Effect of Handedness on Learned Controllers and Sensorimotor Noise During Trajectory-Tracking
M Yamagami, LN Peterson, D Howell, E Roth, SA Burden
IEEE Transactions on Cybernetics, 2021
Virtual Reality Doorway and Hallway Environments Alter Gait Kinematics in People with Parkinson Disease and Freezing
A Besharat, S Imsdahl, M Yamagami, N Nhan, O Bellatin, SA Burden, K Cummer, SD Pradhan, VE Kelly
Gait and Posture, 2021
Effects of Virtual Reality Environments on Overground Walking in People with Parkinson Disease and Freezing of Gait
M Yamagami, S Imsdahl, O Bellatin, N Nhan, SA Burden, S Pradhan, VE Kelly
Disability and Rehabilitation: Assistive Technology, 2020
Decoding Intent With Control Theory: Comparing Muscle Versus Manual Interface Performance
M Yamagami, KM Steele, SA Burden
CHI (ACM CHI Conference on Human Factors in Computing Systems), 2020 |
Video
Experiments with Sensorimotor Games in Dynamic Human/Machine Interaction
B Chasnov, M Yamagami, B Parsa, LJ Ratlif, SA Burden
Micro- and Nanotechnology Sensors, Systems, and Applications XI, International Society for Optics and Photonics, 2019
Assessment of Dry Epidermal Electrodes for Long-Term Electromyography Measurements
M Yamagami, KM Peters, I Milanovic, I Kuang, Z Yang, N Lu, KM Steele
Sensors, 2018
Contributions of Feedforward and Feedback Control in a Manual Trajectory-Tracking Task
M Yamagami, D Howell, E Roth, SA Burden
IFAC Conference on Cyber-Physical & Human Systems, 2018
(undergraduate research) Protease-Activatable Adeno-Associated Virus Vector for Gene Delivery to Damaged Heart Tissue
CM Guenther, MJ Brun, AD Bennett, ML Ho, W Chen, B Zhu, M Lam, M Yamagami, S Kwon, N Bhattacharya, D Sousa, AC Evans, J Voss, EM Sevick-Muraca, M Agbandje-McKenna, J Suh
Molecular Therapy, 2019
(undergraduate research) Effective Gene Delivery to Valvular Interstitial Cells Using Adeno-Associated Virus Serotypes 2 and 3
FF Wong, ML Ho, M Yamagami, MT Lam, K. J Grande-Allen, J Suh
Tissue Engineering Part C: Methods, 2015
(undergraduate research) Efficiency of Protease-Activatable Virus Nanonodes Tuned Through Incorporation of Wild-Type Capsid Subunits
ML Ho, J Judd, BE Kuypers, M Yamagami, FF Wong, J Suh
Cellular and Molecular Bioengineering, 2014
This is a senior-level control system course focusing stability of feedback systems by root locus and frequency-response methods at the University of Washington. I was a teaching assistant for this class in Fall 2019 (in-person), Spring 2020 (virtual) and was an instructor during Spring 2021 (virtual).
I was a teaching assistant for Machine Learning Foundations, Regression, Classification, and Clustering and Retrieval classes for Apple employees from 2019-2020. I supported the courses by answering student questions, hosting office hours, and developing additional questions to expand and improve the courses.


(paper report) CAP Twelve Years Later
This is part of a series of posts I’m writing for my version of NaNoWriMo, where I summarize/review papers I’ve read recently. These aren’t quite papers – they’re publications in a magazine.
- Eric Brewer. CAP Twelve Years Later: How the “Rules” Have Changed. (IEEE, 2012)
This is an article from Computer magazine that expands on some misconceptions about the CAP theorem. It mostly focuses on plans for operation during a partition, and recovery afterward.
(A note on oversimplification)
The “2 of 3” formulation was always misleading, because it tended to oversimplify the tensions among properties.
Talking about consistency, availability, and partition tolerance requires more nuance. CAP prohibits only a small part of the design space – it’s lazy to completely give up on C, or A, or P because the perfect combination of all three is impossible.
Also, the C and A tradeoff isn’t a single choice for a system. Large are, in turn, composed of many subsystems that might be making different CAP choices. The choice can even change depending on the operation being performed, or the data being accessed.
All three properties are more continuous than binary. The modern CAP goal should be to maximize combinations of consistency and availability that make sense for the specific application. Such an approach incorporates plans for operation during a partition and for recovery afterward.
Also, many systems are beginning to offer a disconnected mode of operation.
During a partition, allowing one side to update state will cause the nodes to become inconsistent, therefore forfeiting C. Likewise, if the choice is to preserve consistency, one side of the partition should act as if it is unavailable, thus forfeiting P. Only when nodes communicate is it possible to preserve both consistency and availability.
If users cannot reach the service at all, there is no choice between C and A.
On partition resilience
Such an approach incorporates plans for operation during a partition and for recovery afterward.
A strategy that is partition-resilient:
- detects the start of a partition,
- enters an explicit partition mode that may limit some operations, and
- initiates a recovery process to restore consistency and compensate for mistakes made during a partition.
1. Detecting partitions
A partition is a time bound on communication.
The partition decision happens in response to an operation timing out. The system can either:
- cancel the operation and thus decrease availability, or
- proceed with the operation and thus risk inconsistency.
- retrying communication indefinitely (via paxos or 2PC) in the face of a partition is in essence choosing C over A
This has some interesting implications for partitions:
This means that there is no global view of a partition – some nodes might detect a partition, and some might not.
Partitions can also be one-way – node A might be timing out when connecting to node B, but node B can see node A without issues.
Because partitions are tied to latency, system designers can tweak the system’s sensitivity to partitions.
Designers can set time bounds intentionally according to target response times: systems with tighter bounds will likely enter partition mode more often and at times when the network is merely slow and not actually partitioned.
2. Partition mode
The set of operations that are restricted during a partition depends on the invariants the system must maintain. Ideally, you want to restrict any operations that might violate the invariant, such as externalized events (talking to banking systems, sending emails, etc.)
Methods for dealing with this:
- use version vectors to track atomic operations.
- When the partition heals, you can reorder the vectors to attempt to emulate causal consistency.
- to deal with externalized events, build a write-ahead log in partition mode, and replay these events when the system comes back up.
- For example: instead of reaching out to credit card networks during a partition, the system records the intent and execute it after the recovery.
This presents a user-interface challenge: “[communicating] that tasks are in progress, but not complete.” Some systems present different UI views in disconnected operation, like Google Docs or Bayou.
3. Partition recovery
When the partition heals, the system has (hopefully) kept a careful log of operations that happened during the partition. With this history, the system can reconcile its state and make compensations for any inconsistencies/mistakes made during partition mode.
The method used to merge the inconsistent narratives varies by use case. Some systems require explicit manual intervention (git, wiki systems) to resolve conflicts. Some systems always choose to keep additions, some do last-writer wins, and still others constrain operations during offline mode.
CRDTs (commutative repicated data types) are really powerful tools for state convergence after a partition.
That said, CRDTs are only useful for locally-verifiable invariants – you can’t use them to handle externalized calls. Methods for handling externalized mistakes made during a partition depend on the application.
As an example, Brewer brings up bank operations during a partition. Because of communication delays, the banking system defines the amount of risk it’s willing to tolerate, and then relies on auditing and compensation (overdraft fees) to make up the difference.
(a note on eventual consistency)
Reconciling divergent state is important not just for healing partitions, but also for latency improvements in the general case. Brewer brings up some examples of consistency models optimized for performance:
- Yahoo’s PNUTS:
- the local data copy is the source of truth, since single user data is naturally partitioned according to the user’s location.
- Facebook’s’ odd RYW scheme
- the master copy is always in one location, so a remote user reads from the closer (potentially stale) copy. When the user issues a write, the update goes to the master copy, and so do all reads for the next 20s, which is much larger than the replication delay.
Similar Papers (where to go from here)
- Towards Robust Distributed Systems. Eric Brewer.
- A fairly broad summary of the CAP theorem, harvest/yield, the DQ principle, and how those might apply to system design.
- You Can’t Sacrifice Partition Tolerance. Coda Hale.
- mostly what it says on the tin. Plus thoughts about evaluating systems by their CAP properties.
- Managing Update Conflicts in Bayou.
- A very early example of optimistically handling concurrent updates. The paper describes a hypothetical calendar app with an offline mode, and methods for reconciling state after reconnecting to the internet.
- A comprehensive study of
Convergent and Commutative Replicated Data Types.
- This is a fairly long (50 pages!), and fairly formal paper that introduces the idea of convergent data types. For a shorter/lighter version, this video by Sean Cribbs is a good introduction.
Comments


Dillinger - The markdown sample
Dillinger is a cloud-enabled, mobile-ready, offline-storage, AngularJS powered HTML5 Markdown editor.
- Type some Markdown on the left
- See HTML in the right
- Magic
New Features!
- Import a HTML file and watch it magically convert to Markdown
- Drag and drop images (requires your Dropbox account be linked)
You can also: - Import and save files from GitHub, Dropbox, Google Drive and One Drive - Drag and drop markdown and HTML files into Dillinger - Export documents as Markdown, HTML and PDF
Markdown is a lightweight markup language based on the formatting conventions that people naturally use in email. As John Gruber writes on the Markdown site
The overriding design goal for Markdown’s formatting syntax is to make it as readable as possible. The idea is that a Markdown-formatted document should be publishable as-is, as plain text, without looking like it’s been marked up with tags or formatting instructions.
This text you see here is actually written in Markdown! To get a feel for Markdown’s syntax, type some text into the left window and watch the results in the right.
Tech
Dillinger uses a number of open source projects to work properly:
- AngularJS - HTML enhanced for web apps!
- Ace Editor - awesome web-based text editor
- markdown-it - Markdown parser done right. Fast and easy to extend.
- Twitter Bootstrap - great UI boilerplate for modern web apps
- node.js - evented I/O for the backend
- Express - fast node.js network app framework @tjholowaychuk
- Gulp - the streaming build system
- Breakdance - HTML to Markdown converter
- jQuery - duh
And of course Dillinger itself is open source with a public repository on GitHub.
Installation
Dillinger requires Node.js v4+ to run.
Install the dependencies and devDependencies and start the server.
$ cd dillinger
$ npm install -d
$ node app
For production environments…
$ npm install --production
$ NODE_ENV=production node app
Plugins
Dillinger is currently extended with the following plugins. Instructions on how to use them in your own application are linked below.
| Plugin | README |
|---|---|
| Dropbox | plugins/dropbox/README.md |
| Github | plugins/github/README.md |
| Google Drive | plugins/googledrive/README.md |
| OneDrive | plugins/onedrive/README.md |
| Medium | plugins/medium/README.md |
| Google Analytics | plugins/googleanalytics/README.md |
Development
Want to contribute? Great!
Dillinger uses Gulp + Webpack for fast developing. Make a change in your file and instantanously see your updates!
Open your favorite Terminal and run these commands.
First Tab: sh
$ node app
Second Tab: sh
$ gulp watch
(optional) Third: sh
$ karma test
Building for source
For production release: sh
$ gulp build --prod
Generating pre-built zip archives for distribution: sh
$ gulp build dist --prod
Docker
Dillinger is very easy to install and deploy in a Docker container.
By default, the Docker will expose port 8080, so change this within the Dockerfile if necessary. When ready, simply use the Dockerfile to build the image.
cd dillinger
docker build -t joemccann/dillinger:${package.json.version}
This will create the dillinger image and pull in the necessary dependencies. Be sure to swap out ${package.json.version}
with the actual version of Dillinger.
Once done, run the Docker image and map the port to whatever you wish on your host. In this example, we simply map port 8000 of the host to port 8080 of the Docker (or whatever port was exposed in the Dockerfile):
docker run -d -p 8000:8080 --restart="always" <youruser>/dillinger:${package.json.version}
Verify the deployment by navigating to your server address in your preferred browser.
<IP_ADDRESS>:8000
Kubernetes + Google Cloud
See KUBERNETES.md
Todos
- Write MORE Tests
- Add Night Mode
License
MIT
Free Software, Hell Yeah!


{{ partial "meta.html" . }}
Hi, My name is Huthaifa Abd and I'm a software developer based in Baghdad City, Iraq . I have over 5 years of experience developing enterprise software, mainly web applications. This is my personal portfolio where you can review my recent work , also check what skills and services I normally offer .
Utilizing the right tools to present high quality solutions that fits the client needs and reach wide range of audiance on different devices .
With a great focus on user interaction to ensure the best quality software , its all about Improving Performance , Increasing Exposure and Improve Credibility
Wide range of experties deploying maintaing and automating , cloud solutions such as , Openstack , Vmware , using modern tools puppet , ansible


Review: Joe Henry faces down illness with creative gush
by PABLO GORONDIJoe Henry, “The Gospel According to Water” (earMUSIC)
Given a few months to live released a creative gush in Joe Henry and the result is “The Gospel According to Water,” one of the best albums of his fruitful career.
Fortunately, Henry’s cancer is in remission while he continues to get treatment and his 15th solo studio album is being released a year to the day of his diagnosis.
TOP STORIES
Trump accused of witness intimidation after criticizing Marie Yovanovitch as she testified
Evangelist Franklin Graham calls impeachment hearing 'a day of shame for America'
Myles Garrett suspended indefinitely for clubbing Mason Rudolph with helmet
Henry’s production work has won him three Grammys but, as the proverb says, sometimes it’s the shoemaker who wears the worst shoes. Henry proves it wrong by making a wise choice regarding his own work and leaving the 13 songs, which he initially viewed as demos, as stark and direct as they were recorded.
Accompanying himself on guitar, the sparse but supportive backing comes from the likes of son Levon on sax and clarinet, guitarist John Smith and Patrick Warren on keyboards.
Henry sings with his usual expressiveness but without exaggerating and doesn’t consider the songs “dark in nature” despite their time of origin, but rather a reflection of “gratitude, compassion to self” and being in love with life.
This is evident on tunes like the title track, “In Time for Tomorrow,” “Book of Common Prayer” and “Bloom” - songs that sound, at times, as if they could have been on Bob Dylan’s “Blood on the Tracks” had it been his reconciliation album instead of divorce.
Though there are concentrated mentions of death and prayers, one of the words heard most often is “light.”
Those who believe in miracles and trust in music’s healing power may consider the outstanding “The Gospel According to Water” as a pilgrimage, but even the skeptics and agnostics will be stirred by the depth and beauty of Joe Henry’s songs.
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


{% extends "layout.html" %} {% block title %}Page Not Found{% endblock %} {% block content %}
Oops!!! It seems the page you are looking for is not available


NG-Epoch Test page
Static Area
Static Bar
Static Line
Pie Chart
Donut Chart
Scatter Graph
Bubble Graph
Realtime Area
Realtime Bar
Gauge
Realtime Line
Heatmap
Static Line
Update Chart
Pie Chart
Update Chart


Let us transform your stained or lifeless clothing
Don't Trash It
Live in NYC?
to be invited to our events
Project Sustained
Natural Dye Laboratory
we are experimenting with natural dye techniques in Bed Stuy, Brooklyn
working towards collaborative tools with ethical designers


Tales of the Jazz Age
by F. Scott Fitzgerald
MAY DAY Chapter VII
Additional Information
- Year Published: 1922
- Language: English
- Country of Origin: United States of America
- Source: Fitzgerald, F.S. (1922) Tales of the Jazz Age. New York: Charles Scribner's Sons
-
Readability:
- Flesch–Kincaid Level: 12.0
- Word Count: 761
- Genre: Realism
- ✎ Cite This
Downloads
VII
The over–rouged young lady followed her with a brief, bitter glance—then turned again to the weak–chinned waiter and took up her argument.
"You better go up and tell him I'm here," she said defiantly, "or I'll go up myself."
"No, you don't!" said George sternly.
The girl smiled sardonically.
"Oh, I don't, don't I? Well, let me tell you I know more college fellas and more of 'em know me, and are glad to take me out on a party, than you ever saw in your whole life."
"Maybe so—"
"Maybe so," she interrupted. "Oh, it's all right for any of 'em like that one that just ran out—God knows where she went—it's all right for them that are asked here to come or go as they like—but when I want to see a friend they have some cheap, ham–slinging, bring–me–a–doughnut waiter to stand here and keep me out."
"See here," said the elder Key indignantly, "I can't lose my job. Maybe this fella you're talkin' about doesn't want to see you."
"Oh, he wants to see me all right."
"Anyways, how could I find him in all that crowd?"
"Oh, he'll be there," she asserted confidently. "You just ask anybody for Gordon Sterrett and they'll point him out to you. They all know each other, those fellas."
She produced a mesh bag, and taking out a dollar bill handed it to George.
"Here," she said, "here's a bribe. You find him and give him my message. You tell him if he isn't here in five minutes I'm coming up."
George shook his head pessimistically, considered the question for a moment, wavered violently, and then withdrew.
In less than the allotted time Gordon came down–stairs. He was drunker than he had been earlier in the evening and in a different way. The liquor seemed to have hardened on him like a crust. He was heavy and lurching—almost incoherent when he talked.
"'Lo, Jewel," he said thickly. "Came right away, Jewel, I couldn't get that money. Tried my best."
"Money nothing!" she snapped. "You haven't been near me for ten days. What's the matter?"
He shook his head slowly.
"Been very low, Jewel. Been sick."
 I don't care about the money that bad. I didn't start bothering you about it at all until you began neglecting me."
Again he shook his head.
"Haven't been neglecting you. Not at all."
"Haven't! You haven't been near me for three weeks, unless you been so drunk you didn't know what you were doing."
"Been sick. Jewel," he repeated, turning his eyes upon her wearily.
"You're well enough to come and play with your society friends here all right.
"I couldn't get any money."
"Haven't I just been saying that doesn't matter? I wanted to see you, Gordon, but you seem to prefer your somebody else."
He denied this bitterly.
"Then get your hat and come along," she suggested. Gordon hesitated—and she came suddenly close to him and slipped her arms around his neck.
"Come on with me, Gordon," she said in a half whisper. "We'll go over to Devineries' and have a drink, and then we can go up to my apartment."
"I can't, Jewel,——"
"You can," she said intensely.

"Well, then, you oughtn't to stay here and dance."
With a glance around him in which relief and despair were mingled, Gordon hesitated; then she suddenly pulled him to her and kissed him with soft, pulpy lips.
"All right," he said heavily. "I'll get my hat."


checked > English checked > Russian: KOI-8 (Unix) checked > Russian: MS Windows checked > Russian: MS DOS checked > Russian: Macintosh


Why is branding important for business? Your brand sets you apart from competitors, promotes recognition, and represents your promise to the customer.
Market research provides critical information about your market and your business landscape. It can tell you how your company is perceived by the target customers and clients you want to reach. ... It can help you determine who and where your customers are, and which customers are most likely to do business with you.
The most important advantage of a prototype is that it simulates the real and future product. It can help attract customers to invest in the product before allocating any resources needed for implementation. You can test the design's correctness before it comes into production and you can discover design errors.
it can make or break your customer base. It creates fewer problems, increases user involvement, perfects functionality and creates a strong link between your customers and your website.
It matters little that something is easy if it's not what you want. It's also no good if the system can hypothetically do what you want, but you can't make it happen because the user interface is too difficult.
By performing User Testing, it enables us to evaluate a product or service with real users and be able to create human-centric products. Through this process, we can really explore and analyse the target audience's behaviour when interacting with your product.
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat.


|
Ext.NET Mobile
4.1.0
.NET Component Framework for Enterprise Level Apps
|
Public Member Functions | |
| Builder (TRadarSeries component) | |
| virtual TBuilder | RadiusField (string radiusField) |
| The store record field name for the radial axes in radar charts More... | |
| virtual TBuilder | SetRadiusField (string radiusField) |
| Sets the value of RadiusField More... | |
| Builder () | |
| Builder (RadarSeries component) | |
| Builder (RadarSeries.Config config) | |
| Public Member Functions inherited from Ext.Net.Mobile.PolarSeries.Builder< TRadarSeries, TBuilder > | |
| Builder (TPolarSeries component) | |
| virtual TBuilder | Center (int[] center) |
| virtual TBuilder | AngleField (string angleField) |
| The store record field name for the angular axes in radar charts, or the size of the slices in pie charts. More... | |
| virtual TBuilder | OffsetX (double? offsetX) |
| virtual TBuilder | OffsetY (double? offsetY) |
| virtual TBuilder | Radius (double? radius) |
| virtual TBuilder | Rotation (double? rotation) |
Static Public Member Functions | |
| static implicit | operator Builder (RadarSeries component) |
| TRadarSeries | : | RadarSeries | |
| TBuilder | : | Builder | |
| TBuilder | : | TRadarSeries | |
| TBuilder | : | TBuilder |
|
inline |
|
inline |
|
inline |
|
inline |
|
inlinestatic |
|
inlinevirtual |
The store record field name for the radial axes in radar charts
|
inlinevirtual |
Sets the value of RadiusField


{% extends 'base.html' %} {% block title %}Help: Create and Configure Azure{% endblock title %} {% block page_title %}Help{% endblock page_title %} {% block content %}
Data for all CodaLab competitions and worksheets is stored on Microsoft Azure. Follow these steps to create a Windows Azure account. If you already have a Windows Azure account you can skip ahead to Configure Azure Storage.
In CodaLab competitions, data is hosted in Windows Azure Blob Service.
To Set up Storage for a Competition
Copy the endpoint URL and key for your storage container. You will need this for uploading competition data, and for creating your manifest files. To do this, navigate to the dashboard for your storage account and click the MANAGE ACCESS KEYS button at the bottom of the page.
This will display the Manage Access Keys dialog.
For more information about getting your storage account name and account key, see How to: View, copy, and regenerate storage access keys.


Create a spreadsheet with the following format and save it as a CSV.
Then, zip the CSV and upload it here.
|
Name
|
Email
|
Balance
|
Barcode
|
Pin
|
|
John Doe
|
<EMAIL_ADDRESS>|
9.99
|
0123456879
|
123
|
|
...
|
Note: these columns can be in any order, and some columns can be left out to import with default values.


Puzzles Collection
Eight Queens
This is the classic game of placing 8 queens on the chessboard, without one attacking another. Click on a square to place a queen. Re-click to remove the queen. This is harder than it initially seems, so a may be useful. If you still can't solve it, you can ask the application to solve it for you.
There is a total of 92 different solutions for this riddle. If symmetrical solutions (through 90, 180, 270 degrees rotation) are considered identical, the actual number of different solutions is 23. This riddle is commonly used as an example problem for algorithm design.
Knight's Tour
This is another classic. Objective of the game is to guide the knight through all of the chessboard's squares. You must end one knight's move away from the first move. Click on a highlighted square to move the knight. Clicking on the last visited square will undo the last move. You can also click "Undo" at the menu.
Select "Settings" to play variations of the puzzle. You can change the size of the board (up to 12x12). You can also play the puzzle without the need to end one knight move away from the first position (uncheck the Reentrant option). If you uncheck the Knight's move only option, then you can also move three squares afar in the same column or row.
The following table depicts a famous solution to the problem by Leonard Euler, great mathematician of 18th century.
| 1 | 48 | 31 | 50 | 33 | 16 | 63 | 18 |
| 30 | 51 | 46 | 3 | 62 | 19 | 14 | 35 |
| 47 | 2 | 49 | 32 | 15 | 34 | 17 | 64 |
| 52 | 29 | 4 | 45 | 20 | 61 | 36 | 13 |
| 5 | 44 | 25 | 56 | 9 | 40 | 21 | 60 |
| 28 | 53 | 8 | 41 | 24 | 57 | 12 | 37 |
| 43 | 6 | 55 | 26 | 39 | 10 | 59 | 22 |
| 54 | 27 | 42 | 7 | 58 | 23 | 38 | 11 |
A knight can pass sequentially through all the squares. Besides this, the square is also a "semi magic square". That is, the sum of all rows and columns is equal (260). The square is not a "full magic square", because the sum of the two primary diagonals is not the same with the sum of the rows and the columns. However the square has another interesting property. The sum of every half row and every half column is 130, that is the half of the sum of every row and column! In case you are wondering, it is impossible to build an 8x8 square that is both a full magic square and a knight' tour!
Peg Solitaire
I suppose everyone has tried this at least once before. The game is won if just one peg remains on the board. You remove a peg by moving another one over it. The peg that moves must be located right next to the one that is removed and must land to a free spot exactly two pegs away. Only horizontal and vertical moves are allowed. Click a peg that is allowed to move to select it and then click an empty spot to jump over the peg in the middle. Select "Undo" from the menu to undo your last move.
Lights Out
Lights Out is an electronic game, released by Tiger Toys in 1995. The game consists of a 5 by 5 grid of lights. When the game starts, a random number or a stored pattern of these lights is switched on. Pressing any of the lights will toggle it and the four adjacent lights. The goal of the puzzle is to switch all the lights off, preferably in as few button presses as possible.
There are many variations of the game available. The game can be played in boards with different sizes. It can also be played with more than one colors. The lights can't only be on and off, but instead they switch from one color to another. Finally the pattern for toggling the lights could be different (e.g. the diagonal and not the adjacent lights switch on and off).
In order to play the game tap on a light to make a move. You can undo a move and start from the beginning. If the puzzle is too difficult for you, then you can press the "Solve" button. The lights that should be pressed in order to solve the puzzle will be marked with a red circle.
The solving algorithm uses Gaussian Elimination and is copied from http://www.ueda.info.waseda.ac.jp/~n-kato/lightsout/.
About
Puzzle Solver is an open-source application. You can read about it and access the source code in The Code Project.


Legend
City of Seattle Community Data APIs:
- Children's Play Areas: https://data.seattle.gov/resource/mnai-wmyz.json
- Off Leash Dog Parks: https://data.seattle.gov/resource/ituq-7zbq.json
- Waterfront Access: https://data.seattle.gov/resource/ebpc-weez.json
- Google Maps Javascript API: https://developers.google.com/maps/documentation/javascript/
- Google Places Javascript API: https://developers.google.com/places/javascript/


Stream Transport is not actually a transport, it’s more like a testing add-on as instead of delivering the message it processes input data and returns you the generated RFC822 email message either as a stream or a Buffer. Additionally you can define which kind of newlines to use, either the ‘windows’ style (<CR><LF>) or the ‘unix’ style (<LF>). This transport is mostly useful for testing and also for scenarios where you want to use Nodemailer plugins to process the message and do the actual delivery by some other means.
To use Stream Transport, set streamTransport in Nodemailer transport options to true in Nodemailer options. If you want the transport to return buffers instead of streams, set buffer option to true. For newline selection use newline property (defaults to ‘unix’)
The info argument for sendMail() callback includes the following properties:
Another alternative instead of streaming is JSON transport (available since Nodemailer v3.1.0). In this case the message object would include a JSON string that in turn could be used as input for Nodemailer. All attachments, web content etc. are converted into base64 encoded strings. Address strings are parsed into address objects. The only downside is that raw property is not supported.
let transporter = nodemailer.createTransport({
streamTransport: true,
newline: 'windows'
});
transporter.sendMail({
from<EMAIL_ADDRESS>to<EMAIL_ADDRESS>subject: 'Message',
text: 'I hope this message gets streamed!'
}, (err, info) => {
console.log(info.envelope);
console.log(info.messageId);
info.message.pipe(process.stdout);
});
let transporter = nodemailer.createTransport({
streamTransport: true,
newline: 'unix',
buffer: true
});
transporter.sendMail({
from<EMAIL_ADDRESS>to<EMAIL_ADDRESS>subject: 'Message',
text: 'I hope this message gets buffered!'
}, (err, info) => {
console.log(info.envelope);
console.log(info.messageId);
console.log(info.message.toString());
});
let transporter = nodemailer.createTransport({
jsonTransport: true
});
transporter.sendMail({
from<EMAIL_ADDRESS>to<EMAIL_ADDRESS>subject: 'Message',
text: 'I hope this message gets buffered!'
}, (err, info) => {
console.log(info.envelope);
console.log(info.messageId);
console.log(info.message); // JSON string
});
The contents of info.message (string value) would look like this:
{
"from":{
<EMAIL_ADDRESS>"name":""
},
"to":[
{
<EMAIL_ADDRESS>"name":""
}
],
"subject":"Message",
"text":"I hope this message gets buffered!",
"headers":{
},
<EMAIL_ADDRESS>}


 Perfect for a kids’ party!
Preheat the oven to 190C/170C Fan/Gas 5. Grease and line a 14x20cm/5½x8in cake tin or 900g/2lb loaf tin.
For the cake, put the butter, sugar, eggs and flour into a large mixing bowl. Using an electric hand whisk, beat for 3 minutes on medium speed until smooth and shiny.
Spoon the batter into the prepared tin. Level off the top, then bake on the middle shelf for 45–50 minutes, or until a skewer inserted comes out clean and the cake is golden-brown and well risen. Leave to cool for 10 minutes in the tin, then turn out to cool completely on a wire rack.
Meanwhile, for the strawberry Swiss meringue buttercream, put the egg whites, sugar and salt into a heatproof bowl. Place over a pan of gently simmering water (do not let the bottom of the bowl touch the water).
Using an electric hand whisk, mix on high speed for 5 minutes, or until glossy and thick. Remove from the heat and beat for 2 minutes, or until cooled to room temperature.
Now quickly add the butter a cube at a time until you have used up all of it. The mixture may look quite loose and split, but don’t be alarmed – keep beating until it has cooled, thickened and come together. Beat in the strawberry milkshake powder until well incorporated.
Once the cake has cooled completely, trim the top and sides if necessary so the rectangle is neat and flat. Turn the cake upside down onto a cake board or stand.
Put half the buttercream in a piping bag with a large round tip nozzle attached and set aside. With the remaining buttercream cover the sides of the cake using an offset spatula.
Pipe tall peaks around the top edge of the cake. Scatter the sprinkles over the centre. Decorate the tops of some of the icing peaks with halved sandwich biscuits .


Books I have read and enjoyed
In this post, you can find some books on various topics that I have read and enjoyed. I will update this post occasionally.
Machine learning
- Machine Learning by Tom M. Mitchell
- Hands-On Machine Learning with Scikit-Learn and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems by Aurélien Géron
Operations research
- An Introduction to Management Science: Quantitative Approach by David R. Anderson, Dennis J. Sweeney, Thomas A. Williams, Jeffrey D. Camm, and James J. Cochran
Technology
- Superintelligence by Nick Bostrom
- Rebooting AI: Building Artificial Intelligence We Can Trust by Gary Marcus and Ernest Davis
Digital marketing
- Digital Marketing: Strategy, Implementation and Practice by Dave Chaffey
Digital business
- Leading Digital: Turning Technology into Business Transformation by George Westerman, Didier Bonnet, and Andrew McAfee
- The Digital Transformation Playbook: Rethink Your Business for the Digital Age by David L. Rogers
- Platform Revolution: How Networked Markets Are Transforming the Economy―and How to Make Them Work for You by Geoffrey G. Parker, Marshall W. Van Alstyne, and Sangeet Paul Choudary
Start-ups
- Zero to One: Notes on Startups, or How to Build the Future by Peter Thiel and Blake Masters
- Business Model Generation: A Handbook for Visionaries, Game Changers, and Challengers by Alexander Osterwalder and Yves Pigneur
- The $100 Startup: Reinvent the Way You Make a Living, Do What You Love, and Create a New Future by Chris Guillebeau
User-centered design
- The Design of Everyday Things by Don Norman
- User-Centered Design: A Developer’s Guide to Building User-Friendly Applications by Travis Lowdermilk
- Don’t Make Me Think: A Common Sense Approach to Web Usability by Steve Krug
Leadership
- Leadership: Theory and Practice by Peter G. Northhouse
Data visualization
- Storytelling with Data: A Data Visualization Guide for Business Professionals by Cole Nussbaumer Knaflic
Research methods
- Analyzing Social Networks by Stephen P. Borgatti, Martin G. Everett, and Jeffrey C. Johnson
- Doing Q Methodological Research: Theory, Method & Interpretation by Simon Watts
- The Foundations of Social Research: Meaning and Perspective in the Research Process by Michael J. Crotty
Soft skills
- Even a Geek Can Speak by Joey Asher
Books I have read
I have read these books; they are all good (that’s why I decided to read at the beginning) and they are useful for me to some extent, but I am still considering putting them in one of the categories above.


phateR: PHATE - Potential of Heat-Diffusion for Affinity-Based
Transition Embedding
PHATE is a tool for visualizing high dimensional single-cell data
with natural progressions or trajectories. PHATE uses a novel conceptual framework
for learning and visualizing the manifold inherent to biological systems in which
smooth transitions mark the progressions of cells from one state to another.
To see how PHATE can be applied to single-cell RNA-seq datasets from hematopoietic
stem cells, human embryonic stem cells, and bone marrow samples, check out our preprint on bioRxiv
at <http://biorxiv.org/content/early/2017/03/24/120378>.
Downloads:
Reverse dependencies:
Linking:
Please use the canonical form
https://CRAN.R-project.org/package=phateR
to link to this page.


Salmon Cookies
Sales
Contact
Add your own city
Enter city:
Enter minimum customers per hour:
Enter maximum customers per hour:
Enter average cookies per customer:


Join our free theta360.guide community and get entered into our free drawing to win a cool shirt and a copy of Michael Wohl’s The 360° Video Handbook.
Add new 360° skills, have fun, and build your career!
360 video expert Michael Wohl explains how to use structural elements in your environment to create "frame-within-the-frame" boundaries for VR experiences
Wohl's The 360 Video Handbook will show you how to use depth to guide your viewer to explore a VR video scene.
Show your pride in being at the cutting-edge of the 360 movement that is changing our world. Cool shirt for the hackers and creators that are inventing the VR world.


User Contacts
.
People's Contacts
Add User
Retrieve List
Here is the list of all users!
Firstname
Lastname
Phone Number
Email
No user found


With a video and audio gallery of some of their hugest hits you'll soon realise why you need to book to see The Monkees live in concert or invite them to perform at your biggest events. They are not only one of the biggest selling bands of the United States but also the world.
Mickey, Michael, Peter and Davy are The Monkees and they look forward to meeting you!
I remember seeing The Monkees when they first formed and am so pleased to see them still going strong.
We booked The Monkees as our wedding band and we were absolutely blown away. We loved them, the guests loved them, even my "Uncle Grumpy" loved them! We'd book again in a flash. Thank you Monkees, you are truly fab!
I watched The Monkees whilst I was in Singapore - they are phenomenal and I am so glad that I get the chance to regularly see them even though I work away from home all the time!
I was given a Monkees CD for Christmas and was dubious - I never seemed to like that 60s rock sound but boy was I in for a surprise!? Not only was it GREAT I also had to buy a spare copy as I wanted it in the car too!"


+++ draft = false date = "2006-10-05T02:08:44-03:00" title = "Dynamic vocabulary for an Archetypes field" tags = ["cookbook", "Plone"] created = "2006-10-05T02:02:45-03:00" modified = "2006-10-05T02:09:11-03:00" permaLink = "http://play.pixelblaster.ro/blog/archive/2006/10/05/dynamic-vocabulary-for-an-archetypes-field" author = "Tiberiu Ichim" aliases = [ "/blog/archive/2006/10/05/dynamic-vocabulary-for-an-archetypes-field" ] +++
I keep forgetting how to do dynamic vocabularies for an AT field. As explained in the Vocabulary() method in Field.py, this method will return either the list defined in the vocabulary parameter of the field, or, among others, the list resulting from calling the method defined in the string given as value to the vocabulary parameter.
The code below will make the explanation easier to understand:
...
LinesField(
name='domains',
vocabulary='getVocabularyForDomains' )
...
def getVocabularyForDomains(self):
return ['first', 'second', 'third', 'etc']


Short Summary
From start to finish, it would take about 5 months and cost about $600 to get your Salesperson DRE License in California.
While the following steps are for California examinees, the timeline and cost would be quite similar in other states.
Step 1 - Complete 3 required prelicensing courses - 8 - 10 weeks, $150 - $200
You need to take 3 required prelicensing courses, they are 45 hours each. I would highly recommend you take it online, which is usually study at your own pace on demand videos.
At the end of each course, you will be given an open book exam, comprising of 100 multiple choice questions, and you need to get at least a score of 60%.
In California you are required to spend a minimum of 18 days on each course, so that’s at least 56 days for all three courses. That amounts to about 3 hours of classes per day. You have one year to complete the course from your enrollment date.
There are many online prelicensing course providers, my personal favorite is Prepagent, because their videos are fun, the material is dry, but they spice it up with a lot of humor and fun acronyms to help you remember the terms.
With prepagent, their real estate prelicensing course with exam prep package retails for $200. I highly recommend purchasing this combination as being able to do hundreds of practice questions from their exam prep was what helped me pass the exam on my first try.
I had previously signed up with another provider and their presentation was so boring it often put me to sleep. Luckily they had a money back guarantee so I asked for a refund and switched to Prepagent.
Step 2 - Send in your Salesperson exam application (RE400A) - 6 to 8 weeks, $60
It takes about 6 - 8 weeks for California Department of Real Estate (DRE) to process your exam application and verify that you have completed your required prelicensing courses. DRE provides the current processing time on their website
You need to send in $60 along with the exam application form (RE400A). When they approve your application, you will then receive an email inviting you to sign up for an account at their DRE eLicensing system, which is where you would schedule your examination.
You can also apply for a combined license and exam application, but the license application fee of $245 is not refundable should you not pass your exam within 2 years.
Step 3 - Study for the examination - 2 - 6 weeks, $0 - $100
As soon as you send in your Salesperson exam application, you can start preparing for your exam. Do not wait until you hear back from DRE before you start studying because that might take weeks.
If you have completed your prelicensing courses but now need to study for the exam, I highly recommend purchasing an exam prep course where you can take thousands of practice questions.
Prepagent sells the exam prep separately for $100. Discount here if you use this link.
If it weren’t for the practice questions, I would not have passed my exam on my first try. From where I live, the driving time roundtrip to Sacramento and test taking time took me almost 8 hours, and I would have been so upset if I failed the test the first time and have to drive back to take it again. The $80 I spent for Prepagent’s exam prep course was very very well spent for me and I am grateful for it.
I would recommend spending 1 - 2 hours everyday studying. Each day, on Prepagent, I would aim to answer at least 100 questions (on their website, you can generate any number of questions for each test). As you do the questions, you will see over time that similar topics keep popping up. I cannot emphasize it enough how important it is to answer as many questions as you can. Then study the vocabulary sheet. Prepagent has great (and sometimes funny) videos that focus solely on real estate vocabularies. This would help you in at least answering half the exam questions. And don’t just memorize the answers. I found that it helped me remember things when I research it online why that answer is correct. When you consistenly score 75% on the simulated tests, it is time to schedule the exam. Usually there should be spots available for the next week, pick one that is about 1 week away.
Prepagent also has short 2-3 minute lessons audio files which you can download to your phone, and play them in the car while you are driving.
I honestly did have a lot of fun attending their live webinars on vocabularies, especially when it’s hosted by Joe Juter, Prepagent’s cofounder. He cracks me up. And I found it fun to give answers through the online chat (they do youtube live streaming for their webinars).
I took 4 weeks total to study for the exam. The first 3 weeks was at a more relaxed pace at about an hour or two per day. Then I scheduled the exam which was for a week later, during which I studied intensively by answering 200 questions everyday for that week.
Read my article on what to expect for the actual DRE Salesperson exam and my own experience taking it in Sacramento.
Step 4 - Apply for the license - 2 - 4 weeks, $330
Assuming you passed your exam on your first try, it would then take another 2 - 4 weeks for DRE to issue you your license after you mail in your license application form (I do not understand why they don’t allow online applications).
Before you send in your application, you need to get your fingerprints taken. Login to your elicensing account, and all the required forms you need will be in your account for you to print, including the Livescan fingerprint forms.
Here is a list of all the Livescan providers in California. The Livescan provider will collect from you $49, which goes to Depart of Justice, and however much service fee they charge, which usually runs about $30. Make sure to bring 2 copies of the Livescan form to your livescan provider. They will fill out both forms and return you one of the completed form.
Send in your license application form, completed livescan form along with $245 to DRE. You should hear back from them in about 2 - 4 weeks.
Step 5 - Give yourself a pat on the back
While it isn’t too hard, it isn’t entirely easy either to get a real estate license. So give yourself a pat on the back for having come so far.
What you choose to do with the license though, is entirely up to you. Here are some ideas what you can do with your newly minted real estate license.
To do
- reviews on course providers
- my experience on taking the exam
- What you can do with your real estate license
- study guide
- sample questions
- important vocabularies
- analyze DRE stats (https://www.dre.ca.gov/Licensees/ExamineeLicenseeListDataFiles.html, Current List of all licensees)


{include file="public/static/index/common/head.html"/}
{include file="public/static/index/common/nav.html"/}
Library of videos
Home
Video
Photomanipulation
Creating beats
Design websites
Fashion & styling
Writing books
Google analytics
Photomanipulation
Creating beats
Design websites
Fashion & styling
Writing books
Google analytics
Load more
{include file="public/static/index/common/footer.html"/}


A bit of a background on my situation:
I had suffered a severe debilitating depression for some time which did not respond to the traditional medications, Prozac, Wellbutrin, Levaquin, Zoloft, Cymbalta - they all showed positive effects after the initial two to three weeks, but eventually my depression would rise through the antidepressent effect worse than ever. One significant aspect of my depression was my incredible urge to sleep all the time. Ruling out anemia, sleep apnea, and other disorders, this left my doctors perplexed. It was eventually decided to prescribe Modafinil 200mg to treat this.
I do not wish to describe Modafinil as the 'wonder drug' that it has been called in various sensationalist magazine articles - but it has been very successful for my condition. I take it in the morning and an hour later I feel energetic and youthful and optimistic like I cannot remember feeling in some time.
I have been on it for about six months now with no wane or tolerance build-up that I can detect. Modafinil seems to have a day-to-day effect, going without for a day brings me back to my original state of tiredness for that day - although the antidepressent effects seem to last beyond the day to day stimulant effect.
The idea that a pill could keep me awake without feeling tired is certainly an appealing one - Modafinil can certainly keep me up for extended periods of time with repeated 8 -hour doses (Naturally I have experimented with my prescription) and with much better results than caffeine and much fewer side effects than amphetamines, but I certainly 'feel' that I am up longer than I should be. It disassociates me from the tired feeling inside me, in my joints and muscles and eyelids, although I still become easily distracted and begin to see things out of the corner of my eyes after the two day mark - I just don't have the crushing urge to find a bed to collapse in. In this way I feel it does not have much of a potential for abuse - I could see it becoming quite popular for college students or the military where wakefulness becomes a necessity, not a luxury.
Modafinil is also interesting in that despite its stimulant effect, I can still sleep while taking it. I have in fact made the mistake of taking it in the morning and returning to my bed for a nap, only to wake up some hours later.  Taking modafinil after I already have a desire to sleep (using it to stay up the day after a party, etc) is a miserable failure. I must use repeated doses to sustain the effect.
Other reports have stated Modafinil has no jittery effect. In this case I differ - I certainly feel the jitters on Modafinil. Mind you, they are extremely mild and consciously controllable, but I have noticed a slight tremor in my jaw, 'jiggling' of my knee and ankle when I sit, sweaty palms - typical jittery or 'speedy' symptoms. Ameliorating this somewhat are the warm tingling sensations in my thighs, joints, shoulders and neck I can only describe as being like the very initial onset of an MDMA experience - very pleasurable but mild.
Most of the coverage on Modafinil has concentrated on its effect on sleep - I must also report on its effect on my state of mind. Perhaps my depression was linked to my exhaustion, but I feel as if Modafinil has lifted me out of my depression with better success and more of a 'genuine' feeling than other antidepressants I have tried - I don't feel soulless or robotic or artificially happy as I have on other medications. Modafinil definitely has a very rapid effect on mood in my case, within one hour I feel quite good.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


Cellular systems and lattice models
Cellular systems provide an interesting continuum between non-living (such as molecules in crystal and metalline structures) and living (such as cells of a multi-cellular organism). The main difference is that, although both begin with more or less ‘the same program’, in living material the individual behavior of each cell specializes according to early conditions. This is important for developmental biology. Of course, computational cellular systems are far, far simpler than biological cells; but still draw from this inpsiration.
The Cellular Automaton (CA) model was propsed by Stanislaw Ulam and used by von Neumann to demonstrate machines that can reproduce themselves; a more concise example being proposed by Christopher Langton decades later, itself later improved upon using artificial evolutionary techniques.
The essential components that define a cellular system:
- Cellular space: A collection of cells arranged into a discrete lattice, such as a 2D grid.
- Cell states: The information representing the current condition of a cell. In Game of Life this is either 0 or 1, but in other systems the state could be represented by an n-tuple of values, or something more complex. The set of possible states could be defined as finite or unbounded.
- Initial conditions: What state the cells are in at the start of the simulation.
- Neighborhood: The set of adjacent/nearby cells that can directly influence a particular cell. In Game of Life these are the 8 side and corner neighbors (the Moore neighborhood). In other systems it could be expressed as a radius or range.
- State transition function: The rule that a cell follows to update its state, which depends on the current state and the state of the neighborhood.
- Time axis: The cells are generally updated in a discrete fashion, which may be synchronous (all cells update simultaneously) or asynchronous (cells update separately, e.g. in a probabilistic manner).
- Boundary conditions: What happens to cells at the edges. A periodic boundary ‘wraps around’ to the opposite edge; a static boundary always has the same state, a copying or reflective boundary mirrors the neighbor state, etc.
Cellular automata
The mathematical notion of automaton indicates a discrete-time system with finite set of possible states, a finite number of inputs, a finite number of outputs, and a transition rule which gives the state at the next step in terms of the state and inputs at the previous step.
A CA applies this notion to a cellular space. It has discrete time, finite neighborhood (inputs), finite state set (often represented as integers) and synchronous update. The transition rule (or CA rule) is usually deterministic, giving a cell state[t+1] as a function of the states[t] of itself and neighbours; and all cells use the same transition rule.
The space itself is usually 1D, 2D or 3D, but rarely greater. Wolfram performed most of his research using 1D CAs, such as the ‘rule 30’ CA below, whose evolution bears similarities with some shell patterns. The most famous CA Game of Life is 2D, which is so popular that people have written Turing machines and Game of Life in terms of it. Over here a 3D cellular automaton is taking over Minecraft, and here is a self-replicating computer in 3D.
Wolfram divided CA into four classes, according to their long-term behavior:
- Class 1 – stable. Evolves to homogeneous state.
- Class 2 – cyclic. Evolves to simple separated periodic structures. Local changes to the initial pattern tend to remain local
- Class 3 – chaotic. Any stable structures that appear are quickly destroyed by the surrounding noise. Local changes to the initial pattern tend to spread indefinitely
- Class 4 – complex. Local changes to the initial pattern may spread indefinitely. Wolfram has conjectured that many, if not all class 4 cellular automata are capable of universal computation.
Conway’s Game of Life
The Game of Life CA is an example of a outer totalistic CA: The spatial directions of cells do not matter, only the total value of all neighbors is used, along with the current value of teh cell itself. The transition rule for a cell can be stated concisely as follows:
- If the current state is 1 (“alive”):
- If the neighbor total is less than 2: New state is 0 (“death by loneliness”)
- Else if the neighbor total is greater than 3: New state is 0 (“death by overcrowding”)
- Else: State remains the same (“alive”)
- If the current state is 0 (“dead”):
- If the neigbor total is exactly 3: New state is 1 (“reproduction”)
- Else: State remains the same (“dead”)
The Game of Life produces easily recognizable higher-level formations including stable objects, oscillatory objects, mobile objects and objects that produce or consume others, for example, which have been called ‘ponds’, ‘gliders’, ‘eaters’, ‘glider guns’ and so on. In Wolfram’s terms, it is Class 4 CA.
Note that these rules mean that the Game of Life is not reversible: from a given state it is not possible to determine the previous state.
Game of Life in LuaAV
If the cells are densely packed into a regular lattice structure, such as a 2D grid, they can efficiently be represented as array memory blocks. The state of a cell can be represented by a number, so an array of integers works well. A way to index this array memory to read or write a cell coordinate will be useful.
We can get this by loading the field2D module (from /modules/field2D.lua), which gives us a bunch of utilities for working with 2D dense arrays.
local field2D = require "field2D" local dim = 128 -- number of cells in each axis: local game = field2D(dim, dim)
We may initialize the game with random cell values:
-- use a function to set the state of each cell: game:set(function(x, y) -- around 50% of the time set value 1, otherwise set value 0: if math.random() < 0.5 then return 1 else return 0 end end)
And we can render it on screen as follows:
-- the global function for rendering function draw() -- use the :draw method of field2D to render the data stored in field: field:draw() end
The core rule of the game can be expressed as follows:
function rule(state, neighbors) if state == 1 then -- currently alive if neighbors < 2 then -- death by loneliness state = 0 elseif neighbors > 3 then -- death by overcrowding state = 0 end else -- currently dead if neighbors == 3 then -- birth by reproduction state = 1 end end return state end
In theory the transition rule can be represented as a look-up table, however above a certain number of states and neighbors the size of this table would become astronomical (k states raised to the power of k neighbor states raised to the power of n neighbors; for a 3-state, 3-neighbor system this requires 7 billon rules!), so a procedural implementation is preferable. CAs may use bit-wise operators to implement the transition rules in a hardware-optimized way, but we will use regular if statements, like the above, for clarity.
We can wrap this rule in a function that could be applied to a field:
-- create a function to set the state of a game cell: function game_of_life(x, y) -- check the previous state of this cell: local state = game:get(x, y) -- check out the neighbors' previous states: local N = game:get(x , y+1) local NE = game:get(x+1, y+1) local E = game:get(x+1, y ) local SE = game:get(x+1, y-1) local S = game:get(x , y-1) local SW = game:get(x-1, y-1) local W = game:get(x-1, y ) local NW = game:get(x-1, y+1) -- count up the total active neighbors: local neighbors = N + E + S + W + NE + NW + SE + SW -- apply the rule to calculate the new state: return rule(state, neighbors) end
One complication is that the states of the whole lattice must update synchronously. That means: when one cell changes, all cells should change. This is not easy to achieve in most computing systems today, which mostly follow instructions one at a time (with only limited parallelism). A naive implementation will thus update cells one at a time, and the neighborhood of a particular cell will contain both ‘past’ and ‘future’ states. One way to work around this is to maintain two copies of the lattice; one for the ‘past’ states, and one for the ‘future’ states. The transition rule always reads from the ‘past’ lattice, and always writes to the ‘future’ lattice. After all cells are updated, either the ‘future’ is copied to the ‘past’, or the ‘future’ and ‘past’ lattices are swapped, since the future of yesterday is the past of tomorrow.
-- create a second field to store the next states of the game: local game_next = field2D(dim, dim) -- update the game via the globalupdate callback: function update() -- apply the game_of_life function to calculate each cell of the next game state: game_next:set(game_of_life) -- swap the state buffers: game, game_next = game_next, game end > This technique of using two areas of memory in alternating passes is called *double-buffering*, and is widely used in software systems where a parallel process interacts with a serial machine. It is used to render graphics to the screen, for example. See the full [code example](https://github.com/LuaAV/LuaAV4/blob/master/examples/alife/ca_2D_game_of_life.lua) ## Variations ### Non-homogenous CA The rule is not the same for all cells / for all time steps. Spatial non-homogeneity can be interesting to simulate different geographies (such as boundaries). Temporal non-homogeneity can be used to perform a sequence of different filters. - Special *boundary* cells in the field may follow different rules from others. - Some rules may depend on the cell position; perhaps the same CA has different regions using different rules. - The rules used could alternate between different rule definitions, over a period of N frames. Or certain parameters to rules could cycle over certain periods. - The neighborhood selection rules could change spatially or temporally as above (also see particle CA below). - Variations of space/rule/neighborhood could depend on global conditions, such as the overall density of black and white cells, or due to user interactions. - Combinations of the above. These can be implemented by changing the function used in the transition rule, or by extending the state set to accommodate the differences. Changing the function is usually easier to implement and understand. See a full [code example](https://github.com/LuaAV/LuaAV4/blob/master/examples/alife/ca_2D_nonhomogenous.lua) ### Probabilistic/Stochastic CA In this case the transition rule is not deterministic, but includes some random factor. - A probability can be assigned to each successor state according to the prior states. - A *backround noise* can be added, such that from time to time a randomly chosen cell changes state. A *temperature* control could control the statistical frequency of such changes. - Combinations with non-homogenous CAs: statistical choice of rules and neighborhoods; variations of probabilities over space and time, etc. Take a look at the [Forest Fire CA example](https://github.com/LuaAV/LuaAV4/blob/master/examples/alife/ca_2D_forest_fire.lua), and try changing the probabilities to see how it behaves. ### Particle CA, Lattice-Gas Automata and Block Rule CA The cell states represent the presence (or absence) of particles in a cell, and transition rules represent how particles move across cells. Generally the transition rule must preserve the quantity of particles. The elementary 1D traffic CA (rule 184) is a simple particle CA. An implementation option is to use *block rules*, which consider small regions at a time, rather than individual cells; e.g. a 2x2 region of cells in a 2D CA (the *Margolus neighborhood*). To handle the boundaries between blocks, the regions are shifted between each application ([see wikipedia](http://en.wikipedia.org/wiki/Block_cellular_automaton)). ![Margolus neigborhood](img/mnhood.gif) Note that a block rule CA does not need to be implemented with two buffers, since each block updates synchronously internally, and independently externally. More example block CAs [here](http://psoup.math.wisc.edu/mcell/rullex_marg.html) -- many of these are implemented [in the example script here](https://github.com/LuaAV/LuaAV4/blob/master/examples/alife/ca_2D_block_rules.lua). In 1969, German computer pioneer (and painter) Konrad Zuse published his book [Calculating Space](ftp://ftp.idsia.ch/pub/juergen/zuserechnenderraum.pdf), proposing that the physical laws of the universe are discrete by nature, and that the entire universe is the output of a deterministic computation on a single cellular automaton. This became the foundation of the field of study called *digital physics*. Zuse's first model is a 3D particle CA. ![Zuse's vision of nature](img/zuse.jpg) Particle CA can use probabilistic rules to simulate brownian motions and other non-deterministic media (but the rules would usually still need to be matter/energy preserving). Particle CA benefit from the inclusion of boundaries and other spatial non-homogeneities such as influx and outflow of particles at opposite edges. ### Asynchronous CA Instead of updating all cells at once, update one cell at a time, according to some update policy. The same choices can be applied per-block in a block-rule CA. - A fixed update policy, such as linear scan or pre-determined path, is orderly, but may introduce artifacts (related to the *double-buffering* pattern). - A *probabilistic asynchronous CA* chooses the next active cell according to a random selection (related to the Monte Carlo methods described below). - A multi-rate CA (self-clocked) updates each cell according to a clock period that varies from cell to cell. The clock period could also be affected by neighbors, to achieve *entrainment* effects. - A *mobile CA* chooses a related cell (such as one of the neighbors) of the current active cell as the next active cell. So in addition to choosing a new state for the cell, the transition rule must also choose how to move the active cell. This could also be partly probabilistic. There could be more than one 'active cell'. What happens if two active cells occupy the same site? [Langton's Ant](http://en.wikipedia.org/wiki/Langton%27s_ant) is a mobile CA in a 2D, two-state space, with very simple rules: - At a white square, turn 90° right, flip the color of the square, move forward one unit - At a black square, turn 90° left, flip the color of the square, move forward one unit [See the script](https://github.com/LuaAV/LuaAV4/blob/master/examples/alife/ca_2D_langtons_ant.lua) in the repo, and the [original video by Christopher Langton](http://www.youtube.com/watch?v=w6XQQhCgq5c), including examples of multiple ants (and music by the Vasulkas). Note that Langton's Ant, and other related Turmites, are closely related to the turtle graphics often used for L-systems. #### Statistical and unbounded state models The *Ising model* of ferromagnetism in statistical mechanics can also be simulated in a *Monte Carlo* fashion. Each site (cell) has either positive or negative spin (we can encode that as 0 or 1 value). At each time step, consider a site at random, and evaluate the probability of changing state. If changing state moves the site toward energetic equilibrium with neighbors (determined according to the Hamiltonian of the site), then the change is made. Otherwise, the change is made only with a small probability that is dependent on the energetic difference and overall temperature. Thus at high temperatures, the system remains noisy, while at low temperatures it gradually self-organizes into all sites with equal spin. It is also related to the *contact process* model, which has been used to simulate the spread of infection: infected sites become healthy at a constant rate, while healthy sites become infected at a rate proportional to the number infected neighbor (see also the *HodgePodge* simulation). This can be extented to multiple states for a multitype contact process. The *voter model* similarly simulates the changing of opinion in social groups. See the [HodgePodge example here](https://github.com/LuaAV/LuaAV4/blob/master/examples/alife/ca_2D_hodgepodge.lua) The cellular *Potts model* (also known as the *Glazier-Graner* model) generalizes these to allow more than two site states, and in some cases, an unbounded number of possible site states; however it still utilizes the notion of statistical movement toward neighbor equilibrium to drive change, though the definition of a local Hamiltonian. Variations have been used to model grain growth, foam, fluid flow, chemotaxis, biological cells, and even the developmental cycle of whole organisms. Note that in this field, the term *cell* is used not to refer to a site on the lattice, but to a whole group of connected sites that share the same state. So in modeling foam, a *cell* represents a single bubble, and is made of one or more *sites*. Most changes therefore happen at the boundaries between these cells. Stan Marée used this model to simulate the whole life cycle of [Dictyostelium discoideum](http://www-binf.bio.uu.nl/stan/Thesis/). See the [Potts Model example here](https://github.com/LuaAV/LuaAV4/blob/master/examples/alife/ca_2D_potts_model.lua) ### Continuous automata **Continuous states:** In this case, the states are not discrete but belong to a continuum, such as the linear range 0..1. Instead of using a discrete transition rule or lookup table, continuous functions can be used (or combined with discrete rules such as numeric comparisons). Continuous automata can show liquid and diffusive effects. **Continuous neighborhood:** Instead of accumulating whole neighbor cells, apply a *kernel* region. Perhaps give different weights to cells according to the degree that they fall under a radius, or by distance. #### SmoothLife [SmoothLife](http://www.youtube.com/playlist?list=PL69EDA11384365494) still uses a discrete grid, but both the kernel and transition functions are adjusted for smooth, continuous values. A disc around the cell is integrated and normalized (i.e. averaged) for the cell's state, and a ring around this is integrated & normalized (averaged) for the neighbor state. Cell transition functions are expressed in terms of continuous sigmoid thresholds over the [0, 1] range, and re-expressed in terms of differential functions (velocities of change) to approximate continuous time. [Paper here](http://arxiv.org/pdf/1111.1567v2.pdf). By doing so, it removes the discrete bias and leads to fascinating results. [Another implementaton](http://www.youtube.com/watch?v=l7t8LtdBAV8). [Taken to 3D](http://www.youtube.com/watch?v=zA857JdUn9o&list=PL69EDA11384365494&index=46). In effect, by making all components continuous, it is essentially a simulation of differential equations. See the [example here](https://github.com/LuaAV/LuaAV4/blob/master/examples/alife/ca_2D_smooth.lua) #### Reaction Diffusion The reaction-diffusion model was proposed by Turing to describe embryo development and pattern-generation ([Turing, A. The Chemical Basic for Morphogenesis.](http://www.dna.caltech.edu/courses/cs191/paperscs191/turing.pdf)); it is still used today in CG ([Greg Turk's famous paper](http://www.cc.gatech.edu/~turk/my_papers/reaction_diffusion.pdf)). RD systems and other differential equation systems can be approximated using continuous automata. ![The Gray-Scott parameter map](img/xmorphia-parameter-map.jpg) One approach to simulating RD using CA is the *Gray-Scott* model, as described in [Pearson, J. E. Complex Patterns in a Simple System](http://arxiv.org/pdf/patt-sol/9304003.pdf). There is [a wonderful archive of this model at this webpage](http://mrob.com/pub/comp/xmorphia/), including many great video examples of the [u-skate world](http://www.youtube.com/watch?v=F5oKgVZ6bTk), and even [u-skate in 3D](http://www.youtube.com/watch?v=B03lcPEmSOQ). An implementation in our software can be found [here](https://github.com/LuaAV/LuaAV4/blob/master/examples/alife/ca_2D_greyscott.lua). Some of these systems share resemblance with analog video feedback ([example](http://www.youtube.com/watch?v=hDYEVv9t32U), [example](http://www.youtube.com/watch?v=Uw5onuS2_mw)), which has been exploited by earlier media artists (notably the Steiner and Woody Vasulka). ### Multi-Scale Systems Several cellular systems can be coupled together at different scales. - Perhaps each cell of a macro-CA is itself an entire micro-CA world. Or several CA can overlap with different spatial relationships. - Different indexing rules (such as affine transformations of coordinate space) can be used to impart non-local symmetries and behavior. - Different rules (or different neighborhood specifications) can be run in parallel on the same shared data. - Higher- and lower-level systems could progress at different rates (or statistical frequencies). Artists Driessens & Verstappen created a recursive cellular system (exhibited in the artwork *IMA Traveller*) which appears to show an endless zoom; as the whole field appears to expand, each cell periodically subdivides into four daughter cells, following one of several rules to vary the color. Cells outside the viewpoint are thrown away. The effect is an infinitely expanding landscape or journey, which can be partially navigated by the gallery visitor. See the [website](http://notnot.home.xs4all.nl/ima/IMAtraveller.html) and in particular the [info](http://notnot.home.xs4all.nl/ima/IMAcat.html) link. This work has inspired discussion by several critics, including [Mitchell Whitelaw](http://www.tandfonline.com/doi/abs/10.1076/digc.<IP_ADDRESS>10) and [Jon McCormack and Alan Dorin](http://citeseerx.ist.psu.edu/viewdoc/download?doi=<IP_ADDRESS>.6640&rep=rep1&type=pdf&utm_source=twitterfeed&utm_medium=twitter). #### Multi-Scale Symmetric Turing Patterns [Jonathan McCabe's cyclic multi-scale Turing patterns](http://www.jonathanmccabe.com/), and a [commentary by Mitchell Whitelaw](http://teemingvoid.blogspot.kr/2007/02/jonathan-mccabe-very-cellular-automata.html). The implementation is described [in this paper](http://www.jonathanmccabe.com/Cyclic_Symmetric_Multi-Scale_Turing_Patterns.pdf). It starts with a straightforward reaction/diffusion system: - Diffusion is simulated by averaging the continuous cell values over small (activator) and large (inhibitor) radii; if the the smaller (activator) concentration is greater than the larger (inhibitor) concentration, increase the cell value by a small amount; otherwise decrease. - After running the rule over all cells, the entire field is *normalized* (to ensure the minimum cell value is zero and the maximum cell value is 1). Since this creates structure at a single spatial scale, it can be elaborated by super-imposing several models at different spatial scales (different small and large radii). Or, by changing the radii dynamically over time (as in [Greg Turk's famous paper](http://www.cc.gatech.edu/~turk/my_papers/reaction_diffusion.pdf)). McCabe's system uses several pre-defined scales, but selects which scale to apply for a particular cell according to which one currently shows the least local variation. Additionally, his system does not measure all cells within a radius; instead it selects cells at the radius distance and certain angular directions, creating cyclical symmetries in the result. For example, 3-fold symmetry may be used at a smaller scale, and 9-fold symmetry at a larger scale.


Alex Rider is a story about a kid learning the truth about his parent. Having been secretly trained as a spy from birth, he's coerced into working for the MI6 and always ends up saving the world from unknown catastrophy.
Review
It has been a while since I last read books from the Alex Rider series, but I can tell you they're worth re-reading.
The general plot follows Alex as he gets into difficult situations and uses his wits, training, and cool gadgets to escape hazards. He often not only triumphs, but comes out ahead, finding some new source of information which helps him uncover the final evil plan.
The series is quite easy to be immersed in, and nicely portrays the problems and challenges a spy might be facing. Some potential inaccuracy does exist, however it is outshadowed by the greater benefit it usually presents to the overall story. You can see that the author did his research, and consulted experts in quite a few fields when writing his books.
One of the main characteristics of this series is that Alex does not often wish to follow along with every Secret Service's requests for help. This is very realistic portrayal of the most likely reaction of a kid put in the situation he faces, and while I would prefer not to see him being coerced into these situations, it makes Alex seem much more normal and provides more believability to the story.
The evil villains of the Alex Rider universe do follow the standard James Bond procedure, but all seem to have unique quirks that make them much more. Not all of them would blab out their evil plan when Alex is caught and about to be killed, though most of them do end up leaving him to die.
Psychology plays a big part in the series, as we see Alex get hurt mentally with everything he goes through, and even though he seems to get back up a little too resiliently, it makes reading the books all the more accurate and enjoyable.