WATCHDOG: Navigation Alarms
Version & Changes
Developer: Sean D’Epagnier
Maintainers: Rick Gleason, Jon Gough, Roel Smidt and the Plugin Team
Watchdog v2.4.24 for OpenCPN v5.4.2 was updated March 2021 and requires Opencpn v4.1.xxx or newer. This plugin now works with the new Plugin Manager integrated installation for multiple environments.
New alarms are:
Links
Source: Github Source
Releases: Github Releases
Forum: Cruiser’s Forum Watchdog Thread
What is Watchdog (WD)?
Watchdog Plugin,implements various configurable alarms to alert regarding changing conditions on the boat. Included are a Deadman-alarm, improved anchor alarm and Depth alarm.
Watchdog communicates with another very useful plug-in, called Ocpn_Draw. Ocpn_Draw is used to draw points, lines and shapes, guard zones and boundaries which can be used in navigation to show
-
Electronic bearing lines (EBL)
-
Variable range markers (VRM)
-
Specific points (Boundary-points)
-
Specific areas (Boundaries)
-
Special boundary which moves with the boat (Guard Zone)
These features of the oDraw-plugin can be used in Watchdog. Watchdog can alert you when your own ship
-
enters (or gets too close to) or
-
leaves (or gets too far away from)
one or more of these stationary Boundaries. Watchdog can also provide an alert when another ship (AIS-target) enters a Guard Zone Boundary(moving with your ship). Watchdog and Ocpn_Draw work together using boundary identifiers called GUID to provide some very useful alarms.
Watchdog will be referred to as "WD-pi" or "WD".
OpenCPN Draw Plugin will be referred to as "Draw-pi" or "OD".
The plugin was originally named "Watchman" but was later renamed to "Watchdog" which might seen in some screens and menu’s.
INSTALLATION
A. How to get WD_pi?
The easiest way to get Watchdog_pi is to use OpenCPN PI Package Installer and go to Options, Plugins and update the Master Plugin Catalog. You should find an icon to download the most current version of Watchdog_pi that works in your environment. Once the plugins downloads successfully, you will need to install it and then enable it with the checkbox.
The second best way is to download a PI Package Installer (Windows .exe, Linux .deb or MacOS .pkg) from the OpenCPN website, to download Watchdog
Then Click "Downloads"
These instructions are specifically for WD-pi, however the OpenCPN Manual has more general information using this older method in Plugin Download, Install and Enable.
Click "Plugins for OpenCPN 4.2 and up"
Scroll down to the "Safety" section and click "WatchDog"
Choose the file compatible with your computer. These examples are for Windows, so we choose the Windows setup-package. Download the file (double-click).
B. How to install WD_pi?
It’s better to close OpenCPN before installing WD-pi. We assume you know where to find the files you download from the Internet. Open the downloaded Plugin Package Installer (watchdog_pi[version].exe) and install the plugin following these screenshots (don’t mind the dutch).
Then before using WD-pi enable the plug-in.
C. How to enable WD-pi?
Open OpenCPN, Click Tools - Options
Click Plugins
Scroll to Watchdog plugin and click Enable
Click OK
Now the Watchdog-icon should be visible in your OpenCPN toolbar
D. What does WD do?
Watchdog warns you -in a couple of specific situations- when you want to be warned. Watchdog has the following alarms:
F. How can WD alert me?
Does it bark? Yes, that is possible. But maybe you want to choose something else.
You can set an alert in the form of a text-message that pops up on your screen …. (in the pop-up screen there’s still evidence of the original name Watchman..)
A text-message is rather useless if you are not looking at your display. The Deadman alarm prevents the watchman from falling asleep (or wakes up) so this alert is logically a loud noise. So Watchdog also enables you to set an acoustic alarm.
You can use any sound you like, as long as it is a ".wav" file.
Examples:
If you want to brush up on your Morse-code, you can set Morse-code YYY (Yankee = "My anchor is dragging") as sound for anchorwatch-alarm and Morse-code UUU (Uniform = "You are running into danger") as the sound for Boundary and Land-fall-alarm.
You can generate these sounds yourself dead-simple on the website Morse Code Translator.
Just type whatever you want, adjust pitch and speed to your liking and save as .wav files in /OpenCPN/sounds).
If your only reaction to hearing the beeps of Morse code is "Ah, the pizza in the microwave is ready!" then maybe a more direct approach suits you better. Perhaps a computer that actually says "Warning! Boundary!" when the Boundary-alarm sounds and "Warning! Anchor!" when your anchor is dragging.
Play WD Warnings with "Sound" checked
In a "Edit Alarm" Menu browse to '%localappdata"\watchdog_pi\data\Warnings\Warning Boundary.wav'
%localappdata\opencpn\plugins\watchdog_pi\data\Warnings OR C:\Users\Rick\AppData\Local\opencpn\plugins\watchdog_pi\data\Warnings
and pick an appropriate Warning. Then "Test" to confirm the path is correct..  Another way to play Watchdog Warnings with "Sound" unchecked and "Command" checked. Then try these examples using Powershell for Win OS:
powershell -c (New-Object Media.SoundPlayer 'C:\Program Files (x86)\OpenCPN 5.2.4+6b314e6\sounds\2bells.wav').PlaySync(); </code> OR <code> powershell -c (New-Object Media.SoundPlayer 'C:\Users\Rick\AppData\Local\opencpn\plugins\watchdog_pi\data\Warnings\Warning Boundary.wav').PlaySync();
The paths are:
%localappdata%\opencpn\plugins\watchdog_pi\data\Warnings\ and then [add the appropriate filename] OR C:\Users\[user]\AppData\Local\opencpn\plugins\watchdog_pi\data\Warnings [appropriate file name]
If you really want a Watchdog that barks, then find a wav-file of a barking dog, it might start every dog nearby to join in. Apart from pop-up screens and all kinds of sounds, you can also let Watchdog execute a computer command. That can be any computer command. To name just a few options: Start a pdf-document with pre-defined messages in "Seaspeak" or any other language you need to have a conversation with the skipper of that monstrosity that is About to collide with you.
Or imagine your boat anchored in the bay and you sitting ashore in the pub….. And hey, on our mobile phone we receive an email from a loved-one!
How this email-trick is done, is explained in "Email Alert to yourself" at the end of this manual.
G. Typical Setup of Alarm
When Watchdog is installed and in the OpenCPN Toolbar, follow these 4 initial steps to set up a new Watchdog Alarm:
Step 1. Click "Watchdog" in the OpenCPN Toolbar*
Step 2. The "Watchdog Window" opens. If no alarms are set, it will be a rather empty screen.
Place the cursor in that empty screen. A mouse-click will give you a pull-down menu.
Step 3. Click "New"
Step 4. The "New Alarm Window" opens. It shows the various types of alarms.
Note: This window might still have a small bug. I cannot adjust it’s size and so the text in the “Cancel”-button is just “anc”…..
This manual was written with the Windows-version of OpenCPN and Watchdog. In Linux Mint it works better. In the Linux-version of OpenCPN and Watchdog you can adjust the size of the window so that all options are shown.
(The next steps involve clicking the desired alarm and clicking "OK") NOTE: These 4 initial steps are the same for each alarm. In the rest of this tutorial these steps will not be repeated but will be referred to as "set up a new Watchdog-alarm".
H. Typical Setup of Alarm Details
When setting up a new Watchdog-alarm, you will come across the “Edit Alarm” window.
In that window there is a part (normally the uppermost part) that is specific for that type of alarm, but there is also a part that is the same for every type of alarm. It is the “Alarm Action” part.
Important:
In several alarms you’ll see in the "Alarm Action" part a checkbox “Alarm if no Data”. That is because most WD-alarms are based upon information (“data”) your computer is getting from other devices. For instance: GPS for position, speed and course, digital wind-sensor, digital sensors for air-pressure, temperature and humidity,an AIS-receiver or transponder etc.
If that box is checked, the alarm will be activated when the data-stream is interrupted.
For instance: anchor alarm is set to be activated when you drift more than 50 metres from your position. Your position is given by your GPS-receiver. If the “Alarm if no Data”-checkbox is checked and the GPS stops working, //the alarm will be activated, ////even if your ship has’nt drifted at all //.
That checkbox is an important safety-feature because it will warn you when one of your instruments has gone on the blink and has stopped sending it’s information!
In the Edit Alarm-window you can tell Watchdog what you want it to do. A brief explanation:
Sound
Alert you by playing the soundfile (.wav-file) you have entered (use the
“Browse” button to point WD to that file).
Command
Execute a computer command (type the command in the box next to
“command”).
Message Box
Show a pop-up Textbox with “ALARM”.
Repeat Alarm after seconds
Gives the opportunity to order WD to repeat the alarm after a set time
(in this example that time is set to “60 seconds”).
Automatically Reset
Means that when the alarm is triggered, the alarm will be reset to await the next “cause for alarm”.
Graphics Enabled
Means that WD will show you something on screen, relating to the alarm.
For instance the radius of the anchor-alarm you have set.
Test
Means that you can test if the alarm works yes or no.
Information
Means that … well, try that button for yourself and you’ll see.
If you do not understand the function of the buttons “OK” and/or “Cancel”: sell your computer!
First the various types of alarms are briefly explained. After that each type of alarm is explained in (a bit) more detail.
ALARM SUMMARY
Short Alarm Descriptions below.
Landfall Alarm
Landfall Alarm alerts when own ship nears land. Most useful for long voyages with vast stretches of water. More extensive description of the alarm LANDFALL ALARM.
Boundary Alarm
Boundary Alarm alerts when own ship’s position relative to a Boundary is not within ranges set or when about to sail into a "restricted area".
The manual for Boundary Alarm is a bit more complex than the other sections. That is because:
-
there can be different types of boundaries (made with the plugin O-DRAW) and
-
there can be different types of boundary-alarms (made with WATCHDOG).
With Watchdog you can make 4 different types of boundary-alarms:
-
GPS course-alarm warns when course and speed will cross the perimeter (border) of a boundary in less than the specified time.
In this manual this type of alarm is also referred to as "Boundary-time". -
GPS fix-alarm warns when position from the perimeter (border) of a boundary is less than the given distance.
In this manual this type of alarm is also referred to as "Boundary-distance". -
Inclusion-alarm warns when own ship is outside a given boundary.
-
AIS Guard Zone-alarm warns when other ships are inside a given boundary.
Boundary-alarms of the type GPS course, GPS fix and Inclusion are related to the position (and speed and course) of your own ship and are fed by the data from your GPS receiver.
Note: "Inclusion Alarm" might be a bit confusing because "inclusion" means "beïng inside or included in a boundary".
The "Inclusion Alarm" is not intended to alarm when own ship gets inside a boundary. On the contrary, it is intended to alarm when own ship gets outside the boundary.
In earlier versions of Watchdog this alarm was called "Anchor Watch Boundary GUID".
But as Watchdog also has a dedicated "Anchor Watch" alarm, the name was changed into "Inclusion" Alarm.
To avoid "inclusion-confusion" 8-O , just keep in mind that the "Inclusion Alarm" is keeping an eye on you to make sure your "own ship" stay "included" in the boundary."
Guard Zone Alarm
A Boundary alarm of the type AIS Guard Zone is triggered by the data from other ships, as received by your AIS receiver.
The difference with the "normal" AIS alarm (warn me when a ship comes within a given distance from "own ship") is that the Watchdog Boundary Guard Zone alarm gets triggered when a ship enters a specific area (like for instance the entrance to that secluded spot you thought to have for just you and your spouse/friend/secretary/…).
The more extensive description of the alarm is here: BOUNDARY ALARM.
Note: in Watchdog you can set a "Guard Zone" alarm but in O-Draw you can also create a "Guard Zone".
A Guard Zone in O-Draw is a special kind of area that is not static, but moves with your own ship.
The more extensive description is here: DYNAMIC GUARD ZONES.
Anchor Alarm
Anchor Alarm alerts when your position changes more than a specific distance from a certain position (when your anchor is dragging). The more extensive description of the alarm is here: ANCHOR ALARM.
Course Alarm
Course Alarm is alerts when "own ship" gets off course. The more extensive description of the alarm is here: COURSE ALARM.
Speed Alarm
Speed Alarm alerts when boat speed drops below a set speed (Underspeed) or when boat speed has increased above a set speed (Overspeed), both can be problematical. The more extensive description of the alarm is here: SPEED ALARM.
Wind Alarm
The wind-alarm can be set to warn when the windspeed exceeds a given value, drops under a given value or changes direction. The more extensive description of the alarm is here: WIND ALARM.
Weather Alarm
Weather-alarm alerts when there are changes in barometric pressure, air temperature, sea temperature, relative humidity and humidity. Which helps to decide what to wear, foul-weather or bathing suit, and of course to decide when to head for a safe haven. The more extensive description of the alarm is here: WEATHER ALARM.
Pypilot Alarm
The Pypilot-alarm alerts when something is wrong with your automatic steering gear (autopilot), driven by the Pypilot plugin. The more extensive description of the alarm is here: PYPILOT ALARM .
Deadman Alarm
Deadman Alarm alerts when there is no keyboard activity (fallen asleep, jumped overboard or simply passed away). The alert occurs after a given amount of time the program still has not experienced any input, to be sure there is still someone on watch. The Deadman alarm stops as soon as any user action is taken, for instance a movement of the cursor (mouse). The more extensive description of the alarm is here: DEADMAN ALARM.
NMEA Data Alarm
NMEA Data Alarm alerts hen OpenCPN loses NMEA-input. NMEA-data is information the program receives from various instruments. Most well-known NMEA-data is from GPS receivers and AIS receivers. NMEA Data Alarm is crucial if you want to rely on instruments for position, course and speed or AIS! In short: if NMEA input is lost a significant part of OpenCPN is lost. The more extensive description of the alarm is here:
ALARMS
1. LANDFALL ALARM
Landfall-alarm is meant to alert you when you get within a set distance from land. For most sailors the usefulness of such an alert is obvious.
"Hoorah and up she rises!" More info: go to "https://www.gov.uk/government/organisations/marine-accident-investigation-branch[MAIB]" and search for "Lysblink Seaways".
Important: the alarm operates in relation to the coastline as it is programmed into your vector charts! OpenCPN comes with a worldwide background map, displayed if no charts are available for an area. Note: these two screenshots illustrate that the coastline in that basic background map can be quite different from the real thing! Looking at this basic coastline chart WD will assume we are not close enough to the coastline to trigger the Landfall alarm. So, WD stays quiet.
When he really should have barked!
Therefore it would be advisable to use the 224mb(unzipped), most detailed, GSHHS High Resolution Background Map. It can be downloaded using the ChartDownloader, see High Resolution Background Map.
Stay on the safe side and set landfall-alarm for a distance well offshore. Landfall-alarm is not meant for close-quarters navigation.
Setting the Landfall-alarm is explained step-by-step by these screenshots. Set up a new Watchdog-alarm and pick "Landfall".
Click "OK". The "Edit Alarm" window pops up. In the Edit Alarm window you can choose between "GPS course crosses land in less than … minutes" or "GPS fix is less than …. nm from coastline". Here we’ve chosen "GPS fix is less than 5 nm from coastline". Tick the rest of the boxes and click "OK".
The Watchdog Configuration window shows the alarm.
Now your Landfall alarm is ready to be used.
Just make sure the "Alarm On/Alarm Off" box is ticked (set).
2. BOUNDARY ALARM
Watchdog communicates with another very useful plug-in, called "OpenCPN ODraw Plugin". That plugin is a tool to draw geo-referenced points, lines and shapes within OpenCPN. These points, lines and shapes can be used in navigation, for instance to show specific points or areas (Boundaries), electronic bearing lines (EBL) and variable range markers (VRM). Watchdog will be referred to as "WD-pi" or "WD". OpenCPN Draw Plugin will be referred to as "Ocpn-Draw", "ODraw-pi" or "OD".
This section of the Watchdog-manual is a bit more complex than the other sections because:
With O-DRAW you can make 4 different types of boundary.
-
Boundary-type "inclusion"
-
Boundary-type "exclusion"
-
Boundary-type "neither"
-
Guard Zone a special kind of boundary:
With WATCHDOG you can make 4 different types of Boundary-alarms.
-
GPS course crosses boundary in less than … minutes
-
GPS fix is less than … nautical miles from boundary
-
Inclusion Alarm, Boundary GUID …..
-
AIS Guard Zone, Boundary GUID …..
There can be several combinations of boundary type and boundary alarm.
Before we continue, an explanation of these 4 different types of alarms is needed.
-
GPS course-alarm warns you when your course and speed will make you cross the perimeter (border) of a boundary in less than the specified time. In this manual this type of alarm is also referred to as "Boundary-time".
-
GPS fix-alarm warns you when your position from the perimeter (border) of a boundary is less than the given distance. In this manual this type of alarm is also referred to as "Boundary-distance".
-
Inclusion-alarm warns you when you are outside a given boundary (a bit like "Anchor Alarm").
-
AIS Guard Zone-alarm warns you when other ships are inside a given boundary.
WD and OD are independent plugins but the two can work together by passing and receiving messages.
For the alarms, when WD needs boundary information, WD asks OD, via a message, whether a Lat/Lon is inside a boundary. WD can add further requirements asking for boundaries in a particular state and a particular type. Both the state and type are the same as what OD uses, i.e. Active/Inactive and Exclusion/Inclusion/Neither, or the inclusive "Any" (meaning any type and/or any state, not being as selective).
Boundaries & Guard Zones
To fully benefit from the capabilities of the WD Boundary Alarms, we need to understand the "Boundaries" made by OD. For a full explanation, see the chapter OCPN Draw in the manual.
You can create Boundaries in (OD) Ocpn_Draw-pi (not Watchdog) by clicking "Create Boundary" and Guard-Zones by clicking "Create Guard Zone", explained in the Draw-pi section of this manual.
Boundary Types
In Ocpn_Draw_pi (OD)
-
Create a boundary
-
In "Boundary Properties" tab, assign a "Boundary Type" to each Boundary or Boundary Point (BP)
-
Choose "Exclusion", "Inclusion" or "Neither"
In WD set the alarm type for every kind of boundary.
-
Set alarms that are triggered when own ship gets too close to a boundary of type "Exclusion",
-
Set alarms triggered when own ship gets too close to an "Inclusion" boundary or a "Neither" setting.
The most logical boundaries use is
-
"Inclusion" boundaries are like a play pen, "OK to be inside",
-
"Exclusion" boundaries are fencing an area out and "not OK to be inside"
-
"Neither" boundaries are just good to be alerted when crossed.
The message from each type of boundary is:
-
Exclusion "Don’t come near or inside." BOAT KEEP OUT
-
Inclusion "Stay inside." KEEP BOAT INSIDE.
-
Neither Location is not important, Alert when crossing is important.
Each Boundary Type is graphically represented in a specific way.
-
Exclusion: a hatched pattern inside the area.
-
Inclusion: a hatched zone on the outside of the boundary.
-
Neither: no hatch (just a line).
Boundaries can be any shape, size and color you like, for color its logical to use red ("danger") for boundaries of the type "exclusion" and something green("safe") for boundaries of the type "inclusion".
This screenshot shows the different types of boundaries.
-
Top row: two boundaries of the type "inclusion"
-
Second row: three boundaries of the type "exclusion"
-
Third row: two boundaries of the type "neither"
-
Fourth row: three boundary points. From left to right, "inclusion", "exclusion"and "neither".
3. GPS COURSE x’s Boundary
Setting up a "GPS COURSE CROSSES BOUNDARY IN < ….MINUTES" ALARM
-
Set up a new Watchdog-alarm and pick “Boundary”.
-
Select "GPS course crosses boundary in < …. minutes"
-
Edit the alarm so that the alarm will be triggered when course and speed will bring you in less than (your choice) minutes to a boundary.
-
You can set the time between 0 and 1000 minutes. 0 minutes is quite useless and 1000 minutes (more than 16 hours) is maybe a bit much.
-
In this example we have used 20 minutes.
In the Watchdog "Edit Alarm" window, you can select "Boundary Type" and "Boundary State".
In this example "Any" and "Active" are ticked.
The result is that the alarm will look at all active boundaries, no matter what the type is.
Regarding the type of the boundary: If you’d like the alarm to react to
any boundary, no matter what the type is, select "Any".
only to boundaries of the type "Exclusion", select "Exclusion".
only to boundaries of the type "Inclusion", select "Inclusion".
only to boundaries of the type "Neither", select "Neither".
Regarding the state of the boundary: If you’d like the alarm to react to
any boundary, no matter what the state is, select "Any".
only to active boundaries, select "Active".
only to inactive boundaries, select "Inactive".
Note: as from WD version 1.9025 the "Edit Alarm" window for Boundary alarm also shows a slider to allow the user to select the frequency of checking.
It defaults to 3 seconds (the current Watchdog default), but can be set from 1 to 120 seconds. The longer the check the better for low powered machines.
Don’t forget to set the Alarm Actions ("Sound", "Message Box" etc. as described in "Standard actions: Setting up the Alarm Actions").
Click "OK".
To illustrate the working of the alarm, in this example we have set the COG Predictor Length to 20 minutes (via Options-Ships-Own Ship-Display Options).
As long as we are more than 20 minutes away from a boundary, Watchdog will remain silent.
But as soon as we are less than 20 minutes away from a boundary, the alarm will be triggered.
4. GPS FIX NM from Boundary
Setting up a "GPS FIX IS < …… NM FROM BOUNDARY" ALARM
-
Set up a new Watchdog-alarm and pick “Boundary”.
-
Select "GPS fix is < …..nm from boundary"
-
Edit the alarm so that the alarm will be triggered when the GPS fix indicates that the boat is less than the minimum distance from a boundary.
-
Entering a distance of "0", the alarm will not work because that is "a distance of less than 0 nm"
In this example we have chosen 0.01 nm (18,5 meters) to a boundary ("GPS fix is < 0.01 nm from boundary).
Note: In this example we have a boundary of the type "exclusion" (a hatch-pattern on the inside). In the Watchdog "Edit Alarm" window, you can select "Boundary Type" and "Boundary State".
In this example "Exclusion" and "Active" are ticked with the result that the alarm will only consider "Exclusion" and "Active" boundaries.
(See also the previous section ("Setting up a GPS course crosses boundary in < …. minutes") for the effects of ticking the different "Boundary Type" and "Boundary State"-buttons).
Don’t forget to set the Alarm Action and click OK.
Now lets see if it works….
As long as the distance to a boundary is more than 0.01 nm, the alarm remains silent.
But as soon as we get within a distance of 0.01 nm of a boundary, the alarm is triggered
The alarm will also show the name and description of the boundary you are getting too close to.
For this example that name is "Testboundary-01-Exclusion-STAY OUT".
This goes also for the inner side of the boundary.
Closer than 0.01 nm from the boundary perimeter? Alarm.
More than 0.01 nm from the perimeter?
The alarm stops.
Watchdog did warn you, but if you still decide to go on, she (yes, Watchdog is a bitch…. ;-) ) will assume that you know what you are doing.
5. AIS GUARD & Inclusion
A Boundary alarm of the type “Inclusion Alarm” is meant to alert you when your own ship gets outside a specific boundary.
The alarm is related to the position of your own ship and is fed by the NMEA-data from your GPS receiver.
A Boundary alarm of the type “Guard Zone” is meant to alert you when one or more other ships are inside a specific boundary.
“Guard Zone” is related to the position of other ships and is fed by the NMEA-data from your AIS receiver.
"Guard Zone" will also be shortened to "GZ".
NOTE: “other ships” are only ships that actually transmit AIS data and whose AIS-data are actually received by your AIS receiver!
Ships that do not transmit AIS-data (or AIS-data your AIS receiver does not receive) are not “seen” by WD!
Keep this in mind, especially as you might encounter ships that should send out AIS-signals, but don’t do so because their transmitter is switched off on purpose (like fishing vessels that want to keep their favourite fishing tracks hidden from others!)
GUID’s
To let Watchdog know what specific boundary it has to guard, you have to specify the “GUID” of that boundary. GUID stands for “globally unique identifier” and is a unique reference number used as an identifier in computer software. GUIDs are displayed as 32 hexadecimal digits with groups separated by hyphens.
Example: 2a980000-5098-4787-ac4f-e05b47e7ffff
To enter the GUID of a Boundary or BP in WD, you place your mouse-cursor on a boundary, do a right-mouseclick and copy the GUID. Then, in the Watchdog Edit Alarm-window, you can paste the GUID in the field Boundary GUID or Guard Zone GUID.
Make sure you do "Copy GUID" before editing the Watchdog Alarm.
Alternatively, when the “own ship” icon is within the boundary, you can click “Get Boundary GUID”.
Note: this method does not always work. In such cases: use the “copy-paste” method.
Setting up a Boundary AIS Guard Zone Alarm
Set up a new Watchdog-alarm and pick “Boundary”.
Select “AIS Guard Zone”
Edit the alarm so that the alarm will be coupled to the boundary you want to be guarded.
Don’t forget to set the Alarm Action and click OK.
Now lets see if it works….
As soon as the feed from your AIS receiver shows that an AIS-target (=“another ship”) enters the specified Guard Zone Boundary, the alarm gets triggered. The other ship (green icon) is not (yet) in the Guard Zone Boundary: alarm not triggered (yet).
The ship enters the Guard Zone Boundary: Guard Zone Alarm is triggered (and shows ships name and MMSI-number).
And the text in the Watchdog window turns red and says “AIS Target in zone”
As soon as the ship leaves the Guard Zone Boundary: Alarm is not triggered anymore.
The text in the Watchdog Window turns back to black and says “No AIS targets found in zone”.
The Boundary AIS Guard Zone Alarm works!
 But instead of "Guard Zone" you click “Inclusion Alarm” and you put the GUID of the “Inclusion Alarm" Boundary in the field next to “Boundary GUID”.
