A view to display a single image or series of animated images.
Use the Titanium.UI.createImageView
method to create an ImageView
.
Specifying either a width
or height
property for this view will scale its image(s) with
the aspect ratio maintained, up to a maximum size that does not exceed its parent view.
Android 9-Patch Scaled Images
A nine-patch (9-patch) image is simply a standard png
image with a transparent border of a
single pixel, containing "guides" defined by solid black (#000
) color fills. Guides added to the
top and left edges determine that the image may be stretched in horizontal and vertical planes
respectively. Optionally, the content area may be defined by guides added to the bottom and
right edges.
Although any image editor may be used to create the guides, certain settings can cause the edges
of the graphic to "bleed" into the transparent border, consequently making it non-transparent.
Thus, the draw9patch
utility provided in the Android SDK tools directory is recommended for
this purpose.
For further information about nine-patch images and the Android utility, see the Nine-patch and Draw 9-patch sections of the Android Developer website.
The nine-patch technique may be used with any of Titanium's static image properties. See the "Button with Nine-patch Background Image" example for a demonstration.
| change | Fired for each frame change during an animation. | |
| click | Fired when the device detects a click against the view. | |
| dblclick | Fired when the device detects a double click against the view. | |
| doubletap | Fired when the device detects a double tap against the view. | |
| error | Fired when an image fails to load. | |
| load | Fired when either the initial image and/or all of the images in an animation are loaded. | |
| longclick | Fired when the device detects a long click. | |
| longpress | Fired when the device detects a long press. | |
| pause | Fired when the animation pauses. | |
| pinch | Fired when the device detects a pinch gesture. | |
| postlayout | Fired when a layout cycle is finished. | |
| singletap | Fired when the device detects a single tap against the view. | |
| start | Fired when the animation starts. | |
| stop | Fired when the animation stops. | |
| swipe | Fired when the device detects a swipe gesture against the view. | |
| touchcancel | Fired when a touch event is interrupted by the device. | |
| touchend | Fired when a touch event is completed. | |
| touchmove | Fired as soon as the device detects movement of a touch. | |
| touchstart | Fired as soon as the device detects a touch gesture. | |
| twofingertap | Fired when the device detects a two-finger tap against the view. |
Adds a child to this view's hierarchy.
Arguments
| view | [Titanium.UI.View] | View to add to this view's hierarchy. |
Adds the specified callback as an event listener for the named event.
Arguments
| name | [String] | Name of the event. |
| callback | [Callback<Object>] | Callback function to invoke when the event is fired. |
Animates this view.
Arguments
| animation | [Titanium.UI.AnimationDictionary<Titanium.UI.Animation>] | Either a dictionary of animation properties or an Animation object. |
| callback | [Callback<Object>] | Function to be invoked upon completion of the animation. |
Applies the properties to the proxy.
Arguments
| props | [Dictionary] | A dictionary of properties to apply. |
Translates a point from this view's coordinate system to another view's coordinate system.
Arguments
| point | [Point] | A point in this view's coordinate system. If this argument is missing an x or y property, or the properties can not be converted into numbers, an exception will be raised. |
| destinationView | [Titanium.UI.View] | View that specifies the destination coordinate system to convert to. If this argument is not a view, an exception will be raised. |
Finishes a batch update of the View's layout properties and schedules a layout pass of the view tree.
Fires a synthesized event to any registered listeners.
Arguments
| name | [String] | Name of the event. |
| event | [Dictionary] | A dictionary of keys and values to add to the Titanium.Event object sent to the listeners. |
Gets the value of the anchorPoint property.
Gets the value of the animatedCenter property.
Gets the value of the animating property.
Gets the value of the autorotate property.
Gets the value of the backgroundColor property.
Gets the value of the backgroundDisabledColor property.
Gets the value of the backgroundDisabledImage property.
Gets the value of the backgroundFocusedColor property.
Gets the value of the backgroundFocusedImage property.
Gets the value of the backgroundGradient property.
Gets the value of the backgroundImage property.
Gets the value of the backgroundLeftCap property.
Gets the value of the backgroundRepeat property.
Gets the value of the backgroundSelectedColor property.
Gets the value of the backgroundSelectedImage property.
Gets the value of the backgroundTopCap property.
Gets the value of the borderColor property.
Gets the value of the borderRadius property.
Gets the value of the borderWidth property.
Gets the value of the bottom property.
Gets the value of the canScale property.
Gets the value of the center property.
Gets the value of the children property.
Gets the value of the decodeRetries property.
Gets the value of the defaultImage property.
Gets the value of the duration property.
Gets the value of the enableZoomControls property.
Gets the value of the focusable property.
Gets the value of the height property.
Gets the value of the hires property.
Gets the value of the horizontalWrap property.
Gets the value of the image property.
Gets the value of the images property.
Gets the value of the keepScreenOn property.
Gets the value of the layout property.
Gets the value of the left property.
Gets the value of the opacity property.
Gets the value of the paused property.
Gets the value of the preventDefaultImage property.
Gets the value of the rect property.
Gets the value of the repeatCount property.
Gets the value of the reverse property.
Gets the value of the right property.
Gets the value of the size property.
Gets the value of the softKeyboardOnFocus property.
Gets the value of the top property.
Gets the value of the touchEnabled property.
Gets the value of the transform property.
Gets the value of the visible property.
Gets the value of the width property.
Gets the value of the zIndex property.
Removes a child view from this view's hierarchy.
Arguments
| view | [Titanium.UI.View] | View to remove from this view's hierarchy. |
Removes the specified callback as an event listener for the named event.
Arguments
| name | [String] | Name of the event. |
| callback | [Callback<Object>] | Callback function to remove. Must be the same function passed to addEventListener. |
Sets the value of the anchorPoint property.
Arguments
| anchorPoint | [Point] | New value for the property. |
Sets the value of the backgroundColor property.
Arguments
| backgroundColor | [String] | New value for the property. |
Sets the value of the backgroundDisabledColor property.
Arguments
| backgroundDisabledColor | [String] | New value for the property. |
Sets the value of the backgroundDisabledImage property.
Arguments
| backgroundDisabledImage | [String] | New value for the property. |
Sets the value of the backgroundFocusedColor property.
Arguments
| backgroundFocusedColor | [String] | New value for the property. |
Sets the value of the backgroundFocusedImage property.
Arguments
| backgroundFocusedImage | [String] | New value for the property. |
Sets the value of the backgroundGradient property.
Arguments
| backgroundGradient | [Gradient] | New value for the property. |
Sets the value of the backgroundImage property.
Arguments
| backgroundImage | [String] | New value for the property. |
Sets the value of the backgroundLeftCap property.
Arguments
| backgroundLeftCap | [Number] | New value for the property. |
Sets the value of the backgroundRepeat property.
Arguments
| backgroundRepeat | [Boolean] | New value for the property. |
Sets the value of the backgroundSelectedColor property.
Arguments
| backgroundSelectedColor | [String] | New value for the property. |
Sets the value of the backgroundSelectedImage property.
Arguments
| backgroundSelectedImage | [String] | New value for the property. |
Sets the value of the backgroundTopCap property.
Arguments
| backgroundTopCap | [Number] | New value for the property. |
Sets the value of the borderColor property.
Arguments
| borderColor | [String] | New value for the property. |
Sets the value of the borderRadius property.
Arguments
| borderRadius | [Number] | New value for the property. |
Sets the value of the borderWidth property.
Arguments
| borderWidth | [Number] | New value for the property. |
Sets the value of the bottom property.
Arguments
| bottom | [NumberString] | New value for the property. |
Sets the value of the canScale property.
Arguments
| canScale | [Boolean] | New value for the property. |
Sets the value of the center property.
Arguments
| center | [Point] | New value for the property. |
Sets the value of the decodeRetries property.
Arguments
| decodeRetries | [Number] | New value for the property. |
Sets the value of the defaultImage property.
Arguments
| defaultImage | [String] | New value for the property. |
Sets the value of the duration property.
Arguments
| duration | [Number] | New value for the property. |
Sets the value of the enableZoomControls property.
Arguments
| enableZoomControls | [Boolean] | New value for the property. |
Sets the value of the focusable property.
Arguments
| focusable | [Boolean] | New value for the property. |
Sets the value of the height property.
Arguments
| height | [NumberString] | New value for the property. |
Sets the value of the hires property.
Arguments
| hires | [Boolean] | New value for the property. |
Sets the value of the horizontalWrap property.
Arguments
| horizontalWrap | [Boolean] | New value for the property. |
Sets the value of the image property.
Arguments
| image | [StringTitanium.BlobTitanium.Filesystem.File] | New value for the property. |
Sets the value of the images property.
Arguments
| images | [Array<String>Array<Titanium.Blob>Array<Titanium.Filesystem.File>] | New value for the property. |
Sets the value of the keepScreenOn property.
Arguments
| keepScreenOn | [Boolean] | New value for the property. |
Sets the value of the layout property.
Arguments
| layout | [String] | New value for the property. |
Sets the value of the left property.
Arguments
| left | [NumberString] | New value for the property. |
Sets the value of the opacity property.
Arguments
| opacity | [Number] | New value for the property. |
Sets the value of the preventDefaultImage property.
Arguments
| preventDefaultImage | [Boolean] | New value for the property. |
Sets the value of the repeatCount property.
Arguments
| repeatCount | [Number] | New value for the property. |
Sets the value of the reverse property.
Arguments
| reverse | [Boolean] | New value for the property. |
Sets the value of the right property.
Arguments
| right | [NumberString] | New value for the property. |
Sets the value of the softKeyboardOnFocus property.
Arguments
| softKeyboardOnFocus | [Number] | New value for the property. |
Sets the value of the top property.
Arguments
| top | [NumberString] | New value for the property. |
Sets the value of the touchEnabled property.
Arguments
| touchEnabled | [Boolean] | New value for the property. |
Sets the value of the transform property.
Arguments
| transform | [Titanium.UI.2DMatrixTitanium.UI.3DMatrix] | New value for the property. |
Sets the value of the visible property.
Arguments
| visible | [Boolean] | New value for the property. |
Sets the value of the width property.
Arguments
| width | [NumberString] | New value for the property. |
Sets the value of the zIndex property.
Arguments
| zIndex | [Number] | New value for the property. |
Starts the image animation. On Android and Mobile Web, also resets index
to the first image.
Stops a running animation. On iOS and Mobile Web, also resets index
to the first image.
Returns an image of the rendered view, as a Blob.
Arguments
| callback | [Callback<Titanium.Blob>] | Function to be invoked upon completion. If non-null, this method will be performed asynchronously. If null, it will be performed immediately. |
| honorScaleFactor | [Boolean] | Determines whether the image is scaled based on scale factor of main screen. (iOS only) When set to true, image is scale factor is honored. When set to false, the image in the blob has the same dimensions for retina and non-retina devices. |
Performs a batch update of all supplied layout properties and schedules a layout pass after they have been updated.
Arguments
| params | [Dictionary] | Layout properties to be updated. |
Event properties
| index |
Index of the image frame being displayed. |
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
Event properties
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
| x |
[Number] X coordinate of the event from the |
| y |
[Number] Y coordinate of the event from the |
Event properties
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
| x |
[Number] X coordinate of the event from the |
| y |
[Number] Y coordinate of the event from the |
Event properties
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
| x |
[Number] X coordinate of the event from the |
| y |
[Number] Y coordinate of the event from the |
Event properties
| image |
URL of the image that failed to load. |
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
Event properties
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
Event properties
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
| x |
[Number] X coordinate of the event from the |
| y |
[Number] Y coordinate of the event from the |
Event properties
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
Event properties
| scale |
[Number] The scale factor relative to the points of the two touches in screen coordinates. |
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
| velocity |
[Number] The velocity of the pinch in scale factor per second. |
Event properties
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
Event properties
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
| x |
[Number] X coordinate of the event from the |
| y |
[Number] Y coordinate of the event from the |
Event properties
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
Event properties
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
Event properties
| direction |
[String] Direction of the swipe--either 'left', 'right', 'up', or 'down'. |
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
| x |
[Number] X coordinate of the event's endpoint from the |
| y |
[Number] Y coordinate of the event's endpoint from the |
Event properties
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
| x |
[Number] X coordinate of the event from the |
| y |
[Number] Y coordinate of the event from the |
Event properties
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
| x |
[Number] X coordinate of the event from the |
| y |
[Number] Y coordinate of the event from the |
Event properties
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
| x |
[Number] X coordinate of the event from the |
| y |
[Number] Y coordinate of the event from the |
Event properties
| source |
[Object] Source object that fired the event. |
| type |
[String] Name of the event fired. |
| x |
[Number] X coordinate of the event from the |
| y |
[Number] Y coordinate of the event from the |


