| Edition 2019-20 Edition 2020-21 |
If the demo isn't visible or won't run, this probably is due to new Java applet security restrictions or to the fact that some browsers simply have stopped supporting Java (Firefox 64-bit). You may open the Java configuration control panel and add our server to the exception list, and/or try opening the demo in another browser (for example 32-bit FF). More detailed instructions can be found here. As a last resort, you may download Netlogo 4.1.3, download the source of the demo, and run it in you local copy of Netlogo. © Gerard Vreeswijk, 2010.
Bugs live on a torus and have, depending on the value of "attraction", either the objective to meet each other ("attraction" = 1) or to avoid each other, i.e. stay out of each other's way ("attraction" = -1). They do so by watching the location of other bugs and then turn left or right based on the observed location of these other bugs. The problem is that adaptation is based on locations of bugs that are in the process of adaptation themselves.
For a master course on adaptive agents I was thinking of a very simple example that I could begin the course with. This example should demonstrate, above all, typical behavior of agents that adapt their behaviour to other agents that are themselves in the same process of adaptation.
After I constructed the program, I realised that it is a simple instance of an N-type pursuit (a = 1) or avoidance (a = -1) game. Pursuit and avoidance games are instances of so-called differential games. Books on differential games are written among others by Isaacs (1965), Friedman (1971), and Hajek (1975). I think by then dg's were hot because of research in military warfare stimulated by the cold war (1945-1989). Could be.
The challenge partially was to find one of the most simple examples. An even simpler example would be to put bugs on the unit circle, but then bug traces would be difficult to see. (Bugs frequently re-visit locations in 1D.) The unit interval (bounded 1D) is not suitable, because boundaries would influence avoidance behaviour. Also, the real line (unbounded 1D) is not suitable, because the absence of boundaries would enable simple avoidance behaviour. (Simply flee away to infinity.)
A bug moves as follows: 1) determine location of other bugs 2) based on this observation, turn left "turn-degree" degrees or turn right "turn-degrees" degrees. 3) Move forward "step-size".
The set named "other bugs" is determined as follows. Depending on the value of "number-closest-to-adapt-to", let's call this N, a bug determines the location of its N closest neighbours. N may vary from 1 to the total number of bugs - 1. Thus, if "number-closest-to-adapt-to" = N = 3, a bug determines the location of its three closest neighbours. Then the centroid (center of gravity, middle point) of these N bugs is determined. This centroid (depicted in the form of a target) will be point of direction for the present bug. If the centroid is on the left to the present bug, and the objective is to meet other bugs, then the bug will turn left. Similarly, if the centroid is on the left to the present bug, and the objective is to avoid other bugs, then the bug will turn right.
The "adapt-to-all-others" switch is a shortcut to "number-closest-to-adapt-to" := number of other turtles.
The "neighbourhood" slider is to set a neighborhood in attraction scenarios. If "neighbourhood" is set to, say 1.141, then neighbours within 1.141 crow distance are considered to be on the same location and are ignored in the determination of the N closest neighbours. This is to avoid adaptation to neighbours that may already be considered to be on the same location. If "neighbourhood" is set to 0 in attraction scenarios, then N = 1 would cause bugs to adapt in pairs and ignore the rest. The value SQRT(2) = 1.141 is a good value, because it respects the patch size of the simulation.
In 2D, i.e. the plane, the centroid of N points is clearly defined. I.e., the average of (1, 3), (2, 5) and (-1, 6) is ((1+2-1)/3, (3+5+6)/3). The centroid of N points on a torus is defined similarly, but we will have to take notice that nearness and direction on a torus are of course defined differently.
To understand how the concept of a centroid on a torus is defined, let's move down one dimension lower to the unit circle. Let the degrees stand for directions of wind. You receive two wind directions, and then you'll have to report an average wind direction. The set { 120, 122 } is a clear case, you'd most probably report 121 as an average. But what about the set { 0, 180 }? The number 90 is not the right answer, because then -90 or 270 equally well would be. Probably the best answer is to remain undecisive here. The wind is blowing from two totally opposite directions, so you simply can't tell.
The average of two (or more) directions is computed by representing degrees as vectors on a circle, and then add the vectors. Then map the sum of the vectors back to the circle, that is your average. The certainy factor of this average is the length of the sum vector. If the vectors point in different directions, the certainty factor is low; the certainty factor is 1 if and only if all vectors point in the same direction.
Now generalise to the torus and we are done.
Implement decay factor. The decay factor should cause bugs to slow down when they are in the neighborhood of their goal.
This section could give some ideas of things for the user to notice while running the model.
This section could give some ideas of things for the user to try to do (move sliders, switches, etc.) with the model.
This section could give some ideas of things to add or change in the procedures tab to make the model more complicated, detailed, accurate, etc.
This section could point out any especially interesting or unusual features of NetLogo that the model makes use of, particularly in the Procedures tab. It might also point out places where workarounds were needed because of missing features.
This section could give the names of models in the NetLogo Models Library or elsewhere which are of related interest.
Gerard Vreeswijk (c) 2009.


Conflict and natural disasters cause millions of men, women and children to leave their homes every year. In 2017, there were 30.6 million new internal displacements across 143 countries and territories. Millions more live in situations of protracted internal displacement or face chronic displacement risk.
The boundaries and names shown and the designations used on this map do not imply official endorsement or acceptance by the United Nations.
Data source: IDMC.
Internal Displacement - What does it mean?
Internal displacement describes the situation of people who have been forced to leave their homes but have not left their country.
The Internal Displacement Monitoring Centre (IDMC) has increased the scope of monitoring internal displacement, but a number of gaps remain, including limited geographic coverage. The data presented on this page are estimates.
Unevenly distributed
The global distribution of internal displacement has been uneven over the past decade. The levels of severity vary hugely between regions and countries.
Most conflict-induced displacements took place in Sub-Saharan Africa and the Middle East over the past decade. Disaster-induced displacements were prevalent in East Asia and the Pacific, South Asia and the Americas during the same period.
In East Asia, some of the highest levels of disaster displacement came about as a result of earthquakes. The devastating 2008 Sichuan Earthquake and 2010 Yushu Earthquake in China, as well as the 311 Eastern Japan Earthquake, each displaced millions of people.
In South Asia, sudden-onset disasters during the monsoon season were the major triggers. Similarly, the Atlantic hurricane season accounted for a large percentage of displacement in the Americas.
Small-scale displacements by disaster
IDMC has monitored a steady increase of small-scale disaster-triggered events. In 2017, there were 768 events that had fewer than 5000 displacement cases, which was more than six times the number recorded in 2008.
Disasters affect high and low-income countries alike, but conflicts and violence often hit a few countries or regions the hardest. For example, Sub-Saharan Africa accounts for only 14 percent of the world's population, but almost half of new conflict-induced displacements took place in the region in 2017.
Large-scale displacements by conflict and violence
Among countries with the largest conflict displacement, the Democratic Republic of the Congo, Iraq and Syria saw more than one million new displacement cases in 2017. There was also a sharp increase in Somalia, which saw a threefold increase of the 2016 figure. In South Sudan, conflict continued to drive extreme food insecurity throughout the country, causing significant new displacements.
Find the data used in the visual above on HDX:
- New displacement associated with conflict and violence
- New displacement associated with disasters
- People displaced by conflict and violence
Note: The above text was adapted from IDMC Grid 2018 Report.


Welcome to CircuitQ’s documentation!¶
CircuitQ is an an open-source toolbox for the analysis of superconducting circuits implemented in Python. It features the automated construction of a symbolic Hamiltonian of the input circuit, as well as a dynamic numerical representation of this Hamiltonian with a variable basis choice. Additional features include the estimation of the T1 lifetimes of the circuit states under various noise mechanisms. The circuit quantization is both applicable to circuit inputs from a large design space and open-source.
To get started, have a look at the installation instructions and at our quick demo for a demonstration of the basic usage of the toolbox.
A more comprehensive description of CircuitQ’s functionalities can be found in the tutorial.
For further illustrations of the toolbox, please see the more examples section. The API reference provides an overlook over the range of functions and is constructed based on the docstrings.
Table of contents¶
Note
Please refer to our preprint on arXiv for more details on physics and implementation and to cite our project.
The source code can be found on CircuitQ’s repository at GitHub.
CircuitQ was developed by Philipp Aumann and Tim Menke under the supervision of William Oliver and Wolfgang Lechner.


