Edit custom LESS code
Get compiled CSS
Get LESS variables
Import LESS variables
Configure
Reset variables to defaults
Related variables
×
×
Custom LESS code
applied after the linked LESS file, can use any of the variables
×
Compiled CSS
from customized LESS
×
Customized LESS variables
×
Import variables
paste or load previously saved data
×
Configuration
CSS download filename:
CSS minified filename:
LESS variables filename:
Custom LESS code filename:
Preferred color format:
rgb
hsl
hex
Color picker visible sliders:
hsl
rgb
cie
opacity
Accordion blocks:
enabled
disabled
×
Source Code


Design Rule Verification Report
Date:
10/27/2017
Time:
12:17:03 PM
Elapsed Time:
00:00:03
Filename:
C:\Users\ECE_STUDENT\Documents\ECE453Project\ALTIUM\MRTRUMAN\TRUMAN_PCB.PcbDoc
Warnings:
0
Rule Violations:
12
Summary
Warnings
Count
Total
0
Rule Violations
Count
Clearance Constraint (Gap=9mil) (All),(All)
0
Short-Circuit Constraint (Allowed=No) (All),(All)
0
Un-Routed Net Constraint ( (All) )
0
Modified Polygon (Allow modified: No), (Allow shelved: No)
0
Width Constraint (Min=10mil) (Max=200mil) (Preferred=20mil) (All)
0
Power Plane Connect Rule(Relief Connect )(Expansion=20mil) (Conductor Width=10mil) (Air Gap=10mil) (Entries=4) (All)
0
Minimum Annular Ring (Minimum=6mil) (All)
0
Hole Size Constraint (Min=15mil) (Max=150mil) (All)
0
Hole To Hole Clearance (Gap=10mil) (All),(All)
0
Minimum Solder Mask Sliver (Gap=2.5mil) (All),(All)
0
Silk To Solder Mask (Clearance=10mil) (Disabled)(IsPad),(All)
0
Silk to Silk (Clearance=10mil) (All),(All)
0
Net Antennae (Tolerance=0mil) (All)
0
Board Clearance Constraint (Gap=0mil) (All)
12
Height Constraint (Min=0mil) (Max=1000mil) (Prefered=500mil) (All)
0
Total
12
Board Clearance Constraint (Gap=0mil) (All)
Board Outline Clearance(Outline Edge): (Collision < 50mil) Between Track (969.213mil,1782.835mil)(969.213mil,2137.165mil) on Top Overlay And Board Edge
Board Outline Clearance(Outline Edge): (Collision < 50mil) Between Track (969.213mil,2137.165mil)(1616.378mil,2137.165mil) on Top Overlay And Board Edge
Board Outline Clearance(Outline Edge): (Collision < 50mil) Between Track (969.213mil,1782.835mil)(1292.047mil,1782.835mil) on Top Overlay And Board Edge
Board Outline Clearance(Outline Edge): (Collision < 50mil) Between Track (914.016mil,3365.472mil)(1004.016mil,3365.472mil) on Top Overlay And Board Edge
Board Outline Clearance(Outline Edge): (1.516mil < 50mil) Between Track (1004.016mil,3225.472mil)(1479.016mil,3225.472mil) on Top Overlay And Board Edge
Board Outline Clearance(Outline Edge): (1.516mil < 50mil) Between Track (1004.016mil,3225.472mil)(1004.016mil,3365.472mil) on Top Overlay And Board Edge
Board Outline Clearance(Outline Edge): (Collision < 50mil) Between Track (914.016mil,3365.472mil)(914.016mil,3525.472mil) on Top Overlay And Board Edge
Board Outline Clearance(Outline Edge): (Collision < 50mil) Between Track (914.016mil,3525.472mil)(914.016mil,3540.472mil) on Top Overlay And Board Edge
Board Outline Clearance(Outline Edge): (Collision < 50mil) Between Track (914.016mil,3540.472mil)(1004.016mil,3540.472mil) on Top Overlay And Board Edge
Board Outline Clearance(Outline Edge): (1.516mil < 50mil) Between Track (1004.016mil,3540.472mil)(1004.016mil,3575.472mil) on Top Overlay And Board Edge
Board Outline Clearance(Outline Edge): (1.516mil < 50mil) Between Track (1004.016mil,3575.472mil)(1729.016mil,3575.472mil) on Top Overlay And Board Edge
Board Outline Clearance(Outline Edge): (Collision < 10mil) Between Text "board edge" (1010mil,2080mil) on Top Overlay And Board Edge
Back to top


Hisyam Rahmawan Suharno
ADD 2 NUMBERS
Learn More !
LEAFLET MAPBOX
Learn More !
CULINARY TOUR
Learn More !


Symfony @ Singapore is a blog written by Laurent Ghirardotti. I'm Villa-Finder CTO.
Follow me on Twitter.


A 2D path representation. The class provides methods for creating paths and contours of 2D shapes similar to the 2D Canvas API.
const path = new THREE.Path();
path.lineTo( 0, 0.8 );
path.quadraticCurveTo( 0, 1, 0.2, 1 );
path.lineTo( 1, 1 );
const points = path.getPoints();
const geometry = new THREE.BufferGeometry().setFromPoints( points );
const material = new THREE.LineBasicMaterial( { color: 0xffffff } );
const line = new THREE.Line( geometry, material );
scene.add( line );
points -- (optional) array of [page:Vector2 Vector2s].
Creates a Path from the points. The first point defines the offset, then
successive points are added to the [page:CurvePath.curves curves] array as
[page:LineCurve LineCurves].
If no points are specified, an empty path is created and the
[page:.currentPoint] is set to the origin.
See the base [page:CurvePath] class for common properties.
The current offset of the path. Any new [page:Curve] added will start here.
See the base [page:CurvePath] class for common methods.
x, y -- The absolute center of the arc.
radius -- The radius of the arc.
startAngle -- The start angle in radians.
endAngle -- The end angle in radians.
clockwise -- Sweep the arc clockwise. Defaults to `false`.
Adds an absolutely positioned [page:EllipseCurve EllipseCurve] to the
path.
x, y -- The absolute center of the ellipse.
xRadius -- The radius of the ellipse in the x axis.
yRadius -- The radius of the ellipse in the y axis.
startAngle -- The start angle in radians.
endAngle -- The end angle in radians.
clockwise -- Sweep the ellipse clockwise. Defaults to false.
rotation -- The rotation angle of the ellipse in radians, counterclockwise
from the positive X axis. Optional, defaults to `0`.
Adds an absolutely positioned [page:EllipseCurve EllipseCurve] to the
path.
x, y -- The center of the arc offset from the last call.
radius -- The radius of the arc.
startAngle -- The start angle in radians.
endAngle -- The end angle in radians.
clockwise -- Sweep the arc clockwise. Defaults to `false`.
Adds an [page:EllipseCurve EllipseCurve] to the path, positioned relative
to [page:.currentPoint].
This creates a bezier curve from [page:.currentPoint] with (cp1X, cp1Y) and (cp2X, cp2Y) as control points and updates [page:.currentPoint] to x and y.
x, y -- The center of the ellipse offset from the last call.
xRadius -- The radius of the ellipse in the x axis.
yRadius -- The radius of the ellipse in the y axis.
startAngle -- The start angle in radians.
endAngle -- The end angle in radians.
clockwise -- Sweep the ellipse clockwise. Defaults to `false`.
rotation -- The rotation angle of the ellipse in radians, counterclockwise
from the positive X axis. Optional, defaults to `0`.
Adds an [page:EllipseCurve EllipseCurve] to the path, positioned relative
to [page:.currentPoint].
Connects a [page:LineCurve] from [page:.currentPoint] to x, y onto the path.
Move the [page:.currentPoint] to x, y.
Creates a quadratic curve from [page:.currentPoint] with cpX and cpY as control point and updates [page:.currentPoint] to x and y.
points -- array of [page:Vector2 Vector2s].
Points are added to the [page:CurvePath.curves curves] array as
[page:LineCurve LineCurves].
points - An array of [page:Vector2 Vector2s]
Connects a new [page:SplineCurve] onto the path.
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]