Mix v1.3.4 Mix.Task behaviour
A simple module that provides conveniences for creating, loading and manipulating tasks.
A Mix task can be defined by simply using Mix.Task
in a module starting with Mix.Tasks.
and defining
the run/1
function:
defmodule Mix.Tasks.Hello do
use Mix.Task
def run(_args) do
Mix.shell.info "hello"
end
end
The run/1
function will receive all arguments passed
to the command line.
Attributes
There are a few attributes available in Mix tasks to configure them in Mix:
@shortdoc
- makes the task public with a short description that appears onmix help
@recursive
- run the task recursively in umbrella projects@preferred_cli_env
- recommends environment to run task. It is used in absence of mix project recommendation, or explicit MIX_ENV.
Documentation
Users can read the documentation for public Mix tasks by doing mix help my_task
.
The documentation that will be shown is the @moduledoc
of the task’s module.
Summary
Functions
Checks if an alias called task
exists
Returns all loaded task modules
Clears all invoked tasks, allowing them to be reinvoked
Receives a task name and returns the task module if found
Receives a task name and retrieves the task module
Loads all tasks in all code paths
Loads all tasks in the given paths
Gets the moduledoc for the given task module
Gets preferred cli environment for the task
Checks if the task should be run recursively for all sub-apps in umbrella projects
Reenables a given task so it can be executed again down the stack
Reruns task
with the given arguments
Runs a task
with the given args
Gets the shortdoc for the given task module
Returns true
if given module is a task
Returns the task name for the given module
Types
Functions
Checks if an alias called task
exists.
For more information about task aliasing, take a look at the “Aliasing”
section in the docs for Mix
.
Returns all loaded task modules.
Modules that are not yet loaded won’t show up.
Check load_all/0
if you want to preload all tasks.
Clears all invoked tasks, allowing them to be reinvoked.
This operation is not recursive.
Receives a task name and returns the task module if found.
Otherwise returns nil
in case the module
exists but it isn’t a task or cannot be found.
Receives a task name and retrieves the task module.
Exceptions
Mix.NoTaskError
- raised if the task could not be foundMix.InvalidTaskError
- raised if the task is not a validMix.Task
Loads all tasks in all code paths.
Loads all tasks in the given paths
.
Gets the moduledoc for the given task module
.
Returns the moduledoc or nil
.
Gets preferred cli environment for the task.
Returns environment (for example, :test
, or :prod
), or nil
.
Checks if the task should be run recursively for all sub-apps in umbrella projects.
Returns true
or false
.
Reenables a given task so it can be executed again down the stack.
Both alias and the regular stack are reenabled when this function is called.
If an umbrella project reenables a task, it is reenabled for all children projects.
Reruns task
with the given arguments.
This function reruns the given task; to do that, it first re-enables the task and then regularly runs it.
Runs a task
with the given args
.
If the task was not yet invoked, it runs the task and returns the result.
If there is an alias with the same name, the alias will be invoked instead of a task.
If the task or alias were already invoked, it does not
run them again and simply aborts with :noop
.
It may raise an exception if an alias or a task can’t
be found or the task is invalid. Check get!/1
for more
information.
Gets the shortdoc for the given task module
.
Returns the shortdoc or nil
.
Returns true
if given module is a task.
Returns the task name for the given module
.


--- title: "BrianScheme Update: Bootstrapping and Images" layout: post tags: [lisp] uuid: abab3588-769a-31d4-16db-9eaa33791e48 ---
I previously talked about BrianScheme (BS) and we've had some exciting updates since then. I've since caught up with Brian so we're committing code at about the same rate. It's really coming together to be something bigger than we both expected. We're adding what we feel is the best of Common List and Scheme. The Git repository log reveals just how much time we've spent hacking at this.
The first big milestone was full bootstrapping. BS has both an interpreter, written in C, and a compiler written in BS. The compiler targets a VM, which is written in C. The interpreter is no longer used directly; it's there simply for bootstrapping the compiler. It sets up an initial environment, then loads and runs the compiler which immediately compiles itself, and then compiles its environment, and then compiles the main user environment. Afterward the whole thing is lifted up on top of the VM and the interpreter is abandonded.
Once everything was bootstrapped and running in the VM, continuations became a practical possibility, and Brian soon added them. So now BrianScheme now has all the major components of a Scheme.
I began ramping up my contributions by adding a really solid random number generator, the Mersenne twister, and providing functions to generate numbers on all sorts of distributions: normal, Poisson, gamma, exponential, beta, and Chi-squared. It's pretty reasonable at seeding itself, too.
In the meantime, this bootstrap process, while incredibly useful, was really slowing down development. It was taking BS about 10 seconds to boot itself every time it was started. That can really kill the usefulness of the system. I started to look into ways to mitigate this, perhaps through FASLs or some kind of image dump.
After discussing it with Brian I decided to try for a memory dump, SBCL-style. My old memory pool allocator, which I thought I've never use again, really came in handy, and now has a home — modified of course — in BS. It no longer uses malloc(), instead using mmap() to get more memory, and now has the ability to free() memory, completely replacing malloc(), realloc(), and free(). So with BrianScheme no longer use the libc allocator we had complete control over the program's memory. It was just a matter of dumping the handful of big mmap() chunks to disk, and in another process, loading them back in to the same location, and finally hooking the environment back up.
Just as the SBCL documentation warns about, there are complicated issues still to be resolved (and may never be). The two big ones are alien objects and open file handles, neither of which can make it into the image. Aliens could be in there potentially, if the foreign library let us select its allocator. Brian made a change that gives the FFI a hook to rebind its symbols after load, so some of the FFI can survive the jump. The three stdin, stdout, and stderr file handles are reconnected on load, but the old, dead handles can potentially linger in places, waiting to cause errors when someone tries to read them.
It was really, really exciting to see the images come back to life for the first time. With that success the lengthy bootstrap process was no longer a big problem because it could be bypassed much of the time. Saving images is really simple to do, too.
(save-image "brianscheme.img")
This will create the image "brianscheme.img", which can be loaded
again later with the -l
switch. Once loaded, it will
either execute a script if given one on the command line, or it will
provide a new REPL. Because the image is mmapp()
ed into
place, loading is practically instantaneous, even if the image is
dozens of megabytes (which can happen easily).
bsch -l brianscheme.img
The BS image in its booted state is about 15MB right now on 64-bit systems, and 7MB on 32-bit systems. They are low entropy and compress down to about 2MB, so it's not too bad. If you write a large program in BrianScheme and save it as an image it may be even larger.
Over the weekend I took this even further, continuing to follow in the footsteps of SBCL: I added a feature to wrap the image in the BS executable, so that the image itself is a standalone executable. To make this more useful, a toplevel function can be selected to run after the image loads, rather than a REPL. If you wrote a game in BS and wanted to compile to a standalone program,
(load "my-game.sch") (save-image "my-game" 'executable #t 'toplevel play-my-game)
The user would execute the file my-game
, which would load
BS and run the function play-my-game
. Because a 15MB
binary is a little unwieldy to hand out, you could compress it
beforehand with a tool like gzexe
, which transparently
compresses an executable.
The wrapper is actually very simple. It's a very slightly modified BS
executable, padded out to the system's page size (4kB, generally),
ending with a special marker. The image is concatenated to this
binary. When run, the program scans itself looking for the marker
(0xdeadbeef
), and then mmap()s the portion behind it (you
can only mmap() page-size offsets, which is why padding was
necessary).
BrianScheme should have an interesting future ahead of it.