title=Dust date=2009-02-04 type=post tags=blog status=published ~~~~~~
Sometimes people tell me, "Josh, you're an idiot!" Then I have myself a good cry and walk it off.
Then people ask me about the 7-node grid I keep in my home office.
They wonder why I would keep that many computers in so small a space. They wonder, "why?" Besides providing something of an electric heater (the room's consistently 10F warmer than the rest of the place!), the computers let me test algorithms/concepts in scale. Frameworks like Teracotta don't test very consistently on a single node, after all.
Finally, people ask me if there are any disadvantages. They ask if the electric bill's high. It isn't, but that's a side effect of living in Arizona, where my air conditioner's on 24/7 and so an extra few computers doesn't really make a difference. They ask if I spend my time maintaining them.I tell them I run Ubuntu, so I never get viruses. If a PC malfunctions then I simply repair it and reimage the node. They press me. Surely there's something disadvantageous to running so many computers. I tell them the honest truth. It's the dust. The dust alone is the reason I want to just invest in EC2. And of course, I'm an asthmatic and a green fiend. So I can't use the aerosol canisters to dispel the dust. Nor can I use the Ozone-friendly canisters -- they both trigger my asthma or offend my green sensibilities. So, I have to clean them with a rag on occasion (once every couple of weeks).
Next time I get a home office, I'm going to get it with tile. Remember, if you're going to setup a grid, the biggest challenge you face may not be technical.


--- layout: post authors: ["Greg Wilson"] title: "Job Openings at the Mozilla Science Lab" date: 2014-05-14 time: "07:00:00" tags: ["Jobs", "Mozilla Science Lab"] ---
The Mozilla Science Lab is looking for a community manager to build and scale existing community outreach efforts, and for a developer to lead technical prototyping efforts and engage with our community about technical projects. Possible office locations for these positions include Brooklyn, Toronto, London, Vancouver, and San Francisco, but we will consider remote working opportunities for the right candidate. For more information, or to apply, please see these postings.


ReadGood is the new app for kids that want to learn to read good - and do other stuff good, too.
include a "+" and a country code if you are outside the US - e.g. +4455566677


| Package | flare.vis.operator.layout |
| Class | public class Layout |
| Inheritance | Layout Operator |
| Subclasses | AxisLayout, CircleLayout, CirclePackingLayout, DendrogramLayout, Distortion, ForceDirectedLayout, IcicleTreeLayout, IndentedTreeLayout, NodeLinkTreeLayout, PieLayout, RadialTreeLayout, RandomLayout, StackedAreaLayout, TreeMapLayout |
| Property | Defined by | ||
|---|---|---|---|
| enabled : Boolean Indicates if the operator is enabled or disabled.
| Operator | ||
| layoutAnchor : Point The layout anchor, used by some layout instances to place an
initial item or determine a focal point.
| Layout | ||
| layoutBounds : Rectangle The layout bounds for the layout.
| Layout | ||
| layoutRoot : DataSprite
The layout root, the root node for tree layouts.
| Layout | ||
| layoutType : String = "null" The type of layout and axes.
| Layout | ||
| parameters : Object
Sets parameter values for this operator.
| Operator | ||
| visualization : Visualization
The visualization processed by this operator.
| Operator |
| Property | Defined by | ||
|---|---|---|---|
| _anchor : Point | Layout | ||
| _setAnchor : Boolean = false | Layout | ||
| _t : Transitioner = null A transitioner for storing value updates.
| Layout | ||
| xyAxes : CartesianAxes
[read-only]
Returns the visualization's axes as a CartesianAxes instance.
| Layout |
| Method | Defined by | ||
|---|---|---|---|
|
applyParameters(op:IOperator, params:Object):void
[static]
Static method that applies parameter settings to an operator.
| Operator | ||
|
clearEdgePoints():void
Strips all EdgeSprites in a visualization of any control points.
| Layout | ||
|
Hides the axes.
| Layout | ||
|
operate(t:Transitioner = null):void
Performs an operation over the contents of a visualization.
| Layout | ||
|
setup():void
Setup method invoked whenever this operator's visualization
property is set.
| Operator | ||
|
Reveals the axes.
| Layout | ||
|
[static]
Updates all edges to be straight lines.
| Layout |
| Method | Defined by | ||
|---|---|---|---|
|
autoAnchor():void
Automatically-generate an anchor point.
| Layout | ||
|
layout():void
Calculates the spatial layout of visualized items.
| Layout | ||
|
minAngle(a1:Number, a2:Number):Number
Returns an angle value that minimizes the angular distance
between a reference angle and a target angle.
| Layout |
| Constant | Defined by | ||
|---|---|---|---|
| CARTESIAN : String = "cartesian" [static] Constant indicating Cartesian (x, y) coordinates.
| Layout | ||
| POLAR : String = "polar" [static] Constant indicating polar (radius, angle) coordinates.
| Layout |
| _anchor | property |
protected var _anchor:Point
| layoutAnchor | property |
layoutAnchor:Point
[read-write]The layout anchor, used by some layout instances to place an initial item or determine a focal point.
Implementation public function get layoutAnchor():Point
public function set layoutAnchor(value:Point):void
| layoutBounds | property |
layoutBounds:Rectangle
[read-write]The layout bounds for the layout. If this value is not explicitly set, the bounds for the visualization is returned.
Implementation public function get layoutBounds():Rectangle
public function set layoutBounds(value:Rectangle):void
| layoutRoot | property |
layoutRoot:DataSprite
[read-write]The layout root, the root node for tree layouts.
Implementation public function get layoutRoot():DataSprite
public function set layoutRoot(value:DataSprite):void
| layoutType | property |
public var layoutType:String = "null"
The type of layout and axes. This value should be
CARTESIAN
for x,y axes, POLAR
for polar
coordinates (radius, angle), or null for no axes.
| _setAnchor | property |
protected var _setAnchor:Boolean = false
| _t | property |
protected var _t:Transitioner = null
A transitioner for storing value updates.
| xyAxes | property |
xyAxes:CartesianAxes
[read-only]Returns the visualization's axes as a CartesianAxes instance. Creates/modifies existing axes as needed to ensure the presence of CartesianAxes.
Implementation protected function get xyAxes():CartesianAxes
| autoAnchor | () | method |
protected function autoAnchor():void
Automatically-generate an anchor point.
| clearEdgePoints | () | method |
public function clearEdgePoints():void
Strips all EdgeSprites in a visualization of any control points.
| hideAxes | () | method |
public function hideAxes(t:Transitioner = null):Transitioner
Hides the axes.
Parameterst:Transitioner (default = null ) — a transitioner to collect value updates
|
Transitioner —
the input transitioner
|
| layout | () | method |
protected function layout():void
Calculates the spatial layout of visualized items. Layout operators override this method with their layout implementations.
| minAngle | () | method |
protected function minAngle(a1:Number, a2:Number):Number
Returns an angle value that minimizes the angular distance between a reference angle and a target angle. This method may shift the angle value by multiples of 2 pi.
Parametersa1:Number — the reference angle to stay close to
|
|
a2:Number — the target angle value
|
Number — an angle that minimizes the distance
|
| operate | () | method |
public override function operate(t:Transitioner = null):void
Performs an operation over the contents of a visualization.
Parameterst:Transitioner (default = null ) — a Transitioner instance for collecting value updates.
|
| showAxes | () | method |
public function showAxes(t:Transitioner = null):Transitioner
Reveals the axes.
Parameterst:Transitioner (default = null ) — a transitioner to collect value updates
|
Transitioner —
the input transitioner
|
| straightenEdges | () | method |
public static function straightenEdges(list:DataList, t:Transitioner):Transitioner
Updates all edges to be straight lines. Useful for undoing the results of layouts that route edges using edge control points.
Parameterslist:DataList — a data list of edges to straighten
|
|
t:Transitioner — a transitioner to collect value updates
|
Transitioner |
| CARTESIAN | constant |
public static const CARTESIAN:String = "cartesian"
Constant indicating Cartesian (x, y) coordinates.
| POLAR | constant |
public static const POLAR:String = "polar"
Constant indicating polar (radius, angle) coordinates.


Several R90 estimators are compared using Monte Carlo simulations. Estimators based on R9:10 (second worst miss radius in a 10-shot group) and R6:10+R9:10 found to perform well on wide variety of input distributions.
Based on observed shots, estimate R90 (the radius of a circle that is expected to contain 90% of all impacts).
5x5: Measure average extreme spread of five 5-shot groups. This common method is used by NRA magazine American Rifleman to report firearm accuracy. Multiply by 0.72 to get estimate of R90. This assumes perfect zero.
2x10 (9): Measure 9th-smallest miss radius R9:10 in each of the two 10 shot groups, take the average, multiply by 1.15 to get estimate of R90.
2x10 (6&9): In a 10 shot group, add 6th-smallest miss radius R6:10 and 9th-smallest miss radius R9:10. Do it again with the second group and take the average. Multiply by 0.69 to get estimate of R90.
Rayleigh 20: Take the average of 20 miss radiuses, multiply by 1.76 to get estimate of R90.
MLE 20: Take the sum of squares of 20 miss radiuses, multiply by factor shown in Appendix to get estimate of R90.
Start with establishing the baseline. Pull impact coordinates from standard bivariate normal distibution, estimate R90, pull another impact, see if it lands inside R90. Compare root mean square error (RMSE) and mean absolute error (MAE) of different estimators.
Example groups:
Distribution of R90 estimates based on \(10^{5}\) simulations:
| Estimator | Hits within estimated R90 | RMSE | MAE |
|---|---|---|---|
| 5x5 | 90.226% | 0.274 | 0.466 |
| 2x10 (9) | 90.067% | 0.308 | 0.493 |
| 2x10 (6&9) | 90.136% | 0.277 | 0.469 |
| Rayleigh 20 | 90.16% | 0.264 | 0.458 |
| MLE 20 | 89.001% | 0.241 | 0.438 |
6&9 estimator with 20 shots and 4 measurements works about as well as 5x5 estimator with 25 shots and 5 measurements.
Rayleigh estimator is just slightly better, but it requires 20 measurments. MLE is noticeably better, but requires even more work.
Now let’s shake the ladder - see how well the estimators work when underlying assumptions are violated.
Start by introducing some vertical offset (constant point of impact shift). Not much, just one \(\sigma\). In practice this is pretty common. Constant wind, change in temperature and therefore muzzle velocity, or errors in determining range can all introduce systemic error.
| Estimator | Hits within estimated R90 | RMSE | MAE |
|---|---|---|---|
| 5x5 | 79.162% | 0.475 | 0.643 |
| 2x10 (9) | 90.473% | 0.357 | 0.531 |
| 2x10 (6&9) | 90.899% | 0.334 | 0.515 |
| Rayleigh 20 | 91.05% | 0.33 | 0.512 |
| MLE 20 | 89.546% | 0.28 | 0.472 |
5x5 estimator now underestimates R90. This is expected because group size did not change, the group just moved away from the center of the target so average miss radius increased accordingly.
Other estimators still work ok.
Now let’s see what happens when instead of shifting point of impact we add some fliers. They are common in practice, and typical advice is to simply discard fliers. There are some problems, though.
It’s hard to tell with any sort of consistency whether any particular shot is a flier. In Experiment 0, bottom left shot in the third group looks like a flier, but isn’t. All shots came from the same bivariate normal distribution. Excluding only called fliers depends a lot on the shooter. Some can do it way better than others.
Re-shooting entire group after a flier is expensive and time-consuming, and group size without flier is biased down.
A robust estimator that is not particularly sensitive to occasional flier is preferable.
In this experiment we will simulate fliers by increasing standard deviation by a factor of 5 with 5% probability.
| Estimator | Hits within estimated R90 | RMSE | MAE |
|---|---|---|---|
| 5x5 | 91.806% | 1.03 | 0.86 |
| 2x10 (9) | 89.218% | 0.915 | 0.716 |
| 2x10 (6&9) | 88.865% | 0.605 | 0.618 |
| Rayleigh 20 | 90.466% | 0.633 | 0.679 |
| MLE 20 | 90.927% | 1.25 | 0.924 |
Now 6&9 estimator outperforms others, and MLE is the worst.
Now let’s see what happens when vertical and horizontal dispersions are different. In this experiment we flatten the groups - increase horizontal dispersion and decrease vertical dispersion.
This is common in practice. For example, ammo-induced variance in muzzle velocity affects primarily vertical impact coordinate, while wind affects mostly horizontal coordinate.
| Estimator | Hits within estimated R90 | RMSE | MAE |
|---|---|---|---|
| 5x5 | 89.835% | 0.404 | 0.565 |
| 2x10 (9) | 89.008% | 0.437 | 0.588 |
| 2x10 (6&9) | 87.947% | 0.375 | 0.549 |
| Rayleigh 20 | 87.55% | 0.347 | 0.529 |
| MLE 20 | 87.559% | 0.348 | 0.529 |
Now combine all factors together: increase standard deviation by a factor of 5 with 5% probability, add one \(\sigma\) vertical offset, and flatten the groups.
| Estimator | Hits within estimated R90 | RMSE | MAE |
|---|---|---|---|
| 5x5 | 88.684% | 1.12 | 0.9 |
| 2x10 (9) | 89.333% | 0.996 | 0.765 |
| 2x10 (6&9) | 89.546% | 0.677 | 0.661 |
| Rayleigh 20 | 91.307% | 0.779 | 0.749 |
| MLE 20 | 91.192% | 1.43 | 0.965 |
Finally let’s look at some real-world data: instead of generating impact coordinates with pseudorandom number generator, sample with replacement from 341 actual shots. Only miss radiuses were recorded, so 5x5 estimator is not shown.
| Estimator | Hits within estimated R90 | RMSE | MAE |
|---|---|---|---|
| 2x10 (9) | 89.401% | 10.2 | 2.61 |
| 2x10 (6&9) | 88.215% | 7.87 | 2.41 |
| Rayleigh 20 | 88.141% | 8.23 | 2.49 |
| MLE 20 | 88.914% | 14 | 2.99 |
This section describes where the magic numbers came from.
5x5 factor 0.72 was determined approximately using Monte Carlo simulations because there does not seem to be another way to do it.
2x10 (9) uses 9th smallest miss radius in 10 shot group because according to formula 3.13 in [1] optimum unbiased estimator from single order statistic Rm:n is
\[m \approx 0.79681(n+1)-0.39841+\frac{1.16312}{n+1}\]
For \(n=10\) it falls right between 8 and 9, and R9:10 (second worst miss radius) is easier to find on paper.
Factor 1.15 can be obtained analytically. Assume miss radiuses of individual shots follow Rayleigh distribution with \(\sigma = 1\). Its probability density function is
\[f(x)=x e^{-\frac{x^2}{2}}\]
and cumulative distribution function is
\[F(x)=1-e^{-\frac{x^2}{2}}\]
Probability density of \(m\)th miss radius in a group of \(n\) shots is
\[f_{m:n}(x)=\frac{n!}{(m-1)!(n-m)!}(F(x))^{m-1}(1-F(x))^{n-m}f(x)\]
For \(m=9\) and \(n=10\)
\[f_{9:10}(x)=\frac{10!}{(9-1)!(10-9)!}(F(x))^{9-1}(1-F(x))^{10-9}f(x)=90(F(x))^{8}(1-F(x))f(x)\] \[=90\left(1-e^{-\frac{x^2}{2}}\right)^{8}e^{-\frac{x^2}{2}}x e^{-\frac{x^2}{2}}=90\left(1-e^{-\frac{x^2}{2}}\right)^{8}x e^{-x^2}\]
Let \(t\) be average of two miss radiuses \(R_{9:10}\). PDF of \(t\) is convolution of PDFs \(f_{9:10}\)
\[p_2(t)=2\int_{0}^{2t}f_{9:10}(u)f_{9:10}(2t-u) du\]
Probability that miss radius of the next shot is greater than \(y\) (complementary cumulative distribution function) is
\[p(y)=1-F(y)=e^{-\frac{y^2}{2}}\]
\(y=R_{90}\) should be proportional to \(t\) with some yet unknown coefficient \(k\):
\[p(y)=p(kt)=e^{-\frac{k^2 t^2}{2}}\]
Miss radius \(y\) is greater than \(R_{90}\) with 10% probability:
\[cdf_{9:10}(t)=\int_{0}^{\infty}p_2(t)e^{-\frac{t^2 k^2}{2}} dt=0.1\]
The following Maxima code can solve the above equation to get \(k \approx 1.149216\). Upper integration limit of 10 was chosen to be high enough to not affect the result much, but low enough so that numerical integration does not underflow.
assume(x>0,t>0,u>0,k>0);
f(x):=90*x*(1-exp(-x^2/2))^8*exp(-x^2);
p2(t):=romberg(2*f(u)*f(2*t-u),u,0,2*t);
cdf(k):=romberg(p2(t)*exp(-t^2*k^2/2),t,0,10);
find_root(cdf(k)=0.1,k,1.1,1.2);
2x10 (6&9) factor 0.69 can also be derived from the formulas for order statistics.
Joint probability distribution of 6th miss radius \(x=R_{6:10}\) and 9th miss radius \(y=R_{9:10}\) is
\[f(x,y)=\frac{n!}{(j-1)!(k-j-1)!(n-k)!}[F(x)]^{j-1}(F(y)-F(x))^{k-j-1}(1-F(y))^{n-k}f(x)f(y)\] \[=15120 \left[1-e^{-\frac{x^2}{2}}\right]^5 \left(e^{-\frac{x^2}{2}}-e^{-\frac{y^2}{2}}\right)^2 e^{-\frac{y^2}{2}} x e^{-\frac{x^2}{2}} y e^{-\frac{y^2}{2}}, x \le y\]
Since we only care about \(x+y\), we can rotate axes by 45° and integrate over \(x-y\):
\[p(u)=\frac{1}{2}\int_{0}^{u}f\left(\frac{u-v}{2},\frac{u+v}{2}\right)dv\]
Applying convolution to get PDF of the average of the two measurement:
\[p_2(t)=\int_{0}^{2t}2p(u)p(2t-u)du\]
Integrating to get cumulative distribution:
\[cdf(k)=\int_{0}^{\infty}p_2(z)e^{\frac{-z^2 k^2}{2}}dz = 0.1\]
The following Maxima code can solve the above equation to get \(k \approx 0.68860849\)
assume(x>0,y>0,x<=y,u>0,v>0,v<=u,z>0);
f(x,y):=15120*(1-exp(-x^2/2))^5*(exp(-x^2/2)-exp(-y^2/2))^2*exp(-y^2/2)*x*exp(-x^2/2)*y*exp(-y^2/2);
p(u):=romberg(f((u-v)/2,(u+v)/2)/2,v,0,u);
p2(t):=romberg(2*p(u)*p(2*t-u),u,0,2*t);
cdf(k):=romberg(p2(z)*exp(-z^2*k^2/2),z,0,10);
find_root(cdf(k)=0.1,k,0.6,0.8);
Rayleigh 20 factor 1.76 was determined approximately using Monte Carlo simulations, but we can also get lower bound in closed from. With infinite number of shots, expected value of miss radius (Rayleigh estimator) is
\[r=E(x)=\int_{0}^{\infty}f(x) x dx = \sqrt{\frac{\pi}{2}}\]
From cumulative distribution function of miss radius
\[F(R_{90})=1-e^{-\frac{R_{90}^2}{2}} = 0.9, R_{90}=\sqrt{2ln(10)}\]
therefore the factor is
\[k = \frac{R_{90}}{r} = \sqrt{\frac{4 ln(10)}{\pi}} \approx 1.71223316\]
Rayleigh distribution is asymmetric so this is a lower bound on \(k\).
MLE 20 factor for \(N=20\) is
\[k=\frac{4^N N! (N-1)! \sqrt{N}}{(2N)!\sqrt{\pi}}\sqrt{2ln(10)}\sqrt{\frac{1}{2N}} \approx 0.3414341\]
Maxima expression:
float(4^20*20!*(20-1)!*sqrt(20)*sqrt(2*log(10))/((2*20)!*sqrt(%pi)*sqrt(2*20)));
[1] M. M. Siddiqui (1964): “Statistical Inference for Rayleigh Distributions”, Radio Science Journal of Research Vol 68D, No.9 http://ballistipedia.com/images/7/7a/Statistical_Inference_for_Rayleigh_Distributions_-_Siddiqui%2C_1964.pdf


The Prime Minister said ..
“The possibilities are enormous if we can get this right”
Talk through a programme gone bad: 2003 - 2013
Focus on the technology problems
Look at the role played by Erlang in the rescue: 2011 - 2017
Consider what this does and doesn't mean for the future
http://martinsumner.github.io/presentations/spine2_erlang.html#/
@masleeds
See Wikipedia
List of failed and overbudget custom software projects - Permanent Failures
“It has made transformational healthcare applications available to approximately 1.3 million NHS healthcare staff across England, providing care to circa 50 million UK citizens.”
“20-plus customised NHS Spine applications ... combined cutting edge technologies to meet the demanding service level agreements and response times required ”
“The contract was (and continues to be) one of the largest IT programmes in the world, consuming over 15,000 man-years of effort to date ... Over 3,000 servers are hosted and supported”
“(The delivery) methodology is now an internationally recognised standard for complex software development programme delivery”
What did we build again?
Around 50% of the original business case met
The system is stable when untouched
... and this makes it a success
Spine can release with £30m in transition costs alone
It costs over £50m per annum to keep the lights on
... and most people still think of it as a success
Parkinsons' Law and the generation of work
Conway's Law and the dominance of contractual boundaries
Pournelle's Iron Law of Bureaucracy
Brooks's Law
Anchoring
Linear expectations
Infrastructure chosen through fear of latency not complexity
Scaling often reversed due to latency
Change costs on hitting limits
Security theatre
Data is in the system, not just the database
Races between redundancy protocols
Distribution compounded by complexity, variety and contracts
Humans anchored to the literal reading of logs
Network state management - timeouts, nagle, pools
“They shouldn't build these death stars any more. They keep getting blown up”
Looked sideways. Looked backwards
Erlang gave vision of availability and software-driven scale
The power of small unified teams with a common goal
Used Erlang products as building blocks - esp Riak
Used RabbitMQ (and Tornado) used a means to support Python ...
... with async message passing between actors
... with generalised behaviours
... and a small numbers of common paths
Avoided logical bottlenecks
Cast and callbacks - unless we can absorb back-pressure
Handle failure by processing elsewhere
No triage to determine operational process
Slow triage to determine cause
Automate failover globally by deep-ping of path
Standardise protocols - AMQP/HTTP
Operational visibility of network hops ...
... Biggest speed-up is visibility
Remove human hands - other than to pause/reflect
Don't allow automation to excuse complexity
Security benefits of disconnection
Make rehearsal constant and natural
No Silver Bullet - all be great designers
Logs as important as tests
Enforce opportunities to work from logs
Reason end-to-end and test end-to-end - invert the pyramid
Took 100 people years from inception to 1-years service
Requires just over 100 commodity 1RU servers in live
Release costs are < 0.1% of previous release costs
90% reduction in operating costs
Total running team of 30 people supporting and ...
... Managing more than £10m pa of change backlog
Adding the same slow node resolves any capacity issue
(Nearly) like-for-like functional replacement ...
99.999% available since go live
Supports over 300 message interactions, eight UI applications
45M messages a day
Provides accesss to 1.5bn records and documents
Aggregate reduction in wait time is over 800 working days each day
It led us to a new way of thinking about failure ...
... and about the boundary between network and application
Asyncronous message passing had a deep impact ...
... With standardised paths and behaviours
Per-process overheads and mistakes ...
... Regret not embracing it more deeply
It brought us closer to computer science ...
... and pushed us away from vendors
“Be of the web not behind the web”
“Blighty slaps £100m spending cap on govt IT projects”
http://martinsumner.github.io/presentations/spine2_erlang.html#/
@masleeds


Products
About us
HOBS
accessories & spare parts
read more
search
Maxsense Pure Techlogy
Lorem ipsum dolor sit ame
placa de induccion de 36
Product quantity
Five product
Good quanitty Six
Seven
Eight
Nine
Ten


Marketplace Help
General
What is a marketplace?
A marketplace offers services to which you can subscribe and which you can use afterwards. Subscribing to a service means that you accept the terms and conditions of using the marketplace and the license and charging conditions of the service.
The marketplace owner can restrict the access to a marketplace and decide which of the following features are available:
- Tag cloud
- Ratings and reviews
- Categories
- Social bookmarks
What is a service?
A service is a software you can access and use over the Web (the marketplace). As soon as you have subscribed to a service and are assigned to it, you can use it according to the conditions which must be accepted when subscribing to the service.
Who can do what on a marketplace?
Every visitor of a public marketplace with unrestricted access can:
- Browse the service catalog, search for services, and view the service descriptions.
- Sort the services by different criteria, for example, in alphabetical order.
- Filter the services by terms of the tag cloud or by categories.
- Bookmark and share services in social networks.
If you are registered and logged in, you can:
- Use the services you have subscribed to.
- Report issues on services you have subscribed to.
- Rate services as well as write comments on services you have subscribed to.
- Administrate your profile.
If you have administrator rights, you can:
- Subscribe to services and manage all subscriptions created by you or other users in your organization.
- Administrate users, payment information, and processes.
- Create various reports on the services.
If you were given the role of a subscription manager, you can:
- Subscribe to services and manage your own subscriptions.
If you were given the role of an OU administrator, you can:
- Manage the organizational units (OU) for which you are an administrator.
- Subscribe to services and manage the subscriptions for your organizational units.
How can I restrict the access to services?
You can restrict the access to services on a marketplace by means of organizational units.
An organizational unit is a set of one or more users representing, for example, a department in a company, an individual project, or a single person. As an organization administrator, you can create and manage organizational units and assign OU administrators to them (click here for details). You can define which marketable services are visible to the members of a unit.
Here is how:
- Log in as an organization administrator.
- Click Account in the top bar.
- Click Users & Units on the left side.
- On the Organizational units tab, click Add Unit to define a new unit, or click to edit an existing unit.
- Check the services that are to be visible to the members of the unit.
OU administrators can further restrict the list of services made available to their organizational units by the organization administrator. Here is how:
- Log in as an OU administrator.
- Click Account in the top bar.
- Click Organizational units on the left side.
- In the Organizational units table, click to edit an existing unit.
- Check the services that are to be visible to the members of the unit.
Be aware of the following:
As an organization administrator, OU administrator, or subscription manager, you can upgrade or downgrade subscriptions. If you do so, make sure that all services that are involved in an up/downgrade path are accessible in the same organizational unit. The available services are defined by the supplier.
I have forgotten my login data, how do I retrieve it?
If you have forgotten your password, click Login in the top bar or Get it now when viewing a service. In the login dialog that shows up, click Forgot your password?. This allows you to define a new password for your user ID.
If you have forgotten your user ID, contact your administrator and tell him your email address or first and last name. The administrator can look up your user ID.
I encounter problems when using the marketplace, what may be the reason?
The reason for the problems may be your browser settings. You must enable cookies. Usually, cookies are enabled by default.
Registration
Why do I need to register?
You can only subscribe to services when you are registered. By registering, you accept the terms and conditions of using the marketplace.
You can either register yourself or you can be registered by the organization which offers a service you want to subscribe to.
As an organization administrator, you can register other users and assign them to subscriptions.
How do I register?
You need to register before you can log in.
Here is how:
- Either click Login in the top bar, or click Get it now when viewing a service. In both cases, a login dialog shows up.
- Click Register, and enter the data required for creating your account. Fields marked with an asterisk (*) are mandatory. If the Register button is not available, contact the seller of a service you want to subscribe to and ask for a registration.
- To confirm your registration, click Register.
You are sent an email with the URL by which you need to confirm the registration. Afterwards, you can log in with the user ID and password you chose.
Search
How do I search for services?
You can search for services by full or partial terms that occur in their name, short description, or description. Additionally, you can search for services by the categories assigned to them.
Here is how:
- Enter the search term or terms in the search field in the top bar, observing the rules described here.
- Click .
The services matching the search criteria are listed.
How do I search for subscriptions?
You can search for subscriptions by full or partial terms that occur in their name, reference number, textual parameters, and custom attributes.
Here is how:
- Click My subscriptions, or click Account and then Subscriptions.
- Enter the search term or terms in the search field above the table of subscriptions, observing the rules described here.
- Click .
The subscriptions matching the search criteria are listed in a table. Only subscriptions for which the you have the appropriate access rights are included in the result.
How do I specify search terms?
When searching for services or subscriptions, you can specify terms according to the following rules:
- You can search for one or more full or partial terms. Separate terms by a blank. All the terms must be found for a service or subscription to be included in the results.
- Search terms may contain special characters.
- Wildcards such as question mark (?) and asterisk (*) are supported.
- The search is case-insensitive. For example, with the term
abc
, you will findAbc
,ABC
, oraBc
.
Why can't I find the service or subscription I am looking for?
The reason may be one of the following:
- When a service or subscription is created or modified, the items you can search for need to be added or changed in an index. This may take several minutes to complete. During this time, you will not find a new service or subscription by searching.
- For services, searchable content exists in different languages. The default language is English.
You can search for terms and phrases either in the language you have selected or in the default language. If you
combine search terms of the default language and your selected language in the same search phrase, the service cannot
be found. This means, that you should always use search terms of one language only.
Example:
The English name of a service is "Highlander", there is no specific German name. The short description, "Kurzbeschreibung", only exists in German, there is no English short description. If you search for the service with your German profile using the search phrase "Highlander Kurzbeschreibung", the service will not be found. If you use "Highlander" or "Kurzbeschreibung" as the search phrase, it will be found. - The organizational unit to which you belong may have limited access to services. Contact your administrator if you can't find the service you are looking for.
Subscription
How do I subscribe to a service?
You can subscribe to a service, if you are logged in as an organization administrator, OU administrator, or subscription manager.
Here is how:
- Select the service to which you want to subscribe, or click Subscribe.
- Click Get it now.
If you are not yet logged in, enter your login data.
If you are not yet registered, click Register and register first. In case there is no Register button, contact the seller of the service and ask for a registration. - On the Configuration page, define the subscription details. By clicking Show price model on this or one of the following pages, you can display details on the charging conditions and prices.
- If defined for the service, choose from different options in the Parameters and options section. If the Configure button is available, you can access an external tool for configuring the parameters and for viewing their prices per subscription and/or user.
- Depending on the service itself and on system settings, you can select your preferred payment type and billing address on the Payment page. As a user with administrative rights, you can also enter a new billing address.
- Read and accept the license agreement, and confirm your subscription on the Confirmation page.
- To assign yourself or other users to the subscription, click Assign users. You may have been assigned automatically to the subscription, depending on the definition of the service you are subscribing to.
How do I assign users to a subscription?
Users must be assigned to a subscription before they can use the underlying software.
Here is how:
- Log in as an organization administrator, or as a subscription manager or OU administrator responsible for the subscription.
- Click Account in the top bar.
- Click Subscriptions on the left side. As an organization administrator, you can see and manage all subscriptions of your organization. As a subscription manager, you can access your own subscriptions. As an OU administrator, you can access your own subscriptions and those of your organizational units.
- Click for the subscription to which you want to assign users.
- Click Assign Users.
- In the list of users, assign users by selecting the corresponding check boxes.
- If the subscription's service defines roles, select the required role for each user in the Service role column. The service roles are mapped to specific permissions in the underlying software.
- To save your settings, click Assign. The assigned users will be informed by email about how to access the service.
Note of the following:
You can assign any user to a subscription, regardless of the organizational units the user or the subscription belong to.
How do I use a service I have subscribed to?
As soon as you are assigned to a subscription, you can use the underlying service.
Either access the service by the link you received with an email or proceed with the following steps:
- Log in.
- Click My Subscriptions in the top bar.
- Find the subscription you want to use.
- In the Details section, click the link or Use Service.
The marketplace can also provide a Use Service button for the subscription directly on the marketplace home page. If available, click Use Service to instantly use the service.
How do I report an issue on a service?
You can report any issues you encounter in using a service to the seller of the service.
Here is how:
- Log in as an organization administrator, or as a subscription manager or OU administrator responsible for the subscription.
- Click Account in the top bar.
- Click Subscriptions on the left side. As an organization administrator, you can see and manage all subscriptions of your organization. As a subscription manager, you can access your own subscriptions. As an OU administrator, you can access your own subscriptions and those of your organizational units.
- Click for the subscription for which you want to report an issue.
- Click the Supplier or Reseller tab.
- Click Report Issue.
- Enter a subject for the issue and give details on the question, problem, or incident you want to report.
The customer support of the seller offering the service is instantly sent an email with the information you provided.
How do I write a review on a service?
If you have already subscribed to a service, you can rate it and write a review comment. Other marketplace visitors can see your ratings and comments.
Here is how:
- In the service catalog, click the service.
- Click Show Details.
- Click Write a Review.
- Click a star to rate the service, enter a title, and type your comment.
- Click Save.
The rating and review feature may be switched off by the marketplace owner. In this case, you cannot rate services or write comments on them.
What is the Execute button of a subscription and how do I use it?
Services may support special operations, such as backup, shutdown, or startup of a specific application, depending on the implementation of the underlying software. If defined for a service, you can carry out such operations from a subscription.
Here is how:
- Click My Subscriptions in the top bar.
- Find the subscription you want to use.
- In the Details section, from the subscription's drop-down list, select the operation you want to execute. A detailed explanation of the operation is displayed.
- Click Execute.
Depending on how the operation is defined in the underlying service, the result of the operation is displayed instantly after its execution, or the status of execution is displayed (for asynchronous, long-running operations).
How do I deassign users from a subscription?
If you want to prevent the access of certain users to a subscription, you must deassign these users from the subscription.
Here is how:
- Log in as an organization administrator, or as a subscription manager or OU administrator responsible for the subscription.
- Click Account in the top bar.
- Click Subscriptions on the left side. As an organization administrator, you can see and manage all subscriptions of your organization. As a subscription manager, you can access your own subscriptions. As an OU administrator, you can access your own subscriptions and those of your organizational units.
- Click for the subscription from which you want to deassign users.
- Click for the users you want to deassign from the subscription. The users will be informed by email.
How can I continue to use an expired subscription?
If you subscribed to a service that can be used for a limited time only, your subscription automatically expires when this time has passed. If you want to continue to use such a service, you need to upgrade the subscription.
Here is how:
- Log in as an organization administrator, or as a subscription manager or OU administrator responsible for the subscription.
- Click Account in the top bar.
- Click Subscriptions on the left side. As an organization administrator, you can see and manage all subscriptions of your organization. As a subscription manager, you can access your own subscriptions. As an OU administrator, you can access your own subscriptions and those of your organizational units.
- Click for the expired subscription you still want to use.
- Click the Up/Downgrade tab.
- Select the service to which you want to upgrade your subscription. The available services are defined by the supplier.
How can I terminate a subscription?
Terminating a subscription is only possible if no users are currently working with the underlying software. The subscription will be terminated immediately, and the service can no longer be used.
Here is how:
- Log in as an organization administrator, or as a subscription manager or OU administrator responsible for the subscription.
- Click Account in the top bar.
- Click Subscriptions on the left side. As an organization administrator, you can see and manage all subscriptions of your organization. As a subscription manager, you can access your own subscriptions. As an OU administrator, you can access your own subscriptions and those of your organizational units.
- Click for the subscription you want to terminate.
- Click Terminate and confirm the termination.
You will be sent an email informing you about the termination. All users assigned to the subscription will also be informed by email.
I can't access the subscription I want to manage, what is wrong?
In order to manage a subscription, you need to be an organization administrator, a user with the subscription manager or OU administrator role who owns the subscription, or an OU administrator of the organizational unit to which the subscription is assigned. The initial owner of a subscription is the user who creates it.
If you can't access the subscription you want to manage, contact your organization administrator. He can assign the required rights and roles to other users as well as remove them. He can also set, change, and remove the owner of a subscription. Here is how:
- Log in as an organization administrator.
- Click Account in the top bar.
- Click Subscriptions on the left side.
- Click for the subscription you want to work on.
- Click the Configuration tab.
- Click next to Owner.
- Change the subscription owner as desired:
- To set or change the owner, select the desired user. All users with administrative rights, the subscription manager role, or the OU administrator role are offered for selection.
- To remove the owner, select This subscription does not have a dedicated owner. Only users with administrative rights can manage subscriptions without owners.
- Click OK and then Save on the Configuration tab.
How do I assign a subscription to an organizational unit?
When you subscribe to a service, you can assign the subscription to an organizational unit. As an organization administrator or an OU administrator of the unit in question, you can change this assignment later at any time.
Here is how:
- Log in as an organization administrator or an OU administrator responsible for the subscription.
- Click Account in the top bar.
- Click Subscriptions on the left side.
- Click for the subscription you want to work on.
- Click the Configuration tab.
- Click next to Organizational unit.
- Change the organizational unit as desired:
- To set or change the organizational unit, select the desired unit. As a users with administrative rights, you can select any unit of your organization. As an OU administrator, you can choose one of the units you are responsible for.
- To remove the subscription from an organizational unit, select This subscription is not assigned to any organizational unit. This option is not available for OU administrators.
- Click OK and then Save on the Configuration tab.
Be aware of the following :
Changing the organizational unit for a subscription has no effect on the subscription owner or the users assigned to the subscription, even if they are not members of the new unit.
The organizational unit a subscription is assigned to appears in related invoices and reports. If you change the organizational unit for a subscription, only the new unit is included in the invoices and reports.
Payment
How do I specify payment information?
When you subscribe to a service that is not free of charge, you are usually prompted to specify how you are going to pay for it before you can confirm your subscription.
You have to specify a billing address and the payment type:
- The billing address defines which organization name and address will be printed on your invoices and to which email address your invoices will be sent. If billing addresses have already been defined, you can select one of them. As an organization administrator, you can define a new billing address, if required.
- The payment type determines how you want to pay for the subscription. If payment types have already been defined, you can select one of them. As an organization administrator, you can define a new payment type, if required.
You can change the billing addresses and payment types at any time.
Here is how:
- Log in as an organization administrator.
- Click Account in the top bar.
- Click Payment on the left side.
- To edit an existing billing address or payment type, click for it.
- To add a new billing address or payment type, click Add Billing Address or Add Payment Type.
Note: Depending on system settings, the options for changing billing addresses and payment types may not be available.
When do I start getting charged?
As soon as you have subscribed to a service, you are charged for it according to the price model the service is based on.
As soon as you terminate a subscription, you are no longer charged for it.
Users and Units
How do I register other users?
If you register yourself, you are automatically assigned administrative rights. With these rights, you can register other users of your organization and assign them to subscriptions.
Here is how:
- Log in.
- Click Account in the top bar.
- Click Users & Units.
- Click Add User on the Users tab.
- Enter the profile data for the new user and click Save.
- In the next dialog, check the desired roles. If you do not check any role, the user is registered as a standard user without any specific privileges.
- If desired, assign the user to existing organizational units and subscriptions by checking them. For each organizational unit you can choose the user’s role.
- Click Save.
For each registered user, a user account is created and the user is notified by email of his registration. The email includes all the information required to log in. The new user is automatically added to your organization's default organizational unit. The default organizational unit contains all users currently registered for your organization. Click here for details.
If you are using a remote LDAP system to administrate users, you do not need to register them individually but import them from the LDAP system. Click here for details.
If you are not using a remote LDAP system to administrate users, you can also register multiple users in one operation by importing a user data file. Click here for details.
Be aware of the following:
If you change the role assignments of a user, the new assignments take effect with the user's next login.
How can I import users from a remote LDAP system?
If you are using an LDAP system to administrate users, and the access to this LDAP system has been enabled for you, you can import users instead of registering them manually.
Here is how:
- Log in.
- Click Account in the top bar.
- Click Users & Units.
- Click Import Users on the Users tab.
- Identify the users you want to import.
You can apply filter criteria to select specific users only. To list all users matching the filter criteria, click Search.
You can use the following filter criteria:
- Wildcard (*): All users existing in the LDAP system are listed. Be aware that a maximum of 100 users can be listed. Use more specific filter criteria, if necessary, for example, the starting character of user IDs together with a wildcard.
- Characters and wildcards (*): All users are listed whose ID matches the specified characters. For example, if you enter *o*, all users whose ID contains the character o are listed.
- User ID: To import one specific user, enter his ID directly.
- Select the check boxes for the users you want to import. If the email address of a user cannot be read from the LDAP system, you have to enter the email address manually.
- Assign the desired user roles. Users to whom you do not assign any role are registered as standard users without any specific privileges.
- To start the import, click Import.
The selected users are imported and registered. After a successful import, the users are sent an email with the URL for accessing the provided services. They are automatically added to your organization's default organizational unit. The default organizational unit contains all users currently registered for your organization. Click here for details.
If the user ID of a user to be imported already exists in the platform, the email address of this user
(e.g<EMAIL_ADDRESS>) is used as user ID for logging in to the system.
If yet another user with the same ID is imported, the new user ID is constructed using the existing
ID followed by the "at" sign (@) and the ID of the organization the user belongs to (e.g. userSmith@abcdefg
).
The user is sent an email with the respective user ID.
User data maintained in the LDAP system, such as the password, first name, or last name, can only be changed in the LDAP system. If the data is changed, the marketplace automatically synchronizes it. Be aware that an automatic synchronization is not possible in case a user ID is changed in the LDAP system. The user has to be imported again.
How can I change the LDAP settings for my organization?
As an organization administrator, you can edit and change the LDAP settings for your organization.
Here is how:
- Log in.
- Click Account in the top bar.
- Click Users & Units.
- Click Edit LDAP Settings on the Users tab.
- Click Export to store the current LDAP settings for your organization in a file on your file system.
- Check the settings in the file and change them as required.
- To load the changed settings, click the File name entry field or Browse, and select the file.
- Click Import. All existing LDAP settings are replaced by the ones in the file.
- Click Test connection to make sure that the connection to your LDAP system can be established.
The LDAP settings are immediately applied for your organization.
When you provide invalid LDAP settings, you and all users of your organization can no longer log in to the marketplace. In this case, contact a service seller and request the correction of your organization's LDAP settings.
Which keys must be defined in an LDAP configuration file?
The following keys must be defined in a configuration file for enabling access to an organization's LDAP system:
| Key | Description |
| LDAP_URL | Mandatory. Provider URL of the LDAP server. This LDAP server is used for user authentication. Example: LDAP_URL=ldap://myldapserver.lan.est.company.de:389 |
| LDAP_BASE_DN | Mandatory. Position in the LDAP directory tree at which to start looking for users. Example: LDAP_BASE_DN=ou=people,dc=est,dc=mycompany,dc=de |
| LDAP_PRINCIPAL | Optional. Name of the user who is allowed to query the LDAP server. Example: LDAP_PRINCIPAL=uid=admin,ou=system |
| LDAP_CREDENTIALS | Optional. Password of the user who is allowed to query the LDAP server. Example: LDAP_CREDENTIALS=secret |
| LDAP_ATTR_UID | Mandatory. LDAP attribute from which a user ID is read. Example: LDAP_ATTR_UID=uid |
| LDAP_ATTR_EMAIL | Optional. LDAP attribute from which the email address of a user is read. Example: LDAP_ATTR_EMAIL=scalixEmailAddress |
| LDAP_ATTR_FIRST_NAME | Optional. LDAP attribute from which the first name of a user is read. Example: LDAP_ATTR_FIRST_NAME=givenName |
| LDAP_ATTR_LAST_NAME | Optional. LDAP attribute from which the last name of a user is read. Example: LDAP_ATTR_LAST_NAME=sn |
| LDAP_ATTR_ADDITIONAL_NAME | Optional. LDAP attribute from which any additional name of a user is read. Example: LDAP_ATTR_LAST_NAME=sn |
| LDAP_ATTR_LOCALE | Optional. LDAP attribute from which the default language to be stored for a user is read. Example: LDAP_ATTR_LOCALE=locale |
| LDAP_CONTEXT_FACTORY | Mandatory. Context factory which provides the API to query the LDAP server. Example: LDAP_CONTEXT_FACTORY=com.sun.jndi.ldap.LdapCtxFactory |
| LDAP_ATTR_REFERRAL | Optional.
Property defining how LDAP referrals are to be processed. If an organization uses an Active Directory with sub-domains from which users are to be imported into the platform, the sub-domains can be modeled as referrals. In this sense, a referral is a reference to another directory partition or sub-domain. By default, values from referrals are not retrieved. This property can take on the following values: follow: Referrals are followed, i.e. users are imported from all referenced directory partitions or sub-domains. ignore: Referrals are ignored (default), i.e. users are imported from the current domain directory only. Example: LDAP_ATTR_REFERRAL=ignore |
How can I import users from a file?
As an organization administrator, you can import users from a file instead of registering them manually. This is possible, if you are not using an LDAP system for user authentication.
Here is how:
- Create a file containing the required user data. Click here for details on the format and content of the file.
- Log in.
- Click Account in the top bar.
- Click Users & Units.
- Click Browse on the Users tab, and select the file containing the user data.
- Click Import.
The system validates the user data file before starting the actual import. It checks whether:
- All lines containing user data are complete (all fields are specified).
- The spelling of the values for title and user roles is correct.
- Multiple user roles are enclosed in double quotes.
If an error is found during the validation of the user data file, a corresponding message is displayed and the import does not start. You must correct the information in the file before you can start the import again.
You cannot start multiple imports at a time. You need to wait until the current import is finished. For long lists of users, this may take some time.
As soon as the import is finished, all users who have been imported and registered successfully are sent an email with the login data and an initial password to be used for the first login. The newly registered users are automatically added to your organization's default organizational unit. The default organizational unit contains all users currently registered for your organization. Click here for details.
You are sent an email with the following information:
- Number of users who were imported and registered successfully.
- For every user that was not imported: user ID and reason.
Possible reasons are:
- A user with the specified ID already exists.
- The specified user ID is invalid.
- The specified user role is not available for your organization. For example, if your organization is a supplier, you cannot specify the
BROKER_MANAGER
user role.
What is the format and content of a user data file?
As an organization administrator, you can import multiple users of your organization and register them with the platform. The user data must be provided in a file in csv
(comma-separated values) format.
The following rules apply:
- The data for one user is provided in one line. Empty lines are ignored.
- The user data file is saved in UTF-8 encoding.
- The user data is provided in the following sequence:
- User ID (mandatory)
- Email address (mandatory)
- Language (mandatory)
- Title (optional)
- First name (optional)
- Last name (optional)
- One or several user roles to be assigned to the imported user (mandatory if no marketplace is selected)
- The user data fields are separated by a comma each. If an optional field does not contain any data, it must be empty and separated by a comma from the next field.
The fields can take on the following values:
| Field | Value(s) |
|---|---|
| User ID |
Mandatory. ID with which the user is to log in to the platform. User IDs are restricted to 100 characters and must not contain any of the following characters: ! " # $ % & ' * + , / : ; < = > ? \ ^ ` |
| Email address |
Mandatory. Email address of the user. It is used for notifying the user about the registration. The system checks whether the syntax of the given email address is valid, and whether the domain name corresponds to the standards as defined and maintained by the Internet Assigned Numbers Authority (IANA). Examples<EMAIL_ADDRESS><EMAIL_ADDRESS><EMAIL_ADDRESS>|
| Language |
Mandatory. ISO code of the language in which the user will work by default, for example,
en (English). |
| Title |
Optional. Salutation. Allowed values: MR or MS Observe that the value is case-sensitive and must be specified as indicated. |
| First name | Optional. |
| Last name | Optional. |
| User role |
Mandatory if no marketplace is selected at the user interface. If a marketplace is selected and no role is specified, a standard user without any privileges is registered. The user roles that can be specified depend on the role of the organization for which the users are to be imported. Valid user roles are:
|
Sample user data file:
user1,user1@company.com,en,MS,Jane,Smith,ORGANIZATION_ADMIN
user2,user2@company.com,de,MR,John F.,Cool,SUBSCRIPTION_MANAGER
user3,user3@company.com,en,,,,ORGANIZATION_ADMIN
user4,user4@company.com,en,,,Admin,"SERVICE_MANAGER,ORGANIZATION_ADMIN"
user5,user5@company.com,en,MR,,Mueller-Siegel,SERVICE_MANAGER
user6,user6@company.com,en,MR,Joe,StandardUser,
What is an organizational unit?
An organizational unit is a set of users within an organization. It can, for example, represent a department in a company, an individual project, or a single person.
An organizational unit provides a means to restrict the visibility of services to the unit members. When a user logs in on a marketplace, he has access only to the services that are visible to the organizational units to which he belongs. An organizational unit can also be assigned one or more subscriptions, for example, for cost controlling purposes. Note, however, that users can be assigned to and work with a subscription independently of the organizational units they belong to.
As an organization administrator, you are responsible for creating organizational units. A user can be a member of multiple units. Each organization can have any number of units.
As an organization administrator, you can change the properties and members of any unit in your organization. One or more users in a unit can be appointed as OU administrators. For their units, OU administrators can change the description and members, define the visible services, and create, modify, and terminate subscriptions.
Assign users to organizational units carefully. Take into account that, for example, a service manager who publishes a service to a marketplace will not be able to see the service on the marketplace if you do not assign him to the appropriate organizational unit.
What is the default organizational unit?
Each organization has a default organizational unit to which all users of the organization belong.
Any service that is published to a marketplace is automatically visible to the members of the default unit. As an organization administrator, you have to explicitly mark a service as not visible for the unit, if required.
As an organization administrator, you are also responsible for creating additional organizational units. As soon as you assign a user to one or more additional units, the services marked as visible to the members of the default unit are no longer relevant for this user.
It is not possible to add or remove users from the default organizational unit. However, the name of the default organizational unit can be changed, and services can be assigned and deassigned.
Be aware of the following:
As an organization administrator, OU administrator, or subscription manager, you can upgrade or downgrade subscriptions. If you do so, make sure that all services that are involved in an up/downgrade path need to be made accessible in the same organizational unit. The available services are defined by the supplier.
How do I create and manage organizational units?
As an organization administrator you can create, edit and delete organizational units. OU administrators can change the descriptions and members of the organizational units they are responsible for.
Here is how to create an organizational unit:
- Log in as an organization administrator.
- Click Account in the top bar.
- Click Users & Units or Organizational units on the left side.
- On the Organizational units tab, click Add Unit.
- Enter an appropriate name, reference ID and description.
- Click Save to create the organizational unit.
- In the following dialog, check the services that are to be visible for the members of the organizational unit.
- To assign users to the new organizational unit check them in the Organizational unit members table and select their roles as required.
- Click Save.
Here is how to edit organizational units:
- Log in as an organization administrator or as an OU administrator.
- Click Account in the top bar.
- Click Users & Units on the left side.
- On the Organizational units tab, click next to the name of the organizational unit you want to edit.
- Make the desired changes in the Edit organizational unit dialog:
- To change the unit name, enter the new name in the Name field. This action is only available to organization administrators.
- To change the Reference ID, remove the old ID and enter a new one. This action is only available to organization administrators.
- To make services visible to the unit, check them under Accessible services.
- To make a service invisible, deselect it under Accessible services.
- To add new members to the unit, check them in the table Organizational unit members. As an organization administrator, you can set or remove the role of an OU administrator for each user in the Role in unit column.
- To remove members from the unit, deselect them in the table Organizational unit members.
- Click Save
Here is how to delete an organizational unit:
- Log in as an organization administrator.
- Click Account in the top bar.
- Click Users & Units on the left side.
- On the Organizational units tab, click next to the unit you would like to delete.
Users are notified by e-mail when they are added to or removed from an organizational unit, or if the name of a unit they are assigned to is changed.
Be aware of the following:
As an organization administrator, OU administrator or subscription manager, you can upgrade or downgrade subscriptions. If you do so, make sure that all services that are involved in an up/downgrade path are accessible in the same organizational unit. The available services are defined by the supplier.
If you change the role assignments of a user, the new assignments take effect with the user's next login.
Processes
How can I carry out actions under process control?
Certain actions on the marketplace can be carried out under the control of an external process control system. You can configure so-called triggers which are invoked when the actions are carried out. The triggers start the corresponding process in the process control system. If approval for an action is required, the action is suspended until it is approved or rejected in the process control system. If no approval is required, the action is instantly executed.
As a prerequisite for controlling actions by processes, a notification service must exist and be deployed. This service forms the interface between the marketplace and the process control system. For details on implementing such a service, contact the marketplace owner.
Then you can define the process triggers.
Here is how:
- Log in as an organization administrator.
- Click Account in the top bar.
- Click Processes on the left side.
- Click Add Process Trigger, and proceed with the definition of the trigger details.
- From the Type list, select the action which is to be subject to process control. The
list contains all actions for which triggers can be configured:
- A subscription is to be added (
Subscribe to service
). - A subscription is to be terminated (
Terminate subscription
). - A subscription is to be changed, for example, renamed (
Modify subscription
). - A subscription is to be upgraded or downgraded (
Up/Downgrade subscription
). - A user is to be assigned to or removed from a subscription (
Assign users to subscription
).
For the case that a user is automatically assigned to a new subscription when subscribing to a service, no trigger can be configured. TheAssign users to subscription
trigger only applies to users that are manually assigned to a subscription. - A billing run is completed, and the billing data for a billing period is calculated (
Billing run finished
). - A user is to be registered (
Register user
).
Triggers can only be configured for registering single users. The import of multiple users in one operation from an LDAP system or a user data file cannot be executed under process control.
As a supplier, you can configure the following additional triggers:
- A customer is to be registered (
Register customer
). - The payment types for a customer are to be changed (
Manage payment types for customer
). - A marketable service is to be activated (
Activate service
). - A marketable service is to be deactivated (
Deactivate service
). - A user subscribes to your service (
Subscription created (any user)
). - A user modifies a subscription to your service (
Subscription modified (any user)
). - A user terminates a subscription to your service (
Subscription terminated (any user)
).
- A subscription is to be added (
- In the Target type field, choose the appropriate entry depending on the application programming interface (API) used
for implementing the notification service for your organization:
- SOAP-based API: Web Service
- REST API: REST Web Service
- In the Target URL field, enter the URL of the notification service implemented for your organization. The URL depends
on the API used for implementing the notification service:
- SOAP-based API: the URL of the WSDL file of the notification service, for example:
https://myServer:8280/NotificationService?wsdl
- REST API: the URL to which
POST
requests are to be sent for notification purposes, for example:
https://myServer:8081/mynotification/v1/processes
- SOAP-based API: the URL of the WSDL file of the notification service, for example:
- Specify whether the execution of the action is to be suspended until it is approved or rejected in the external process control system.
If not, the action is instantly executed. The process control system is informed if the action for the non-suspending trigger is executed successfully.
Note that for the following triggers for suppliers the execution of the action cannot be suspended:Subscription created (any user)
,Subscription modified (any user)
, andSubscription terminated (any user)
. - Click Save when you are finished.
How can I update or delete process triggers?
You can easily update or delete process triggers you have defined.
Here is how:
- Log in as an organization administrator.
- Click Account in the top bar.
- Click Processes on the left side.
- Select the trigger you want to update or delete in the list.
- Proceed with editing or deleting the trigger.
If the trigger to be edited has already started corresponding processes in the process control system, you can only change the name for the trigger. You have to abort the corresponding processes before you can edit the other elements of the trigger definition. - If you have updated the trigger, click Save when you are finished.
If you want to delete the trigger, confirm the deletion.
How can I manage my processes?
When an action that is subject to process control is executed, you can view its current status. The following statuses are possible:
- Started: The action was initialized on the platform.
- Waiting for reply: The action has to be approved in the process control system before it is executed.
- Approved: The action has been approved in the process control system, and it has been executed. For example, if you requested to subscribe to a service, the subscription has been created.
- Rejected: The action has not been approved in the process control system; it will not be executed.
- Notified: The action has been executed successfully, and the process control system has been informed about its execution.
- The external system did not accept the action: The communication with the process control system failed; the action is not executed.
- The platform could not execute the action: An error occurred in the execution of the action after the action had been approved in the process control system. The action is not executed.
- Aborted: The action has been aborted.
In addition to viewing the current status of your actions, you can also abort or delete process-controlled actions.
Here is how:
- Log in as an organization administrator or as a subscription manager.
- Click Account in the top bar.
- Click Processes on the left side.
If you are logged in as a subscription manager, you can view all your own actions which are subject to process control. The Description column displays the action that was requested. The Status column shows its current status.
If you are logged in as an administrator, you can choose whether all actions of your organization's users which have triggered a process are to be listed, or only your own actions.
To abort the execution of an action, select the check box next to it and click Abort. Only actions in the Waiting for reply status can be aborted.
The status is changed to Aborted. The action no longer waits for approval in the process control system. It is not executed and can be deleted from the list. The process control system is informed about the abortion of the action and can stop processing the request for approval.
To delete an action from the list, select the check box next to it and click Delete. Only actions that are not in the Waiting for reply status can be deleted.
Service Operations
How can I execute a service operation?
Services may support special operations, such as backup, shutdown, or startup of a specific application, depending on the implementation of the underlying software. If defined for a service, you can carry out such operations from a subscription.
Here is how:
- Click My Subscriptions in the top bar.
- Find the subscription you want to use.
- In the Details section, from the subscription's drop-down list, select the operation you want to execute. A detailed explanation of the operation is displayed. The list contains all operations that are defined for the service underlying your subscription.
- Click Execute.
Depending on how the operation is defined in the underlying service, the result of the operation is displayed instantly after its execution, or the status of execution is displayed (for asynchronous, long-running operations).
How can I view the status of service operations?
You can view the execution status of all operations you initiated for subscriptions to which you are assigned.
As an administrator, you can view the execution status of the operations for all subscriptions of your
organization, including the ones you initiated as a user assigned to a subscription.
As a subscription manager, you can view the execution status of the operations for the subscriptions you own, including the ones
you executed as user assigned to a subscription.
As an OU administrator, you can view the execution status of the operations for the subscriptions assigned to your organizational unit.
Here is how:
- Click Account in the top bar.
- Click Operations on the left side.
The list of operations contains information on
- the name of the operation
- the subscription the operation was exectuted for
- who executed the operation
- the execution date
- the current status of execution.
An operation can either be in the Running (not yet fully executed), Completed (fully executed), or Error state. In case of an error, the reason for it is shown.
You can remove entries from the list of operations by selecting them and clicking Delete. Removing an entry does not affect the execution of the operation.


Cell Biology
Cell Biology
Cell Biology
Pancreas
Cell Biology
Cell Biology
Liver
Cell Biology
Kidney
Cell Biology
Lungs
Cell Biology
Click a tile to turn it over and reveal it's content, then find the related tile. Clicking on a tile and it's related tile will make them disappear. Make all the tiles disappear to complete the game.


To make sure we give personal information about a child only to a person who has the right to access it, we need
to verify your right to access the child’s records.
To make sure we give personal information only to a person who has the right to access it, we need to verify your
right to access the person’s records.
Do you have proof of guardianship of the child?
Do you have permission to access records on behalf of this person?
You must have proof of guardianship to access records about a child. If you don’t have it, please visit our
website to view your options. You may complete and sign a Guardian Declaration Form in order to establish your right to access the requested records.
You must have permission to access records on someone else’s behalf. Each ministry or agency has a unique form
which you must fill out and have the person sign. For more information about authorization and consent, please
review the
resources on our website.


We have already dealt with arrays. Arrays are used to store similar type of data. Have you ever thought if there is any way to store dissimilar data?
The answer is yes. We use structures to store different types of data. For example, you are a student. Your name is a string and your phone number and roll_no are integers. So, here name, address and phone number are those different types of data. Here, structure comes in the picture.
Defining a Structure
The syntax for structure is:
struct structure_name
{
data-type member-1;
data-type member-2;
data-type member-3;
data-type member-4;
};
In our case, let's name the structure as student. The members of the structure in our case are name, roll_no and phone_number.
So, our structure will look like:
struct student
{
int roll_no;
std::string name;
int phone_number;
};
Declaration of Structure Variable
Just as we declare variables of type int, char etc, we can declare variables of a structure as well.
Suppose we want to store the roll no, name and phone number of three students. For this, we will define a structure named student (as declared above) and then declare three variables, say p1, p2 and p3 (which will represent the three students respectively) of type 'student'. This declaration will be done in the main function.
struct student
{
int roll_no;
std::string name;
int phone_number;
};
int main()
{
struct student p1, p2, p3;
return 0;
}
We can also declare structure variables at the time of defining the structure as follows.
struct student
{
int roll_no;
std::string name;
int phone_number;
}p1, p2, p3;
Now, let's see how to enter the details of each student i.e. roll_no, name and phone number.
Suppose we want to assign a roll number to the first student. For that, we need to access the roll number of the first student. We do this by writing
p1.roll_no = 1;
This means that we use dot (.) to use variables in a structure. p1.roll_no can be understood as roll_no of p1.
Now, let's store the details of all the three students.
#include <iostream>
#include <cstring>
using namespace std;
int main(){
struct student
{
int roll_no;
string name;
int phone_number;
};
struct student p1 = {1,"Brown",123443};
struct student p2, p3;
p2.roll_no = 2;
p2.name = "Sam";
p2.phone_number =<PHONE_NUMBER>;
p3.roll_no = 3;
p3.name = "Addy";
p3.phone_number =<PHONE_NUMBER>;
cout << "First Student" << endl;
cout << "roll no : " << p1.roll_no << endl;
cout << "name : " << p1.name << endl;
cout << "phone no : " << p1.phone_number << endl;
cout << "Second Student" << endl;
cout << "roll no : " << p2.roll_no << endl;
cout << "name : " << p2.name << endl;
cout << "phone no : " << p2.phone_number << endl;
cout << "Third Student" << endl;
cout << "roll no : " << p3.roll_no << endl;
cout << "name : " << p3.name << endl;
cout << "phone no : " << p3.phone_number << endl;
return 0;
}
roll no : 1
name : Brown
phone no : 123443
Second Student
roll no : 2
name : Sam
phone no :<PHONE_NUMBER>
Third Student
roll no : 3
name : Addy
phone no :<PHONE_NUMBER>
struct student p1 = {1,"Brown",123443}; - This line is just to show that we can also initialize a structure in this way.
In the next line, we are just giving values to the variables and printing those.
Structures use continuous memory locations.
Array of Structures
We can also make an array of structures. In the first example in structures, we stored the data of 3 students. Now suppose we need to store the data of 100 such children. Declaring 100 separate variables of the structure is definitely not a good option. For that, we need to create an array of structures.
Let's see an example for 5 students.
#include <iostream>
#include <cstring>
using namespace std;
struct student
{
int roll_no;
string name;
int phone_number;
};
int main(){
struct student stud[5];
int i;
for(i=0; i<5; i++){ //taking values from user
cout << "Student " << i + 1 << endl;
cout << "Enter roll no" << endl;
cin >> stud[i].roll_no;
cout << "Enter name" << endl;
cin >> stud[i].name;
cout << "Enter phone number" << endl;
cin >> stud[i].phone_number;
}
for(i=0; i<5; i++){ //printing values
cout << "Student " << i + 1 << endl;
cout << "Roll no : " << stud[i].roll_no << endl;
cout << "Name : " << stud[i].name << endl;
cout << "Phone no : " << stud[i].phone_number << endl;
}
return 0;
}
Enter roll no
1
Enter name
Sam
Enter phone number
12345345
Student 2
Enter roll no
2
Enter name
Brown
Enter phone number
56793234
Student 3
Enter roll no
3
Enter name
Peter
Enter phone number
54729678
Student 4
Enter roll no
4
Enter name
Addy
Enter phone number
98326265
Student 5
Enter roll no
5
Enter name
Max
Enter phone number
43576476
Student 1
Roll no : 1
Name : Sam
Phone no : 12345345
Student 2
Roll no : 2
Name : Brown
Phone no : 56793234
Student 3
Roll no : 3
Name : Peter
Phone no : 54729678
Student 4
Roll no : 4
Name : Addy
Phone no : 98326265
Student 5
Roll no : 5
Name : Max
Phone no : 43576476
Here we created an array named stud having 5 elements of structure student. Each of the element stores the information of a student. For example, stud[0] stores the information of the first student, stud[1] for the second and so on.
We can also copy two structures at one go.
#include <iostream>
#include <cstring>
using namespace std;
struct student
{
int roll_no;
string name;
int phone_number;
};
int main(){
struct student p1 = {1,"Brown",123443};
struct student p2;
p2 = p1;
cout << "roll no : " << p2.roll_no << endl;
cout << "name : " << p2.name << endl;
cout << "phone number : " << p2.phone_number << endl;
return 0;
}
name : Brown
phone number : 123443
We just have to write p1 = p2 and that's it. By writing this, all the elements of p1 will get copied to p2.
Pointers to Structures
Like we have pointers to int, char and other data-types, we also have pointers pointing to structures. These pointers are called structure pointers.
Now, how to define a pointer to a structure? The answer is below:
struct structure_name
{
data-type member-1;
data-type member-1;
data-type member-1;
data-type member-1;
};
int main()
{
struct structure_name *ptr;
}
Let's see an example using structure pointer.
#include <iostream>
#include <cstring>
using namespace std;
struct student
{
string name;
int roll_no;
};
int main(){
struct student stud = {"Sam",1};
struct student *ptr;
ptr = &stud
cout << stud.name << stud.roll_no << endl;
cout << ptr->name << ptr->roll_no << endl;
return 0;
}
Sam1
struct student *ptr; - We declared 'ptr' as a pointer to the structure student.
ptr = &stud - We made our pointer ptr to point to the structure variable stud. Thus, 'ptr' now stores the address of the structure variable 'stud'.
This is the same which we do while defining a pointer to any other variable.
cout << ptr->name << ptr->roll_no << endl; - We use -> operator to access the members of a structure using a pointer to that structure.
Structure to Function
We can also pass a structure to a function.
There are two methods by which we can pass structures to functions.
- Passing by Value
- Passing by Reference
Passing by Value
In this, we pass structure variable as an argument to a function. Let's see an example to make it clearer.
#include <iostream>
#include <cstring>
using namespace std;
struct student
{
int roll_no;
string name;
int phone_number;
};
void display(struct student st)
{
cout << "Roll no : " << st.roll_no << endl;
cout << "Name : " << st.name << endl;
cout << "Phone no : " << st.phone_number << endl;
}
int main(){
struct student s;
s.roll_no = 4;
s.name = "Ron";
s.phone_number = 888888;
display(s);
return 0;
}
Name : Ron
Phone no : 888888
In this example, we are printing roll number, name and phone number of a student using a function. We first declared a structure named student with roll_no, name and phone number as its members and 's' as its variable. Then we assigned the values of roll number, name and phone number to the structure variable s. Just as we pass any other variable to a function, we passed the structure variable 's' to a function 'display'.
Now, while defining the function, we passed a copy of the variable 's' as its argument with 'struct student' written before it because the variable which we have passed is of type structure named student. Finally, in the function, we printed the name, roll number and phone number of the structure variable.
Passing by Reference
In passing by reference, the address of a structure variable is passed to a function. In this, if we change the structure variable which is inside the function, the original structure variable which is used for calling the function changes. This was not the case in calling by value.
#include <iostream>
#include <cstring>
using namespace std;
struct student
{
int roll_no;
string name;
int phone_number;
};
void display(struct student *st)
{
cout << "Roll no : " << st -> roll_no << endl;
cout << "Name : " << st -> name << endl;
cout << "Phone no : " << st -> phone_number << endl;
}
int main(){
struct student s;
s.roll_no = 4;
s.name = "Ron";
s.phone_number = 888888;
display(&s);
return 0;
}
Name : Ron
Phone no : 888888
This case is similar to the previous one, the only difference is that this time, we are passing the address of the structure variable to the function. While declaring the function, we passed the pointer of the copy 'st' of the structure variable 's' in its parameter. Since the pointer is of a variable of type structure named student, we wrote 'struct student' before the name of the pointer in the argument of the function. In the function , we accessed the members of the pointer using -> sign as discussed before.
Try to change the value of the variables inside the function in both the cases and see the changes in the real variables.
If you do not practice, you don't deserve to win.
-Andre Agassi


{% extends "!footer.html" %}
{% block extrafooter %}
{{ super() }}
Kurento has been supported under Project LERNIM (RTC-2016-4674-7), co-funded by the Ministry of Economy, Finance and Competitiveness of Spain, as well as by the European Regional Development Fund, whose main goal is to promote technological development, innovation and high-quality research.
{% endblock %}


Starting with Cells 4.0 we no longer use ActionView as a template engine. Removing this jurassic dependency cuts down Cells’ rendering code to less than 50 lines and improves rendering speed by 300%!
We rely on the excellent Tilt library for rendering templates.
Cells per default does not escape HTML. However, you may run into problems when using Rails helpers. Internally, those helpers often blindly escape. This is not Cells’ fault but a design flaw in Rails.
Everything related to #capture
will cause problems - check this as an example. As you can see, this is Rails swinging the escape hammer. Please don’t blame us for escapes where they shouldn’t be. Rather open an issue on Rails and tell them to make their code better overrideable for us.
class SongCell < Cell::ViewModel
include ActionView::Helpers::FormHelper
include Cell::Erb # include Erb _after_ AV helpers.
# ..
end
The same goes for HAML cells, by including Cell::Haml
.
#html_safe
on the strings you generate. We know, this sucks, but this is not our fault.


Estys
Desu
Home
About
Connect
Connect
Tyler Estes
Occupation:
Mechanical Engineering Student at the University of Cincinnati
Location:
Cincinnati, OH
Email:
<EMAIL_ADDRESS>Resume:
Check here!


This is my first HTML web page using GitHub!
Hello there, awesome person!
My favourite site is
Netflix
!
My 2nd favourite site is
YouTube
!
My 3rd favourite site is
Buzzfeed Quizzes
!


Modules
Here is a list of all modules:- Functionality by programming task
- Programming models
- Setting up scripts
- Using integer variables and constraints
- Integer variables
- Argument arrays
- Variable arrays
- Domain constraints
- Simple relation constraints over integer variables
- Simple relation constraints over Boolean variables
- Value precedence constraints over integer variables
- Membership constraints
- Element constraints
- Distinct constraints
- Channel constraints
- Sorted constraints
- Counting constraints
- Number of values constraints
- Sequence constraints
- Extensional constraints
- Arithmetic constraints
- Linear constraints over integer variables
- Linear constraints over Boolean variables
- Bin packing constraints
- Geometrical packing constraints
- Scheduling constraints
- Graph constraints
- Synchronized execution
- Unsharing variables
- Branching
- Search engines
- Gist: the Gecode Interactive Search Tool
- Using integer set variables and constraints
- Set variables
- Float variables
- Range and value iterators for set variables
- Argument arrays
- Variable arrays
- Domain constraints
- Relation constraints
- Set operation/relation constraints
- Convexity constraints
- Sequence constraints
- Distinctness constraints
- Connection constraints to integer variables
- Channel constraints
- Value precedence constraints over set variables
- Element constraints
- Synchronized execution
- Branching
- Using float variables and constraints
- Direct modeling support
- Linear expressions and relations
- Linear float expressions and relations
- Set expressions and relations
- Boolean expressions
- Posting of expressions and relations
- Arithmetic functions
- Transcendental functions
- Trigonometric functions
- Channel functions
- Aliases for integer constraints
- Aliases for set constraints
- Support for cost-based optimization
- Script commandline driver
- Generic branching support
- Programming search engines
- Programming actors
- Programming integer actors
- Programming set actors
- Programming float actors
- Reified propagator patterns
- Generic brancher based on view and value selection
- Generic merit for branchers based on view and value selection
- Generic value commit for brancher based on view and value selection
- Generic value selection and value commit for brancher based on view and value selection
- Generic value selection for brancher based on view and value selection
- Generic view selection for brancher based on view and value selection
- Generic brancher based on view selection
- Status of constraint propagation and branching commit
- Propagator patterns
- Programming variables
- Testing
- Testing domain floats
- Testing finite domain integers
- Arithmetic constraints
- Basic setup
- Bin-packing constraints
- Boolean constraints
- Channel constraints
- Circuit constraints
- Count constraints
- Cumulative scheduling constraints
- Cumnulatives scheduling constraint
- Distinct constraints
- Domain constraints
- Element constraints
- Synchronized execution
- Extensional (relation) constraints
- Counting constraints (global cardinality)
- Linear constraints
- Membership constraints
- Minimal modelling constraints (arithmetic)
- Minimal modelling constraints (Boolean constraints)
- Minimal modelling constraints (counting)
- Minimal modeling constraints (linear constraints)
- Minimal modelling constraints (relation)
- No-overlap constraints
- Number of values constraints
- Relation constraints
- Sequence constraints
- Sorted constraints
- Unary scheduling constraints
- Unsharing variables in arrays
- General test support
- Testing finite sets
- Set channeling constraints
- Convexity constraints
- Distinctness constraints
- Domain constraints
- Element constraints
- Synchronized execution
- Combined integer/set constraints
- Minimal modelling constraints (Set constraints)
- Relation/operation constraints with constants
- Relation/operation constraints
- Relation constraints
- Sequence constraints
- General set test support
- General test support
- Programming models
- Common functionality
- Other available functionality
- Generic propagators
- Integer propagators
- Set propagators
- Float propagators
- Merit-based float view selection for branchers
- Float value selection for brancher
- Float value commit classes
- Merit-based integer view selection for branchers
- Integer value selection for brancher
- Integer value commit classes
- Merit-based set view selection for branchers
- Set value selection for brancher
- Set value commit classes
- Example scripts (models)