Set up a new Watchdog-alarm and pick “Boundary”.
-
Select “Inclusion Alarm”
-
Edit the alarm so that the alarm will be coupled to the boundary you want to "stay inside" of.
-
In this example it is a boundary with GUID 6372ffff-7f0e-4a64-9e6c-dfd303620000
Don’t forget to set the Alarm Action and click OK.
Now lets see if it works….
The own ship is inside the boundary. Watchdog watches over you and wants you to stay "included".
Well, in this case everything is just fine. Watchdog stays silent.
The text in the Watchdog window stays black.
But as soon as our ship leaves the boundary, Watchdog alerts us!
And the text in the Watchdog window turns red.
The "Boundary Inclusion" alarm works!
Combination of Boundary Guard Zone Alarm and Boundary Inclusion Alarm.
It is possible to assign a Boundary Guard Zone Alarm and a Boundary Inclusion Alarm to one and the same boundary.
That means that you can let Watchdog alert you:
-
when another ship enters your “safe” anchoring area
-
when you are drifting out of that area.
To achieve this, you use in the Boundary Guard Zone Alarm the same GUID as in the Boundary Inclusion Alarm. You can activate one of the two alarms, both of them or none of them. In this screenshot both alarms are activated.
6. DYNAMIC GUARD ZONES
The plugin "Ocpn_Draw" was invaluable to begin with, but got even better when it was updated with the possibility to draw a Guard Zone that moves with our own ship! Guard Zones differ from normal Boundaries, they move with your own ship and can rotate with the ships heading or with the ship’s course over the ground. Let’s call them "Dynamic Guard Zones".
As oDraw works hand in glove with WATCHDOG, these new features in oDraw also affect the way WATCHDOG can be used. Here are some examples. In these examples "Guard Zone" is shortened to "GZ".
Let’s assume that our ship has a blind spot. A blind spot is an area around the ship that cannot be directly observed by the helms(wo)man. In this example the blind spot is on the port side and extends from 70 to 90 degrees. We want to be alerted if any ship (AIS-target that is) enters that blind spot. We can set up Watchdog to do that for us.
First set up a GZ Guard Zone. Open the Draw Toolbar
Click "Create GZ"
Set the first point of the GZ roughly abeam on the port side.
Set the second point a bit above and to the right of the first point (clockwise).
The result is some kind of wedge-shaped GZ.
Now you should fine-tune that GZ. Click on the GZ and open the "Properties" tab.
Give your GZ a recognizable name and description. Choose the Colours and Line Width you prefer and fill in the required angles and distances. See the example.
Note: the first distance is the distance closest to the boat. Make sure this distance is bigger than 0. In this example the first distance is set to 0.01 NMi or 18.52 meters. The second distance is the greatest distance from the boat. In this example that distance is set to 1.25 NMi.
As the blind spot extends from 70 to 90 degrees portside, we set the first angle to -95 (- is port, + is starboard) and the second angle to -70. The result is a wedge-shaped GZ that starts at 0.01 NMi, extends to 1.25 NMi and covers 15 degrees.
Make sure you put a checkmark at "Rotate with Boat"!!
The next step is to set up a Watchdog Guard Zone Alarm for that GZ. The steps to do that are described earlier in this manual.
Now we’ll put it to the test.
The Highland Challenger is closing in on our portside.
but as soon as she challenges our "slice of pie", Watchdog starts to alert us!
Some other examples:
A GZ that extends from 90 degrees Port to 90 degrees starboard.
The outer perimeter is 1.50 NMi, the inner perimeter is 1.25 NMi. The
four range rings around our own ship are set 0.25 NMi apart. Eurocargo
Genova is approaching on our port bow. Still more than 1.5 miles away,
but she’s a big one and doing almost 20 knots.
Luckily we’ve set up our GZ alarm.
A "Tri-colour" GZ.
Here we have three GZ’s around the ship. One (red) covering the 112.5 degree arc that coincides with the port navigation light, one (green) covering the 112.5 degree arc that coincides with the starboard navigation light and one (white) covering the 135 degree arc that coincides with the stern light. As all of these GZ’s are set up to rotate with the ship’s heading, they could be used to see at one glance whether another ship is in your red, green or white sector (also handy to remind some of us that "starboard is green and port is red"…..).
In this example the sectors range from 0.10 to 0.25 Nmi from our ship. This is how these three GZ’s (Guardzone Port, Guardzone Starboard and Guardzone Stern) are set up:
The red sector:
The green sector:
The white sector:
Note that the white sector is set by defining the first angle as 112.50 and the second angle as -112.50 this covers an arc of 135 degrees (360-225).
Arco Axe is sneaking up on us. GZ "Stern" is activated.
We really don’t want Arco Axe (or any other axe for that matter….) to hit us in the behind but before she can become a pain in the ass, Watchdog spots her and alerts us.
You can set up multiple Dynamic Guard Zones and set the alarms for one, some or all of these zones.
(Dynamic) Guard Zone Alarms are in some ways similar to the "AIS Collision Alarm" you can set in OpenCPN (Options-Ships-AIS Targets-CPA Calculation). But they are more versatile.
7. ANCHOR ALARM
The Anchor Alarm does not belong to the catgory "Boundary" as it is not related to a boundary. The Anchor Alarm is related to a specific position.
The pictures are self-explaining (or at least supposed to be).Set up a new watchdog alarm and pick "Anchor
In the "Edit Alarm" window, the latitude and longitude (Lat and Lon) of your ship wil be shown (or to be precise: the Lat and Lon of the "your ship" cursor, so make sure you have a GPS fix!).
Radius can be set to whatever you like but "0 meters" will of course result in an unwanted amount of alarms. In this example radius is set to 50 meters. Click "OK". Then the alarm is enabled and the boat is within the radius of 50 meters from the specified position, the alarm is not triggered and the circle showing that radius has a green edge.
Moving the boat more than the pre-set radius (in this case 50 meters), triggers the alarm. The green edge turns red. The text in the WD window turns red and shows the distance from the specified position.
To Stop False Alarms (Hints):
-
Set the Anchor Alert at the same time and place as the Anchor! - As close as possible.
-
Set the radius a little larger.
-
Make sure you have set the anchor properly so it is not dragging and there is adequate scope.
-
Anchor out of kelp in good holding ground.
-
Change your anchor location, shallower or deeper, different bottom.
-
Check your GPS NMEA data stream to see if the GPS signal is reasonably constant.
To check your GPS Data Stream
In the NMEA debug window, do you see changes in the GPS receiver position reported by RMC or GLL messages? You can save this stream as a file using the VDR plugin and inspect it with a Text Editor.
Make sure there is no change in position reported by GPS receiver. Look at the RMC lines. The lat and lon fields are constant. EG: "3348.0358" and "15116.9019".
You will need to watch these values for a longer time to see change. Of course, if you cycle the power on the GPS receiver, you may see a change, particularly if the receiver selects a different set of satellites to calculate the position.
When this happens, by the way, it is a reminder of the essential limit of GPS positional accuracy.
You are getting 3 digits of precision, implying around 6 feet of accuracy.
But consumer-grade GPS is generally not repeatably accurate to 6 ft.
8. COURSE ALARM
Course Alarm is (of course) meant to alert you when you get off course. The problem with getting off course is that you might end up somewhere where you do not want to be.
Setting the Course-alarm is explained step-by-step by these screenshots.
Set up a new watchdog alarm and pick "Course"
You can set the alarm for, for "Port" only, for "Starboard" only or for "Port or Starboard".
Choose "Port" if you only want to be alarmed when you go too far to port. Choose "Starboard" if you only want to be alarmed when you go too far to starboard. Choose "Port or Starboard" if you want to be alarmed when you go either too far to port or too far to starboard.
Choose how many degrees you want as margin before the alarm is triggered. You can specify the desired course either manually (enter the desired course yourself) or by clicking "Current Course". In that case Watchdog enters your present COG, as received from your GPS.
In this example Watchdog will start barking when you wander more than 20 degrees to port or more than 20 degrees to starboard from a course of 135 degrees.
After you are finished editing the alarm, click "OK".
The "Course Alarm" shows up in the Watchdog Configuration window. Click "OK".
Watchdog shows your COG (in this example 168 degrees).
Tick the checkbox (if it isn’t ticked yet). Watchdog "Course Alarm" is now activated and wil alert you if your course is not between 115 and 155 degrees (135 plus or minus 20 degrees).
In the screenshot below the course is somewhere around 005 degrees. As that is (way) off course, the alarm is triggered.
9. SPEED ALARM
Speed-alarm is meant to alert you when your SOG gets below (Underspeed) or above (Overspeed) a specific speed. You can set a limit. That limit is the speed, in knots, you don’t want to get below or above.
Setting the Speed-alarm is explained step-by-step by these screenshots.
Set up a new watchdog alarm and pick "Speed"
In this example the alarm is set for "Underspeed" and set to 5 knots, because you want an alert when speed drops below 5 knots. However when riding bigger waves, speed can increase momentarily when surfing and and decrease on reaching the bottom. In such cases the Speed Alarm might get triggered with every wave. To prevent alarm cycling, set Watchdog to average your speed. You can set a slider from 1 second to 120 seconds.
In this example the slider is set to 60 seconds. Now Watchdog will only trigger the alarm when your average speed, measured over a period of 60 seconds, will be below 5 knots.
In this example the boat’s average speed over 60 seconds was 0.6 knots and the limit was set to 5.0 knots. Watchdog shows you "0.6 < 5.0" (0.6 is less than 5.0).
Here we have set two speed-alarms. One for Underspeed and one for Overspeed.
In this screenshot the limit was still 5.0 knots, but the boat’s average speed over 60 seconds was 0.3 knots. The "Underspeed" alarm was triggered and the text turned red. The "Overspeed" alarm did not get triggered and that text remained black.
11. WIND ALARM
The wind-alarm has three modes: Under Speed, Over Speed and Direction. So the alarm can be set to warn you when the windvelocity exceeds a given value (Over Speed), drops under a given velocity (Under Speed) or changes direction.
Wind-alarm also has three types:
-
Apparent - measured from moving boat (requires only wind sensors)
-
True Relative - wind would feel like if boat stopped (requires windsensors + gps)
-
True Absolute - wind would feel if boat stopped and faced north (requires wind sensors + gps + compass)
12. WEATHER ALARM
The Weather-alarm can be used to warn you for changes in airpressure, air temperature, sea temperature, relative humidity and humidity. This is of course only possible if there are (digital) sensors for these parameters connected to OpenCPN.
For the region of North Sea and Baltic Sea (40 - 60 degrees N) this table can be used as an indication:
air-pressure change in hPa per hour |
air-pressure change in hPa per 3 hours |
expected windspeed in Bf |
+1,3 to +2 |
+4 to +6 |
6-7 |
+2 to +3 |
+6 to +9 |
8-9 |
more than +3 |
+10 or more |
10 or more |
-1 to -2 |
-3 to -6 |
6-7 |
more than -2 |
more than -6 |
8-12 |
Note: In subtropic and tropic regions some of the above rules may not be valid at all! In tradewind- zones you should observe the daily variations: are they still present? If not: possible gale is to be expected.
Let’s say you want to be warned when the barometer drops more than 1,3 hPa per hour.
1 hectopascal (hPa) is equal to 100 millibar (mBar). So 1,3 hPa per hour = 130 mBar per hour or 130 mBar per 3600 seconds.
The setting in the WD-Weather-alarm would then be: Variable: Barometer Rate Type: Decreasing Value: 130 mBar In Last: 3600 Seconds
+ *weathertips:* + Rapid pressure drop with no or almost no wind: sudden increase of windspeed / gale possible without any other sign! Weather front with rain coming before wind comes up: stronger winds are to be expected. Wind coming before rain: wind will probably not increase.
13. PYPILOT ALARM
Watchdog can be used in conjunction with the free software autopilot "Pypilot", wich is a separate plugin for OpenCPN.
For more information on Pypilot, see the (separate) manual that can be found in "OpenCPN User Manual" - "Plugins" - "Other" - "Pypilot Autopilot":
In Watchdog there are several options to warn you for possible problems in the soft- or hardware of the Pypilot autopilot.
14. DEADMAN ALARM
Deadman Alarm alerts you (or your crew) when the watchman has fallen asleep, jumped overboard, after a set period of time the program has not had any user input. The objective is to assure someone is on watch. The Deadman alarm stops as soon as any action is taken, (movement of the mouse cursor). The only logical kind of alert for "Deadman" is some form of loud anannoying sound.
Setting the Deadman-alarm is explained step-by-step by these screenshots. Set up a new watchdog alarm and pick "Deadman"
Once set, the clock starts ticking.
15. NMEA DATA ALARM
In Watchdog you can set NMEA-data-alarms. NMEA stands for National Marine Electronics Association. NMEA data consists of sentences, the first word of which, called a data type, defines the interpretation of the rest of the sentence. Each Data type would have its own unique interpretation and is defined in the NMEA standard. Examples of devices that communicate via NMEA-data with your computer are your GPS receiver and your AIS receiver. In this picture there is a set-up with a GPS receiver and a AIS receiver connected to OpenCPN. Here the GPS is on COM21 and the AIS on COM16.
NMEA and your position.
OpenCPN’s most important type of NMEA data is position, provided by your GPS receiver. Without receiving GPS data, OpenCPN loses own ship’s actual position. When GPS NMEA-data to OpenCPN stops, chartplotting and navigation stops. Own Ship might sail into a Boundary Area marked "exclusion", but the alarm won’t be triggered. Similar failures could occur with an Anchor Alarm. Dragging anchor will not trigger the alarm. It’s important to know when GPS fix is lost. GPS data is received as a data type beginning with "$" and the letters "GP". The most important NMEA data streams include the GGA sentence which provides the current Fix data, the RMC which provides the minimum GPS sentences information, and the GSA which provides the Satellite status data.
So, if OpenCPN receives $GPGGA, that means it receives a fix from your GPS.
Setting up a Watchdog-NMEA-alarm (GPS)
Set up a Watchdog-NMEA-alarm that warns when the GPS fix is lost for more than 10 seconds.
Set up a new watchdog alarm, choose "NMEA Data" and click "OK
Standard "$GPGGA" is set. Set timer to "at least every 10 seconds" and tick the other boxes as per the screenshot below. Click "OK"
Now the NMEA-alarm set, and will be triggered 10 seconds after OpenCPN stops receiving GGA-sentences.
NMEA and the position of other ships
NMEA-data shows own ship location and where other ships are located (AIS), what their name, callsign, SOG and COG are etc.
Good to have this data for a rendezvous or if you wish to avoid a collision.
These kind of data are received via an AIS receiver.
Multiple NMEA alarms
You can set a separate alarm for the loss of AIS data. It works the same as the GPS alarm but AIS data (from other ships) always begin with !AIVDM (don’t forget the exclamation-mark).
Setting up a Watchdog-NMEA-alarm (GPS)
You can add a new NMEA-alarm (see the previous steps) but now you fill in !AIVDM
The result is two NMEA Data-alarms (one for GPS fix and one for AIS-data)
The upper NMEA Data alarm is the AIS-alarm. The lower NMEA Data alarm is the GPS alarm.
Each alarm can be switched on or off.
16. EMAIL ALERT
You can order Watchdog to execute a computer command. For example lets get Watchdog to send us an email in case our anchor drags. We have stored that command in a file we made and called AnchorAlarm.bat. In this example that file is stored in the root of our computer (C:\) but of course you can put in anywhere, as long as you tell Watchdog where to find it.
Sending emails from the command prompt can be done with a small tool called "Send-It-Quiet". More info: http://commandlinesendmail.blogspot.nl/
Example of the file AnchorAlarm.bat (in this example Send-It-Quiet is installed in E:\Tools\senditquiet\senditquiet)
Lets say:
-
You are Blackbeard
-
Your emailadress is<EMAIL_ADDRESS>-
Your Gmail username is blackbeard
-
Your Gmail password is 1loveGold2.
You want the program to send an email to yourself with the subject ANCHOR ALARM and the message This is your ship.  My anchor is dragging!
The batchfile would then be:
E:\Tools\senditquiet\senditquiet\senditquiet.exe -s smtp.gmail.com -port 587 -u<EMAIL_ADDRESS>-protocol ssl -p 1loveGold2 -f<EMAIL_ADDRESS>-t<EMAIL_ADDRESS>-subject "ANCHOR ALARM" -body "This is your ship.  My anchor is dragging!"
The result when the anchor alarm gets triggered…
Note Of course this only works when you can actually email from the computer OpenCPN is installed on! This example is tested on a Windows 7 PC with Internet connection and a Gmail-account.
If, after reading all of the above, you still wonder why Watchdog could be of any use for navigation, we strongly advise you to sell your boat.