Movie Reviews
-
Jul 24, 2020
-
Jul 22, 2020
-
Jul 15, 2020
-
Jul 13, 2020
-
Jul 12, 2020
-
Jul 7, 2020
-
Jul 6, 2020
-
Jul 3, 2020
-
Jul 3, 2020
-
Jul 1, 2020
-
Jun 30, 2020
-
Jun 29, 2020
-
Jun 27, 2020
-
Jun 23, 2020
-
Jun 20, 2020
-
Jun 19, 2020
-
Jun 19, 2020
-
Jun 16, 2020
-
Jun 15, 2020
-
Jun 14, 2020
-
Jun 12, 2020
-
Jun 12, 2020
-
Jun 6, 2020
-
Jun 4, 2020
-
May 30, 2020
-
May 30, 2020
-
May 28, 2020
-
May 28, 2020
-
May 27, 2020
-
May 27, 2020
-
May 24, 2020
-
May 24, 2020
-
May 24, 2020
-
May 22, 2020
-
May 14, 2020
-
May 11, 2020
-
May 10, 2020
-
May 7, 2020
-
May 6, 2020
-
May 5, 2020
-
Apr 27, 2020
-
Apr 27, 2020
-
Apr 26, 2020
-
Apr 24, 2020
-
Apr 24, 2020
-
Apr 24, 2020
-
Apr 19, 2020
-
Apr 11, 2020
-
Apr 10, 2020
-
Apr 4, 2020
-
Apr 4, 2020
-
Mar 30, 2020
-
Mar 28, 2020
-
Mar 28, 2020
-
Mar 28, 2020
-
Mar 23, 2020
-
Mar 22, 2020
-
Mar 22, 2020
-
Mar 22, 2020
-
Mar 22, 2020
-
Mar 21, 2020
-
Mar 20, 2020
-
Mar 20, 2020
-
Mar 17, 2020
-
Mar 15, 2020
-
Mar 8, 2020
-
Mar 8, 2020
-
Mar 2, 2020
-
Feb 25, 2020
-
Feb 23, 2020
-
Feb 22, 2020
-
Feb 22, 2020
-
Feb 17, 2020
-
Feb 17, 2020
-
Feb 16, 2020
-
Feb 15, 2020
-
Feb 14, 2020
-
Jan 28, 2020
-
Jan 26, 2020
-
Jan 25, 2020
-
Jan 24, 2020
-
Jan 19, 2020
-
Jan 13, 2020
-
Jan 12, 2020
-
Jan 9, 2020
-
Jan 3, 2020
-
Dec 30, 2019
-
Dec 29, 2019
-
Dec 28, 2019
-
Dec 26, 2019
-
Dec 24, 2019
-
Dec 20, 2019
-
Dec 20, 2019
-
Dec 19, 2019
-
Dec 17, 2019
-
Dec 17, 2019
-
Dec 14, 2019
-
Dec 14, 2019
-
Dec 10, 2019
-
Dec 9, 2019
-
Dec 5, 2019
-
Dec 4, 2019
-
Dec 4, 2019
-
Dec 2, 2019
-
Dec 1, 2019
-
Nov 24, 2019
-
Nov 24, 2019
-
Nov 23, 2019
-
Nov 23, 2019
-
Nov 23, 2019
-
Nov 21, 2019
-
Nov 19, 2019
-
Nov 12, 2019
-
Nov 10, 2019
-
Nov 8, 2019
-
Nov 7, 2019
-
Nov 2, 2019
-
Oct 27, 2019
-
Oct 26, 2019
-
Oct 22, 2019
-
Oct 11, 2019
-
Oct 6, 2019
-
Oct 5, 2019
-
Oct 1, 2019
-
Sep 30, 2019
-
Sep 30, 2019
-
Sep 29, 2019
-
Sep 22, 2019
-
Sep 20, 2019
-
Sep 20, 2019
-
Sep 20, 2019
-
Sep 11, 2019
-
Sep 11, 2019
-
Sep 8, 2019
-
Sep 8, 2019
-
Sep 7, 2019
-
Sep 7, 2019
-
Sep 2, 2019
-
Aug 28, 2019
-
Aug 24, 2019
-
Aug 23, 2019
-
Aug 14, 2019
-
Aug 13, 2019
-
Aug 7, 2019
-
Aug 7, 2019
-
Aug 7, 2019
-
Aug 7, 2019
-
Aug 1, 2019
-
Jul 28, 2019
-
Jul 23, 2019
-
Jul 21, 2019
-
Jul 2, 2019
-
Jun 30, 2019
-
Jun 24, 2019
-
Jun 12, 2019
-
Jun 9, 2019
-
Jun 9, 2019
-
Jun 8, 2019
-
Jun 6, 2019
-
Jun 2, 2019
-
Jun 1, 2019
-
May 30, 2019
-
May 27, 2019
-
May 17, 2019
-
May 14, 2019
-
May 12, 2019
-
May 7, 2019
-
May 5, 2019
-
Apr 28, 2019
-
Apr 23, 2019
-
Apr 20, 2019
-
Apr 19, 2019
-
Apr 16, 2019
-
Apr 14, 2019
-
Apr 8, 2019
-
Apr 7, 2019
-
Apr 6, 2019
-
Apr 6, 2019
-
Apr 5, 2019
-
Apr 3, 2019
-
Apr 2, 2019
-
Apr 1, 2019
-
Mar 31, 2019
-
Mar 24, 2019
-
Mar 23, 2019
-
Mar 3, 2019
-
Mar 2, 2019
-
Feb 28, 2019
-
Feb 27, 2019
-
Feb 27, 2019
-
Feb 25, 2019
-
Feb 23, 2019
-
Feb 23, 2019
-
Feb 20, 2019
-
Feb 5, 2019
-
Feb 2, 2019
-
Jan 27, 2019
-
Jan 21, 2019
-
Jan 21, 2019
-
Jan 13, 2019
-
Jan 5, 2019
-
Jan 4, 2019
-
Jan 3, 2019
-
Jan 1, 2019
-
Dec 25, 2018
-
Dec 24, 2018
-
Dec 20, 2018
-
Dec 20, 2018
-
Dec 17, 2018
-
Dec 16, 2018
-
Dec 12, 2018
-
Dec 11, 2018
-
Dec 4, 2018
-
Dec 1, 2018
-
Nov 29, 2018
-
Nov 20, 2018
-
Nov 19, 2018
-
Nov 18, 2018
-
Nov 7, 2018
-
Nov 6, 2018
-
Nov 2, 2018
-
Oct 28, 2018
-
Oct 27, 2018
-
Oct 25, 2018
-
Oct 22, 2018
-
Oct 11, 2018
-
Oct 10, 2018
-
Oct 9, 2018
-
Oct 9, 2018
-
Oct 7, 2018
-
Oct 6, 2018
-
Oct 2, 2018
-
Sep 25, 2018
-
Sep 11, 2018
-
Sep 9, 2018
-
Sep 3, 2018
-
Aug 24, 2018
-
Aug 23, 2018
-
Aug 22, 2018
-
Aug 17, 2018
-
Aug 13, 2018
-
Aug 8, 2018
-
Jul 26, 2018
-
Jul 24, 2018
-
Jul 20, 2018
-
Jul 11, 2018
-
Jul 10, 2018
-
Jul 9, 2018
-
Jul 4, 2018
-
Jun 27, 2018
-
Jun 22, 2018
-
Jun 20, 2018
-
Jun 6, 2018
-
Jun 4, 2018
-
Jun 2, 2018
-
Apr 7, 2018
-
Apr 1, 2018
-
Apr 1, 2018
-
Mar 26, 2018
-
Mar 16, 2018
-
Mar 3, 2018
-
Feb 28, 2018
-
Feb 24, 2018
-
Feb 24, 2018
-
Feb 13, 2018
-
Feb 12, 2018
-
Feb 5, 2018
-
Feb 3, 2018
-
Jan 31, 2018
-
Jan 26, 2018
-
Jan 23, 2018
-
Jan 21, 2018
-
Jan 17, 2018
-
Jan 16, 2018
-
Jan 13, 2018
-
Jan 11, 2018
-
Jan 8, 2018
-
Jan 7, 2018
-
Jan 5, 2018
-
Jan 3, 2018
-
Jan 1, 2018
-
Dec 31, 2017
-
Dec 30, 2017
-
Dec 27, 2017
-
Dec 26, 2017
-
Dec 24, 2017
-
Dec 24, 2017
-
Dec 23, 2017
-
Dec 22, 2017
-
Dec 22, 2017
-
Dec 20, 2017
-
Dec 20, 2017
-
Dec 19, 2017
-
Dec 18, 2017
-
Dec 16, 2017
-
Dec 13, 2017
-
Dec 12, 2017
-
Dec 11, 2017
-
Dec 10, 2017
-
Dec 9, 2017
-
Dec 7, 2017
-
Dec 5, 2017
-
Nov 21, 2017
-
Nov 21, 2017
-
Nov 20, 2017
-
Nov 18, 2017
-
Nov 17, 2017
-
Nov 14, 2017
-
Nov 11, 2017
-
Nov 9, 2017
-
Nov 6, 2017
-
Nov 5, 2017
-
Nov 5, 2017
-
Nov 4, 2017
-
Nov 3, 2017
-
Nov 2, 2017
-
Oct 31, 2017
-
Oct 28, 2017
-
Oct 27, 2017
-
Oct 25, 2017
-
Oct 25, 2017
-
Oct 20, 2017
-
Oct 17, 2017
-
Oct 16, 2017
-
Oct 15, 2017
-
Oct 12, 2017
-
Oct 10, 2017
-
Oct 8, 2017
-
Oct 8, 2017
-
Oct 5, 2017
-
Oct 4, 2017
-
Oct 2, 2017
-
Sep 23, 2017
-
Sep 23, 2017
-
Sep 23, 2017
-
Sep 22, 2017
-
Sep 21, 2017
-
Sep 16, 2017
-
Sep 16, 2017
-
Sep 16, 2017
-
Sep 13, 2017
-
Sep 10, 2017
-
Sep 9, 2017
-
Sep 9, 2017
-
Sep 9, 2017
-
Sep 5, 2017
-
Aug 29, 2017
-
Aug 27, 2017
-
Aug 25, 2017
-
Aug 23, 2017
-
Aug 15, 2017
-
Aug 13, 2017
-
Aug 12, 2017
-
Aug 10, 2017
-
Aug 9, 2017
-
Jul 30, 2017
-
Jul 29, 2017
-
Jul 27, 2017
-
Jul 25, 2017
-
Jul 21, 2017
-
Jul 19, 2017
-
Jul 16, 2017
-
Jul 15, 2017
-
Jul 11, 2017
-
Jul 8, 2017
-
Jul 7, 2017
-
Jul 5, 2017
-
Jul 3, 2017
-
Jul 2, 2017
-
Jul 1, 2017
-
Jul 1, 2017
-
Jul 1, 2017
-
Jun 25, 2017
-
Jun 23, 2017
-
Jun 23, 2017
-
Jun 23, 2017
-
Jun 21, 2017
-
Jun 19, 2017
-
Jun 17, 2017
-
Jun 17, 2017
-
Jun 13, 2017
-
Jun 12, 2017
-
Jun 5, 2017
-
Jun 4, 2017
-
Jun 3, 2017
-
Jun 1, 2017
-
May 21, 2017
-
May 20, 2017
-
May 14, 2017
-
May 13, 2017
-
May 7, 2017
-
May 6, 2017
-
May 6, 2017
-
Apr 30, 2017
-
Apr 29, 2017
-
Apr 29, 2017
-
Apr 26, 2017
-
Apr 26, 2017
-
Apr 24, 2017
-
Apr 19, 2017
-
Apr 15, 2017
-
Apr 11, 2017
-
Apr 9, 2017
-
Apr 4, 2017
-
Apr 3, 2017
-
Apr 2, 2017
-
Mar 26, 2017
-
Mar 25, 2017
-
Mar 24, 2017
-
Mar 23, 2017
-
Mar 22, 2017
-
Mar 20, 2017
-
Mar 16, 2017
-
Mar 11, 2017
-
Mar 5, 2017
-
Mar 4, 2017
-
Mar 1, 2017
-
Feb 26, 2017
-
Feb 19, 2017
-
Feb 12, 2017
-
Feb 12, 2017
-
Feb 11, 2017
-
Feb 9, 2017
-
Feb 7, 2017
-
Feb 2, 2017
-
Jan 31, 2017
-
Jan 30, 2017
-
Jan 29, 2017
-
Jan 28, 2017
-
Jan 28, 2017
-
Jan 25, 2017
-
Jan 23, 2017
-
Jan 18, 2017
-
Jan 17, 2017
-
Jan 11, 2017
-
Jan 1, 2017
-
Dec 27, 2016
-
Dec 27, 2016
-
Dec 22, 2016
-
Dec 22, 2016
-
Dec 18, 2016
-
Dec 18, 2016
-
Dec 16, 2016
-
Dec 11, 2016
-
Dec 2, 2016
-
Dec 2, 2016
-
Nov 15, 2016
-
Nov 13, 2016
-
Nov 12, 2016
-
Nov 10, 2016
-
Nov 9, 2016
-
Nov 8, 2016
-
Oct 29, 2016
-
Oct 23, 2016
-
Oct 21, 2016
-
Oct 18, 2016
-
Oct 15, 2016
-
Oct 11, 2016
-
Oct 9, 2016
-
Oct 2, 2016
-
Oct 1, 2016
-
Sep 27, 2016
-
Sep 25, 2016
-
Sep 25, 2016
-
Sep 24, 2016
-
Sep 24, 2016
-
Sep 21, 2016
-
Sep 21, 2016
-
Sep 21, 2016
-
Sep 21, 2016
-
Sep 21, 2016
-
Sep 21, 2016
-
Sep 11, 2016
-
Aug 26, 2016
-
Aug 23, 2016
-
Aug 20, 2016
-
Aug 15, 2016
-
Aug 8, 2016
-
Aug 2, 2016
-
Aug 2, 2016
-
Aug 1, 2016
-
Jul 26, 2016
-
Jul 26, 2016
-
Jul 21, 2016
-
Jul 21, 2016
-
Jul 13, 2016
-
Jul 12, 2016
-
Jul 11, 2016
-
Jul 11, 2016
-
Jul 8, 2016
-
Jun 30, 2016
-
Jun 29, 2016
-
Jun 28, 2016
-
Jun 16, 2016
-
Jun 6, 2016
-
Jun 6, 2016
-
Jun 6, 2016
-
Jun 6, 2016
-
Jun 6, 2016
-
Jun 5, 2016
-
May 28, 2016
-
May 28, 2016
-
May 23, 2016
-
May 23, 2016
-
May 23, 2016
-
May 23, 2016
-
May 23, 2016
-
May 18, 2016
-
May 17, 2016
-
May 12, 2016
-
May 10, 2016
-
May 5, 2016
-
May 3, 2016
-
Apr 28, 2016
-
Apr 27, 2016
-
Apr 21, 2016
-
Apr 15, 2016
-
Apr 13, 2016
-
Apr 9, 2016
-
Apr 8, 2016
-
Apr 4, 2016
-
Apr 4, 2016
-
Apr 3, 2016
-
Apr 3, 2016
-
Mar 31, 2016
-
Mar 31, 2016
-
Mar 29, 2016
-
Mar 23, 2016
-
Mar 23, 2016
-
Mar 18, 2016
-
Mar 18, 2016
-
Mar 18, 2016
-
Feb 29, 2016
-
Feb 29, 2016
-
Feb 26, 2016
-
Feb 24, 2016
-
Feb 21, 2016
-
Feb 19, 2016
-
Feb 16, 2016
-
Feb 16, 2016
-
Feb 14, 2016
-
Feb 7, 2016
-
Feb 3, 2016
-
Feb 2, 2016
-
Feb 2, 2016
-
Feb 2, 2016
-
Feb 2, 2016
-
Feb 2, 2016
-
Feb 2, 2016
-
Jan 29, 2016
-
Jan 25, 2016
-
Jan 25, 2016
-
Jan 25, 2016
-
Jan 25, 2016
-
Jan 19, 2016
-
Jan 19, 2016
-
Jan 19, 2016
-
Jan 15, 2016
-
Jan 12, 2016
-
Jan 11, 2016
-
Jan 11, 2016
-
Jan 11, 2016
-
Jan 8, 2016
-
Jan 8, 2016
-
Jan 7, 2016
-
Jan 6, 2016
-
Jan 5, 2016
-
Jan 4, 2016
-
Dec 31, 2015
-
Dec 30, 2015
-
Dec 23, 2015
-
Dec 16, 2015
-
Dec 14, 2015
-
Dec 14, 2015
-
Dec 8, 2015
-
Dec 6, 2015
-
Dec 2, 2015
-
Nov 29, 2015
-
Nov 29, 2015
-
Nov 23, 2015
-
Nov 23, 2015
-
Nov 17, 2015
-
Nov 15, 2015
-
Nov 10, 2015
-
Nov 9, 2015
-
Nov 6, 2015
-
Nov 3, 2015
-
Nov 2, 2015
-
Nov 2, 2015
-
Oct 31, 2015
-
Oct 29, 2015
-
Oct 24, 2015
-
Oct 20, 2015
-
Oct 19, 2015
-
Oct 13, 2015
-
Oct 13, 2015
-
Oct 13, 2015
-
Oct 9, 2015
-
Oct 9, 2015
-
Oct 4, 2015
-
Oct 4, 2015
-
Oct 3, 2015
-
Oct 2, 2015
-
Sep 30, 2015
-
Sep 27, 2015
-
Sep 24, 2015
-
Sep 14, 2015
-
Sep 13, 2015
-
Sep 8, 2015
-
Sep 8, 2015
-
Sep 6, 2015
-
Aug 24, 2015
-
Aug 23, 2015
-
Aug 22, 2015
-
Aug 21, 2015
-
Aug 20, 2015
-
Aug 12, 2015
-
Aug 11, 2015
-
Aug 10, 2015
-
Aug 4, 2015
-
Aug 4, 2015
-
Jul 30, 2015
-
Jul 28, 2015
-
Jul 28, 2015
-
Jul 22, 2015
-
Jul 13, 2015
-
Jul 9, 2015
-
Jul 1, 2015
-
Jun 29, 2015
-
Jun 25, 2015
-
Jun 23, 2015
-
Jun 22, 2015
-
Jun 14, 2015
-
Jun 7, 2015
-
May 27, 2015
-
Apr 29, 2015
-
Apr 22, 2015
-
Apr 22, 2015
-
Apr 12, 2015
-
Apr 6, 2015
-
Apr 5, 2015
-
Apr 1, 2015
-
Mar 30, 2015
-
Mar 29, 2015
-
Mar 29, 2015
-
Mar 21, 2015
-
Mar 17, 2015
-
Mar 16, 2015
-
Mar 16, 2015
-
Mar 12, 2015
-
Mar 12, 2015
-
Mar 12, 2015
-
Mar 8, 2015
-
Mar 8, 2015
-
Mar 4, 2015
-
Mar 2, 2015
-
Feb 26, 2015
-
Feb 22, 2015
-
Feb 19, 2015
-
Feb 16, 2015
-
Feb 16, 2015
-
Feb 15, 2015
-
Feb 9, 2015
-
Feb 4, 2015
-
Feb 4, 2015
-
Feb 1, 2015
-
Jan 28, 2015
-
Jan 28, 2015
-
Jan 4, 2015
-
Dec 30, 2014
-
Dec 30, 2014
-
Dec 14, 2014
-
Dec 7, 2014
-
Nov 11, 2014
-
Nov 2, 2014
-
Oct 28, 2014
-
Oct 28, 2014
-
Oct 19, 2014
-
Oct 14, 2014
-
Oct 12, 2014
-
Oct 12, 2014
-
Oct 4, 2014
-
Sep 19, 2014
-
Sep 16, 2014
-
Sep 15, 2014
-
Sep 15, 2014
-
Sep 8, 2014
-
Sep 4, 2014
-
Sep 2, 2014
-
Aug 25, 2014
-
Aug 11, 2014
-
Aug 11, 2014
-
Aug 4, 2014
-
Aug 4, 2014
-
Jul 28, 2014
-
Jul 25, 2014
-
Jul 23, 2014
-
Jul 22, 2014
-
Jul 19, 2014
-
Jul 14, 2014
-
Jul 13, 2014
-
Jul 11, 2014
-
Jul 7, 2014
-
Jun 22, 2014
-
Jun 19, 2014
-
Apr 7, 2014
-
Feb 10, 2014
-
Feb 9, 2014
-
Jan 27, 2014
-
Jan 27, 2014
-
Jan 27, 2014
-
Jan 13, 2014
-
Jan 12, 2014
-
Jan 6, 2014
-
Jan 5, 2014
-
Jan 5, 2014
-
Jan 5, 2014
-
Dec 13, 2013
-
Dec 8, 2013
-
Dec 1, 2013
-
Dec 1, 2013
-
Nov 29, 2013
-
Nov 22, 2013
-
Nov 17, 2013
-
Nov 11, 2013
-
Nov 10, 2013
-
Nov 12, 0209


