1. Introduction
The script P4Transfer.py solves the problem: how to transfer changes between unrelated and unconnected Perforce Helix Core repositories.
If you have a 2015.1 or greater Helix Core server then you can use the new P4DVCS commands (clone
/fetch
/push
). If you have an older version of Helix Core (or very large repository sizes to be transferred) then P4Transfer.py
may be your best option! See next section for guidance.
While best practice is usually to have only one Perforce Server, the reality is often that many different Perforce Servers are required. A typical example is the Perforce public depot, which sits outside the Perforce Network.
Sometimes you start a project on one server and then realize that it would be nice to replicate these changes to another server. For example, you could start out on a local server on a laptop while being on the road but would like to make the results available on the public server. You may also wish to consolidate various Perforce servers into one with all their history (e.g. after an acquisition of another company).
2. P4Transfer vs Helix native DVCS functions
Both Helix native DVCS and P4Transfer enable migration of detailed file history from a set of paths on one Helix Core server into another server.
Helix native DVCS has additional functionality, such as creating a personal micro-repo for personal use without a continuously running ‘p4d’ process.
| When it is an option, using Helix native DVCS is preferred. But if that can’t be used for some reason, P4Transfer can pretty much always be made to work. |
2.1. Guidance on tool differences
Pros for native DVCS:
-
Helix native DVCS is a fully supported product feature.
-
Helix native DVCS requires consistency among the Helix Core servers: Same case sensitivity setting, same Unicode mode, and same P4D version (with some exceptions).
-
Helix native DVCS is easy to setup and use.
-
Helix native DVCS requires particular configurables to be setup, and may be viewed as a security concern for the extraction of history (this can be controlled with pre-command triggers)
-
Helix native DVCS has some limitations at larger scales (depends on server RAM as it creates zip files) - won’t scale to TB requiring to be transferred.
-
Helix native DVCS is generally deemed to product the highest possible quality data on the target server, as it transfers raw journal data and archive content.
-
Helix native DVCS is very fast.
-
Helix native DVCS has no external dependencies.
-
Helix native DVCS bypasses triggers.
When P4Transfer might be a better option:
-
If Helix native DVCS hits data snags, there may not be an easy way to work around them, unless a new P4D server release address them.
-
Helix native DVCS must be explicitly enabled. If not already enabled, it requires ‘super’ access on both Helix Core servers involved in the process.
-
P4Transfer is community supported (and with paid Consulting engagements).
-
P4Transfer can make timestamps more accurate if it has ‘admin’ level access, but does not require it.
-
P4Transfer automates front-door workflows, i.e. it does would a human with a ‘p4’ command line client, fleet fingers and a lot of time could do.
-
P4Transfer can work with mismatched server data sets (different case sensitivity, Unicode mode, or P4D settings) so long as the actual data to be migrated doesn’t cause issues. (For example, if you try to copy paths that actually do have Korean glyphs in the path name to a non-Unicode server, that ain’t gonna work).
-
If P4Transfer does have issues with importing some data (like the above example with Unicode paths), you can manually work around those snags, and then pick up with the next changelist. If there aren’t too many snags, this trial and error process is viable.
-
P4Transfer is reasonably fast as a front-door mechanism.
-
P4Transfer can be run as a service for continuous operation, and has successfully run for months or more.
-
P4Transfer data quality is excellent in terms of detail (e.g. integration history, resolve options, etc.). However, it is an emulation of history rather than a raw replay of actually history in the native format as done by Helix native DVCS. The nuance in history differences rarely has practical implications.
-
P4Transfer requires more initial setup than Helix native DVCS.
-
P4Transer requires Python (2.7 or 3.6+).
-
P4Transfer can be interfered with by custom policy enforcement triggers on the target server.
3. Implementation
The basic idea is to create a client workspace on each Perforce Server that maps the projects to be transferred. Both client workspaces must share the same root directory and client side mapping. For example:
Source client:
Client: workspace_server1
Root: /work/transfer
View:
//depot/myproject/dev/... //workspace_server1/depot/myproject/dev/...
//depot/other/dev/... //workspace_server1/depot/other/dev/...
Target client:
Client: workspace_server2
Root: /work/transfer
View:
//import/mycode/... //workspace_server2/depot/myproject/dev/...
//import/stuff/... //workspace_server2/depot/other/dev/...
These client workspaces are created automatically from the view
entries in the config file described below.
P4Transfer works uni-directionally. The tool will inquire the changes for the workspace files and compare these to a counter.
P4Transfer uses a single configuration file that contains the information of both servers as well as the current counter values. The tool maintains its state counter using a Perforce counter on the target server (thus requiring review
privilege as well as write
privilege – by default it assumes super
user privilege is required since it updates changelist owners and date/time to the same as the source – this functionality is controlled by the config file).
3.1. Classic/local target depots vs Streams targets
It is now possible to migrate streams to streams. This is done by creating a source workspace which can read any specified stream (it is just a normal workspace since syncing from any stream is possible). The target workspace is a special stream workspace which is a mainline with no share …
line in it, but which uses import+
to write to all the desired target streams.
Notes/restrictions on streams:
-
Currently supports streams→streams only (not classic to streams)
-
Takes whole streams rather than allowing filtering of source streams
-
Will auto-create target streams if necessary when you use wildcard matching ('*') in source/target stream names, e.g. allowing you to take all
//streams_depot/release*
streams across easily.
| Remember that humans should not be writing to the targets of a P4Transfer instance (streams or otherwise) - or the script may fail in strange ways! |
4. Setup
You will need Python 2.7 or 3.6+ and P4Python 2017.2+ to make this script work.
The easiest way to install P4Python is probably using “pip” – make sure this is installed. Then:
pip install p4python
If the above needs to build and fails, then this usually works for Python 3.6: pip3 install p4python==2017.2.1615960
|
Alternatively, refer to P4Python Docs
If you are on Windows, then look for an appropriate version on the Perforce ftp site (for your Python version), e.g. http://ftp.perforce.com/perforce/r20.1/bin.ntx64/
4.1. Installing P4Transfer.py
The easiest thing to do is to download this repo either by:
-
running
git clone https://github.com/perforce/p4transfer.git
-
or by downloading the project zip file and unzipping.
The minimum requirements are the modules P4Transfer.py
and logutils.py
If you have installed P4Python as above, then check the requirements.txt
for other modules to install via pip
or pip3
.
4.2. Getting started
Note that if running it on Windows, and especially if the source server has filenames containing say umlauts or other non-ASCII characters, then Python 2.7 is required currently due to the way Unicode is processed. Python 3.6+ on Mac/Unix should be fine with Unicode as long as you are using P4Python 2017.2+
Create the workspaces for both servers, ensuring that the root directories and client views match.
Now initialize the configuration file, by default called transfer.cfg
. This can be generated by the script:
python3 P4Transfer.py –-sample-config > transfer.yaml
Then edit the resulting file, paying attention to the comments.
The password stored in P4Passwd is optional if you do not want to rely on tickets. The tool performs a login if provided with a password, so it should work with security=3
or auth_check
trigger set.
Note that although the workspaces are named the same for both servers in this example, they are completely different entities.
A typical run of the tool would produce the following output:
C:\work\> python3 P4Transfer.py -c transfer.yaml -r
2014-07-01 15:32:34,356:P4Transfer:INFO: Transferring 0 changes
2014-07-01 15:32:34,361:P4Transfer:INFO: Sleeping for 1 minutes
If there are any changes missing, they will be applied consecutively.
4.3. Script parameters
P4Transfer has various options – these are documented via the -h
or --help
parameters.
The following text may not display properly if your are viewing this P4Transfer.adoc file in GitHub. Please refer the the .pdf version instead, or open up help.txt file directly.
usage: P4Transfer.py [-h] [-c CONFIG] [-n] [-m MAXIMUM] [-k] [-r] [-s]
[--sample-config] [-i] [--end-datetime END_DATETIME]
NAME:
P4Transfer.py
DESCRIPTION:
This python script (2.7/3.6+ compatible) will transfer Perforce changelists with all contents
between independent servers when no remote depots are possible, and P4 DVCS commands
(such as p4 clone/fetch/zip/unzip) are not an option.
This script transfers changes in one direction - from a source server to a target server.
Usage:
python3 P4Transfer.py -h
The script requires a config file, by default transfer.yaml,
that provides the Perforce connection information for both servers.
An initial example can be generated, e.g.
P4Transfer.py --sample-config > transfer.yaml
For full documentation/usage, see project doc:
https://github.com/perforce/p4transfer/blob/main/doc/P4Transfer.adoc
optional arguments:
-h, --help show this help message and exit
-c CONFIG, --config CONFIG
Default is transfer.yaml
-n, --notransfer Validate config file and setup source/target
workspaces but don't transfer anything
-m MAXIMUM, --maximum MAXIMUM
Maximum number of changes to transfer
-k, --nokeywords Do not expand keywords and remove +k from filetype
-r, --repeat Repeat transfer in a loop - for continuous transfer as
background task
-s, --stoponerror Stop on any error even if --repeat has been specified
--sample-config Print an example config file and exit
-i, --ignore-integrations
Treat integrations as adds and edits
--end-datetime END_DATETIME
Time to stop transfers, format: 'YYYY/MM/DD HH:mm' -
useful for automation runs during quiet periods e.g.
run overnight but stop first thing in the morning
Copyright (C) 2012-21 Sven Erik Knop/Robert Cowham, Perforce Software Ltd
4.4. Optional Parameters
-
--notransfer
- useful to validate your config file and that you can connect to source/target p4d servers, and report on how many changes might be transferred. -
--maximum
- useful to perform a test transfer of a single changelist when you get started (although remember this might be a changelist with a lot of files!) -
--keywords
- useful to avoid issues with expanding of keywords on a different server. Keywords make it hard to compare source/target results, and make transfers slower due to extra work required. -
--end-datetime
- useful to schedule a run of P4Transfer and have it stop at the desired time (e.g. run overnight and stop when users start work in the morning). Useful for scheduling long running transfers (can be many days) in quiet periods (e.g. together with Linuxat
command)
4.5. Long running jobs
On Linux, recommend you execute it as a background process, and then monitor the output:
nohup python3 P4Transfer.py -c transfer.yaml -r > out1 &
This will run in the background, and poll for new changes (according to poll_interval
in the config file.)
You can look at the output file for progress, e.g. (avoiding long lines of text which can be output), or grep the log file:
tail -f out1 | cut -c -140
grep :INFO: log-P4Transfer-*.log
Note that if you edit the configuration file, it will be re-read the next time the script wakes up and polls for input. So you do not need to stop and restart the job.
4.6. Setting up environment
The following simple setup will allow you to cross check easily source and target servers.
Assume we are in a directory: /some/path/p4transfer
export P4CONFIG=.p4config mkdir source target cd source vi .p4config
and create appropriate values as per your config file for the source server e.g.:
cat .p4config P4PORT=source-server:1666 P4USER=p4transfer P4CLIENT=p4transfer_client
And similarly create a file in the target
sub-directory.
This will allow you to quickly and easily cd
between directories and be able to run commands against respective
source and target p4d instances.
4.7. Configuration Options
The comments in the file are mostly self-explanatory. It is important to specify the main values for the [source]
and [target]
sections.
P4Transfer.py --sample-config > transfer.yaml
cat transfer.yaml
The following included text may not display correctly when this .adoc file is viewed in GitHub - instead download the PDF version of this doc, or open transfer.yaml directly.
# Save this output to a file to e.g. transfer.yaml and edit it for your configuration
# counter_name: Unique counter on target server to use for recording source changes processed. No spaces.
# Name sensibly if you have multiple instances transferring into the same target p4 repository.
# The counter value represents the last transferred change number - script will start from next change.
# If not set, or 0 then transfer will start from first change.
counter_name: p4transfer_counter
# instance_name: Name of the instance of P4Transfer - for emails etc. Spaces allowed.
instance_name: Perforce Transfer from XYZ
# For notification - if smtp not available - expects a pre-configured nms FormMail script as a URL
# E.g. expects to post using 2 fields: subject, message
# Alternatively, use the following entries (suitable adjusted) to use Mailgun for notifications
# api: "<Mailgun API key"
# url: "https://api.mailgun.net/v3/<domain or sandbox>"
# mail_from: "Fred<EMAIL_ADDRESS># mail_to:
# -<EMAIL_ADDRESS>mail_form_url:
# The mail_* parameters must all be valid (non-blank) to receive email updates during processing.
# mail_to: One or more valid email addresses - comma separated for multiple values
# E.g. somebody<EMAIL_ADDRESS>mail_to:
# mail_from: Email address of sender of emails, E.g<EMAIL_ADDRESS>mail_from:
# mail_server: The SMTP server to connect to for email sending, E.g. smtpserver.example.com
mail_server:
# ===============================================================================
# Note that for any of the following parameters identified as (Integer) you can specify a
# valid python expression which evaluates to integer value, e.g.
# "24 * 60"
# "7 * 24 * 60"
# Such values should be quoted (in order to be treated as strings)
# -------------------------------------------------------------------------------
# sleep_on_error_interval (Integer): How long (in minutes) to sleep when error is encountered in the script
sleep_on_error_interval: 60
# poll_interval (Integer): How long (in minutes) to wait between polling source server for new changes
poll_interval: 60
# change_batch_size (Integer): changelists are processed in batches of this size
change_batch_size: 1000
# The following *_interval values result in reports, but only if mail_* values are specified
# report_interval (Integer): Interval (in minutes) between regular update emails being sent
report_interval: 30
# error_report_interval (Integer): Interval (in minutes) between error emails being sent e.g. connection error
# Usually some value less than report_interval. Useful if transfer being run with --repeat option.
error_report_interval: 15
# summary_report_interval (Integer): Interval (in minutes) between summary emails being sent e.g. changes processed
# Typically some value such as 1 week (10080 = 7 * 24 * 60). Useful if transfer being run with --repeat option.
summary_report_interval: 7 * 24 * 60
# sync_progress_size_interval (Integer): Size in bytes controlling when syncs are reported to log file.
# Useful for keeping an eye on progress for large syncs over slow network links.
sync_progress_size_interval: 500 * 1000 * 1000
# max_logfile_size (Integer): Max size of file to (in bytes) after which it should be rotated
# Typically some value such as 20MB = 20 * 1024 * 1024. Useful if transfer being run with --repeat option.
max_logfile_size: 20 * 1024 * 1024
# change_description_format: The standard format for transferred changes.
# Keywords prefixed with $. Use \\n for newlines. Keywords allowed:
# $sourceDescription, $sourceChange, $sourcePort, $sourceUser
change_description_format: $sourceDescription\n\nTransferred from p4://$sourcePort@$sourceChange
# change_map_file: Name of an (optional) CSV file listing mappings of source/target changelists.
# If this is blank (DEFAULT) then no mapping file is created.
# If non-blank, then a file with this name in the target workspace is appended to
# and will be submitted after every sequence (batch_size) of changes is made.
# Default type of this file is text+CS32 to avoid storing too many revisions.
# File must be mapped into target client workspace.
# File can contain a sub-directory, e.g. change_map/change_map.csv
# Note that due to the way client workspace views are created the local filename
# should include a valid source path including depot name, e.g.
# //depot/export/... -> depot/export/change_map.csv
change_map_file:
# superuser: Set to n if not a superuser (so can't update change times - can just transfer them).
superuser: y
# ignore_files: An array of regex patterns which are used to ingore any matching files.
# Allows you to ignore some issues which cause transfer problems.
# E.g.
# ignore_files:
# - "some/files/to/*ignore$"
ignore_files:
source:
# P4PORT to connect to, e.g. some-server:1666 - if this is on localhost and you just
# want to specify port number, then use quotes: "1666"
p4port:
# P4USER to use
p4user:
# P4CLIENT to use, e.g. p4-transfer-client
p4client:
# P4PASSWD for the user - valid password. If blank then no login performed.
# Recommended to make sure user is in a group with a long password timeout!.
# Make sure your P4TICKETS file is correctly found in the environment
p4passwd:
# P4CHARSET to use, e.g. none, utf8, etc - leave blank for non-unicode p4d instance
p4charset:
target:
# P4PORT to connect to, e.g. some-server:1666 - if this is on localhost and you just
# want to specify port number, then use quotes: "1666"
p4port:
# P4USER to use
p4user:
# P4CLIENT to use, e.g. p4-transfer-client
p4client:
# P4PASSWD for the user - valid password. If blank then no login performed.
# Recommended to make sure user is in a group with a long password timeout!
# Make sure your P4TICKETS file is correctly found in the environment
p4passwd:
# P4CHARSET to use, e.g. none, utf8, etc - leave blank for non-unicode p4d instance
p4charset:
# workspace_root: Root directory to use for both client workspaces.
# This will be used to update the client workspace Root: field for both source/target workspaces
# They must be the same.
# Make sure there is enough space to hold the largest single changelist that will be transferred!
workspace_root: /work/transfer
# views: An array of source/target view mappings
# You are not allowed to specify both 'views' and 'stream_views' - leave one or other blank!!
# Each value is a string - normally quote. Standard p4 wildcards are valid.
# These values are used to construct the appropriate View: fields for source/target client workspaces
# It is allowed to have exclusion mappings - by specifying the '-' as first character in 'src'
# entry - see last example below.
views:
- src: //depot/source_path1/...
targ: //import/target_path1/...
- src: //depot/source_path2/...
targ: //import/target_path2/...
- src: -//depot/source_path2/exclude/*.tgz
targ: //import/target_path2/exclude/*.tgz
# transfer_target_stream: The name of a special target stream to use - IT SHOULD NOT CONTAIN FILES!!
# This will be setup as a mainline stream, with no sharing and with import+ mappings
# It is in standard stream name format, e.g. //<depot>/<name> or //<depot>/<mid>/<name>
# e.g. transfer_target_stream: //targ_streams/transfer_target
transfer_target_stream:
# stream_views: An array of source/target stream view mappings and other record fields.
# You are not allowed to specify both 'views' and 'stream_views' - leave one or other blank
# Each src/targ value is a string with '*' p4 wildcards to match stream names (like 'p4 streams //depot/rel*')
# Multiple wildcards are allowed, but make sure the number of wildcards matches between source and target.
# Please note that target depots must exist.
# Target streams will be created as required using the specified type/parent fields.
# Field 'type:' has allowed values: mainline, development, release
# Field 'parent:' should specify a suitable parent if you are creating development or release streams.
stream_views:
- src: //streams_src/main
targ: //streams_targ/main
type: mainline
parent: ''
- src: //streams_src2/release*
targ: //streams_targ2/rel*
type: mainline
parent: //streams_targ2/main
- src: //src3_streams/*rel*
targ: //targ3_streams/*release*
type: mainline
parent: //targ3_streams/main
4.7.1. Changelist comment formatting
In the [general]
section, you can customize the change_description_format
value to decide how transferred change descriptions are formatted.
Keywords in the format string are prefixed with $
. Use \n
for newlines. Keywords allowed are: $sourceDescription
, $sourceChange
, $sourcePort
, $sourceUser
.
Assume the source description is “Original change description”.
Default format:
$sourceDescription\n\nTransferred from p4://$sourcePort@$sourceChange
might produce:
Original change description
Transferred from p4://source-server:1667@2342
Custom format:
Originally $sourceChange by $sourceUser on $sourcePort\n$sourceDescription
might produce:
Originally 2342 by FBlogs on source-server:1667 Original change description
4.7.2. Recording a change list mapping file
There is an option in the configuration file to specify a change_map_file. If you set this option (default is blank), then P4Transfer will append rows to the specified CSV file showing the relationship between source and target changelists, and will automatically check that file in after every process.
change_map_file = depot/import/change_map.csv
The result change map file might look something like this:
$ head change_map.csv
sourceP4Port,sourceChangeNo,targetChangeNo
src-server:1666,1231,12244
src-server:1666,1232,12245
src-server:1666,1233,12246
src_server:1666,1234,12247
src-server:1666,1235,12248
It is very straight forward to use standard tools such as grep to search this file. Because it is checked in to the target server, you can also use “p4 grep”.
You will need to ensure that the change_map filename is properly mapped in the local workspace - thus it must
include <depot> and other pathname components in the path. When you have created your target workspace, run p4 client -o
to check the view mapping.
|
5. Misc Usage Notes
Note that since labeling itself is not versioned no labels or tags are transferred.
5.1. Integration Recrods
Branching and integrating with is implemented, as long as both source and target are within the workspace view. Otherwise, the integrate action is downgraded to an add or edit.
5.2. Setting up as a service on Windows
P4Transfer can be setup as a service on Windows using srvinst.exe
and srvanay.exe
to wrap the Python interpreter, or NSSM - The Non-Sucking Service Manager
Please contact<EMAIL_ADDRESS>for more details.
6. Support
Any errors in the script are highly likely to be due to some unusual integration history, which may have been done with an older version of the Perforce server.
If you have an error when running the script, please use summarise_log.sh to create a summary log file to send. E.g.
summarise_log.sh log-P4Transfer-20141208094716.log > sum.log
If you get an error message in the log file such as:
P4TLogicException: Replication failure: missing elements in target changelist: /work/p4transfer/main/applications/util/Utils.java
or
P4TLogicException: Replication failure: src/target content differences found: rev = 1 action = branch type = text depotFile = //depot/main/applications/util/Utils.java
Then please also send the following:
A Revision Graph screen shot from the source server showing the specified file around the changelist which is being replicated. If an integration is involved then it is important to show the source of the integration.
Filelog output for the file in the source Perforce repository, and filelog output for the source of the integrate being performed. e.g.
p4 -ztag filelog /work/p4transfer/main/applications/util/Utils.java@12412 p4 -ztag filelog /work/p4transfer/dev/applications/util/Utils.java@12412
where 12412 is the changelist number being replicated when the problem occurred.
6.1. Re-running P4Transfer after an error
When an error has been fixed, you can usually re-start P4Transfer from where it left off. If the error occurred when validating changelist say 4253 on the target (which was say 12412 on the source) but found to be incorrect, the process is:
p4 -p target-p4:1666 -u transfer_user -c transfer_workspace obliterate //transfer_workspace/...@4253,4253
(re-run the above with the -y flag to actually perform the obliterate)
Ensure that the counter specified in your config file is set to a value less than 4253 such as the changelist immediately prior to that changelist. Then re-run P4Transfer as previously.
7. Contributor’s Guide
Pull Requests are welcome. Code changes should normally be accompanied by tests.
See TestP4Transfer.py for unit/integration tests.
Most tests generate a new p4d
repository with source/target servers and run test transfers.
The use the "rsh" hack to avoid having to spawn p4d on a port.
7.1. Test dependencies
Tests assume there is a valid p4d
in your current PATH.
7.2. Running a single test
Pick your single test class (e.g. testAdd
):
python3 TestP4Transfer.py TestP4Transfer.testAdd
This will:
-
generate a single log file:
log-TestP4Transfer-*.log
-
create a test sub-directory
_testrun_transfer
with the following structure:source/ server/ # P4ROOT and other files for server - uses rsh hack for p4d client/ # Root of client used to checkin files .p4config # Defines P4PORT for source server target/ # Similar structure to source/ transfer_client/ # The root of shared transfer client
This test directory is created new for each test, and then left behind in case of test failures.
If you want to manually do tests or view results, then export P4CONFIG=.p4config
, and cd
into
the source/target directory to be able to run normal p4
commands as appropriate.
7.3. Running all tests
python3 TestP4Transfer.py
It will generate many log files (log-TestP4Transfer-*.log
) which can be examined in case of failure or removed.