Describes the individual components of Tribe and the features they offer.
How to obtain the Tribe libraries and start your project.
How to create panes, communicate between them and navigate around.
A step by step tutorial for building a simple webmail app.
How to use PackScript to combine and minify your resources for deployment.
Using flows and sagas to model your navigation and business processes and promote loose coupling.
We'll also give you a crash course in Tribe.Forms.
Transparently send messages from the client to internal services and publish internal events to client channels.


Defend now and also make a counterclaim
When you submit your response you'll be asked to complete an defence and counterclaim form N9B and email it to the Civil Money Courts
On the form you'll be asked to pay a court fee as part of your counterclaim.
More information on court fees.
I owe all the money
When you submit your response you'll be asked to complete an admission form N9A and email to the Civil Money Courts
On the form you'll need to state when you’re going to pay the money.
You can suggest a repayment plan or a date when you can pay the money.
I owe some the money
When you submit your response you'll be asked to complete both an admission (N9A) and a defence (N9B) forms and email them to the Civil Money Courts
On the form your can offer the claimant the amount of money you believe you owe and explain why you don't owe the remaining amount.
I owe all the money
When you submit your response you'll be asked to complete and email an admission form N9A to the Civil Money Courts
On the form you'll need to state when you’re going to pay the money.
You can suggest a repayment plan or a date when you can pay the money.