This is the course website for IS445(AOG) in Fall 2020
Feel free to check out Spring 2020’s notebook that uses police shooting data for visualization if you are interestedin other mappable datasets.
Also, for Python, only a subset of libraries are supported. See ongoing list here.


I’ve heard much mysterious myth about how a mechanical keyboard can take your typing experience to another level. However, despite being a computer lover myself, I’ve spent most of my computing life on laptop thus found no need for another dedicated keyboard. Until lately I decided to upgrade from laptop to desktop PC.
I’ve spent plenty of time on researching every single piece of the rig component. Keyboard has been one of the most time-consuming part I’ve spent on. Following are the main factors to be considered when you are going for your first mechanical keyboard.
Keyboard size and layout
First, you have to decide which keyboard size and layout (from top to bottom in the picture):
- Full-layout/100% (with numpad and arrow/navigation keys)
- Tenkeyless/87% (no numpad, but with arrow/navigation keys)
- Compact/60% (no numpad or arrow/navigation keys)
Besides this three forms, there are some other form factors like 90%, 75%, 70%, or even 40% (refer to picture below) which I personally think is pretty ridiculous. These are mainly meant for the niche market.
May be you can recall how often you will need to use the numpad, function key row, or navigation keys. For a gamer, the numpad is not important. For data entry job, one cannot live without the function key row and navigation keys.
Mechanical switches
The next decision is which type of mechanical switch for the keyboard. Switches represent the soul for a mechanical keyboard and that spells the biggest difference from membrane keyboard. Under every key there is an individual switch responsible for single letter input, they often provide tactile feedback and audible “click-clack” sound during typing.
Main characteristics of switches:
- Tactile/Linear: Tactile switches provide additional tactile feedback as the key actuates, imagine there is a bump in the middle of the switch when pressing down. Linear switches have a simpler operation, they moving up and down without additional tactile feedback.
- Clicky/Non-clicky: Clicky switches add a louder “click” sound along with the tactile bump allowing a more noticeable feedback.
- Actuation force: Heavier switches require more actuation force to bottom out a key which makes the switches feel stiffer.
If you hadn’t owned any mechanical keyboard before, I’d suggest you to spend more time finding the best switch type that suits you the most. Test switcher is the best thing that will let you get a feel for what each switch type feels like and how they sound. Also, they are not expensive.
Amongst variety brands on the market, Cherry MX switch is the most popular option in most places. We are not going to discuss rare switches like Topre, Gateron, ALPS, or any other switches as they are less common.
Cherry MX Mechanical Key Switch comparison:
- Cherry MX Blue: Tactile and clicky. Loudest sound and distinct tactility provide most outstanding mechanical keyboard experience. Good for typing but caution to be used in shared working spaces.
- Cherry MX Brown: Tactile and non-clicky. Lighter version of Blue switch without the audible click. Good for the beginner.
- Cherry MX Black: Linear with high actuation force. Good for gaming with stronger typing force.
- Cherry MX Red: Linear with low actuation force. Good for gaming and typing while allowing rapid keystrokes.
Sources:
http://www.daskeyboard.com/blog/?page_id=1458#comparison
https://www.reddit.com/r/MechanicalKeyboards/wiki/buying_guide
http://thewirecutter.com
https://static1.squarespace.com
https://www.reddit.com/r/MechanicalKeyboards/comments/6jq43x/jtk_sliders_finally_came_in_leopold_fc980c_gmk/
This page is synchronized from the post: ‘How to choose your first mechanical keyboard’


| Caution | |
|---|---|
This is not an official Boost library, it is a library under construction, the code is fully functional and robust, but interfaces, library structure, and function names may be changed without notice. |
#include <boost/math/special_functions/bessel_j0.hpp> namespace boost { namespace math { template <typename T> T bessel_j0(T x) }} // namespaces
#include <boost/math/special_functions/bessel_y0.hpp> namespace boost { namespace math { template <typename T> T bessel_y0(T x) }} // namespaces
Bessel functions of order 0 are building blocks of Bessel functions of integer order. Moreover, they are commonly used and deserve to be implemented separately at their own right. Most numerical libraries include them as independent functions.
The function domains are J0(x): (-∞,
∞
), Y0(x): (0, ∞
).
| Note | |
|---|---|
J0(x) is even function. |
The algorithms consist of minimax rational approximations on root-bracketing intervals for small |x| and Hankel asymptotic expansion for large |x|. The coefficients of them are from [9] and [11] respectively.
The test driver calculates relative errors and the following table lists some typical values.
| Function | float | double | long double |
|---|---|---|---|
bessel_j0(x) |
~ 10-8 , 10-7 | ~ 10-16 , 10-15 | ~ 10-20 , 10-19 |
bessel_y0(x) |
~ 10-8 , 10-7 | ~ 10-16 | ~ 10-17 |
When |x| becomes large ( > 104 ), the relative error grows rapidly. |x| = 105 can have relative error 4 or 5 magnitudes higher than that of |x| = 10. Fortunately, this is where the function value approaches zero, so the absolute error is actually quite small.
| Caution | |
|---|---|
This is not an official Boost library, it is a library under construction, the code is fully functional and robust, but interfaces, library structure, and function names may be changed without notice. |
#include <boost/math/special_functions/bessel_j1.hpp> namespace boost { namespace math { template <typename T> T bessel_j1(T x) }} // namespaces
#include <boost/math/special_functions/bessel_y1.hpp> namespace boost { namespace math { template <typename T> T bessel_y1(T x) }} // namespaces
Bessel functions of order 1 are building blocks of Bessel functions of integer order. Moreover, they are commonly used and deserve to be implemented separately at their own right. Most numerical libraries include them as independent functions.
The function domains are J1(x): (-∞,
∞
), Y1(x): (0, ∞
).
| Note | |
|---|---|
J1(x) is odd function. |
The algorithms consist of minimax rational approximations on root-bracketing intervals for small |x| and Hankel asymptotic expansion for large |x|. The coefficients of them are from [9] and [11] respectively.
The test driver calculates relative errors and the following table lists some typical values.
| Function | float | double | long double |
|---|---|---|---|
bessel_j1(x) |
~ 10-8 , 10-7 | ~ 10-16 , 10-15 | ~ 10-20 , 10-19 |
bessel_y1(x) |
~ 10-8 , 10-7 | ~ 10-16 , 10-15 | ~ 10-18 , 10-17 |
When |x| becomes large ( > 104 ), the relative error grows rapidly. |x| = 105 can have relative error 4 or 5 magnitudes higher than that of |x| = 10. Fortunately, this is where the function value approaches zero, so the absolute error is actually quite small.
| Caution | |
|---|---|
This is not an official Boost library, it is a library under construction, the code is fully functional and robust, but interfaces, library structure, and function names may be changed without notice. |
#include <boost/math/special_functions/bessel_jn.hpp> namespace boost { namespace math { template <typename T> T bessel_jn(T x) }} // namespaces
#include <boost/math/special_functions/bessel_yn.hpp> namespace boost { namespace math { template <typename T> T bessel_yn(T x) }} // namespaces
Bessel functions of order n are calculated from Bessel functions of order 0 and Bessel functions of order 1, with the help of recurrence relations. Although n is nonnegative, our discussions here can be easily extended to Bessel functions of negative integer order using reflection formulas.
The function domains are Jn(x): (-∞,
∞
), Yn(x): (0, ∞
).
| Note | |
|---|---|
Jn(x) is even function when n is even and odd function when n is odd. |
The forward recursion itself is stable for n < |x| and unstable for n >= |x|. Yn(x) is the dominant solution of the recurrence relation, thus the forward recursion is always OK for it. However, Jn(x) is the minimal solution, so in unstable regions, Miller's algorithm [1] [2] and backward recursion must be used.
The test driver calculates relative errors and the following table lists some typical values.
| Function | float | double | long double |
|---|---|---|---|
bessel_jn(x) |
~ 10-8 , 10-7 | ~ 10-16 , 10-15 | ~ 10-20 , 10-19 |
bessel_yn(x) |
~ 10-7 | ~ 10-16 , 10-15 | ~ 10-19 , 10-17 |
When |x| becomes large ( > 104 ), the relative error grows rapidly. |x| = 105 can have relative error 4 magnitudes higher than that of |x| = 10. Fortunately, this is where the function value approaches zero, so the absolute error is actually quite small. n does not seem to have a large impact on accuracy as |x| does.
| Copyright © 2006 Xiaogang Zhang |