In next topic we will explain several features that are important for data processing. These examples are not yet tested but once we create a compiler this is how things should work.
A boxed value is a reference to a primitive type.
syntax Boxed value is an Array or Vector with a single element.
# define boxed values
new int ∈ [Z]; -- boxed integer
new flt ∈ [R]; -- boxed double float
Boxing is the process of converting a primitive type to a reference.
** define two integers
new n ∈ Z; -- primitive integer
new k ∈ [Z]; -- boxed integer
rule main:
** check type of variable
print type(k); -- [Z]
print type(k) is Array; -- 1 = True
** boxing notation
let k := n; -- auto-boxing
let k := [n]; -- explicit boxing
** comparison
print n = 0; -- 1 (true, initial value)
print n = k; -- 1 (true, same values)
print n ≡ k; -- 0 (false, different types)
print n == k; -- 0 (false, not the same)
** consequence
let n := 2; -- n = 2 (modify n)
print k; -- k = 0 (unmodified)
print k := 10; -- auto-boxing
print n; -- n = 2 (unmodified)
return;
Unboxing is the process of converting a reference to a primitive type. This will unwrap the value from the heap and stores it on the stack. Unboxing is always explicit. If you try to do implicit unboxing the compiler will signal an error.
** create a native and boxed integer
new n: 0 ∈ Z; -- native integer
new r: 10 ∈ [Z]; -- reference to integer
rule main:
** use data type like a function
let n := Z(r); -- explicit unboxing (default notation)
let n := r :> Z -- explicit unboxing (alternative notation)
** verify value identity
print n = r; -- 1 (true: same values)
print n ≡ r; -- 0 (false: different types)
** consequence: variables are unbound
let n += 2; -- n = 12 (modified)
print r; -- r = 10 (unmodified)
return;
A reference can be shared between two variables. As a consequence, when one is modified the other is also modified. In fact is a single variables with two or more references.
A reference is shared using operator ":="
** create a reference using ":="
new a := [1]; -- create a reference
new b := b; -- share a reference
rule main:
** variable c is bound to a
pass if b = a; -- 1 (same values)
pass if b ≡ a; -- 1 (same location, same data type)
** consequence of sharing:
let a := 2; -- [2] (modify denoted value)
print a; -- [2] (new value is boxed)
print b; -- [2] (shared reference is modified)
expect b = a; -- will pass
expect b ≡ a; -- references are bound
return;
example for cloning
** create a clone using "::"
new a := [1]; -- create a reference
new b :: a; -- value [1]
rule main:
expect a = b; -- pass (same values)
expect a !≡ b; -- expect different locations
** consequence of cloning:
let a := 3;
print a; -- [3] (new value)
print b; -- [1] (unmodified)
expect a != b; -- no longer equal
expect a !≡ b; -- expect different locations
return;
new test ∈ [R](10); -- vector of 10 real numbers
new m := length(test)-1;
rule main:
** array index start from 0
print test[0]; -- first element
print test[m]; -- last element
** alternative notation
print test[0]; -- first element
print test[-1]; -- last element
** array traversal
new x := 0;
if (x < m) do
test[i] := x;
let x += 1;
cycle;
** print all elements of array
print test;
return;
[0,1,2,3,4,5,6,7,8,9]
operations
# Initialized arrays
new a1 := [1, 2, 3];
new a2 := [2, 3, 4];
rule main:
** addition between two Arrays "+"
new a3 := a1 + a2; -- [1,2,3,2,3,4]
** difference between two Arrays "-"
new a4 := l1 - l2; -- [1]
new := l2 - l1; -- [4]
** intersection between two Arrays "&"
new := a1 ∩ a2; -- [2,3]
** union between two Arrays "|"
new := a1 ∪ a2; -- [1,2,3,4]
return;
rule test_array:
** array with capacity of 10 elements
new my_array ∈ [Z](10);
new m := my_array.capacity();
** traverse array and modify elements
cycle:
new i := 0 ∈ N;
while i < m do
let my_array[i] := i;
let i += 1;
repeat;
** array elements using escape template by index #[]
print ("First element: #[1]" ? my_array);
print ("Last element: #[-1]" ? my_array);
** range of array elements are comma separated [1,2,3]
print ("First two: #[1..2]" ? my_array);
print ("Lat two: #[-2..-1]" ? my_array);
print ("All except lat two: #[1..-3]" ? my_array);
return;
console:
This is the first element: 1
This is the last element: 10
resize Array capacity can be modified using union operator "+" or "+=". This will reset the array reference. That means it will not update any slice or other references you may have to this array.
** define new array and reference
new array := [0](10);
new acopy := array; -- copy reference
rule main:
print array = acopy; -- 1 = True (same array)
** extend array with 10 more elements
let acopy ++ [0](10); -- 10 new elements
let acopy[*] := 1; -- modify all
** print new array and reference
print acopy; -- [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
print array; -- [0,0,0,0,0,0,0,0,0,0]
print array = acopy; -- 0 = False (different arrays)
return;
Array data can be used as arguments for feeding a function that receive variable arguments.
rule sum(*args ∈ Z) => (result: 0 ∈ Z):
cycle:
new e ∈ Z;
for ∀ e ∈ args do
let result += e;
repeat;
return;
rule main:
new array := [1,2,3,4,5,6,7,8,9,10];
new s := sum(*array); -- array spreading
print s;
return;
Array data can be assigned to multiple variables. Last elements can be captured using rest notation:
* define array of 5 elements
new array := [1,2,3,4,5];
rule main():
** read all array elements using decomposition
new x, y, *other := [1,2,3,4,5];
print "x = #(n)" ? x; -- x = 1
print "y = #(n)" ? y; -- y = 2
print "other = #[*]" ? other; -- other = [3,4,5]
return;
A slice is a small view from a larger array, created with notation [n..m].
** declare array with capacity c
new array_name ∈ [element_type](c);
rule main:
** unnamed slice can be used in expressions
print array_name[n..m];
** create named slice from array
new slice_name := array_name[n..m];
return;
Where: n,m are 2 optional numbers, n ≥ 0, m <= capacity-1.
Anonymous slicing notation can be used to extract or modify specific elements from an array;
** initialized array
start:
new a:= [0,1,2,3,4,5,6,7,8,9];
do
print a[1..-1]; -- will print [0,1,2,3,4,5,6,7,8,9]
print a[-3..-1]; -- will print [7,8,9]
print a[1..1]; -- will print [0]
print a[1..4]; -- will print [1,2,3,4]
** modify first 4 elements
let a[1..4] += 2;
** first 4 elements of (a) are modified
print a; -- [2,3,4,5,4,5,6,7,8,9]
done;
Slicing notation can be used to create a view to original array.
** original array
start:
new a:= [0](5); -- [0,0,0,0,0]
** making two slices
new c := a[1..3]; -- [0,0,0]
new e := a[4..5]; -- [0,0]
do
** modify all slice elements
let c[*] := 1;
let e[*] := 2;
** original array is modified
print a; -- [1,1,1,2,2]
** modify last 2 elements using anonymous slicing
let a[-2..-1] := [2,3];
print a; -- [1,1,1,2,3]
done;
Modify all elements of the matrix is possible using [*] and assign operator “ := ”
** a matrix having 2 rows and 2 columns
new M: [Z](2,2);
rule main():
let M[*] := 100; -- initialize all elements with 100
print M; -- [[100,100],[100,100]]
return;
#define a shared matrix
new M: [Z](2,2);
rule main():
** assign same value to all elements
let M[*] := 100;
** modify all elements
let M[*] += 10;
print(M); -- [[110,110],[110,110]]
** modify an entire row
let M[1,*] := 0;
let M[2,*] := 1;
print(M); -- [[0,0],[1,1]]
** modify an entire column
let M[*,1] += 1;
let M[*,2] += 2;
print(M); -- [[1,2],[2,3]]
return;
matrix addition Two matrices can be added to each other if they have the same dimensions.
start:
** creation of local matrix with 10 × 10 elements
new M := [1](10,10) + [2](10,10);
do
** verify the result is a matrix of same dimensions
expect M = [3](10,10);
done;
Memory impedance
Matrices are multidimensional while computer memory is linear. This is an impedance mismatch that require mapping. Some computer languages organize matrices row by row and some others organize memory column by column. The difference between the orders lies in which elements of an array are contiguous in memory.
Row-major and column-major orderTransposition Passing a memory matrix from one computer language into another can require a transposition that can be a performance bottleneck. EVE uses row-major order therefore passing matrix arguments is the most efficient with Rust and C++ languages.
Matrix Traversal When you traverse elements use rows first, than you change the column. A processor will use the internal cache more efficient in this way. If the matrix is large this can be a significant performance issue.
Example: In this example we traverse all the rows then all the column, this is the most efficient way to traverse a matrix.
# define a matrix using unicode literal
new M := ⎡'a0','b0','c0'⎤
⎢'a1','b1','c1'⎥
⎣'a2','b2','c2'⎦;
rule main():
** local control variables
new row, col := 0; -- type inference: ∈ Z
** traverse matrix with index pattern
if col < 3 do -- traverse columns
if row < 3 do -- traverse row first
print M[row,col];
let row += 1;
repeat;
let col += 1;
repeat;
** traversal with visitor pattern
for e ∈ M do
print e;
repeat;
return;
A set builder is a declarative structure used to produce a sub-set from a set. It can take elements from one set and filter them or translate them into new values using a map() that can be a deterministic rule.
Most common is to create a set from a range of values after we filter out some values:
new my_set := { var | var ∈ range ∧ filter(var)};
More general we can use a map() rule to convert the source elements that can be a range or a list. The elements of the new set are calculated by the map() rule.
new my_set := { map(x) | x ∈ source ∧ filter(x)};
legend
# define new sets of integer numbers
new (test1, test2): {Z};
rule main;
** populate the sets with new values
new test1 := { x | x ∈ (1..3)};
new test2 := { x² | x ∈ (1..3)};
** expected result
exlect test1 = {1,2,3};
exlect test2 = {1,4,9};
return;
A map builder can create also a hash map by using a "map" rule. A map is just a rule that create a value for each key. For example x² can be a map rule.
map_name := { (key:map(key)) | (key ∈ source) ∧ filter(key)}
legend
New map defined from a domain
# define hash-map using a map-builder
new mymap := { (x:x²) | x ∈ (0.!10) ∧ (x % 2 = 0) };
rule main():
print mymap; -- {(0:0),(2:4),(4:16),(6:36),(8:64)}
return;
Similar to a set builder you can initialize an array or matrix:
new array := [ x | x ∈ (1..10:2) ]; -- [1,3,5,7,9]
Logic quantification verify a domain to satisfy a condition. The two most common quantifiers are: "all" and "exists".
symbols:
Qualifiers can be used as logical expressions in conditional expressions.
∃ (x ∈ DS) ∧ condition(x);
∀ (x ∈ DS) ∧ condition(x);
** create a set of bit-masks
start:
new here := {0b10011,0b10001,0b11101};
new verify ∈ L; -- logical flag
do
** verify if any mask element has second bit from the end
let verify := ∃(x ∈ here) ∧ (x ⊕ 0b10 = x);
** verify if all elements in Here ha ve first bit from the end
let verify := ∀(x ∈ here) ∧ (x ⊕ 0b01 = x);
done;
It is common for one collection to be created based on elements from another collection. Collection members can be copy into the new collection using collection builder:
new source := [0,1,2,2,2,2];
rule main():
new set := { x | x ∈ source }; -- eliminate duplicates
print set; -- {0,1,2}
return;
Build notation can use expressions to filter out elements during build.
new source := [0,1,2,3,4,5];
rule main()
new set := { x | x ∈ source ∧ (x % 2 = 0) };
print set; -- {0,2,4}
return;
The elements in one set or list can be transformed by a function or expression to create a new collection.
new source := {0,1,2,3,4,5};
rule main():
** create Table pairs (key, value) for Table map
new target := {(x:x^2) | x ∈ source };
print target; -- { 0:0, 1:1, 2:4, 3:9, 4:16, 5:25}
return;
We can add elements to a list or remove elements from the list very fast:
List concatenation is ready using operator “+”. This operator represent union. Therefore union act very similar to append, except we add multiple elements at the end of first list and we create a new list as result.
new a := ('a','b','c');
new b := ('1','2','3');
rule main():
new c := a + b;
print c; -- ('a','b','c','1','2','3');
return;
The join function receive a list and convert elements into a string separated be specified character.
rule main():
new str := join([1,2,3],',');
print (str); -- '1,2,3';
return;
The join function receive a list and convert elements into a string separated be specified character.
rule main():
new lst := split("1,2,3",",");
print lst; -- (1,2,3)
return;
A stack is a LIFO list of elements: LIFO = (last in first out)
** declare a list
new a := (1, 2, 3);
rule main():
** add using equeue operator: "<+"
put a <+ 4; -- (1,2,3,4)
** delete operator "-="
pop a -= a.tail; -- a = (1,2,3)
return;
A queue is a FIFO collection of elements: (first in first out)
new q := (1,2,3);
rule main():
new first ∈ N;
** enqueue new element into list
put q <+ 4; -- (1,2,3,4)
** read first element using ":="
let first := a.head; -- first = 1
** shift list to left with 1
pop a << 1; -- a = (2,3,4)
return;
Following other rules should be available
A list has properties that can be used in logical expressions:
Collections have common rules that enable traversal using for statement.
built-in:
Available for: {List, Table, Set} but not Array or Slice
#visitor pattern
rule main():
new my_map := {("a":1),("b":2),("c":3)};
for ∀ key, value ∈ my_map do
print('("' + key + '",' + value +')');
repeat;
return;
Will print:
("a",1) ("b",2) ("c",3)
Hash tables are sorted in memory by key for faster search. It is more difficult to search by value because is not unique and not sorted. To search by value one must create a cycle and verify every element. This rule is very slow so you should never use it.
** check if a key is present in a hash collection
new my_map := {(1:'a'),(2:'b'),(3:'c')};
rule main()
let my_key := 3;
when my_key ∈ my_map do
print("True"); -- expected
else
print("False");
done;
return;
new animals ∈ {S,S};
rule main():
new animals["Bear"] := "dog";
new animals["Kiwi"] := "bird";
print(animals);
return;
Output:
{("Bear":"dog"),("Kiwi":"bird")}
** partial declaration
new animals := {};
rule main():
** establish element types (S:X)
new animals["Rover"] := "dog";
** use direct assignment to create 2 more element
new animals["Bear"] := "dog";
new animals["Kiwi"] := "bird";
print(animals);
return;
output:
{('Rover':"dog"),("Bear":"dog"),("Kiwi":"bird")}
Conversion of a string into number is done using parse rule:
rule main:
new x,y ∈ R;
** rule parse return; a Real number
let x := parse("123.512",2); -- convert to real 123.5
let y := parse("10,000.3333",2); -- convert to real 10000.33
return;
Strings can be concatenated using:
** this is example of string concatenation
new str := "";
rule main():
** stupid fast concatenate two string as they are
let str := "this " + " string"; -- "this string"
** smart slower concatenation for path or url
let str := "this/ " / " string"; -- "this/string"
let str := "c:\this" . "is\path"; -- "c:\this\is\path"
let str := "https:" . "domain.com"; -- "https://domain.com"
return;
path concatenation Two strings can be concatenated using concatenation operator "/" or "\". This operator is used to concatenate "path" strings or URL locations. Notice "\" is also escape character used for string templates.
new s := "";
rule main()
let s := "te/" / "/st"; -- "te/st"
let s := "te/" \ "/st"; -- "te\\st"
let s := "te"."st"; -- "te\\st" or "te/st" depending on OS
return;
Replication operator: "*" will concatenate a string with itself multiple times:
** create string of 10 spaces new s := ' ' * 10;
rule main():
** a string from pattern 01
new a := "01" * 4;
print a; -- 01010101;
** used in expression will generate string
new b := (a & ' ') * 4;
print b; -- 01010101 01010101 01010101 01010101
return;
It is common to create strings from a string pattern using operator "*".
str := constant * n ∈ S(n);
new sep := '-' * 19;
rule main():
print ('+' + sep + "-");
print ('| this is a test |');
print ('+' + sep + '+');
return;
+-------------------- | this is a test | +-------------------+
You can insert constants using notation $X or #(nn):
Codes:
| DEC | HEX | CODE | NAME |
|---|---|---|---|
| 00 | 0x00 | $NL | Null |
| 08 | 0x08 | $BS | Backspace |
| 09 | 0x09 | $HT | Horizontal Tab |
| 10 | 0x0A | $LF | Line Feed |
| 11 | 0x0B | $VT | Vertical Tab |
| 12 | 0x0C | $FF | Form Feed |
| 13 | 0x0D | $CR | Carriage Return |
| 27 | 0x1B | $ES | Escape |
| 39 | 0x27 | $AP | Apostroph '' |
| 34 | 0x22 | $QM | Quotation "" |
In computer programming, string interpolation is the process of evaluating a string literal named template that contains one or more placeholders. An interpolation expression is yielding a result in which the placeholders are replaced with their corresponding values.
We use notation "#()" or "#()[]" to create a placeholder template inside of a String or Text. You can use operator "?" to replace the placeholder with values from a data source. If placeholder is not found the result will contain the placeholder unmodified.
** next template uses #(n) placeholder
new template := "Duration:#(n) minutes and #(n) seconds";
new var1 := 4;
new var2 := 55;
rule main():
print template ? (var1,var2,...); -- Duration:4 minutes and 55 seconds
return;
** define two A codes
new x := 30; -- Code ASCII 0
new y := 41; -- Code ASCII A
rule main():
** template writing alternative
print "#(n) > #(n)" ? (x,y); -- "30 > 41"
print "#(a) > #(a)" ? (x,y); -- "0 > A"
** using two dots : to separate hour from minutes
print "#(n):#(n)" ? (10, 45); -- 10:45
** using numeric format
print "#(1,000.00)" ? (1000.45); -- 1,234.56
return;
Placeholders:
Format template stings can use escape sequences:
"#(n)" = natural number
"#(z)" = integer number
"#(r)" = real number using default precision
"#(s)" = single quoted string for string, symbol or number
"#(q)" = double quoted string for string, symbol or number
"#(a)" = ASCII symbol representation of code
"#(u)" = Unicode symbol representation of code
"#(+)" = UTF16 code point representation (U+HHHH) for symbol
"#(-)" = UTF32 code point representation (U-HHHHHHHH) for symbol
"#(b)" = binary number
"#(h)" = hexadecimal number
"#(t)" = time format defined by @time
"#(d)" = date format defined by @date
"#[*]" = display array elements (separated by comma)
"#[i]" = search element by index [i]
"#[k]" = search element by key value [k]
rule main:
print "Numbers: #(n) and #(n)" ? (10, 11);
print "Alpha: #(a) and #(a)" ? (30, 41);
print "Strings: #(s) and #(s)" ? ('odd','even');
print "Quoted: #(q) and #(q)" ? ('odd','even');
print "Unicode: #(u) and #(u)" ? (U+2260,U+2261);
print "Unicode: #(q) and #(q)" ? (U+2260,U+2261);
print "Collection:#[*] and #[*]" ? ([1,2,3],{'a','b','c'});
print "Collection:#(s)[*] and #(q)[*]" ? ([1,2,3],{'a','b','c'});
return;
Expected output:
Numbers: 10 and 11 Alpha: 0 and A Strings: 'odd' and 'even' Quoted: "odd" and "even" Unicode: ≠ and ≡ Collection:1,2,3 and a,b,c Collection:'1','2','3' and "a","b","c"
A large template can be stored into a file, loaded from file and format().
Using Hash:
new template1 := "Hey look at this #[key1] it #[key2]!";
new template2 := "Hey look at this #(s)[key1] it #(q)[key2]!";
new map := {("key1":"test"),("key2":"works")};
rule main():
print template.format(map);
print template ? map;
return;
Expect output:
Hey look at this test it works!
Hey look at this 'test' it "works"!
Using Set:
new template := "Hey look at this #[0] it #[1]!";
new my_set := {"test","works"};
rule main():
print template ? my_set;
return;
Expect Output:
Hey look at this test it works!
Number type is implementing format() rule. This rule has one string parameter that is optional.
# format signature
rule format(number ∈ R, pattern ∈ S) => (result ∈ S):
...
return;
Where pattern cab gave two forms:
Note: Last pattern is depending on regional settings: $decimal:'.'/','
Alignment symbol "a" can be one of:
> is used to align to the right
< is used to align to the left
= is used to align to center
"#(r)" -- real number, with default precision left align
"#(n)" -- natural number, unsigned left align
"#(z)" -- integer number, with sign left align
"#(10)" -- right align numeric with 10 digits padded with spaces
"#(10.2)" -- 10 integer digits and 2 decimals, right padded with spaces
"#(>_:10)" -- right align 10 digits padded with spaces
"#(>0:10.2)" -- right align padded to 10 integer digits and 2 decimals
"#(>0:10,2)" -- right align European numeric style with 2 decimals
Reading a Text:
Text is iterable by "row". The row separator CR or CRLF. So we can read a text line by line. You can use for iteration to check every line of text. Each row is a string. You can also parse a row word by word using a nested for.
Note: The text also support escape sequences like a normal string. However in a text literal we do not have to escape the single quote symbols: "'". We have to escape the double quotes like: "This is "quoted" text". This is very rare since quoted text should use symbols: "« »" like "«quoted»".
This was the Bee draft design for basic concepts. Thank you for reading it all. Our effort has merely begun. There is a lot of testing and developing ahead of us. Next chapter are advanced research topics, just some ideas. Don't read yet.
Read next: Concurrency


Who are in line to become the Chief Justice of India?
The most likely path for sitting judges of the Supreme Court to the office of the Chief Justice of India
by Varun B. KrishnanJustice Ranjan Gogoi retired as Chief Justice of India on November 16 after serving a seven-year tenure in the Supreme Court, with more than a year as the Chief Justice. Justice S.A. Bobde, the next-highest-ranked judge in the court, has succeeded Justice Gogoi. Here is a visualisation of the five highest-ranked judges in the Supreme Court who could become Chief Justices of India.
Next in line for Chief Justice of India
Justice D.Y. Chandrachud could become the longest-serving CJI between the period November 2019 to February 2027 as he is expected to serve as the Chief Justice of India for two years from November 2022 to November 2024.


One dead, 11 missing in South Korean fishing boat blaze
One fisherman was killed and 11 others reported missing after their boat caught fire off South Korea's southern coast, authorities said on Tuesday.
The coast guard said the accident happened west of Jeju island. Local authorities said 12 crew members had been on board - six South Koreans and six Vietnamese nationals.
Only one body - the badly burned corpse of a South Korean - had so far been recovered, a coast guard official told AFP.
Helicopters, a patrol plane, coast guard vessels and civilian fishing boats were involved in the search for the missing, the coast guard said, adding that the cause of the fire was under investigation.


Developer Guidelines¶
Example DNS Names and IP Space¶
The IANA has allocated several special purpose domains and IP blocks for use as examples in code and documentation. Where possible, these domains and IP blocks should be preferred. There are some cases where it will not be possible to follow this guidance, for example, there is currently no reserved IDN domain name.
We prefer to use these names and IP blocks to avoid causing any unexpected collateral damage to the rightful owners of the non-reserved names and IP space. For example, publishing an email address in our codebase will more than likely be picked up by spammers, while published URLs etc using non-reserved names or IP space will likely trigger search indexers etc to begin crawling.
Reserved Domains¶
Reserved DNS domains are documented here: IANA Special Use Domain Names.
Several common reserved domains:
- example.com.
- example.net.
- example.org.
Reserved IP Space¶
Reserved IP space is documented here: IANA IPv4 Special Registry, and IANA IPv6 Special Registry.
Several common reserved IP blocks:
- <IP_ADDRESS>/24
- <IP_ADDRESS>/24
- <IP_ADDRESS>/24
- 2001:db8::/32
Style Guide¶
Follow OpenStack Style Guidelines
File header¶
Start new files with the following. Replace where needed:
# Copyright <year> <company>
#
# Author: <name> <email addr>
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
"""
<package.module>
~~~~~~~~~~~~~~
<Describe what the module should do, especially interactions with
other components and caveats>
<Optional links>
`Specs: Refer to a spec document if relevant`_
`User documentation <FILL_THIS.html>`_ <Refer to files under doc/>
<This is useful to remind developers to keep the docs up to date>
"""
Example:
backend.impl_akamai
~~~~~~~~~~~~~~~~~~~
Akamai backend. Create and delete zones on Akamai. Blah Blah...
`Specs: Keystone Session <https://github.com/openstack/designate-specs/blob/master/specs/kilo/switch-to-keystone-session.rst>`_
`User documentation <backend.html>`_
When updating a module, please ensure that the related user documentation is updated as well.
Docstrings¶
Use the Sphinx markup. Here is an example:
class MyClass(object):
"""<description>
mention a function :func:`foo` or a class :class:`Bar`
"""
def function(self, foo):
"""<describe what the function does>
:param foo: <description>
:type foo: <type>
:returns: <describe the returned value>
:rtype: <returned type>
:raises: <list raised exceptions>
:Example:
>>> a = b - c
>>> <more Python code>
.. note:: <add a note here>
.. seealso:: <blah>
.. warning:: <use sparingly>
"""
Logging¶
See http://docs.openstack.org/developer/oslo.i18n/guidelines.html
# Do not use "%" string formatting
# No localization for debug
LOG.debug("... %s", variable)
LOG.info(_LI("... %s..."), variable)
# Use named interpolation when more than one replacement is done
LOG.info(_LI("... %(key)s ..."), {'key': 'value', ...})
LOG.warn(_LW("... %(key)s"), {'key': 'value'})
LOG.error(_LE("... %(key)s"), {'key': 'value'})
LOG.critical(_LC("... %(key)s"), {'key': 'value'})


 Our main target is to research, develop, and invent solutions in collaboration with Digile N4S-Program partners.
We are looking for talents all the time. If you have the urge to stay on top of the IT evolution, we would like to hear from you. And if you just want to come and say hello, we are in with that also. Let's improve the process of software delivery together. We have coffee, you can bring some korvapuusti!


| Previous: Authentication | Up: Tutorial | End of book |
Currently only Jean has added visits for the pets. When you log in as another user, create a visit at James Carter and then click on the vet of the just created visit (which is James Carter), you see a problem with our current authorization model: You can see every visit of James Carter (especially you can see the visits of Jean). And not enough: You can click on the pets of Jean and get (read-)access to Jean and you can see every visit of Jean.
Surely this is a security problem. But fortunately JPA Security comes into play here.
To use JPA Security, we configure the usage in business-config.xml in src/main/resources/spring/.
Change
 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" p:dataSource-ref="dataSource"> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:database="${jpa.database}" p:showSql="${jpa.showSql}"/> </property>  <property name="persistenceUnitName" value="petclinic"/> <property name="packagesToScan" value="org.springframework.samples.petclinic"/> </bean>
into
 <bean id="entityManagerFactory" class="org.jpasecurity.spring.persistence.SecureContainerEntityManagerFactoryBean" p:dataSource-ref="dataSource"> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" p:database="${jpa.database}" p:showSql="${jpa.showSql}"/> </property>  <property name="persistenceUnitName" value="petclinic"/> <property name="packagesToScan" value="org.springframework.samples.petclinic"/> </bean>
Additionally we have to configure the access rules. We need the following rules.
We configure these rules by creating a file named security.xml in src/main/resources/META-INF/ with the following content.
<security xmlns="http://jpasecurity.sf.net/xml/ns/security" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jpasecurity.sf.net/xml/ns/security http://jpasecurity.sf.net/xml/ns/security/security_1_0.xsd" schemaVersion="1.0"> <persistence-unit name="petclinic"> <access-rule>GRANT CREATE READ ACCESS TO Credential credential</access-rule> <access-rule>GRANT UPDATE ACCESS TO Credential credential WHERE EXISTS (SELECT owner FROM Owner owner, Credential c WHERE owner.credential.id = credential.id AND owner.credential.id = c.id AND c = CURRENT_PRINCIPAL)</access-rule> <access-rule>GRANT ACCESS TO Vet vet WHERE vet.credential = CURRENT_PRINCIPAL</access-rule> <access-rule>GRANT READ ACCESS TO Vet vet</access-rule> <access-rule>GRANT CREATE ACCESS TO Owner owner</access-rule> <access-rule>GRANT ACCESS TO Owner owner WHERE owner.credential = CURRENT_PRINCIPAL</access-rule> <access-rule>GRANT READ ACCESS TO Owner owner WHERE owner.id IN (SELECT visit.pet.owner.id FROM Visit visit WHERE visit.vet.credential = CURRENT_PRINCIPAL)</access-rule> <access-rule>GRANT CREATE READ UPDATE ACCESS TO Pet pet WHERE pet.owner.credential = CURRENT_PRINCIPAL</access-rule> <access-rule>GRANT READ ACCESS TO Pet pet WHERE EXISTS (SELECT visit FROM Visit visit WHERE visit.pet = pet AND visit.vet.credential = CURRENT_PRINCIPAL)</access-rule> <access-rule>GRANT CREATE READ ACCESS TO Visit visit WHERE visit.pet.owner.credential = CURRENT_PRINCIPAL</access-rule> <access-rule>GRANT READ UPDATE ACCESS TO Visit visit WHERE visit.vet.credential = CURRENT_PRINCIPAL</access-rule> </persistence-unit> </security>
Now we have to change the save-Method of JpaPetRepositoryImpl.java (in src/main/java/org/springframework/samples/petclinic/repository/jpa/). Change
@Override public void save(Pet pet) { if (pet.getId() == null) { this.em.persist(pet); } else { this.em.merge(pet); } }
into
@Override public void save(Pet pet) { if(pet.getId() != null) { Pet p = findById(pet.getId()); p.setName(pet.getName()); p.setBirthDate(pet.getBirthDate()); p.setType(pet.getType()); } else { this.em.persist(pet); } this.em.flush(); }
To active accessing for creating a pet or a visit, we need a accessmanager. Therefore change inOwnerController.java (in src/main/java/org/springframework/samples/petclinic/web/)
private final ClinicService clinicService; private final UserDetailsService userDetailsService; @Autowired public OwnerController(ClinicService clinicService, UserDetailsService userDetailsService) { this.clinicService = clinicService; this.userDetailsService = userDetailsService; } [...] @RequestMapping("/owners/{ownerId}") public ModelAndView showOwner(@PathVariable("ownerId") int ownerId) { ModelAndView mav = new ModelAndView("owners/ownerDetails"); mav.addObject(this.clinicService.findOwnerById(ownerId)); return mav; }
into
private final ClinicService clinicService; private final UserDetailsService userDetailsService; private final AccessManager accessManager; @Autowired public OwnerController(ClinicService clinicService, UserDetailsService userDetailsService, AccessManager accessManager) { this.clinicService = clinicService; this.userDetailsService = userDetailsService; this.accessManager = accessManager; } [...] @RequestMapping("/owners/{ownerId}") public ModelAndView showOwner(@PathVariable("ownerId") int ownerId) { ModelAndView mav = new ModelAndView("owners/ownerDetails"); mav.addObject(this.clinicService.findOwnerById(ownerId)); mav.getModelMap().addAttribute(accessManager); return mav; }
Moreover we have to define explicitly a default constructor and a constructor with Owner as parameter for a pet. Therefore add the following code in Pet.java (in src/main/java/org/springframework/samples/petclinic/model/)
public Pet() { } public Pet(Owner owner) { this(); setOwner(owner); }
The last thing we do for authorization is to change Owner.java (in src/main/java/org/springframework/samples/petclinic/model/). Change
@OneToMany(cascade = CascadeType.ALL, mappedBy = "owner") private Set<Pet> pets;
into
@OneToMany(cascade = CascadeType.ALL, mappedBy = "owner", fetch = FetchType.EAGER) private Set<Pet> pets;
When you now click around in the application, you will see that our authorization problems are gone and you recognize how easy it is to integrate JPA Security.
When you log in as james (who is a vet) and click on a visit of Jean to display Jean's pets, you see a button to create a pet and update the owner information. This should not be allowed for vets since only owners may do this. Well, with JPA Security it isn't: When you click on one of the links for adding a pet or a visit, you get a security exception. When you click on a link to edit the owner or a pet, you get the form to edit it, but the security exception arises when you try to save your changes. On a security point of view this is OK, but from the users perspective this is not very nice. We would expect not to see the buttons, when we are not allowed to use them - and JPA Security can do this. We have to change ownerDetails.jsp in src/main/webapp/WEB-INF/jsp/owners/.
Change
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="joda" uri="http://www.joda.org/joda/time/tags" %> [...]
  <spring:url value="{ownerId}/edit.html" var="editUrl"> <spring:param name="ownerId" value="${owner.id}"/> </spring:url> Edit Owner 	  <spring:url value="{ownerId}/pets/new.html" var="addUrl"> <spring:param name="ownerId" value="${owner.id}"/> </spring:url> Add New Pet

into
<%@ taglib prefix="access" uri="http://jpasecurity.sf.net/access" %> <%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %> <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> <%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@ taglib prefix="joda" uri="http://www.joda.org/joda/time/tags" %> [...]
 <access:updating entity="owner">  <spring:url value="{ownerId}/edit.html" var="editUrl"> <spring:param name="ownerId" value="${owner.id}"/> </spring:url> Edit Owner 	 </access:updating> <access:creation type="Pet" parameters="owner">  <spring:url value="{ownerId}/pets/new.html" var="addUrl"> <spring:param name="ownerId" value="${owner.id}"/> </spring:url> Add New Pet 	 </acess:creation>

Then change

  <spring:url value="/owners/{ownerId}/pets/{petId}/edit" var="petUrl"> <spring:param name="ownerId" value="${owner.id}"/> <spring:param name="petId" value="${pet.id}"/> </spring:url> Edit Pet 	  <spring:url value="/owners/{ownerId}/pets/{petId}/visits/new" var="visitUrl"> <spring:param name="ownerId" value="${owner.id}"/> <spring:param name="petId" value="${pet.id}"/> </spring:url> Add Visit

into

 <access:updating entity="owner">  <spring:url value="/owners/{ownerId}/pets/{petId}/edit" var="petUrl"> <spring:param name="ownerId" value="${owner.id}"/> <spring:param name="petId" value="${pet.id}"/> </spring:url> Edit Pet 	 </access:updating> <access:creation type="Visit" parameters="pet">  <spring:url value="/owners/{ownerId}/pets/{petId}/visits/new" var="visitUrl"> <spring:param name="ownerId" value="${owner.id}"/> <spring:param name="petId" value="${pet.id}"/> </spring:url> Add Visit 	 </access:creation>

and you will see, the buttons only appear when you are allowed to click on it (that is, when you are logged in as an owner). Configuring the vet.jsp the same way remains as an exercise to you. Don't forget to insert the tablib for access. And so we are at the end of this tutorial. Our application fulfills the requirements from the first page.
You are now able to integrate JPA Security in your spring-managed application and know to customize your JSPs to reflect the current security context.
As you could see, when walking through the tutorial, we focused on business-logic and authentication. Due to the integration of JPA Security we needed not to implement much authorization-logic within our domain-model. That code was just a very little part at the end of the tutorial.
For further questions and suggestions please e-mail me at<EMAIL_ADDRESS>| Previous: Authentication | Up: Tutorial | End of book |


001/* 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017package org.apache.commons.collections4.iterators; 018 019import java.util.Iterator; 020 021/** 022 * An LazyIteratorChain is an Iterator that wraps a number of Iterators in a lazy manner. 023 * <p> 024 * This class makes multiple iterators look like one to the caller. When any 025 * method from the Iterator interface is called, the LazyIteratorChain will delegate 026 * to a single underlying Iterator. The LazyIteratorChain will invoke the Iterators 027 * in sequence until all Iterators are exhausted. 028 * <p> 029 * The Iterators are provided by {@link #nextIterator(int)} which has to be overridden by 030 * sub-classes and allows to lazily create the Iterators as they are accessed: 031 * <pre> 032 * return new LazyIteratorChain<String>() { 033 * protected Iterator<String> nextIterator(int count) { 034 * return count == 1 ? Arrays.asList("foo", "bar").iterator() : null; 035 * } 036 * }; 037 * </pre> 038 * <p> 039 * Once the inner Iterator's {@link Iterator#hasNext()} method returns false, 040 * {@link #nextIterator(int)} will be called to obtain another iterator, and so on 041 * until {@link #nextIterator(int)} returns null, indicating that the chain is exhausted. 042 * <p> 043 * NOTE: The LazyIteratorChain may contain no iterators. In this case the class will 044 * function as an empty iterator. 045 * 046 * @since 4.0 047 */ 048public abstract class LazyIteratorChain<E> implements Iterator<E> { 049 050 /** The number of times {@link #next()} was already called. */ 051 private int callCounter = 0; 052 053 /** Indicates that the Iterator chain has been exhausted. */ 054 private boolean chainExhausted = false; 055 056 /** The current iterator. */ 057 private Iterator<? extends E> currentIterator = null; 058 059 /** 060 * The "last used" Iterator is the Iterator upon which next() or hasNext() 061 * was most recently called used for the remove() operation only. 062 */ 063 private Iterator<? extends E> lastUsedIterator = null; 064 065 //----------------------------------------------------------------------- 066 067 /** 068 * Gets the next iterator after the previous one has been exhausted. 069 * <p> 070 * This method <b>MUST</b> return null when there are no more iterators. 071 * 072 * @param count the number of time this method has been called (starts with 1) 073 * @return the next iterator, or null if there are no more. 074 */ 075 protected abstract Iterator<? extends E> nextIterator(int count); 076 077 /** 078 * Updates the current iterator field to ensure that the current Iterator 079 * is not exhausted. 080 */ 081 private void updateCurrentIterator() { 082 if (callCounter == 0) { 083 currentIterator = nextIterator(++callCounter); 084 if (currentIterator == null) { 085 currentIterator = EmptyIterator.<E>emptyIterator(); 086 chainExhausted = true; 087 } 088 // set last used iterator here, in case the user calls remove 089 // before calling hasNext() or next() (although they shouldn't) 090 lastUsedIterator = currentIterator; 091 } 092 093 while (currentIterator.hasNext() == false && !chainExhausted) { 094 final Iterator<? extends E> nextIterator = nextIterator(++callCounter); 095 if (nextIterator != null) { 096 currentIterator = nextIterator; 097 } else { 098 chainExhausted = true; 099 } 100 } 101 } 102 103 //----------------------------------------------------------------------- 104 105 /** 106 * Return true if any Iterator in the chain has a remaining element. 107 * 108 * @return true if elements remain 109 */ 110 @Override 111 public boolean hasNext() { 112 updateCurrentIterator(); 113 lastUsedIterator = currentIterator; 114 115 return currentIterator.hasNext(); 116 } 117 118 /** 119 * Returns the next element of the current Iterator 120 * 121 * @return element from the current Iterator 122 * @throws java.util.NoSuchElementException if all the Iterators are exhausted 123 */ 124 @Override 125 public E next() { 126 updateCurrentIterator(); 127 lastUsedIterator = currentIterator; 128 129 return currentIterator.next(); 130 } 131 132 /** 133 * Removes from the underlying collection the last element returned by the Iterator. 134 * <p> 135 * As with next() and hasNext(), this method calls remove() on the underlying Iterator. 136 * Therefore, this method may throw an UnsupportedOperationException if the underlying 137 * Iterator does not support this method. 138 * 139 * @throws UnsupportedOperationException if the remove operator is not 140 * supported by the underlying Iterator 141 * @throws IllegalStateException if the next method has not yet been called, 142 * or the remove method has already been called after the last call to the next method. 143 */ 144 @Override 145 public void remove() { 146 if (currentIterator == null) { 147 updateCurrentIterator(); 148 } 149 lastUsedIterator.remove(); 150 } 151 152}


Tech Of The Formidable Car.
To be able to create the fastest car ever, we ought to research on this topic. With help from our Physics teacher and also the internet, we found about various shapes which make a body faster by overcoming various resisting forces or friction. One of them was the teardrop; a shape which looks like a drop of water, curved from one side and pointed from the other. It has the lowest drag coefficient (0.04). In other words, it is the most aerodynamic. There are some features of the teardrop that make it efficient. These can be adopted in a Formula 1 car to get the least drag coefficient and make it faster:
Fusion 360 proved to be the best software to design a car. After learning the basics, everyone created at least 2 designs which were later on judged by Mr. Kartik from Time of Sports. He checked all specifications and notified us if some component was against the regulations. This design was used by Sharan to show off his skills. With the use of his knowledge about Computer Aided Engineering (CAE) and Computer Aided Design (CAD), he worked on the base model. Tracing his previous steps, Sharan edited an incomplete model of the car. In the Create mode, he modified the plane of the car. It was made shorter and sleeker for better aerodynamic properties. The edges were filleted and made smooth upto 0.3 cm. He sub-divided each of the faces and easily transformed the half done model into a finished car. The sculpting environment was used and space was created for wheels by extrusion….


Introduction
-
Overview
Start here if you are new to Statiip GUI.
Homeworks
-
Homework 1
A simple spam email classifier using Naïve Bayes. -
Homework 2
A text classifier based on EM algorithm. -
Homework 3
HMM for Chinese Segmentation and Time Series Prediction. -
Homework 4
CRF.


WONDER BOYS RATING: 8 /10 --> Great movie
For more reviews and movie news, visit http://www.joblo.com/
I was suspicious about this film's rave reviews before going to see because it centered mostly around a writer going through a rough period of his life, and imagined that most critics' love for the film stemmed from their inevitable ability to relate with the protagonist, rather than the film's actual merits as a good ol' fashioned dose of entertainment for Joe Q. Public. Well, I'm happy to report that my suspicions were mostly unfounded and that, as a writer, I was able to relate stronger to the main character, but more importantly, as a movie watcher, the film was wholly entertaining and consistently gratifying.
PLOT: A teacher whose career as a writer peaked with one successful novel suddenly falls upon a couple of extremely unlucky days. First, his wife leaves him. Then, his mistress tells him that she's pregnant. And to top all that off, his eccentric editor comes to town looking for his latest novel, a book which he seems to have been working on forever. All the while, the man also has to deal with a brooding, young student of his who's loaded with potential but very difficult to get a handle on.
CRITIQUE: Inspirational. It's been quite some time that a movie was actually able to make me feel refreshed after a viewing, or simply nudge me into revisiting my own life under a different source of light, but this movie did just that. A great film featuring some notable performances all around, an excellent script which manages to simultaneously entertain and motivate those who fear that their best days are far behind them and enough interesting characters, plot twists and surprisingly, laughs, to gently embrace any willing audience member. I'll be honest and tell you that I was barely intrigued by this film's trailer, and basically just expected to be bored with the life and times of a hack writer currently undergoing a mid-life crisis, but boy, was I ever wrong! This movie didn't bore me for one second, in fact, it only took a few minutes for it to wrap me entirely within its cozy shell of wintertime and real-life characters. Their problems seemed genuine, their reactions all engaging, their emotions running deep and leading to more questions, a wonderful film to decipher and enjoy.
But besides its inspirational undertow, which drew fuel from the sparkplug talent of a younger writer opening the eyes of an older, worn man, it was this film's natural sense of irony and consistent humor that made me love it so much more. Excellent performances from Michael Douglas and Tobey Maguire also helped elevate this movie to its superior level, as well as the solid supporting cast led by the always strange Robert Downey Jr. (whose career seems to have taken off ever since he went to jail), Katie Holmes and Frances McDormand. Easily one of Michael's least stock and sincerely layered performances in years. Of course, it goes without saying (but I'll say it anyway) that the director of the film is also to be given a lot of credit for having the capacity to bring this interesting small tale to the big screen, elevating the level of his cast's talent and giving the film an absorbing feel and satisfying finale. Please don't go see this movie expecting to be bombarded by inspiration, because this film is more likely to invigorate if you enjoy watching good movies about intriguing, real people with various vices, simply trying to live through their difficult moments with a general sense of aloofness and determination.
Little Known Facts about this film and its stars: This film includes the last role that Robert Downey Jr. played before returning to jail on drug charges. Robert claims that it was his father who introduced him to the arena of drugs, when he offered him a marijuana joint at the age of 8. Good parenting, ol' chap! Tobey Maguire's first big-screen role was in 1993's drama THIS BOY'S LIFE starring his present-day buddy Leonardo DiCaprio. Tobey began acting only after his mother offered him $100 in high school for him to take drama instead of home ec. The rest as they say...is history. Tobey has acted with Katie Holmes before in the 1997 drama ICE STORM (6/10). Did you all know that director Curtis Hanson, who now commands respect after his Oscar-nominated and critically acclaimed film L.A. CONFIDENTIAL used to direct shlocky thrillers? His reign before L.A. CONFIDENTIAL included THE RIVER WILD, THE HAND THAT ROCKS THE CRADLE, BAD INFLUENCE and THE BEDROOM WINDOW. Actress Frances McDormand is married to writer/director Joel Coen, of "Coen Brothers" fame. This movie is based on a book of the same name by Michael Chabon. The novel was transformed to script by Steve Kloves, a director in his own right. Steve has directed movies on his own, including the Michelle Pfeiffer-starring THE FABULOUS BAKER BOYS back in 1989, and 1993's FLESH AND BONE starring Meg Ryan.
Review Date: February 27, 2000 Director: Curtis Hanson Writer: Steve Kloves Producers: Curtis Hanson and Scott Rudin Actors: Michael Douglas as Grady Tripp Tobey Maguire as James Leer Frances McDormand as Sara Gaskell Robert Downey Jr. as Terry Crabtree Genre: Dramedy Year of Release: 2000 ------------------------------------- JoBlo's Movie Emporium http://www.joblo.com/ ------------------------------------- (c) 2000 Berge Garabedian
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Take your pick through a wide selection of unique business designs from all over the world.
With an easy-to-use platform, you make your brand a part of the design. We make brand go hand in hand with unique design.
Take your pick, if needed you can get the product in record time. So, sit back, make a cup of coffee and enjoy your new set of plints delivered how you want them.
Lead Industrial Designer
Lead Material Designer
Lead Product Designer
Lead Designer


For people with some reading or vision disabilities, long lines of text can become a significant barrier. They have trouble keeping their place and following the flow of text. Having a narrow block of text makes it easier for them to continue on to the next line in a block. Lines should not exceed 80 characters


Toggle navigation
VideoStreamer
Account
Upload
Logout
{% if not request.MOBILE %}
Upload Video
Share your experience with the world
Home
uploads
{% endif %}
{% if not request.MOBILE %}
Home
About
Services
Contact
1 Column Portfolio
2 Column Portfolio
3 Column Portfolio
4 Column Portfolio
Single Portfolio Item
Blog Home 1
Blog Home 2
Blog Post
Full Width Page
Sidebar Page
FAQ
404
Pricing Table
{% endif %}
Upload your video
Supported formats are mp4, mov, wmv, avi, wav, webm, and ogg.
Video Name
Description
I agree that to terms and services
File input
Error:
Upload failed due to network issues. Check to see your network is working.
Error:
Video names may not contain spaces. Please rename the file and try again.
Try not to break anything.


namespace
AwerereThe Awerere Physics Engine namespace.
Classes
- class ABoxCollider
- A box collider attached to a Game object through a Physics object.
- class ACollideData
- A container holding information related to detected collisions.
- class ACollider
- A simple collider. Used to resolve collisions.
- class ACollisionEngine
- The collision engine responsible for resolution of collisions and generating hit events.
- class AFlag
- Array based collection of collision flag used in grid based resolution.
- class AHitEventList
- List of generated Hit events by collision engine.
- class APhysicsEngine
- Apply physics behaviours to gameobjects.
- class APhysicsMaterial
- A physics material used to characterise physics objects.
- class APhysicsObject
- A Physics Object that is used for all collision detection and responses.
- class APlaneCollider
- A 2D plane collider, equivalent to a straight line on a 2D screen.
- class ASphereCollider
- A Sphere Collider for handling spherical collisions.
- struct CollisionGrid
- Grid of cells arranged in a 2D matrix fashion.
Enums
- enum class EColliderType { SPHERE = 0x1, PLANE = 0x10, BOX = 0x100, NO_COLLIDER = 0x1000 }
- Specifiers for initialising different types of colliders.


*** Your Daily Free Stuff! - http://p.feedblitz.com/r.asp?l=83729917&f=927397&u=34705849&c=4674754
**In This Issue…
-Free Rave Hair Spray (First 200/day at 3pm ET Starting 11/11)
-Search Sweet Free Stuff
** Free Rave Hair Spray (First 200/day at 3pm ET Starting 11/11) - http://p.feedblitz.com/r.asp?l=83871330&f=927397&u=34705849&c=4674754
Starting 11/11 the first 200 people to enter the giveaway starting 3pm ET will receive a free Rave Hairspray.
The post Free Rave Hair Spray (First 200/day at 3pm ET Starting 11/11) appeared first on SweetFreeStuff.com.
• Email to a friend • Article Search - http://www.feedblitz.com/f/f.fbz?Search=927397;27861046;Free Stuff;Free Rave Hair Spray (First 200/day at 3pm ET Starting 11/11);4674754 • View comments - http://feeds.feedblitz.com/&;/49855571/0/sweetfreestuff&;Free-Rave-Hair-Spray-First-day-at-pm-ET-Starting/ • Track comments - http://www.feedblitz.com/f/f.fbz?Track=http%3a%2f%2ffeeds.feedblitz.com%2f&;%2f49855571%2f0%2fsweetfreestuff&;Free-Rave-Hair-Spray-First-day-at-pm-ET-Starting%2ffeed%2f&ref=comment:927397 •


FG earmarks over N4bn for reconstruction of Kano-Gwarzo-Dayi road
Kolade Adeyemi, Kano
The federal government has earmarked over N4 billion for total reconstruction of the dilapidated Kano-Gwarzo-Dayi road, which had been neglected for a long time.
The senator representing Kano North, Senator Barau Jibrin-Maliya, who disclosed this in an interview with The Nation in Kano on Sunday, expressed concerns over the deplorable condition of the road, which links Kano with Katsina, Sokoto, Zamfara and Kebbi states as well as the neighbouring Niger Republic.
Jibrin-Maliya, who is the chairman Senate committee on Appropriation, said all arrangements had been concluded for immediate take-off of the reconstruction of the 70km road with initial release of N2 billion.
Read Also: Sylva delivers LGA to Lyon, APC
According to him: “I have been engaging the Federal Government over the deteriorating condition of that important road adding that in the first quarter of 2020, the contract for the project will commence.”
He added the bill for the road project is before the National Assembly and as such N2 billion would be provided for the award of the contract.
He said the road, which suffered neglect for too long, when completed would boost social and economic activities of communities living along the the road and also the states that are linked to Kano state.
The road, which had not witnessed any major rehabilitation since it was constructed by the administration of former Military President, General Ibrahim Babangida, when completed, would reduce the number of accidents that are being recorded almost on daily basis.


WITNESS LIST
Natural Resources & Economic Development
April 7, 2015 9:00 AM
FOR COMMITTEE SUBSTITUTE (CSSB 100) :
Bittick, Susan (Ryan LLC), Austin, TX
FOR:
Richmond, Karin (Self), Austin, TX
Registering, but not testifying:
FOR:
Guerra, Victor G. (City of Edinburg), Austin, TX
Schwab, Carlton (Texas Economic Development Council), Austin, TX
Tagliabue, Tom (City of Corpus Christi), Corpus Christi, TX
AGAINST:
Ramirez, Ricardo (City of Sugar Land), City of Sugar Land, TX
ON:
Fuentes, Emma (TX Comptroller of Public Accounts), Austin, TX
Morin, Joe H. (Office of the Governor), Austin, TX
Scott, Zachary (Office of the Governor), Austin, TX
FOR:
Rendall, Robert (Midland Development Corporation), Midland, TX
Seal, Dan (Bay Area Houston Economic Partnership), Houston, TX
Walzer, Alma (Space X), McGregor, TX
ON:
Graf, Keith (Office of the Governor), Austin, TX
Registering, but not testifying:
FOR:
Davis, John (Midland Economic Development), Austin, TX
Harris, Dana (The Austin Chamber of Commerce), Austin, TX
Lanagan, Lindsay (City of Houston), Houston, TX
Martinez, Mario A. (Brownsville Eco. Development Corp.), Austin, TX
McGarry, Mignon (United Technologies Corporation), Austin, TX
Schwab, Carlton (Texas Economic Development Council), Austin, TX
Shelley, Dan (Lockheed Martin), Austin, TX
Welch, Pamela (Midland Development Corp.), Midland, TX
FOR:
Garritano, Tony (Elite Rodeo Association), Boerne, TX
Jones, Philip (Dallas Convention & Visitors Bureau), Dallas, TX
Mote, Bobby (ERA), Stephenville, TX
Registering, but not testifying:
FOR:
Barksdale, Jay (Dallas Regional Chamber), Dallas, TX
Holmes, Anna (City of Dallas), Dallas, TX
WITNESS LIST
Natural Resources & Economic Development
April 7, 2015 9:00 AM
Patterson, T.J. (City of Fort Worth), Fort Worth, TX
Schwab, Carlton (Texas Economic Development Council), Austin, TX
Sullivan, Brian (Texas Hotel & Lodging Association), Austin, TX
Weber, Andrew (Elite Rodeo Assn.), Wimberley, TX
ON:
Dupuy, Cary (Comptroller), Austin, TX
Wood, Robert (Comptroller), Austin, TX
FOR:
Craymer, Dale (Texas Taxpayers & Research Association), Austin, TX
AGAINST:
Lavine, Dick (Center For Public Policy Priorities), Austin, TX
ON:
Hockenyos, Jon (Self), Austin, TX
Wood, Robert (Comptroller), Austin, TX
Registering, but not testifying:
FOR:
Geslce, Matthew D. (Fort Worth Chamber of Commerce), Fort Worth, TX
Minick, Stephen (Texas Association of Business), Austin, TX
Schwab, Carlton (Texas Economic Development Council), Austin, TX
Registering, but not testifying:
FOR:
Rochelle, Martin (North Texas Municipal Water District), Austin, TX
FOR:
Terrell, Kimberly (City of Sugar Land), Sugar Land, TX
AGAINST:
McCraw, Lin (Texas Trail Lawyers Association), McKinney, TX
Registering, but not testifying:
FOR:
Brocato, Thomas (Texas Coalition for Affordable Power/Steering Committee of Cities
served by Oncor), Austin, TX
Hull, Mike (Texans for Lawsuit Reform), Austin, TX
Sturzl, Frank (City of Abilene), Austin, TX
ON:
Lloyd, Brian (Public Utility Commission of Texas), Austin, TX
Registering, but not testifying:
ON:
Blacklock, Jimmy (Governor's Office)
WITNESS LIST
Natural Resources & Economic Development
April 7, 2015 9:00 AM
FOR:
Bruun, Lance (Unclaimed Mineral Proceeds Commission), Corpus Christi, TX
ON:
Clayton, Bryant (Comptroller), Austin, TX
Registering, but not testifying:
AGAINST:
Davis, Tricia (Texas Royalty Council), Dripping Springs, TX
Miller, Lindsey (Texas Independent Producers and Royalty Owners Association), Austin,
TX
ON:
Torres, Frances (Comptroller), Austin, TX


?0
1
lem
8
10
The
New
York
copyright
reserved
Botanical
Garden
rtfU
NEW
YORK
BOTANICAL
GARDEN
EXPLORATION
OF
PORTO
RICO
No^
yã
(
ã
N.
L.
BRITTON
.
BCTOHfiÈ
KENNETH
II.
BOYNTON
*
co,','kctoh
ÇH
i
%
01334725
Legend -
Level of confidence that token is an accurately-transcribed word
extremely low
very low
low
undetermined
medium
high
very high


These metrics are not meant to be used as law but are a relative measure of the quality
and cost of a program
| style="color: #f00;"<%
}
if(totals.averageMaintainability >= 80) {
%> style="color: #0f0;"<%
}
%>>Average Maintainability |
style="color: #f00;"<%
}
if(totals.averageMaintainability >= 80) {
%> style="color: #0f0;"<%
}
%>><%- totals.averageMaintainability %> |
This is the relative maintainability of a program on a scale of 0-100. Higher is better. |
| Average Difficulty |
<%- totals.averageDifficulty %> |
This is a measure of how difficult it is to understand the code. Lower is better. |
| Total Cyclomatic Complexity |
<%- totals.totalCyclomaticComplexity %> |
This is how complex the code is based on the number of paths through the code. Lower is better. |
| = 10) {
%> style="color: #f00;"<%
}
if(totals.averageCyclomaticComplexity <= 2) {
%> style="color: #0f0;"<%
}
%>>Average Cyclomatic Complexity |
= 10) {
%> style="color: #f00;"<%
}
if(totals.averageCyclomaticComplexity <= 2) {
%> style="color: #0f0;"<%
}
%>><%- totals.averageCyclomaticComplexity %> |
This is the total complexity for the program from above. |
| Average Cyclomatic Density |
<%- totals.averageCyclomaticDensity %> |
This is a re-expression of the above metric as a percentage based on the lines of code. Lower is better. |
| Average Effort |
<%- totals.averageEffort %> |
This is the amount of effort needed to write the code based on it's difficulty and length |
| Total Effort |
<%- totals.totalEffort %> |
This is the total of the effort needed across the program. |
| Average Time |
<%- (totals.averageTime / 60 / 60).toFixed(2) %> Hours |
This is the estimated amount of time needed to write the software based on the effort required. |
| Total Time |
<%- (totals.totalTime / 60 / 60).toFixed(2) %> Hours |
This is the estimated amount of time needed to write the software based on the effort required. |
| Average Cost |
$<%- totals.averageCost %> |
This is the estimated cost to develop the software based on the time needed to develop it. |
| Total Cost |
$<%- totals.totalCost %> |
This is the estimated cost to develop the software based on the time needed to develop it. |
| = 2) {
%> style="color: #f00;"<%
}
if(totals.averageBugs <= 0.5) {
%> style="color: #0f0;"<%
}
%>>Average Bugs |
= 2) {
%> style="color: #f00;"<%
}
if(totals.averageBugs <= 0.5) {
%> style="color: #0f0;"<%
}
%>><%- totals.averageBugs %> |
This is the estimated number of bugs per file based on their length and complexity. |
| Total Bugs |
<%- totals.totalBugs %> |
This is the estimated number of bugs in the software. |
| = 200) {
%> style="color: #f00;"<%
}
%>>Average Logical SLOC |
= 200) {
%> style="color: #f00;"<%
}
%>><%- totals.averageLogicalSloc %> |
This is the number of lines of software that are considered logic. |
| Total Logical SLOC |
<%- totals.totalLogicalSloc %> |
This is the number of lines of software that are considered logic. |
| Average Physical SLOC |
<%- totals.averagePhysicalSloc %> |
This is the total lines of source code including up to 25% whitespace, but ignoring excessive formatting. |
| Total Physical SLOC |
<%- totals.totalPhysicalSloc %> |
This is the total lines of source code including up to 25% whitespace, but ignoring excessive formatting. |
| Average Dependencies |
<%- totals.averageDependencies %> |
This is the average number of dependencies per file in the program. |
| Total Dependencies |
<%- totals.totalDependencies %> |
This is the total Number of dependencies in the software.) |