Dear Friend Good day to you, My name is Irvin Shawn I am an American soldier, serving in the military with the Third infantry Division in Iraq. Three years ago, we discovered some huge amount of money in Baghdad neighbourhood belonging to Saddam Hussein, I smuggled some part of these funds in two trunk boxes out of Baghdad, which is being kept safe in a secured finance company in Europe. You can go to this web link to read about events that took place here: <http://news.bbc.co.uk/2/hi/middle_east/2988455.stm> Basically, am writing you due to the situation I found myself and can not return back to America again because I was among five US soldiers questioned by military officials after some of that money was allegedly stolen, as I have absconded from US military and am now in exile. I have killed in war and I found no peace anymore in where I am right now as I have been declared wanted by US Military.I have decided to look for someone like you to help me retrieve these funds from Finance Company in Europe and disburse this funds to any charity organisation on earth as I know that this will only be a way Almighty God can forgive me in all human killing I encounter during war. In honesty, after claiming these two trunk boxes from security company in Europe, you shall have 50% of total funds, disburse 50% to five charity organisations on planet earth. Each box contain the sum of fifteen million United States Dollars. I do not want any money from these funds rather than spending all on humanity for me to have forgiveness of sins from Almighty God who seeth us all from above and that is why you must do this in honesty and trust, I shall seek for an assylum in any part of the world outside United States of America because I can not return back to my lovely country and I have been diagnosed of Cancer of Lungs and Oesophagus due to Bomb explosure I inhale duing my escape our of war I will send you certificates of deposit to enable you lay claim to these boxes on my behalf as soon as I hear from you. My watch word is to trust you and ensure confidentiality, when you receive this letter, kindly reply me via this e-mail<EMAIL_ADDRESS>signifying your interest including your confidential telephone/fax numbers for quick communication and also your contact details (Job title and occupation). Respectfully submitted Sgt. Irvin Shawn<EMAIL_ADDRESS>SINCERITY AND TRUST.