{# index.html: defines 'training' or 'analysis' session, prompts users to provide an upload file or URL to an XML (dataset), then defines which attributes within the dataset previously defined, to use for the SVM analysis. After the configurations and attributes have been defined, it is sent to 'logic_loader.py' for further analysis. #}
{# specify unicode (utf-8) encoding for html document #} {# use latest (IE) rendering engine, for IE #} {# set the width of the page to follow the screen-width of the device, with no zooming applied (1:1 scale) #}


§431:9-237 Duration of suspension. Every order suspending any license shall specify the period during which suspension will be effective. [L 1987, c 347, pt of §2; am L 2005, c 132, §3]


一页纸学会html5+css ,解说文字会以这种格式出现, 右键打开源文件,与本页对照来看
各种doctype类型
Heading [h1] ~ [h6]标签
水平线[hr]
段落[p]，每个段落会自动另起行,[b]粗体,[i]斜体,[br]换行
A paragraph consists of one or more sentences that form a self-contained u使得发达省份nit of discourse. The start of a paragraph is indicated by a new line.
Text is easier to understand when it 中间有连续空格会被视为一个空格
is split up into units of text. For example, [b]粗体a book may have chapters. [i]斜体斜体Chapters can have subheadings. Under each heading there will换行得自己加[br]
be one or more paragraphs.
上标[sup] , 下标[sub]
On the 4th of September you will learn about E=MC2.
The amount of CO2 in the atmosphere grew by 2ppm in 20091.
@语意semantic markup
[Strong] 加强语气，表示此词非常重要 ，浏览器默认会显示为黑体
Beware: Pickpockets operate in this area.
This toy has many small pieces and is not suitable for children under five years old.
[em] indicates emphasis that subtly changes the meaning of a sentence.默认显示为斜体
I think Ivy was the first.
I think Ivy was the first.
I think Ivy was the first.
引用[blockquote]
Did you ever stop to think, and forget to start again?
短引用[q]，默认会加引号，ie不支持
As A.A. Milne said, Some people talk to animals. Not many listen though. That's the problem.
缩写词，鼠标移上会显式全文
Prof Stephen Hawking is a theoretical physicist and cosmologist.

插入删除,下划线
It was the worst best idea she had ever had.
不准确的，但没删除
Laptop computer:
Was $995
Now only $375
[ol]old列表 可用css属性 liststyle-type
无序列表 可用css属性 liststyle-type
定义列表
嵌套列表
[a]链接
target属性,新窗口打开
Internet Movie Database (opens in new window)
email link
Email Jonhref可以指定#id,在本页跳转到id
A shot in which the subject is photographed by an encircling or moving camera
A brief, intervening film scene or sequence, not specifically tied to the plot, that appears within a film
A speech, preface, introduction, or brief scene preceding the main action or plot of a film; contrast to epilogue
插入图片,指定大小
图片与文字混排
图片在[p]之上
There are around 10,000 living species of birds that inhabit different ecosystems from the Arctic to the Antarctic. Many species undertake long distance annual migrations, and many more perform shorter irregular journeys.
图片在[p]内第一行
There are around 10,000 living species of birds that inhabit different ecosystems from the Arctic to the Antarctic. Many species undertake long distance annual migrations, and many more perform shorter irregular journeys.
图片在[p]内文字中间
There are around 10,000 living species of birds that inhabit different ecosystems from the Arctic to the Antarctic. Many species undertake long distance annual migrations, and many more perform shorter irregular journeys.
image的[align]属性 left right，左右对齐(html5已经取消，应该用css控制)
There are around 10,000 living species of birds that inhabit different ecosystems from the Arctic to the Antarctic. Many species undertake long distance annual migrations, and many more perform shorter irregular journeys.
There are around 10,000 living species of birds that inhabit different ecosystems from the Arctic to the Antarctic. Many species undertake long distance annual migrations, and many more perform shorter irregular journeys. Many species undertake long distance annual migrations, and many more perform shorter irregular journeys. Many species undertake long distance annual migrations, and many more perform shorter irregular journeys. Many species undertake long distance annual migrations, and many more perform shorter irregular journeys.
image的[align]属性 top bottom，左右对齐(html5已经取消，应该用css控制)
align top 与第一行对齐
There are around 10,000 living species of birds that inhabit different ecosystems from the Arctic to the Antarctic. Many species undertake long distance annual migrations, and many more perform shorter irregular journeys.
align middle 中间与第一行对齐
There are around 10,000 living species of birds that inhabit different ecosystems from the Arctic to the Antarctic. Many species undertake long distance annual migrations, and many more perform shorter irregular journeys.
align bottom 底部与第一行对齐
There are around 10,000 living species of birds that inhabit different ecosystems from the Arctic to the Antarctic. Many species undertake long distance annual migrations, and many more perform shorter irregular journeys.
小知识
Computer screens are made up of dots known as pixels. Images used on the web are also made up of tiny dots. Resolution refers to the number of dots per inch, and most computer screens only show web pages at 72 pixels per inch. So saving images at a higher resolution results in images that are larger than necessary and take longer to download.
颜色多的照片用jpeg，颜色少的图片用png或gif
[figure] 给图片加解释文字
表格: tr是行，td是列 (为了看清楚加了样式)
| 15 | 15 | 30 |
| 45 | 60 | 45 |
| 60 | 90 | 90 |
th加header (为了看清楚加了样式)
| Saturday | Sunday | |
|---|---|---|
| Tickets sold: | 120 | 135 |
| Total sales: | $600 | $675 |
colspan横跨几列 (为了看清楚加了样式)
| 9am | 10am | 11am | 12am | |
|---|---|---|---|---|
| Monday | Geography | Math | Art | |
| Tuesday | Gym | Home Ec |
rowspan纵跨几行 (为了看清楚加了样式)
| ABC | BBC | CNN | |
|---|---|---|---|
| 6pm - 7pm | Movie | Comedy | News |
| 7pm - 8pm | Sport | Current Affairs |
Long Table [thead] [tfoot] (为了看清楚加了样式)
| Date | Income | Expenditure |
|---|---|---|
| 1st January | 250 | 36 |
| 2nd January | 285 | 48 |
| 3rd January | 260 | 42 |
| 4th January | 290 | 38 |
| 5th January | 310 | 115 |
| 6th January | 168 | 14 |
| 7th January | 226 | 20 |
| 8th January | 253 | 37 |
| 9th January | 294 | 33 |
| 10th January | 216 | 46 |
| 11th January | 244 | 29 |
| 12th January | 297 | 32 |
| 13th January | 328 | 86 |
| 14th January | 215 | 38 |
| 15th January | 254 | 30 |
| 16th January | 256 | 27 |
| 17th January | 311 | 68 |
| 18th January | 212 | 39 |
| 19th January | 234 | 36 |
| 20th January | 221 | 43 |
| 21st January | 259 | 38 |
| 22nd January | 246 | 31 |
| 23rd January | 248 | 17 |
| 24th January | 229 | 45 |
| 25th January | 263 | 34 |
| 26th January | 258 | 41 |
| 27th January | 283 | 22 |
| 28th January | 256 | 30 |
| 29th January | 278 | 47 |
| 30th January | 251 | 15 |
| 31st January | 129 | 64 |
| 7824 | 1241 |
过时的属性 WidTh & spacing 建议用css代替 (为了看清楚加了样式)
| Withdrawn | Credit | Balance | |
|---|---|---|---|
| January | 250.00 | 660.50 | 410.50 |
| February | 135.55 | 895.20 | 1170.15 |
border & background，过时属性
| Withdrawn | Credit | Balance | |
|---|---|---|---|
| January | 250.00 | 660.50 | 410.50 |
| February | 135.55 | 895.20 | 1170.15 |
form提交表单
span和div，是inline和block的典型代表
Anish Kapoor won the Turner Prize in 1991 and exhibited at the Tate Modern gallery in London in 2003.
iframe
常见转意符号
视频 video
多种格式支持
插入音频 audio.
14.0 VERY ALKALINE
13.0
12.0
11.0
10.0
9.0
8.0
7.0 NEUTRAL
6.0
5.0
4.0
3.0
2.0
1.0
0.0 VERY ACID
字体部分
by Ivy Duckett
The briard, or berger de brie, is a large breed of dog traditionally used as a herder and guardian of sheep.
The briard, which is believed to have originated in France, has been bred for centuries to herd and to protect sheep. The breed was used by the French Army as sentries, messengers and to search for wounded soldiers because of its fine sense of hearing. Briards were used in the First World War almost to the point of extinction. Currently the population of briards is slowly recovering. Charlemagne, Napoleon, Thomas Jefferson and Lafayette all owned briards. 中文这里显示什么样呢?有衬线字体,宋体行吗?
浏览器默认16像素, 12px = 75% = 0.75em
css中控制字体的大小
css中控制字体的大小
css中控制字体的大小
宽高 width, height
The Moog company pioneered the commercial manufacture of modular voltage-controlled analog synthesizer systems in the early 1950s.
表格的最小最大宽度 min-width max-width
| Photo | Description | Price |
|---|---|---|
| The Rhodes piano is an electro-mechanical piano, invented by Harold Rhodes during the fifties and later manufactured in a number of models, first in collaboration with Fender and after 1965 by CBS. It employs a piano-like keyboard with hammers that hit small metal tines, amplified by electromagnetic pickups. | $1400 | |
| The Wurlitzer electric piano is an electro-mechanical piano, created by the Rudolph Wurlitzer Company of Mississippi. The Wurlitzer company itself never called the instrument an "electric piano", instead inventing the phrase "Electronic Piano" and using this as a trademark throughout the production of the instrument. It employs a piano-like keyboard with hammers that hit small metal tines, amplified by electromagnetic pickups. | $1600 | |
| A Clavinet is an electronically amplified clavichord manufactured by the Hohner company. Each key uses a rubber tip to perform a hammer on a string. Its distinctive bright staccato sound is often compared to that of an electric guitar. Various models were produced over the years, including the models I, II, L, C, D6, and E7. | $1200 |
最小最大高度 min-height max-height 内容超过指定的最大高度,会冒出来,这时可以添加overflow属性控制超出部分隐藏还是使用滚动条
The Fender Mustang was introduced in 1964 as the basis of a major redesign of Fender's student models then consisting of the Musicmaster and Duo-Sonic. It was originally popular in sixties surf music and attained cult status in the 1990s largely as a result of its use by a number of alternative rock bands.
The Fender Stratocaster or "Strat" is one of the most popular electric guitars of all time, and its design has been copied by many guitar makers. It was designed by Leo Fender, George Fullerton and Fredie Tavares in 1954.
The Gibson Les Paul is a solid body electric guitar that was first sold in 1952. The Les Paul was designed by Ted McCarty in collaboration with popular guitarist Les Paul, whom Gibson enlisted to endorse the new model. It is one of the most well-known electric guitar types in the world.
border margin padding,都是非继承属性
Moog synthesisers were created by Dr. Robert Moog under the company name Moog Music. Popular models include the Moog Modular, Minimoog, Micromoog, Moog Rogue, and Moog Source.
ARP Instruments Inc. was set up by Alan Peralman, and was the main competitor for Moog during the 1970'x. Popular models include the Arp 2600 and the ARP Odyssey.
Sequential Circuits Inc was founded by Dave Smith, and the company was pivotal in the creation of MIDI. Famous models include the Prophet 5, Prophet 600, and Pro-One.
border: width style color
Wurlitzer Electric Piano
Wurlitzer Electric Piano
Wurlitzer Electric Piano
Wurlitzer Electric Piano
Wurlitzer Electric Piano
Wurlitzer Electric Piano
Wurlitzer Electric Piano
Wurlitzer Electric Piano
居中对齐
Analog synthesizers are often said to have a "warmer" sound than their digital counterparts.
display属性 ,inline 与 block互转
圆角, 阴影
Pet Sounds featured a number of unconventional instruments such as bicycle bells, buzzing organs, harpsichords, flutes, Electro-Theremin, dog whistles, trains, Hawaiian-sounding string instruments, Coca-Cola cans and barking dogs.
Layout
"Life is like riding a bicycle. To keep your balance you must keep moving." - Albert Einstein
In 1817 Baron von Drais invented a walking machine that would help him get around the royal gardens faster: two same-size in-line wheels, the front one steerable, mounted in a frame upon which you straddled. The device was propelled by pushing your feet against the ground, thus rolling yourself and the device forward in a sort of gliding walk.
The machine became known as the Draisienne (or "hobby horse"). It was made entirely of wood. This enjoyed a short lived popularity as a fad, not being practical for transportation in any other place than a well maintained pathway such as in a park or garden.
The next appearance of a two-wheeled riding machine was in 1865, when pedals were applied directly to the front wheel. This machine was known as the velocipede (meaning "fast foot") as well as the "bone shaker," since it's wooden structure combined with the cobblestone roads of the day made for an extremely uncomfortable ride. They also became a fad and indoor riding academies, similar to roller rinks, could be found in large cities.
用float属性排版
In 1817 Baron von Drais invented a walking machine that would help him get around the royal gardens faster.
The device know as the Draisienne (or "hobby horse") was made of wood, and propelled by pushing your feet on the ground in a gliding movement.
It was not seen as suitable for any place other than a well maintained pathway.
In 1865, the velocipede (meaning "fast foot") attached pedals to the front wheel, but its wooden structure made it extremely uncomfortable.
In 1870 the first all-metal machine appeared. The pedals were attached directly to the front wheel.
Solid rubber tires and the long spokes of the large front wheel provided a much smoother ride than its predecessor.
典型的3列网页实现
In 1817 Baron von Drais invented a walking machine that would help him get around the royal gardens faster: two same-size in-line wheels, the front one steerable, mounted in a frame upon which you straddled. The device was propelled by pushing your feet against the ground, thus rolling yourself and the device forward in a sort of gliding walk.
The machine became known as the Draisienne (or "hobby horse"). It was made entirely of wood. This enjoyed a short lived popularity as a fad, not being practical for transportation in any other place than a well maintained pathway such as in a park or garden.
The next appearance of a two-wheeled riding machine was in 1865, when pedals were applied directly to the front wheel. This machine was known as the velocipede (meaning "fast foot") as well as the "bone shaker," since its wooden structure combined with the cobblestone roads of the day made for an extremely uncomfortable ride. They also became a fad and indoor riding academies, similar to roller rinks, could be found in large cities.
In 1870 the first all-metal machine appeared. (Prior to this, metallurgy was not advanced enough to provide metal which was strong enough to make small, light parts out of.) The pedals were attached directly to the front wheel with no freewheeling mechanism. Solid rubber tires and the long spokes of the large front wheel provided a much smoother ride than its predecessor.
liquid layout 流体排版
Feature
Column One
Column Two
Column Three
图片 中左右对齐
Magnolia is a large genus that contains over 200 flowering plant species. It is named after French botanist Pierre Magnol and, having evolved before bees appeared, the flowers were developed to encourage pollination by beetle.
Magnolia is a large genus that contains over 200 flowering plant species. It is named after French botanist Pierre Magnol and, having evolved before bees appeared, the flowers were developed to encourage pollination by beetle.
Some magnolias, such as Magnolia stellata and Magnolia soulangeana, flower quite early in the spring before the leaves open. Others flower in late spring or early summer, such as Magnolia grandiflora.
背景图
Magnolia grandiflora, commonly known as the Southern magnolia or bull bay, is a tree of the family Magnoliaceae native to the southeastern United States, from coastal Virginia south to central Florida, and west to eastern Texas and Oklahoma.  Widely cultivated around the world, over a hundred cultivars have been bred and marketed commercially. The timber is hard and heavy, and has been used commercially to make furniture, pallets, and veneer.
背景图 repeat
background-repeat: repeat-x


Here is a first paragraph of text.nverngjkgnkjtngktnkner kngknfnregneignierngiengletignuitnijaetngjirgnit;engnnorignaerigneirngitnguin fvfvbtgregt
Here is a second paragraph of text.
Here is a second paragraph of text.
function testFunction( strText ){ alert (strText) }
An example of this technique appears in the movie "12 Angry Men."
This is underlined paragraph
Here is a third paragraph of text.
This is left aligned
This is center aligned
This is right aligned
Some text...
Some text...
The following word uses a bold typeface.
The following word uses a bold typeface. < !-- Document Header Ends -->
| Row 1, Column 1 | Row 1, Column 2 |
| Row 2, Column 1 | Row 2, Column 2 |
Hello, World!


Interruption card
An alert that interrupts the user flow with important information and must be acknowledged before continuing.
How to renew your passport online
-
1
Get a digital passport photo
-
2
Apply online
-
3
Pay for your new passport online
-
4
Send us your old passport
I need help with online services
SASS
// Pattern: flash cards
// Problem: interupt the user with important information
.circle-white {
color: #005ea5;
background: #fff;
float: left;
margin-right: 10px;
}
.flash-card {
margin-top: 1em;
padding: 30px;
background: $link-colour;
color: $page-colour;
p {
margin-left: 32px;
}
h1 {
&:first-of-type {
margin-top: 0 !important;
}
}
h2 {
margin: 0.7em 0px 0.3em 0px !important;
}
a {
color: $page-colour;
&:visited, &:hover, &:active {
color: $page-colour; }
}
details {
// margin-bottom: 1em;
summary {
color: $page-colour;
}
.panel {
border-left-color: $page-colour;
}
}
.button {
color: $link-colour;
background-color: $page-colour;
// Link styles
a {
color: $link-colour;
}
&:visited {
color: $link-visited-colour;
}
&:hover {
color: $link-hover-colour;
}
&:active {
color: $link-active-colour;
}
}
}
@media (min-width: 769px) {
.flash-card {
margin-top: 1.25em;
padding: 35px 50px;
}
}
HTML

How to renew your passport online

1

Get a digital passport photo

2

Apply online

3

Pay for your new passport online

4

Send us your old passport

<input class="button button-white" type="submit" value="Continue">

I need help with online services

You can call the Passport Adviceline and ask for help

Telephone: 0300 330 0901

Textphone: 0300 330 0808

Monday to Friday, 8:00am to 8:00pm

Weekends and public holidays, 9:00am to 5:30pm

Find out about call charges

Guidance
It can be used:
- to draw a users attention to important information specific to that point in their journey
- allow users to acknowledge something before continuing
- if important information is styled normally and users are missing it use this pattern - its unexpected so helps to bring attention to essential information
It should not be used:
- for form elements
- for large amounts of content
- the effectiveness of the pattern is based on its unexpected appearance so should be used sparingly
The interuption should:
- include a heading
- have large body text - a minimum of 24px
- use a “Continue” button to advance to the next card or page
- have one thing per card - if the user needs to do more than one thing, use extra cards
User research
This pattern has been used on the passport renewals service built by the Home Office.
Interrupting users’ flow in this way can increase their understanding and retention of important information.
They have seen evidence that the contrast levels of interuption cards help dyslexic users.


WITNESS LIST
Business & Commerce
August 28, 2018 9:00 AM
Interim Charge: Licensing and Fees
ON:
Withers, Russell (also providing written testimony) (TCCRI), Austin, TX
Providing written testimony:
ON:
Francis, Brian Executive directror (Texas department of licensing and regulation), Austin,
TX
Interim Charge: Occupational Licensing
ON:
Conte, Gregory Manager, Data Analysis & Transparency (Texas Comptroller of Public
Accounts), Austin, TX
Francis, Brian Executive directror (also providing written testimony) (Texas department of
licensing and regulation), Austin, TX
Ginn, Vance Senior Economist (also providing written testimony) (Texas Public Policy
Foundation), Austin, TX
Meyer, Jared (also providing written testimony) (Self; Foundation for Government
Accountability), Naples, FL
Mitchell, Matthew Senior Research Fellow (also providing written testimony) (Self), Va,
VA
Panju, Arif Managing Attorney (also providing written testimony) (Self; Institute for
Justice), Austin, TX
Registering, but not testifying:
ON:
King, Courtney Senior Data Analyst (Texas Comptroller of Public Accounts), Austin, TX
Interim Charge: Social Media Access
ON:
Beaver, Lindsay Legislative Counsel (also providing written testimony) (Uniform Law
Commission), Chicago, IL
Gonzalez, Jarod Law Professor (Self), Lubbock, TX
Helge, Terri Lynn Professor of Law (also providing written testimony) (Self), Fort Worth,
TX
Wolff III, Harry (also providing written testimony) (Self), San Antonio, TX
Social Media & Employment
FOR:
Durst, Phillip Lawyer (Self), Austin, TX
ON:
Golden, Michael Attorney (also providing written testimony) (Self), Austin, TX


What Music Can Do
- Evoke emotions
- Influence moods
Current Product
- YouTube Music, Spotify
- Recommendor System
- Based on browsing history
- Rank tracks
Limitation
- Can't detact user emotions
- Only digs deeper
My Idea
- Music recommendor/Browser
- User descriptive paragraph
- Match songs
My Workflow
My Database
- Get 1000 songs fearures
- Run lyrics analysis
- Add results to features
Feature Format
Backend
- Flask
- Easy, lightweight
- Just the feature I need
Music Model
- Summarize user input
- Get sentiment
Tools
- PyTextRank
- Vocabulary and sentence ranking
- Scikit-learn sentiment analysis
Frontend
- Flask
- Minimal Viable Product (MVP)
Schedule
- Prototype (Nov, Dec)
- Proposal for IRB (Feb)
- User questionnaire (Feb)
- Report (Jan, Feb)
- Finalize (Mar)


A self-taught software developer, soaking up as much knowledge and practice as I can in an attempt to perfect my craft. I am team oriented and get along with others when working in a group setting. In addition to writing code I enjoy writing (technical and to a general audience) and music (I am an indie/alternative rock freak 😊)
JavaScript, TypeScript, Python, Golang
NodeJS (Express and AdonisJS), NestJS, ReactJS
PostgreSQL, MYSQL, MongoDB
Docker, HTML5, Redis, Mocha, Jest
A photo sharing application
Utilized: Express, React, MongoDB, TravisCI, Swagger, Jest, Docker, Cloudinary
A tour management website built with Express and Pug
Utilized: Express, MongoDB, Pug
A full-stack to-do list with authentication
Utilized Typescript(NestJS), React, AWS (S3, EC2)
Or want to get in touch?


---
layout: post
title: Alec's measure of Mac adoption
tags:
- Business
- Mac
status: publish
type: post
published: true
meta: {}
---
Apple: “Let me show you my sales figures. My sales figures, let me show you them”
2.164M Macs sold
Whenever I spend time on the business lounge at airports (which is far too often), I now idly look around to see how many Macbooks I can see. For those who have never trod in such hallowed halls, all the suites in the business lounge are iether on their mobile or using their laptop (or often both).
99% of the latops are running Windows, there are 'never' any Linux system (although that'a hard to tell) and a small smattering of Mac's (from 0-3). The zero to three figure has occured on my last 5 visits and the number always gone one way: 0 to 3. Too early to say that's a trend, but I'll keep looking...
Powered by ScribeFire.


Top page
Book Shelf
Terms of Searching:
Nothing (All books are displayed)
Keyword:
Search
User Name:
Mark up
Page Down
1
Page Up


{% if likes_same_sport == True %}
soccer!
soccer is the best because you can play it in so many places
My favorite players are are:
Players
{% for player in players %}
{{player}}
{% endfor %}
{% else %}
soccer!
soccer is the best because you can play it in so many places
{% endif %}


org.biopax.paxtools.util
Class SetEquivalenceChecker
java.lang.Object
org.biopax.paxtools.util.SetEquivalenceChecker
public class SetEquivalenceChecker
- extends java.lang.Object
This class performs set operations based on equivalence.
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
SetEquivalenceChecker
public SetEquivalenceChecker()
isEquivalent
public static <T extends BioPAXElement> boolean isEquivalent(java.util.Set<? extends T> set1,
java.util.Set<? extends T> set2)
- Type Parameters:
T
- Both sets should be of type that extends from T.- Parameters:
set1
- First set to be checked.set2
- Second set to be checked
- Returns:
- true iff both sets are of equal size and all objects in set1 has an equivalent object in set2.
containsEquivalent
public static boolean containsEquivalent(java.util.Set<? extends BioPAXElement> set,
BioPAXElement query)
- Parameters:
set
- Set to test if it contains an element equivalent to queryquery
- BPE to look for equivalents in set
- Returns:
- true iff there is an element of set that is equivalent to query.
findEquivalentIntersection
public static <T extends BioPAXElement> java.util.Set<T> findEquivalentIntersection(java.util.Set<? extends T> set1,
java.util.Set<? extends T> set2)
- Type Parameters:
T
- Both sets should be of type that extends from T.- Parameters:
set1
- First set to be checked.set2
- Second set to be checked
- Returns:
- elements of set1 that has an equivalent element in set2
hasEquivalentIntersection
public static <T extends BioPAXElement> boolean hasEquivalentIntersection(java.util.Set<? extends T> set1,
java.util.Set<? extends T> set2)
- Type Parameters:
T
- Both sets should be of type that extends from T.- Parameters:
set1
- First set to be checked.set2
- Second set to be checked
- Returns:
- true iff there are at least one equivalent element between set1 and set2.


Configuration files
All of the site configuration is now controlled by files in the content\settings folder:
- settings.ini - Controls the features and customization of the site
- locations.ini - Details on all of the test locations
- intro.ini - Introductory paragraph on the main page
New Install
Single machine configuration (web server and testers running on the same
machine):
- You need an XP or 2003 Server (XP is the most supported since that’s what I
do most dev on)
- URLBlast.exe needs to be added to the startup folder (or for testing, just manually started) –
It is in the “Web Site” folder root
- As far as software goes, you need Apache 2.2+ with PHP 5 installed and mod_rewrite enabled
- There is a sample httpd.conf file for Apache in the Web Site folder
- Disk space depends on how much history and volume you’re expecting but the requirements are pretty light – around 250 KB per test run so around 4000 per gig
- Default OS accounts will get created the first time urlblast is run
(user1, user2, etc). If you want to override the account names or
passwords edit them in urlblast.ini
- The main account you want to use for running the controller software needs to be an admin account and configured to auto login (I use TweakUI to set up the auto login). Sorry, can’t run locked because the desktop needs to be visible to be able to capture the screen shots). If your remote system isn’t in a secure location and you don’t trust the remote hands and eyes this is the scariest part since the system will be logged in as an admin all the time (at the console).
Multiple machine configuration (split web server from testers):
Web Server:
- The web server can be running any OS that supports Apache 2.2+ and PHP 5
(Linux and Windows have been verified to work)
- You need Apache 2.2 (or later) installed with mod_rewrite enabled
- You need PHP 5 installed and configured to work with Apache and you need
the gd2 plugin enabled
- There is a sample httpd.conf file for Apache in the Web Site folder
- Disk space depends on how much history and volume you’re expecting but the requirements are pretty light – around 250 KB per test run so around 4000 per gig
Test Machine:
- You need an XP or 2003 Server (XP is the most supported since that’s what I
do most dev on)
- Copy urlblast.exe, urlblast.ini and pagetest.dll to a folder on the test
machine
- URLBlast.exe needs to be added to the startup folder (or for testing, just manually started) –
It is in the “Web Site” folder root
- Default OS accounts will get created the first time urlblast is run
(user1, user2, etc). If you want to override the account names or
passwords edit them in urlblast.ini
- The main account you want to use for running the controller software needs to be an admin account and configured to auto login (I use TweakUI to set up the auto login). Sorry, can’t run locked because the desktop needs to be visible to be able to capture the screen shots). If your remote system isn’t in a secure location and you don’t trust the remote hands and eyes this is the scariest part since the system will be logged in as an admin all the time (at the console).
Upgrade Existing Install
To upgrade an existing install, copy over the whole content folder except for
the settings directory. You should also update your pagetest.dll and
urlblast.exe binaries.
Jobsync has been replaced by a doing http posts directly to the web server
for transmitting jobs around. You'll want to look at the new urlblast.ini
settings and copy the relevant ones over to your system (or overwrite your
version and modify the new one).


ACCU
Ed
Sykes – Mocking in C++
Once again we returned to the location where I first experienced an ACCU London talk – the offices of 7 City at Moorgate. The July meet-up saw us listening to Ed Sykes talk about Mocking in C++. As usual there was a good turnout with a few new faces to try and recruit in the bar opposite afterwards.
Ed started with a straw poll or two to try and gauge the audience and for once I fell into the minority as most of them were actively doing C++ and doing some form of modern unit testing. This allowed him to cut to the chase and get on with looking into the two mocking frameworks that he was using in his current position – MockItNow and Hippo Mocks. He acknowledged later that other frameworks had matured in the meantime, but that these two were the ones his team had focused on at the time they had started investigating the use of a 3rd party mocking framework for use with their C++ code-base.
First up was MockItNow which he clearly saw as a solution most suitable for those targeting the Microsoft compiler and trying to use mocking with a legacy code-base. C++ programmers have a natural tendency to want to look under the hood and fortunately he answered the obvious nagging question many of us immediately had, which was “How does it work”? Once this minor distraction was resolved we could get on with just enjoying how the tests were expressed and what features it provided. His examples were simple enough to touch on the salient points, yet still managed to show it in action by actually running a set of tests with VS2010.
The second offering Ed explored was Hippo Mocks, which is a newer and more actively developed framework. Whereas MockItNow provides good support for legacy code-bases where concrete classes may be the norm, Hippo Mocks targets a more modern style of C++ code where the use of Interfaces are more prevalent to separate concerns. The same examples were carried over from the previous discussion to provide continuity, but with some minor changes required to allow the mocked type to be passed via the constructor. Whereas the MockItNow examples had a dash of macro magic the Hippo Mocks ones seemed a little more conventional.
It’s a brave presenter that does live coding during a talk but Ed rose to the challenge to try and answer some of the questions from the audience by adapting his existing tests. Hippo Mocks showed its header-only, template-based nature nicely by spewing some unpleasant compiler errors as Ed tried to rework the tests but the speculative questions were never really going to be answered easily with the small amount of time left. Still, we did get to look inside this implementation too and Ed explained that his team had extended it relatively easily.
 Ed confidently showed us that C++ is finally catching up, even if some of the tools are platform specific or not quite as flexible as those available for its curly-brace cousins.
Chris Oldwood
09 August 2011
Bio
Chris started out as a bedroom coder in the 80s, writing assembler on 8-bit micros. These days it’s C++ and C# on Windows in big plush corporate offices. He is also the commentator for the Godmanchester Gala Day Duck Race and can be contacted via gort@cix.co.uk.


Documents Details
Address Proof
*
Bank Statement
*
ItrFile
*
Photo
*
PostDatedCheck
*
Signature
*
Thumb
*
BankCheck
*
salarySlip
*
Adharcard
*
PanCard
*
Previous Loan Statement
*
*Required fields
Upload
Reset


Sign In
.
Home
Contact
Registration Form
First Name*
Last Name*
Gender
Male
Female
E-Mail*
Mobile NO #
Address
City
State
------------Select State------------
Andaman and Nicobar Islands
Andhra Pradesh
Arunachal Pradesh
Assam
Bihar
Chandigarh
Chhattisgarh
Dadra and Nagar Haveli
Daman and Diu
Delhi
Goa
Gujarat
Haryana
Himachal Pradesh
Jammu and Kashmir
Jharkhand
Karnataka
Kerala
Lakshadweep
Madhya Pradesh
Maharashtra
Manipur
Meghalaya
Mizoram
Nagaland
Orissa
Pondicherry
Punjab
Rajasthan
Sikkim
Tamil Nadu
Tripura
Uttaranchal
Uttar Pradesh
West Bengal
Pin Code
Any Question/Suggetion
Reset


A | |
| ABI [Bap.Std.Target] | |
| ABI [Bap.Std.AMD64] | |
| ABI [Bap.Std.IA32] | |
| ABI [Bap.Std.ARM] | |
| AMD64 [Bap.Std] | x86-64 architecture
|
| ARM [Bap.Std] |
ARM architecture.
|
| Addr [Bap.Std] |
Shortcut for bitvectors that represent addresses
|
| Arch [Bap.Std] |
Architecture
|
| Arg [Bap.Std] |
Subroutine argument.
|
| Array [Bap.Std.Trie] |
Prefix and suffix tries for specified token types.
|
| Attr [Bap.Std.Dwarf] |
Attribute
|
B | |
| Backend [Bap.Std] |
A backend interface.
|
| Bap |
Binary Analysis Platform Library
|
| Basic [Bap.Std.Disasm_expert] |
Basic disassembler.
|
| Big [Bap.Std.Bitvector.Trie] | |
| Bil [Bap.Std] |
Main BIL module
|
| Bits [Bap.Std.Bitvector.Trie.Little] | |
| Bits [Bap.Std.Bitvector.Trie.Big] | |
| Bitvector [Bap.Std] |
Bitvector -- a type for representing binary values.
|
| Blk [Bap.Std] |
Block.
|
| Block [Bap.Std] |
Basic block of machine instructions.
|
| Block [Bap.Std.Disasm_expert.Recursive] |
Low-level opaque representation of basic block.
|
| Bool [Bap.Std.Graphlib.Graphs] | |
| Buffer [Bap.Std.Dwarf] |
Buffer is a light abstraction over
string and bigstring ,
that can allow one to share the same string for different sections
without explicit copying.
|
| Builder [Bap.Std.Blk] |
Builder interface.
|
| Builder [Bap.Std.Sub] |
Subroutine builder
|
| Builder [Bap.Std.Program] |
Program builder.
|
| Bytes [Bap.Std.Byteweight] | |
| Bytes [Bap.Std.Bitvector.Trie.Little] | |
| Bytes [Bap.Std.Bitvector.Trie.Big] | |
| Byteweight [Bap.Std] |
Byteweight Algorithm implementation
|
C | |
| CPU [Bap.Std.Target] | |
| CPU [Bap.Std.AMD64] | |
| CPU [Bap.Std.IA32] | |
| CPU [Bap.Std.ARM] |
ARM CPU.
|
| Call [Bap.Std] |
A control transfer to another subroutine.
|
| Callgraph [Bap.Std.Graphlib] |
A call graph representation.
|
| Cond [Bap.Std.ARM] |
Condition prefixes.
|
| Config [Bap.Std] |
Access to BAP configuration variables
|
D | |
| Data [Bap.Std.Dwarf] | |
| Def [Bap.Std] |
Definition.
|
| Dict [Bap.Std] |
Universal Heterogeneous Map.
|
| Disasm [Bap.Std] |
Disassembled program.
|
| Disasm_expert [Bap.Std] |
Expert interface to disassembler.
|
| Dwarf [Bap.Std] |
Dwarf library
This library gives an access to debugging information stored
in a binary program.
|
E | |
| Edge [Bap.Std.Graphlib.Ir] |
since in IR the order of edges defines semantics, we provide
extra functions
|
| Edge [Bap.Std.Graph] |
Graph edges
|
| Elf [Bap.Std] |
Parse binary data in ELF format.
|
| Equiv [Bap.Std] |
Ordinal for representing equivalence.
|
| Error [Bap.Std.Disasm] | |
| Exp [Bap.Std.Graphlib] | |
| Exp [Bap.Std.Graphlib.Graphs] | |
| Exp [Bap.Std] | Regular interface for BIL expressions
|
F | |
| Fbi [Bap.Std.Dwarf] |
Function boundary identification.
|
| Filtered [Bap.Std.Graphlib] |
functorized version of a
filter function.
|
| Fmm [Bap.Std] |
Floating point immediate operand
|
| Fn [Bap.Std.Dwarf] |
Current function representation.
|
| Form [Bap.Std.Dwarf] |
Attribute form
|
| Frontier [Bap.Std.Aux] | |
| Frontier [Bap.Std] |
Frontier maps each node into a possibly empty set of nodes.
|
G | |
| Graph [Bap.Std.Block] |
Graph of blocks.
|
| Graphlib [Bap.Std] |
Generic Graph Library
|
| Group [Bap.Std.Aux] | |
| Group [Bap.Std] |
Group is a non-empty set that is a result of partitioning of an
underlying set
S into a set of non-intersecting and non-empty
subsets that cover set S .
|
I | |
| IA32 [Bap.Std] | x86 architecture
|
| Image [Bap.Std] |
Binary Image.
|
| Img [Bap.Std.Backend] |
A Img from a backend perspective.
|
| Imm [Bap.Std] |
Integer immediate operand
|
| Infix [Bap.Std.Bil] |
Infix operators
|
| Input [Bap.Std.Memory] |
A set of low level input operations.
|
| Insn [Bap.Std.ARM] |
Arm Instruction Set.
|
| Insn [Bap.Std] |
Assembly instruction.
|
| Insn [Bap.Std.Disasm_expert.Basic] |
Basic instruction.
|
| Int [Bap.Std.Graphlib.Graphs] | |
| Int [Bap.Std.Graphlib] | |
| Int_err [Bap.Std.Bitvector] |
Arithmetic raised into
Or_error monad
|
| Int_exn [Bap.Std.Bitvector] |
Arithmetic that raises exceptions.
|
| Ir [Bap.Std.Graphlib] |
Graph view over IR.
|
J | |
| Jmp [Bap.Std] |
A control transfer operation.
|
K | |
| Kind [Bap.Std] |
Kinds of instructions
|
L | |
| Label [Bap.Std] |
Target of a control flow transfer.
|
| Labeled [Bap.Std.Graphlib] | |
| Leb128 [Bap.Std.Dwarf] | |
| Little [Bap.Std.Bitvector.Trie] | |
| Location [Bap.Std] |
A locations of a chunk of memory
|
M | |
| Make [Bap.Std.Byteweight] | |
| Make [Bap.Std.Graphlib] | Make(Node)(Edge) creates a module that implements Graph
interface and has unlabeled nodes of type Node.t and edges
labeled with Edge.t
|
| Make [Bap.Std.Trie] |
Create a trie for a given
Key
|
| Make [Bap.Std.Opaque] | |
| Make [Bap.Std.Regular] | |
| Make_iterators [Bap.Std.Memory] |
lifts iterators to monad
M
|
| Mapper [Bap.Std.Graphlib] |
functorized version of
Graphlib.view function.
|
| Memmap [Bap.Std] |
Memory maps.
|
| Memory [Bap.Std] |
Memory region
|
| Mono [Bap.Std.Bitvector] |
A comparable interface with size-monomorphic comparison.
|
N | |
| Node [Bap.Std.Graphlib.Ir] | |
| Node [Bap.Std.Graph] |
Graph nodes.
|
| Normalized [Bap.Std.Insn.Trie] | |
| Normalized [Bap.Std.Disasm_expert.Basic.Trie] | |
| Normalized [Bap.Std.Op] |
Normalized comparison.
|
| Normalized [Bap.Std.Bil.Trie] | |
O | |
| Of_ocamlgraph [Bap.Std.Graphlib] | Of_ocamlgraph(O) creates an adapter module, that implements
Graphlib interface on top of the module implementing
OCamlGraph interface.
|
| Op [Bap.Std.ARM] |
ARM instruction operands
|
| Op [Bap.Std] |
Operand
|
| Opaque [Bap.Std] |
creates a module implementing
Opaque interface.
|
P | |
| Partition [Bap.Std.Aux] | |
| Partition [Bap.Std] |
Result of a set partitioning.
|
| Path [Bap.Std.Aux] | |
| Path [Bap.Std] |
Path between two nodes.
|
| Phi [Bap.Std] |
PHI-node
|
| Prefix [Bap.Std.Trie.String] | |
| Prefix [Bap.Std.Trie.Array] | |
| Program [Bap.Std] |
Program.
|
| Project [Bap.Std] |
Target of analysis.
|
R | |
| R16 [Bap.Std.Memory.Trie] | |
| R32 [Bap.Std.Memory.Trie] | |
| R64 [Bap.Std.Memory.Trie] | |
| R8 [Bap.Std.Memory.Trie] | |
| Recursive [Bap.Std.Disasm_expert] |
Recursive Descent Disassembler.
|
| Reg [Bap.Std.ARM] |
ARM Registers.
|
| Reg [Bap.Std] |
Register.
|
| Regular [Bap.Std] |
In order to implement
Regular interface you need to provide a
minimum implementation M
|
S | |
| Section [Bap.Std.Dwarf] |
File sections
|
| Section [Bap.Std.Backend] |
Just a named region of memory.
|
| Segment [Bap.Std.Image] |
Image Segments.
|
| Segment [Bap.Std.Backend] |
A named contiguous part of file with permissions.
|
| Seq [Bap.Std] |
Lazy sequence
|
| Signatures [Bap.Std] |
Binary signatures storage
|
| Size [Bap.Std] |
Type safe operand and register sizes.
|
| Std [Bap] | |
| Stmt [Bap.Std.Graphlib] | |
| Stmt [Bap.Std.Graphlib.Graphs] | |
| Stmt [Bap.Std] | Regular interface for BIL statements
|
| String [Bap.Std.Graphlib] | |
| String [Bap.Std.Graphlib.Graphs] | |
| String [Bap.Std.Trie] |
Predefined prefix and suffix string tries.
|
| Sub [Bap.Std] |
Subroutine.
|
| Suffix [Bap.Std.Trie.String] | |
| Suffix [Bap.Std.Trie.Array] | |
| Symbol [Bap.Std.Image] |
Symbol.
|
| Symbol [Bap.Std.Backend] |
Symbol definition, that can span several non-contiguous parts of
memory
|
| Symtab [Bap.Std] |
Reconstructed symbol table.
|
T | |
| Table [Bap.Std] |
Table.
|
| Tag [Bap.Std.Dwarf] |
Debug Entry Tag
|
| Tag [Bap.Std.Value] |
Variants of values.
|
| Term [Bap.Std] |
IR language term.
|
| Tid [Bap.Std] |
Term identifier
|
| Tid [Bap.Std.Graphlib] | |
| Tid [Bap.Std.Graphlib.Graphs] | |
| To_ocamlgraph [Bap.Std.Graphlib] | To_ocamlgraph(G) returns a module that implements
OCamlGraph interface for a persistent graph.
|
| Tree [Bap.Std.Aux] | |
| Tree [Bap.Std] |
Tree is a particular subtype of a graph for which
each node has only one predecessor, and there is only
one path between tree root and any other node.
|
| Trie [Bap.Std.Insn] |
Prefix Tree
This module provides a trie data structure where a sequence of
instructions is used as a key (and an individual instruction
as a token).
|
| Trie [Bap.Std.Disasm_expert.Basic] |
Trie maps over instructions
|
| Trie [Bap.Std.Memory] |
Tries over memory
|
| Trie [Bap.Std.Bil] |
Tries on BIL.
|
| Trie [Bap.Std.Bitvector] |
Prefix trees for bitvectors.
|
| Trie [Bap.Std] |
Constructs a trie
|
| Type [Bap.Std.Graphlib.Graphs] | |
| Type [Bap.Std] |
The type of a BIL expression.
|
| Typeid [Bap.Std.Value] |
Persistent type identifiers.
|
| Types [Bap.Std.Elf] | |
| Types [Bap.Std.Bil] | |
U | |
| Unit [Bap.Std.Graphlib.Graphs] | |
V | |
| V1 [Bap.Std.Var] |
Serialization format
|
| Value [Bap.Std.Graphlib] | |
| Value [Bap.Std.Graphlib.Graphs] | |
| Value [Bap.Std] |
Universal Values.
|
| Var [Bap.Std.Graphlib] | |
| Var [Bap.Std.Graphlib.Graphs] | |
| Var [Bap.Std] |
BIL variable.
|
| Vector [Bap.Std] |
Resizable Array.
|
W | |
| With_error [Bap.Std.Memory] |
iterators lifter to the Or_error monad
|
| Word [Bap.Std.Graphlib] | |
| Word [Bap.Std.Graphlib.Graphs] | |
| Word [Bap.Std] |
Shortcut for bitvectors that represent words
|


Famous and relevant programs offered by universities worldwide for German language
Browse thorugh 100's of jobs posted daily worldwide. Your 1-stop German language job portal
Learn about famous organizations/associations working on advancement of German language
Very brief history of German language, including origin and countries where it is being spoken.
Get access to up to date audio / visual resources to help you in learning German language
Be the first to know about the new templates.


Certificate Management
KeyStore List
Alias
#{kscert.alias}
Algorithm
#{kscert.algorithm}
Key Size
#{kscert.keySize}
Expiration Date
Subject Key Identifier
#{kscert.subjectKeyID}
Authority Key Identifier
#{kscert.authorityKeyID}
TrustStore List
Alias
Algorithm
Key Size
Expiration Date
Subject Key Identifier
Authority Key Identifier
Are you sure you want to refresh certificates?
Refresh will clear cached services and cause initial performance slowdown (similar to restarting the gateway)


#include <NotifyWindowClass.h>
Public Member Functions | |
| CNotifyWindowClass (HINSTANCE hInstance, WNDPROC lpfnWndProc) | |
| Constructor. | |
| bool | registerClass () |
| Register the window class. | |
| virtual | ~CNotifyWindowClass () |
| Destructor. | |
Static Public Attributes | |
| static const char * | sc_lpszClassName = "TrayAliveNotificationWindow" |
| Static member containing the class name necessary to create the window using this class. |
Hide declaration and creation of window class code in class.
Definition at line 32 of file NotifyWindowClass.h.
| CNotifyWindowClass::CNotifyWindowClass | ( | HINSTANCE | hInstance, | |
| WNDPROC | lpfnWndProc | |||
| ) |
Constructor.
Create the ping window class.
| hInstance | the instance | |
| lpfnWndProc | window proc associated with this class |
Definition at line 26 of file NotifyWindowClass.cpp.
References sc_lpszClassName.
| bool CNotifyWindowClass::registerClass | ( | ) |
Register the window class.
Definition at line 42 of file NotifyWindowClass.cpp.
Referenced by WinMain().


Toggle navigation
Ben Galewsky
About
About
Ben Galewsky
Research Programmer
National Center for Supercomputing Applications
GitHub
bengalewsky
LinkedIn
bengalewsky


--- title: Frequently Asked Questions type: doc ---
Wallaroo is basically a dependency injection library for C++. It provides a way to build and wire the objects you need in your application using strings and/or loading a configuration file. With Wallaroo, you get rid of new constructs. In this way, the names of the concrete classes you want to use are no more carved in the stone (i.e. in your code). Your classes can be created starting from specifications of some kind (configuration files, DBs, environment variables, or a mix of them).
Of course, it is. Wallaroo is implemented by using standard C++ and (optionally) boost libraries and does not make assumptions about the underlying system. Thus, you can use it on every platform providing it has a decent C++ compiler.
Wallaroo is delivered in a ZIP file for Windows users and in a compressed TAR file (.tgz) for Unix/Linux users. Both archives contain the same files, the only difference is that all text files in the ZIP files have line endings suitable for Windows (CR-LF), while the text files in the TAR file have line endings suitable for Unix/Linux (LF only).
No, wallaroo is a header-only library, so you don't need to compile it.
Of course. I'm using it in several embedded projects, and it works great.
I also used Wallaroo with the cross-compiler for the ppc 6xx architecture.
Of course. Wallaroo can use some of the new C++11 features instead of boost libraries.
Short answer: no.
Long answer: it depends. To get rid of boost libraries, your compiler must support C++11 features (basically smart pointers) and you must not use XmlConfiguration nor JsonConfiguration classes.
Wallaroo should automatically detect if your compiler is C++11 compliant. If it is, wallaroo interface will use std smart pointers (e.g.: std::shared_ptr) instead of boost smart pointers (e.g.: boost::shared_ptr).
By now, wallaroo automatically detects only gcc and visual C++ versions (if you're working with another compiler, please contact me to help me verify the auto-detection mechanism).
You can change the default behavior of wallaroo by using two compile time symbols. To impose the use of boost libraries, you can define the symbol WALLAROO_FORCE_USE_BOOST. In the same way, to impose the use of std smart pointers in wallaroo interface, you can define the symbol WALLAROO_FORCE_USE_STD.
Maybe you've encountered the limit on the number of parameters you can have in your wallaroo::Part- derived classes.
For classes defined in the main address space, you can have up to 2 constructor parameters. For classes defined in a shared library, your classes cannot have constructor parameters.
The right way to deal with this limit is to use wallaroo attributes instead of constructor parameters. Basically, you can substitute the constructor parameters with wallaroo::Attribute data members: they're typed and wallaroo can initialize them through the usual DSL or the configuration file.
Yes, you can register all the template specializations you need. E.g.:
WALLAROO_REGISTER( Foo< int > )
WALLAROO_REGISTER( Foo< double > )
Then, you can use the strings Foo< int > and Foo< double > in wallaroo DSL, XML, JSON and WAL.
Pay attention that:
But you have the two following alternatives (valid in general).
Typedefs
E.g.:
typedef Foo< int > IntFoo;
typedef Foo< double > DoubleFoo;
WALLAROO_REGISTER( IntFoo )
WALLAROO_REGISTER( DoubleFoo )
Then, you will use the strings IntFoo and DoubleFoo in wallaroo DSL, XML and JSON.
Manually create your classes in the DSL
E.g.:
catalog.Add( "double_foo", make_shared< Foo< double > >() );
catalog.Add( "int_foo", make_shared< Foo< int > >() );
If you get a WrongType exception when you try to extract an object from a catalog, maybe you're using an old version of gcc. In that case, you should tell the compiler to provide RTTI across process boundaries, by using the flag -E:
# extract from roulette sample Makefile:
# NOTE you need to pass -E to the linker to provide RTTI across process boundaries!
$(EXE): $(OBJ)
$(LINK.cc) -Wl,-E -o $@ $^
# NOTE you need to pass -E to the linker to provide RTTI across process boundaries!
%.so: %.cpp %consolefactory.cpp %.h %consolefactory.h
$(LINK.cc) -fPIC -shared -Wl,-E -Wl,-soname,$@ -o $@ $^ $(LFLAGS) $(CFLAGS)
The linker does not link static libraries if the main program does not explicitly reference any symbol contained inside them. However, Wallaroo registration mechanism requires the linker to put everything inside the final executable, even those symbols that are never referenced. That's why your executable can't find your classes.
When you put your files in a static library, you are asking the linker to use only those files which resolve an undefined external. That's what a library does. On the contrary, wallaroo main goal is exactly to not specify in code which concrete classes (i.e. linker symbols) you want to use. So, maybe a static library is not what you want: you should consider the use of shared libraries or linking object files directly.
However, if you really need to put your classes in static libraries you have two options:
gcc -Lmy_libs_path -lmain -Wl,--whole-archive -lMyLib1 -lMyLib2 -Wl,--no-whole-archive -o exe_name
// static library
#include "wallaroo/registered.h"
// define a dummy symbol (unique per library)
int PullInMyLibrary() { return 0; }
class MyPlugin : public wallaroo::Part
{
...
};
WALLAROO_REGISTER( MyPlugin );
// main program
// force the linker to import the library
int PullInMyLibrary();
static int dummy = PullInMyLibrary();
int main()
{
...
Catalog catalog;
catalog.Create( "plugin", "MyPlugin" );
...
}
Wallaroo should work on every recent compiler.
Anyway, I have personally tested the library with the following compilers:
If you tried the library with another compiler, please let me know.
Of course, you can. Wallaroo is released under BOOST software license that states you can do basically everything with my library.
No, Wallaroo does not need any custom build step. This was a basic criterion driving the design of the whole library. Unfortunately, when you try to develop dependency injection in C++ without custom preprocessors / code generators, you end up building an intrusive library.
Yes, it is. This basically means that you need to derive your classes from wallaroo::Part in order to be managed by wallaroo. If you only need to manage 3rd party classes (that you cannot modify) and you just need the "creation" feature, you can actually solve the problem by writing a wrapper of 3rd party classes (the usual indirection layer that solves every CS problem :-) . However, in this way you cannot exploit the "wiring" feature of wallaroo. I'm planning to add an option to use a non-intrusive mechanism at least for the creation feature in wallaroo.
Yes, there is. You should use wallaroo wiring file syntax (WAL) that is really compact and similar to C++.
There are several ways you can contribute to wallaroo. You can:
Because I love Australia :-)
Great. I'd like you to star my project and share it on Twitter, Facebook, Linkedin and other social networks (you can use the buttons below). In addition, you can also let me know you're using wallaroo and tell me how can I improve it.


hello, this is a bus tracker made for the students of lane tech this tracker tracks and shows the times of the western and addison busses


|
MUGA
0.0.2
Make UNET Great Again
|
| ▼NMUGA | |
| ▼NClient | |
| CBasicInterpolator | Performs basic interpolation between states |
| CIInterpolator | Interface for classes that need to recieve states to interpolate between |
| CInputPredictionInterpolator | Interpolator that provides input prediction by saving Input Snapshots (disabled if on server) |
| CInterpolateStep | Represents relevant state information for a single class for a single state update |
| CMUGAClient | Client side script (disable if on Server) |
| ▼NServer | |
| CInputHandler | Handles incoming inputs by parsing the byte[] and sending it to an input consumer |
| CLCPhysics | Performs lag-compensated physics |
| CMUGAServer | Server-side script for the authoritative server (disable if running on a client) |
| CNetworkTransform | A custom Network Transform implementation for streaming state updates (disable if on client) |
| CRestorer | A one-time class used to restore the state of the game back to a previous time. It should only be used within a using() block |
| CSnapShotter | |
| CBoxColliderProfile | Represents the state of a box collider |
| CByteMsgBase | A MessageBase wrapper for a byte[] |
| CCapsuleColliderProfile | Represents the state of a capsule collider |
| CInputConsumer | Consumes input both on the server and the client |
| CInputSnapshot | Represents a snapshot of the user's input to send to the server |
| CIRestoreableToCollider | Represents being able to restore a represented state to a collider |
| CMsgTypeExt | Holds consts for message types |
| CSphereColliderProfile | Represents the state of a sphere collider |
| CStateUpdate | Represents a state update for the entire game |
| CTransformProfile | Stores the state of a Transform including its name, tag, and physics layer |
| CUintMsgBase | A MessageBase wrapper for a uint |


Next: packagep, Previous: package-use-list, Up: Packages Dictionary
package-used-by-list
package ⇒ used-by-list
package—a package designator.
used-by-list—a list of package objects.
package-used-by-list returns a list of other packages that use package.
(package-used-by-list (make-package 'temp)) ⇒ () (make-package 'trash :use '(temp)) ⇒ #<PACKAGE "TRASH"> (package-used-by-list 'temp) ⇒ (#<PACKAGE "TRASH">)
Should signal an error of type type-error if package is not a package.