Coding Development
I've had some previouse coding experience in highschool. I have worked most extensively with c++, although I have used several GUI coding languages for small project practice.
I have been taught that the greatest skill for a develpor is the ability to learn: to understand how and why things work.
I have some college experience.
Ultimately I'm most interested in videogame devolopment. It didn't take much looking into to find that it's not only a competitive field, but not job secure nor friendly to the developer working. So, for now my short term goals are as follows:
I work well with others and I'm always willing to learn something new.
I like playing games. Generaly I just play videogames from home, but I like to play some board games with friends if I can find the time.
Good, better, best. Never let it rest. 'Til your good is better and your better is best.


| BatchedFillTest |
BatchedFillTest is a test suite which tests
complex queries against the FoodMart database.
|
| ClearViewBase |
ClearViewBase is the base class to build test cases which test
queries against the FoodMart database.
|
| CVBasicTest |
CVBasicTest is a test suite which tests
complex queries against the FoodMart database.
|
| GrandTotalTest |
GrandTotalTest is a test suite which tests scenarios of
using grand total against the FoodMart database.
|
| HangerDimensionTest |
HangerDimensionTest tests the extended syntax of Order
function.
|
| MemHungryTest |
MemHungryTest is a test suite which tests
complex queries against the FoodMart database.
|
| MetricFilterTest |
MetricFilterTest is a test suite which tests scenarios of
filtering out measures' values in the FoodMart database.
|
| MiscTest |
MiscTest is a test suite which tests miscellaneous
complex queries against the FoodMart database.
|
| MultiDimTest |
MultiDimTest is a test suite which tests
complex queries against the FoodMart database.
|
| MultiDimVCTest |
MultiDimVCTest is a test suite which tests
complex queries against the FoodMart database.
|
| MultiLevelTest |
MultiLevelTest is a test suite which tests
complex queries against the FoodMart database.
|
| MultiLevelVCTest |
MultiLevelVCTest is a test suite which tests
complex queries against the FoodMart database.
|
| OrderTest |
OrderTest tests the extended syntax of Order
function.
|
| PartialCacheTest |
PartialCacheTest is a test suite which tests
complex queries against the FoodMart database.
|
| PartialCacheVCTest |
PartialCacheVCTest is a test suite which tests complex queries
against the FoodMart database.
|
| PredicateFilterTest |
PredicateFilterTest is a test suite which tests scenarios of
filtering in the FoodMart database.
|
| QueryAllTest |
QueryAllTest is a test suite which tests
complex queries against the FoodMart database.
|
| QueryAllVCTest |
QueryAllVCTest is a test suite which tests
complex queries against the FoodMart database.
|
| SubTotalTest |
SubTotalTest is a test suite which tests scenarios of
using sub totals against the FoodMart database.
|
| SummaryMetricPercentTest |
SummaryMetricPercentTest is a test suite which tests scenarios
of computing sums and percentages against the FoodMart database.
|
| SummaryTest |
SummaryTest is a test suite which tests scenarios of
summing unit sales against the FoodMart database.
|
| TopBottomTest |
TopBottomTest is a test suite which tests scenarios of
selecting top and bottom records against the FoodMart database.
|