Reading P J O'Rourke's Holidays In Hell (1988), I learned that in Communist Poland, during the mid-1980s, there was a postpunk band called Garaz w Leeds, or, in English, Garage in Leeds. Had they actually hailed from Leeds, or indeed from anywhere in the UK, this would have been a terrible, terrible name. But precisely because they were languishing behind the Iron Curtain, playing their reportedly very gloomy “Cold Wave” music, I think this is one of the most fantastic band names ever devised. Where are they now, I wonder?
UPDATE : They're on YouTube!


Answers to Most of Your Questions
The ceremony and reception will both be at _.
Their address is:_ Phone:_ Website:_
The ceremony will begin at _ p.m on May 4th. We kindly ask guests to arrive 10-15 minutes prior to grab a glass of bubbly and start mingling.
Due to the size of the wedding, we have not anticipated the need to reserve a hotel room block.
We personally recommend using AirBnB to book a room in Jersey City or Hoboken, NJ. They are quite affordable and will be close to the venue.
Keep in mind costs and availability may be better the further in advance you book.
For those traveling within NY/NJ, public transportation is a good option. Driving Out of towners
We’ve opted to request monetary donations in lieu of physical gifts. Of course, you can feel free to bring what you like - but we have enough stuff, we just want you! (And to not be in debt…)
Absolutely! Due to venue capacity, we ask that you limit your party additions to one per invitation. Let us know who will be accompanying you via the RSVP form.
Sooner than later h8tr.
Oh, you’re one of those people that reads things on paper! In the interest of saving time and money, we’ve sent e-mail invitations exclusively.
There’s lots of things to do. Some of our favorite activities in the 5 boroughs (if you’d like to travel into NYC) are: Broadway plays, Locally to Jersey City area, we like:
Yes. What kind you ask? We're figuring it out.
Mostly the drunken swaying kind.
On the RSVP form, we’ve included an option to note any specific concerns you have so that you can be well fed and as comfortable as possible!
Although we understand it’s traditional, we think we’ll simply stick with our birth names.
Absolutely! If you’d like to send some our way - (address/email/uploads?!)
The venue is booked until _. We’ll need a little time to clean up and load out
You are more than welcome to. Currently we are in need of hands to assist with setting up the venue as well as breaking down afterwards.
Reach out to us at _. We are reachable by phone as well for more urgent concerns. Can’t wait to see you!