Evaluate an expression by typing it into the text area below. You can read the expression documentation here.


UKCloud Limited (“UKC”) and Virtual Infrastructure Group Limited (“VIG”) (together “the Companies”) – in Compulsory Liquidation
On 25 October 2022, the Companies were placed into Liquidation with the Official Receiver appointed as Liquidator and J Robinson and A M Hudson simultaneously appointed as Special Managers to manage the liquidation process on behalf of the Official Receiver.
Further information regarding the Liquidations can be found here: https://www.gov.uk/government/news/virtual-infrastructure-group-limited-and-ukcloud-limited-information-for-creditors-and-interested-parties
Contact details:
For any general queries relating to the Liquidations please email<EMAIL_ADDRESS>For customer related queries please email<EMAIL_ADDRESS>For supplier related queries please email<EMAIL_ADDRESS>Mass Transfer Facility - Service Scope
About the facility
You can use UKCloud's Mass Transfer Facility to move virtualised environments into and out of your UKCloud environment using your own network attached storage (NAS) device, hard disk drives (HDDs) or USB drives. You can use the Mass Transfer Facility to move:
Into or out of your UKCloud environment
Between the Assured OFFICIAL and Elevated OFFICIAL security domains
Between our data centres in Farnborough and Corsham
For example, it's useful if you don't have enough network bandwidth for large transfers, or if you don't have a Cross Domain Security Zone (CDSZ) service in place.
NAS
Your NAS is securely installed in the mass transfer bay and connected into your UKCloud environment.
HDD
Your HDD is securely installed in an eSATA enclosure and connected to our NAS device in the mass transfer bay. Our NAS is connected into your UKCloud environment to carry out the transfer. Your HDD must be compatible with our eSATA enclosure: 3.5" SATA NAS hard drive, optimised for use in one to five-bay enclosures and formatted as NTFS, Fat32, EXT3, EXT4 or HFS Plus (exFat is not currently supported).
USB
Your USB is connected to our NAS device in the mass transfer bay. Our NAS is connected into your UKCloud environment to carry out the transfer.
Scheduling your transfer
To schedule a transfer, raise a Service Request via the My Calls section of the UKCloud Portal, providing us with at least 10 days' notice. You should also arrange delivery of your device to the UKCloud office, quoting the Service Request number, no later than the working day before the scheduled transfer day.
When raising the Service Request, provide as much information as possible. For example, for UKCloud for VMware environments, provide:
The number of VMs and their total size
Details of the originating VDC and data centre (if applicable)
Details of the originating vApp (if applicable)
Details of the target VDC and vApp (if applicable)
The data centre location
If using a NAS device for the transfer, also provide:
The make and model of the NAS
Login credentials for the NAS, so that we can configure it for the transfer
Network connection details (IPs) to connect to the device
Before sending us your device
Your SIRO, compliance officer or other person responsible for your IT security must provide confirmation that your device is free of any viruses or malware.
We'll send you a form to fill in and send back to us by email before sending the NAS, HDD or USB, to ensure there are no issues ahead of its delivery.
Booking conditions
This service is based on the transfer of whole artifacts, for example VMs, not individual files.
For UKCloud for VMware, your VMs can be in OVF or OVA format. The hardware version must be 11 or lower and you need to remove any network cards and any mounted media files, such as ISOs, from the VM's hardware configuration prior to the creation of the OVA or OVF file.
Use of the Mass Transfer Facility is charged per the current SFIA Rate Card, based on the Enable rate. You'll only be billed for the time it takes for the engineer to set up, manage and detach the device. Due to the nature of the service and the time to transfer data, you won't be charged for the time it takes to transfer the data. We reserve the right to add additional charges should any remediation work be required during the process. The minimum charge is half of a business day.
Anticipated transfer speeds
Artifacts are transferred to and from your UKCloud environment over a 1 GB connection running at approximately 110 Mbps. We've established that it's quicker to upload and download many smaller artifacts, rather than fewer large ones.
Artifacts will be put into batches that can be completed during the business day. This will continue until the transfer is completed.
After transfer completion
Once we've transferred your artifacts into or out of your environment in the format that they arrived in, it's your responsibility to set up / reconfigure your environment in the way you want to use it. This includes, for example, networking, templates and catalogues.
We'll contact you to check that the transfer has been successful before we remove the device from the enclosure and advise you when you can arrange to collect your device.
Feedback
If you find a problem with this article, click Improve this Doc to make the change yourself or raise an issue in GitHub. If you have an idea for how we could improve any of our services, send an email to feedback@ukcloud.com.


The house of fire
naturally
fast
undeniably
fresh
temptingly
fiery
CHICKEN CHOW MEIN
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris cursus molestie nisi in faucibus.


| KMEANS |
K-means clustering algorithm.
Synopsis:
[model,y] = kmeans(X,num_centers)
[model,y] = kmeans(X,num_centers,Init_centers)
Description:
[model,y] = kmeans(X,num_centers) runs K-means clustering
where inital centers are randomly selected from the
input vectors X. The output are found centers stored in
structure model.
[model,y] = kmeans(X,num_centers,Init_centers) uses
init_centers as the starting point.
Input:
X [dim x num_data] Input vectors.
num_centers [1x1] Number of centers.
Init_centers [1x1] Starting point of the algorithm.
Output:
model [struct] Found clustering:
.X [dim x num_centers] Found centers.
.y [1 x num_centers] Implicitly added labels 1..num_centers.
.t [1x1] Number of iterations.
.MsErr [1xt] Mean-Square error at each iteration.
y [1 x num_data] Labels assigned to data according to
the nearest center.
Example:
data = load('riply_trn');
[model,data.y] = kmeans( data.X, 4 );
figure; ppatterns(data);
ppatterns(model,12); pboundary( model );
See also
EMGMM, KNNCLASS.
(c) Statistical Pattern Recognition Toolbox, (C) 1999-2003,
Written by Vojtech Franc and Vaclav Hlavac,
Czech Technical University Prague,
Faculty of Electrical engineering,
Center for Machine Perception
Modifications:
12-may-2004, VF


Foldable Motorola Razr Phone Will Hit Australia In January
by Tegan JonesLast week Motorola announced it was unleashing a foldable version of its classic Razr phone.
While the revamped Razr is set to go on pre-sale in U.S. in late December, there was no set time period for Australia, until now.
The info was revealed over the weekend on 2GB's Life and Technology show by Motorola's APAC GM of Sales, Danny Adamopoulos.
The discussion starts with the specs and features of the upcoming phone, and then moves into the reason for creating a foldable Razr.
According to Adamopoulos, Motorola wasn't originally intending to reinvent the Razr. Instead, it was looking to solve two consumer pain points - wanting large screen real estate without having a large phone in their pocket.
It was towards the end of the segment at (from 30:37) that the time frame was revealed.
"It will be going on pre-sale in the the U.S. in December and on sale in the U.S. in January. It will also be coming on sale in Australia in January, but you'll have to wait and see on the local pricing and who's going to take it," said Adamopoulos.
Adamopoulos also spoke about the device being eSIM only. Considering that we're still in the fledgling stages of eSIMs in Australia, we expect this to limit your carrier options.
For example, you probably won't be able to get a plan with a Mobile Virtual Network Operator (MVNO) such as Boost Mobile (powered by Telstra) or Circles.Life (powered by Optus).
At the moment all three major Aussie telcos offer eSIM, but in a relatively limited capacity.
Perhaps the most significant difference between the Razr and other foldables is that it will remain the size of a phone.
It has a regular 6.2-inch phone display when unfolded, as opposed to converting from a tablet to a phone.
It also has a 2.7-inch quick view display on the front of the device so you can quickly check notifications and control music.
Under the hood you'll find a Snapdragon 710 processor, 6GB RAM, 128GB internal storage, 2,500 mAh battery, 16MP front facing camera and 5MP internal camera.
Australian pricing for the Razr hasn't been announced yet, but it will cost $US1,499. We'll let you know when we have more details on that and the exact release date.
[2GB]