Nairobi Tech Week
Standard Charter Marathon
Previous
Next
ACTIVITIES
Click Here >>
Code
Click Here >>
Learn Music
Click Here >>
Languages
Click Here >>
Sports
Click Here >>
Find Cources
Click Here >>
Find Job
Ⓒ COPYRIGHT 2017.
Made by Bry, Jaden, Morris, Brian


Welcome to My Profile Page
Who Am I
I'm a full stack developer candidate who is struggling at Hacktiv8 for polishing my coding skill in order to be a professional full stack developer.
Personal Info
| Name | : | Edison |
|---|---|---|
| Birthday | : | 8 September 1989 |
| Phone | : | (+62)<PHONE_NUMBER> |
| : |<EMAIL_ADDRESS>| |
| Job | : | Full Stack Developer |
My Expertise
WEB DESIGNDesign website using HTML, CSS and Javascript. |
|
WEB DEVELOPDevelop website using React JS and React Native. |
Educations
- 1995 - 2001 = Elementary School
- 2001 - 2004 = Junior High School
- 2004 - 2007 = Senior High School
- 2007 - 2011 = IT Bachelor Degree
Experiences
-
Server Operator
(2008-2010)Maintaining servers in order to run properly.
-
IT Manager
(2012-2019)Managing hardware, software, and networking infrastructure.
Skills
-
HTML/CSS
Javascript
React JS/React Native


Vocabulary for ConsultationEventType
Description
To indicate the type of event applying to the consultation encounter of Out of Hours and NHS Direct domains.
Values:
|
Version: |
01 |
|
Date: |
2nd March 2004 |
|
Code |
Description |
Note |
|
1 |
Patient Given Telephone Advice Out of Hours |
|
|
2 |
Patient Given Telephone Advice During Surgery Hours |
|
|
3 |
Seen in Primary care centre |
Does not apply to NHS Direct |
|
4 |
Seen in Own Home |
Does not apply to NHS Direct |
|
5 |
Seen in GP's Surgery |
Does not apply to NHS Direct |
|
6 |
Seen in Emergency Clinic |
Does not apply to NHS Direct |
|
7 |
Seen in Health Centre |
Does not apply to NHS Direct |
|
8 |
Seen in Other Clinic |
Does not apply to NHS Direct |
|
9 |
Seen in warden supported House |
Does not apply to NHS Direct |
|
10 |
Seen in warden supported Home |
Does not apply to NHS Direct |
|
11 |
Seen in warden supported flat |
Does not apply to NHS Direct |
|
12 |
Seen in elderly mentally infirm home |
Does not apply to NHS Direct |
|
13 |
Seen in old people's home |
Does not apply to NHS Direct |
|
14 |
Seen in nursing home |
Does not apply to NHS Direct |


Attacker Strength:
1
2
3
4
5
6
7
8
9
10
Attacker Agility:
1
2
3
4
5
6
7
8
9
10
Use Weapon:
Dagger
Arming Sword
Morningstar
Francisca
With:
One Hand
Both Hands
Against Armor:
Padded Leather
Chainmail
Platemail
Attack


