Keystroke shortcuts, or hotkeys, provide quick access to the features of Nuke. The following tables show these keystrokes.
The following conventions apply to instructions for mouse-clicks and key presses.
• LMB means click or press the left mouse button.
• MMB means click or press the middle mouse button
• RMB means click or press the right mouse button.
• When you see the word “drag” after a mouse button abbreviation (i.e., “MMB drag”), this tells you to press and hold the mouse button while dragging the mouse pointer.
• Keystroke combinations with the Ctrl, Alt, and Shift keys tell you to press and hold the key and then type the specified letter.
For example, “Press Ctrl+S” means hold down the Ctrl key, press S, and then release both keys.
NOTE: On Mac OS X, replace the Ctrl key with the Cmd key.
NOTE: Keystrokes in the tables appear in upper case, but you do not type them as upper case. If the Shift+modifier does not appear before the letter, just press the letter key alone.
NOTE: This section assumes you are using the default keyboard and mouse-button assignments. If the mouse buttons do not work for you as described here, try resetting the mouse control type back to the standard Nuke setting (Edit > Preferences > Viewers > 3D Control Type = Nuke).
|
Keystroke(s) |
Action |
|
/ |
Search by node name or class. |
|
Alt+G |
Go to a specific frame. |
|
Alt+I |
Display script information, such as the node count, channel count, cache usage, and whether the script is in full-res or proxy mode. |
|
Alt+S |
Make the active (floating) window fullscreen. |
|
Alt+Shift+S |
Save script and increment version number. (See also Shift+Ctrl+S under Viewers.) |
|
Ctrl+F# |
Save current window layout. The # represents a function key number, F1 through F6. |
|
Ctrl+I |
Open new Viewer window. |
|
Ctrl+LMB on panel name |
Float panel. |
|
Ctrl+N |
Launch a new project window in a new instance of Nuke. |
|
Ctrl+O |
Open a script file. |
|
Ctrl+Q |
Exit Nuke. |
|
Ctrl+T |
Cycle through tabs in the current pane. Note that this does not work if the focus is on the input pane of the Script Editor. |
|
Ctrl+U |
Enable or disable previewing output on an external broadcast video monitor. |
|
Ctrl+Y |
Redo last action. |
|
Ctrl+Z |
Undo last action. |
|
Shift+Ctrl+S |
Save script and specify name (Save As). (See also Alt+Shift+S under Viewers.) |
|
Shift+S |
Open the Nuke Preferences dialog. |
|
Space bar (short press) |
Expand the focused panel to the full window. |
|
Space bar (long press) |
Raise the right-click menu. |
|
Tab |
Auto-complete Python commands in the Script Editor. |
|
Keystroke(s) |
Action |
|
up or down arrow |
Increment (up) or decrement (down) the value in a parameter field. Click first on the field or press Tab to move focus to the parameter. |
|
Alt+LMB on a close (x) button |
Close all properties panels in the Properties Bin. |
|
Alt+LMB drag |
Increment (drag left) or decrement (drag right) while dragging over the value in a parameter field. |
|
Alt+R or Ctrl+R |
Fit Properties Bin to open panels. |
|
Ctrl+A |
Select all nodes in the Properties Bin. |
|
Ctrl+Enter (NUM) |
Close the current panel. |
|
Ctrl+LMB |
Reset slider value to default. |
|
Ctrl+LMB on a close (x) button |
Close all properties panels in the Properties Bin except the one clicked on. |
|
Ctrl+LMB drag |
Link values between parameter fields. |
|
Ctrl+Return |
Close panel (no parameters selected). |
|
Ctrl+Tab or Shift+Ctrl+Tab |
Move to next tabbed page (Ctrl+Tab) or the previous tabbed page (Shift+Ctrl+Tab) in the properties panel. |
|
LMB drag |
Copy the current value from one parameter field to another. |
| MMB drag on a numeric field | Activate a virtual slider. |
|
Return |
Chooses selected UI control (default = OK). |
|
Shift+Ctrl+A |
Close all open properties panels. |
|
Shift+LMB drag |
Copy animation (curve or expression) from one parameter field to another. |
|
Tab or Shift+Tab |
Move focus to next (Tab) or previous (Shift+Tab) parameter. May need to click on a parameter first, to establish the focus inside the properties panel. |
|
Keystroke(s) |
Action |
|
+ |
Zoom-in (= also zooms-in). See also LMB+MMB. |
|
- |
Zoom-out. |
|
\ |
Snaps all nodes to the grid. (See also Shift+\). |
|
# |
Opens a new Viewer window with # representing the number of the connection (0 to 9) you want to establish between the new Viewer and the selected node. |
|
. |
Inserts Dot node. |
|
up or down arrow |
Selects the previous or next node in the tree. |
|
Alt+up arrow |
Increment the version number in the selected node’s file name. |
|
Alt+down arrow |
Decrement the version number in the selected node’s file name. |
|
Alt+# |
Zoom-out by a specific percentage. The # represents a number between 0 and 9, with 0=10%, 1=100%, 2=50%, 3=30%, 4=25%, 5=20%, 6=16%, 7=14%, 8=12%, and 9=11%. |
|
Alt+B |
Duplicate and branch selected nodes. |
|
Alt+C |
Duplicate selected nodes. |
|
Alt+F |
Generate flipbook for selected node using FrameCycler. |
|
Alt+K |
Clone selected nodes. |
|
Alt+LMB drag |
Pan workspace. |
|
Alt+MMB drag |
Zoom-in / zoom-out workspace. |
|
Alt+Shift+K |
Remove selected nodes from clone group (declone). |
|
Alt+Shift+U |
Splay last selected node to input A. |
|
Alt+U |
Splay first selected node to input A. |
|
B |
Insert Filter Blur node. |
|
C |
Insert a ColorCorrect node. |
|
Ctrl |
Display connector dots. Drag one to set a dot and create an “elbow.” |
|
Ctrl+create node |
Replace selected node with the newly created node. NOTE: This does not work if you are creating the new node using a hotkey, such as T to create a Transform node. |
|
Ctrl+down arrow |
Move selected node downstream. |
|
Ctrl+up arrow |
Move selected node upstream. |
|
Ctrl+# |
Zoom-in by a specific percentage. The # represents a number between 0 and 9, with 0=1000%, 1=100%, 2=200%, 3=300%, 4=400%, 5=500%, 6=600%, 7=700%, 8=800%, and 9=900%. |
|
Ctrl+G |
Nest selected nodes inside a Group node, replacing the original nodes with the Group. |
|
Ctrl+Alt+LMB on a node |
Open the node’s properties panel in a floating window. |
|
Ctrl+Alt+G |
Replace selected Group node with the nodes nested inside it. |
|
Ctrl+A |
Select all nodes in the Node Graph or group window. |
|
Ctrl+B |
Node buffer toggle. When this is on, the output from the node is cached or kept in memory, so that it can be read quickly. A yellow line displays under the node to indicate that the caching is on. |
|
Ctrl+C |
Copy selected nodes. |
|
Ctrl+D |
Disconnect upstream node from selected node. |
|
Ctrl+Alt+Shift+G |
Nest selected nodes inside a Group node, keeping the original nodes in the layout. Ctrl+Enter opens the new Group node. |
|
Ctrl+LMB on a node |
Highlight all upstream nodes. |
|
Ctrl+P |
Toggle proxy resolution, as defined on the Settings properties panel. (See also Ctrl+P under Viewers.) |
|
Ctrl+Return |
Open window for selected group node. |
|
Ctrl+Shift+/ |
Opens the Search and Replace dialog for the selected Read or Write nodes. |
|
Ctrl+Alt+A on a node |
Select all nodes in the node tree |
|
Ctrl+Shift+LMB on a node |
Select all upstream nodes. |
|
Ctrl+W |
Close current script file. |
|
D |
Disable / enable selected node. |
|
Delete |
Remove selected nodes. |
|
F |
Fit the selected nodes (or if no nodes are selected, the entire node tree) to the Node Graph panel or group window. |
|
F12 |
Clear buffers. |
|
G |
insert a Grade node. |
|
I |
Display information for selected node. |
|
K |
Insert Copy node. Note that for this to work, you first need to click on the Node Graph to select it. If you have selected the Viewer, pressing K stops playback. (See K under Appendix A: Hotkeys.) |
|
LMB+MMB |
Drag to zoom in the Node Graph. |
|
M |
Insert Merge node. |
|
MMB |
Hold and drag to pan in the Node Graph. Click to fit selected nodes (or entire tree) to screen. |
|
N |
Rename the selected node. |
|
O |
Insert Roto node. |
|
P |
Insert RotoPaint node. |
|
R |
Insert a Read node. NOTE: Pressing R with an existing Read node selected, opens the file browser at the location specified by that node. |
|
Return |
Open panel for selected node(s). |
|
Shift+\ |
Snaps selected node to the grid. (See also \ under Appendix A: Hotkeys.) |
|
Shift+0, 1, 2, 3, ... |
Connect the selected node to Viewer as reference input. |
|
Shift+create node |
Create a node in a new branch of the node tree. |
|
Shift+drag |
Duplicate selected arrow. |
|
Shift+A |
Insert an AddMix node. |
|
Shift+Ctrl+C |
Set color for selected nodes. |
|
Shift+Ctrl+X |
Extract selected nodes. |
|
Shift+U |
Splay selected nodes to last selected node. |
|
Shift+X |
Swap A/B inputs on selected node. |
|
Shift+Y |
Connect second selected node to the output of the first selected node. |
|
Tab |
Open a text field where you can enter the first letters of a node name to bring up a list of matches. Press Return to insert a node from the list. |
|
T |
Insert a Transform node. |
|
U |
Splay selected nodes to first selected node. |
|
W |
Insert a Write node. |
|
Y |
Connect first selected node to the output of the second selected node. |
|
Keystroke(s) |
Action |
|
Alt+Ctrl+V |
Paste knob values. |
|
Backspace |
Erase or Delete Left. |
|
Ctrl+B |
Left justify selected text. |
|
Ctrl+C |
Copy. |
|
Ctrl+E |
Move cursor to end of selected text. |
|
Ctrl+F |
Right justify selected text. |
|
Ctrl+K |
Delete text from the cursor to the next space. |
|
Ctrl+N |
Bottom justify selected text. |
|
Ctrl+P |
Top justify selected text. |
|
Ctrl+V |
Paste. |
|
Ctrl+X |
Cut. |
|
Shift+Ctrl+V |
Paste (see Ctrl+V). |
|
Keystroke(s) |
Action |
|
- |
Zoom-out. (See also LMB+MMB.) |
|
+ |
Zoom-in (= also zooms-in). |
|
. |
Gain display, increase. |
|
; (semicolon) |
Switch to the previous view in a multi-view project. |
|
‘ (forward single quote) |
Switch to the next view in a multi-view project. |
|
! |
Turn on Viewer “blend,” split-screen display. (See also W under Viewers for toggle on/off). |
|
{ |
Show / hide top toolbar. |
|
} |
Show / hide bottom toolbar. |
|
0, 1, 2, 3, ... |
Establish a numbered connection (1 - 9, 0) between the selected node and the active Viewer. Displays the node’s output in that Viewer. |
|
Shift+0, 1, 2, 3, ... |
Connect reference inputs to Viewer. |
|
Numeric keypad |
Nudge on-screen controls left, right, up, or down. (See also Shift+numeric keypad under Appendix A: Hotkeys.) |
|
Right arrow |
Step forward one frame. |
|
Left arrow |
Step back one frame. |
|
, (comma) |
Gain display, decrease. |
|
‘ (accent key) |
Show / hide all Viewers. |
|
A |
Display the alpha channel or the channel displayed in the list at the top of the Viewer. |
|
Alt+left arrow |
Previous keyframe. |
|
Alt+right arrow |
Next keyframe. |
|
Alt+# |
Zoom-out by a specific percentage. The # represents a number between 0 and 9, with 0=10%, 1=100%, 2=50%, 3=30%, 4=25%, 5=20%, 6=16%, 7=14%, 8=12%, and 9=11%. |
|
Alt+G |
Go to specific frame. |
|
Alt+LMB drag |
Pan inside the Viewer window. |
|
Alt+MMB drag |
Zoom in (drag right) or out (drag left) in the Viewer window. |
|
Alt+P |
Open the controls of the currently active Viewer process. |
|
Alt+R |
Resize Viewer to image (see also Ctrl+R under Viewers). |
|
Alt+Shift+R |
Resize Viewer and image to fit frame. |
|
Alt+W |
Activate the ROI feature, or if a ROI exists, clear the current ROI. Drag to define a new ROI. (See also Shift+W under Appendix A: Hotkeys.) |
|
Alt+Z |
Toggle lock/unlock the Viewer to a specified zoom level for all inputs. |
|
B |
Display blue channel / RGB toggle. |
|
Backspace |
Cycle through Viewer inputs in reverse order. If wipe is active, cycles through inputs on the left-hand side. |
|
Ctrl+right arrow |
Move to midpoint between current frame and next keyframe/last frame. |
|
Ctrl+left arrow |
Move to midpoint between current frame and previous keyframe/first frame. |
|
Ctrl+# |
Zoom-in by a specific percentage. The # represents a number between 0 and 9, with 0=1000%, 1=100%, 2=200%, 3=300%, 4=400%, 5=500%, 6=600%, 7=700%, 8=800%, and 9=900%. |
|
Ctrl+Alt+LMB |
Sample a single pixel’s color value from the node’s input while viewing its output. (See also Ctrl+LMB under Appendix A: Hotkeys.) |
|
Ctrl+Alt+Shift+LMB |
Sample range of pixels from the node’s input while viewing its output. (See also Ctrl+Shift+LMB under Appendix A: Hotkeys.) |
|
Ctrl+LMB |
Sample a single pixel’s color value from the Viewer. (See also Ctrl+Alt+LMB under Appendix A: Hotkeys.) |
|
Ctrl+P |
With the mouse pointer over the Viewer, this keystroke toggles pixel aspect ratio between square and non-square, according to the setting of the default format under the Settings properties panel. This is not the same as toggling proxy resolution (see also Ctrl+P under Appendix A: Hotkeys). |
|
Ctrl+R |
Resize Viewer window to image (see Alt+R under Appendix A: Hotkeys). |
|
Ctrl+Shift+LMB |
Sample range of pixels from the Viewer. (See also Ctrl+Alt+Shift+LMB under Appendix A: Hotkeys.) |
|
Ctrl+U |
Enable or disable previewing output on an external broadcast video monitor. |
|
End |
Go to last frame. |
|
Esc |
Close Viewer. |
|
F |
Fit image to Viewer. |
|
G |
Display green channel / RGB toggle. |
|
H |
Fill image in Viewer. |
|
J |
Play backward. |
|
K |
Stop playback. Note that for this to work, you first need to click on the Viewer to select it. If you have selected the Node Graph, pressing K inserts a Copy node. (See K under Appendix A: Hotkeys.) |
|
L |
Play forward. |
|
LMB+MMB |
Drag to zoom in the Viewer. |
|
M |
Display Matte, or alpha channel as transparent overlay. |
|
MMB |
Drag to pan inside the Viewer window. Click to fit Viewer to frame. |
|
O |
Show / hide overlays. |
|
P |
Disable (pause) the display refresh of the Viewer. |
|
R |
Display red channel / RGB toggle. |
|
RMB (or press and hold the spacebar) |
Display Viewer menu. |
|
S |
Display Viewer Settings dialog. |
|
Shift+left arrow |
Move left on the timeline by the specified increment amount. |
|
Shift+right arrow |
Move right on the timeline by the specified increment amount. |
|
Shift+A |
Display “other” channel / RGB toggle. Current input only. (Default = Alpha). |
|
Shift+B |
Display Blue channel / RGB toggle. Current input only. |
|
Shift+Backspace |
Activate Wipe. Cycle images on right side. |
|
Shift+Ctrl+R |
Resize Viewer to maximum and fit image. |
|
Shift+F |
Maximum Viewer window toggle. |
|
Shift+G |
Display Green channel / RGB toggle. Current input only. |
|
Shift+L |
Display Luminance / RGB toggle. Current input only. |
|
Shift+M |
Display Matte / RGB toggle. Current input only. |
|
Shift+numeric keypad |
Nudge on-screen controls left, right, up, or down by increment. (See also Numeric keypad under Appendix A: Hotkeys.) |
|
Shift+R |
Display Red channel / RGB toggle. Current input only. |
|
Shift+W |
Region of interest (ROI) toggle. (See also Alt+W under Appendix A: Hotkeys.) |
|
Tab |
2D / 3D view toggle. |
|
U |
Update Viewer display. Used when Pause is active (press P). |
|
W |
Toggles Viewer “blend,” split-screen display, on/off. This was previously called the “wipe” mode. (See also ! under Appendix A: Hotkeys). |
|
Keystroke(s) |
Action |
|
Alt+LMB |
Translate Viewer perspective on y (drag up/down) or z (drag left/right). |
|
Alt+MMB |
Zoom Viewer perspective in (drag right) or out (drag left). |
|
Alt+RMB |
Rotate Viewer perspective on x (drag up/down) or y (drag left/right). |
|
Ctrl+LMB |
Rotate Viewer perspective on x (drag up/down) or y (drag left/right). Ctrl+LMB on the 3D view mode button activates Interactive mode. |
|
Ctrl+L |
Toggle between Unlocked and Locked 3D view mode for selected Camera or Light. (See Ctrl+LMB if you want to activate the Interactive mode.) |
|
Ctrl+Shift+LMB |
Rotate Viewer perspective on z. |
|
Shift+C |
3D view, bottom orthographic. |
|
Shift+X |
3D view, left-side orthographic. |
|
Shift+Z |
3D view, back orthographic. |
|
Tab |
3D / 2D view toggle. |
|
V |
3D view, perspective. |
|
X |
3D view, right-side orthographic. |
|
Z |
3D view, front-side orthographic. |
|
Keystroke(s) |
Action |
|
C |
Toggle between Clone and Reveal tools. |
|
Ctrl+A |
Select all points. |
|
Ctrl+Alt+click (when editing a stroke/shape) |
Add a point to a stroke/shape. |
|
Ctrl+click (when editing points) |
Break tangent handles for selected points. |
|
Backspace (on the stroke/shape list) |
Delete an item from the stroke/shape list. Note that if the RotoPaint node is selected in the Node Graph, pressing Backspace deletes the entire node. |
|
Ctrl+click (when drawing a Bezier or B-spline shape) |
Sketch a Bezier or a B-spline shape. |
|
Ctrl+drag (when the Clone or Reveal Tool is active) |
Set the offset between the source and destination. |
|
Ctrl+Shift+drag (when the B-spline Tool is active) |
Increase (drag right) and decrease (drag left) tension of the B-spline shape. |
|
Ctrl+Shift (when the transform box is active) |
Drag the transform box points to move them. |
|
D |
Toggle between Dodge and Burn tools. |
|
Delete |
Remove selected points. |
|
E |
Increase feather for selected points. |
|
I |
Pick color. |
|
N |
Toggle between Brush and Eraser tools. |
|
Q |
Toggle between Select All, Select Curves and Select Points tools. |
|
Return (when the Bezier or B-spline tool is active) |
Close shape. |
|
Shift+click (when drawing a Bezier shape) |
Create a sharp point on the previous point. |
|
Shift+click (when editing points in a stroke/shape) |
Bring up a transform box for the points selected. |
|
Shift+drag (when editing points in a Bezier or B-spline shape) |
Move both tangent handles at the same time. |
|
Shift+drag (when the Brush, Eraser, Clone or Reveal tool is active) |
Change brush size. |
|
Shift+E |
Remove feather outline from selected points. |
|
Shift+Z |
Make selected points linear (Cusp). |
|
T (when Select tool active) |
Display a transform box (for points) or a transform jack (for a whole shapes). |
|
T (when Clone tool active) |
Show/hide source as onion skin with transform box/jack. |
|
Z |
Make tangent handles horizontal on selected points (Smooth). |
|
V |
Toggle between Bezier, B-Spline, Ellipse and Rectangle tools. |
|
X |
Toggle between Blur, Sharpen, and Smear tools. |
|
Keystroke(s) |
Action |
|
Alt+D |
Toggle the always in the Dope Sheet box on the node’s properties panel. When active, the node always displays in the Dope Sheet, instead of just displaying when its properties panel is open. |
|
Alt+LMB drag |
Pan inside the Curve Editor or Dope Sheet. |
|
Alt+Shift+LMB drag |
Move a single point, leaving any other selected points where they are. |
|
Alt+MMB drag |
Variable zoom: zoom in or out on the x or y axis only. |
|
C |
Change interpolation of selected control points to Cubic. |
|
Ctrl+A |
Select all curves. |
|
Ctrl+Alt+LMB |
Add a point to the current curve. In the Dope Sheet, add a keyframe. |
|
Ctrl+Alt+Shift+LMB drag |
Sketch points freely on the current curve. |
|
Ctrl+C |
Copy selected keys. |
|
Ctrl+E |
Copy expressions. |
|
Ctrl+L |
Copy links. |
|
Ctrl+LMB drag |
Remove horizontal/vertical constraint on moving points. |
|
Hold down Ctrl+Shift |
Hide points to make it easier to click on the selection box or transform jack. |
|
Ctrl+V |
Paste curve. |
|
Ctrl+X |
Cut selected keys. |
|
H |
Change interpolation of selected control points to Horizontal. |
|
K |
Change interpolation of selected control points to Constant. |
|
L |
Change interpolation of selected control points to Linear. |
|
LMB |
Select a single point on the curve. |
|
LMB+MMB |
Drag to zoom in the Curve Editor. |
|
LMB drag on blank space |
Draw a box to select multiple points. |
|
LMB drag on a point |
Move all selected points. |
|
LMB drag on a selection box |
Resize a selection box and scale the points inside. |
|
LMB drag on a transform jack |
Move all points inside the selection box. |
|
MMB or F |
Fit selection in the window. |
|
MMB drag |
Draw a box around an area and zoom to fit that area in the Editor. |
|
R |
Change interpolation of selected control points to Catmull-Rom. |
|
Shift+Ctrl+C |
Copy selected curves. |
|
Shift+LMB |
Add or remove points to/from selection. |
|
Shift+LMB drag |
Draw box to add/remove points to/from selection. |
|
X |
Break selected control points’ handles. |
|
Z |
Change interpolation of selected control points to Smooth (Bezier). |
|
Keystroke(s) |
Action |
|
Ctrl+[ |
Step back to the previous statement. |
|
Ctrl+] |
Step forward to the next statement. |
|
Ctrl+Backspace |
Clear output pane. |
|
Ctrl+Enter (numeric keypad) |
Run the script in the Editor. |
|
Ctrl+Return |
Run the script in the Editor. |
|
Ctrl+Shift+[ |
Decrease the indentation level of selected text. |
|
Ctrl+Shift+] |
Increase the indentation level of selected text. |
|
Shift+Tab |
Decrease the indentation level. |
|
Tab |
Increase the indentation level. |
|
Keystroke(s) |
Action |
|
MMB |
Repeat the last item used from the menu. |
|
Keystroke(s) |
Action |
|
Ctrl+LMB |
Open the selected menu item in a floating window. |
|
Keystroke(s) |
Action |
|
Drag right or left (ona slider label or arrow button) |
Scrub the value up or down. |
|
Alt on a color wheel |
Activate absolute cursor positioning. |
|
Alt+drag right or left (on a slider label or arrow button) |
Scrub the value up or down slowly. |
|
Alt+LMB (on a slider label or arrow button) |
Decrement the value by 0.001. |
|
Alt+RMB (on a slider label or arrow button) |
Increment the value by 0.001. |
|
Ctrl on a color wheel |
Only affect the hue of the selected color. |
|
Ctrl+Shift+drag right or left on a color wheel |
Only affect the value of the selected color. |
|
LMB (on a slider label or arrow button) |
Decrement the value by 0.01. |
|
RMB (on a slider label or arrow button) |
Increment the value by 0.01. |
|
Shift+drag right or left (on a slider label or arrow button) |
Scrub the value up or down fast. |
|
Shift+LMB (on a slider label or arrow button) |
Decrement the value by 0.1. |
|
Shift+RMB (on a slider label or arrow button) |
Increment the value by 0.1. |
|
Shift on a color wheel |
Only affect the saturation of the selected color. |


