UKCloud Limited (“UKC”) and Virtual Infrastructure Group Limited (“VIG”) (together “the Companies”) – in Compulsory Liquidation
On 25 October 2022, the Companies were placed into Liquidation with the Official Receiver appointed as Liquidator and J Robinson and A M Hudson simultaneously appointed as Special Managers to manage the liquidation process on behalf of the Official Receiver.
Further information regarding the Liquidations can be found here: https://www.gov.uk/government/news/virtual-infrastructure-group-limited-and-ukcloud-limited-information-for-creditors-and-interested-parties
Contact details:
For any general queries relating to the Liquidations please email<EMAIL_ADDRESS>For customer related queries please email<EMAIL_ADDRESS>For supplier related queries please email<EMAIL_ADDRESS>How to add devices to and remove devices from Managed IT Operations
Overview
Managed IT Operations provides several options focused on enhancing the general health of your compute assets:
Managed Monitoring as a Service
Anti-Virus as a Service
Patching as a Service
This article provides information about how to add devices to and remove devices from these Managed IT Operations service options.
Important
You must subscribe to Managed Monitoring as a Service to be able to also subscribe to any of the other service options.
To make changes, you'll need to fill in the appropriate details in the Managed IT Operations - Add or Remove Device spreadsheet (UKC-FRM-303) spreadsheet, which enables us to automate your requested changes. This is the same spreadsheet as the one you used to originally set up your service. The Service Request template includes a link to download the spreadsheet. When filling out the spreadsheet, ensure that you follow the instructions provided.
If you want to download the spreadsheet ahead of raising the request, click here.
Note
If you're not sure how to complete the spreadsheet or need help with any of the details, contact UKCloud Support.
Adding a device to a Managed IT Operations service
If you have a new device that you want monitored, you can add it to your Managed IT Operations service.
In My Calls, raise a ticket using the Managed IT Operations - Make changes to my managed devices template.
Download the spreadsheet linked in the template.
Tip
Each tab in the spreadsheet includes instructions on how to complete that tab.
In the Credentials tab of the spreadsheet, add the details of any credentials required for the device.
On the Device Information tab, add the details of the device that you want to add, including the device name, IP address and OS family.
In the AdministrativeCredentials column, select the name of the credentials you created on the Credentials tab.
Specify the service to which you want to add the device by selecting Yes in the appropriate column.
For example, to add the device to Managed Monitoring as a Service, select Yes from the list in the ManagedMonitoring column.
Make any changes to the relevant service option tab(s) as necessary.
For example, if you're adding a device to Managed Monitoring as a Service, update the information on the Monitoring tabs as necessary.
For more information about completing the different tabs see:
Tip
Device names from the Device Information tab are auto-populated into each of the service option tabs. If the information doesn't auto-populate, in the Data ribbon, select Refresh All.
Device names will then either auto-populate or appear in the dropdown list, depending on which tab you're on.
When you've finished completing the spreadsheet, in your My Calls ticket either click Select files and browse to the completed spreadsheet or drag the spreadsheet into the template.
Enter the date from which you want the changes to be effective.
When you're done, click Review & Submit then Submit.
As per our standard customer service targets, we aim to resolve your request within two working days.
Removing a monitored device from a Managed IT Operations service
If you have a device that you no longer want to monitor, you can remove it from your Managed IT Operations service.
In My Calls, raise a ticket using the Managed IT Operations - Make changes to my managed devices template.
Download the spreadsheet linked in the template.
Tip
Each tab in the spreadsheet includes instructions on how to complete that tab.
In the Device Information tab of the spreadsheet, in the column for the service from which you want to remove the device, select No.
For example, to remove a device from Patching as a Service, select No from the list in the Patching column
When you've finished completing the spreadsheet, in your My Calls ticket either click Select files and browse to the completed spreadsheet or drag the spreadsheet into the template.
Enter the date from which you want the changes to be effective.
When you're done, click Review & Submit then Submit.
As per our standard customer service targets, we aim to resolve your request within two working days.
Related articles
How to change your service configuration for Managed Monitoring as a Service
How to provide notification of maintenance windows for Managed IT Operations
Feedback
If you find a problem with this article, click Improve this Doc to make the change yourself or raise an issue in GitHub. If you have an idea for how we could improve any of our services, send an email to feedback@ukcloud.com.


Full Stack Developer with extensive knowledge of Amazon Web Services, Java, Javascript, Spring and Hibernate.
Explore the site


Estonia working on 'Plan B' for Nato
by EUobserverEstonia's interior minister, Mart Helme, told Finnish media on Tuesday his country no longer "fully trusts" that Nato would defend it if it was attacked by Russia. Estonia was working on a "Plan B" for territorial defence with other Baltic states and Finland, Helme, who also chairs the far-right Ekre party in Estonia's ruling coalition, said. The Plan B included forging better relations with Germany and the US, he added.


Analyzes shooting data with respect to group shape, precision, and accuracy. This includes graphical methods, descriptive statistics, and inference tests using standard, but also non-parametric and robust statistical methods. Implements distributions for radial error in bivariate normal variables. Works with files exported by 'OnTarget PC/TDS', 'Silver Mountain' e-target, 'ShotMarker' e-target, or 'Taran', as well as with custom data files in text format. Supports inference from range statistics like extreme spread. Includes a set of web-based graphical user interfaces.
| Version: | 0.7.4 |
| Depends: | R (≥ 3.1.1) |
| Imports: | boot, coin, CompQuadForm (≥ 1.4.2), graphics, grDevices, KernSmooth, robustbase, stats, tools, utils |
| Suggests: | knitr, energy, mvoutlier, shiny, jsonlite, akima |
| Published: | 2018-11-01 |
| Author: | Daniel Wollschlaeger |
| Maintainer: | Daniel Wollschlaeger <dwoll at kuci.org> |
| License: | GPL-2 | GPL-3 [expanded from: GPL (≥ 2)] |
| NeedsCompilation: | no |
| Materials: | ChangeLog |
| CRAN checks: | shotGroups results |
| Reference manual: | shotGroups.pdf |
| Vignettes: |
Analyzing shooting precision and accuracy using shotGroups |
| Package source: | shotGroups_0.7.4.tar.gz |
| Windows binaries: | r-devel: shotGroups_0.7.4.zip, r-release: shotGroups_0.7.4.zip, r-oldrel: shotGroups_0.7.4.zip |
| OS X binaries: | r-release: shotGroups_0.7.4.tgz, r-oldrel: shotGroups_0.7.4.tgz |
| Old sources: | shotGroups archive |
Please use the canonical form https://CRAN.R-project.org/package=shotGroups to link to this page.