A stable version 1.0.0, with a new tabyl
API and with breaking changes to the output of clean_names()
.
This preserves the original functionality of janitor, but significantly changes the implementation.
tabyl
This is now a single function tabyl()
to count combinations of one, two, or three variables, ala base R’s table()
. This replaces the crosstab()
function. The resulting tabyl
data.frames can be manipulated and formatted using a family of adorn_
functions. See the tabyls vignette for more.
The now-redundant legacy functions crosstab()
and adorn_crosstab()
have been deprecated, but remain in the package for now. Existing code that relies on tabyl
will break if the sort
argument is used, as that argument no longer exists in tabyl
(use dplyr::arrange()
instead).
clean_names
clean_names()
now detects and preserves camelCase inputs, allows multiple options for case outputs of the cleaned data.frame, and preserves whether there’s space between letters and numbers. It also transliterates accented letters and turns #
into "number"
. This may cause old code to break. E.g., variableName
as a raw column name is now converted to variable_name
(or variableName
, VariableName
, etc. depending on your preference), where it would previously have been converted to variablename
. To minimize this inconvenience, there’s a quick fix for compatibility: you can find-and-replace to insert the argument case = "old_janitor"
, preserving the old behavior of clean_names()
as of janitor version 0.3.1 (and thus not have to redo your scripts beyond that.)
clean_names()
transliterates accented letters, e.g., çãüœ
becomes cauoe
(#120). Thanks to @fernandovmacedo.
clean_names()
offers multiple options for variable name styling. In addition to snake_case
output you can select smallCamelCase
, BigCamelCase
, ALL_CAPS
and others. (#131).
clean_names()
. Thanks also to @maelle for proposing this feature. janiLaunched the janitor documentation website: http://sfirke.github.io/janitor. Thanks to the pkgdown package!
remove_empty_rows()
and remove_empty_cols()
, which are replaced by the single function remove_empty()
. (#100)
remove_empty()
does not have a default value for the which
argument, forcing more explicit and readable code. e.g. remove_empty("rows")
.The new adorn_title()
function shows the name of the 2nd tabyl
variable (column name) - this un-tidies the data.frame but makes the result clearer to readers (#77)
tabyl
objects now print with row numbers suppressedclean_names()
now retains the character #
as "number"
in the resulting namesround_half_up()
is now exported for public use. It’s an exact implementation of http://stackoverflow.com/questions/12688717/round-up-from-5-in-r/12688836#12688836, written by @mrdwab.adorn_totals("row")
handles quirky variable names in 1st column (#118)
get_dupes()
returns the correct result when a variable in the input data.frame is already called "n"
(#162)
This is a bug-fix release with no new functionality or changes. It fixes a bug where adorn_crosstab()
failed if the tibble
package was version > 1.4.
Major changes to janitor are currently in development on GitHub and will be released soon. This is not that next big release.
The primary purpose of this release is to maintain accuracy given breaking changes to the dplyr package, upon which janitor is built, in dplyr version >0.6.0. This update also contains a number of minor improvements.
Critical: if you update the package dplyr
to version >0.6.0, you must update janitor to version 0.3.0 to ensure accurate results from janitor’s tabyl()
function. This is due to a change in the behavior of dplyr’s _join
functions (discussed in #111).
janitor 0.3.0 is compatible with this new version of dplyr as well as old versions of dplyr back to 0.5.0. That is, updating janitor to 0.3.0 does not necessitate an update to dplyr >0.6.0.
add_totals_row
and add_totals_col
were combined into a single function, adorn_totals()
. (#57). The add_totals_
functions are now deprecated and should not be used.adorn_crosstab()
is now “dat” instead of “crosstab” (indicating that the function can be called on any data.frame, not just a result of crosstab()
)%>%
pipe from magrittr (#107).Deprecated the following functions:
use_first_valid_of()
- use dplyr::coalesce()
insteadconvert_to_NA()
- use dplyr::na_if()
insteadadd_totals_row()
and add_totals_col()
- replaced by the single function adorn_totals()
adorn_totals()
and ns_to_percents()
can now be called on data.frames that have non-numeric columns beyond the first one (those columns will be ignored) (#57)
adorn_totals("col")
retains factor class in 1st column if 1st column in the input data.frame was a factorclean_names()
now handles leading spaces (#85)
adorn_crosstab()
and ns_to_percents()
work on a 2-column data.frame (#89)
adorn_totals()
now works on a grouped tibble (#97)
tabyl()
and crosstab()
(#87)
NA_
column in the result of a crosstab()
will appear at the last column position (#109)
tabyl()
and crosstab()
now appear in the package manual (#65)
tabyl()
and crosstab()
failed to retain ill-formatted variable names only when using R 3.2.5 for Windows (#76)
add_totals_row()
works on two-column data.frame (#69)
use_first_valid_of()
returns POSIXct-class result when given POSIXct inputsSubmitted to CRAN!
mtcars %>% tabyl(mpg) %>% tabyl(n)
(#54)
get_dupes()
now works on variables with spaces in column names (#62)
adorn_crosstab()
that formats the results of a crosstab()
for pretty printing. Shows % and N in the same cell, with the % symbol, user-specified rounding (method and number of digits), and the option to include a totals row and/or column. E.g., mtcars %>% crosstab(cyl, gear) %>% adorn_crosstab()
.crosstab()
can be called in a %>%
pipeline, e.g., mtcars %>% crosstab(cyl, gear)
. Thanks to @chrishaid (#34)
tabyl()
can also be called in a %>%
pipeline, e.g., mtcars %>% tabyl(cyl)
(#35)
use_first_valid_of()
function (#32)
ns_to_percents()
, add_totals_row()
, add_totals_col()
,crosstab()
returns 0 instead of NA when there are no instances of a variable combination.tabyl(df$vecname)
retains the more-descriptive $
symbol in the column name of the result - if you want a legal R name in the result, call it as df %>% tabyl(vecname)
clean_names()


“Gutte yadatthaṁ pabbajjā,
hitvā puttaṁ vasuṁ piyaṁ;
Tameva anubrūhehi,
mā cittassa vasaṁ gami.

Foster the goal for which you went forth;
do not fall under the mind’s control.
Cittena vañcitā sattā,
mārassa visaye ratā;
Anekajātisaṁsāraṁ,
sandhāvanti aviddasū.
Beings deceived by the mind,
playing in Māra’s domain,
ignorant, they journey on,
transmigrating through countless rebirths.
Kāmacchandañca byāpādaṁ,
sakkāyadiṭṭhimeva ca;
Sīlabbataparāmāsaṁ,
vicikicchañca pañcamaṁ.
Sensual desire and ill will,
and identity view;
misapprehension of precepts and observances,
and doubt as the fifth.
Saṁyojanāni etāni,
pajahitvāna bhikkhunī;
Orambhāgamanīyāni,
nayidaṁ punarehisi.
O nun, when you have given up
these lower fetters,
you won’t come back
to this world again.
Rāgaṁ mānaṁ avijjañca,
uddhaccañca vivajjiya;
Saṁyojanāni chetvāna,
dukkhassantaṁ karissasi.
And when you’re rid of greed,
conceit, ignorance, and restlessness,
having cut the fetters,
you’ll make an end to suffering.
Khepetvā jātisaṁsāraṁ,
pariññāya punabbhavaṁ;
Diṭṭheva dhamme nicchātā,
upasantā carissatī”ti.
Having wiped out transmigration,
and fully understood rebirth,
hungerless in this very life,
you will live at peace.
… Guttā therī ….


--- layout: default ---
I mostly participate in CTFs with HATS SG, and occasionally with OpenToAll. Here are some writeups for challenges I have solved.


Installation¶
Importance of FOSS¶
Personal control, customizability and freedom:
Users of FOSS benefit from the Four Essential Freedoms to make unrestricted use of, and to study, copy, modify, and redistribute such software with or without modification. If they would like to change the functionality of software they can bring about changes to the code and, if they wish, distribute such modified versions of the software or often − depending on the software’s decision making model and its other users − even push or request such changes to be made via updates to the original software.
Privacy and security:
Manufacturers of proprietary, closed-source software are sometimes pressured to building in backdoors or other covert, undesired features into their software. Instead of having to trust software vendors, users of FOSS can inspect and verify the source code themselves and can put trust on a community of volunteers and users. As proprietary code is typically hidden from public view, only the vendors themselves and hackers may be aware of any vulnerabilities in them while FOSS involves as many people as possible for exposing bugs quickly.
Low costs or no costs:
FOSS is often free of charge although donations are often encouraged. This also allows users to better test and compare software.
Quality, collaboration and efficiency:
FOSS allows for better collaboration among various parties and individuals with the goal of developing the most efficient software for its users or use-cases while proprietary software is typically meant to generate profits. Furthermore, in many cases more organizations and individuals contribute to such projects than to proprietary software. It has been shown that technical superiority is typically the primary reason why companies choose open source software.
The default branch is always the more stable and the only one tested through Travis CI.
The experimental branches exp/*
contain code and comments that some programmers may find disturbing — Viewers discretion advised.
Before trying to contribute read this paper and this style guide.
It may be wise to send Giovanni an email [@] before digging into the project.
Source Code¶
SGX is available as a PyPi package from https://pypi.org/project/sgx/ and installing it is as simple as
pip install sgx
and then
>>> import sgx
Caveat: on some systems the package manager is pip3
.


Set Up the Environment
Before we write any code, there are a few things we need to get set up first.
.NET Environment
This was written targeting .NET Core 2.2. Ensure you have the latest version installed; a beta or full version of 3.0 should also work. (If it does not, this comment will be updated.)
Code Editor
For Windows, macOS, and Linux, Visual Studio Code is a great choice. It supports all the languages we will be using, and with the C# and Ionide-fsharp plugins, provide a very nice editing experience.
You are free to use Visual Studio if you prefer; be sure to have at least version 2019, though, as we'll be using some C# 7 and F# 4.6 features.
Package Manager
C# developers are familiar with NuGet, .NET's package management system. For our projects, though, we are going to use one developed by the F# community called Paket. It has several benefits, and the biggest one we'll be using is a single restore for all 5 projects' dependencies.
Paket can be installed in a project, but it can also be installed as a dotnet tool
. These instructions are writting assuming that it is installed this way. If you wish to install it at the project level, follow their instructions; otherwise, from a command prompt, enter
1:
|
|
Then, create a src
directory. Within that directory, execute
1:
|
|
This should create a paket.dependencies
file and a paket-files
directory; this is where we'll leave them for now. If you are following along and committing your work to a source code repository, paket-files
can be excluded from source control, but paket.dependencies
needs to be tracked.
NOTE: If you install it as a project-level tool, you'll need to run
.paket\paket [command]
from thesrc
folder in places throughout the site where we say to runpaket [command]
; with the tool version, though, you can runpaket
anywhere from thesrc
folder and below.
Database
RavenDB has downloads for each of the main operating systems on which .NET Core is supported. The .zip file can be extracted to a directory under your control, and run.ps1
or run.sh
runs the server in interactive mode. You'll only need to run the database server when you're running an application or looking at data through RavenDB Studio, their outstanding web front end.
Running an extracted archive like this, the server will run for 7 days without a license. Under the "Pricing" tab on their site, they list the licenses that are available, including two that are free. Near the bottom of the page, you'll find the "Developer" license; this is completely acceptable for our uses in this project. Their staff will e-mail you a JSON blob that you can paste into the server, and it will recognize that it's licensed to a developer.


THE FACULTY A film review by Bradley Null Copyright 1999 Bradley Null
Finally. We always knew Robert Rodriguez had talent as a filmmaker. We were just waiting for someone to put a good script in his hands, and Kevin Williamson has done that here. Do not be fooled by the woefully bad trailers, or by the fact that critics have roundly panned this horror film. THE FACULTY is easily the best of the genre to come along since Williamson's breakout hit, SCREAM. It is also the first watchable film Rodriguez has put up since storming onto the scene with EL MARIACHI.
Easily the biggest problem with this movie is in the marketing. I can only imagine how pissed off Williamson, Rodriguez, and everyone else involved in the movie must have been to see the film marketed as just another schlocky entry into the horror genre, which generally takes the words aliens; teenagers; battle; suspicious; killer; small town; etc. and jumble them up to come up with a concept (to wit, this time: suspicious small town teenagers battle killer aliens). Now if you are already a big 80's horror fan, just skip this review, because you already saw the movie, but this review is for people who are highly suspicious of shelling out eight bucks to see a horror flick. The only reason I actually saw THE FACULTY was because my little sister begged me to. But now I'm trying to convince you to.
Actually, THE FACULTY is just as witty as SCREAM, slightly less original, but makes up with it by acknowledging its status as essentially an update of Donald Siegel's 1956 classic INVASION OF THE BODY SNATCHERS, one of the most frightening movies ever made, before Hollywood began trying to make you jump in your seat rather than truly fear the end of the world. Granted, with Robert Rodriguez and his frenetic camera involved, this update heightens the sense of urgency and makes you hop up a time or two. But, unlike his substance-lite stylizations in DESPERADO and FROM DUSK TILL DAWN, Rodriguez manages to hold onto the wit and character of Williamson's script and fashion a film that not only gets your heart racing, but also manages enough intelligence to force you to suspend your disbelief.
To top it all off, THE FACULTY throws in some good BREAKFAST CLUB social commentary about high school social hierarchy, and examines the lasting effects of a surreal experience on such an ingrained social order. Granted, THE FACULTY's not SCHINDLER'S LIST, but if you give it a chance it will make you think a little bit. Which is a good thing.
RATING: ***1/2
|------------------------------| \ ***** Perfection \ \ **** Good, memorable film \ \ *** Average, hits and misses \ \ ** Sub-par on many levels \ \ * Unquestionably awful \ |------------------------------|
MPAA Rating: R
Director: Robert Rodriguez Producer: Elizabeth Avellan, Robert Rodriguez Writer: Kevin Williamson Starring: Elijah Wood, Jordana Brewster, Josh Hartnett, Shawn Hatosy, Jon Stewart
http://www.dimensionfilms.com
Christopher Null -<EMAIL_ADDRESS>- Writer and Script Consultant Check out The Movie Emporium's new design at http://www.filmcritic.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


This module represents the actions that are available on session collections. Any class that includes this module needs only provide a servers method that returns a list of Net::SSH::Multi::Server instances, and the rest just works. See Net::SSH::Multi::Session and Net::SSH::Multi::Subsession for consumers of this module.
Returns true if any server in the current container has an open SSH session that is currently processing any channels. If include_invisible is false (the default) then invisible channels (such as those created by port forwarding) will not be counted; otherwise, they will be.
# File lib/net/ssh/multi/session_actions.rb, line 29 def busy?(include_invisible=false) servers.any? { |server| server.busy?(include_invisible) } end
Connections are normally established lazily, as soon as they are needed. This method forces all servers in the current container to have their connections established immediately, blocking until the connections have been made.
# File lib/net/ssh/multi/session_actions.rb, line 20 def connect! sessions self end
A convenience method for executing a command on multiple hosts and either displaying or capturing the output. It opens a channel on all active sessions (see open_channel and active_sessions), and then executes a command on each channel (Net::SSH::Connection::Channel#exec).
If a block is given, it will be invoked whenever data is received across the channel, with three arguments: the channel object, a symbol identifying which output stream the data was received on (:stdout or :stderr) and a string containing the data that was received:
session.exec("command") do |ch, stream, data| puts "[#{ch[:host]} : #{stream}] #{data}" end
If no block is given, all output will be written to +$stdout+ or +$stderr+, as appropriate.
Note that exec will also capture the exit status of the process in the :exit_status property of each channel. Since exec returns all of the channels in a Net::SSH::Multi::Channel object, you can check for the exit status like this:
channel = session.exec("command") { ... } channel.wait if channel.any? { |c| c[:exit_status] != 0 } puts "executing failed on at least one host!" end
# File lib/net/ssh/multi/session_actions.rb, line 119 def exec(command, &block) open_channel do |channel| channel.exec(command) do |ch, success| raise "could not execute command: #{command.inspect} (#{ch[:host]})" unless success channel.on_data do |ch, data| if block block.call(ch, :stdout, data) else data.chomp.each_line do |line| $stdout.puts("[#{ch[:host]}] #{line}") end end end channel.on_extended_data do |ch, type, data| if block block.call(ch, :stderr, data) else data.chomp.each_line do |line| $stderr.puts("[#{ch[:host]}] #{line}") end end end channel.on_request("exit-status") do |ch, data| ch[:exit_status] = data.read_long end end end end
Returns the session that is the “master”. This defaults to self, but classes that include this module may wish to change this if they are subsessions that depend on a master session.
# File lib/net/ssh/multi/session_actions.rb, line 12 def master self end
Asks all sessions for all contained servers (see sessions) to open a new channel. When each server responds, the on_confirm block will be invoked with a single argument, the channel object for that server. This means that the block will be invoked one time for each session.
All new channels will be collected and returned, aggregated into a new Net::SSH::Multi::Channel instance.
Note that the channels are “enhanced” slightly–they have two properties set on them automatically, to make dealing with them in a multi-session environment slightly easier:
:server => the Net::SSH::Multi::Server instance that spawned the channel
:host => the host name of the server
Having access to these things lets you more easily report which host (e.g.) data was received from:
session.open_channel do |channel| channel.exec "command" do |ch, success| ch.on_data do |ch, data| puts "got data #{data} from #{ch[:host]}" end end end
# File lib/net/ssh/multi/session_actions.rb, line 80 def open_channel(type="session", *extra, &on_confirm) channels = sessions.map do |ssh| ssh.open_channel(type, *extra) do |c| c[:server] = c.connection[:server] c[:host] = c.connection[:server].host on_confirm[c] if on_confirm end end Multi::Channel.new(master, channels) end
Sends a global request to the sessions for all contained servers (see sessions). This can be used to (e.g.) ping the remote servers to prevent them from timing out.
<EMAIL_ADDRESS>If a block is given, it will be invoked when the server responds, with two arguments: the Net::SSH connection that is responding, and a boolean indicating whether the request succeeded or not.
# File lib/net/ssh/multi/session_actions.rb, line 50 def send_global_request(type, *extra, &callback) sessions.each { |ssh| ssh.send_global_request(type, *extra, &callback) } self end
Returns an array of all SSH sessions, blocking until all sessions have connected.
# File lib/net/ssh/multi/session_actions.rb, line 35 def sessions threads = servers.map { |server| Thread.new { server.session(true) } if server.session.nil? } threads.each { |thread| thread.join if thread } servers.map { |server| server.session }.compact end
Generated with the Darkfish Rdoc Generator 2.


Object
Returns whether this attribute has child attributes.
# File lib/libxml/attr.rb, line 13 13: def child? 14: not self.children.nil? 15: end
Determine whether this attribute is associated with an XML::Document.
# File lib/libxml/attr.rb, line 22 22: def doc? 23: not self.doc.nil? 24: end
# File lib/libxml/attr.rb, line 97 97: def each_sibling(&blk) 98: siblings(self,&blk) 99: end
Determine whether this is the last attribute.
# File lib/libxml/attr.rb, line 30 30: def last? 31: self.last.nil? 32: end
Returns this node’s XML::Namespaces object, which is used to access the namespaces associated with this node.
# File lib/libxml/attr.rb, line 57 57: def namespaces 58: @namespaces ||= XML::Namespaces.new(self) 59: end
Determine whether there is a next attribute.
# File lib/libxml/attr.rb, line 38 38: def next? 39: not self.next.nil? 40: end
Returns this node’s type name
# File lib/libxml/attr.rb, line 79 79: def node_type_name 80: if node_type == Node::ATTRIBUTE_NODE 81: 'attribute' 82: else 83: raise(UnknownType, "Unknown node type: %n", node.node_type); 84: end 85: end
Determine whether this attribute has an associated namespace.
# File lib/libxml/attr.rb, line 47 47: def ns? 48: not self.ns.nil? 49: end
Determine whether this attribute has a parent.
# File lib/libxml/attr.rb, line 66 66: def parent? 67: not self.parent.nil? 68: end
Determine whether there is a previous attribute.
# File lib/libxml/attr.rb, line 74 74: def prev? 75: not self.prev.nil? 76: end
Iterates nodes and attributes
# File lib/libxml/attr.rb, line 88 88: def siblings(node, &blk) 89: if n = node 90: loop do 91: blk.call(n) 92: break unless n = n.next 93: end 94: end 95: end
# File lib/libxml/attr.rb, line 111 111: def to_a 112: inject([]) do |ary,a| 113: ary << [a.name, a.value] 114: ary 115: end 116: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.


This feature simulates a third-party compromise detection tool
such as an intrusion detection system with the purpose of
testing the Data Plane Key Management protocols response to
node compromise.
Simply enter an id show by the table and click the button to
compromise the selected switch and begin the revocation procedure.
In practise third-party software would tell the controller
directly to handle the compromise as quickly as possible.


| help |
Displays this help menu |
| av (user) |
Displays the profile picture of the mentioned user |
| revav (user) |
Reverse avatar the mentioned user profile picture |
| whois (user) |
Displays discord information of the mentioned user |
| role-hexcode (role) |
Displays the hexcode of the specified role |
| guildicon |
Display guild icon |
| roleinfo (role) |
Display some info about the specified role |
| cls |
Clears your console fully |
| logout |
Logs you out the selfbot |
| dm (user) (message) |
Sends a message to the specified user |
| everyone |
Glitched way to mention everyone in a server |
| empty |
Sends a empty message |
| get-hwid |
Prints your hwid in the console |
| secret (message) |
Returns the message but hidden ||hidden|| |
| bold (message) |
Returns the message but **bold** |
| unflip |
Sends: ┬─┬ ノ( ゜-゜ノ) |
| tableflip |
Sends: (╯°□°）╯︵ ┻━┻ |
| lenny |
Sends: ( ͡° ͜ʖ ͡°) |
| shrug |
Sends: ¯\_(ツ)_/¯ |
| reverse (message) |
Reverses ur message
|
| ascii (message) |
Makes your message ascii/fancy |
| read |
Marks all your messages as read, except DM |
| group-leaver |
Leaves all the groups you're in |
| purge (amount) |
Deletes your messages based on the amount you specify
|
|
| uptime |
Shows how long the selfbot has been online and working |
| hastebin (message) |
Saves your text/code to hastebin |
| first-message |
Get the first message in that channel |
| abc |
Sends the whole abecedary in a single message |
| devowel (message) |
Devowels your message |
| 1337-speak (message) |
Translates your message to 1337 language |
| combine (name1) (name2) |
Combines the two names together |
| pingweb (website) |
Pings a website in order to check if its working or not (ie: !pingweb https://google.com) |
| spam (amount) (message) |
Sends the specified message that amount of times |
| clear |
Spam the chat with invisible messages |
| tts (message) |
Send that message in .wav format, like an audio |
| upper (message) |
Make your message CAPS |
| lmgtfy (message) |
Use lmgtfy search engine to look-up something |
| genname |
Generate a random name based on the server members |
| set-pfp (url) |
Set the specified url as profile picture [Must have password set in config.json file] |
| btcstream |
Stream current btc price |
| pfpsteal (user) |
Allows you to steal mentioned user profile picture [Must have password set in config.json file] |
| blank |
Turns your name and profile picture blank |
| hypesquad (house) |
Allows you to change your hypesquad (ie: !hypesquad bravery) |
| fakenet (type) [name] |
Allows you to spoof connections in your profile (ie: !fakenet skype Alucard) |
| steal-all-pfp |
Steal all the pfps in the server |
| stream (message) |
Stream that message in your profile |
| watching (message) |
Add a watching status with that message in your profile |
| listening (message) |
Add a listening status with that message in your profile |
| game (message) |
Add a game status with that message in your profile |
| masscon (type) (amount) (name)
| Add a big amount of connections to your profile (ie: !masscon skype 5 ALUCARD |
| fox |
Random fox image |
| dog |
Random dog image |
| cat |
Random cat image [Must have cat api key set in config.json file] |
| minesweeper |
Play minesweeper in the discord chat |
| dick (user) |
Display the mentioned user dick size |
| rainbow (role) |
Cycle colors in the role you specify |
| 8ball (question) |
Answers your question |
| joke |
Drops a random joke in the chat |
| slot |
Play slot machine in the discord chat |
| topic |
Start a random topic to keep the chat going |
| wyr |
Start a 'what would you rather' topic in the chat |
| feed (user) |
Feed the mentioned user |
| tickle (user) |
Tickle the mentioned user |
| slap (user) |
Slap the mentioned user |
| hug (user) |
Hug the mentioned user |
| smug (user) |
Smug at the mentioned user |
| pat (user) |
Pat the mentioned user |
| kiss (user) |
Kiss the mentioned user |
| tokeninfo (token) |
Display various information about the token |
| tokenfuck (token) |
Crash, glitch screen of a token, all in discord |
| geoip (ip) |
Display various information about the IP |
| ebay-view (url) (views) |
Send views to a ebay product (ie: !ebay-view https://www.ebay.es/itm/XXXXXX 100 |
| gmail-bomb |
Spam a gmail [Information is inserted via console] |
| nitro |
Generate a random nitro code |
| proxies |
Scraps HTTP/HTTPS/SOCKS4/SOCKS5 proxies |
| address (text) |
Generates fake address based on the text you specify |
| masslogin (choice) |
Allows you to mass-login in bot/user tokens [Choices can be: user and bot] |


Given a string comprised of lowercase letters in the range ascii[a-z] determine the length of the smallest substring that contains all of the letters present in the string.
Create a function shortestSubstring that must return the length of the shortest substring that contains all of the characters within s.
Input: bab
Output: 2
Input: bcaacbc
Output: 3


Some of our workers decided to go on vacation and forgot to finish this page..
 Until then, you can explore our catalog and buy him a more comfortable bed than his desk.


[1]
Absolutely reliable.. The best customer service I have ever encountered.. Superb performance.; None. Nada.


WITNESS LIST International Relations & Trade Committee May 21, 2005 - 8:45A HB 925 ON: Esparza, Daniel Committee Director (International Relations and Trade), Austin, TX Garcia, Buddy Asst. Secretary of State/Border Commerce Coordinator (Secretary of State), Austin, TX Madera, Jr., Ignacio Deputy Executive Administrator (Texas Water Development Board), Austin, TX


News in Proportion is temporarily off-line as changes are being made to the Chronicling America API.
Check back soon!


Welcome to the dahsboard, {{user}}
Your currently monitored districts:
S.No.
State
District
Vaccine
Min Age
Status
Last Checked
1
Karnataka
BBMP
Covaxin
18
Monitoring
2 secs ago


Sprint 5 Technical Blog
Title
Description
What are three new things you have learned about yourself and your ego as a result of the core learning?
First, I have learned that i can stay fairly neutral in difficult situations, althoguh i still get frustrated. Second, I learned the my ego tends to get a bit hurt when
i'm comparing myself to others. This sounds like a fairly obvious thing, but during the foundations i realised how much i do this and how detrimental it is to my own success. Third, i realised that it
is much easier to accomplish things when you release limiting mindsets, a lot of the time a big obstacle only seems impossible to climb over because you believe you can't do it. I had this experience a few times during foundations, but
every time i eventually realised that the obstacles are only impossible to overcome if i let them be impossible.
What are the roles of values, empathy and self-awareness in learning and programming?
It's important to have good values in any area of life, but i've noticed over the foundations journey that having strong values
and setting standards for yourself helps you to learn and grow. Values are kind of like little software programs we run in the operating system of
our personality.. They can be very effective to help battle viruses of the mind. Empathy, in relation to programming is something that i expect to
encounter further as we go into bootcamp, but so far i have found that programming requires a good deal of empathy and understanding, especially when
working in a team.  Self awareness is also highly important, and ties into the first two quite nicely,
because you need self awareness to keep yourself in check about your values. And you need self awarness to know when you are being, or not being suffieiciently empathetic
to others. Self awareness helps you to see the "bugs" in your "code", literally and metaphorically. Without being self aware you are likely to to miss
every opportunity to grow and progress and improve.
What has surprised you the most about the core learning?
At first i was surprised that Dev Academy focused a lot on learning human skills. it's just not the kind of
thing you expect from a programming course. But having said that, this didn't cause me to think negatively of EDA, i instead
found it really interesting and was excited to get into it. On of my interests and things i like to do in my spare time is
looking at self help material. It might sound a bit weird to some people, but I find self inquiry and awareness to be extremely
useful, because it allows you to see the negative aspects of yourself that you didn't know were there, and change them.
I think we're kind of taught to supress a lot of these aspects of self, and that seems to be what causes so many problems later in life.
And as i started to get further into the sprints, i started to realise that
programming and self development have a lot in common, and that there seems to be a clear paralell between the two.
What were the most challenging aspects of the core learning?
Definatley the self directed learning aspect. I felt like all of the material was easy to follow and clear enough that it was pretty enjoyable to sit down and
work through it. I had a lot of fun once i got stuck into a challenge. The main problem i came up against however was myself. I always found it easy once i sat down at
the computer and started coding, but it was actually getting myself to sit down that was the hard part, with so many distractions around. This part of the learning helped me to
see aspects of myself that i was unconscious of at first, and i started to get a good understanding of the phrase "The way you do one thing is the way you do anything". I can see much
more clearly now where my strengths are, but also my weak spots. And, i found it quite challneging at first to admit my weak spots.
Why do you think we, a programming school, are spending so much time focusing on core learning in a web development bootcamp course?
Working in any job is hard, and i think that any work environment, or learning establishment should teach the core skills. But when it comes to programming
it seems like the core skills serve an important purpose, because they help you to train your mind to view problems in a helpful way. Since programming is mostly about
problem solving, it would be counter intuitive to meltdown, and become frustrated when faced with a difficult problem.. of course we are all human, and this can happen, but
the core learning gives us the ability to see these problems as obstacles that we can overcome, not be overhwlmed by.
Does the time you spent studying core learning here feel like a waste of time? Should you have just used that time to practise programming instead? Justify your answer.
I don't think it was a waste of time at all. There were plenty of times during the sprints where i felt overwhelming emotion, and it really helped to be able to come back into my
and not react negatively to the emotion. Being aware of myself was extremely helpful to me during the process, and i think that i would have found it a lot more difficult without that self
awareness. It's also good to learn these skills in general, and since they are relevant to this particular industry, it's better we learn them now than later.


--- layout: default title: About me ---
My name is Lucas Húngaro, I'm brazilian, 24 years old and live in São Paulo.
I'm a software developer passionate about agile methodologies, lightweight web frameworks, dynamic languages and the human aspects of software development like teamwork, leadership and interpersonal relationship.


| Function name | Function info |
|---|---|
roots(1...) : Function roots(a, ...) returns roots of a polynomial. If a is a list of real or complex numbers, this function should only have one parameter and return roots of a polynomial a[0] * x**(N-1) + a[1] * x**(N-2) + ... + a[N-2] * x + a[N-1] = 0. If a is a single value (real or complex), this function should have at least two parameters and return roots of a polynomial a * x**(number_of_optional_params) + optional_params[0] * x**(number_of_optional_params - 1) + ... + optional_params[number_of_optional_params - 2] * x + optional_params[number_of_optional_params - 1] = 0. Note that if degree of the polynomial is equal to or larger than 4, Newton-Raphson method is used so that the roots are approximated values. Because of the iterations required by Newton-Raphson method, the calculation time will be long (depends on device's performance). Examples of this function: To get roots of polynomial 3 * x**2 - 4 * x + 1 == 0, type in command: roots([3, -4, 1]) and the result is [1, 0.33333333]; To get roots of polynomial (1+2i) * x**3 + (7-6i) * x**2 + 0.54 * x - 4.31 - 9i == 0, type in command: roots(1+2i, 7-6i, 0.54, -4.31-9i) and the result is [0.79288607 + 3.9247084 * i, -0.56361748 - 0.78399569 * i, 0.7707314 + 0.85928729 * i]. |


I am a Software Engineer from Portugal. I took a Master's degree in Informatics and Computer Engineering at the Faculty of Engineering of the University of Porto (FEUP).
There are multiple topics in the field of Computer Engineering that I enjoy working on and I always like to face new challenges. In particular, in this website, you can find some of my projects, either developed as part of my studies or during my free time. Also, you can check my blog where I have written about security vulnerabilities I found in some systems.
Apr 2020 - Present
Software Engineer at Replai
Working on a startup to build a User Acquisition creative insights platform.
Through AI tagging, Replai helps data and creativity come together to reveal what's behind top-performing UA creatives, empowering teams to iterate with confidence.
Aug 2018 - Apr 2020
Software Engineer at Feedzai
Helped achieve customer success, adapting the company’s product to the necessities of each client.
Main activities: Java development, requirements discussion, technical design, technical leadership and DevOps
Jul 2018
Master's degree in Informatics and Computing Engineering
Feb 2018 - Jul 2018
Software Engineering Intern at Bosch Car Multimedia
Worked on my master’s thesis under the topic “Thermal imaging for vehicle occupant monitoring”.
Sep 2017 - Jan 2018
Erasmus+ programme in Barcelona School of Informatics
Topics studied: Deep Learning; Concurrency and Parallelism; Virtual and Augmented Reality; Constraint Processing and Programming; Intelligent Data Analysis Applications in Business.
Jul 2017 - Aug 2017
Software Engineering Intern at Armis
Worked on a map visualization module for an internal product, gaining experience with technologies such as Angular, ASP.NET and PostGIS.
Developed a business intelligence solution for the same product using SQL Server, SSIS, SSAS and Power BI. Built a Data Warehouse and created ETL processes for keeping multidimensional cubes up-to-date.
Sep 2013
Start of my Masters in Informatics and Computing Engineering
BSc (3 years) + MSc (2 years) in Informatics and Computing Engineering (MIEIC) at the Faculty of Engineering of the University of Porto (FEUP).
Born!
26th May 1995


-
2015-02-05 20:12:19
New version 2.22v a lot of small and not very changes
This time a little bit bigger release with a lot of smal and not very changes
- All Javascript's are now compressed.
- Option to set notes for online user. If you click first user icon in popup the last tab will be notes. https://github.com/LiveHelperChat/livehelperchat/issues/613
- Delete, Close icons will represents actual user permissions. https://github.com/LiveHelperChat/livehelperchat/issues/614
- Online users list will have less icons in last column.
- New maxmind database for countries
- Identifier variable for forms.
- Option to force to use user e-mail as from address in e-mail templates. Use with caution because most cases Gmail could consider mails as spam. But usefull with integration with third party ticket systems.
- Option to set how many times repeat autoresponder message. This can be set in proactive invitation and autoresponder itself also.
- Map icon click will open full size Modal window instead of Marker popup.
- Embed code generation window will check that domain would not contain protocol.
For update just follow standard update procedure For manual update it's update_100.sql
P.s There is option to support project by monthly paypal subscription.
-
2015-01-26 19:32:46
New version 2.21v two small enhancements
This time two small enhancements
- SMTP settings changed to Mail settings, and this section will have an option to set main system Sender E-mail. This mail will get all undelivered mails also. So if you are not receiving mails you can now test directly this on this page. Either it's system mails using mail command or SMTP.
- Option to change frontpage tab order. Chat configuration -> Misc
For update just follow standard update procedure For manual update it's update_99.sql
-
2015-01-24 17:06:33
New version 2.20v speech to text and various small enhancements
This time enhancements stuff
- Speech to text support. Only google chrome at the moment has this hTML5 API. Tutorial here
- Theme variable was not forwarded internally. (During read operator message action)
- Relative position for iframe. Some sites are using nonsense iframe positions.
- Operator typing issue was fixed. Operator typing message was shown and was not shown again even if operator was still typing
- Text preview position was changed.
- Various co-browsing improvements.
For update just follow standard update procedure For manual update it's update_98.sql
-
2015-01-12 20:11:28
License change
Hi!
This time no code update, but License update. Since 2.19v Live Helper Chat will be distributed under "Apache License, Version 2.0". There is gone requirement to keep my copyright meta tag also. There is few things I expect from this change
- More popularity in internet in general
- People will understand that this decission will cut some part of project funding income and people will be willing to support project by donating
- More robust project adoption within commercial projects
Also I kept an option to buy commercial license if anyone wishes and do not want to use "Apache License, Version 2.0" for their Live Helper Chat distribution. What you can do under this License you can read there
https://tldrlegal.com/license/apache-license-2.0-(apache-2.0)
I really hope so all this will help Live Helper Chat to became more popular! Thank you for support!
-
2015-01-10 14:32:48
New version 2.19v more theming options, Co-Browsing enhancements part 3 and small other changes
Standard release with few features
- More attributes for themes
Restore, Popup, Close, Miminize images
Hide close, Hide popup options in theme.
Header widget height and padding options
Main widget border width option
- Cookie conflict fix with third party libraries
- Now operator can follow user scrollbar position
- Chatbox minimize was behaving incorrectly
For update just follow standard update procedure For manual update it's update_97.sql


Reading Material¶
This document contains reading material bolstering the estimation, expert elicitation, quantitative certainty, scenario, and forecasting subject matters that guide Simple Risk Measurement.
Risk Language¶
This section includes reading that helps navigate the problems with “risk” language, miscommunications and so forth.
Defining Risk¶
The language of risk is used in a variety of ways and shows up with different intentions in practice.
| [1] | Hansson, Sven Ove, “Risk”, The Stanford Encyclopedia of Philosophy (Fall 2018 Edition), Edward N. Zalta (ed.), URL = <https://plato.stanford.edu/archives/fall2018/entries/risk/>. |
| [2] | Boholm, M. , Möller, N. and Hansson, S. O. (2016), The Concepts of Risk, Safety, and Security: Applications in Everyday Language. Risk Analysis, 36: 320-338. doi:10.1111/risa.12464 |
Specific Scenarios¶
This section contains supporting reading for specific scenario building. The “Scenario” is frequently used language in modern approaches to risk analysis.
This form of the scenario is produced immediately from fault tree analyses and similar methods associated with engineering safety studies (i.e., nuclear reactor safety studies). Each scenario represents a unique concatenation of events.
| [3] |
|
| [4] | Wikipedia contributors. (2018, June 24). Clarity test. In Wikipedia, The Free Encyclopedia. Retrieved 17:49, November 8, 2018, from https://en.wikipedia.org/w/index.php?title=Clarity_test&oldid=847323771 |
| [5] | Decision Analysis: Practice and Promise. Ronald A. Howard. Management Science, Vol. 34, No. 6. (Jun., 1988), pp. 679-695. |
Hierarchy of Scenarios¶
The hierarchal relationship between specific future events.
| [6] | Wikipedia contributors. “Fault tree analysis.” Wikipedia, The Free Encyclopedia. Wikipedia, The Free Encyclopedia, 16 Jul. 2018. Web. 8 Nov. 2018. |
| [7] | Schneier on Security https://www.schneier.com/academic/archives/1999/12/attack_trees.html |
| [8] | Fault Tree Handbook with AeroSpace Applications, NASA, v1.1, August, 2002, https://elibrary.gsfc.nasa.gov/_assets/doclibBidder/tech_docs/25.%20NASA_Fault_Tree_Handbook_with_Aerospace_Applications%20-%20Copy.pdf |
| [9] | Amoroso, E. G. (1999). Fundamentals of computer security technology. Place of publication not identified: Diane Pub Co. |
| [10] | Swiderski, F., & Snyder, W. (2009). Threat Modeling. New York: O’Reilly Media, Inc. |
| [11] | Shostack, A. (2014). Threat modeling: Designing for security. |
Measurement / Approximation¶
This section includes all references to, and arguments that measurements are estimates. Generally speaking, everything we do is some form of approximation, even when employing the use of measurement instruments.
| [12] | Measurement Uncertainty Antonio Possolo - https://www.nist.gov/itl/sed/topic-areas/measurement-uncertainty |
| [13] | Tal, Eran, “Measurement in Science”, The Stanford Encyclopedia of Philosophy (Fall 2017 Edition), Edward N. Zalta (ed.), URL = <https://plato.stanford.edu/archives/fall2017/entries/measurement-science/>. |
| [14] | Hubbard, Douglas W., and Richard Seiersen. How to measure anything in cybersecurity risk. Hoboken, New Jersey: Wiley, 2016. Print. |
| [15] | A Turning Point for Humanity: Redefining the World’s Measurement System Robin Materese - https://www.nist.gov/si-redefinition/turning-point-humanity-redefining-worlds-measurement-system |
| [16] | Keeping the Standard Kilogram From Gaining Weight Is a Constant Struggle Nadia Drake - https://www.wired.com/2013/01/keeping-kilogram-constant/ |
| [17] | Why scientists are redefining the kilogram https://www.engadget.com/2017/10/24/why-scientists-are-redefining-the-kilogram/ |
| [18] | Wikipedia contributors. (2018, November 6). Kibble balance. In Wikipedia, The Free Encyclopedia. Retrieved 18:15, November 8, 2018, from https://en.wikipedia.org/w/index.php?title=Kibble_balance&oldid=867616683 |
| [19] | Evaluation of measurement data – Guide to the expression of uncertainty in measurement JCGM 100:2008 (GUM 1995 with minor corrections) |
Expert Estimation¶
This section generally appeals to how experts can be queried for quantitative data.
Combining Expert Estimations¶
This describes the practice of gathering up forecast material and, typically, averaging it together. Parimutual Betting, Simple Averages, Weighted Scores.
| [20] | Wikipedia contributors. (2018, October 1). Parimutuel betting. In Wikipedia, The Free Encyclopedia. Retrieved 18:01, November 8, 2018, from https://en.wikipedia.org/w/index.php?title=Parimutuel_betting&oldid=861927567 |
| [21] | Brown, Thomas A., Probabilistic Forecasts and Reproducing Scoring Systems. Santa Monica, CA: RAND Corporation, 1970. https://www.rand.org/pubs/research_memoranda/RM6299.html. Also available in print form. |
Calibration of Experts¶
Also see How to measure anything.
| [22] | Calibration Of Probabilities: The State Of the Art To 1980 Lichtenstein- Sarah- Fischhoff- Baruch- Phillips-Lawrence D - http://www.dtic.mil/docs/citations/ADA101986 |
| [23] | Calibration Of Probabilities: The State Of the Art Lichtenstein- Sarah- Fischhoff- Baruch- Phillips - http://www.dtic.mil/docs/citations/ADA033248 |
Humorous Examples¶
| [24] | Miyamoto’s Secret Hobby https://kotaku.com/5381876/miyamotos-secret-hobby-measuring-stuff |
| [25] | Shigeru Miyamoto Guesses The Size of Random Objects (Jimmy Fallon) https://youtu.be/DiUeuc7eOh0?t=16s |
RAND¶
RAND has been developing methods for expert estimation for decades, described as DELPHI and Futures Methodology.
| [26] | Publications on Futures Methodologies: Delphi https://www.rand.org/pardee/pubs/futures_method/delphi.html |
| [27] | Probabilistic Forecasts and Reproducing Scoring Systems https://www.rand.org/pubs/research_memoranda/RM6299.html |
| [28] | On the Epistemology of the Inexact Sciences https://www.rand.org/pubs/reports/R353.html |
| [29] | An Experimental Application of the Delphi Method to the Use of Experts https://www.rand.org/pubs/research_memoranda/RM727z1.html |
| [30] | The Systematic Use of Expert Judgment in Operations Research https://www.rand.org/pubs/papers/P2795.html |
| [31] | Convergence of Expert Consensus Through Feedback https://www.rand.org/pubs/papers/P2973.html |
| [32] | Improving the Reliability of Estimates Obtained from a Consensus of Experts https://www.rand.org/pubs/papers/P2986.html |
| [33] | The Use of the Delphi Technique in Problems of Educational Innovations https://www.rand.org/pubs/papers/P3499.html |
| [34] | Analysis of the Future https://www.rand.org/pubs/papers/P3558.html |
| [35] | Delphi https://www.rand.org/pubs/papers/P3704.html |
| [36] | Systematic Use of Expert Opinions https://www.rand.org/pubs/papers/P3721.html |
| [37] | Delphi Process https://www.rand.org/pubs/papers/P3925.html |
| [38] | Experiments in Group Prediction https://www.rand.org/pubs/papers/P3820.html |
| [39] | Predicting the Future https://www.rand.org/pubs/papers/P3948.html |
| [40] | Delphi and Values https://www.rand.org/pubs/papers/P4182.html |
| [41] | The Delphi Method https://www.rand.org/pubs/research_memoranda/RM5888.html |
| [42] | The DELPHI Method, II https://www.rand.org/pubs/research_memoranda/RM5957.html |
| [43] | The Delphi Method, III https://www.rand.org/pubs/research_memoranda/RM6115.html |
| [44] | The Delphi Method, IV https://www.rand.org/pubs/research_memoranda/RM6118.html |
| [45] | Experimental Assessment of Delphi Procedures with Group Value Judgments https://www.rand.org/pubs/reports/R0612.html |
| [46] | Comparison of Group Judgment Techniques with Short-Range Predictions and Almanac Questions https://www.rand.org/pubs/reports/R0678.html |
| [47] | Delphi Assessment https://www.rand.org/pubs/reports/R1283.html |
Expert Groups¶
Also see Tetlock.
| [48] | Stan Kaplan, ‘Expert information’ versus ‘expert opinions’. Another approach to the problem of eliciting/ combining/using expert knowledge in PRA, Reliability Engineering & System Safety, Volume 35, Issue 1, 1992, Pages 61-72, |
| [49] | R.L. Keeney ; D. von Winterfeldt. Eliciting probabilities from experts in complex technical problems, IEEE Transactions on Engineering Management ( Volume: 38 , Issue: 3 , Aug 1991 ) |
IARPA¶
IARPA invests in quite a bit of predictive research and publishes results often. They are also involved in forecasting tournaments.
| [50] | https://www.iarpa.gov/index.php/newsroom/iarpa-in-the-news/2015/419-teams-better-than-individuals-at-intelligence-analysis-research-finds |
| [51] | Teams Better Than Individuals at Intelligence Analysis, Research Finds. American Psychological Association. https://www.apa.org/news/press/releases/2015/01/intelligence-analysis.aspx |
Cooke’s “Classical Method”¶
Often found in environmental risk (Volcanic, Earthquake) and others.
| [52] | Roger Cooke, Max Mendel, Wim Thijs, Calibration and information in expert resolution; a classical approach, Automatica, Volume 24, Issue 1, 1988, Pages 87-93, ISSN 0005-1098, http://rogermcooke.net/rogermcooke_files/Automatica%201988%20Cal%20Inf.pdf |
| [53] | Abigail R Colson, Roger M Cooke; Expert Elicitation: Using the Classical Model to Validate Experts’ Judgments, Review of Environmental Economics and Policy, Volume 12, Issue 1, 1 February 2018, Pages 113–132, https://doi.org/10.1093/reep/rex022 |
| [54] | A route to more tractable expert advice, Willy Aspinall. http://www.rff.org/files/sharepoint/Documents/Features/294-295%20Opinion%20-%20Aspinall%20pr.pdf |
| [55] | Usgs Expert Elicitation Report https://www.eeri.org/products-page/other-seminars-and-workshops/usgs-expert-elicitation-report/ |
| [56] | Workshop on the ground motion models applied in the National Seismic Hazard Maps https://earthquake.usgs.gov/static/lfs/nshm/workshops/GMPE2012/WED_AM01_Petersen.gmworkshop-berkeley-newsm.pdf |
Constructive critique of Cooke’s method can be found here:
| [57] | Bolger, F. and Rowe, G. (2015), The Aggregation of Expert Judgment: Do Good Things Come to Those Who Weight?. Risk Analysis, 35: 5-11. doi:10.1111/risa.12272 |
Forecasting¶
Philip Tetlock¶
Tetlock’s research revolves around how experts who are untrained in prediction are worse than random. He has since isolated those who are stronger forecasters (Superforecasters) and is identifying their qualities, especially around how someone a better forecaster, and how to further improve them with teams.
| [58] | Tetlock, P. E. (2005). Expert political judgment: How good is it? How can we know?. Princeton, N.J: Princeton University Press. |
| [59] | Tetlock, P. E., Gardner, D., Tetlock, Philip, Gardner, Dan, & Richards, Joel. (2015). Superforecasting: The art and science of prediction. |
| [60] | Developing expert political judgment: The impact of training and practice on judgmental accuracy in geopolitical forecasting tournaments. Welton Chang, Eva Chen, Barbara Mellers, Philip Tetlock, Judgment and Decision Making, Vol. 11, No. 5, September 2016, pp. 509-526 http://journal.sjdm.org/16/16511/jdm16511.html |
| [61] | https://www.sas.upenn.edu/tetlock/ |
| [62] | https://www.youtube.com/watch?v=xBXDTQdmNyw |
| [63] | Everybody’s an Expert, Louis Menand. https://www.newyorker.com/magazine/2005/12/05/everybodys-an-expert |
Meteorology¶
Maybe the oldest area of forecasting. Understanding the industrial development of meteorology is a great rubric for how a predictive industry is built over time. First, the theory. Then the infrastructure. Then the operational practice of prediction, decision making, and learning.
| [64] | Weather Analysis and Forecasting https://www.ametsoc.org/ams/index.cfm/about-ams/ams-statements/statements-of-the-ams-in-force/weather-analysis-and-forecasting/ |
| [65] | Wikipedia contributors. “Timeline of meteorology.” Wikipedia, The Free Encyclopedia. Wikipedia, The Free Encyclopedia, 27 Sep. 2018. Web. 8 Nov. 2018. |
| [66] | Bauer, Peter & Thorpe, Alan & Brunet, Gilbert. (2015). The quiet revolution of numerical weather prediction. Nature. 525. 47-55. 10.1038/nature14956. https://www.researchgate.net/publication/281516336_The_quiet_revolution_of_numerical_weather_prediction |
Cognitive Error¶
Kahneman / Tversky¶
Daniel Kahneman and Amos Tversky offer observations into how fallible the human mind is in the most common of circumstances. The classification of System 1 and System 2 thinking is highly relevant to this area of critical thinking around risk.
| [67] | Kahneman, D. (2015). Thinking, fast and slow. |
Meehl / Dawes¶
Paul E. Meehl and Robyn Dawes work in prediction inspired a full fledged assault on the credibility of expert prediction. Comprehensive findings that mechanical statistical models beat experts at prediction.
| [68] | Meehl, P. E. (1966). Clinical versus Statistical Prediction. Place of publication not identified: University of Minnesota Press. http://meehl.umn.edu/sites/g/files/pua1696/f/155dfm1993_0.pdf) |
N. Taleb¶
Taleb explores the limitations of our ability to understand randomness and the nature of randomness. Preparation for inevitable surprise, and the emergence of Black Swans, is Taleb’s core message.
| [69] | Taleb, N. N., Taleb, N. N., Taleb, N. N., Taleb, N. N., & Taleb, N. N. (2016). Incerto. |
Intelligence Analysis¶
Sherman Kent¶
Sherman Kent is considered a pioneer of intelligence analysis, and brought probabilistic rigor into the National Intelligence Estimate.
| [70] | Wikipedia contributors. “Sherman Kent.” Wikipedia, The Free Encyclopedia. Wikipedia, The Free Encyclopedia, 20 Jun. 2018. Web. 8 Nov. 2018. https://en.wikipedia.org/wiki/Sherman_Kent |
His writing:
| [72] | The Law and Custom of the National Intelligence Estimate https://www.cia.gov/library/center-for-the-study-of-intelligence/csi-publications/books-and-monographs/sherman-kent-and-the-board-of-national-estimates-collected-essays/5law.html |
Canadian Intelligence¶
There is research around Canada’s application of modern intelligence processing and its effectiveness. The basis of this is all probabilistic.
| [75] | Canada Is Actually Pretty Good At Intelligence Forecasting, Ben Makuch - https://motherboard.vice.com/en_us/article/kbz7gn/canadian-intelligence-agencies-are-actually-pretty-good-at-strategic-forecasting |
| [76] | Accuracy Of Forecasts in Strategic Intelligence, David Mandel-Alan Barnes - http://www.pnas.org/content/111/30/10984 |
Industry¶
Industry examples where probabilistic risk assessment is at play:
| [77] | NASA Risk Management Handbook https://ntrs.nasa.gov/archive/nasa/casi.ntrs.nasa.gov/20120000033.pdf |
| [78] | EPA: Risk Assessment Forum White Paper: Probabilistic Risk Assessment Methods and Case Studies https://www.epa.gov/sites/production/files/2014-12/documents/raf-pra-white-paper-final.pdf |
| [79] | Probabilistic Risk Assessment Procedures Guide for Offshore Applications https://www.bsee.gov/sites/bsee.gov/files/ProbalisticRiskAssessment%20%28PRA%29/bsee_pra_procedures_guide_-_10-26-17.pdf |
| [80] | Nuclear Probabilistic Risk Assessment https://www.nrc.gov/about-nrc/regulatory/risk-informed/pra.html |
This paper has a specifically useful overview of many different industry approaches to safety.
| [81] | White Paper on Approaches to Safety Engineering http://sunnyday.mit.edu/caib/concepts.pdf |


Please select a demo application from the left hand side menu.
On mobile, you can swipe to open the menu.
View on github: https://github.com/domderen/twilio-client


Leinster injury worries as Contepomi heaps praise on Garry Ringrose
by Shane HannonLeinster backs coach Felipe Contepomi has praised the impact and improvement of Garry Ringrose, after the 24-year-old scored a hat-trick of tries in Saturday's win over Benetton.
Leo Cullen's outfit were bonus-point 33-19 winners at the RDS in their opening Heineken Champions Cup outing of the new campaign, impressing in their five-try win.
Jordan Larmour and Josh Van Der Flier also performed well, with 21-year-old hooker Ronan Kelleher showing once more why there has been so much discussion around his performances in blue.
Head Coach Cullen does have some injury concerns to contend with ahead of this weekend's trip to France to play Lyon.
Tadhg Furlong is again a fitness doubt - the prop missed Saturday's win against Benetton with a back injury, and the province say he'll continue to be assessed during the week.
Meanwhile, centre Joe Tomane is also a doubt, with a hamstring injury
Number eight Caelan Doris is nursing a shoulder injury, while utility back Rory O'Loughlin also has a shoulder complaint.
Sean Cronin will be unavailable once again, with the hooker continuing his rehab from a neck injury.
Speaking at a press conference today at Leinster Rugby HQ in Belfield, Contepomi said Ringrose's hard work in training is paying off.
"He works hard, he's a perfectionist...since I came back last year he's been working really hard.
"He has a very good understanding of the game and he's very smart so he's always looking for that space. He's a strong runner, he's a good defender, and he's getting better and better.
"He's trying to see those opportunities and taking them. We've seen he can score going around you or going to those tight lines and just powering through over the last five metres.
"So he's a really intelligent guy that works really, really hard - especially off the ball. He's a very interesting player to have in the team."
Contepomi was reluctant to draw the obvious comparisons to players like Brian O'Driscoll, a former teammate of the Argentinian at Leinster.
"I don't like comparisons, especially they are [playing] in different times, different types of games.
"Brian [O'Driscoll] was a brilliant player, probably one of the best I've ever played with. And Garry is a great player, a brilliant player as well.
"He probably has some [attributes] of Brian, but it's not good to compare - I think Garry Ringrose is Garry Ringrose. He'll make his name for himself, you don't have to compare him with anyone."
Everyone’s in the Team Of Us.
Vodafone. The Official Sponsor of the Irish Rugby Team.


This puzzle was invented by a guy named Greg who, apparently, invents all sorts of twisty puzzles. It is a harder varient of the master skewb, and contains that puzzles as a factor group. The set of all sequences that preserves the inner core part of the puzzle forms a normal sub-group. Mod-ing out by this sub-group gives us the master skewb.
For this puzzle, I'm going to let W=ULF
, X=URF
, Y=URB
and Z=ULB
.
The associated middle layers will be denoted by W'
, X'
, Y'
and Z'
, respectively. The corresponding corner twists in the bottom layer will be denoted by w
, x
, y
and z
, respectively. (E.g., y=DRB
.) The meaning of, say, y'
should now be clear. Note that y'=Wi'=W'i
.
Solve the inner edges (as apposed to the inner corners) relative to the center dots. Just keep twisting and it practically solves itself.
Align the center window peices with the center dots. Use A=W,Yi,Wi,Y
to preserve step 1.
Solve the corner positions. Use Q=3A
with setups to do a pair of corner swaps, one in the top layer and one in the bottom.
Orient the corners. Use X,Q,Xi,Q
to twist a pair of corners in the top layer. Note that Qi=Q
.
Note the obviouse variant Xi,Q,X,Q
for twisting in the opposite direction.
This step and step 6 can be done in any order, because here we present a pure tri-cycle of the bars, and in the next step we present a pure tri-cycle of the outer edges peices.
Solve the bars. Use A,y',Ai,y'i
. The setups aren't hard.
All that remains now is to position the outer edge peices which are inseparably connected to the inner corners. A pure try-cicle sequence is given by 2[T,Yi,Ti,Y,|2U|]
with T=W'i,Y',W',Y'i
. Note that we can write T=(Ai')~
.
Note that there is a way to use T
by itself as a tri-cycle of the edge peices, but you have to apply it and its inverse with appropriate and interleaved setups so that the net number of applications is divisible by 3. An appropriate setup comes from understanding how T
alters the inner edge peices. The rotations W
and Y
are, for example, appropriate setups.