COVID-19 ESTIMATOR
Population
Time to elapse
Reported Cases
Total Hospital Beds
Period Type
days
weeks
months
Submit
Estimations
Impact
Severe Impact


{% extends "report_base.html" %}
{% load static %}
{% load markdown_deux_tags %}
{% block title %}Towards better elections, report on Democracy Club’s work on the 2017 elections and the future of
digital services for democracy{% endblock title %}
{% block content %}
{% filter markdown %}
# Towards better elections — 2019
## Executive Summary
This report outlines Democracy Club’s work and its measurable effects from 1 June 2018 to 1 June 2019.
This period included by-elections throughout the year, scheduled local elections on 2 May and scheduled-but-unexpected
European Parliament elections on 23 May.
Democracy Club reports annually, based on what we call the ‘election year’, which assumes that there are always
scheduled elections at the beginning of May.
Our achievements included:
* maintaining national data infrastructure on elections for another 12 months, coping with an enormous set of local
election candidates and making nearly 100,000 edits to candidate data over the year;
* introducing automated data capture from official nomination papers, which sped up the volunteering process;
* building a combined API to make it easier to reuse elections data — with new partners such as Reach PLC’s In Your Area
website;
* covering over 75% of the May local elections electorate with polling location data (though this was down on last
year);
* serving data over 2,000,000 times across our own websites and those of partners, in order to help people take part in
the democratic process;
* establishing and demonstrating the feasibility of producing open data on elected representatives (notably
councillors);
* our highest ever user satisfaction ratings for WhoCanIVoteFor.co.uk at the European elections, and a 16-point rise in
user satisfaction for the local elections.
We had some notable failures this year too:
* not convincing the BBC to use our polling location data to run a finder on the BBC website, despite innumerable
meetings, (and the BBC also continued to use inaccurate election data);
* the rate at which we could provide information to voters beyond simply a name and party for local election candidates
was not much different than last year (though impressive in absolute figures) — and user satisfaction on
WhoCanIVoteFor.co.uk is still relatively low;
* we were unable to convert any significant number of the hundreds of thousands of people who viewed our donation
requests on WhoCanIVoteFor.co.uk and WhereDoIVote.co.uk
Our plans for 2019-2020 are detailed below. In brief, assuming a similar level of resourcing to this year, they include
maintaining election data throughout the year and through the scheduled local, mayoral, devolved and police area
elections in May 2020. We will remain prepared for any snap general election or referendum. We also plan to step up
advocacy work to press public institutions to take on some of the data infrastructure.
You can help by [donating to the club](https://democracyclub.org.uk/donate) or [volunteering your
time](https://democracyclub.org.uk/quests/). We work openly and always seek feedback on our work and plans: [you can see
our current and future workplans on Trello](https://trello.com/b/Tjrz79eE/dc-current-sprint).
Please [signup to the mailing list](https://democracyclub.org.uk/), [join us on
Slack](http://slack.democracyclub.org.uk), [message us on Twitter](https://twitter.com/democlub) or
[Facebook](https://www.facebook.com/democracyclub), or [email us via
hello@democracyclub.org.uk](mailto:hello@democracyclub.org.uk).
## Vision and Mission
This year the board established a new vision and mission statement.
Our vision is of a country with the digital foundations to support everyone’s participation in democratic life.
Our mission is to create those foundations by:
* Identifying areas for improvement in democratic engagement;
* Ensuring everyone has access to quality information on democratic processes, particularly on elections;
* Mobilising a non-partisan movement of volunteers for democracy.
## Review of the Year
At the beginning of this election year, June 2018, we set ourselves a range of goals, relating to the social impact we
aim to have.
Our goals are meant to contribute to our overall social impact, which we list as:
* Civic expectations of access to information about elections are met;
* Citizens feel better informed about elections, democracy;
* Sustainable increase in engagement with candidates or the elections process;
* Sustainable increase in turnout at elections;
* Sustainable improvement in trust in democracy; and a
* Sustainable increase in engagement of groups less likely to take part in democratic process.
* While we cannot show that our efforts this year lead to those outcomes, they serve as a reminder of our purpose. We
hope to continue to work with evaluation and research experts to better understand our social impact.
### Goals met or partially met
#### “Better use of volunteer time; more diverse volunteer-base, and more data… [and a] five percentage-point increase in satisfaction at WhoCanIVoteFor.co.uk”
In terms of better use of volunteer time, the year included a significant amount of technical work to improve the
codebase of Candidates, our candidate-data crowdsourcing website.
For the first time, we were able to automatically convert some of the official documents on election candidates
(published as PDFs on council websites) into machine-readable data. This increased the productivity of volunteers:
rather than have to copy-and-paste data, they can now simply check the robot’s collection efforts. It increased the
speed with which we got to full coverage of name and party data and freed up volunteer time to look for other useful
information about candidates.
In terms of a more diverse group of volunteers, we do not survey the volunteers, but throughout the crowdsourcing period
it did seem as though more candidates, campaign managers and local party representatives were involved this year.
Our goal of ‘more data’ was met simply by virtue of their being over 26,000 candidates standing at the local elections,
but we had hoped to have more than only name and party information for a higher proportion of candidates this year. At
the local elections, we had at least one contact detail for 20% of candidates, which was a drop of three points from
last year. However, we did better on statements to voters (11% of candidates had a statement this year vs 8% last year)
and better on photos (20% vs 15% last year).
For the local elections, the satisfaction score for Who Can I Vote For? was 38%, up 16 percentage points on last year.
At the European elections, the satisfaction score was 52%, which may be partially explained by the fact we had
information beyond name and party on nearly 90% of around 600 candidates.
#### “Two million uses of data via API-partners/our websites/widget at May 2019”
We did meet this target, but largely because we there were over a million requests around each set of elections: local
and European. Of the outputs we thought would get us there, we worked to develop partners to reuse the data. Another
planned output was an ‘ElectionEverything widget’ (i.e. a combined polling station information and candidate information
for any website), but this did not happen, due to an over-reliance on volunteers and pro-bono work. It remains on this
year’s goals list with a different approach.
#### “90% coverage of 18+ population with polling location data for elections in May 2019”
For the local elections, 178 councils sent us their polling location data. We imported it all, but this number was some
way short of the total number of councils holding elections. This meant that we covered 76% of the 18+ population for
the local elections.
For the European elections, more councils sent us data than we had a chance to import in the short time available. This
meant we could cover 58% of the 18+ population. We will consider the lessons from this for any snap general election and
for the long-term goal of achieving 100% coverage.
#### “Several outcomes relating to the ‘club’: better public understanding; 15,000 on the mailing list; 500 volunteers adding data; better funding; 75 monthly small donors; a more diverse group of volunteers”
Various outputs were planned to meet this goal. In brief, we did clarify the club’s vision and mission, create greater
board involvement and we did successfully fundraise to support the status quo, though not for expansion. The mailing
list grew to 20,000 and we had over 1,200 volunteers add data.
We failed to meet the individual small monthly donor target, despite our bright-coloured requests on our voter
information websites, nor did we sell a polling location finder to a council. We also failed to survey the members to
judge diversity, though some progress was made with the survey design and this would be a priority for any new
‘organiser’ hire.
#### “Better awareness of issues facing groups currently less likely to take part in democratic process”
The output here was to [produce a report on under-participating
groups](https://democracyclub.org.uk/reports/whos_missing/), a draft of which was published. This work is guiding some
of the suggestions we provide to other organisations and funders, and we plan to develop an executive summary of tasks
or tactics from it over the next year.
#### “50,000 uses of a lookup-your-representative tool; 500 downloads of a representatives CSV”
This was a stretch goal. The main planned output was a discovery process on councillor data, which we carried out in
October 2018. We identified an appetite for open representatives data and established that it could be produced and
managed inexpensively. The question is now more about resourcing: making the data available in a way that is accurate,
accessible and sustainable.
### Goals not met
#### “Polling station finder on BBC News homepage on May 2019 election day”
This goal was not achieved, though not for want of trying. While there were many meetings with BBC News staff, nobody
took the lead to arrange the small amount of development work necessary to add it to the BBC website. Relatedly, in [a
blog at the time of the local elections](https://democracyclub.org.uk/blog/2019/04/26/138-hours-go/), we showcased some
examples of where the BBC published wrong information to voters. Our WhereDoIVote.co.uk website was at least linked to
from the BBC News liveblog on the election days.
#### “10,000 reminders sent for May elections; 20% survey respondents say they wouldn’t have voted without it”
We had hoped to begin work on an Election Reminders service, but little progress was made here. We planned to start with
a discovery process on user needs, technical requirements and sustainability. We remain cautious about the project
without a plan to measure its effect and without a route to sustainable funding.
#### “Help improve other institutions working on democratic engagement in the UK”
The outputs we hoped to produce here were a report or event on The Electoral Commission and voter information, as well
as a report on ‘what good looks like for digital+democracy in the UK’. Neither of these were produced, but importantly,
we maintained conversations with the commission and contributed to some of their internal documents throughout the year.
The Constitution Unit at University College London published a report on voter information that is highly relevant to
our work: [Doing Democracy
Better](https://www.ucl.ac.uk/constitution-unit/news/2019/mar/new-report-doing-democracy-better).
### Goals that did not apply
#### “In the event of a general election, help 10m people gain knowledge about election”
There was no general election, but we maintained a plan for an unscheduled election, which included listing and
preparing potential freelance hires and sources of funding. This work will continue through next election year as
necessary.
## The Year In Data
### Elections Data
#### Coverage
We are confident that we covered every scheduled and unscheduled election of district council level and above for
2018-2019. We have now done this for over 18 months.
This data is crowdsourced with the help of robots that monitor political discussion boards and local authority websites.
#### Partners
Around scheduled elections, our elections data is used by The Electoral Commission on YourVoteMatters.co.uk, as well as
by Reach PLC (owner of many local newspapers) for their “In Your Area” website, a kind of local news and marketplace
live feed.
This year no partner used the by-election data, but we began conversations to provide ongoing by-election data to aid a
new voter registration product for university students.
#### Reach/use
The elections dataset was used every time a postcode lookup was made via a Democracy Club service. This means the
elections data powered over two million data uses.
#### Analysis
This was our first full election year where all local elections were covered.
The partnership with Reach PLC was our first nationwide news partnership to use local election data served at the local
level. We hope to enter into more partnerships of this kind.
Given our ability to cover all elections, there remains a good opportunity to create an election reminders application.
However, this hinges on our ability to pay for it and to test its effect.
Our scheduled elections data is more accurate than that used by BBC News: ours covers by-elections, ours checks that
each ward in a council area in fact does have an election, rather than assuming all do, and our system can deal with
countermanded or cancelled elections. We will continue to advocate for the use of our data to better serve citizens.
### Candidates Data
#### Coverage
We collected candidate data throughout the year for every by-election: 767 different individuals, some of whom stood for
more than one election.
We recorded candidates data for every scheduled election and by-election on 2 May 2019 — around 26,000 candidates. For
the local elections in May, we recorded at least one contact detail (any social media presence or email address) for
20.8% of the candidates (vs 23.5% in 2018). We had statements (text from the candidate explaining why voters should give
them their vote) for 10.8% of candidates (vs 8% in 2018) and a photo of 19.9% of candidates (vs 14.7% in 2018).
We also collected data (email addresses, websites, social media accounts) on local branches of political parties, in an
effort to provide some more information to users, which seemed particularly important where there was no additional
information available about a candidate.
At the European elections, we collected data on 591 candidates. We had at least one contact detail for all but 79
candidates, although because voters (except in Northern Ireland) voted for a party rather than a candidate, this may
have been less important than at the local elections. We also collected the major parties’ European election manifestos,
where they were available.
### Partners
For the scheduled local elections on 2 May, the candidates API was used by The Electoral Commission to power a list of
names on the YourVoteMatters website. As above, a new partnership with Reach PLC saw them also publish local candidate
information to their users.
These partnerships remained in place for the European elections, though with information on parties rather than
candidates, due to the voting system used.
There may have been many other organisations using the data via the CSV download, but we do not currently track usage
here.
### Reach/use
This year we moved to a combined API that gave access to both candidates data and polling locations data with a single
postcode lookup. This means that a user may have been looking for candidates information, but will have received both
candidates information and polling location information. Below we simply count all uses.
Around the local elections, the total number of uses of candidates data was around 530,000. Rounded to the nearest
5,000, this was made up of: 265,000 uses of WhoCanIVoteFor.co.uk, 155,000 uses of Your Vote Matters and 110,000 uses of
In Your Area.
Around the European elections, the total number of uses of candidate data was around 680,000. Rounded to the nearest
5,000, this was made up of: 170,000 uses of WhoCanIVoteFor and via 340,000 uses at Your Vote Matters and 170,000 uses at
In Your Area.
We cannot track the reach of the CSV downloads.
### Analysis
The scheduled local elections saw the largest group of candidate details we have ever had to crowdsource. It was thus
convenient that we were able to introduce some level of automatic conversion of name and party data from official
documents, which sped up the volunteering task considerably.
We are still at a relatively low level of additional information on candidates (i.e. anything beyond name and party)
even though the absolute numbers of bits of useful data collected were high this year.
While there may always be a number of ‘paper candidates’ — those who stand simply to get a party name on the ballot
paper but do not actually campaign — we should be able to improve on the proportion of candidates with contact info
and/or a statement to voters in future. Improvements to both the Candidates website and to our communication with
political parties are priorities.
In terms of data use, we aim to add some kind of survey alongside the CSV download in order to understand who is using
the data and why.
### Polling Locations Data
#### Coverage
From a total of 249 councils with scheduled local elections in May 2019, 178 councils sent us polling location data or
provide the data via an API. We imported all of this data and thus estimate that we covered 76% of the 18+ population
(if excluding Northern Ireland, which has its own finder provided by the Electoral Office for Northern Ireland, or 71%
including Northern Ireland). This is down on the near 90% achieved last year.
From a total of 371 councils with European elections in May 2019, i.e. all of England, Wales and Scotland (again,
Northern Ireland has its own finder), 251 councils sent us data or provided the data via an API. As explained below, we
were unable to import all of the councils’ data, and estimate we covered 58% of the 18+ population (exc. Northern
Ireland or 56% inc. Northern Ireland).
We do not currently have the resources to provide the polling location finder for by-elections without payment from
local councils. We outline this offer on our website, but no council took us up on the offer in this election year.
#### Partners
For both sets of elections, The Electoral Commission’s Your Vote Matters website, Reach PLC’s In Your Area and the
Labour Party were partners that consumed the data. We also ran WhereDoIVote.co.uk and the polling location finder
widget.
#### Reach/use
Around the local elections, the total number of uses of the data was over 1,100,000, roughly equally split between
WhereDoIVote.co.uk and from API users.
Rounded to the nearest five thousand, the API use at the local elections was made up of:
WhoCanIVoteFor.co.uk
255,000
Your Vote Matters
155,000
In Your Area
110,000
Labour Party
30,000
Widget
20,000
Others
5,000
Around the European elections, the total number of uses of the data was nearly 1,300,000, of which 900,000 uses were
between 10pm on 22 May and 10pm on 23 May. This time, the split between WhereDoIVote.co.uk and the API users was around
475,000 and 797,000 respectively.
Rounded to the nearest five thousand, the API use at the European elections was made up of:
Your Vote Matters
340,000
WhoCanIVoteFor.co.uk
220,000
In Your Area
170,000
Labour Party
40,000
Widget
20,000
Others
10,000
#### Analysis
We had a lower level of coverage for the scheduled local elections this year. We are not entirely sure why. Not all
councils send us data, partly due to software issues (there are only four electoral management software systems, and
only three can export the data we need).
The European elections were the first occasion in which we have been provided with more data than we could import. This
was due to the short timeframe between the announcement of the elections and polling day: there was not sufficient time
to clean and query anomalies in the data that is necessary to reach a level of accuracy we were happy to make public.
In the next election year, we will outline how coverage for the finder can be increased to 100% over time, and hope to
work to develop a plan to meet this goal working with stakeholders such as The Electoral Commission.
### Results Data
#### Coverage
Thanks to the quietly efficient work of a small group of Democracy Club volunteers, we have typically had results for
every by-election entered into the system within hours of their declaration, over the year.
#### Partners
There were no external partners who used the results data.
#### Reach/use
We consume results data on our Who Can I Vote For? service, as we find that a small proportion of users return to the
site after the election to learn who won. For example, following the scheduled local elections, there were 24,000
visitors over Friday 3 through Monday 6 May.
#### Analysis
Typically, UK news media organisations simply report on the numbers of councillors elected and control of the council.
While this is important, it is not hard to imagine that voters would like to easily be able to find out the name(s) of
their new local councillor(s) shortly after the election.
We thus hope to encourage wider use of election results data by partners such as Reach PLC’s In Your Area, BBC News or
Facebook. The latter did use 2017 General Election results, providing users with information via a “You have new
representatives” product in their users’ newsfeeds, but they have never engaged with data regarding the local elections
in this way.
## The Year in Apps
We run websites that consume the open data we produce: WhoCanIVoteFor.co.uk and WhereDoIVote.co.uk, named after the most
popular online searches on election days.
### WhoCanIVoteFor.co.uk
#### Use
WhoCanIVoteFor.co.uk shows by-election and by-election candidate information all year round. The website received 41,000
visitors from June 2018 through to the end of the year, an average of 1,350 visitors per week.
As the local elections approach, the traffic increases. From January 2019 through to the weekend after the local
elections, there were 264,000 unique visitors to WhoCanIVoteFor.co.uk, some 165,000 of them arriving in the week of the
local elections.
From Monday 6 May to the weekend after the European elections, there were 172,000 unique visitors to the website,
120,000 of them arriving in the week of the elections.
The website is increasingly linked to from council websites, as well as all kinds of media or community organisations,
including a mention in the BBC News liveblog, tweets from Dazed magazine, and posts in local community groups on
Facebook.
#### Feedback from users
From the start of the year to 5 May, a period in which most users were presumably looking for local election
information, we received 11,363 bits of feedback and a satisfaction score of 38% (i.e. 38% of those who gave feedback
tapped on or clicked the thumbs-up icon). While it is disappointing that a large majority were not satisfied, the number
is a strong improvement on 22% the previous year. Either users’ expectations fell or we managed to provide more of what
they were looking for.
From 5 May to 31 May, a period in which most users were presumably looking for European election information, we
received 2,687 bits of feedback with a 52% satisfaction score, the highest we have ever achieved. This is presumably
down to there being fewer, but more high-profile candidates, or perhaps because the electoral system gave people a
broader choice.
We analysed some of the [qualitative feedback on WhoCanIVoteFor.co.uk in this blog
post](https://democracyclub.org.uk/blog/2019/06/27/users-have-spoken/). In short: voters were looking for information,
such as candidates’ positions, on Brexit; some voters assumed that the service was provided by the government; and some
were looking for information we did not provide.
### WhereDoIVote.co.uk
#### Use
From midnight Monday 29 April through Thursday 2 May, the week of the local elections, the website saw 707,000 unique
visitors, with most traffic coming from the link in the Facebook newsfeed.
From midnight Monday 20 May through Thursday 23 May, the week of the European elections, the website saw 816,000 unique
visitors, again with most traffic from Facebook.
Many local authorities now link to the site too.
#### Feedback from users
For those users who we were able to serve with an answer (a polling location), we collected 11,388 responses over 20 May
through 23 May with a 93% satisfaction rate, a small reduction from last year’s 96%. We assume that those who do not
receive a polling location will be unsatisfied.
The dip in satisfaction among those who did find their polling location may be as a result of the Facebook link to ‘See
Election Info’: users may have expected more information than only a polling location.
The reason we seek partnerships with Facebook et al is so that we can push information to people who may not have looked
for it proactively. We saw some good anecdotal feedback of this happening:
> “I wasn’t aware that the vote was today. Great job letting me know and giving additional information i.e where to go,
what I need etc”
> “I wasnt aware there was a vote until I saw it on FB”
> “Super helpful, I might not have bothered voting without this info!”
Simultaneously, we also found we had more comments from people who did not find the site helpful, because they either
already knew where to vote, did not plan to vote or were not registered. These people would not have independently
sought out the site, and left feedback such as:
> “Not registered”
> “Already had this information thanks.”
> “Voting is a waste of time”
### Polling Location Finder Widget
This widget allows any website owner to help their users find out where to vote. It’s powered by our data.
This year, we recorded 18,524 uses at the local elections and 19,526 uses at the European elections.
## The Year in Labs
### Representatives Data Discovery Project
A ‘stretch goal’ for the year was to investigate the possibility of providing open data on all representatives. We aimed
to learn about the technical feasibility, the user needs and whether a sustainable income could be identified to pay for
its upkeep.
We spent a week focusing on the issue and [wrote a series of blog posts on the technical and sustainability
challenges](https://democracyclub.org.uk/blog/2018/10/22/wrapping-our-research-representatives-now/).
In short: producing open, structured data on our political representatives seems technically feasible without a great
deal of work: perhaps costing just £100,000/yr.
There was no immediate sign of a source of revenue that would warrant an attempt to begin a full representatives data
project, but we hope to continue conversations about this subject with interested parties in future.
## The Year in the Club
### Members and Volunteers
#### Members
Currently, we count anyone on the mailing list as a member. This year passed 20,000 mailing list subscribers and we have
5,000 twitter followers and 1,000 Facebook followers. We hope to survey members and measure engagement more deeply this
year.
#### Live events
We ran crowdsourcing parties (‘SoPN parties’ — for the Statements of Persons Nominated before an election) in the run up
to the local elections, as in previous years.
For the first time, we crowdsourced the running of these events, with volunteers stepping up to host. As a result,
volunteers and staff hosted events in Bath, Belfast, Birmingham, Cambridge, Huddersfield, London and Stroud. Attendance
was small, particularly in the smaller cities and towns that hosted, but served to both bring on board new volunteers
and conduct valuable user testing of the crowdsourcing website.
#### Online volunteers
This year, 1,218 volunteers contributed data via 97,548 edits to the candidates database. This mostly involves adding
data for the scheduled elections, but there is a small group of volunteers that ensures all by-elections are covered. Of
the total, 896 volunteers were new this year and they collectively made 32,656 edits.
Our Slack group has now been joined by 400 members, with perhaps 50 people regularly contributing to ask or answer
questions about democratic process or elements of our technology.
### Finance and Governance
#### Finance
Our financial year runs from March to March. [See our latest return via Companies
House](https://beta.companieshouse.gov.uk/company/09461226). During the last election year, we secured new funding from
Garvin Brown and the Joseph Rowntree Charitable Trust, as well as continued support from Unbound Philanthropy and via
selling services to The Electoral Commission.
#### Funding policy
This year, we developed a [funding policy and a record of all previous donations over
£5,000](https://democracyclub.org.uk/about/funding/).
#### Small donors
In an effort to grow the number of small, regular donors, which we have traditionally seen as the most secure and
democratic form of funding, we added a donation request to every result page of WhoCanIVoteFor.co.uk and
WhereDoIVote.co.uk for the local and European elections. Hundreds of thousands of people will have seen this donation
form and we tested different versions of the message, but none resulted in any significant click-through rate, and
overall the project generated just two new regular donors, one from each of Who and Where.
This lack of clicks and donations may relate to the short amount of time that a user uses the site or the belief that
this information is or should be provided by the public sector. We’ll continue to think about small-donor fundraising in
future, perhaps in the form of a crowdfunder for any unscheduled election.
#### Governance
The board continues to meet quarterly to review finance and strategy. An away-day in September 2019 helped produce the
new vision and mission statement above. There were no changes to the membership of the board during this election year.
## What’s Next?
### Goals for the Next Election Year
We believe digital information on elections is likely to lead to outcomes such as a sustainable increase in:
* meeting civic expectations of access to information on the democratic process;
* # of citizens informed about elections and the democratic process,
* engagement with candidates or the elections process,
* engagement by groups normally less likely to take part in democratic process,
* turnout at elections, and
* trust in democracy.
These outcomes are broad and not yet all measured, nor can we clearly attribute our own work to any change in them, but
they serve as useful indicators of our purpose.
Our goals for the election year 2019-2020 are as follows. This assumes funding remains at a similar level to last year.
* 1.5m people reached with voter information for 2020 local / mayoral / Police and Crime Commissioner (PCC) elections
* 10m people reached with voter information in the event of a snap general election or nationwide referendum
* 100% coverage of elections and basic candidate information for all by-elections and scheduled elections through May
2020
* 90% coverage of polling location data for the electorate with scheduled local elections in May 2020
* At least one new consumer of our by-election data
* Five-point rise in % of candidates for whom we have information beyond name and party affiliation
* Five-point rise in satisfaction on WhoCanIVoteFor.co.uk
* Our websites meet new accessibility requirements
* Our websites function and remain secure
* We provide better opportunities for club members
* We better understand the user needs of underrepresented audiences
* A statement is made by an institution of the UK state, which confirms that it plans to take on some election data
provision
You can view our [outcomes, goals and inputs for 2019-2020 in this
matrix](https://docs.google.com/spreadsheets/d/1xGS1KPeLeyEZicnLPDjPTFAt7T91gnxBrMbKLYnGAnw/edit#gid=0) and we welcome
feedback.
We have further plans ready to implement in the event we can secure significant additional funding over the next year.
## Acknowledgements
As always, none of this would be possible without the volunteers of Democracy Club who spend thousands of hours adding,
checking and cleaning data, or who help maintain our systems through their advice and expertise.
Thanks to the board for assisting with finance and governance, and thanks to our donors: Unbound Philanthropy, the
Joseph Rowntree Charitable Foundation and Garvin Brown.
Thanks also to The Electoral Commission and local governments for their expertise, help and support.
## How to Help
Want to help build a better democracy? Get news and requests via our our mailing list at
[democracyclub.org.uk](https://democracyclub.org.uk).
For more day-to-day chatter and calls for help, [join our Slack](http://slack.democracyclub.org.uk).
Join the open [Google Group](https://groups.google.com/forum/#!forum/democracy-club) to start your own email
discussions.
And of course, if you are able, please also [support our work with a monthly
donation](https://democracyclub.org.uk/donate/).
*Humber bridge photo credit: [darrenflinders](https://www.flickr.com/photos/darrenflinders/16392247548/in/photolist-qYwy6J-p93hyD-kjsbX-nvAC68-jRaed-eLMoiK-e9Ex9f-6X4mKD-4Qzorv-4QDxcu-ogWqkq-8zk7m4-kWdoL-9wRqW-nvTwHe-pTBQ9j-jR9TF-pscSPJ-gAaXWy-8DwmaS-2cUYTub-r9qvMb-edG9E6-2cCbuxZ-kjsp4-dywKio-2cb3bj-dULEU-8EbuJ5-2coa8X-WFHkJG-5bpSWP-6zTrfh-neoZ9j-7foVyM-6eCrqN-ocpB2-bBPDqc-egLptL-CxC4VN-keBc61-y8GVC2-52SqG5-9S61Pg-byhw2B-dWz99q-siv3fp-2cWo7WF-qWVz6n-oU18dh)*
{% endfilter %}
{% endblock content %}


You've entered an incorrect username/password combination.
Check your information again.
Passwords do not match.
Username is taken.
Double check your email.
Email is taken.


I have a raspberry pi running at home taking care of some home networking/automation stuff. I may at times find myself in a need to log into the Pi while not at home to check up on things. Without a dedicated public IP address this often proved a difficult task. Earlier I was using an ngrok tunnel for this. Read more about ngrok here. The problem with this was that ngrok would give me a different URL every time the Pi reboots. To get around this, I was using a system where I would send an email to a gmail account set up specifically for the Pi and the Pi would respond back with the ngrok URL. I will write a post about this later and link it here. Since I ran into some issues with this, I decided to go a different route which this article is about.
To access your home server from anywhere in the world, you would need a middleman SSH server on the cloud. For this, I have setup an instance on AWS. If you are new to AWS, you can basically setup an instance for free (there are caveats, read about it here).
I used an Ubuntu 18.04 image that was eligible for free tier usage in AWS.
The basics of how a reverse SSH tunnel works is this.
By creating a reverse SSH tunnel from the local machine(Raspberry pi at home) to the middleman server(AWS instance), you are creating a tunnel for the middle man server to connect back to the local machine. Essentially, you are mapping a socket(combination of an IP address and a port number) on the remote machine to a socket on the local machine. Through this connection, you will be able to SSH from the remote machine to the local machine even though the local machine may be behind a NAT device.
## Basic Architecture
## How its done.
Here is how you can create a reverse ssh tunnel from the local machine to the remote machine.
ssh -R 7070:localhost:22 root@<ip of aws instance>
Let’s examine the above example.
Here we used the -R flag to specify remote entry point. The exact syntax of using this is -R [bind_address:]port:host:hostport. In our case this would be localhost:7070:localhost:22. The first localhost is the address on the remote machine where the remote entrypoint should be. We skipped this in the example because it is by default localhost. The port 7070 is the TCP port on the remote machine which will listen for SSH connections to the local machine. The next localhost refers to the local machine from which the tunnel is created. The port 22 at the end is the local port (default SSH port) to which connections will be forwarded from port 7070 on the remote host.
Once the tunnel is created,You can see the remote machine listening on TCP port 7070 with netstat run on the remote machine.
netstat -tnlp| grep 7070
tcp 0 0 <IP_ADDRESS>:7070 <IP_ADDRESS>:* LISTEN 1621/sshd: root@pts
you can SSH into the local machine from the remote machine as below.
ssh root@localhost -p 7070
Basically, we are creating an SSH tunnel from the remote machine(AWS instance) to itself(localhost) on port 7070. This will be connected to the local machine(Raspberry Pi).
What we see above is how a simple reverse SSH tunnel is set up. However, I had some additional requirements to satisfy.
Here is how I tackled these problems.
Note
I first added the SSH keys to the AWS instance on my local machine.
ssh-keygen
cat aws-ssh-key.pem >> ~/.ssh/authorized_keys
Here aws-ssh-keys.pem is the ssh key file downloaded from AWS.
I first created a bash script that starts a TMUX session and runs creates the reverse SSH tunnel from it. This is a good place to read up on TMUX. Its definitely worth the read.
Here is the script.
The IP address and SSH port of my AWS instance is redacted for security.
#!/bin/bash
n="connectoverwatch"
if [ $(tmux list-sessions | grep $n) ] ; then
tmux kill-session -t $n
tmux new -d -s $n
else
tmux new -d -s $n
fi
tmux send-keys -t $n 'ssh -vvv -Nf -R 7070:localhost:22<EMAIL_ADDRESS>-p xx &' C-m
Then, I borrowed some code from https://github.com/frdmn/service-daemons and made the script into a service named connectoverwatch.
Now I could start and stop the service and it would start with startup.
service connectoverwatch status
● connectoverwatch.service - LSB: Example
Loaded: loaded (/etc/init.d/connectoverwatch; generated; vendor preset: enabled)
Active: active (running) since Sat 2018-11-10 00:53:30 PST; 42min ago
Docs: man:systemd-sysv-generator(8)
Process: 444 ExecStart=/etc/init.d/connectoverwatch start (code=exited, status=0/SUCCESS)
Memory: 10.4M
CPU: 1.612s
CGroup: /system.slice/connectoverwatch.service
├484 tmux new -d -s connectoverwatch
├485 -zsh
└920 ssh -vvv -Nf -R 7070:localhost:22<EMAIL_ADDRESS>-p xx
Nov 10 00:53:29 jarvis systemd[1]: Starting LSB: Example...
Nov 10 00:53:30 jarvis connectoverwatch[444]: Starting 'connectoverwatch'... done
Nov 10 00:53:30 jarvis systemd[1]: Started LSB: Example.
I could also attach to the TMUX session and view the verbose output from my reverse SSH tunnel.
The idea here is to bind the remote entry point TCP port to <IP_ADDRESS> so that I can SSH to the remote host on the remote entrypoint port (7070) and be immediately connected to my local machine.
The defaule SSHD configuration does not allow this.
To do this, i had to unconnect and change the below line in the file /etc/ssh/sshd_config,
From
#GatewayPorts no
To
GatewayPorts yes
Now that gateway ports is enabled, I needed to let connections over port 7070 reach the AWS instance. Hence I had to edit the Security Group associated with my instance on AWS and add the below.
Now, to specify the bind address on the remote entrypoint, I edited the line which creates the tunnel in initial script as below.
tmux send-keys -t $n 'ssh -vvv -Nf -R <IP_ADDRESS>:7070:localhost:22<EMAIL_ADDRESS>-p xx &' C-m
Basically, I just added <IP_ADDRESS>: to the -R flag.
Now, whenever my Raspberry Pi starts, I could SSH to it from anywhere in the world as below.
ssh root@<AWS instance IP> -p 7070
This same method can be used to create forwarding for other ports from the remote machine to the local machine.
For example:
ssh -vvv -Nf -R <IP_ADDRESS>:80:localhost:80<EMAIL_ADDRESS>-p xx
The above example could be used to access a web server running locally behind a NAT device from the internet.
An example use case would be using this method to remotely access a home surveilence system securely. Though, if you are doing something like this, I wouldn’t recommend exposing the remote entrypoint port to the internet to avoid the extra step of logging into AWS instance.


| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
| 0 | ? |
Sũji-Q is a simple application to help you learn your Japanese numbers. It includes a Quiz mode so you can test yourself, or an Entry mode so you can quickly "LookUp" a number. Numbers are spelled for you in english characters so you can practice saying them as well.
The inspiration for Sũji-Q came on a recent trip to Japan. My wife is Japanese, so she was an invaluable guide to this apps creation. While we were in Japan, I noticed that I could pick out the numbers in conversations that people were having around me, and once I got the numbers, I could kinda figure out what the conversation was about. So I wrote Sũji-Q to quiz myself.
The name came from the Japanese "Sũji" for number, and "Q" for quiz. All graphics, images and artwork are pictures my wife and I took while in Japan.


Team info Edit Team Info
Team role: Team leader
Team role: Team member
Team member
Member waiting list
Member invite list Add member


Honda Refused To Reveal Stolen Accord's Location
All because the owner didn’t buy one feature.
by Jay TraugottHaving your car stolen is one of the worst feelings in the world. The good news is that there are a lot of preventative and location finding technologies out there, many of which are offered directly from the automaker. There's only one hitch: you have to pay for them as extra features. On top of that, not every car buyer is made aware they even exist, let alone available for purchase. Such is the situation of Laydh Ablhd.
According to Global News, Ablhd purchased a new 2019 Honda Accord recently only to discover one morning it had been stolen from his driveway at around 5 a.m. Fortunately, video security footage from a neighbor's camera revealed the three thieves breaking in and driving away, and Ablhd immediately called the police. Both he and the police officer called Honda Canada after realizing there was a good possibility the stolen Accord could be tracked thanks to modern tech installed in the vehicle.
The good news is that they were correct. A Honda call center operator told Ablhd and the police officer he could see the Accord's location. The bad news? Because Ablhd did not purchase HondaLink, the operator refused to reveal the car's location – despite the fact this was also a police investigation. Honda Canada describes HondaLink as an "emergency response system… designed to get you the help you need when you need it most." HondaLink is also available in the US. Why didn't Ablhd buy HondaLink when he bought the car? Because the dealership didn't even mention it. "I would have bought it," he said if he had known its many benefits.
The police officer's pleas with HondaLink to reveal the car's location amounted to nothing, even after being transferred to a supervisor. "Get a warrant" was the supervisor's response. Ablhd, out of options, decided right then and there to pay $148 CAD for a HondaLink subscription but by then it was too late; the Accord's signal had disappeared.
Not only is Ablhd angry about the entire situation, he also doesn't plan to buy another Honda. Honda Canada, in response to a Global News inquiry, said proper protocols were followed.
"This customer did not have an active HondaLink subscription, which is required to locate the vehicle," a company spokesperson stated. "Without an active subscription, the police would have to present a warrant to activate the location services on the vehicle and no such warrant was provided. At no time was Honda or its HondaLink provider aware of the location of this vehicle."
On the plus side, Honda agreed to reimburse Ablhd the $148.


i-Rate
Home
(current)
Post a review
Add Restaurant
Dropdown link
Action
Another action
Something else here
Add Restaurant
Restaurant Name*
Please enter a Restaurant Name
Restaurant Type*
Please select a restaurant type
Grill
Fast food
Sea food
Take away
Please enter a Restaurant Type
Submit


Globally strategize client-centric manufactured products before holistic architectures. Efficiently maximize.
Globally strategize client-centric manufactured products before holistic architectures. Efficiently maximize.
Globally strategize client-centric manufactured products before holistic architectures. Efficiently maximize.
Dynamically communicate inexpensive manufactured products through worldwide technology. Efficiently foster.
LEARN MOREDynamically communicate inexpensive manufactured products through worldwide technology. Efficiently foster.
LEARN MOREDynamically communicate inexpensive manufactured products through worldwide technology. Efficiently foster.
LEARN MORE"Distinctively evisculate customer directed synergy and scalable customer service. Appropriately synthesize resource-leveling alignments without installed base schemas. Holisticly embrace bricks-and-clicks."


--- title: Email Client Support Scoreboard layout: default permalink: /scoreboard/ ---
This page ranks email clients based on their support among the {{ site.features.size | default: "many" }} HTML and CSS features listed on Can I email.
(Because every test is done manually, some features might not have been tested on every email client.)


Number of disk
Select moving direction
T1 to T2
T2 to T3
T3 to T1
T1 to T3
T3 to T2
T2 to T1
Start
Pause
Moving speed


Working at School
I got my first real programming job at Chico State's Department of Science Education during my senior year.
Here is where I really started working with JavaScript and using jQuery.
I was fortunate enough to be able to work directly with Dr. Benjamin Van Dusen on campus, which made scheduling around my classes a breeze. My role there was to leverage JavaScript libraries to construct graphs and export webpages to pdf for users of the LASSO platform.
Tools used


Politico
Menu
Vacant Public Office
Id
Name
Type
Action
General
Political Parties
Political Office
Contestants
Results
Vote
Logout


Control which critical event email notifications to receive from OpenShift Online.
Email notifications for project {{projectName}} will be sent to {{requester}}


A Deep Learning based Age Estimation Tool from Facial Images
To be updated soon.
Releasing Soon.
Feel free to email us to provide some feedback on , report any bugs or know more about the product.
dush dot dhyani at gmail dot com


Hunger is a Solvable Problem
The bad news: 1 in 9 Americans experience food insecurity according to USDA estimates. But the good news is, this isn't due to a lack of food but rather an ineffective food redistribution system. In fact, nearly one third of the food supply, or 133 billion pounds of food, goes to waste each year.
We want to change that. Replate's technology seeks to solve the logistical issues that result in millions of hungry Americans by creating an efficient food recovery and redistribution platform. We work with leaders in the food and restaurant space as well as with trustworthy nonprofits to divert food waste away from the landfill and to those in our community who need it most.


| Version: | 7.4.1 |
|---|
Nikola tries fairly hard to be compatible between versions. However, there were a few areas which were getting clunky, and needed fxing. So, here's what you may need to change in your site.
If you need to change anything else, or something breaks, please write at nikola-discuss and I'll add further tweaks here.
Themes
- NOTE
- There is no equivalent for the jinja-default theme yet. If you have a custom, jinja-based theme, upgrading is probably a bad idea right now.
Themes have been renamed:
- site => bootstrap
- orphan => base
Theme added:
- base-jinja
Themes have been moved out of nikola and into nikola-themes:
- default => oldfashioned at nikola-themes
- jinja-default => not there yet, coming soon
- monospace => monospace at nikola-themes
- site-reveal => reveal at nikola-themes
You may have to change your THEME setting, or change the parent if you are using a custom theme. Also, some templates have been tweaked, but nothing should break for you.
Facebook comments support changed the HTML tag to:
<html %if comment_system == 'facebook': xmlns:fb="http://ogp.me/ns/fb#" %endif lang="${lang}">
If you do not want to use Facebook comments, you can leave the old <html lang="${lang}"> tag in and it will work just fine.
Comments
If you want a custom theme to support comment systems other than disqus, you will need to:
- Replace mentions of disqus_helper.tmpl with comments_helper.tmpl
- Replace mentions of html_disqus with comment_form
- Replace mentions of html_disqus_link with comment_link
- Replace mentions of html_disqus_script with comment_link_script
If you don't, your theme should work just fine, but support only disqus comments.
Configuration
A number of options have been renamed. In most cases, the behaviour should be exactly as before.
However, post_pages was split into POSTS and PAGES. Long story short, anything that had a True as the use_in_feeds (last) value goes to POSTS and anything with False goes to PAGES. For example:
post_pages = ( ("posts/*.txt", "", "post.tmpl", True), ("stories/*.txt", "p", "story.tmpl", False), ("stories/*.html", "s", "story.tmpl", False), ) ### becomes ### POSTS = ( ("posts/*.txt", "", "post.tmpl"), ) PAGES = ( ("stories/*.txt", "p", "story.tmpl"), ("stories/*.html", "s", "story.tmpl"), )
Also, you will get warnings. That doesn't mean things broke. They are there to inform you of what's happening, and that you need to tweak your config.
All the deprecated options will work during the v6 cycle, and only be removed in v7, when those warnings will become errors.


Before Change
with open(file_name, "r") as fr:
firstline = fr.readline()
if firstline != "from six.moves import urllib\n":
with open(dummy_file_name, "w") as fw:
fw.writelines(["from six.moves import urllib\n",
"opener = urllib.request.build_opener()\n",
"opener.addheaders = [("User-agent", "Mozilla/5.0")]\n",
"urllib.request.install_opener(opener)\n\n"])
fw.write(firstline)
for line in fr:
fw.write(line)
if os.path.exists(dummy_file_name):
os.remove(file_name)
os.rename(dummy_file_name, file_name)
After Change
file_name = mnist.__file__
dummy_file_name = os.path.join(os.path.dirname(file_name), "mnist_dummy.py")
with open(file_name, "r") as fr, open(dummy_file_name, "w") as fw:
origin_text = fr.read()
mnist_head = origin_text.find("class MNIST(")
reasource_head = origin_text.find("resources = [", mnist_head)
reasource_tail = origin_text.find("]\n", reasource_head)
top = origin_text[:reasource_head]
reasource = "resources = [("https://ossci-datasets.s3.amazonaws.com/mnist/train-images-idx3-ubyte.gz", "f68b3c2dcbeaaa9fbdd348bbdeb94873"),("https://ossci-datasets.s3.amazonaws.com/mnist/train-labels-idx1-ubyte.gz", "d53e105ee54ea40749a09fcbcd1e9432"),("https://ossci-datasets.s3.amazonaws.com/mnist/t10k-images-idx3-ubyte.gz", "9fb629c4189551a2d022fa330f9573f3"),("https://ossci-datasets.s3.amazonaws.com/mnist/t10k-labels-idx1-ubyte.gz", "ec29112dd5afa0611ce80d1b7f02629c")]\n"
bottom = origin_text[reasource_tail + 2:]
fw.write(top)
fw.write(reasource)
fw.write(bottom)


PicoContainer Web Axis 1 support provides two implementations of Axis service providers that use the org.picocontainer.web.PicoServletContainerFilter to instantiate service classes and resolve their dependencies.
These are: org.picocontainer.web.axis.PicoMsgProvider and org.picocontainer.web.axis.PicoRPCProvider.


This is the implementation of beta version of google reCaptcha v3 as per following documentation: https://developers.google.com/recaptcha/docs/v3
First you need to inject the class in your component / service and then use Execute method with your action. Once you have the token, you need to verify it on your backend to get meaningful results. See official google documentation for more details.
| Site key |
|
| Action |
|


tsvx: Strictly typed TSV format with metadata
TSV is a nice format. It's human-readable, very fast to parse, and concise. It's possible to process as a streaming format.
It's also painfully hard to work with due to lack of standardization and typing. Each file requires a different set of heuristics to interpret. Those heuristics might break 80GB into a 100GB file, when an oddball case comes up. Those heuristics also translate into a tremendous amount of unnecessary ETL work. Even importing a TSV/CSV into a spreadsheet causes a dialog to pop up.
This is a proposal for an enhanced TSV format. If this proposal is successful, a spreadsheet would be able to open a MySQL export without prompting the user for help, and most data will flow freely between tools like pandas, tableau, R, and others (excepting issues of formatting and precision).
tsvx files are a tab-separated format, where:
- Columns are statically typed, with declared types, and standardized string escaping, dates, and similar for other data types.
- We standardize column headers which provide metadata about column names, types, and contents.
- We standardize overall metadata for overall file description, providence, creation time, authors, and otherwise.
This is repository includes a simple parser for such files so we can experiment with this concept. It also includes scripts to export from MySQL, both on a table level and on a whole database level.
What tsvx looks like
title: Food inventory
created-date: 2016-10-29T15:25:29.449640
---------------------
Food Name Weight Price Expiration Date
foodname weight netprice exp (variables)
str int float ISO8601-date (types)
String Number Number String (json)
---------------------
Tuna 300 5.13 2017-10-12
Salmon 150 7.18 2018-10-12
Swordfish 250 9.41 2016-11-13
...
Why?
We have nice standards for documents (XML, as well as other markup languages). We have nice standards for objects and configuration data (YAML and JSON). While numerical and tabular data is becoming increasingly important, we don't have any nice standards for representing it; it is all very ad-hoc.
It is also increasingly being interchanged across tools. We see organizations which have terabytes of data in systems like Hadoop and Vertica, gigabytes in databases and flat files, and kilobytes of hand-curated data in spreadsheets, all of which is integrated in common systems.
Our design goals are:
- Human-readability
- Compatibility. Excel, Google Docs, Hadoop, LibreOffice, MySQL, PostgreSQL, Python, R, Vertica, and other tools should open each other's imports and exports, maintaining basic type information without additional scripting.
- Simple parsing. Processing scripts are simpler and less brittle. With tsvx, adding a column or changing column order doesn't break scripts.
- In-Line Documentation. We have many TSV files sitting around, often years old, and no idea of what they contain, or how to regenerate them on current data.
- Backwards-compatibility. A tsvx file should open reasonably in spreadsheets unaware of tsvx
- Fast, single-pass processing. tsvx files are usable up to perhaps 10GB of data.
- Extensibility. If it becomes popular, it should be able to replace formats from tools like mysqldump with something less ad-hoc.
Status
We are in a request-for-comments period. If we decide this is a good idea, we'll make this more production-ready, and perhaps draft an IETF RFC or similar standard.
File Structure
The file has three sections:
- File metadata (optional) -- Information about the file itself.
- Column headings (required) -- Metadata about the names and types in the columns
- Data (required) -- What one might traditionally find in a TSV file.
Sections are separated by a line of all dashes, containing at least three dashes. If the first section is omitted, the file should start with a line of dashes.
File Metadata
The metadata is a YAML dictionary. The first line must contain a colon, but we recommend having all lines in this format. Standard fields include:
authors
-- JSON list of authorscreated-date
-- ISO8601 date and time of when the file was createddescription
-- A multiline descriptiongenerator
-- Some identifier of the program or source which created the filemodified-date
-- ISO8601 date and time of last modificationtitle
-- A single line title/description
Headers/Column Metadata
First line of the headers are human-readable column headers
(required). Following lines define additional information about each
column. Required is types
, which says how the data ought to be
interpreted. Currently defined types are:
ISO8601-date
-- Date as2014-12-30
ISO8601-datetime
-- Date and time as2014-12-30T11:59:00.01
bool -- Boolean.
trueor
false`float
-- Floating point number, either containing a space or otherwiseint
-- Integerstr
-- JSON-encoded string (quotes omitted)
As a fallback, we strongly recommend a json section. All columns should be defined as one of three JSON types:
Boolean
--true
orfalse
Number
-- Integer or floating pointString
-- Most other data types fall into this category
If this is missing, parsers should treat unrecognized types as strings.
variables
is also strongly recommended. variables
gives useful
variable names to assign in a program. These should be letters,
numbers, and underscores, but may not begin with a number. This is
convenient for automatic parsers and parser generators.
In addition, there may be headers for other metadata, such as units, or vendor extensions.
Vendor Extensions
Vendors may add arbitrary extensions to both metadata and headers. The
keys should begin with a program name and a dash. For example, mysql
could add rows called mysql-types
and mysql-keys
to the headers,
which would allow imports/exports to maintain both type information,
and which columns are unique. mysql
could also place global column
metadata (such as multi-column constraints or storage engine) in the
file-wide metadata with keys such as mysql-constraints
and
mysql-engine
, or just in its own YAML section.
Such extensions should pay close attention to human readability.
Getting started
This is a before-and-after example of the same code, with a TSV file in Python, versus with a tsvx file and the library:
After:
for line in tsvx.reader(open("file.tsvx"))
do_some_stuff(line.foodname,
line.weight,
line.price,
line.expiration)
Before:
f = open("file.tsv")
# Skip headers
f.next()
# Break on tabs
split_lines = (l[:-1].split('\t') for l in f)
# Parse to types
parsed_lines = (
[l[0], int(l[1]), float(l[2]), dateutil.parser.parse(l[3])]
for l in split_lines
)
for foodname, weight, price, expiration in parsed_lines:
do_some_stuff(foodname, weight, price, expiration)
There is a also a small file in the repo, example/example.py
, which
shows how the prototype reference library works. Note that both the
API and file format are still mutable -- we are actively soliciting
feedback.
A More Complex File
And a more complex example, to show how extension fit in:
title: Food inventory
description: A sample tsvx file
created-date: 2016-10-29T15:25:29.449640
generator: myoffice.py
myoffice-version: 2.7
---------------------
Food Name Weight Price Expiration Date
foodname weight price expiration (variables)
str int float ISO8601-date (types)
kg dollars/kg (units)
String Number Number String (json)
VARCHAR(80) SMALLINT DOUBLE VARCHAR(20) (mysql-types)
primary (mysql-keys)
inventory shipweight gross exp (myoffice-schema)
%s %i %.2f YYYY-MM-DD (myoffice-format-strings)
---------------------
Tuna 300 5.13 2017-10-12
Salmon 150 7.18 2018-10-24
Swordfish 250 9.41 2016-11-13


Python is a scripting language like PHP, Perl, Ruby and so much more. It can be used for web programming
Python is a scripting language like PHP, Perl, Ruby and so much more. It can be used for web programming
Python is a scripting language like PHP, Perl, Ruby and so much more. It can be used for web programming


[§481M-16] Written receipts for cash or money order. A lessor shall provide the lessee a written receipt for each payment made by cash or money order. [L 1997, c 248, pt of §1]


| Number of Classes | Line Coverage | Mutation Coverage | Mutation Score |
|---|---|---|---|
| 2 | 57% | 27% | 23%
Killed: 20
Uncertain: 1
|
| Name | Line Coverage | Mutation Coverage | Mutation Score |
|---|---|---|---|
| ServerConfig.java | 100% |
36% |
38%
Killed: 15
Uncertain: 1
|
| SlowConfig.java | 16% |
10% |
11%
Killed: 5
Uncertain: 0
|


-
Entrepreneurs anonymous
www.economist.com
SEVEN years ago Joe Jones (not his real name) left his job with a big NASDAQ-listed company to strike out on his own.
-
The Secret Goldman Sachs Tapes
www.bloombergview.com
The public doesn't seem to understand just how dysfunctional our financial regulatory system is, Michael Lewis writes. That may change today with a ...
-
The Online Life Coach - The New Yorker
www.newyorker.com
The new app Cloverpop brings a Silicon Valley approach to helping users make major decisions.
-
The Next Big Thing In Responsive Design
www.fastcodesign.com
Responsive design has to go beyond optimizing for different screen sizes, write Code and Theory's Dan Gardner and Mike Treff.
-
iPhone camera evolution: How does the iPhone 6 camera compare to previous ...
snapsnapsnap.photos
How does the iPhone 6 camera stack up against previous hardware? In her ongoing series, professional iPhone photographer Lisa Bettany takes a hard ...
-
Property: Land of opportunity - FT.com
www.ft.com
The Brace & Limb building stands at 1125 Ninth Street in the small city of Altoona in central Pennsylvania. Its three modest storeys are handsome ...
-
Digital Business Technologies Dominate Gartner 2014 Emerging Technologies ...
www.forbes.com
By Hung LeHong and Jackie Fenn Gartner, Inc. Imagine this: As you leave for work in the morning, your house automatically turns down the heat and ...
-
Silicon Valley Has Officially Run Out of Ideas
www.slate.com
Every year the tech blog TechCrunch holds a competition for tech startups at its New York and San Francisco “TechCrunch Disrupt” conferences and ...
-
Coke reaps rewards after putting names on cans and bottles - Telegraph
www.telegraph.co.uk
Sales of Coke climb significantly after Coca-Cola start putting people's names on cans and bottles
-
Indian Mars Mission, Science in Action, Wild Weather and Melting Ice - BBC ...
www.bbc.co.uk
India is the first Asian country to successfully place a satellite into Mars' orbit
-
Francis Fukuyama: “I think we’re in for a really rough period over the ...
www.prospectmagazine.co.uk
Francis Fukuyama does two things in his latest book, “ Political Order and Political Decay ,” a sequel of sorts to “The Origins of Political Order,” ...
-
A 5-Year-Old Worries Voyager Will Get Lonely, Receives Best Answer Ever
io9.com
This is, hands down, the sweetest thing you'll hear today. A five-year-old named Timor from British Columbia has been having trouble sleeping because ...
-
Miss a Payment? Good Luck Moving That Car - NYTimes.com
dealbook.nytimes.com
The thermometer showed a 103.5-degree fever, and her 10-year-old’s asthma was flaring up. Mary Bolender, who lives in Las Vegas, needed to get her ...
-
Has Ello already blown it?
medium.com
In the blink of an eye, a new social network has appeared almost from nowhere.
-
Occupational Hazards of Working on Wall Street
www.bloombergview.com
Michael Lewis asks the big question about the army of Ivy League graduates, with seemingly endless career options, who wind up in finance: What ...
-
28 Inspiring Quotes on Leadership in Business
www.inc.com
Want to be inspired to lead? Follow these examples.
-
The 15 Best Browser Extensions to Improve Your Social Media Marketing
blog.bufferapp.com
A list of the best browser extensions for Chrome, Firefox, and Safari that can help you share better to Facebook, Twitter, and many more social media ...
-
A Brief History of Emoticons
mashable.com
You might think emoticons a relatively new "Internet" phenomenon, but evidence suggests they could date back to the 19th century — perhaps even ...
-
How Steve Jobs Reinvented Leadership.
www.forbes.com
by Gianpiero Petriglieri After revolutionizing the computer, music and publishing industries in his lifetime, Steve Jobs’ death has pointed out that ...
-
BlackBerry Passport Review: Back to Square One
online.wsj.com
With a huge square-shaped touch screen and innovative touch-sensitive physical keyboard, the BlackBerry Passport is focused squarely at the ...
-
Russian socialite coats her Mercedes in 1 million Swarovski crystals
autos.yahoo.com
Remember when girls used to bedazzle their cell phones? That craze seems to have now passed, but on the streets of London, England, a 21-year-old ...
-
How India Mounted the World’s Cheapest Mission to Mars
blogs.wsj.com
India has become the only nation so far to reach Mars on its first attempt. It will also have spent the least amount of money to do so.
-
Why India's Mars mission is so cheap - and thrilling
www.bbc.co.uk
India's Mangalyaan satellite is staggeringly cheap by Western standards - but it hopes to address some of the biggest questions on Mars, writes the ...
-
One in Five U.S. Workers Laid Off in Last Five Years, Report Says
blogs.wsj.com
One in five U.S. workers, nearly 30 million people, say they were laid off from their jobs in the last five years, according to a new survey that ...
-
Apple's Tim Cook: Martyr or visionary?
www.managementtoday.co.uk
Steve Jobs' suited successor, Tim Cook, may not excite the same quasi-religious fervour, but those who lament that Apple's heyday is behind it may ...
-
Women’s Pay Compared to Men’s From 1960 to 2013
blogs.wsj.com
In 1960, women could expect to make 61 cents for every $1 a man made. While the earnings gap has narrowed and women now earn 78 cents for every ...
-
The Comprehensive Guide to Content Marketing Analytics & Metrics | Content ...
www.curata.com
Is your content taking you on a journey to nowhere? This guide will help you measure the effectiveness of content across all channels.
-
Four Loko to Release Pumpkin Spice Flavor
www.complex.com
Four Loko is releasing a Pumpkin Spice flavor for you to enjoy this fall. Woof.
-
PeerIndex
www.seedrs.com
We help marketers use data from social networks to make better marketing decisions.


[The description]
You can invite others to take part in this poll by sending them the link (link) to this page. Please don't lose it - otherwise there is no way to access your poll. The current results are presented below.
| Choice | User 1 | User 2 |
|---|---|---|
| Choice 1 | 3 | 7 |
| Choice 2 | 8 | 2 |
| Choice 3 | 3 | 6 |
| Choice | Average Rating |
|---|---|
| Choice 1 | 2 |
| Choice 2 | 8 |
| Choice 3 | 3 |


All Classes
Constants
DBUtility
Event
EventController
EventList
EventService
ScheduleEvent
User
UserController
UserList
UserService
WADLControllerV2


Question:
Category: ${category}
${question}
${body}
${answer}
1: Bad - contains no useful information
2: Fair - marginally useful information
3: Good - partially answers the question
4: Excellent - fully answers the question
This is the best answer
${answer}
1: Bad - contains no useful information
2: Fair - marginally useful information
3: Good - partially answers the question
4: Excellent - fully answers the question
This is the best answer
${answer}
1: Bad - contains no useful information
2: Fair - marginally useful information
3: Good - partially answers the question
4: Excellent - fully answers the question
This is the best answer
Please Review The Following:
-- You must choose a rating for each answer
-- You must check check at least one answer as a best answer


If you change the question type, some of your current question data will be deleted
Your couch. It is mine.
I'm a cool paragraph that lives inside of an even cooler modal. Wins!


Remove a single stashed state from the stash list and
apply it on top of the current working tree state,
i.e., do the inverse operation of git stash save.
The working directory must match the index.
voidpush(string repositoryDir, string message)
Stash the changes in a dirty working directory away.


Fundamental components of computer programs:
Stores and manipulates information
The database design involves choosing:
E/R Modelling is used for conceptual design
Represent objects or things of interest
Entities are drawn as a box
Attributes are facts, properties, or details of an entity.
Represented a few different ways.
Relationships are an association between two or more entities.
An entity can participate in three types of relationships
Relationships are links between two entities
We can split a many to many relationship into two one to many relationships. A new entity represents the N:N relationship.
Look at your data and indentify
A university consists of a number of departments. Each department offers several programs. A number of courses make up each program. Students enroll in a particular program and take courses towards the completion of that program. Each course is taught by a professor from the appropriate department, and each professor advices a group of students.
A university consists of a number of departments. Each department offers several programs. A number of courses make up each program. Students enroll in a particular program and take courses towards the completion of that program. Each course is taught by a professor from the appropriate department, and each professor advices a group of students.
Entities: department, program, course, professor, student
Complete ER Diagram
Submit screenshot of running server
You may need to set permissions
mongod
mongo
Multiple documents make a collection
Enter a few documents into your collection. When you are done, list them using db.yourCollectionName.find()
db.collection.update()
If multi is set to true, all matching documents are updated. Else, only one document is updated.
Remove documents in the users collection with email<EMAIL_ADDRESS>the find method retrieves documents from a collection
An empty query document selects all documents in the collection. Not specifying a query document has the same effect.
db.users.find()
Use $in to match field values. The statement below matches documents in the users collection where the name field is peter or clark. For more query operators, see http://docs.mongodb.org/