vcftools 是用于 VCF 和 BCF 格式的遗传变异数据的工具包。 它的功能主要有数据统计、运行数据计算、数据过滤、数据转换。
1. 安装
如果是非 root 用户，可以使用：`./configure prefix=’Your path’
2. 使用
#### 2.1. 基本参数：
- 输入文件参数：
–vcf <输入文件>：输入文件可以是 VCF 格式 v4.0、v4.1 和 v4.2。’-‘ 用于标准输入
--gzvcf <输入文件>： 读入 gzipped 压缩文件
--bcf <输入文件>：读入 BCF2 文件。
- 输出文件参数：
--out <输出文件>：所有输出文件的文件名前缀。如果忽略，默认为 ’out.'
--stdout
-c：输出为标准输出
-temp
2.2. 位点过滤参数：
- 位置过滤
–chr
--not-chr
匹配或者不匹配某条染色体。可能多次使用该参数，以设定多条染色体。
–from-bp
设定碱基的位置范围，仅与 --chr
结合使用。可以只使用一个。
–positions
使用或者不使用文件中的某些位置的碱基。输入文件的每行用 \t
制表符分隔，允许加注释行，用 ‘#’ 开头。
–positions-overlap
排除或者不排除文件中与参考等位基因重叠的碱基。
–bed
Include or exclude a set of sites on the basis of a BED file. Only the first three columns (chrom, chromStart and chromEnd) are required. The BED file is expected to have a header line. A site will be kept or excluded if any part of any allele (REF or ALT) at a site is within the range of one of the BED entries.
–thin
Thin sites so that no two sites are within the specified distance from one another.
–mask
These options are used to specify a FASTA-like mask file to filter with. The mask file contains a sequence of integer digits (between 0 and 9) for each position on a chromosome that specify if a site at that position should be filtered or not.
An example mask file would look like:
>1
0000011111222...
>2
2222211111000...
In this example, sites in the VCF file located within the first 5 bases of the start of chromosome 1 would be kept, whereas sites at position 6 onwards would be filtered out. And sites after the 11th position on chromosome 2 would be filtered out as well.
The “–invert-mask” option takes the same format mask file as the “–mask” option, however it inverts the mask file before filtering with it.
And the “–mask-min” option specifies a threshold mask value between 0 and 9 to filter positions by. The default threshold is 0, meaning only sites with that value or lower will be kept.
- 位点过滤
–snp
包含一个 SNP 位点，如 dbSNP 的 rsID。可以使用多次。
–snps
使用或者不使用文件中给出的 SNPs。文件包含一列 SNP IDs （如 dbSNP rsIDs），每行一个，不需要表头。
- 变异类型过滤 –keep-only-indels –remove-indels
使用或者不使用一个 indel。indel 表示任何与参考等位基因长度不同的变异。
- FILTER flag 过滤 –remove-filtered-all
根据 vcf 文件中的 FILTER flag 过滤，除了 PASS。
–keep-filtered
使用或者不使用 FILTER flag 标记的所有位点。可以多次使用该参数。
- 根据 INFO 过滤
–keep-INFO
- 根据 ALLELE 过虑
–maf
–non-ref-af
–non-ref-af-any
–mac
–min-alleles
过滤等位基因数小于或者大于该参数的位点，可以结合使用，例如，vcftools --vcf file1.vcf --min-alleles 2 --max-alleles 2
过滤只有两个等位基因的位点。
- 根据基因型数值过滤
–min-meanDP
根据测序深度过滤
–hwe
Assesses sites for Hardy-Weinberg Equilibrium using an exact test, as defined by Wigginton, Cutler and Abecasis (2005). Sites with a p-value below the threshold defined by this option are taken to be out of HWE, and therefore excluded.
–max-missing
Exclude sites on the basis of the proportion of missing data (defined to be between 0 and 1, where 0 allows sites that are completely missing and 1 indicates no missing data allowed).
–max-missing-count
Exclude sites with more than this number of missing genotypes over all individuals.
–phased
Excludes all sites that contain unphased genotypes.
- 杂项过滤
–minQ
：根据 Quality 值过滤
2.3. 样本过滤参数
–indv
使用或者不使用某样本，可以多次使用该参数。
–keep
使用或者移除的文件中所列的本亲。样本 ID （与 VCF 表头相同）每个一行。如果同时使用两参数，--keep
先于 --remove
运行。如果使用了多个文件，先保留所有 ’–keep‘ 文件中的样本，再删除其中 ’–remove‘ 所有文件中的样本。
–max-indv
2.4. 基因型过滤参数
–remove-filtered-geno-all
Excludes all genotypes with a FILTER flag not equal to “.” (a missing value) or PASS.
–remove-filtered-geno
Excludes genotypes with a specific FILTER flag.
–minGQ
Exclude all genotypes with a quality below the threshold specified. This option requires that the “GQ” FORMAT tag is specified for all sites.
–minDP
Includes only genotypes greater than or equal to the “–minDP” value and less than or equal to the “–maxDP” value. This option requires that the “DP” FORMAT tag is specified for all sites.
2.5. 输出参数
- 输出等位基因统计 -freq –freq2
输出带有后缀 ’.frq‘ 文件中的每个位点的等位基因频率。第二选项禁止所有关于等位基因信息的输出。
–counts –counts2
输出带有后缀 ‘.frq.count’ 文件中的原始等位基因 counts 数。第二个选项禁止所有关于等位基因信息的输出。
–derived
For use with the previous four frequency and count options only. Re-orders the output file columns so that the ancestral allele appears first. This option relies on the ancestral allele being specified in the VCF file using the AA tag in the INFO field.
- 输出深度统计
–depth
Generates a file containing the mean depth per individual. This file has the suffix “.idepth”.
–site-depth
Generates a file containing the depth per site summed across all individuals. This output file has the suffix “.ldepth”.
–site-mean-depth
Generates a file containing the mean depth per site averaged across all individuals. This output file has the suffix “.ldepth.mean”.
–geno-depth
Generates a (possibly very large) file containing the depth for each genotype in the VCF file. Missing entries are given the value -1. The file has the suffix “.gdepth”.
- 输出 LD 统计
–hap-r2
Outputs a file reporting the r2, D, and D’ statistics using phased haplotypes. These are the traditional measures of LD often reported in the population genetics literature. The output file has the suffix “.hap.ld”. This option assumes that the VCF input file has phased haplotypes.
–geno-r2
Calculates the squared correlation coefficient between genotypes encoded as 0, 1 and 2 to represent the number of non-reference alleles in each individual. This is the same as the LD measure reported by PLINK. The D and D’ statistics are only available for phased genotypes. The output file has the suffix “.geno.ld”.
–geno-chisq
If your data contains sites with more than two alleles, then this option can be used to test for genotype independence via the chi-squared statistic. The output file has the suffix “.geno.chisq”.
–hap-r2-positions
Outputs a file reporting the r2 statistics of the sites contained in the provided file verses all other sites. The output files have the suffix “.list.hap.ld” or “.list.geno.ld”, depending on which option is used.
–ld-window
This optional parameter defines the maximum number of SNPs between the SNPs being tested for LD in the “–hap-r2”, “–geno-r2”, and “–geno-chisq” functions.
–ld-window-bp
This optional parameter defines the maximum number of physical bases between the SNPs being tested for LD in the “–hap-r2”, “–geno-r2”, and “–geno-chisq” functions.
–ld-window-min
This optional parameter defines the minimum number of SNPs between the SNPs being tested for LD in the “–hap-r2”, “–geno-r2”, and “–geno-chisq” functions.
–ld-window-bp-min
This optional parameter defines the minimum number of physical bases between the SNPs being tested for LD in the “–hap-r2”, “–geno-r2”, and “–geno-chisq” functions.
–min-r2
This optional parameter sets a minimum value for r2, below which the LD statistic is not reported by the “–hap-r2”, “–geno-r2”, and “–geno-chisq” functions.
–interchrom-hap-r2 –interchrom-geno-r2
Outputs a file reporting the r2 statistics for sites on different chromosomes. The output files have the suffix “.interchrom.hap.ld” or “.interchrom.geno.ld”, depending on the option used.
- OUTPUT TRANSITION/TRANSVERSION STATISTICS
–TsTv
Calculates the Transition / Transversion ratio in bins of size defined by this option. Only uses bi-allelic SNPs. The resulting output file has the suffix “.TsTv”.
–TsTv-summary
Calculates a simple summary of all Transitions and Transversions. The output file has the suffix “.TsTv.summary”.
–TsTv-by-count
Calculates the Transition / Transversion ratio as a function of alternative allele count. Only uses bi-allelic SNPs. The resulting output file has the suffix “.TsTv.count”.
–TsTv-by-qual
Calculates the Transition / Transversion ratio as a function of SNP quality threshold. Only uses bi-allelic SNPs. The resulting output file has the suffix “.TsTv.qual”.
–FILTER-summary
Generates a summary of the number of SNPs and Ts/Tv ratio for each FILTER category. The output file has the suffix “.FILTER.summary”.
- 输出核酸多态性统计
–site-pi
Measures nucleotide divergency on a per-site basis. The output file has the suffix “.sites.pi”.
–window-pi
Measures the nucleotide diversity in windows, with the number provided as the window size. The output file has the suffix “.windowed.pi”. The latter is an optional argument used to specify the step size in between windows.
- 输出 FST 统计
–weir-fst-pop
This option is used to calculate an Fst estimate from Weir and Cockerham’s 1984 paper. This is the preferred calculation of Fst. The provided file must contain a list of individuals (one individual per line) from the VCF file that correspond to one population. This option can be used multiple times to calculate Fst for more than two populations. These files will also be included as “–keep” options. By default, calculations are done on a per-site basis. The output file has the suffix “.weir.fst”.
–fst-window-size
These options can be used with “–weir-fst-pop” to do the Fst calculations on a windowed basis instead of a per-site basis. These arguments specify the desired window size and the desired step size between windows.
- 输出其它统计
–het
Calculates a measure of heterozygosity on a per-individual basis. Specfically, the inbreeding coefficient, F, is estimated for each individual using a method of moments. The resulting file has the suffix “.het”.
–hardy
Reports a p-value for each site from a Hardy-Weinberg Equilibrium test (as defined by Wigginton, Cutler and Abecasis (2005)). The resulting file (with suffix “.hwe”) also contains the Observed numbers of Homozygotes and Heterozygotes and the corresponding Expected numbers under HWE.
–TajimaD
Outputs Tajima’s D statistic in bins with size of the specified number. The output file has the suffix “.Tajima.D”.
–indv-freq-burden
This option calculates the number of variants within each individual of a specific frequency. The resulting file has the suffix “.ifreqburden”.
–LROH
This option will identify and output Long Runs of Homozygosity. The output file has the suffix “.LROH”. This function is experimental, and will use a lot of memory if applied to large datasets.
–relatedness
This option is used to calculate and output a relatedness statistic based on the method of Yang et al, Nature Genetics 2010 (doi:10.1038/ng.608). Specifically, calculate the unadjusted Ajk statistic. Expectation of Ajk is zero for individuals within a populations, and one for an individual with themselves. The output file has the suffix “.relatedness”.
–relatedness2
This option is used to calculate and output a relatedness statistic based on the method of Manichaikul et al., BIOINFORMATICS 2010 (doi:10.1093/bioinformatics/btq559). The output file has the suffix “.relatedness2”.
–site-quality
Generates a file containing the per-site SNP quality, as found in the QUAL column of the VCF file. This file has the suffix “.lqual”.
–missing-indv
Generates a file reporting the missingness on a per-individual basis. The file has the suffix “.imiss”.
–missing-site
Generates a file reporting the missingness on a per-site basis. The file has the suffix “.lmiss”.
–SNPdensity
Calculates the number and density of SNPs in bins of size defined by this option. The resulting output file has the suffix “.snpden”.
–kept-sites
Creates a file listing all sites that have been kept after filtering. The file has the suffix “.kept.sites”.
–removed-sites
Creates a file listing all sites that have been removed after filtering. The file has the suffix “.removed.sites”.
–singletons
This option will generate a file detailing the location of singletons, and the individual they occur in. The file reports both true singletons, and private doubletons (i.e. SNPs where the minor allele only occurs in a single individual and that individual is homozygotic for that allele). The output file has the suffix “.singletons”.
–hist-indel-len
This option will generate a histogram file of the length of all indels (including SNPs). It shows both the count and the percentage of all indels for indel lengths that occur at least once in the input file. SNPs are considered indels with length zero. The output file has the suffix “.indel.hist”.
–hapcount
This option will output the number of unique haplotypes within user specified bins, as defined by the BED file. The output file has the suffix “.hapcount”.
–mendel
This option is use to report mendel errors identified in trios. The command requires a PLINK-style PED file, with the first four columns specifying a family ID, the child ID, the father ID, and the mother ID. The output of this command has the suffix “.mendel”.
–extract-FORMAT-info
Extract information from the genotype fields in the VCF file relating to a specfied FORMAT identifier. The resulting output file has the suffix “.
vcftools –vcf file1.vcf –extract-FORMAT-info GT
–get-INFO
This option is used to extract information from the INFO field in the VCF file. The
vcftools –vcf file1.vcf –get-INFO NS –get-INFO DB
- 输出 VCF 格式
–recode –recode-bcf
These options are used to generate a new file in either VCF or BCF from the input VCF or BCF file after applying the filtering options specified by the user. The output file has the suffix “.recode.vcf” or “.recode.bcf”. By default, the INFO fields are removed from the output file, as the INFO values may be invalidated by the recoding (e.g. the total depth may need to be recalculated if individuals are removed). This behavior may be overriden by the following options. By default, BCF files are written out as BGZF compressed files.
–recode-INFO
These options can be used with the above recode options to define an INFO key name to keep in the output file. This option can be used multiple times to keep more of the INFO fields. The second option is used to keep all INFO values in the original file.
–contigs
This option can be used in conjuction with the –recode-bcf when the input file does not have any contig declarations. This option expects a file name with one contig header per line. These lines are included in the output file.
- 输出其它格式
–012
This option outputs the genotypes as a large matrix. Three files are produced. The first, with suffix “.012”, contains the genotypes of each individual on a separate line. Genotypes are represented as 0, 1 and 2, where the number represent that number of non-reference alleles. Missing genotypes are represented by -1. The second file, with suffix “.012.indv” details the individuals included in the main file. The third file, with suffix “.012.pos” details the site locations included in the main file.
–IMPUTE
This option outputs phased haplotypes in IMPUTE reference-panel format. As IMPUTE requires phased data, using this option also implies –phased. Unphased individuals and genotypes are therefore excluded. Only bi-allelic sites are included in the output. Using this option generates three files. The IMPUTE haplotype file has the suffix “.impute.hap”, and the IMPUTE legend file has the suffix “.impute.hap.legend”. The third file, with suffix “.impute.hap.indv”, details the individuals included in the haplotype file, although this file is not needed by IMPUTE.
–ldhat –ldhat-geno
These options output data in LDhat format. This option requires the “–chr” filter option to also be used. The first option outputs phased data only, and therefore also implies “–phased” be used, leading to unphased individuals and genotypes being excluded. The second option treats all of the data as unphased, and therefore outputs LDhat files in genotype/unphased format. Two output files are generated with the suffixes “.ldhat.sites” and “.ldhat.locs”, which correspond to the LDhat “sites” and “locs” input files respectively.
–BEAGLE-GL –BEAGLE-PL
These options output genotype likelihood information for input into the BEAGLE program. The VCF file is required to contain FORMAT fields with “GL” or “PL” tags, which can generally be output by SNP callers such as the GATK. Use of this option requires a chromosome to be specified via the “–chr” option. The resulting output file has the suffix “.BEAGLE.GL” or “.BEAGLE.PL” and contains genotype likelihoods for biallelic sites. This file is suitable for input into BEAGLE via the “like=” argument.
–plink –plink-tped –chrom-map
这些参数输出 PLINK PED 格式，产生两个文件，’.ped’ 和 ‘.map‘。仅双等位基因位点会被输出。具体请看 PLINK 说明文件。 注意：第一个选项对大数据集很慢。用户可以作用 ’–chr‘ 参数分割文件，或者使用 ‘–plink-tped’ 参数输出 PLINK 转置格式的文件，后缀为 ‘.tped’ 和 ‘.tfam’。 For usage with variant sites in species other than humans, the –chrom-map option may be used to specify a file name that has a tab-delimited mapping of chromosome name to a desired integer value with one line per chromosome. This file must contain a mapping for every chromosome value found in the file.
2.6. 比较参数
These options are used to compare the original variant file to another variant file and output the results. All of the diff functions require both files to contain the same chromosomes and that the files be sorted in the same order. If one of the files contains chromosomes that the other file does not, use the –not-chr filter to remove them from the analysis.
DIFF VCF FILE
–diff
These options compare the original input file to this specified VCF, gzipped VCF, or BCF file. These options must be specified with one additional option described below in order to specify what type of comparison is to be performed. See the examples section for typical usage.
DIFF OPTIONS
–diff-site
Outputs the sites that are common / unique to each file. The output file has the suffix “.diff.sites_in_files”.
–diff-indv
Outputs the individuals that are common / unique to each file. The output file has the suffix “.diff.indv_in_files”.
–diff-site-discordance
This option calculates discordance on a site by site basis. The resulting output file has the suffix “.diff.sites”.
–diff-indv-discordance
This option calculates discordance on a per-individual basis. The resulting output file has the suffix “.diff.indv”.
–diff-indv-map
This option allows the user to specify a mapping of individual IDs in the second file to those in the first file. The program expects the file to contain a tab-delimited line containing an individual’s name in file one followed by that same individual’s name in file two with one mapping per line.
–diff-discordance-matrix
This option calculates a discordance matrix. This option only works with bi-allelic loci with matching alleles that are present in both files. The resulting output file has the suffix “.diff.discordance.matrix”.
–diff-switch-error
This option calculates phasing errors (specifically “switch errors”). This option creates an output file describing switch errors found between sites, with suffix “.diff.switch”.


{{ include "includes/start-a-project/head-with-sky.html" }}
{{ include "includes/start-a-project/navbar.html" indent=2 }} {{ include "includes/start-a-project/hello-world-button.html" indent=2 }} {{ include "includes/sky-bundle-js.html" indent=2 }}


DumbBots.NET Reference Document
Returns an array representing the locations of all custom entities on the map.
Returns the number of custom entities destroyed by the player.
Returns whether a custom entity nearest to the point specified is visibile to the player.
Stops any player movement.
Moves the player to the specified position. Returns false if the movement cannot be made.
Moves the player “up”. Returns false if the movement cannot be made.
Moves the player “up” and “left”. Returns false if the movement cannot be made.
Moves the player “up” and “right”. Returns false if the movement cannot be made.
Moves the player “down”. Returns false if the movement cannot be made.
Moves the player “down” and “left”. Returns false if the movement cannot be made.
Moves the player “down” and “right”. Returns false if the movement cannot be made.
Moves the player “right”. Returns false if the movement cannot be made.
Moves the player “left”. Returns false if the movement cannot be made.
Moves the player to a random location.
Moves the player to the location of a randomly chosen bazooka.
Moves the player to the location of the nearest bazooka to the player.
Moves the player to the location of a randomly chosen medkit.
Moves the player to the location of the nearest medkit to the player.
Player sends the specified message to itself. The message is delivered in the timespan specified measured from the current time.
Player sends the specified message to the opposing player. The message is delivered in the timespan specified measured from the current time.
Fetches the first message delivered to the player. An empty string returned if no messages in the queue.
Returns the player’s health.
Returns the player’s bazooka ammo count.
Returns the player’s position.
Returns the score difference between the players. A negative result means the player is losing.
Returns the accuracy of the player’s hits. Calculated as the number of shots an enemy has sustained over the number of shots the player has fired.
Returns the number of shots the player has sustained.
Returns the number of shots the player has fired.
Returns the angle of the player. For example if the player was looking directly “right”, the angle would 90 degrees.

Returns whether the enemy is visible to the player.
Returns the position of the enemy.
Returns the angle of the enemy. For example if the enemy was looking directly “right”, the angle would 90 degrees.
Returns the distance between the player and the enemy.

Returns the total time of the current game.
Returns the game position from the map position. The map position would be the X and Y points of a position in the array of integers representing the map.
Returns whether the player can see the specified point.
Gets the number of bazooka left on the map.
Gets the number of medkits left on the map.
Returns an array of points representing all medkit locations.
Returns an array of points representing all medkit locations that are collectable.
Returns an array of points representing all bazooka locations.
Returns an array of points representing all bazooka locations that are collectable.
Returns an array of points representing all walls.
Returns an array of points representing all rockets fired by the enemy.
Returns an array of points representing all bullets fired by the enemy.
Displays the specified text above the player.
Displays the specified text above the player in the specified colour.
Shoots a rocket at the specified point. The rocket will continue it’s trajectory if nothing is hit at, or before, the specified point.
Shoots a bullet at the specified point. The bullet will continue it’s trajectory if nothing is hit at, or before, the specified point.
Causes the player to harm itself with the specified amount of damage.
Attempts to plays the sound found at the specified file location.
Returns true is the all the specified keys are currently pressed, otherwise false.
Creates a custom entity with the specified 3D model at the file specified (if supported by the Irrlicht engine), with the specified texture, at the specified position.
Removes a custom entity.
Sends the specified message to all players. The message is delivered in the timespan specified measured from the current time.
Sends the specified message to itself. The message is delivered in the timespan specified measured from the current time.
Sends the specified message to a player. The message is delivered in the timespan specified measured from the current time.
Fetches the first message delivered to the director. An empty string returned if no messages in the queue.
Set the time to wait before a bazooka respawns. Default is 10 seconds.
Sets the amount of damage a bullet will do to a player. Default is 10.
Sets the amount of time needed to reload a bullet. Default is 0.4 seconds.
Modify the speed of the bullet. Default is 10 seconds. Default is 10 seconds.
Sets the default amount of ammo given to players after respawn. Default is 1.
Sets the maximum amount of ammo players can hold. Default is 3.
Sets the maximum health a player can have. Default is 100.
Sets the amount of health a medkit will provide. Default is 25.
Set the time to wait before a medkit respawns. Default is 10 seconds.
Sets the amount of damage a rocket will do to a player. Default is 40.
Sets the amount of time needed to reload a rocket. Default is 2 seconds.
Modify the speed of the rocket. Default is 1.
Sets the speed of player’s movement. Default is 5.
Sets the modifier of damage dealt. Default is 1.
Sets the game speed. Default is 1.
Gets player’s position.
Sets player’s position.
Heals player with the amount specified. Negative health hurts the player.
Gives player the amount of ammo specified. Negative amount removes ammo.
Gets player’s score.
Sets player’s score.
Gets player’s health.
Gets player’s ammo.
Returns the total time of the current game.
Returns the game position from the map position. The map position would be the X and Y points of a position in the array of integers representing the map.
Attempts to plays the sound found at the specified file location.
Displays the specified text at the specified location in the specified colour.
Returns true is the all the specified keys are currently pressed, otherwise false.
Get or set whether the entity can be shot by the players.
Get or set whether the entity is an obstacle that prevents player movement.
Get or set the speed modifier of the custom entity. Default is 1.
Get or set the damage modifier of the custom entity. Default is 1.
Get or set the health of the custom entity. Default is 1.
Get or set the ammo of the custom entity. Default is 1.
Sets the model scale of the custom entity.
Sets the model texture of the custom entity to the texture found in the specified file.
Moves the custom entity to the specified position.
Returns whether the custom entity can see the player specified.
Sets the animation speed of the custom entity. Default is 0.
Plays an animation from the starting frame to the ending frame, and whether to loop the animation.
Fires a bullet at the specified position.
Fires a rocket at the specified position.
Returns whether the custom entity is touching the specified player.
Rotates a custom entity by the specified number of degrees.
Displays the specified text above the custom entity.
Displays the specified text above the custom entity in the specified colour.


%npc_name%:
You or your party members do not have enough
Dimensional Fragments
for teleport.
Everyone needs
%count%
pieces.


HOME
DISTRIBUTORS
WHERE TO BUY
PRODUCTS
ABOUT US
OUR STORY
HISTORY
AUTHENTIC INGREDIENTS
GET IN TOUCH
HOME
DISTRIBUTORS
WHERE TO BUY
PRODUCTS
OUR STORY
HISTORY
AUTHENTIC INGREDIENTS
GET IN TOUCH
Get in touch
Send


3 Little Pigs
Home
Brick
Wood
Straw
You and the other pigs need to build a house, but you can't decide the materials. which material is superior?


*** User 2017-04-20 14:13:19.241 ***
14:13:19.241 [info] Disabling blocking sync...
*** User 2017-04-20 14:13:19.244 ***
14:13:19.244 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-1@antoine-PC'
*** User 2017-04-20 14:13:20.578 ***
14:13:20.577 [info] Enabling membership...
*** User 2017-04-20 14:13:20.578 ***
14:13:20.578 [info] Disabling blocking sync...
*** User 2017-04-20 14:13:20.582 ***
14:13:20.582 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-2@antoine-PC'
*** User 2017-04-20 14:13:21.923 ***
14:13:21.923 [info] Enabling membership...
*** User 2017-04-20 14:13:21.924 ***
14:13:21.924 [info] Disabling blocking sync...
*** User 2017-04-20 14:13:21.927 ***
14:13:21.927 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-3@antoine-PC'
*** User 2017-04-20 14:13:22.109 ***
Joining node: 'node-3@antoine-PC' to 'runner@antoine-PC' at port 51639
*** User 2017-04-20 14:13:22.109 ***
Joining issued: 'node-3@antoine-PC' to 'runner@antoine-PC' at port 51639
*** User 2017-04-20 14:13:22.110 ***
Joining node: 'node-2@antoine-PC' to 'runner@antoine-PC' at port 33270
*** User 2017-04-20 14:13:22.110 ***
Joining issued: 'node-2@antoine-PC' to 'runner@antoine-PC' at port 33270
*** User 2017-04-20 14:13:22.110 ***
Joining node: 'node-1@antoine-PC' to 'runner@antoine-PC' at port 33836
*** User 2017-04-20 14:13:22.110 ***
Joining issued: 'node-1@antoine-PC' to 'runner@antoine-PC' at port 33836
*** User 2017-04-20 14:13:22.171 ***
Waiting for join to complete with manager: partisan_default_peer_service_manager
*** User 2017-04-20 14:13:22.172 ***
Finished.
*** CT 2017-04-20 14:13:22.172 *** COVER INFO
Adding nodes to cover test: ['runner@antoine-PC']
*** CT 2017-04-20 14:13:22.178 *** COVER INFO
Successfully added nodes to cover test: []
*** User 2017-04-20 14:13:22.178 ***
Case finished: sql_join_contracted_latency_test
*** User 2017-04-20 14:13:29.206 ***
14:13:29.206 [info] Application lasp exited with reason: stopped
*** User 2017-04-20 14:13:29.207 ***
14:13:29.207 [info] Application partisan exited with reason: stopped
=== Ended at 2017-04-20 14:13:29
=== successfully completed test case
=== Returned value: ok
Test run history
| Top level test index


# import 'macro/forms.html' as forms
# import 'macro/utils.html' as utils
#if content_type == "youtube-video"
# include 'shared/lesson/fields/youtube_fields.html'
#elif content_type == "vimeo-video"
# include 'shared/lesson/fields/vimeo_fields.html'
#endif


Toggle navigation
Data & Reports
Navigation
Regression
Filter Time
Comparison Over Time
Multi Tier Filter
Bar Chart
Comparison Over Time
Comparing the value of two line over time


Got more questions, or just want to chat? Contact me at<EMAIL_ADDRESS>Download the handout by viewing the slides, looking for “File”, “Download as”, and then choose your prefered file type.
View the slides


I live in Hong Kong. And when the news broke that Snowden had decided to take refuge in my city, I was puzzled at first. But then, as I read and listened to pundit after pundit in the US declare that Hong Kong was a crazy choice for a whistleblower on the lam, I began to realize: no, they're absolutely wrong. Choosing Hong Kong is clearly something Edward Snowden thought through, and very well indeed. Heck, many of the reasons why he's probably ...


ezBadge
Create a Badge
ezBadge makes it easy to create the Markdown to display a CircleCI badge anywhere that supports Markdown. Simply enter the URL for your GitHub repo and hit badgify. Support for more types of Badges is Coming Soon :)
ezBadge makes it easy to create the Markdown to display a CircleCI badge anywhere that supports Markdown. Simply enter the URL for your GitHub repo and hit badgify. Support for more types of Badges is Coming Soon :)


Contact me at<EMAIL_ADDRESS>When I googled ‘Problems in the tech industry’, I just clicked on the first two links. Both of the links were articles explaining why women is underrepresented in the tech industry. Before making this blog, I knew that the tech industry was dominated by men but I did not know how grave the dominance was. Did you know that only 15% of the workforce in Yahoo and 17% of the workforce in Google are women?
Apparently, a lot of men in the tech industry still do not treat women equally or at least with respect. According to the articles that I read, there have been a lot of instances of inappropriate behaviour and that women are seen or treated as sex objects. The article even mentioned that there have been some cases wherein male colleagues created pornographic products just to embarrass women.  At the 2013 TechCrunch conference in San Francisco, one group even happily showcased their app ‘TITStare’. I was so surprised when I read about this. It is so ironic that the most advanced industry is so outdated when it comes to treating women.
When I first applied to bootcamps, I realised that there are discounts if you were female. Discounts ranged from $500-$1000. These were good incentives to attract women into going into bootcamps but these are probably not enough. Attracting women in the tech industry should happen in college, universities should offer big discounts to women who take up a tech related field. One solution I also thought of was maybe computer manufacturers can offer discounts as well to females who are currently taking up a tech related major. However, at the same time, these solutions are happening, the problems in the current work environment should be fixed as well. Leaders should be strict in enforcing their rules about sexual harassment whether it be in the office or in a conference.
This current problem may be hard to change but it is changeable. People who get hired in the tech industry should be mature enough to work there and give their best effort to change the work environment. A balance between both genders will be the best for the industry because I believe that men and women think differently and if we put both perspectives into place, we are able to build better technology for the future.


Note
Click here to download the full example code
Advanced: Making Dynamic Decisions and the Bi-LSTM CRF¶
Dynamic versus Static Deep Learning Toolkits¶
Pytorch is a dynamic neural network kit. Another example of a dynamic kit is Dynet (I mention this because working with Pytorch and Dynet is similar. If you see an example in Dynet, it will probably help you implement it in Pytorch). The opposite is the static tool kit, which includes Theano, Keras, TensorFlow, etc. The core difference is the following:
- In a static toolkit, you define a computation graph once, compile it, and then stream instances to it.
- In a dynamic toolkit, you define a computation graph for each instance. It is never compiled and is executed on-the-fly
Without a lot of experience, it is difficult to appreciate the difference. One example is to suppose we want to build a deep constituent parser. Suppose our model involves roughly the following steps:
- We build the tree bottom up
- Tag the root nodes (the words of the sentence)
- From there, use a neural network and the embeddings of the words to find combinations that form constituents. Whenever you form a new constituent, use some sort of technique to get an embedding of the constituent. In this case, our network architecture will depend completely on the input sentence. In the sentence “The green cat scratched the wall”, at some point in the model, we will want to combine the span \((i,j,r) = (1, 3, \text{NP})\) (that is, an NP constituent spans word 1 to word 3, in this case “The green cat”).
However, another sentence might be “Somewhere, the big fat cat scratched the wall”. In this sentence, we will want to form the constituent \((2, 4, NP)\) at some point. The constituents we will want to form will depend on the instance. If we just compile the computation graph once, as in a static toolkit, it will be exceptionally difficult or impossible to program this logic. In a dynamic toolkit though, there isn’t just 1 pre-defined computation graph. There can be a new computation graph for each instance, so this problem goes away.
Dynamic toolkits also have the advantage of being easier to debug and the code more closely resembling the host language (by that I mean that Pytorch and Dynet look more like actual Python code than Keras or Theano).
Bi-LSTM Conditional Random Field Discussion¶
For this section, we will see a full, complicated example of a Bi-LSTM Conditional Random Field for named-entity recognition. The LSTM tagger above is typically sufficient for part-of-speech tagging, but a sequence model like the CRF is really essential for strong performance on NER. Familiarity with CRF’s is assumed. Although this name sounds scary, all the model is is a CRF but where an LSTM provides the features. This is an advanced model though, far more complicated than any earlier model in this tutorial. If you want to skip it, that is fine. To see if you’re ready, see if you can:
- Write the recurrence for the viterbi variable at step i for tag k.
- Modify the above recurrence to compute the forward variables instead.
- Modify again the above recurrence to compute the forward variables in log-space (hint: log-sum-exp)
If you can do those three things, you should be able to understand the code below. Recall that the CRF computes a conditional probability. Let \(y\) be a tag sequence and \(x\) an input sequence of words. Then we compute
Where the score is determined by defining some log potentials \(\log \psi_i(x,y)\) such that
To make the partition function tractable, the potentials must look only at local features.
In the Bi-LSTM CRF, we define two kinds of potentials: emission and transition. The emission potential for the word at index \(i\) comes from the hidden state of the Bi-LSTM at timestep \(i\). The transition scores are stored in a \(|T|x|T|\) matrix \(\textbf{P}\), where \(T\) is the tag set. In my implementation, \(\textbf{P}_{j,k}\) is the score of transitioning to tag \(j\) from tag \(k\). So:
where in this second expression, we think of the tags as being assigned unique non-negative indices.
If the above discussion was too brief, you can check out this write up from Michael Collins on CRFs.
Implementation Notes¶
The example below implements the forward algorithm in log space to compute the partition function, and the viterbi algorithm to decode. Backpropagation will compute the gradients automatically for us. We don’t have to do anything by hand.
The implementation is not optimized. If you understand what is going on, you’ll probably quickly see that iterating over the next tag in the forward algorithm could probably be done in one big operation. I wanted to code to be more readable. If you want to make the relevant change, you could probably use this tagger for real tasks.
# Author: Robert Guthrie
import torch
import torch.autograd as autograd
import torch.nn as nn
import torch.optim as optim
torch.manual_seed(1)
Helper functions to make the code more readable.
def argmax(vec):
# return the argmax as a python int
_, idx = torch.max(vec, 1)
return idx.item()
def prepare_sequence(seq, to_ix):
idxs = [to_ix[w] for w in seq]
return torch.tensor(idxs, dtype=torch.long)
# Compute log sum exp in a numerically stable way for the forward algorithm
def log_sum_exp(vec):
max_score = vec[0, argmax(vec)]
max_score_broadcast = max_score.view(1, -1).expand(1, vec.size()[1])
return max_score + \
torch.log(torch.sum(torch.exp(vec - max_score_broadcast)))
Create model
class BiLSTM_CRF(nn.Module):
def __init__(self, vocab_size, tag_to_ix, embedding_dim, hidden_dim):
super(BiLSTM_CRF, self).__init__()
self.embedding_dim = embedding_dim
self.hidden_dim = hidden_dim
self.vocab_size = vocab_size
self.tag_to_ix = tag_to_ix
self.tagset_size = len(tag_to_ix)
self.word_embeds = nn.Embedding(vocab_size, embedding_dim)
self.lstm = nn.LSTM(embedding_dim, hidden_dim // 2,
num_layers=1, bidirectional=True)
# Maps the output of the LSTM into tag space.
self.hidden2tag = nn.Linear(hidden_dim, self.tagset_size)
# Matrix of transition parameters. Entry i,j is the score of
# transitioning *to* i *from* j.
self.transitions = nn.Parameter(
torch.randn(self.tagset_size, self.tagset_size))
# These two statements enforce the constraint that we never transfer
# to the start tag and we never transfer from the stop tag
self.transitions.data[tag_to_ix[START_TAG], :] = -10000
self.transitions.data[:, tag_to_ix[STOP_TAG]] = -10000
self.hidden = self.init_hidden()
def init_hidden(self):
return (torch.randn(2, 1, self.hidden_dim // 2),
torch.randn(2, 1, self.hidden_dim // 2))
def _forward_alg(self, feats):
# Do the forward algorithm to compute the partition function
init_alphas = torch.full((1, self.tagset_size), -10000.)
# START_TAG has all of the score.
init_alphas[0][self.tag_to_ix[START_TAG]] = 0.
# Wrap in a variable so that we will get automatic backprop
forward_var = init_alphas
# Iterate through the sentence
for feat in feats:
alphas_t = [] # The forward tensors at this timestep
for next_tag in range(self.tagset_size):
# broadcast the emission score: it is the same regardless of
# the previous tag
emit_score = feat[next_tag].view(
1, -1).expand(1, self.tagset_size)
# the ith entry of trans_score is the score of transitioning to
# next_tag from i
trans_score = self.transitions[next_tag].view(1, -1)
# The ith entry of next_tag_var is the value for the
# edge (i -> next_tag) before we do log-sum-exp
next_tag_var = forward_var + trans_score + emit_score
# The forward variable for this tag is log-sum-exp of all the
# scores.
alphas_t.append(log_sum_exp(next_tag_var).view(1))
forward_var = torch.cat(alphas_t).view(1, -1)
terminal_var = forward_var + self.transitions[self.tag_to_ix[STOP_TAG]]
alpha = log_sum_exp(terminal_var)
return alpha
def _get_lstm_features(self, sentence):
self.hidden = self.init_hidden()
embeds = self.word_embeds(sentence).view(len(sentence), 1, -1)
lstm_out, self.hidden = self.lstm(embeds, self.hidden)
lstm_out = lstm_out.view(len(sentence), self.hidden_dim)
lstm_feats = self.hidden2tag(lstm_out)
return lstm_feats
def _score_sentence(self, feats, tags):
# Gives the score of a provided tag sequence
score = torch.zeros(1)
tags = torch.cat([torch.tensor([self.tag_to_ix[START_TAG]], dtype=torch.long), tags])
for i, feat in enumerate(feats):
score = score + \
self.transitions[tags[i + 1], tags[i]] + feat[tags[i + 1]]
score = score + self.transitions[self.tag_to_ix[STOP_TAG], tags[-1]]
return score
def _viterbi_decode(self, feats):
backpointers = []
# Initialize the viterbi variables in log space
init_vvars = torch.full((1, self.tagset_size), -10000.)
init_vvars[0][self.tag_to_ix[START_TAG]] = 0
# forward_var at step i holds the viterbi variables for step i-1
forward_var = init_vvars
for feat in feats:
bptrs_t = [] # holds the backpointers for this step
viterbivars_t = [] # holds the viterbi variables for this step
for next_tag in range(self.tagset_size):
# next_tag_var[i] holds the viterbi variable for tag i at the
# previous step, plus the score of transitioning
# from tag i to next_tag.
# We don't include the emission scores here because the max
# does not depend on them (we add them in below)
next_tag_var = forward_var + self.transitions[next_tag]
best_tag_id = argmax(next_tag_var)
bptrs_t.append(best_tag_id)
viterbivars_t.append(next_tag_var[0][best_tag_id].view(1))
# Now add in the emission scores, and assign forward_var to the set
# of viterbi variables we just computed
forward_var = (torch.cat(viterbivars_t) + feat).view(1, -1)
backpointers.append(bptrs_t)
# Transition to STOP_TAG
terminal_var = forward_var + self.transitions[self.tag_to_ix[STOP_TAG]]
best_tag_id = argmax(terminal_var)
path_score = terminal_var[0][best_tag_id]
# Follow the back pointers to decode the best path.
best_path = [best_tag_id]
for bptrs_t in reversed(backpointers):
best_tag_id = bptrs_t[best_tag_id]
best_path.append(best_tag_id)
# Pop off the start tag (we dont want to return that to the caller)
start = best_path.pop()
assert start == self.tag_to_ix[START_TAG] # Sanity check
best_path.reverse()
return path_score, best_path
def neg_log_likelihood(self, sentence, tags):
feats = self._get_lstm_features(sentence)
forward_score = self._forward_alg(feats)
gold_score = self._score_sentence(feats, tags)
return forward_score - gold_score
def forward(self, sentence): # dont confuse this with _forward_alg above.
# Get the emission scores from the BiLSTM
lstm_feats = self._get_lstm_features(sentence)
# Find the best path, given the features.
score, tag_seq = self._viterbi_decode(lstm_feats)
return score, tag_seq
Run training
START_TAG = "<START>"
STOP_TAG = "<STOP>"
EMBEDDING_DIM = 5
HIDDEN_DIM = 4
# Make up some training data
training_data = [(
"the wall street journal reported today that apple corporation made money".split(),
"B I I I O O O B I O O".split()
), (
"georgia tech is a university in georgia".split(),
"B I O O O O B".split()
)]
word_to_ix = {}
for sentence, tags in training_data:
for word in sentence:
if word not in word_to_ix:
word_to_ix[word] = len(word_to_ix)
tag_to_ix = {"B": 0, "I": 1, "O": 2, START_TAG: 3, STOP_TAG: 4}
model = BiLSTM_CRF(len(word_to_ix), tag_to_ix, EMBEDDING_DIM, HIDDEN_DIM)
optimizer = optim.SGD(model.parameters(), lr=0.01, weight_decay=1e-4)
# Check predictions before training
with torch.no_grad():
precheck_sent = prepare_sequence(training_data[0][0], word_to_ix)
precheck_tags = torch.tensor([tag_to_ix[t] for t in training_data[0][1]], dtype=torch.long)
print(model(precheck_sent))
# Make sure prepare_sequence from earlier in the LSTM section is loaded
for epoch in range(
300): # again, normally you would NOT do 300 epochs, it is toy data
for sentence, tags in training_data:
# Step 1. Remember that Pytorch accumulates gradients.
# We need to clear them out before each instance
model.zero_grad()
# Step 2. Get our inputs ready for the network, that is,
# turn them into Tensors of word indices.
sentence_in = prepare_sequence(sentence, word_to_ix)
targets = torch.tensor([tag_to_ix[t] for t in tags], dtype=torch.long)
# Step 3. Run our forward pass.
loss = model.neg_log_likelihood(sentence_in, targets)
# Step 4. Compute the loss, gradients, and update the parameters by
# calling optimizer.step()
loss.backward()
optimizer.step()
# Check predictions after training
with torch.no_grad():
precheck_sent = prepare_sequence(training_data[0][0], word_to_ix)
print(model(precheck_sent))
# We got it!
Out:
(tensor(2.6907), [1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1])
(tensor(20.4906), [0, 1, 1, 1, 2, 2, 2, 0, 1, 2, 2])
Exercise: A new loss function for discriminative tagging¶
It wasn’t really necessary for us to create a computation graph when doing decoding, since we do not backpropagate from the viterbi path score. Since we have it anyway, try training the tagger where the loss function is the difference between the Viterbi path score and the score of the gold-standard path. It should be clear that this function is non-negative and 0 when the predicted tag sequence is the correct tag sequence. This is essentially structured perceptron.
This modification should be short, since Viterbi and score_sentence are already implemented. This is an example of the shape of the computation graph depending on the training instance. Although I haven’t tried implementing this in a static toolkit, I imagine that it is possible but much less straightforward.
Pick up some real data and do a comparison!
Total running time of the script: ( 0 minutes 8.694 seconds)


IoT as MAS
View log
Logout
Logout
Master theses: Internet of Things as Multi Agent System..
Add agent


self._obs[self._desired_goal_key],
))
action, agent_info = self._policy.get_action(new_obs)
next_ob, reward, terminal, env_info = (
self._env.step(action)
)
terminal = np.array([terminal])
reward = np.array([reward])
// store path obs
self._current_path_builder.add_all(
num_steps,
discard_incomplete_paths,
):
for _ in range(num_steps):
self.collect_one_step(max_path_length, discard_incomplete_paths)
def collect_one_step(
self,
max_path_length,
discard_incomplete_paths,


Home
Blog
An example blog post with a responsive video embed
Home
Blog
An example blog post with a responsive video embed
February 22, 2015
Here's a cool video:
Tags: Video embed, YouTube


CiviGuard.com »
Verification
My code is
{{ error_code }}
I didn't receive a code
{{ notice }}
- or -
Contact
<EMAIL_ADDRESS>Copyright © 2010 CiviGuard, Inc. All rights reserved.


Description: The other DOM element involved in the event, if any.
For mouseout
, indicates the element being entered; for mouseover
, indicates the element being exited.
$("a").mouseout(function(event) {
alert(event.relatedTarget.nodeName); // "DIV"
});


Department Details
Department No
*
:
Manager No
*
:
Phone No
*
:
Department Name
*
:
Department Location
*
:
Note
:
You can search department by name.
Submit
Reset
Search
Department Details


Varsity Blues **
rated R 104 minutes Paramount/MTV Films starring James Van Der Beek, Jon Voight, Paul Walker, Ron Lester, Scott Caan, Ali Larter, Amy Smart written by W. Peter Iliff directed by Brian Robbins
There's not much to say about "Varsity Blues", the latest insignificant entry into the teen movie field, other than the fact that it's another clunker from MTV Films. "Dawson's Creek" heartthrob James Van Der Beek plays John Moxon, or "Mox", a second-string quarterback on his high school football team; a team playing in the football-obsessed West Canaan, Texas. When the star quarterback gets injured, Mox finds himself in the spotlight as West Canaan's new hero. But Mox would rather stay home reading Kurt Vonnegut than play for his legendary hard-ass coach, Bud Kilmer(Jon Voight). Mox decides that if his team is going to win the championship, it'll be for them, not for the coach. Sounds like high aspirations for a film that is actually a frat-boy movie filled with gratuitous nudity, beer-drinking and football.  "Varsity Blues" is watchable when it doesn't take itself too seriously, but more often than not, it does.
a video capsule review by Akiva Gottlieb, The Teenage Movie Critic<EMAIL_ADDRESS>http://teenagemoviecritic.8m.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


Right now, do a Google search on your name. What do you find?
Hopefully, you show up several times in the first page of the search results.  People who have search page results look like they matter to the world. People who don’t appear in search results seem like nonentities. Nearly every employer expects management candidates to have social media understanding, since this is the way the world communicates and influences today.


referenced
by Axa Mei Liauw at 2019-10-28 13:37:42.merged
by Axa Mei Liauw at 2019-10-28 13:37:42.closed
by Axa Mei Liauw at 2019-10-28 13:37:43.head_ref_deleted
by Axa Mei Liauw at 2019-10-28 13:37:47.referenced
by Axa Mei Liauw at 2019-10-28 13:38:12.merged
by Axa Mei Liauw at 2019-10-28 13:38:12.closed
by Axa Mei Liauw at 2019-10-28 13:38:13.head_ref_deleted
by Axa Mei Liauw at 2019-10-28 13:38:16.referenced
by Axa Mei Liauw at 2019-10-28 13:38:45.merged
by Axa Mei Liauw at 2019-10-28 13:38:45.closed
by Axa Mei Liauw at 2019-10-28 13:38:46.head_ref_deleted
by Axa Mei Liauw at 2019-10-28 13:38:48.head_ref_force_pushed
by None at 2019-10-28 13:48:59.referenced
by Shaun Ellis at 2019-10-28 13:56:09.merged
by Shaun Ellis at 2019-10-28 13:56:09.closed
by Shaun Ellis at 2019-10-28 13:56:10.head_ref_deleted
by Shaun Ellis at 2019-10-28 13:56:12.referenced
by Shaun Ellis at 2019-10-28 14:46:44.merged
by Shaun Ellis at 2019-10-28 14:46:44.closed
by Shaun Ellis at 2019-10-28 14:46:44.head_ref_deleted
by Shaun Ellis at 2019-10-28 14:46:45.referenced
by Axa Mei Liauw at 2019-10-28 15:38:37.merged
by Axa Mei Liauw at 2019-10-28 15:38:37.closed
by Axa Mei Liauw at 2019-10-28 15:38:37.head_ref_deleted
by Axa Mei Liauw at 2019-10-28 15:38:40.Closed by #312
closed
by Axa Mei Liauw at 2019-10-28 15:39:08.head_ref_force_pushed
by None at 2019-10-28 15:33:09.head_ref_force_pushed
by None at 2019-10-28 15:42:52.referenced
by None at 2019-10-28 15:48:54.merged
by None at 2019-10-28 15:48:54.closed
by None at 2019-10-28 15:48:54.head_ref_deleted
by None at 2019-10-28 15:48:58.renamed
by Shaun Ellis at 2019-10-28 15:47:45.referenced
by None at 2019-10-28 16:25:30.merged
by None at 2019-10-28 16:25:30.closed
by None at 2019-10-28 16:25:30.head_ref_deleted
by None at 2019-10-28 16:25:37.Closed by #287
closed
by Axa Mei Liauw at 2019-10-28 17:26:38.A delegate Can create new requests and Edit request on behalf of a person. A delegate Can Approve/Deny Requests on behalf of a person A delegate needs tp see Notifications of their Delegators.
assigned
by None at 2019-10-28 17:38:50.renamed
by Shaun Ellis at 2019-10-28 18:35:48.It should be noted here that the performance issues also afflict searching the OAR as an authenticated user, hence, I am uncertain as to whether or not this might be related just to specific user accounts being overburdened with enqueued item deposits.
While the NetIDs are accessible for some of the authors from the Symplectic Elements installation (hosted on oaworkflow.princeton.edu), I am currently working to troubleshoot the following error I encounter when I attempt to release publications by author NetID:
dspace@oar-prod-repo: master item-release> ./quickArchiveAuthors<EMAIL_ADDRESS>...
*** Keeping traces in logs/./quickArchiveAuthors-9630
Exception: DataSource edu.princeton.oar.FacultyUrlDataSource@6535ef24: null
java.lang.RuntimeException: DataSource edu.princeton.oar.FacultyUrlDataSource@6535ef24: null
It may be the case that this error indicates that the author cannot be retrieved within the database using the specified NetID (i. e. I am using the wrong NetID or ID for the author with this script), or, there may be some other cause for this. I am seeking out assistance in resolving this.
9 items were reported as successfully released within the Physics department:
skip ITEM.804: pu.workflow.state=null
skip ITEM.2761: pu.workflow.state=null
update ITEM.9936: dc.description.provenance=[2019-10-28T15:43:25Z] EPERSON.symplectic 'archive_without_email'
update ITEM.9936: pu.workflow.state=archive_without_email
skip ITEM.9333: pu.workflow.state=null
skip ITEM.9136: pu.workflow.state=null
skip ITEM.617: pu.workflow.state=null
skip ITEM.803: pu.workflow.state=null
skip ITEM.2543: pu.workflow.state=null
skip ITEM.2763: pu.workflow.state=null
skip ITEM.9334: pu.workflow.state=null
update ITEM.9798: dc.description.provenance=[2019-10-28T15:43:25Z] EPERSON.symplectic 'archive_without_email'
update ITEM.9798: pu.workflow.state=archive_without_email
committing changes
archived 9 items
However, I am also seeing that 0 items were released from within the Mathematics department:
Arguments.getValue: value='Mathematics'
Arguments.getValue: new_workflow_state='archive_without_email'
Arguments.getValue: select='pu.author.department'
Arguments.getValue: select='pu.author.department'
Arguments.getValue: value='Mathematics'
Arguments.getValue: workflow_state='reviewed'
Arguments.getValue: new_workflow_state='archive_without_email'
Arguments.getValue: provenance_msg=''archive_without_email''
advance pu.workflow.state from 'reviewed' to 'archive_without_email' for items with pu.author.department='Mathematics'
Arguments.getValue: eperson='symplectic'
lister: edu.princeton.dspace.content.ItemLister@9943753[INWORKFLOW author.department=Mathematics #n=10]
skip ITEM.3129: pu.workflow.state=null
skip ITEM.844: pu.workflow.state=null
skip ITEM.3128: pu.workflow.state=null
skip ITEM.3161: pu.workflow.state=null
skip ITEM.583: pu.workflow.state=null
skip ITEM.830: pu.workflow.state=null
skip ITEM.563: pu.workflow.state=null
skip ITEM.3126: pu.workflow.state=null
skip ITEM.3344: pu.workflow.state=null
skip ITEM.582: pu.workflow.state=null
committing changes
archived 0 items
I will need to troubleshoot this (the warning indicating that there is a null
workflow state is worrying to me).
Hi James – looks great! There likely weren’t any Mathematics items in the queue; sorry if I didn’t mention that earlier. Nothing to worry about, thanks so much!
Melissa Lohrey Coordinator - Scholarly Communications Office Lewis Library, Room 211 Princeton University Library<PHONE_NUMBER> mlohrey<EMAIL_ADDRESS>From: James R. Griffin III<EMAIL_ADDRESS>Sent: Monday, October 28, 2019 11:48 AM To: pulibrary/dspace Cc: Melissa C. Lohrey; Author Subject: Re: [pulibrary/dspace] Please release all "Reviewed" content in the OAR from the Astrophysical Sciences, Physics, and Mathematics collections from the OAR this Monday (10/28) (#10)
9 items were reported as successfully released within the Physics department:
skip ITEM.804: pu.workflow.state=null
skip ITEM.2761: pu.workflow.state=null
update ITEM.9936: dc.description.provenance=[2019-10-28T15:43:25Z] EPERSON.symplectic 'archivewithoutemail'
update ITEM.9936: pu.workflow.state=archivewithoutemail
skip ITEM.9333: pu.workflow.state=null
skip ITEM.9136: pu.workflow.state=null
skip ITEM.617: pu.workflow.state=null
skip ITEM.803: pu.workflow.state=null
skip ITEM.2543: pu.workflow.state=null
skip ITEM.2763: pu.workflow.state=null
skip ITEM.9334: pu.workflow.state=null
update ITEM.9798: dc.description.provenance=[2019-10-28T15:43:25Z] EPERSON.symplectic 'archivewithoutemail'
update ITEM.9798: pu.workflow.state=archivewithoutemail
committing changes
archived 9 items
However, I am also seeing that 0 items were released from within the Mathematics department:
Arguments.getValue: value='Mathematics'
Arguments.getValue: newworkflowstate='archivewithoutemail'
Arguments.getValue: select='pu.author.department'
Arguments.getValue: select='pu.author.department'
Arguments.getValue: value='Mathematics'
Arguments.getValue: workflow_state='reviewed'
Arguments.getValue: newworkflowstate='archivewithoutemail'
Arguments.getValue: provenancemsg=''archivewithout_email''
advance pu.workflow.state from 'reviewed' to 'archivewithoutemail' for items with pu.author.department='Mathematics'
Arguments.getValue: eperson='symplectic'
lister: edu.princeton.dspace.content.ItemLister@9943753[INWORKFLOW author.department=Mathematics #n=10]
skip ITEM.3129: pu.workflow.state=null
skip ITEM.844: pu.workflow.state=null
skip ITEM.3128: pu.workflow.state=null
skip ITEM.3161: pu.workflow.state=null
skip ITEM.583: pu.workflow.state=null
skip ITEM.830: pu.workflow.state=null
skip ITEM.563: pu.workflow.state=null
skip ITEM.3126: pu.workflow.state=null
skip ITEM.3344: pu.workflow.state=null
skip ITEM.582: pu.workflow.state=null
committing changes
archived 0 items
I will need to troubleshoot this (the warning indicating that there is a null workflow state is worrying to me).
— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHubhttps://github.com/pulibrary/dspace/issues/10?email_source=notifications&email_token=ANN7MJ73TAEN43SQNKDZETLQQ4CRTA5CNFSM4JFIX7OKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOECNLNLQ#issuecomment-547010222, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ANN7MJ4KN3VDKUZS7M5CRZLQQ4CRTANCNFSM4JFIX7OA.
25 items within the Astrophysical Sciences department were reported as being released:
update ITEM.10175: dc.description.provenance=[2019-10-28T15:41:29Z] EPERSON.symplectic 'archive_without_email'
update ITEM.10175: pu.workflow.state=archive_without_email
skip ITEM.646: pu.workflow.state=null
skip ITEM.2543: pu.workflow.state=null
update ITEM.10217: dc.description.provenance=[2019-10-28T15:41:29Z] EPERSON.symplectic 'archive_without_email'
update ITEM.10217: pu.workflow.state=archive_without_email
update ITEM.10088: dc.description.provenance=[2019-10-28T15:41:29Z] EPERSON.symplectic 'archive_without_email'
update ITEM.10088: pu.workflow.state=archive_without_email
committing changes
archived 25 items
assigned
by James R. Griffin III at 2019-10-28 15:58:08.assigned
by James R. Griffin III at 2019-10-28 15:58:30.assigned
by James R. Griffin III at 2019-10-28 21:37:32.labeled
by Eliot Jordan at 2019-10-28 18:36:29.renamed
by Eliot Jordan at 2019-10-28 18:43:05.labeled
by Eliot Jordan at 2019-10-28 18:54:46.Yes.
labeled
by Christina Chortaria at 2019-10-28 19:40:59.assigned
by Christina Chortaria at 2019-10-28 19:50:39.head_ref_force_pushed
by Christina Chortaria at 2019-10-28 22:50:17.head_ref_force_pushed
by Christina Chortaria at 2019-10-29 00:17:24.head_ref_force_pushed
by Christina Chortaria at 2019-10-29 00:19:49.labeled
by None at 2019-10-28 15:22:14.labeled
by None at 2019-10-28 15:22:20.referenced
by Shaun Ellis at 2019-10-28 13:19:38.merged
by Shaun Ellis at 2019-10-28 13:19:38.closed
by Shaun Ellis at 2019-10-28 13:19:38.head_ref_deleted
by Shaun Ellis at 2019-10-28 13:19:40.Closed by #258
closed
by Axa Mei Liauw at 2019-10-28 13:47:12.It works as expected. There is a typo in the Approvals app for datanumber
https://github.com/pulibrary/approvals/blob/2fba0cfe9ed01f87d5191019cf0ff08fad965577/app/decorators/travel_request_decorator.rb#L35-L36
closed
by Axa Mei Liauw at 2019-10-28 13:48:55.Closed by #258
closed
by Axa Mei Liauw at 2019-10-28 13:52:14.Closed by #258
closed
by Axa Mei Liauw at 2019-10-28 13:52:52.Closed by #256
closed
by Axa Mei Liauw at 2019-10-28 13:53:24.renamed
by Shaun Ellis at 2019-10-28 19:42:31.assigned
by Christina Chortaria at 2019-10-28 15:17:31.This should no longer be necessary given that we are now using Traject in order to index EAD Documents.
closed
by James R. Griffin III at 2019-10-28 18:17:34.This should no longer be necessary to resolve given that we are now using Traject in place of Nokogiri.
closed
by James R. Griffin III at 2019-10-28 18:18:09.This needs to be reproduced or closed, as this may have been encountered due to the limitations imposed by the previous, Nokogiri-based indexing strategy.
labeled
by James R. Griffin III at 2019-10-28 18:50:16.milestoned
by James R. Griffin III at 2019-10-28 18:50:19.labeled
by James R. Griffin III at 2019-10-28 18:50:54.labeled
by James R. Griffin III at 2019-10-28 18:50:54.milestoned
by James R. Griffin III at 2019-10-28 18:50:57.milestoned
by James R. Griffin III at 2019-10-28 18:51:25.milestoned
by James R. Griffin III at 2019-10-28 18:51:36.We should contact both product owners in order to identify the detailed requirements for resolving this issue. Blocked by #36
milestoned
by James R. Griffin III at 2019-10-28 18:51:50.labeled
by James R. Griffin III at 2019-10-28 18:11:43.labeled
by James R. Griffin III at 2019-10-28 18:11:43.milestoned
by James R. Griffin III at 2019-10-28 18:53:23.assigned
by Esmé Cowles at 2019-10-28 18:16:24.milestoned
by James R. Griffin III at 2019-10-28 18:54:56.There may be a Vue component which could be integrated in order to facilitate with the implementation of this feature.
labeled
by James R. Griffin III at 2019-10-28 18:20:30.labeled
by James R. Griffin III at 2019-10-28 18:20:30.milestoned
by James R. Griffin III at 2019-10-28 18:55:13.Blocked by #39
milestoned
by James R. Griffin III at 2019-10-28 18:55:26.labeled
by James R. Griffin III at 2019-10-28 18:23:55.milestoned
by James R. Griffin III at 2019-10-28 18:56:35.labeled
by James R. Griffin III at 2019-10-28 19:24:54.labeled
by James R. Griffin III at 2019-10-28 19:27:24.labeled
by James R. Griffin III at 2019-10-28 19:27:24.We should also consider updating the Node.js LTS requirement to 12.y.z: https://nodejs.org/en/about/releases/
transferred
by James R. Griffin III at 2019-10-28 19:32:26.renamed
by James R. Griffin III at 2019-10-28 19:33:46.I think i was inside the directory for the role I was trying to molecularize. but yeah sort of weird!
labeled
by James R. Griffin III at 2019-10-28 20:14:58.assigned
by None at 2019-10-28 20:31:43.assigned
by James R. Griffin III at 2019-10-28 20:31:50.assigned
by Trey Pendragon at 2019-10-28 20:31:50.Here is another bad one: https://catalog.princeton.edu/catalog/4803624
referenced
by None at 2019-10-28 20:09:04.merged
by None at 2019-10-28 20:09:04.closed
by None at 2019-10-28 20:09:04.head_ref_deleted
by None at 2019-10-28 20:09:07.


Note: It is usually a better idea to resolve a ticket as invalid, than to remove it from the database.
${ticketdelete.message}
Select a changes to delete
Enter the ID of a ticket to change.
Ticket ID:


Web Service Security
The challenge of server security
A standard attack on a web site is usually that of identifying and
abusing badly written CGI scripts. Anything that gives read access to
the file system is a security hole, letting people get at the code
behind the site, often including database passwords and other sensitive
data, plus of course there are the core parts of the underlying
platform, which may contain important information: passwords, credit
card lists, user-private information, and the like. Unauthorized access
to this data can be embarrasing and expensive.
Having write access to the system leads to even greater abuses; defaced
web sites may be created, spoof endpoints written to capture caller's
data, or the database directly manipulated.
Is SOAP fundamentally insecure?
Some people, such as
Bruce Schneier, have claimed that SOAP is a
security disaster in the making, because of its ability to punch
through firewalls. However, because in SOAP over HTTP the client can
only make SOAP calls, not receive them, SOAP is no more insecure than
any other application which POSTs XML files to a web server. The clients
are safe unless the server (or its DNS address) have been subverted; the
server is vulnerable, and does need to be secured.
Similarly,
Bilal Siddiqui
makes the claim that
SOAP cannot distinguish between sensitive and non-sensitive web services
and cannot perform user authentication, authorization, and access
control.
Again, this is another example of excess panic, perhaps combined with a
lack of knowledge of how SOAP servers are implemented.
You do not need to follow this author's advice and have
separate SOAP servers for every level of sensitivity, or XML and SOAP
aware firewalls, any more than you need separate Web Servers for
different users, or require HTTP aware routers to restrict parts of a
web server to different IP addresses.
Common Attack Types
- Denial of Service to a server
- Interception and manipulation of messages
- Forged client requests
- Forged server responses
- attempts to read the server file system/database
- Attempts to write to the server file system/database
The most significant security risk comes from the fact that you are
writing code to provide functionality to calling programs. If that
functionality is offered to the wrong people, or if the code you wrote
creates a security hole, "unexpected functionality", then you have a
problem.
There is a large body of literature which covers securing web sites, such
as the
Open Web Application Security Project
Top Ten List of vulnerabilities, and their Guide to Building Secure Web
Applications.
Special XML attacks
XML messages have a few intrinsic weakness, that Web Service creators
should know about. None of these problems are unique to SOAP; anyone
processing incoming XML needs to know and resist these.
- Large XML Documents
Have a client post an XML doc of
extreme length/depth
<foo><foo><foo>...</foo></foo></foo>
This does bad things to DOM parsers and memory consumption on the
server: a DoS attack. The issue here is that the costs of handling a
large XML document are much greater than the cost of generating one.
- Entity Expansion Attacks.
If an XML doc header declares some
recursive entity declarations, and the file refers to them, then bad
things happen. Axis became immune to this between versions 1.0 and 1.1.
- Entities referring to the filesystem.
Here you declare an entity referring to a local file, then expand it.
Result: you may be able to probe for files, perhaps even get a copy of
it in the error response. As Axis does not support entities any more, it
resists this. If your code has any way of resolving URLs from incoming
messages, you may recreate this problem.
The other thing to know about XML is that string matching is not
enough to be sure that the content is safe, because of the many ways to
reformat the same XML.
Authenticating the caller
The new Web Service security proposals offer to authenticate your
callers to your end point, and vice-versa. Axis does not yet implement
these, but we do support XML signatures via
a sister project.
The other approach is to validate at the transport level, using HTTPS.
Configuring your web server to support https is definitely beyond the
scope of Axis documentation: consult your server docs. To support https
in the Axis client, you need to ensure the client has https support in
the runtime. This is automatic for Java1.4+; older versions need to add
JSSE support through Sun or an alternate provider.
Once you have HTTPS working at both ends you need to have the client
trust the server certificate -usually automatic for those signed by central
certification authorities, a manual process for home rolled
certificates.
Clients can authenticate themselves with client certificates, or HTTP
basic authentication. The latter is too weak to be trustable on a
non-encrypted channel, but works over HTTPS. The MessageContext
class will be configured with the username and password of the sender
when SOAP messages are posted to the endpoint; use the appropriate
getters to see these values. Note that Axis does not yet
integrate with the servlet API authentication stuff. Although the forms
authentication is literally off-axis when it comes to SOAP calls, the
UserPrincipal notion and integration with server configuration gives
some incentive for integration. (this is a hint to developers out there)
Axis does not (yet) support HTTP1.1 Digest Authentication; if it does get added
it will be via the
HttpClient
libraries.
Securing your Services
One of the key security holes in any Web Service is the code you write
yourself. It won't have as many eyes examining it as the Axis source
gets, deadlines get in the way of rigorous testing, and a complex web
service will bind to the valued items: private data, databases, other
servers, etc, that you want to defend against.
The key to this is not to trust the caller: their identity, their IP
address and most of all, their data. Here are some attacks to consider.
XML attacks
We listed these attacks earlier. If your service takes XML from an
attachment, or in a base-64 encoded string, parsing it as a standalone
document, then you are exposed to all these attacks. Also watch out for
standard XML syntaxes that integrate xlink or other ways of describing
URLs to fetch -such as SVG. You need to ensure the renderer only fetches
approved URLs.
Session Theft
Axis uses a good random number generator to generate session IDs, but
someone listening to an unencrypted conversation could hijack a session
and send in new messages. Recording sender info, such as the originating
IP address helps, though beware of proxied systems (e.g. AOL) that may
change the apparent origin of calls mid-session.
DOS attacks via load-intensive operations
Any request that takes time to process is a DOS attack target, as it
ties up the CPUs. Authenticate before long requests, and consider
watchdog threads to track really long execution times. If any bug causes
a request to spin forever.
Parameter Attacks
If any parameter in the XML is fed straight into a database query, or
some other routine that depends on valid data, then that data
must be validated. Otherwise someone malicious could send a
database update request, or some other string which lets a malicious
user manipulate the system. This could even be as simple as changing
their UserID in a request from that they set up in the session. Database
attacks come from any situation where a parameter is inserted into an
SQL query; the insertion of a semicolon ";" often permits the caller to
append a whole new SQL command to the end of the first, and have it
executed with the rights of the Web Service.
The key to defending against malicious parameters is to validate all
data. Only accept a string containing only the characters/regular
expression expected, and check its length. Better yet apply any other
higher level checks 'userID==session.userID' that you can. Prepared
Statements are the followon way of defending against SQL injection, as the
JDBC runtime handles escaping of things. Don't try and build SQL strings
by hand; it is a recipe for security holes.
Note that this would seem to argue strongly against mapping Session EJB
objects to SOAP Endpoints. This is not the case. The Session bean must
merely assume that all incoming data is untrusted, and so validate it
all before processing further. This is exactly the kind of task a
Service Layer should be doing.
Cross Site Scripting
In theory, a pure Web Service should be immune to XSS attacks, at least
those that rely on having uploaded script displayed in an HTML Web Page
server-side, script that is executed when the client views it. But the
moment one takes Axis and integrates with one's own webapplication, any
loopholes in the rest of the webapp expose this exact problem. We don't
think Axis itself is vulnerable, because although it may include
supplied data in a SOAPFault, this is displayed as XML, not HTML.
Clients which don't distinguish the two could be an issue, as could
anything we missed, especially in GET handling.
Securing Axis
A core philosophy is 'defend in depth', with monitoring for trouble.
Disguise
One tactic here is to hide the fact that you are running Axis...look at
all the headers that we send back to describe the service, and if any
identify Axis, edit that constant in the source. While obscurity on its
own is inadequate; it can slow down attacks or make you seem less
vulnerable to known holes.
Cut down the build
Rebuild Axis without bits of it you don't need. This is a very paranoid
solution, but keeps the number of potential attack points down. One area
to consider is the 'instant SOAP service' feature of JWS pages. They,
along with JSP pages, provide anyone who can get text files onto the web
application with the ability to run arbitrary Java code.
Rename things
The AxisServlet, the AdminService, even happyaxis.jsp are all in well
known locations under the webapp, which is called 'axis' by default.
Rename all of these, by editing web.xml for the servlet,
server-config.wsdd for the AdminService; the others are just JSP and WAR
files you can rename. You may not need the AdminService once you have
generated the server config on a development machine.
Stop AxisServlet listing services
To do this, set the Axis global configuration property
axis.enableListQuery to false.
Keep stack traces out of the responses
By default, Axis ships in production mode; stack traces do not
get sent back to the caller. If you set
axis.development.system to true in the configuration, stack
traces get sent over the wire in faults. This exposes internal
information about the implementation that may be used in finding
weaknesses.
Stop autogenerating WSDL
Trusted partners can still be given a WSDL file through email, or other
means; there is no need to return the WSDL on a production server. How
do you stop Axis returning WSDL? Edit the .wsdd configuration file, as
described in the reference, to return a
WSDL resource which is simply an empty <wsdl/> tag.
Servlets2.3: use filters for extra authentication
Servlets 2.3 lets you use filters to look at all incoming requests and
filter them however you like -including validating IP address, caller
credentials, etc. Caller address validation is useful for securing admin
services and pages, even when other endpoints are public. Of course,
router configuration is useful there too.
Log things
Although full logs are a DoS attack tactic in themselves, logging who
sends messages is often useful, for auditing and keeping track of what
is going on. Add more log4j tags to whatever bit of Axis appeals to you
to do this.
Run Axis with reduced Java rights
Java has a powerful and complex security system. Use it to configure
Axis with reduced rights. Axis tries to write to
WEB-INF/server-config.wsdd when updating the server config; and
somewhere else (its configurable) when saving compiled .jws pages.
Run the web server with reduced rights
On Unix this is pretty much a given, but even on Windows NT and
successors you can run a service as a different user. Make it one with
limited rights. Make sure the core of the system has its access
permissions tightened up so that the restricted-rights user can not
get at things it shouldn't.
Monitor Load
To track DoS attacks, a load monitor is useful. AxisBaseServlet
tracks the number of callers inside its subclasses at any point in time;
the AdminServlet shows how to get at this data.
Consider 'tripwire' and 'honeypot' endpoints
With the core endpoints moved, why not create tripwire implementations
of the admin endpoint, or a spoof endpoint listing under Axis/AdminServlet
pointing to a honeypot endpoint that does nothing but send an alert when
anyone sends a SOAP message to it. You then need a policy to act on the
alerts, of course. A real honeypot would emulate an entire back end
service -it would be an interesting little experiment to build and play
with.
Monitor the Mailing Lists
We tend to discuss security on Axis-Dev, whenever it is an issue, but if
demand is high we may add an axis-announce mailing list for important
announcements.
What to do if you find a security hole in Axis
These days a lot of people love to make a name for themselves by finding
security holes, and Axis, as part of the Apache product family, is a
potential target. A hole in Axis could make many Web Services
vulnerable, so could be serious indeed. So far we have only found a few
of these, primarily in quirks of XML parsing rather than anything else.
- Don't Panic. We have a process in place for verifying and fixing
holes.
- Don't rush to issue the press release to BugTraq. It is polite to
let us know, and even verify that you are correct.
- Test against the latest CVS version, not the (older) release
builds. We may like already have fixed it, hacker dudes :-)
- Email<EMAIL_ADDRESS>Not the public axis-dev list, not
bugzilla. The security alias list is a list with representives from all
Apache projects, so your report will be taken seriously.
- Let us do a fix if possible, so we can announce that a fix is ready
when you announce your finding. This doesn't take any of the credit way
from the finder, just stops people panicing.
Automate Security Tests
If you find a security problem, write a test for it, such as a JUnit or
HttpUnit test, so that you can regression test the application and
installations for the problem. This is particularly important where it
is a configuration problem that creates the hole; it is almost
inevitable the same problem will re-occur on future installations.
Conclusions
We have shown some of the issues with Web Service security, things
you need to think of in your own service, and how to harden Axis itself.
Securing a system is much harder than getting a system to work, as
'work' usually means 'one or two non-critical bugs are OK'. From a
security perspective, no security holes can exist for a system to be
secure: no matter how obscure it is, someone may find it and exploit it.
Be paranoid: you know it makes sense.
Finally, don't get put off writing SOAP services through a fear of the
security implications. Any CGI-BIN or ASP/JSP page that takes parameters
is as much of a security risk as a SOAP endpoint. For some reason,
SOAP attracts dramatic press stories about infinite risk, perhaps
because it is new and unknown. It isn't: it is XML posted to a web
application, that's all. Only if you are scared of that, should you
not write a SOAP service.


{{define "home.html"}}
{{template "CommonHead"}}GoDoc generates Go package documentation on the fly from packages on Bitbucket, Github, Google Project Hosting and Launchpad. Read the About Page for information about adding packages to GoDoc and more. {{with .Popular}}


First Name: First Name is required.
Last Name: Last Name is required.
Your Email: Email is required. Invalid email address.
Mesage:


bnd-sup.hpp File Reference
(Revision: 13068)
Go to the source code of this file.
Classes | |
| class | Gecode::Int::GCC::UnReachable |
| Class for computing unreachable values in the value GCC propagator. More... | |
| class | Gecode::Int::GCC::Rank |
| Maps domain bounds to their position in hall[].bounds. More... | |
| class | Gecode::Int::GCC::MaxInc< View > |
| Compares two indices i, j of two views according to the ascending order of the views upper bounds. More... | |
| class | Gecode::Int::GCC::MinInc< View > |
| Compares two indices i, j of two views according to the ascending order of the views lower bounds. More... | |
| class | Gecode::Int::GCC::MinIdx< Card > |
| Compares two cardinality views according to the index. More... | |
| class | Gecode::Int::GCC::PartialSum< Card > |
| Partial sum structure for constant time computation of the maximal capacity of an interval. More... | |
| class | Gecode::Int::GCC::HallInfo |
| Container class provding information about the Hall structure of the problem variables. More... | |
Namespaces | |
| namespace | Gecode |
Gecode toplevel namespace | |
| namespace | Gecode::Int |
Finite domain integers. | |
| namespace | Gecode::Int::GCC |
Global cardinality propagators (Counting). | |
Functions | |
| template<class Card > | |
| ExecStatus | Gecode::Int::GCC::prop_card (Space &home, ViewArray< IntView > &x, ViewArray< Card > &k) |
| Bounds consistency check for cardinality variables. | |
| template<class Card > | |
| bool | Gecode::Int::GCC::card_consistent (ViewArray< IntView > &x, ViewArray< Card > &k) |
| Consistency check, whether the cardinality values are feasible. | |
Path compression | |
Each of the nodes on the path from start to end becomes a direct child of to. | |
| void | Gecode::Int::GCC::pathset_ps (HallInfo hall[], int start, int end, int to) |
| Path compression for potentially stable set structure. | |
| void | Gecode::Int::GCC::pathset_s (HallInfo hall[], int start, int end, int to) |
| Path compression for stable set structure. | |
| void | Gecode::Int::GCC::pathset_t (HallInfo hall[], int start, int end, int to) |
| Path compression for capacity pointer structure. | |
| void | Gecode::Int::GCC::pathset_h (HallInfo hall[], int start, int end, int to) |
| Path compression for hall pointer structure. | |
Path minimum | |
Returns the smalles reachable index starting from i. | |
| int | Gecode::Int::GCC::pathmin_h (const HallInfo hall[], int i) |
| Path minimum for hall pointer structure. | |
| int | Gecode::Int::GCC::pathmin_t (const HallInfo hall[], int i) |
| Path minimum for capacity pointer structure. | |
Path maximum | |
Returns the greatest reachable index starting from i. | |
| int | Gecode::Int::GCC::pathmax_h (const HallInfo hall[], int i) |
| Path maximum for hall pointer structure. | |
| int | Gecode::Int::GCC::pathmax_t (const HallInfo hall[], int i) |
| Path maximum for capacity pointer structure. | |
| int | Gecode::Int::GCC::pathmax_s (const HallInfo hall[], int i) |
| Path maximum for stable set pointer structure. | |
| int | Gecode::Int::GCC::pathmax_ps (const HallInfo hall[], int i) |
| Path maximum for potentially stable set pointer structure. |


Skill Explosion
Skill Explosion
Skill Explosion
Skill Explosion
Point-Click
Bouncing Targets
Tracking
Left-Right
Top-Bottom
Raindrops
Pelicans
Gauntlet
Head Man
Selection Box
Marbles
Split
Multi Dodge
Us
(new)
Keyboard
Key Recall
Math/Puzzle
Sequence Match
Umbrellas


Usman Anwar
I am a PhD student in Computational and Biological Learning lab at Cambridge University, UK. I am interested in reinforcement learning, multi-agent learning and AI Safety. I am supervised by David Kruger and funded by Open Phil AI Fellowship and Vitalik Buterin Fellowship on AI Safety. Previously, I was a MS student at the Information Technology University, Pakistan, where I graduated second in my class and was awarded Graduate Student Fellowship.
Email /
GitHub /
Google Scholar /
LinkedIn /
CV
If you want to chat with me, please get in touch here.
|


Our 2019-20 Robot: Firefly
2020 Technical Binder
Robot Overview
After a rolling development period of 6 months, mk. VII of Firefly was finalized. Utilizing the NASA BEST continuous design process, the team created a final robot that consists of a mecanum drivebase, double ball-bearing slide vertical extension, linkage-based horizontal extension, passthrough intake-outtake system, and a quick intake.
Drivebase
Firefly’s drivebase consists of a four wheel mecanum drivetrain in a full body acetal enclosure. It is capable of accurate and agile maneuvers around the playing field to achieve quick cycle times, while still having adequate torque for defensive maneuvers. All subsystems stay contained within the frame perimeter when Firefly is not scoring, allowing for a full, isolated, and robust structure.
Mecanum Drivetrain
-
Ball-bearing based mecanum wheels
-
HTD5 pitch belts with exact C2C for efficient torque transfer from motor to wheels
-
Wheels mounted with 12mm bearings on dead-axle hex shafts directly mounted to side panels
-
Total approximate, loaded max speed of ~6 ft/s
Motors
-
4 independent 312 RPM motors
-
Motors geared from bare Matrix motors at a 19.2:1 ratio achieved by planetary gears
Structure
-
Custom-manufactured and assembled structure, with laser cut and CNC-ed components
-
0.25’’ acetal side, top, back, and front panels offering full protection from collisions
-
Robust, independent left and right side drive pods, connected via 24mm square extrusion cross members
-
Easily repairable superstructure with many custom mounting points
-
Center of mass at near center of robot
Vertical Lift
Firefly’s vertical lift consists of two motors simultaneously powering two sets of stacked, continuous slides for a smooth, low-friction, and sturdy vertical extension. Its slides are oriented to provide maximum strength, while the lift is optimally powered to achieve a quick, 0.6 second extension to maximum height, to stack up to twelve levels tall and place a capstone.
SAR230 Slides
-
Ball-bearing based, light aluminum drawer slides
-
Five continuously strung stages
-
Two sets of slides, inwards facing for rigidity
-
Custom 3d-printed mounting inserts to stack slides with a low-profile
Motors
-
2 independent, encoder-synced 1150 RPM motors
-
Motors geared from bare Matrix motors at a 5.2:1 ratio achieved by planetary gears
Pulleys
-
Custom 3d-printed NylonX spools for string
-
40mm diameter spool, with extend and retract pulleys built in one assembly
-
350 lb rated kevlar string, 1mm thickness for minimal pulley overlap wrap
-
String wrap to slides with pulley guards
Intake
Firefly’s intake is powered by two motors with >1000 rpm loaded free speeds, and a set of compliant wheels allowing for a reliable grip to be established on the stone. Its immense speed allows for a variety of stone orientations to be quickly intaked.
Motors
-
2 independent, encoder-synced 1150 RPM free-speed motors
-
Motors geared from bare Matrix motors at a 5.2:1 ratio achieved by planetary gears
Compliancy
-
Two sets of two 3-inch 35A durometer compliant wheels provide a subtle amount of compression to effectively intake stones while still retaining a high tangent velocity
-
1/4 inch delrin mounting plates for intake modules flex to allow for a spring-loading compression, further assists stone re-orientation as it enters the robot
Bellypan
-
Custom cut and bent polycarbonate bellypan
-
Flexible against shock impacts, while retaining shape and shatter-resistant
Outtake
Firefly’s outtake consists of a linkage based, servo powered horizontal extension, and two independent side grippers to securely grab stones by the front and back faces, while resting on the bellypan. Its linkage allows for a rotational force by the servo to be transferred into a translational motion, deploying the stone to be stacked in a fraction of a second. Two horizontal aluminum ball bearing slides are used for efficient motion of the stone, as it is transferred to be stacked. A custom laser-cut delrin structure allows for a precise placement of the stone onto the foundation when the robot is squared with the foundation, making alignment quick and simple for drivers.
Linkage
-
Transfers ~135° servo rotation to 8.25 into horizontal extension arm powered with one 6v goBilda 2000-series servos
-
Two Misumi SAR240 aluminum ball bearing drawer slides
-
Custom, lightweight delrin mounting structure
Grippers
-
One 6v goBilda 2000-series servo each
-
Simulation and analysis tested geometry
-
Rubber-coated end effector for maximum grip on stone nub
-
Laser cut 1/4 in delrin gripper arms which can release the block onto a stack with clearance to drive away immediately, improving stacking times
Foundation Mover
Firefly’s foundation mover is powered by two bearing-housing reinforced angular servos, with laser-cut delrin custom foundation arms attached. The geometry of its delrin foundation arms allow them to move in an arc to lock onto the foundation, even when the robot is not perfectly squared, allowing for a large margin of driver error.
Foundation Arms
-
Two independent arms powered by 6v goBilda 2000-series servos
-
Arc movement profile allows for sturdy grip on the foundation from a variety of alignment angles of the drivebase
-
Laser-cut 1/4 inch delrin provides durable resiliency to any possible collisions when arms are extended out of the frame perimeter


Detailed Description
See [key input](input_key) for how these are used.
These key codes are inspired by the _USB HID Usage Tables v1.12_ (p. 53-60), but re-arranged to map to 7-bit ASCII for printable keys (function keys are put in the 256+ range).
The naming of the key codes follow these rules:
- The US keyboard layout is used
- Names of printable alpha-numeric characters are used (e.g. "A", "R", "3", etc.)
- For non-alphanumeric characters, Unicode:ish names are used (e.g. "COMMA", "LEFT_SQUARE_BRACKET", etc.). Note that some names do not correspond to the Unicode standard (usually for brevity)
- Keys that lack a clear US mapping are named "WORLD_x"
- For non-printable keys, custom names are used (e.g. "F4", "BACKSPACE", etc.)


Un-
l
e
ash
Cre-
a
t
ivity
July 1-5
Outburst
Amsterdam
THE ANNUAL EVENT CELEBRATING THE MOST OUTSTANDING WORK IN ICT, FASHION, DIGITAL INTERACTIVE DESIGN, MEDIA & COMMUNICATION
Location
Program
contact