If there is a dominant topic within anthropology it is, and probably should be, the study of relationships. Anthropologists recognize that there are no unmediated, pure relationships. All the ways in which relationships exist, including communication, are cultural activities.
(Miller and Sinanan, 2014, pp. 3-4)
Points:
All human communications are mediated.
They agree with much of the existing literature that technologies changes humanity, but this does not make us better or worse. Humanity is always a project in progress. They propose a theory of attainment, which implies something previously unachievable but will become latent in the condition of being human and soon normalized (Miller and Sinanan, 2014: 12).
Their study does not follow the trajectory of post-human (Fukuyama, 2003) or cyborg (Haraway, 1991) studies.


{% extends "global/Page.html" %} {% load otree_tags %} {% block title %}Your Decision{% endblock %} {% block content %}
{{allocation3x}} is the amount of allocation of shared endowment with {{ Constants.players_per_group }} participants per group.
In the production task your co-participant with whom you will share the endowment with, generated and catches red balls the other players in the production task has earned and were able to catch.
{% formfield group.Ikeep %}You are The Sender . After you learn the random number that appear to you, Now please provide the amount that you would like to allocate to your co-participant.
{% formfield group.kept %} {% next_button %} {% endblock %}


Plugin Information |
|---|
No information for the plugin 'webtestpresenter' is available. It may have been removed from distribution. |
This plugin publishes the reports generated by the Canoo WebTest tool for each build.
Note: the webtestpresenter plugin has only been tested with free-style project projects.
Description
This plugin simply publishes the reports generated by the Canoo WebTest tool http://webtest.canoo.com. It is assumed that the webtests are run during the build process. If the build succeeds, this plugin will then create a link to the Webtests from the build page.
Configuration
Configuration is rather straightforward: simply indicate where the Webtest results are placed by your build process:
When a build has successfully run and the Webtest results have been generated, the plugin will create a link to the Webtest results in the build results page:
Clicking on the "Webtest Results" link will take you to the standard Canoo WebTests report pages.
Notes
If you wish to integrate the Webtest results into the standard "Test Result" charting, you will need to use Webtest version R_1657 or newer, which produces an overview report in junit-report format (WebTestOverview.junit.xml) that the junit report publisher can parse. However, this report currently only contains information on whether tests passed or failed, and how long the tests took. Therefore, this method is most useful in tracking test pass/fail trends, and can be useful when used in conjunction with the webtestpresenter plugin.
Version History
Version 0.23 (Jan 16 2010)
- Update code for more recent Hudson.. requires Hudson 1.319 or newer.
Version 0.22 (Jul 14 2008)
- Fix for JENKINS-2067.
Version 0.21 (Mar 16 2008)
- Initial release.


Discord Server
Invite
Copy this command to automatically set the banner to the one shown.
Base Type
Select a Base Type
Default
Spiked
Inverted
Base Color
Design
Select a Design
Nitro
Discord
Dbots
Dcards
Dcardsinverted
Design Color
Club Name


Springbok legend ‘spiritually strong’ in cancer battle
Cape Town - Prayers have flooded in for Springbok legend Carel du Plessis who has undergone brain surgery as he continues his fight against cancer.
The 58-year-old opened up to Netwerk24 about his struggles with illness over the last year, saying that he had undergone three major procedures since a tumour was identified back in January.
"It was a traumatic year and time in my life, but through it I realised the value of my wife, family and friends," Du Plessis said.
Du Plessis has undergone immunotherapy and he says he struggles with balance and strength in his right leg and foot as a result.
"The recovery process is going well and I am progressing," Du Plessis said.
"Patience and perseverance are tested on all fronts, but I am spiritually strong and fully trust in God and his word at this time."
Paarl Boys High, meanwhile, will be holding a function that will raise funds for Du Plessis' medical bills.
Du Plessis, who was known in his playing days as the 'Prince of Wings', played 12 Tests for the Springboks between 1982 and 1989 and formed part of the Western Province team that won five Currie Cup titles in a row between 1982 and 1986.
He was also the Springbok coach in 1997, taking charge of eight Tests, of which the Boks won three. Du Plessis succeeded Andre Markgraaff and was replaced by Nick Mallett.
Du Plessis was also a Western Province and Stormers assistant coach alongside Gert Smal in the early 2000s.
Du Plessis son, Jean-Luc, is currently part of the Stormers' Super Rugby squad, as well as his nephew Daniel du Plessis, who is the son of Carel du Plessis' brother and fellow Springbok, Michael.


{% extends "tutorial.html" %} {% load mixin from templatefilters %} {% block pagebreadcrumb %}{{ tut.title }}{% endblock %} {% block head %} {% endblock %} {% block iscompatible %} return HTMLElement.prototype.webkitCreateShadowRoot || HTMLElement.prototype.createShadowRoot ? true : false; {% endblock %} {% block html5badge %} {% endblock %} {% block share_image %} {% endblock %} {% block content %}
{% include "warning.html" %}
This article discusses more of the amazing things you can do with ShadowDOM, more of its JS and declarative APIs, styling options, and more. It builds on the concepts discussed in Shadow DOM 101. For an introduction to ShadowDOM and its language, see Dominic Cooney's most excellent article.
If you're hosting a party, it gets stuffy if everyone is crammed into the same room. You want the option of distributing groups of people across multiple rooms. Elements hosting Shadow DOM can do this too, that is to say, they can host more than one shadow root at a time.
Let's see what happens if we try to attach multiple shadow roots to a host:

Host node

What renders is "Root 2 FTW", despite the fact that we added root2 last. This is because the last shadow tree added to a host, wins. It's a LIFO stack as far as rendering is concerned. Examining the DevTools verifies things.
The most recently added tree is called the younger tree, while the more recent one is called the older tree. In this example,root2
is the younger tree androot1
, the older tree.
Rule 1: Shadow trees added to a host are stacked in the order they're added, starting with the most recent first. The last one added is the one that renders.
Then what's the point of using multiple shadows if only the last is invited to the party?
"Shadow insertion points" (<shadow>
) are similar to insertion points (<content>
)
in that they're placeholders. However, unlike regular insertion points, which
selectively funnel and render the content of a host into a shadow tree,
shadow insertion points are hosts for other shadow trees. It's Shadow DOM Inception!
As you can probably imagine, things get more complicated the farther you drill down
the rabbit hole. For this reason, the spec is clear about what should happen with
multiple <shadow>
s:
Rule 2: If multiple <shadow>
insertion points exist
in a shadow tree, only the first is recognized. The rest are ignored.
Looking back to our original example, the first shadow root1
got left off the
invite list. Adding a <shadow>
insertion point brings it back:

Host node

There are a couple of interesting things about this example:
<shadow>
insertion piont. If we wanted the reverse, move the insertion point: root2.innerHTML = '<shadow></shadow>
Root 2 FTW
';
.<content>
insertion point in root1. This makes
the text node "Host node" come along for the rendering ride.What was rendered at <shadow>?
Sometimes it's useful to actually know the (shadow) tree that was rendered at a
<shadow>
insertion point. You can get a reference to that tree through .olderShadowRoot
:
root2.querySelector('shadow').olderShadowRoot === root1 //true
.olderShadowRoot
isn't vendor prefixed because HTMLShadowElement
s only exist
in the context of Shadow DOM...which is already prefixed :)
As with other parts of the web platform, we have DOM APIs and properties to make our scripting life easier.
If an element is hosting Shadow DOM, you can access it's youngest shadow root with
.webkitShadowRoot
:
var root = host.webkitCreateShadowRoot(); console.log(host.webkitShadowRoot === root); // true console.log(document.body.webkitShadowRoot); // null
I'm not even sure why .shadowRoot
is spec'd. It defeats the encapsulation
principles of Shadow DOM and gives outsiders an outlet for traversing into my
supposed-to-be-hidden DOM.
If you're worried about people crossing into your shadows, redefine
.shadowRoot
to be null. A bit of a hack, but it works:
Object.defineProperty(host, 'webkitShadowRoot', { get: function() { return null; }, set: function(value) { } });
In the end, it's important to remember that while amazingly fantastic, Shadow DOM wasn't designed to be a security feature. Don't rely on it for complete content isolation.
If you prefer to building Shadow DOM in JS, HTMLContentElement
and HTMLShadowElement
have interfaces for that.

 Host node

This example is nearly identical to the one in the previous section.
The only difference is that I'm now using select
to pull out the new
.
Nodes that are selected out of host element and "distribute" into the shadow tree are called,...drumroll...distributed nodes! They're allowed to cross the shadow boundary when insertion points invite them.
Insertion points are incredibly power. Think of them as a way to create a "declarative API" for your Shadow DOM. A host element can include all the markup in the world, but unless I invite it into my Shadow DOM with an insertion point, it's meaningless.
What's conceptually bizarre about insertion points is that they don't physically
move DOM. The host's nodes stay intake. Insertion points merely re-project nodes
from the host into the shadow tree. It's a presentation/rendering thing: "Move these nodes over here" "Render these nodes at this location."
Rule 3: You cannot traverse the DOM into a <content>
.
For example:

Host node

Voilà! The h2
isn't a child of the shadow DOM.
For accessing nodes distributed into an insertion point, we have .getDistributedNodes()
:

Eric

Bidelman

Digital Jedi

footer text

 <template id="sdom">  <content select="h2"></content>
 <content select="div"></content>
  <content select="h4:first-of-type"></content>  </template>
Tool: Shadow DOM Visualizer
Conceptualizing distributed nodes is diffult. To help visualize how Shadow DOM takes host nodes and renders them at insertion points, I built a tool using d3.js:
Style encapsulation by default Scoped styles by default
Distributed nodes are still part of the host document. Therefore, styles defined in the host document continue to apply to those nodes, even when they're distributed "inside" the shadow dom. Basically, going into an insertion point doesn't change that. applyAuthorStyles/resetStyleInheritance are strictly for effecting the styling behavior of the nodes defined in the ShadowDOM.
Project nodes are swizzled into place at "render time." Naturally, they get their styles from the document they're in (the host's document). The only exception to that is they might gain additional styles from the place they have been swizzled into (the Shadow DOM).
resetStyleInheritance just says that when you’re looking for a property to inherit, at the boundary between the page and the ShadowRoot, you don’t inherit values from the host but get the "initial value" (per the CSS spec) instead.
We need a cheat-sheet that fits on a business card that web authors can carry in their pocket.  I have my own theme => applyAuthorStyles = false, resetStyleInheritance = true, use a "component reset stylesheet", NB/ content you project gets the styles it had in the page
I want to blend in with the page as much as possible => applyAuthorStyles = true, resetStyleInheritance = false, NB/ selectors don’t cross the shadow boundary; if you confine your stylesheet to a subset of selectors, styling will be robust
I have my own appearance, but I want to match basic properties like text color => applyAuthorStyles = false, resetStyleInheritance = false
I am a component designed to get my theme from styles in the page => applyAuthorStyles = true, resetStyleInheritance = true
http://html5-demos.appspot.com/static/webcomponents/index.html#30
Don't let strangers in.
http://html5-demos.appspot.com/static/webcomponents/index.html#31
poke holes in the style inheritance shield
content::disributed()
@host
Being able to style multiple hosts:
@host {
g-foo { }
g-bar { }
/ ... /
}
blah
Blah
Blah
Blah
{% endblock %}


