Plugins and Services
読む時間の目安: 5 分Using Volume and Network plugins in Docker services
In swarm mode, it is possible to create a service that allows for attaching to networks or mounting volumes that are backed by plugins. Swarm schedules services based on plugin availability on a node.
Volume plugins
In this example, a volume plugin is installed on a swarm worker and a volume is created using the plugin. In the manager, a service is created with the relevant mount options. It can be observed that the service is scheduled to run on the worker node with the said volume plugin and volume. Note that, node1 is the manager and node2 is the worker.
-
Prepare manager. In node 1:
$ docker swarm init Swarm initialized: current node (dxn1zf6l61qsb1josjja83ngz) is now a manager.
-
Join swarm, install plugin and create volume on worker. In node 2:
$ docker swarm join \ --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c \ <IP_ADDRESS>:2377
$ docker plugin install tiborvass/sample-volume-plugin latest: Pulling from tiborvass/sample-volume-plugin eb9c16fbdc53: Download complete Digest: sha256:00b42de88f3a3e0342e7b35fa62394b0a9ceb54d37f4c50be5d3167899994639 Status: Downloaded newer image for tiborvass/sample-volume-plugin:latest Installed plugin tiborvass/sample-volume-plugin
$ docker volume create -d tiborvass/sample-volume-plugin --name pluginVol
-
Create a service using the plugin and volume. In node1:
$ docker service create --name my-service --mount type=volume,volume-driver=tiborvass/sample-volume-plugin,source=pluginVol,destination=/tmp busybox top $ docker service ls z1sj8bb8jnfn my-service replicated 1/1 busybox:latest
docker service ls shows service 1 instance of service running.
-
Observe the task getting scheduled in node 2:
$ docker ps --format '{{.ID}}\t {{.Status}} {{.Names}} {{.Command}}' 83fc1e842599 Up 2 days my-service.1.9jn59qzn7nbc3m0zt1hij12xs "top"
Network plugins
In this example, a global scope network plugin is installed on both the swarm manager and worker. A service is created with replicated instances using the installed plugin. We will observe how the availability of the plugin determines network creation and container scheduling.
Note that node1 is the manager and node2 is the worker.
-
Install a global scoped network plugin on both manager and worker. On node1 and node2:
$ docker plugin install bboreham/weave2 Plugin "bboreham/weave2" is requesting the following privileges: - network: [host] - capabilities: [CAP_SYS_ADMIN CAP_NET_ADMIN] Do you grant the above permissions? [y/N] y latest: Pulling from bboreham/weave2 7718f575adf7: Download complete Digest: sha256:2780330cc15644b60809637ee8bd68b4c85c893d973cb17f2981aabfadfb6d72 Status: Downloaded newer image for bboreham/weave2:latest Installed plugin bboreham/weave2
-
Create a network using plugin on manager. On node1:
$ docker network create --driver=bboreham/weave2:latest globalnet $ docker network ls NETWORK ID NAME DRIVER SCOPE qlj7ueteg6ly globalnet bboreham/weave2:latest swarm
-
Create a service on the manager and have replicas set to 8. Observe that containers get scheduled on both manager and worker.
On node 1:
$ docker service create --network globalnet --name myservice --replicas=8 mrjana/simpleweb simpleweb w90drnfzw85nygbie9kb89vpa
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES<PHONE_NUMBER>6a mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 5 seconds ago Up 4 seconds myservice.4.ytdzpktmwor82zjxkh118uf1v 15e24de0f7aa mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 5 seconds ago Up 4 seconds myservice.2.kh7a9n3iauq759q9mtxyfs9hp c8c8f0144cdc mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 5 seconds ago Up 4 seconds myservice.6.sjhpj5gr3xt33e3u2jycoj195 2e8e4b2c5c08 mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 5 seconds ago Up 4 seconds myservice.8.2z29zowsghx66u2velublwmrh
On node 2:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 53c0ae7c1dae mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 2 seconds ago Up Less than a second myservice.7.x44tvvdm3iwkt9kif35f7ykz1 9b56c627fee0 mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 2 seconds ago Up Less than a second myservice.1.x7n1rm6lltw5gja3ueikze57q d4f5927ba52c mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 2 seconds ago Up 1 second myservice.5.i97bfo9uc6oe42lymafs9rz6k 478c0d395bd7 mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 2 seconds ago Up Less than a second myservice.3.yr7nkffa48lff1vrl2r1m1ucs
-
Scale down the number of instances. On node1:
$ docker service scale myservice=0 myservice scaled to 0
-
Disable and uninstall the plugin on the worker. On node2:
$ docker plugin rm -f bboreham/weave2 bboreham/weave2
-
Scale up the number of instances again. Observe that all containers are scheduled on the master and not on the worker, because the plugin is not available on the worker anymore.
On node 1:
$ docker service scale myservice=8 myservice scaled to 8
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cf4b0ec2415e mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 39 seconds ago Up 36 seconds myservice.3.r7p5o208jmlzpcbm2ytl3q6n1 57c64a6a2b88 mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 39 seconds ago Up 36 seconds myservice.4.dwoezsbb02ccstkhlqjy2xe7h 3ac68cc4e7b8 mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 39 seconds ago Up 35 seconds myservice.5.zx4ezdrm2nwxzkrwnxthv0284 006c3cb318fc mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 39 seconds ago Up 36 seconds myservice.8.q0e3umt19y3h3gzo1ty336k5r dd2ffebde435 mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 39 seconds ago Up 36 seconds myservice.7.a77y3u22prjipnrjg7vzpv3ba a86c74d8b84b mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 39 seconds ago Up 36 seconds myservice.6.z9nbn14bagitwol1biveeygl7 2846a7850ba0 mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 39 seconds ago Up 37 seconds myservice.2.ypufz2eh9fyhppgb89g8wtj76 e2ec01efcd8a mrjana/simpleweb@sha256:317d7f221d68c86d503119b0ea12c29de42af0a22ca087d522646ad1069a47a4 "simpleweb" 39 seconds ago Up 38 seconds myservice.1.8w7c4ttzr6zcb9sjsqyhwp3yl
On node 2:
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES


SLogo Basic Commands
While the command names below are given in all capital letters, SLogo is not case sensitive and should accept any correct spelling of the command names. Note that any values used as parameters to a command may be the result of calling any of the commands below or a value stored in a variable. Thus all commands return a double value as described below. Also, commands can be formatted over any number of lines, including multiple commands on the same line, but they must be separated by one or more spaces.
Basic Syntax
| Token | Syntax | Semantics | Examples |
|---|---|---|---|
| Constant |
-?[0-9]+\.?[0-9]*
|
any real valued number note, to avoid potential ambiguity in parsing there should not be a space between the negative sign and the value |
50
-1.3
|
| Variable |
:[a-zA-Z_]+
|
any word preceded by a colon, : note, if a variable name is used that has not previously been given a value, return a default value (i.e., 0) |
:distance
:side
|
| Command |
[a-zA-Z_]+(\?)?
|
any word can be a command-name note, all commands return a numeric value note, built-in commands are given below and user-defined commands cannot reuse those names |
forward
fd
|
| List |
[
|
these brackets enclose a list of zero or more commands or
variables note, to make parsing easier, these will always be separated from other tokens by spaces |
[ fd 50 rt 90 ]
|
| Comment |
^#.*
|
Ignore any lines that are empty, i.e., only zero or more spaces, and lines that begin with the comment character, "#". |
# a comment
#fd 50
|
Turtle Commands
| Name(s) | Description |
|---|---|
| FORWARD pixels FD pixels |
moves turtle forward in its current heading by pixels
distance returns the value of pixels |
| BACK pixels BK pixels |
moves turtle backward in its current heading by pixels
distance returns the value of pixels |
| LEFT degrees LT degrees |
turns turtle counterclockwise by degrees angle returns the value of degrees |
| RIGHT degrees RT degrees |
turns turtle clockwise by degrees angle returns the value of degrees |
| SETHEADING degrees SETH degrees |
turns turtle to an absolute heading returns number of degrees moved |
| TOWARDS x y | turns turtle to face the point (x, y),
where (0, 0) is the center of the screen returns the number of degrees turtle turned |
| SETXY x y GOTO x y |
moves turtle to an absolute screen location, where (0, 0)
is the center of the screen returns the distance turtle moved |
| PENDOWN PD |
puts pen down such that when the turtle moves, it leaves a
trail returns 1 |
| PENUP PU |
puts pen up such that when the turtle moves, it does not
leave a trail returns 0 |
| SHOWTURTLE ST |
makes turtle visible returns 1 |
| HIDETURTLE HT |
makes turtle invisible returns 0 |
| HOME | moves turtle to the center of the screen (0 0) returns the distance turtle moved |
| CLEARSCREEN CS |
erases turtle's trails and sends it to the home location returns the distance turtle moved |
Turtle Queries
| Name | Description |
|---|---|
| XCOR | returns the turtle's X coordinate from the center of the screen |
| YCOR | returns the turtle's Y coordinate from the center of the screen |
| HEADING | returns the turtle's heading in degrees |
| PENDOWN? PENDOWNP |
returns 1 if turtle's pen is down, 0 if it is up |
| SHOWING? SHOWINGP |
returns 1 if turtle is showing, 0 if it is hiding |
Math Operations
| Name | Description |
|---|---|
| SUM expr1 expr2 + expr1 expr2 |
returns sum of the values of expr1 and expr2 |
| DIFFERENCE expr1 expr2 - expr1 expr2 |
returns difference of the values of expr1 and expr2 |
| PRODUCT expr1 expr2 * expr1 expr2 |
returns product of the values of expr1 and expr2 |
| QUOTIENT expr1 expr2 / expr1 expr2 |
returns quotient of the values of expr1 and expr2 |
| REMAINDER expr1 expr2 % expr1 expr2 |
returns remainder on dividing the values of expr1 by expr2 |
| MINUS expr ~ expr |
returns negative of the values of expr |
| RANDOM max | returns random non-negative number strictly less than max |
| SIN degrees | returns sine of degrees |
| COS degrees | return cosine of degrees |
| TAN degrees | returns tangent of degrees note, since this function is defined continuously, take appropriate action (i.e., divide-by-zero might silently return zero) |
| ATAN degrees | returns arctangent of degrees note, since this function is defined continuously, take appropriate action (i.e., divide-by-zero might silently return zero) |
| LOG expr | returns natural log of expr |
| POW base exponent | returns base raised to the power of the exponent |
| PI | Reports the number Pi |
Boolean Operations
| Name | Description |
|---|---|
| LESS? expr1 expr2 LESSP expr1 expr2 |
returns 1 if the value of expr1 is strictly less than the value of expr2, otherwise 0 |
| GREATER? expr1 expr2 GREATERP expr1 expr2 |
returns 1 if the value of expr1 is strictly greater than the value of expr2, otherwise 0 |
| EQUAL? expr1 expr2 EQUALP expr1 expr2 |
returns 1 if the value of expr1 and the value of expr2 are equal, otherwise 0 |
| NOTEQUAL? expr1 expr2 NOTEQUALP expr1 expr2 |
returns 1 if the value of expr1 and the value of expr2 are not equal, otherwise 0 |
| AND test1 test2 | returns 1 if test1 and test2 are non-zero, otherwise 0 |
| OR test1 test2 | returns 1 if test1 or test2 are non-zero, otherwise 0 |
| NOT test | returns 1 if test is 0 and 0 if test is non-zero |
Variables, Control Structures, and User-Defined Commands
| Name | Description |
|---|---|
| MAKE variable expr SET variable expr |
assigns the value of expr to variable,
creating the variable if necessary returns expr |
| REPEAT expr [ command(s) ] | runs command(s) given in the list the value of
expr number of times returns the value of the final command executed (or 0 if no commands are executed) note, the value of the current iteration, starting at 1, is automatically assigned to the variable :repcount so that it can be accessed by the command(s) |
| DOTIMES [ variable limit ] [ command(s) ] |
runs command(s) for each value specified in the
range, i.e., from (1 - limit) inclusive returns the value of the final command executed (or 0 if no commands are executed) note, variable is assigned to each succeeding value so that it can be accessed by the command(s) |
| FOR [ variable start end increment ] [ command(s) ] |
runs command(s) for each value specified in the
range, i.e., from (start - end), going by increment returns the value of the final command executed (or 0 if no commands are executed) note, variable is assigned to each succeeding value so that it can be accessed by the command(s) |
| IF expr [ command(s) ] | if expr is not 0, runs the command(s)
given in the list returns the value of the final command executed ( (or 0 if no commands are executed) |
| IFELSE expr [ trueCommand(s) ] [ falseCommand(s) ] |
if expr is not 0, runs the trueCommands
given in the first list, otherwise runs the falseCommands
given in the second list returns the value of the final command executed (or 0 if no commands are executed) |
| TO commandName [ variable(s) ] [ command(s) ] |
assigns command(s) given in the second list to commandName
using parameters given in first list as variables when commandName is used later in a program, any given values are assigned to variables that can be accessed when the command list is run and the value of the final command executed is returned (or 0 if no commands are executed) returns 1 if command is successfully defined, otherwise 0 |
Display Commands
Note, for commands below that receive/return an index number, that index should refer to a list of graphical items (like an image or color) whose items are clearly available in the GUI with their number or order apparent (so the user knows how to refer to them within a command). Also, it would be helpful to populate each list with some initial default choices for the user.
| Command | Description |
|---|---|
SETBACKGROUND indexSETBG
index |
sets background color of screen to that represented by index returns given index |
SETPENCOLOR indexSETPC
index |
sets color of the pen to that represented by index returns given index |
SETPENSIZE pixelsSETPS
pixels |
sets size of the pen to be pixels thickness returns given pixels |
SETSHAPE indexSETSH
index |
sets shape of turtle to that represented by index returns given index |
SETPALETTE index r g
b |
sets color corresponding at given index to given
r g b color values returns given index note, color component values are nonnegative integers less than 256 specifying an amount of red, green, and blue |
PENCOLOR PC |
returns turtle's current color index |
SHAPE SH |
returns turtle's current shape index |
STAMP |
draw the image of the turtle in its current settings on
the workspace display returns the index of the turtle's image used for the stamp |
GUI Controls
- Commands should be entered in the console in the bottom left of the screen
- Errors will show up as pop up boxes.
- The options pane on the right allows you to save workspace, change background, add multiple turtles, etc.
- To deactivate turtles, simply click on the turtle. When it is deactivated, it will become a penguin head. When it is activated, it'll be a green turtle. To activate, just click on the penguin head again.
- In the options pane, you can also change the images of the dead and active turtles by adding their urls. We decided that using a file chooser was too restrictive. What if a specific image doesn't suit the user's taste? They should be able to choose any image from online to replace the turtle.


Pertinent to users:
Renamed the project from PyBlosxom to Pyblosxom (no more CamelCase).
I moved all the plugins again in the git repository. This time, instead I moved them from plugins/ to Pyblosxom/plugins/ so that they’re in the Pyblosxom.plugins module.
Because of this, you no longer have to copy core plugins into your plugins directory. Instead of copying core plugin files, refer to the plugins in your config.py file using their full Python path in the Pyblosxom package.
For example, the pycalendar plugin is a core plugin that comes with Pyblosxom and is now located in Pyblosxom/plugins/pycalendar.py in git repository. Thus the module name is Pyblosxom.plugins.pycalendar. Your config.py file would look have this:
py["load_plugins"] = [
...
"Pyblosxom.plugins.pycalendar",
...
]
To switch from having core plugins in your plugin_dirs directories to using the ones that come with Pyblosxom, all you need to do is:
change the entries for plugins that are core plugins that come with Pyblosxom that are listed in the load_plugins list in your config.py from something like this:
py["load_plugins"] = [
...
"pycalendar",
...
]
to something like this:
py["load_plugins"] = [
...
"Pyblosxom.plugins.pycalendar",
...
]
test to make sure your blog still works
remove the plugin files for plugins you changed in load_plugins from your plugin_dirs directories
To get a list of all plugins that come with Pyblosxom, see Part 2 in the Pyblosxom documentation.
If you make these changes, then the next time you upgrade PyBlosxom, core plugins will be upgraded automatically.
Further, documentation for core plugins is at the top of the individual plugin files, but also in the documentation. This includes a list of the plugins available in the core.
You can see the plugin documentation at Part 2: Core plugin documentation.
Plugins added: markdown_parser, readmore
Plugins changed:
pages
tags
rst
pycategories
the rest of the plugins: pep8 fixes and documentation updates
Plugins removed from Pyblosxom: commentAPI
Fixes error handling for loading plugins. When doing pyblosxom-cmd test and a plugin fails to load, it’ll now tell you. When using the debug renderer and a plugin fails to load, it’ll now tell you.
Lot of work on simplifying and improving the documentation.
Added a static_yearindexes setting. Set it to True to generate year indexes and False to not generate year indexes.
I removed all the extra infrastructure for testing plugins. Plugins that come with the core are now in the Pyblosxom package and their tests are in Pyblosxom/tests/.
Adds generate subcommand to pyblosxom-cmd. This makes it easier to test blogs and plugins that do things with entries.
Renamed PyBlosxomWSGIApp class to PyblosxomWSGIApp.
Renamed PyBlosxom class to Pyblosxom.
Moved the project from gitorious to github. The new git repository is at http://github.com/willkg/pyblosxom.
Removed VERSION_DATE and VERSION_SPLIT. They’re kind of silly and don’t really help much.
I moved the version to Pyblosxom/_version.py. Use it like this:
from Pyblosxom import __version__
print __version__
I updated the documentation accordingly.
PyBlosxom shows an error page if it crashes rather than forcing you to go figure out what happened by finding the web server logs. This should make configuring and debugging much easier.
Bunch of fixes to the documentation. If you see errors or things that are unclear, let us know.
The documentation for the comments plugin still needs to be overhauled.
Bunch of other bug fixes.
Bunch of new plugins: magicword, pages, rst, check_nonhuman, and check_blacklist.
Bunch of fixes to the comments plugin, tags and pycalendar plugins.
Tags plugin gains tags cloud functionality.
Comments plugin gains comment_disable_after_x_days feature.
If you’re using them, update to the latest versions.
Renamed pyblcmd to pyblosxom-cmd.
PyBlosxom now requires Python 2.3. We’ve removed the _logging module that provided logging facilities to pre-Python 2.3 versions.
You can now install PyBlosxom on your system with pip or easy_install.
The pyblosxom.cgi file has changed significantly—if you’re using it you should grab the new one that comes with this distribution. We’ve gutted the pyblosxom.cgi script and turned it into a stub. This will reduce the need for you to update your pyblosxom.cgi in the future when you upgrade PyBlosxom.
pyblosxom-cmd now has an option to create the blog directory structure and skeleton files for you. This makes it much faster to get a new blog up and running. Syntax is this:
pyblosxom-cmd create <path>
Some examples:
pyblosxom-cmd create .
pyblosxom-cmd create /home/joe/blog
Template variable syntax $id_escaped and $id_urlencoded has been removed. Use $escape(id) and $urlencode(id) instead.
Switched to using Python’s optparse module instead of our home-brewed one. There are some changes in command line syntax. Do pyblosxom-cmd --help for command line help.
Changed around INSTALL, README and added UPGRADE.
Removed blog_title_with_path variable. If you were using this variable in your templates, replace it. i.e. instead of:
$blog_title_with_path
do:
$blog_title : $pi_bl
Re-worked PyBlosxom so that it uses the same encoding throughout. This means you need to use the same encoding for all your data files and that encoding has to match the blog_encoding property in config.py. This defaults to UTF-8.
Re-worked documentation to use Sphinx. The end result is that the “source” for the docs is in docs/source/, there’s an HTML version that’s built by Sphinx in docs/build/html/, and it’s a lot easier to read and use now. Thank you to the Sphinx team!
Reworked the command line for static rendering. It now works like this:
pyblosxom-cmd staticrender \
[--config <path/to/config/file>] \
[--incremenal]
If the config.py file is in your PYTHONPATH, then you can skip the --config <path/to/config/file> stuff.
Removed portalocker code. This will cause any plugins using the locking code to fail. The only one I saw like this was the logstats plugin which had a lot of other problems.
Added a --silent flag to pyblcmd so that it quells all stdout. This is useful for cron jobs.
Added truncate_date config variable. When set to True, it causes date-based archives to be truncated to num_entries entries. Defaults to False.
Example:
py["truncate_date"] = True
Added truncate_category config variable. When set to True, it causes category-based archives to be truncated to num_entries entries. Defaults to True.
Example:
py["truncate_category"] = True
Added truncate_frontpage config variable. When set to True, it causes the front page num_entries entries. Defaults to True.
Example:
py["truncate_frontpage"] = True
Plugins are included in the PyBlosxom source tarball again.
Templates in a flavourdir directory no longer require the flavour as the file extension. e.g. This will work fine:
blog/
|- flavourdir/
|- html.flav/
|- content_type
|- head
|- story
|- ...
We moved the main PyBlosxom site to http://pyblosxom.github.com/ . There’s a “powered by pyblosxom” image at http://pyblosxom.github.com/images/pb_pyblosxom.gif
You should adjust your templates accordingly.
The following plugins have been added to the pyblosxom release tarball:
If you have older versions of these plugins, better to switch to the new versions.
Pyblosxom.tools.VariableDict is no more.
If you have template variables that end in _urlencoded and _escaped, it’s better to instead call tools.escape_text(...) and tools.urlencode_text(...) or use filter functions $escape(var) and $urlencode(var).
 If you depended on functions that started with _, then you’ll probably need to rework your plugin. These functions were not intended for outside use.
Additionally, we fixed the bug where the renderer was adding the contents of the config and data dicts to each entry when it was rendered as a story. Now the items in the entrylist are untouched during rendering.
Added a lot of tests and rewrote everything to ditch the nose requirement. Tests can be run with:
python setup.py test
Added a lot of documentation.
Removed the portalocker code so PyBlosxom no longer provides a way to lock/unlock text files.
Changed a lot of camel-case function/method names to PEP-8 versions. Camel case names are deprecated and will be removed in a future version:
tools.py:
pyblosxom/Pyblosxom.py:
pyblosxom/renderers/base.py:
pyblosxom/renderers/blosxom.py:
Changed add_header in the Response class to take a key and value instead of a list of strings that it has to use * magic and then munge through.
Added a commandline callback for allowing plugins to add to the command line.
Added a truncatelist callback allowing plugins to augment the truncate (num_entries) behavior.
Added a sortlist callback allowing plugins to augment entrylist sorting behavior.


Pizza Shop
Name:
Pick a size:
Small
Medium
Large
Extra Large
Pick a Topping:
Cheese.
Pepperoni.
Onions.
Tomatoes.
Olives.
Receipt:
name:
size:
topping:
price:
total:
Submit My Order!


bundled
es6 modules
bundled and es6 modules combined for compatibility
mocha test
mocha test bundled


Map-Making Library:
Map Base Tiles:
Esri, DeLorme, NAVTEQ, TomTom, Intermap, iPC, USGS, FAO, NPS, NRCAN, GeoBase, Kadaster NL, Ordnance Survey, Esri Japan, METI, Esri China (Hong Kong), and the GIS User Community
Clustering Plugin:
Leaflet.markercluster © 2012 Dave Leaver, smartrak
Earthquake Data:


Allows you to use this job as a template.
Whenever this job is saved, all implementations will automatically sync the changes except the parameters, which only parameter names are synced, but not their values. (Unless parameters are added or deleted, then only the new or deleted parameter value will be synced.)


Eastern United States to experience freezing temperatures next week
by CNN NewsourceWinter is coming to the East Coast for the next week.
The next five to seven days are going to bring unseasonably cold temperatures to the eastern two-thirds of the US, CNN meteorologist Derek Van Dam said.
The cold front could bring below freezing temperatures to some places.
The cold was already descending on New York early Friday morning, with wind chill expected to bring temperatures down to the upper teens to mid-20s, according to the National Weather Service. Wind gusts in Boston are reaching 25 to 35 mph and will bring temperatures to the 20s as well, the NWS said.
Snow flurries are also expected for the downwind parts of the Great Lakes Friday, Van Dam said, adding that those flurries will be at the Northern Great Lakes Saturday.
"The Great Lakes are no longer ice covered, so here comes the Lake Effect snow again," the National Weather Service said.


3.0.0-0
The Nxus router is an Express compatible web server and router for Nxus applications.
In your Nxus application:
> npm install @nxus/router --save
app.get('router').route('/', (req, res) => {
res.send('Hello World')
})
Alternatively, you can specify a HTTP method:
app.get('router').route('GET', '/', (req, res) => {
res.send('Hello World')
})
app.get('router').middleware((req, res) => {
res.status(404).send('Nothing to see here');
})
app.get('router').static("my-prefix", myPath)
For example, myFile.txt
in myPath
is then available at the url /my-prefix/myFile.txt
Sometimes its good to have a static assets folder where all your assets live.
Returns the Express App instance.
Instance
:
ExpressJs app instance.
#getRoutes
Returns the internal routing table.
Returns the internal routing table.
array
:
routes which have been registered
#launch
Launches the Express app. Called by the app.load event.
Launches the Express app. Called by the app.load event.
#setMiddleware(route, handler, method)
Adds a middleware handler to the internal routing table passed to Express. Accessed with 'middleware' gather.
Adds a middleware handler to the internal routing table passed to Express. Accessed with 'middleware' gather.
#setRoute(method, route, handler)
Adds a route to the internal routing table passed to Express. Accessed with the 'route' gather.
Adds a route to the internal routing table passed to Express. Accessed with the 'route' gather.
#setStatic(prefix, path)
Adds a path to serve static files.
Adds a path to serve static files.
#stop
Stops the express app. Called by the app.stop event.
Stops the express app. Called by the app.stop event.


数组中和为定值的多元组
LeetCode 1. Two Sum Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice. Example: Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1]. 解析


This example demonstrates how to display a DICOM Segmentation object.
Sample data is from the dicom4qi connectathon event to be held at RSNA 2017. This is test dataset #2


This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.
It uses utility classes for typography and spacing to space content within the larger container.
Learn moreDestroy the blinds scoot butt on the rug. Why must they do that spend six hours per day washing, but still have a crusty butthole.  Bathe private parts with tongue then lick owner's face kitty pounce, trip, faceplant you didn't see that no you didn't definitely didn't lick, lick, lick, and preen away the embarrassment. 𝕄𝔼𝕆𝕎 cat is love, cat is life. Attack feet if it fits, i sits so making sure that fluff gets into the owner's eyes or unwrap toilet paper for rub against owner because nose is wet.
Annoy the old grumpy cat, start a fight and then retreat to wash when i lose find a way to fit in tiny box. Refuse to leave cardboard box stare at ceiling light for and sometimes switches in french and say "miaou".


caret-color: red;
caret-color: auto;
caret-color: transparent;
Enter text in the field to see the caret:


WITNESS LIST Criminal Jurisprudence Committee April 9, 1997-2:00P HB 86 For: Longoria, Rep. John (Himself) Against: Macha, Barry (Himself) On: Weeks, David P. (TDCAA) HB 161 For: Garrett,Jr. Rev. Frank (Himself) HB 244 For: Hampton, Keith S. (TCDLA) Thompson, Rep. S. (Herself) On: Curtis, Lon (TDCAA) Weeks, David P. (TDCAA) Registering, but not testifying: Against: Evans, Jimmy (Himself) Macha, Barry (Himself) Wallace, Sherri (Dallas Co Crim Dist Att) HB 508 For: Dunne, Jimmy (Himself) Dutton, Rep. (Himself) On: Curtis, Lon (TDCAA) Weeks, David P. (TDCAA) Registering, but not testifying: For: Jacobson, Jay (ACLU of Texas) Woodford, Suzy (Common Cause, TX) Against: Evans, James (Himself) Macha, Barry (Himself) Wallace, Sherri (Dallas Co. Crim Dist At) Williams, Judge John (Justice/Peace/Cons Asso) HB 700 For: Keel, Rep. Terry (Himself) Registering, but not testifying: For: Ott, Judge Patricia (Justices/Peace/Con Asso) Williams, Judge John (Justices/Peace/Con Asso) HB 845 For: McReynolds, Rep. (Himself) Registering, but not testifying: For: Igo, Shanna (TX Municipal League) Against: Hampton, Keith (TCDLA) HB 1758 For: Hamric, Rep. Peggy (Herself) Registering, but not testifying: For: Kesseler, Bill (Harris Co. Sheriff Dept) HB 1949 For: Burton, Randy (Justice for Children) HB 2040 For: Gregg, Brock (Assoc TX Prof Educators) Hayes, patricia (TX Classroom Teach Asso) Registering, but not testifying: For: Hartman, Eric (TX Federation of Teach) Wall, Marjorie (TSTA) HB 2272 For: Thompson, Rep. S. (Herself) Wilson, Dianne (County Clerk's Leg Com) Registering, but not testifying: For: Allison, Jim (County Judges/Comm.Asso) Groomer, Cindy (County/District Clerks) Porter, Quentin B. (TX Court Clerk's Assoc) Wendel, Susan (TX Assoc. of Counties) Wolbrueck, Bonnie (County/District Clerks) HB 2282 For: Dunne, Jimmy (Texans Against Gun Viol) Farrar, Rep. Jessica (Herself) Smith, Dave (Texans Against Gun Viol) Tucker, Deborah D. (Texans Against Gun Viol) Registering, but not testifying: For: Elfant, Bruce (Himself) HB 2288 For: Davis, John (El Paso Dist Atty) Against: Macha, Barry (Himself) On: Curtis, Lon (TDCAA) Weeks, David P. (TDCAA) Registering, but not testifying: Against: Evans, James (Himself) HB 2303 For: Griffin, Nick (Harris Co Sheriff) HB 2516 For: Chavez, Rep.Norma (Herself) Davis, John (El Paso District Atty) Hengen, Elaine S. (City of El Paso) Against: Morton, Robert (Naturist Action Comm) HB 2629 For: Brawner, Charles (School District Pol, TX) Gregg, Brock (TX Prof Educators Asso) Hamilton, Ray (Greater SA Crime Prev) Hayes, Patricia (TX Classroom Teach Asso) Kyle, Stella (San Antonio Crime Prev) Ramirez, Edward (Greater San Antonio Com) Registering, but not testifying: For: Hartman, Eric (TX Federation/Teachers) Wall, Marjorie (TX State Teachers Asso) HB 2829 On: Jermstad, Todd (TDCJ) HB 2830 For: Coffey, Karen (TX Auto Dealers Assoc) Registering, but not testifying: For: Balch, Mandy (TX Financial Services) Kelley, Sam (TX Consumer Finance) Lee, Randy M. (Stewart Title Guaranty) Welch, Jack (TX Retailers Assoc) On: Boggus, Wally (Secretary of State) HB 2874 For: Brawner, Charles (TX Gang Investigat Asso) Goodman, Rep. Toby (Himself) Ogg, Kim (City of Houston Mayor) Against: Hampton, Keith (TCDLA) Registering, but not testifying: For: Lyons, Steve (Houston PD) Paniague, Joe (FT Worth City Council) Weeks, David P. (Himself) HB 3022 Against: Draper, Robert (National Safety County) Registering, but not testifying: For: Igo, Shanna (Texas Municiapal League) Ott, Judge Patricia (Justices/Peace,Constab) Williams, John H. (Justices/Peace,Constab) On: Templeton, Bobbie F. (TXDOT) HB 3375 For: Griffin, Nick (Harris Co. Sheriff) Hamric, Rep. Peggy (Herself) SB 78 For: Collier, Keely R. (NAACP) Garrett, Jr. Rev Frank (Himself) McClendon, Rep.Ruth (Herself) Registering, but not testifying: For: Mintz, David (Jewish Coalistion, TX)