Experiment¶
-
class
skassist.library.
Experiment
(experiment_folder)¶ Manages the root folder of an experiment.
An experiments folder manages the dataset and cross-validation splits associated with it. Evaluation and result calcualtion can be initiated for all models with the evaluate()
- Attributes:
experiments (
list
): A list of experiments found in the library folder.path (
str
): Path to the root directory.
Todo
- Implement
LibEstimator
base class that all models must inherit from. The base class ensures that the needed properties are implemented. - Offer optional arguments in
Experiment.add()
for the LibEstimator properties when a user doesn’t want to inherit from the base class!?
-
classmethod
New
(name, df, skf, features, lib_path, description='')¶ Factory method for creating a new Experiment instance given a name, dataset, cross-validation mask and a list of features. The path to the library in which the experiment is created must be given.
- Args:
- name (
str
): - A name for the experiment. Will be used together with the timestamp for storing the experiment.
- df (
pandas.DataFrame
): - The dataset as a Pandas DataFrame.
- skf (
numpy.ndarray
): - An array of indices, each being one cross-validation split.
- features (
list
): - A list of column names that are to be used as features during training.
- lib_path (
str
): - Path to the library in which the experiment is created.
- description (
str
): - A descriptive string of the dataset, experiment or changes to make finding stuff later easier.
- name (
-
add
(estimator)¶ Adds a model to the experiment.
- Args:
- estimator (
BaseEstimator
): - A name for the experiment. Will be used together with the timestamp for storing the experiment.
- estimator (
-
calc_results
(scoring_function, name, max_workers=1, verbose=1, te_split_idx=1)¶ Calculate result for all models in this experiment. Calls
calc_result()
of eachModel
.- Args:
- scoring_function (
function()
): - A python function that calculates results given a model, its
predictions and the true labels. See
scoring_function()
. - name (
str
): - A name for the result series. If a series with the given names exists, only missing results will be computed. Existing results are not deleted.
- max_workers (
int
): - The number of models for which to concurrently calculate the results.
- max_workers=1 is usually faster as the overhead of the ProcessPoolExecutor is too large. Could try ThreadPoolExecutor.
verbose (
int
): Level of print output. 0 is no output.te_split_idx (
int
): Index of split that the model is evaluated on.- scoring_function (
-
find
(boolean_func)¶ Iterator function, yielding all models matching
boolean_func()
.- Args:
- boolean_func (
boolean_func()
): - A function that takes a
Model
and returns a boolean indicating a match.
- boolean_func (
-
findone
(boolean_func)¶ Return the first model matching
boolean_func()
.- Args:
- boolean_func (
boolean_func()
): - A function that takes a
Model
and returns a boolean indicating a match.
- boolean_func (


var five = require("johnny-five"), board = new five.Board(); board.on("ready", function() { // Create an Led on pin 13 and strobe it on/off (new five.Led(13)).strobe(); });


---
id: custom-builds
title: lodash custom builds
---
lodash v3.9.3
Custom builds
Custom builds make it easy to create lightweight versions of lodash containing only the features you need. To top it off, we handle all function dependency & alias mapping for you. Review the build differences & pick the one that’s right for you.
Using Grunt? We also provide a Grunt plugin to build lodash as part of your Gruntfile.
The lodash
command-line utility is available when lodash-cli is installed as a global package:
$ {sudo -H} npm i -g npm
$ {sudo -H} npm i -g lodash-cli
$ lodash -h
Note: Uninstall older versions before installing lodash-cli
.
compat
modifier. (default)
lodash compat
modern
modifier.
lodash modern
strict
modifier.
lodash strict
modularize
modifier.
lodash modularize
Build commands:
category
command to pass comma separated categories of functions to include in the build.lodash category=collection,function
exports
command to pass comma separated names of ways to export the lodash
function.lodash exports=amd,commonjs,iojs
iife
command to specify code to replace the IIFE that wraps lodash.
lodash iife="!function(window,undefined){ %output% }(this)"
include
command to pass comma separated names of functions to include in the build.
lodash include=each,filter,map
minus
command to pass comma separated function/category names to remove from the build.
lodash modern minus=result,shuffle
plus
command to pass comma separated function/category names to add to the build.
lodash category=array plus=random,template
template
command to pass the file path pattern used to match template files to precompile._.templates
object.
lodash template="./*.jst"
settings
command to pass template settings used when precompiling templates.
lodash settings="{interpolate:/\{\{([\s\S]+?)\}\}/g}"
moduleId
command to specify the AMD module ID for lodash or the module ID used to include lodash in compiled templates. Use “none” as the module ID to create compiled templates without a dependency on lodash.
lodash moduleId=underscore
Notes:
compat
& modern
may be combinedexports
values “es” & “npm” may only be used in conjunction with the modularize
commandmodularize
command uses the first `exports` values as its module format, ignoring subsequent values.-o
or --output
all files created are saved to the current working directoryThe following options are also supported:
-c
, --stdout
................ Write output to standard output-d
, --development
..... Write only the non-minified development output-h
, --help
.................... Display help information-m
, --source-map
....... Generate a source map using an optional source map URL-o
, --output
................ Write output to a given path/filename-p
, --production
....... Write only the minified production output-s
, --silent
............... Skip status updates normally logged to the console-V
, --version
............. Output current version of lodash


People magazine names John Legend as 2019 Sexiest Man Alive
by JONATHAN LANDRUM Jr.LOS ANGELES (AP) - R&B; crooner John Legend has been named the Sexiest Man Alive by People magazine.
The Grammy-winning singer known for his silky-smooth vocals was revealed as this year’s winner Tuesday night on NBC’s “The Voice.” He serves as a coach on the singing competition series with Gwen Stefani, Kelly Clarkson and Blake Shelton.
Shelton, who was named Sexiest Man Alive in 2017, announced Legend’s honor on “The Voice.” The country singer then handed Legend some short shorts with bedazzled letters “EGOTSMA” to signify the singer’s many honors: an Emmy, Grammy, Oscar, Tony and now, Sexiest Man Alive.
Legend tells the magazine in an issue out Friday the honor comes with some pressure after following Idris Elba, who was last year’s winner. He jokes it “is not fair and is not nice to me!”
The 40-year-old Legend is a 10-time Grammy winner. He scored an Oscar in 2015 for co-writing the song “Glory” from the film “Selma.” He won a Tony Award for his co-producer work on “Jitney” and took home an Emmy as a producer on NBC’s live version of “Jesus Christ Superstar,” a project in which he also played the role of Jesus.
Legend has two children with model-television host-cookbook author Chrissy Teigen.
Other recent winners include Dwayne Johnson, Chris Hemsworth, Adam Levine, Channing Tatum and David Beckham.
“I want to thank Blake Shelton,” Legend said. “I observed every move he made, every utterance that came from his mouth and I think some of it rubbed off on me.”
Legend said his wife is proud of him.
“I’ve finally impressed her,” he said.
The couple’s children? Not so much. Teigen posted a video of the reveal of their daughter asking to turn off “The Voice” and go back to a movie. Teigen titled the post “The kids … do not care.”
Sign up for Daily Newsletters
Copyright © 2019 The Washington Times, LLC.
Please read our comment policy before commenting.


Coder | Developer | Thinker | Achiever
Find Out MoreI am a computer science graduate from the University of North Carolina at Charlotte. Having work experience of more than 2 years, developed a sense of professionalism in me. It also helped me to inculcate team spirit and thrive an ability to work and interact effectively with a diverse group of individuals. Learning Advance skill sets and Adhering to unfamiliar concepts from UNC Charlotte has established a powerful cognitive urge to empower me with cutting-edge technological advancements.
Get Started!C/C++, Java (Core and Enterprise), ASP .NET 4.0, MVC 3.0, Entity Framework, C#
HTML5, CSS, PHP, NodeJS
Visual Studio 2015/2017, Microsoft SharePoint Server 2007, Microsoft SQL Server 2000/2005, IntelliJ 2019, Win Deploy, Microsoft Office, JIRA , NoSQL, Linux, MySQL Workbench
Adobe Photoshop Lightroom, NuGet, Git, Scrum, SDLC
Full Stack Engineer | June 2020 - August 2020
Scrapped 15 million lines of data from NYCOpenData for LOTB backend
Impemented Scripting using python and seleniumfor data scraping
Created billboard for LOTB to render QR code on screen with Python and flask as backend with HTMl and CSS as frontend.
Website
Systems Engineer | March 2017 - July 2019
Worked as Software Developer for programs in Wealth Management(WM) Morgan Stanley to deliver end-to-end analysis and remediation of 400+ Microsoft .Net applications.
Created and incorporated Restful API for masking sensitive data shown on User Interface (UI).
Experienced in implementing large scale Integration, Migration, and Remediation of applications in scope
January 2020 - Present
Working as a Teaching Assistant for Cloud Computing - ITCS 6190 to perform teaching, assessment activities, and supervise in-class activities.


macrology
`Prev `__
M
`Next `__
--------------
**macrology**: /mak·rol'@·jee/, n.
1. Set of usually complex or crufty macros, e.g., as part of a large
system written in `*LISP* <../L/LISP.html>`__,
`*TECO* <../T/TECO.html>`__, or (less commonly) assembler.
2. The art and science involved in comprehending a macrology in sense 1.
Sometimes studying the macrology of a system is not unlike archeology,
ecology, or `*theology* <../T/theology.html>`__, hence the sound-alike
construction. See also `*boxology* <../B/boxology.html>`__.
--------------
+---------------------------+----------------------------+------------------------------+
| `Prev `__ | `Up <../M.html>`__ | `Next `__ |
+---------------------------+----------------------------+------------------------------+
| macro- | `Home <../index.html>`__ | maggotbox |
+---------------------------+----------------------------+------------------------------+


Join the digital team
“We design content and tools to help the most vulnerable in society - who face increasing problems in today's world.”
That’s what one person said when we asked our digital team what it’s like to work at Citizens Advice recently, and it sums up why we think the team is so special. Our work can make a real difference to people at difficult times in their lives. We help people solve problems - and, as another person put it, we are “doing something with a positive social purpose, not just aimed at achieving more traffic or selling things.”
Citizens Advice is doing important digital work: we are designing content and tools for challenges that haven’t been solved before, like helping people fill out claim forms for Personal Independence Payment or Employment and Support Allowance.
Our team is collaborative. Join us and you’ll get the chance to:
work in a multi-disciplinary team, learning from your colleagues and other parts of the organisation take part in user research and testing, seeing the difference your work can make to real people. We work in an experimental, agile way - it’s okay to fail fast and learn early from any mistakes.
Available roles
Content Design
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In malesuada mattis euismod. In varius nisl vel ex eleifend, eget pellentesque sem feugiat. Ut tristique, augue eget pellentesque rutrum, justo nunc convallis leo, tempor rhoncus lacus metus efficitur odio. Phasellus metus erat, condimentum sit amet leo ac, viverra consectetur lorem.
UX Design
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In malesuada mattis euismod. In varius nisl vel ex eleifend, eget pellentesque sem feugiat. Ut tristique, augue eget pellentesque rutrum, justo nunc convallis leo, tempor rhoncus lacus metus efficitur odio. Phasellus metus erat, condimentum sit amet leo ac, viverra consectetur lorem.
Research
Lorem ipsum dolor sit amet, consectetur adipiscing elit. In malesuada mattis euismod. In varius nisl vel ex eleifend, eget pellentesque sem feugiat. Ut tristique, augue eget pellentesque rutrum, justo nunc convallis leo, tempor rhoncus lacus metus efficitur odio. Phasellus metus erat, condimentum sit amet leo ac, viverra consectetur lorem.
Job alerts by email
1.9m
people helped by our local Citizens Advice network
20.7m
people assisted via our website
Flexible working
Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diam nonummy nibh euimdod tincidunt ut laoreet dolore magna aliquam erat volutpat.


If your resource file references external variables, set them here.
These variables will be saved to a temporary variable file and passed to Terraform using the -var-file option.
For more information, see: Input Variables.


{{ book.data.title }}
by
{% include 'snippets/authors.html' with book=book %}
{% include 'snippets/book_cover.html' with book=book size=large %}
{{ active_tab }} rating: {{ rating | stars }}
{% if description %}{{ book.data.description | description }}{% endif %}
{% for tag in tags %}
{% include 'snippets/tag.html' with tag=tag user=request.user user_tags=user_tag_names %}
{% endfor %}
Reviews
{% if not reviews %}No reviews yet!
{% endif %}Average rating: {{ rating | stars }}
{% for review in reviews %} {% include 'snippets/review.html' with review=review %} {% endfor %}


This example shows how to use the
ngeo-streetview
component with GoogleStreetview.
GoogleStreetView
Dummy tool


Welcome to my algorithm showcase. Are you a recruiter wondering if I can do some basic JavaScript algorithms?  Enter a word or sentence in the box below, click submit, and watch the magic happen


package Supers::Task::Sendmail;
use Resque::WorkerClass;
has from => is => 'ro', isa => 'Str', required => 1;
has to => is => 'ro', isa => 'Str', required => 1;
has subject => is => 'ro', isa => 'Str', required => 1;
has body => is => 'ro', isa => 'Str', required => 1;
# The boring part of building and sending it
sub run($self) { ... }
1;
Workers listen to queues
with priorities
A worker instatiate job class and run() it
Probably forking
Simple example
Send e-mail
$resque->push( some_queue => {
class => 'Supers::Task::Sendmail',
args => [{
from =><EMAIL_ADDRESS>to =><EMAIL_ADDRESS>subject => 'A simple job example',
body => 'Something boring',
}]
});
Around 50 Million
single tasks
Most common workflows involves several jobs/classes
Never mix read with write
(fork vs no-fork)
Workflow example
Crawl e-commerce (foo.com)
$resque->push( foo => {
class => 'Supers::Task::Crawl',
args => [{
supermarket => 'foo',
store_queue => 'store',
run_id => 's0m31d',
}]
});
5m to 500m events on this kind of workflows
Different priorities
vs
Different queues
Each crawler need to paralelize over different IPs
At least X workers per site/queue
No more than X parallel requests per site
Static worker distrubution
ansible + ubic
Reconfigure or add queues
=
Update ansible & deploy
Crawling workflows are evolving
since 2y ago
Standarization
of new workflows
happened along...
Which allowed Us
to grow faster and safer
We keep adding workforce boxes
... and editing f* ansible files
Remove ansible
(for reconfiguring queues)
Resque::Worker::autoconfig()
sub work($self) {
$self->startup;
while ( ! $self->shutdown ) {
if ( !$self->paused && ( my $job = $self->reserve ) ) {
$self->log("Got job $job");
$self->work_tick($job);
}
elsif( $self->interval ) {
my $status = $self->paused ? "Paused" : 'Waiting for ' . join( ', ', @{$self->queues} );
$self->procline( $status );
$self->log( $status );
sleep( $self->interval );
}
}
$self->unregister_worker;
}
sub work($self) {
$self->startup;
while ( ! $self->shutdown ) {
$self->autoconfig->($self) if $self->has_autoconfig;
if ( !$self->paused && ( my $job = $self->reserve ) ) {
$self->log("Got job $job");
$self->work_tick($job);
}
elsif( $self->interval ) {
my $status = $self->paused ? "Paused" : 'Waiting for ' . join( ', ', @{$self->queues} );
$self->procline( $status );
$self->log( $status );
sleep( $self->interval );
}
}
$self->unregister_worker;
}
if ( $opt->autoconfig ) {
require Mojo::UserAgent;
require Sys::Hostname;
my $ua = Mojo::UserAgent->new;
my $ip = $ua->get('http://ifconfig.co/json')->res->json || {};
my $last_update = 0;
$w->autoconfig(sub{
my $w = shift;
my $time = time;
# Autoconfig every $opt->autoconfig_interval
return if $time - $last_update < $opt->autoconfig_interval;
$last_update = time;
my $tx = $ua->post( $opt->autoconfig_url, json => {
worker_name => $opt->worker_name,
hostname => Sys::Hostname::hostname(),
map { $_ => $ip->{$_} } qw/ ip city country country_iso /
});
unless ( $tx->error ) {
my $conf = $tx->res->json;
for my $method ( keys %$conf ) {
next unless $w->can($method);
$w->$method( $conf->{$method} );
}
}
});
}
> ss-worker --help
ss-worker [-adfiMnquv] [long options...] <some-arg>
-q STR... --queue STR... queue name
-i NUM --interval NUM Polling interval in floating
seconds for this resque worker
(Default 5 seconds)
-f --cant-fork Don't let resque fork
-M STR... --module STR... Modules to load before forking
occurs
-a --autoconfig Activate worker autoconfig
-n STR --worker-name STR Worker name to be reported to the
config server (default to pid)
-u STR --autoconfig-url STR Autoconfig URL to request
configuration (defaults to
http://config.ss/worker)
-d INT --autoconfig-interval INT Autoconfig interval in secconds to
request configuration (defaults to
60)
Worker brain
New configuration service
Work units
name + queues + props
Prevent IP sharing
Among some units
Auto balancing
On worker registration
Simplify state sharing
Clustering?, replication?
Update based on work-load
My new pet-project
Not yet in production
Will replace Ubic
Worker supervisor
Resque focused
(Soysuper focused)
package Supers::Task::Test::Passing;
use Resque::WorkerClass;
has queues => is => 'ro', required => 1;
has pending => is => 'ro', default => sub{100};
has delay => is => 'ro', default => sub{10};
sub run($self) {
sleep $self->delay;
my $next_queue = shift $self->queues->@*;
$self->resque->push( $next_queue => {
class => __PACKAGE__,
args => [{
queues => [ $self->queues->@*, $next_queue ],
pending => $self->pending - 1,
delay => $self->delay
}]
}) if $self->pending - 1;
}
1;


Recipe 3.7. Fuzzy Parsing of DatesCredit: Andrea Cavalcanti ProblemYour program needs to read and accept dates that don't conform to the datetime standard format of "yyyy, mm, dd". SolutionThe third-party dateutil.parser module provides a simple answer: import datetime import dateutil.parser def tryparse(date): # dateutil.parser needs a string argument: let's make one from our # `date' argument, according to a few reasonable conventions...: kwargs = { } # assume no named-args if isinstance(date, (tuple, list)): date = ' '.join([str(x) for x in date]) # join up sequences elif isinstance(date, int): date = str(date) # stringify integers elif isinstance(date, dict): kwargs = date # accept named-args dicts date = kwargs.pop('date') # with a 'date' str try: try: parsedate = dateutil.parser.parse(date, **kwargs) print 'Sharp %r -> %s' % (date, parsedate) except ValueError: parsedate = dateutil.parser.parse(date, fuzzy=True, **kwargs) print 'Fuzzy %r -> %s' % (date, parsedate) except Exception, err: print 'Try as I may, I cannot parse %r (%s)' % (date, err) if _ _name_ _ == "_ _main_ _": tests = ( "January 3, 2003", # a string (5, "Oct", 55), # a tuple "Thursday, November 18", # longer string without year "7/24/04", # a string with slashes "24-7-2004", # European-format string {'date':"5-10-1955", "dayfirst":True}, # a dict including the kwarg "5-10-1955", # dayfirst, no kwarg 19950317, # not a string "11AM on the 11th day of 11th month, in the year of our Lord 1945", ) for test in tests: # testing date formats tryparse(test) # try to parse Discussiondateutil.parser's parse function works on a variety of date formats. This recipe demonstrates a few of them. The parser can handle English-language month-names and two- or four-digit years (with some constraints). When you call parse without named arguments, its default is to first try parsing the string argument in the following order: mm-dd-yy. If that does not make logical sense, as, for example, it doesn't for the '24-7-2004' string in the recipe, parse then tries dd-mm-yy. Lastly, it tries yy-mm-dd. If a "keyword" such as dayfirst or yearfirst is passed (as we do in one test), parse attempts to parse based on that keyword. The recipe tests define a few edge cases that a date parser might encounter, such as trying to pass the date as a tuple, an integer (ISO-formatted without spaces), and even a phrase. To allow testing of the keyword arguments, the tryparse function in the recipe also accepts a dictionary argument, expecting, in this case, to find in it the value of the string to be parsed in correspondence to key 'date', and passing the rest on to dateutil's parser as keyword arguments. dateutil's parser can provide a pretty good level of "fuzzy" parsing, given some hints to let it know which piece is, for example, the hour (such as the AM in the test phrase in this recipe). For production code, you should avoid relying on fuzzy parsing, and either do some kind of preprocessing, or at least provide some kind of mechanism for checking the accuracy of the parsed date. See AlsoFor more on date-parsing algorithms, see dateutil documentation at https://moin.conectiva.com.br/DateUtil?action=highlight&value=DateUtil; for date handling, see the datetime documentation in the Library Reference. |