IcoFont Icons
addons
address-book
adjust
alarm
anchor
archive
at
attachment
audio
automation
badge
bag-alt
bag
ban
bar-code
bars
basket
battery-empty
battery-full
battery-half
battery-low
beaker
beard
bed
bell
beverage
bill
bin
binary
binoculars
bluetooth
bomb
book-mark
box
briefcase
broken
bucket
bucket1
bucket2
bug
building
bulb-alt
bullet
bullhorn
bullseye
calendar
camera-alt
camera
card
cart-alt
cart
cc
charging
chat
check-alt
check-circled
check
checked
children-care
clip
clock-time
close-circled
close-line-circled
close-line-squared-alt
close-line-squared
close-line
close-squared-alt
close-squared
close
cloud-download
cloud-refresh
cloud-upload
cloud
code-not-allowed
code
comment
compass-alt
compass
computer
connection
console
contacts
contrast
copyright
credit-card
crop
crown
cube
cubes
dashboard-web
dashboard
data
database-add
database-locked
database-remove
database
delete
diamond
dice-multiple
dice
disc
diskette
document-folder
download-alt
download
downloaded
drag
drag1
drag2
drag3
earth
ebook
edit
eject
email
envelope-open
envelope
eraser
error
excavator
exchange
exclamation-circle
exclamation-square
exclamation-tringle
exclamation
exit
expand
external-link
external
eye-alt
eye-blocked
eye-dropper
eye
favourite
fax
file-fill
film
filter
fire-alt
fire-burn
fire
flag-alt-1
flag-alt-2
flag
flame-torch
flash-light
flash
flask
focus
folder-open
folder
foot-print
garbage
gear-alt
gear
gears
gift
glass
globe
graffiti
grocery
hand
hanger
hard-disk
heart-alt
heart
history
home
horn
hour-glass
id
image
inbox
infinite
info-circle
info-square
info
institution
interface
invisible
jacket
jar
jewlery
karate
key-hole
key
label
lamp
layers
layout
leaf
leaflet
learn
lego
lens
letter
letterbox
library
license
life-bouy
life-buoy
life-jacket
life-ring
light-bulb
lighter
lightning-ray
like
line-height
link-alt
link
list
listening
listine-dots
listing-box
listing-number
live-support
location-arrow
location-pin
lock
login
logout
lollipop
long-drive
look
loop
luggage
lunch
lungs
magic-alt
magic
magnet
mail-box
mail
male
map-pins
map
maximize
measure
medicine
mega-phone
megaphone-alt
megaphone
memorial
memory-card
mic-mute
mic
military
mill
minus-circle
minus-square
minus
mobile-phone
molecule
money
moon
mop
muffin
mustache
navigation-menu
navigation
network-tower
network
news
newspaper
no-smoking
not-allowed
notebook
notepad
notification
numbered
opposite
optic
options
package
page
paint
paper-plane
paperclip
papers
pay
penguin-linux
pestle
phone-circle
phone
picture
pine
pixels
plugin
plus-circle
plus-square
plus
polygonal
power
price
print
puzzle
qr-code
queen
question-circle
question-square
question
quote-left
quote-right
random
recycle
refresh
repair
reply-all
reply
resize
responsive
retweet
road
robot
royal
rss-feed
safety
sale-discount
satellite
send-mail
server
settings-alt
settings
share-alt
share-boxed
share
shield
shopping-cart
sign-in
sign-out
signal
site-map
smart-phone
soccer
sort-alt
sort
space
spanner
speech-comments
speed-meter
spinner-alt-1
spinner-alt-2
spinner-alt-3
spinner-alt-4
spinner-alt-5
spinner-alt-6
spinner
spreadsheet
square
ssl-security
star-alt-1
star-alt-2
star
street-view
support-faq
tack-pin
tag
tags
tasks-alt
tasks
telephone
telescope
terminal
thumbs-down
thumbs-up
tick-boxed
tick-mark
ticket
tie
toggle-off
toggle-on
tools-alt-2
tools
touch
traffic-light
transparent
tree
unique-idea
unlock
unlocked
upload-alt
upload
usb-drive
usb
vector-path
verification-check
wall-clock
wall
wallet
warning-alt
warning
water-drop
web
wheelchair
wifi-alt
wifi
world
zigzag
zipped


World Class Speakers
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque.
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio.
The SpeakersAt vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque.
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque.
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque.
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque.
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque.
At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque.
Expert Designer
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat.
Expert Designer
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat.
Expert Designer
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat.
Expert Designer
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
In this session we will discuss about digital topics in detail. You need laptops and other tech support equipment. This session will last for 2 hours. So prepare yourself.
$ 49.99
$ 79.99
$ 139.99
I've got lot experiences! I'm always impressed with the event. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip. John, Customer
Exceeded my expectations! Just wow! I'm always impressed with the event. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco. Sandra, Customer
Better than I think! I'm always impressed with the event. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip. Michael, Customer
Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo.


Chef Donath:
Good job! I'll get started then! This is going to take a while. Please wait.
"I'll wait."


github-user-map
A simple app that looks up a github user and shows their approximate location on a map.
Adapted from ReactJS: GitHub User Cards.
I ended up making two versions:
React
Made during a MaptimePDX meetup led by jgravois.
hyperx
Made to compare a hyperx/main-loop implementation with react. Way less tooling headaches.
See also: yo-yo.


{% extends "set_app/base/set_app_base.html" %} {% block body_block %}
Entity type: {{ customer_detail.entity_type }}
First name: {{ customer_detail.first_name }}
Last name: {{ customer_detail.last_name }}
Company name: {{ customer_detail.company_name }}
Tel 1: {{ customer_detail.tel1 }}
Tel 2: {{ customer_detail.tel2 }}
Email: {{ customer_detail.email }}
Address: {{ customer_detail.address }}
Postcode: {{ customer_detail.postcode }}
Warehouse: {{ customer_detail.warehouse }}


A lot of articles introduce the perceptron showing the basic mathematical formulas that define it, but without offering much of an explanation on what exactly makes it work.
And surely it is possible to use the perceptron without really understanding the basic math involved with it, but is it not also fun to see how all this math you learned in school can help you understand the perceptron, and in extension, neural networks?
I also got inspired for this article by a series of articles on Support Vector Machines, explaining the basic mathematical concepts involved, and slowly building up to the more complex mathematics involved. So that is my intention with this article and the accompaning code: show you the math envolved in the preceptron. And, if time permits, I will write articles all the way up to convolutional neural networks.
Of course, when explaining the math, the question is: where do you start and when do you stop explaining? There is some math involved that is rather basic, like for example what is a vector?, what is a cosine?, etc… I will assume some basic knowledge of mathematics like you have some idea of what a vector is, you know the basics of geometry, etc… My assumptions will be arbitraty, so if you think i’m going too fast in some explanations just leave a comment and I will try to expand on the subject.
So, let us get started.
This article is about the math involved in the perceptron and NOT about the code used and written to illustrate these mathematical concepts. Although it is not my intention to write such an article, never say never…
A perceptron basically takes some input values, called “features” and represented by the values \(x_1, x_2, ... x_n\) in the following formula, multiplies them by some factors called “weights”, represented by \(w_1, w_2, ... w_n\), takes the sum of these multiplications and depending on the value of this sum outputs another value \(o\):
There are a few types of perceptrons, differing in the way the sum results in the output, thus the function \(f()\) in the above formula.
In this article we will build on the Rosenblatt Perceptron. It was one of the first perceptrons, if not the first. During this article I will simply be using the name “Perceptron” when referring to the Rosenblatt Perceptron
We will investigate the math envolved and discuss its limitations, thereby setting the ground for the future articles.
So, what the perceptron basically does is take some linear combination of input values or features, compare it to a threshold value \(b\), and return 1 if the threshold is exceeded and zero if not.
The feature vector is a group of characteristics describing the objects we want to classify.
In other words, we classify our objects into two classes: a set of objects with characteristics (and thus a feature vector) resulting in in output of 1, and a set of objects with characteristics resulting in an output of 0.
If you search the internet on information about the perceptron you will find alternative definitions which define the formula as follows:
We will see further this does not affect the workings of the perceptron
Lets digg a little deeper:
Remember the introduction. In it we said the perceptron takes some input value \([x_1, x_2, ..., x_i, ..., x_n]\), also called features, some weights \([w_1, w_2, ..., w_i, ..., w_n]\), multiplies them with each other and takes the sum of these multiplications:
This is the definition of a Linear Combination: it is the sum of some terms multiplied by constant values. In our case the terms are the features and the constants are the weights.
If we substitute the subscript by a variable \(i\), then we can write the sum as
This is called the Capital-sigma notation, the \(\sum\) represents the summation, the subscript \(_{i=1}\) and the superscript \(^{n}\) represent the range over which we take the sum and finally \(w_ix_i\) represents the “things” we take the sum of.
Also, we can see all \(x_i\) and all \(w_i\) as so-called vectors:
In this, \(n\) represents the dimension of the vector: it is the number of scalar elements in the vector. For our discussion, it is the number of characteristics used to describe the objects we want to classify.
In this case, the summation is the so-called dot-product of the vectors:
About the notation: we write simple scalars (thus simple numbers) as small letters, and vectors as bold letters. So in the above \(x\) and \(w\) are vectors and \(x_i\) and \(w_i\) are scalars: they are simple numbers representing the components of the vector.
Ok, I may have gone a little too fast there by introducing vectors and not explaining them.
To make things more visual (which can help but isn’t always a good thing), I will start with a graphical representation of a 2-dimensional vector:
The above point in the coordinate space \(\mathbb{R}^2\) can be represented by a vector going from the origin to that point:
We can further extend this to 3-dimensional coordinate space and generalize it to n-dimensional space:
In text (from Wikipedia):
A (Euclidean) Vector is a geometric object that has a magnitude and a direction
The magnitude of a vector, also called its norm, is defined by the root of the sum of the squares of it’s components and is written as \(\lvert\lvert{\mathbf{a}}\lvert\lvert\)
In 2-dimensions, the definition comes from Pythagoras’ Theorem:
Extended to n-dimensional space, we talk about the Euclidean norm:
Try it yourself:
Vector Magnitude interactive
The direction of a 2-dimensional vector is defined by its angle to the positive horizontal axis:
This works well in 2 dimensions but it doesn't scale to multiple dimensions: for example in 3 dimensions, in what plane do we measure the angle? Which is why the direction cosines where invented: this is a new vector taking the cosine of the original vector to each axis of the space.
We know from geometry that the cosine of an angle is defined by:
So, the definition of the direction cosine becomes
This direction cosine is a vector \(\mathbf{v}\) with length 1 in the same direction as the original vector. This can be simply determined from the definition of the magnitude of a vector:
This vector with length 1 is also called the *unit vector*.
Try it yourself:
Vector Direction interactive
Say we have two vectors:
The sum of two vectors is the vector resulting from the addition of the components of the orignal vectors.
Try it yourself:
Sum of vectors interactive
The difference of two vectors is the vector resulting from the differences of the components of the original vectors:
Try it yourself:
Difference of vectors interactive
Say we have a vector \(\mathbf{a}\) and a scalar \(\lambda\) (a number):
A vector multiplied by a scalar is the vector resulting of the multiplication of each component of the original vector by the scalar:
Try it yourself:
Scalar Multiplication for vectors interactive
The dot-product is the scalar (a real number) resulting of taking the sum of the products of the corresponding components of two vectors:
Geometrically, this is equal to the multiplication of the magnitude of the vectors with the cosine of the angle between the vectors:
There are several proofs for this, which I will not repeat here. The article on SVM’s has one, and this article on the dot-product also contains a very understadable proof.
From this last definition we can make two important assertions.
First, if, for two vectors with a magnitude not zero, the dot product is zero, then those vectors are perpendicular. Because the magnitude of the vectors is not zero, the dot product can only be zero if the \(cos(\alpha)\) is zero. And thus if the angle \(\alpha\) between the vectors is either 90 or -90 degrees. And thus only if the two vectors are perpendicular. (Try it out in the interactive example below!)
Second, if one of the two vectors has a magnitude of 1, then the dot product equals the projection of the second vector on this unit vector. (Try it out in the interactive example below!). This can also easily be seen:
Try it yourself:
Dot Product interactive
The dot product is commutative:
Try it yourself:
Dot Product commutativity interactive
The dot product is distributive:
Try it yourself:
Dot Product distributivity interactive
The scalar multiplication property:
Okay, now you know what a Vector is. Let us continue our journey.
So, we where saying: The sum of the products of the components of the feature and weight vector is equal to the Dot-product.
The perceptron formula now becomes:
Remember what we did originally: we took a linear combination of the input values \([x_1, x_2, ..., x_i, ..., x_n]\) which resulted in the formula:
You may remember a similar formula from your mathematics class: the equation of a hyperplane:
Or, with dot product notation:
So, the equation \(\mathbf{w} \cdot \mathbf{x} > b\) defines all the points on one side of the hyperplane, and \(\mathbf{w} \cdot \mathbf{x} <= b\) all the points on the other side of the hyperplane and on the hyperplane itself. This happens to be the very definition of “linear seperability”
Thus, the perceptron allows us to seperate our feature space in two convex half spaces.
Let us step back for a while: what is this hyperplane and convex half spaces stuff?
Never mind this hyperplane stuff. Let’s get back to 2-dimensional space and write the equation of a line as most people know it:
Let us even simplify this more and consider just:
Now, if we fix the values for \(a\) and \(b\) and solve the equation for various \(x\) and \(y\) and plot these values we see that the resulting points are all on a line.
If we consider \(a\) and \(b\) as the components of a vector \(\mathbf{l}\), and \(x\) en \(y\) as the components of a vector \(\mathbf{p}\), then the above is the dot product:
Then:
So, how come that setting our dot product to zero in two dimensions appears to be a line through the origin?
Remember that when we discussed the dot product, we came to the conclusion that if the dot product is zero for two vectors with magnitude not zero, then those vectors need to be perpendicular. So, if we fix the coordinates of the vector \(\mathbf{l}\), thus fix the values \(a\) and \(b\), then the above equation resolves to all vectors perpendicular to the vector \(\mathbf{l}\), which equals to all points on the line perpendicular to the vector \(\mathbf{l}\) and going through the origin.
So, vector \(\mathbf{l}\) determines the direction of the line: the vector is perpendicular to the direction of the line.
Try it yourself:
A line through the origin interactive
Above, we simplified our equation resulting in the equation of a line through the origin. Let us consider the full equation again:
Rearranging a bit:
And replacing \(-c\) with \(d\):
Here also, we can consider replacing this with the dot product of vectors:
Then:
We can “normalize” this equation by dividing it through the length of \(\mathbf{l}\), resulting in the dot product of the unit vector in the direction of \(\mathbf{l}\): \(\mathbf{u}\) and the vector \(\mathbf{p}\):
And as seen above when discussing the dot product, this equals the magnitude of the projection of vector \(\mathbf{p}\) onto the unit vector in the direction of \(\mathbf{l}\). So, the above equation gives all vectors whose projection on the unit vector in the direction of \(\mathbf{l}\) equals \(d/{\lvert\lvert{\mathbf{l}}\lvert\lvert}\)
This equals all vectors to points on the line perpendicular to \(\mathbf{l}\) and at a distance \(d/{\lvert\lvert{\mathbf{l}}\lvert\lvert}\) from the origin.
Try it yourself:
A line at some distance from the origin interactive
Again, through vectors:
If we consider the components \(a\), \(b\) and \(c\) as a vector \(\mathbf{m}\), and \(x\), \(y\) and \(z\) as a vector \(\mathbf{p}\), then the above is the dot product:
Then:
Again, if the dot product is zero for two vectors with magnitude not zero, then those vectors need to be perpendicular. So, if we fix the coordinates of the vector \(\mathbf{m}\), thus fix the values \(a\), \(b\) and \(c\), then the above equation resolves to all vectors perpendicular to the vector \(\mathbf{m}\), which equals to all points in the plane perpendicular to the vector \(\mathbf{m}\) and going through the origin.
A similar line of thought can be followed for the equation:
Here also, we can consider replacing this with the dot product of vectors:
Normalizing by dividing through the length of \(\mathbf{m}\), with \(\mathbf{u}\) being the unit vector in the direction of \(\mathbf{m}\):
And as seen above when discussing the dot product, this equals the magnitude of the projection of vector \(\mathbf{p}\) onto the unit vector in the direction of \(\mathbf{m}\). So, the above equation gives all vectors whose projection on the unit vector in the direction of \(\mathbf{m}\) equals \(d/\lvert\lvert{\mathbf{m}}\lvert\lvert\)
This equals all vectors to points in the plane perpendicular to \(\mathbf{m}\) and at a distance \(d/\lvert\lvert{\mathbf{m}}\lvert\lvert\) from the origin.
In 3-dimensional space, we defined the equation of a plane as:
If we use the symbols we are customed to in our discussion of the percpetron rule, we can write:
This may be a bit confusing, but the \(b\) in this last equation has nothing to do with the \(b\) in the first equation
If we extend this to multiple dimensions, we get:
In multi-dimensional space we talk about hyper-planes: like a plane is a line in 3-dimensional space, a hyper-plane is a plane n multi-dimensional space.
Ok, lets go back to the definition of the perceptron:
So, we output 1 if the dot product of the feature vector \(\mathbf{x}\) and weight vector \(\mathbf{w}\) is larger then \(b\), and zero \(\text{otherwise}\). But what is \(\text{otherwise}\) ?
Well \(\text{otherwise}\) is:
Ah, equal to or less then \(b\). We know the equal to part, that is our above hyper-plane.
So what remains is the less than part
It just so happens the inequality equations define two so called half-spaces: one half space above the hyper-plane and one half-space below the hyper-plane.
Let us again take the equation of a hyperplane:
This hyperplane seperates the space \(\mathbb{R}^n\) in two convex sets of points, hence the name half-space.
One half-space is represented by the equation
The other by
Let us analize the first equation. First, convert it to a vector representation:
Normalizing:
So, the geometric interpretation is the set of all vectors to points with a projection on the unit vector in the direction of the weight vector \(\mathbf{w}\) larger then some constant value \(\frac{b}{\lvert\lvert{\mathbf{w}}\lvert\lvert}\).
A similar reasoning can be made for the equation \(\mathbf{w} \cdot \mathbf{x} < b\) : it results in the set of vectors to points with a projection on the unit vector in the direction of the weight vector \(w\) smaller then some constant value \(\frac{b}{\lvert\lvert{\mathbf{w}}\lvert\lvert}\).
We can imagine these two sets as being the set of all points on either one side or the other side of the hyper-plane.
These half spaces are also convex.
The definition of convex goes as follows (from Wikipedia):
in a Euclidean space, a convex region is a region where, for every pair of points within the region, every point on the straight line segment that joins the pair of points is also within the region.
Mathematically this can be more rigourously be described as:
A set \(\mathbf{C}\) in \(\mathbf{S}\) is said to be convex if, for all points \(A\) and \(B\) in \(\mathbf{C}\) and all \(\lambda\) in the interval \((0, 1)\), the point \((1 − {\lambda})A + {\lambda}B\) also belongs to \(C\).
The equation \((1 − {\lambda})A + {\lambda}B\) is actually the equation of a line segment between points \(A\) and \(B\). We can see this from following:
Let us define two points in the multi-dimensional space:
Then a line segment going from point \(A\) to point \(B\) can be defined as:
with \(\vec{OA}\) being the vector going from the origin \(O\) to point \(A\) and \(\vec{AB}\) the vector going from point \(A\) to point \(B\). \(\lambda\) is in the interval (0, 1)
This is simply the addition of the vector \(\mathbf{a}\) with a part of the vector going from point \(A\) to point \(B\)
Try it yourself:
Line segment interactive
We know from the section on vector math above that the vector going from \(A\) to \(B\) is equal to \(\mathbf{b}-\mathbf{a}\) and thus we can write:
Now we can proof the half spaces separated by the hyper-plane are convex:
Let us consider the upper half plane. For any two vectors \(\mathbf{x}\), \(\mathbf{y}\) in that half space we have:
If the half space is convex, then each point resulting from the equation
must belong to the half space, which is equal to saying that every point on the line segment between the endpoints \(X\) and \(Y\) of the vectors must belong to the half space. Substituation in the equation of the half space gives:
Then, by the distributive and scalar multiplication properties of the dot product we can re-arrange to:
Since we now that \(0 < {\lambda} < 1\) and \(\mathbf{w} \cdot \mathbf{x} > d\) and also \(\mathbf{w} \cdot \mathbf{y} > d\) then the above inequality must also hold true. And thus we have proven that the half space is indeed convex.
Try it yourself:
Convex interactive
Not Convex interactive
Thus, getting back at our formula for the preceptron:
We can now see how this formula divides our feature-space in two convex half spaces. Mind the word convex here: it does not just divide the feature space in two subspaces, but in two convex subspaces.
This means that we cannot seperate feature points into classes that are not convex. Visually in two-dimensional space, we cannot seperate features like this:
If you’ve been reading about the perceptron allready, you may have read about the fact that it cannot solve the XOR problem: it cannot seperate the inputs according to the XOR function. That is exactly because of the above: the outcome is not convex, hence is not linearily seperable.
If you search the internet for the formula of the Rosenblatt perceptron, you will also find some in which the factor \(b\) is no longer present. What happened to it? Some re-arrangement of the components of the addition make it end up in the dot product:
Now, we can define \(b' = -b\)
Finally, we can take the factor 1 inside the feature vector by defining \(x_0 = 1\) and \(b'\) inside the weight vector by defining \(w_0 = b'\). This lets us write:
And by taking \(w_0\) and \(x_0\) inside the vector:
We can now write:
So we have a function which classifies our features into two classes by multiplying them with a weight and if the result is positive assigns them a label “1” and “0” otherwise.
Further in the article I will leave the accent of the vectors and just write \(\mathbf{w}\) and \(\mathbf{x}\) which have the \(w_0\) and \(x_0\) included.
Try it yourself:
Perceptron math interactive
This assigning them a label “1” and “0” otherwise is the definition of the Heaviside Step Function.
The Heaviside step function is also called the unit step function and is given by:
If you search the internet for the definition of the Heaviside step function, you may find alternative definitions which differ from the above on how the result of the function is defined when \(x=0\)
The Heaviside step function is discontinuous. A function \(f(x)\) is continuous if a small change of \(x\) results in a small change in the outcome of the function. This is clearly not the case for the Heaviyside step function: if at 0 and moving to the negative side then the function outcome changes suddenly from 1 to 0.
I will not elaborate much more on this function not being continuous because it is not important for the discussion at hand. In a next article, when we discuss the ADALINE perceptron, I will get back to this.
We’ve covered a lot about how the perceptron classifies the features in two linearily seperable classes using the weight vector. But the big question is: if we have some samples of features for which we know the resulting class, how can we find the weights so that we can also classify unknown values of the feature vector? Or, how can we find the hyperplane sepeating the features?
This is where the perceptron learning rule comes in.
First, we define the error \(e\) as being the difference between the desired output \(d\) and the effective output \(o\) for an input vector \(\mathbf{x}\) and a weight vector \(\mathbf{w}\):
Then we can write the learning rule as:
In this \(\mathbf{w}_{i+1}\) is the new weight vector, \(\mathbf{w}_{i}\) is the current weight vector and \(e\) is the current error. We initialize the weight vector with some random values, thus \(\mathbf{w}_0\) has some random values. You will find similar definitions of the learning rule which also use a learning rate factor. As we will show later when we proof the convergence of the learning rule this factor is not really necessary. That is why we leave it out here.
Why does this work? First, let us analyse the error function:
As stated before, in this \(d\) and \(o\) are resp. the desired output and the effective output of the perceptron. We know from the definition of the preceptron that its output can take two values: either 1 or 0. Thus the error function can take following values:
| prediction | desired (d) | effective (o) | e |
|---|---|---|---|
| correct | 1 | 1 | 0 |
| correct | 0 | 0 | 0 |
| wrong | 0 | 1 | -1 |
| wrong | 1 | 0 | 1 |
From the above we can see that
Let’s see what this gives geometrically. The following discussion gives an intuitive feel of what the learning algorithm does, but is by no means a mathematically rigourous discussion. We start with ignoring the threshold factor of the vectors: that is, we ignore \(w_0\) and \(x_0\).
So, we are left with the factors determining the direction of the seperating hyperplane. Let us now plot some examples and see what happens.
The error \(e\) is -1, so we need to subtract the new feature vector from the current weight vector to get the new weight vector:
Remember that the weight vector is actually perpendicular to the hyperplane. The result of subtracting the incorrectly classified vector from the weight vector is a rotation of the separating hyperplane in the direction of the incorrectly classified point. In other words, we rotate the separating hyperplane in such a way that our newly learned point is closer to the half-space it belongs in.
The error \(e\) is 1, so we need to add the new feature vector to the current weight vector to get the new weight vector:
The result of adding the vector to the weight vector is a rotation of the separating hyperplane in the direction of the incorrectly classified point. In other words, we rotate the separating hyperplane in such a way that our newly learned point is closer to the half-space it belongs in.
Try it yourself:
Perceptron Learning interactive
The above gives an intuïtive feel of what makes the learning rule work, but is not a mathematical prove. It can be proven mathematically that the perceptron rule will converge to a solution in a finite number of steps if the samples given are linearily seperable.
Read that sentence again please. First, we talk about a finite number of steps but we don’t now what that number is up front. Second, this is only true if the samples given are linearly seperable. Thus, if they are not linearly seperable we can keep on learning and have no idea when to stop !!!
I will not repeat the proof here because it would just be repeating some information you can find on the web. Second, the Rosenblatt perceptron has some problems which make it only interesting for historical reasons. If you are interested, look in the references section for some very understandable proofs go this convergence. Of course, if anyone wants to see it here just leave a comment.
The basic formula classifies the features by weighting them into two seperate classes.
We have seen that the way this is done, is by comparing the dot product of the feature vector \(\mathbf{x}\) and the weight vector \(\mathbf{w}\) with some fixed value \(b\). If the dot product is larger then this fixed value, then we classisify them info one class by assigning them a label 1, otherwise we put them into the other class by assigning them a label 0.
Because the formula of the perceptron is basically a hyperplane, we can only classify things into two classes which are lineary seperable. A first class with things above the hyper-plane and a second class with things below the hyper-plane.
We’ve covered a lot of ground here, but without using a lot of the lingo surrounding perceptrons, neural networks and machine learning in general. There was already enough lingo with the mathematics that I didn’t want to bother you with even more definitions.
However, once we start diving deeper we’ll start uncovering some pattern / structure in the way we work. At that point, it will be interesting to have some definitions which allow us to define steps in this pattern.
So, here are some definitions:
Feed forward single layer neural network
What we have now is a feed forward single layer neural network:
Neural Network
A neural network is a group of nodes which are connected to each other. Thus, the output of certain nodes serves as input for other nodes: we have a network of nodes. The nodes in this network are modelled on the working of neurons in our brain, thus we speak of a neural network. In this article our neural network had one node: the perceptron.
Single Layer
In a neural network, we can define multiple layers simply by using the output of preceptrons as the input for other perceptrons. If we make a diagram of this we can view the perceptrons as being organised in layers in which the output of a layer serves as the input for the next layer.
In this article we also have a single layer.
Feed Forward
This stacking of layers on top of each other and the output of previous layers serving as the input for next layers results in feed forward networks. There is no feedback of upper layers to lower layers. There are no loops. For our single perceptron we also have no loops and thus we have a feed forward network.
Integration function
The calculation we make with the weight vector w and the feature vector x is called the integration function. In the Rosenblatt perceptron the integration function is the dot-product.
Bias
The offset b with which we compare the result of the integration function is called the bias.
Activation function (transfer function)
The output we receive from the perceptron based on the calculation of the integration function is determined by the activation function. The activation function for the Rosenblatt perceptron is the Heaviside step function.
Supervised learning
Supervised learning is a type of learning in which we feed samples into our algorithm and tell it the result we expect. By doing this the neural network learns how to classify the examples. After giving it enough samples we expect to be able to give it new data which it will automatically classify correctly.
The opposite of this is Unsupervised learning in which we give some samples but without the expected result. The algorithm is then able to classify these examples correctly based on some common properties of the samples.
There are other types of learning like reïnforcement learning which we will not cover here.
Online learning
The learning algorithm of the Rosenblatt preceptron is an example of an online learning algorithm: with each new sample given the weight vector is updated;
The opposite of this is batch learning in which we only update the weight vector after having fed all samples to the learning algorithm. This may be a bit abstract here but we’ll clarify this in later articles.
The main problem of the Rosenblatt preceptron is its learning algorithm. Allthough it works, it only works for linear seperable data. If the data we want to classify is not linearily seperable, then we do not really have any idea on when to stop the learning and neither do we know if the found hyperplane somehow minimizes the wrongly classified data.
Also, let’s say we have some data which is linearily seperable. There are several lines which can seperate this data:
We would like to find the hyperplane which fits the samples best. That is, we would like to find a line similar to the following:
There are of course mathematical tools which allow us to find this hyperplane. They basically all define some kind of error function and then try to minimize this error. The error function is typically defined as a function of the desired output and the effective output just like we did above. The minimization is done by calculating the derivative of this error function. And herein is the problem for the Rosenblatt preceptron. Because the output is defined by the Heaviside Step function and this function does not have a derivative, because it is not continuous, we cannot have a matematically rigourous learning method.
If the above is gong a little to fast, don’t panic. In the next article about the ADALINE perceptron we’ll dig deeper into error functions and derivation.
For the SVG illustrations I use the well known D3.js library
For databinding Knockout.js is used
Mathematical formulas are displayed using MathJax
The inspiration for writing this article and a good introduction to vector math: SVM - Understanding the math - Part 2
Some wikipedia articles on the basics of vectors and vector math:
Euclidean vector
Magnitude
Direction cosine
An understandable proof of why the dot-product is also equal to he product of the length of the vectors with the cosine of the angle between the vectors:
Proof of dot-product
Hyperplane
Linear separability
Two math stackexchange Q&A’s on the equation of a hyperplane:
Hyperplane equation intuition / geometric interpretation
Why is the product of a normal vector and a vector on the plane equal to the equation of the plane?
Definition of convexity: Convex set
Discussing convexity, we also discussed Line segments: Line segment
Proving a half-plane is convex: How do I prove that half a plane is convex?
A more in depth discussion of convexity: Lecture 1 Convex Sets
Wikipedia on the perceptron: Perceptron
Another explanation of the perceptron: The Simple Perceptron
A Peceptron is a special kind of linear classifier
Following article as an interesting view on what they call the duality of input and weight-space: 3. Weighted Networks – The Perceptron
Following article gives another intuitive explanation on why the learning algorithm works: Perceptron Learning Algorithm: A Graphical Explanation Of Why It Works
An animated gif of the perceptron learning rule: Perceptron training without bias
This YouTube video presents a very understandable proof: Lec-16 Perceptron Convergence Theorem
A written version of the same proof can be found in this pdf: CHAPTER 1 Rosenblatt’s Perceptron By the way, there is much more inside that pdf then just the proof.


We optimize users!
- engage bricks-and-clicks supply-chains
- orchestrate user-centric supply-chains
- embrace world-class vortals
- transform one-to-one e-tailers
- productize interactive systems
- mesh global web-readiness
- visualize dynamic metrics
- monetize clicks-and-mortar networks
- monetize out-of-the-box channels
- deliver magnetic platforms
- maximize B2C web services


git-gitlab
- gitlab command line interface
command line tool that wrap git in order to extend it with extra features and commands that make working with GitLab easier.
git-lab
[global options] command [command options] [arguments...]
git lab clone
git lab merge-request
git lab merge
git lab show
git lab help
git-lab wraps git in order to extend it with extra features and commands that make working with GitLab easier.
git lab clone
Clone the specified repository
git lab merge-request
[arguments]Create merge request
git lab merge
[arguments]Merge specified merge request
git lab show
[arguments]Show issue, merge request, wiki and repository
git lab help
Shows a list of commands or help for one command
https://github.com/numa08/git-gitlab/issues
https://github.com/numa08/git-gitlab/contributors
git(1), git-clone(1), git-merge(1), git-show(1) https://github.com/numa08/git-gitlab


Parin's Personal Notes Library
G8/Sem2/index
ExtraCurricular/AP-Biology/index
ExtraCurricular/AP-Chemistry/index
ExtraCurricular/CS50AP/index
ExtraCurricular/Astronomy-Cosmology/index
GentooInstall
TODO:
-
Organic Chemistry
-
Material Science
-
Development of Periodic Tables
-
Biochemistry
-
Microbiology
-
Biotechnology
-
Stem Cells and DNA
-
Micro climate Air Pollution
-
Chip and Dell
-
Beginning of the EARTH
-
Chemistry Compounds
-
Half-Life of Radioactivity
-
Physics gravity between objects
-
Light
-
Rocket Energy Levels
-
Relative Velocity - Physics
-
General Science


Preparation time
less than 30 mins
Cooking time
30 mins to 1 hour
Serves
Serves 4
Gently dry-fry the spices in a large frying pan over a medium heat for 2-3 minutes, until fragrant and toasted. Transfer to a pestle and mortar and grind together.
In same pan, heat the oil and add the steak pieces. Fry for 2-3 minutes, stirring occasionally, until golden-brown all over, then remove from the pan.
Add the onion to the pan. Reduce the heat and gently fry for 10-12 minutes, until soft and golden-brown.
Add the garlic and chillies and fry for two minutes.
Add the ground spice mixture, tomatoes, ginger and turmeric and bring to the boil.
Add the stock and bring back to the boil. Reduce the heat and simmer for 25 minutes, until thickened.
Return the meat to the sauce and allow to warm through.
Meanwhile, for the noodles, heat the oil in a deep, heavy-bottomed pan until a breadcrumb sizzles and turns brown when dropped in it. (CAUTION: hot oil can be dangerous. Do not leave unattended.)
Add the noodles to the oil in small batches and fry for 1-2 minutes, or until they puff up and become crisp.
Carefully remove the cooked noodles from the oil with a slotted spoon and drain on kitchen paper.
To serve, place a large spoonful of basmati rice onto each plate and spoon the curry over or alongside.
Place a small handful of the crispy noodles onto the curry and serve with lime wedges on the side.


Using existing Database
OABuilder keeps a listing of all of the dataase changes. This is used to then generate a database program/script to make the appropriate to match the OAModel.
See the Code Generation for further information.


FROM GABRIEL BAKI, COCODY-RIVIERA II ABIDJAN,COTE D'IVOIRE GOOD DAY IN ORDER TO TRANSFER OUT (USD <IP_ADDRESS> MILLION DOLLARS) FROM OUR BANK. I HAVE THE COURAGE TO ASK YOU TO LOOK FOR A RELIABLE AND HONEST PERSON WHO WILL BE CAPABLE FOR THIS IMPORTANT BUSINESS BELIEVING THAT YOU WILL NEVER LET ME DOWN EITHER NOW OR IN FUTURE. I AM, GABRIEL BAKI .THE EASTERN DISTRICT BANK MANAGER OF ONE OF BANK HERE IN COTE D IVOIRE. THERE IS AN ACCOUNT OPENED IN THIS BANK IN 1980 AND SINCE 1990 NOBODY HAS OPERATED ON THIS ACCOUNT AGAIN. AFTER GOING THROUGH SOME OLD FILES IN THE RECORDS I DISCOVERED THAT IF I DO NOT REMITT THIS MONEY OUT URGENTLY IT WILL BE FORFEITED FOR NOTHING. THE OWNER OF THIS ACCOUNT IS MR. SMITH B. ANDREAS, A FOREIGNER, AND THE MANAGER OF PETRO - TECHNICAL SUPPORT SERVICES, A CHEMICAL ENGINEER BY PROFESSION AND HE DIED SINCE 1990. NO OTHER PERSON KNOWS ABOUT THIS ACCOUNT OR ANY THING CONCERNING IT, THE ACCOUNT HAS NO OTHER BENEFICIARY AND MY INVESTIGATION PROVED TO ME AS WELL THAT THIS COMPANY DOES NOT KNOW NYTHING ABOUT THIS ACCOUNT AND THE AMOUNT INVOLVED IS (USD 45000.000.00 MILLION DOLLARS). I WANT TO TRANSFER THIS MONEY INTO A SAFE FOREIGNERS ACCOUNT ABROAD BUT I DON'T KNOW ANY FOREIGNER, I AM ONLY CONTACTING YOU AS A FOREIGNER BECAUSE THIS MONEY CAN NOT BE APPROVED TO A LOCAL BANK HERE, BUT CAN ONLY BE APPROVED TO ANY FOREIGN ACCOUNT BECAUSE THE MONEY IS IN US DOLLARS AND THE FORMER OWNER OF THE ACCOUNT IS MR.  I KNOW THAT THIS MASSAGE WILL COME TO YOU AS A URPRISE AS WE DON'T KNOW OUR SELVES BEFORE, BUT BE SURE THAT IT IS REAL AND A GENUINE BUSINESS.  I WANT US TO SEE FACE TO FACE OR SIGN A BINDING AGREEMENT TO BIND US TOGETHER SO THAT YOU CANRECIEVE THIS MONEY INTO A FORIEGN ACCOUNT OR ANY ACCOUNT OF YOUR CHOICE WHERE THE FUND WILL BE REMMITTED. AND I WILL FLY TO YOUR COUNTRY FOR WITHDRAWAL AND SHARING AND OTHER INVESTMENTS. I AM CONTACTING YOU BECAUSE OF THE NEED TO INVOLVE A FOREIGNER WITH FOREIGN ACCOUNT AND FOREIGN BENEFICIARY.  A NEED TRUTHFUL PERSON IN THIS BUSINESS BECAUSE I DON'T WANT TO MAKE MISTAKE I NEED YOUR STRONG ASSURANCE AND TRUST. WITH MY POSITION NOW IN THE OFFICE I CAN TRANSFER THIS MONEY TO ANY FOREIGNERS RELIABLE ACCOUNT WHICH YOU CAN PROVIDE WITH ASSURANCE THAT THIS MONEY WILL BE INTACT PENDING MY PHYSICAL ARRIVAL IN YOUR COUNTRY FOR SHARING. I WILL DESTROY ALL DOCUMENTS OF TRANSACTION IMMEDIATELY WE RECIEVE THIS MONEY LEAVING NO TRACE TO ANY PLACE. YOU CAN ALSO COME TO DISCUSS WITH ME FACE TO FACE AFTER WHICH I WILL MAKE THIS REMITTANCE IN YOUR PRESENCE AND TWO OF US WILL FLY TO YOUR COUNTRY AT LEAST TWO DAYS AHEAD OF THE MONEY GOING INTO YOUR ACCOUNT.  I WILL USE MY POSITION AND INFLUENCE TO EFFECT LEGAL APPROVALS AND ONWARD TRANSFER OF THIS MONEY TO YOUR ACCOUNT WITH APPROPRIATE CLEARANCE FORMS OF THE MINISTRIES AND FOREIGN EXCHANGE DEPARTMENTS. AT THE CONCLUSION OF THIS BUSINESS, YOU WILL BE GIVEN 20% OF THE TOTAL AMOUNT, 75% WILL BE FOR ME, WHILE 5% WILL BE FOR EXPENSES BOTH PARTIES MIGHT HAVE INCURED DURING THE PROCESS OF TRANSFERING. I LOOK FORWARD TO YOUR EARLIEST. YOURS TRULY, GABRIEL _________________________________________________________________ Retrouvez tout en un clin d'oeil avec la barre d'outil MSN Search ! http://desktop.msn.fr/


Thattukadai - Review your food
How was your recent visit to Thattukadai?
Name
Email
Age (optional)
What dish did you have?
Idly
Dosa
Vada
Pongal
Puttu
Coffee
Chai
What was your favorite dish?
Select your dish
Idly
Dosa
Vada
Pongal
Puttu
Coffee
Chai
Will you recommend Thattukadai to a friend?
Definitely
Maybe
Don't think so
Is there anything else you want to tell us about your visit?


Start and stop the gathering process here. The current status is {{status}}.
There are {{totalTweets}} Tweets stored at the database.
Getting Started
As a first step please open the file application.properties and modify your configuration here.
Configure your MongoDB connection by entering hostname and port and optionally username and password.
Configure the local directory where the pictures are being stored (the application only gatheres tweets with pictures).
Enter your consumer key, consumer secret, access token and access secret obtained from Twitter. If you did not have them yet
register with your Twitter account at https://dev.twitter.com/.
Now you are able to build a standalone jar file with your configuration by running mvn clean install or simply
run the application with mvn spring-boot:run
Define some jobs, so the application is able to gather some data from Twitter for you.
By pressing Start Gathering Tweets the application starts collecting Tweets from the Twitter Streaming API.
All Tweets that match your defined jobs are being stored at the MongoDB database. The corresponding pictures are being stored
at the local directory you defined earlier.


Change Log
Subscribe to the updates feed!
For more information on upgrading to the latest release, please see Upgrade Instructions
Version 1.7.1
Release Date: March 22, 2010
- New Features
- New function, is_related_to, which can be used to see if two objects are related.
- Bug Fixes
- DMZ models can now be loaded via $CI->load->model() (and autoloaded) again—even though you really shouldn't, so a warning will be logged when in debug mode.
- While EE and CI 2.0 aren't officially supported, Jack Scott, has provided some code that allows DMZ to load models from any model directory, not just application/models.
- Fixed bug in the automatic conversion of the id field to an integer.
- Fixed bug where get_iterated could have problems when running queries (such as delete) over the set.
- All of the extensions (even HTMLForm) have been updated to take advantage of get_iterated and result_count.
- Other Changes
- The minumum PHP version required has been bumped up to 5.1.2, since autoloading of resources isn't available on older version.
- A new method, _dmz_assign_libraries has been added, and is the actual _assign_libraries function. The original method just logs a warning, and is never used by DMZ.
- Added a section to get_iterated that helps determine when to use get_iterated over plain get.
- The example application has been updated to take advantage of get_iterated and result_count.
- The examples in the manual have been updated to remove looping over ->all directly, as it is recommended to use the iterator now.
- Corrected typos that referred to $db_params as $dbparams, and also that referred to the default value as TRUE, as opposed to ''.
- Fixed $db_params so that TRUE is an acceptable value, and is the same as ''.
- Completely rewrote delete_all. It now returns FALSE if any of the deletes fail (and TRUE in all other cases), and works with get_iterated.
Version 1.7.0
Release Date: March 15, 2010
- Performance Improvements
This release if DMZ has had a substantial focus on performance. None of these changes should affect your existing code, but you may see a 40-50% speed improvement across the board, especially when using the new get_iterated method. Even smaller queries will probably see a noticeable difference in both speed and memory usage.
-
Many subtle performance improvements were suggested by TheJim. I have also scoured the code base for other small enhancements.
- When checking the id field of related models, DMZ will now work with the [model]_id column of the join table or the in-table foreign key directly whenever possible. This removes one join from many queries.
-
The way databases are created, connected to, and closed has been significantly improved:
- Normal, shared databases (ie, $db_params is '') will only be connected to once.
- Also in the default situation, the db object is now cloned, instead of creating a new one each time.
- All databases are now properly closed, even if the page exits in an error. While this doesn't affect the majority of situations, it does ensure that pooling daemons know when to return a connection to the pool.
-
- New Features
- Automatic localization can be enabled for field and relationship labels, and DMZ methods can even be used to access model-specific localized text in a consistent manner.
- New method, get_iterated, for streaming the results of a query, so that only one object exists in memory per row.
- New methods, get_paged and get_paged_iterated, to easily handle paged queries. A single method provides the page of results, a well as number of pages, total number of rows, and more.
- New method, count_distinct, which counts the number of DISTINCT rows in a query.
- New method, get_raw, for getting the raw results of any DMZ query. (I.E.: without converting rows into objects.)
- Alternate form for the {query}_func method, {query}_field_func, that allows you to compare an object's field to the result of a function.
- Added a new method, result_count, which returns the number of items from the last query. This can be used to make switching between get and get_iterated easier. See Counting.
- Functions can now have a string inserted directly, without any escaping at all, by wrapping the string in square brackets: [ ].
- There is a new method, reinitialize_model, that can be used to forcibly re-load a model's configuration (for example, language settings).
- Extensions
- A new extension,
rowindex, has been added for finding the row of a given object or set of objects for an already-built query. - The HTML Form extension is no longer supported. Please see the note on that page for more information.
- A new extension,
- Bug Fixes
- Fixed a bug where get_sql was not clearing part of the previous query.
- Changed the exists method to properly handle the unusual case of querying for an object but not including the id field.
-
Changed the way select_func and select_subquery are added to the SELECT array, to prevent AR from splitting them by comma.
However, I was unable to completely prevent AR from breaking some queries. Please see here for a possible fix. - All table aliases have had the keyword AS removed from the query. (Fixed support with Oracle.)
- Fixed a bug when using include_related while $db_params was FALSE.
- Custom error messages that are returned from custom validation rules was not working. It now should work fine.
- The update function now automatically sets the updated timestamp if it exists on the table. (Thanks goes to Nicolas Pétillon.)
- Other Changes
- Modified get_clone to better handle the db object. You can now clone a partial query simply using get_clone before calling get. This can then be used to process two similar but slightly different queries. (If $db_params is set to FALSE, please read Database Object Cloning.)
- get_sql can now correctly process the parent relationship. By default this is disabled.
- It is now possible to override the default format for updated and created timestamps, with the new timestamp_format property.
-
For error, replaced the generic
stdClassobject with a custom one. This object will never error when accessing an unset message (although isset() still works), and also provides code completion hints. (Thanks NachoF for finding the bug that led to this one.) - All DMZ properties and methods are now properly marked as public, protected, or private. The inline PHPDocs have been cleaned up and made consistent for all methods and properties. Some previously public members have been renamed or made private, so you may have issues with complex extensions.
- If you use an IDE that supports PHP code completion via PHPDoc-formatted tags, many (many) magic properties and magic methods have been defined. (An example IDE is Netbeans 6.8 or ZendStudio.)
- The inflector_helper has been updated with a few more rules to be even more accurate in pluralizing English words.
- Due to the new localizable field labels, the computed label value is no longer stored when using the production cache. (If it was, it could not be localized.) The performance penalty of setting up the label once per model is minor.
- Manual Changes
- Several items have been moved around in the manual to eliminate some of the smaller pages. You will find documentation on exists and clear now under Utility Methods. Also, get_sql has been moved to the new Get (Alternatives) section.
- New page for Localization.
- New page for Get Alternatives.
- New page for the Row Index extension.
Version 1.6.2
Release Date: December 28, 2009
- Bug Fixes
- Related deletes were not returning the success or failure of the delete. (TheJim)
- Fixed unusual bug in recursively saving In-Table Foreign Keys. (TheJim)
- Fixed bug when instantiating included related items where the id of the related item was set incorrectly. (TheJim)
- Subqueries were incorrectly replacing advanced relationship related tables (as in include_related_count). (Cro_Crx.)
- New Languages
- French, provided by jpi
- Spanish, provided by tdktank59 and Muser
- Catalan, provided by Muser
- Brazilian Portuguese, provided by Dantetekanem
- Other Changes
- Updated the Count page in the manual to provide information on $object->count() vs count($object->all).
- Updated Troubleshooting to provide more information about solving common problems.
- Cleaned up the downloads page in the manual to hide outdated version by default.
- The downloadable manual no longer include the older change logs. These instead point to the version on the website.
Version 1.6.1
Release Date: November 30, 2009
- Changes
-
Fixed bug found by monkeyhouse in the db_params default configuration.
You only need to get this update if you are getting a “You have not selected a database type to connect to.” error.
-
Fixed bug found by monkeyhouse in the db_params default configuration.
Version 1.6.0
Release Date: November 23, 2009
- Core Changes
-
The database class is now instantiated as needed, and models no longer share database instances. The purpose of this change is to allow for subqueries, and allow more than one query to be built at a time.
This change could break classes that expect a shared $this->db.
The change is explained a little more here, and the new configuration option is here.
- You can easily include the number of related items in a query, using include_related_count. Usage and example.
-
-
New Features
- Subqueries: DataMapper models can now be used to build subqueries using AR methods. Subqueries page.
- SQL Functions: DataMapper models can also easily incorporate SQL functions and formulas into queries, while escaping strings and referencing fields and related fields. Functions page.
-
Other Changes
- The results from an include_related can now be automatically instantiated directly into DMZ models.
- The text SQL can be built and returned without running a query, via get_sql().
- A new validation rule, 'always_validate', forces validation of empty fields even if for empty fields. Some rules may throw an error, or have unexpected consequences when using this rule.
- Various minor changes throughout the docs.
-
Bug Fixes
- If a join field was used in a LIKE test, it was calling the original Active Record method. This has been fixed.
Older changelogs:
- Version 1.5.x
- Version 1.4.x
- Version 1.3.x
- Version 1.2.x
- Version 1.0 - 1.2.3 are lost to time :)
First publicly released version.


|
MasterMindCPP
|
Represents one line of the game board. More...
#include <ColorCode.h>
Public Member Functions | |
| ColorCode (std::array< int, SLOT_COUNT > &col) | |
| int | get (std::size_t index) |
| Get color at index. | |
| int | operator[] (std::size_t i) |
| Get color at index. | |
| const int | operator[] (std::size_t i) const |
| Get color at index. | |
| const bool | operator== (const ColorCode &rhs) const |
| Test equality to other ColorCode. true if colors and their positions are the same. | |
| virtual std::wstring | toString () |
| String representation of ColorCode. | |
Additional Inherited Members | |
| Static Public Member Functions inherited from mastermind::Mastermind | |
| static unsigned long | CODE_COUNT () |
| Amount of possible solutions. More... | |
| Static Public Attributes inherited from mastermind::Mastermind | |
| static constexpr std::size_t | MAX_MOVES = 7 |
| Maximum moves allowed until game finished. | |
| static constexpr std::size_t | SLOT_COUNT = 4 |
| Amount of slots for colors. | |
| static constexpr std::size_t | COLOR_COUNT = 6 |
| Amount of available colors. | |
Represents one line of the game board.


|
Native Library
|
|
static |
General category "Mc" in the Unicode specification.
|
static |
General category "Pc" in the Unicode specification.
|
static |
General category "Cc" in the Unicode specification.
|
static |
General category "Sc" in the Unicode specification.
|
static |
General category "Pd" in the Unicode specification.
|
static |
General category "Nd" in the Unicode specification.
|
static |
Weak bidirectional character type "AN" in the Unicode specification.
|
static |
Weak bidirectional character type "BN" in the Unicode specification.
|
static |
Weak bidirectional character type "CS" in the Unicode specification.
|
static |
Weak bidirectional character type "EN" in the Unicode specification.
|
static |
Weak bidirectional character type "ES" in the Unicode specification.
|
static |
Weak bidirectional character type "ET" in the Unicode specification.
|
static |
Strong bidirectional character type "L" in the Unicode specification.
|
static |
Strong bidirectional character type "LRE" in the Unicode specification.
|
static |
Strong bidirectional character type "LRO" in the Unicode specification.
|
static |
Weak bidirectional character type "NSM" in the Unicode specification.
|
static |
Neutral bidirectional character type "ON" in the Unicode specification.
|
static |
Neutral bidirectional character type "B" in the Unicode specification.
|
static |
Weak bidirectional character type "PDF" in the Unicode specification.
|
static |
Strong bidirectional character type "R" in the Unicode specification.
|
static |
Strong bidirectional character type "AL" in the Unicode specification.
|
static |
Strong bidirectional character type "RLE" in the Unicode specification.
|
static |
Strong bidirectional character type "RLO" in the Unicode specification.
|
static |
Neutral bidirectional character type "S" in the Unicode specification.
|
static |
Undefined bidirectional character type. Undefined
values have undefined directionality in the Unicode specification.
|
static |
Neutral bidirectional character type "WS" in the Unicode specification.
|
static |
General category "Me" in the Unicode specification.
|
static |
General category "Pe" in the Unicode specification.
|
static |
Error flag. Use int (code point) to avoid confusion with U+FFFF.
|
static |
General category "Pf" in the Unicode specification.
|
static |
General category "Cf" in the Unicode specification.
|
static |
General category "Pi" in the Unicode specification.
|
static |
General category "Nl" in the Unicode specification.
|
static |
General category "Zl" in the Unicode specification.
|
static |
General category "Ll" in the Unicode specification.
|
static |
General category "Sm" in the Unicode specification.
|
static |
The maximum value of a "http://www.unicode.org/glossary/#code_point Unicode code point, constant
.
|
static |
The maximum value of a "http://www.unicode.org/glossary/#high_surrogate_code_unit" Unicode high-surrogate code unit in the UTF-16 encoding, constant
. A high-surrogate is also known as a leading-surrogate.
|
static |
The maximum value of a "http://www.unicode.org/glossary/#low_surrogate_code_unit Unicode low-surrogate code unit in the UTF-16 encoding, constant
. A low-surrogate is also known as a trailing-surrogate.
|
static |
The maximum radix available for conversion to and from strings. The constant value of this field is the largest value permitted for the radix argument in radix-conversion methods such as the
method, the
method, and the
method of class
.
|
static |
The maximum value of a Unicode surrogate code unit in the UTF-16 encoding, constant
.
|
static |
The constant value of this field is the largest value of type
,
.
|
static |
The minimum value of a "http://www.unicode.org/glossary/#code_point Unicode code point, constant
.
|
static |
The minimum value of a "http://www.unicode.org/glossary/#high_surrogate_code_unit" Unicode high-surrogate code unit in the UTF-16 encoding, constant
. A high-surrogate is also known as a leading-surrogate.
|
static |
The minimum value of a "http://www.unicode.org/glossary/#low_surrogate_code_unit" Unicode low-surrogate code unit in the UTF-16 encoding, constant
. A low-surrogate is also known as a trailing-surrogate.
|
static |
The minimum radix available for conversion to and from strings. The constant value of this field is the smallest value permitted for the radix argument in radix-conversion methods such as the
method, the
method, and the
method of class
.
|
static |
The minimum value of a "http://www.unicode.org/glossary/#supplementary_code_point Unicode supplementary code point, constant
.
|
static |
The minimum value of a Unicode surrogate code unit in the UTF-16 encoding, constant
.
|
static |
The constant value of this field is the smallest value of type
,
.
|
static |
General category "Lm" in the Unicode specification.
|
static |
General category "Sk" in the Unicode specification.
|
static |
General category "Mn" in the Unicode specification.
|
static |
General category "Lo" in the Unicode specification.
|
static |
General category "No" in the Unicode specification.
|
static |
General category "Po" in the Unicode specification.
|
static |
General category "So" in the Unicode specification.
|
static |
General category "Zp" in the Unicode specification.
|
static |
General category "Co" in the Unicode specification.
|
static |
General category "Zs" in the Unicode specification.
|
static |
General category "Ps" in the Unicode specification.
|
static |
General category "Cs" in the Unicode specification.
|
static |
General category "Lt" in the Unicode specification.
|
static |
General category "Cn" in the Unicode specification.
|
static |
General category "Lu" in the Unicode specification.


The DisplayEntity is the basic 3D graphical object in JaamSim. All JaamSim objects that have graphics are subclasses of DisplayEntity.
All objects intended for visualization in a model view window have a set of basic graphics keywords that are used to define their appearance. These inputs are found in the Graphics tab of the Input Editor when the object is selected. For normal objects, the graphics inputs are Position, Alignment, Size, and Orientation. For polyline type objects the graphics inputs are Points and CurveType.
DisplayEntity Inputs
|
Keyword |
Description |
|
Normal Objects |
|
|
Position |
The location of the object in (x, y, z) coordinates. |
|
Alignment |
The point within the object that is located at the coordinates of its Position input. Expressed with respect to a unit box centered about (0 0 0). |
|
Size |
The size of the object in (x, y, z) coordinates. If only the x- and y-dimensions are given then the z-dimension is assumed to be zero. |
|
Orientation |
Euler angles defining the rotation of the object. |
|
Polyline Type Objects |
|
|
Points |
A list of points in (x, y, z) coordinates that define a polyline. When only two coordinates are given it is assumed that z = 0. |
|
CurveType |
The type of curve interpolation used for line type entities. |
|
All Objects |
|
|
Region |
If a Region is specified, the Position and Orientation inputs for the present object are relative to the Position and Orientation of the specified Region. If the specified Region is moved or rotated, the present object is moved to maintain its relative position and orientation. |
|
RelativeEntity |
If an object is specified, the Position input for the present object is relative to the Position for the specified object. If the specified object is moved, the present object is moved to maintain its relative position. |
|
DisplayModel |
The graphic representation of the object. If a list of DisplayModels is entered, each one is displayed provided that its DrawRange input is satisfied. This feature allows the object's appearance to change with its distance from the View window's camera. |
|
Show |
If TRUE, the object is shown in the View windows. |
|
Movable |
If TRUE, the object will respond to mouse clicks and can be positioned by dragging with the mouse. |
|
VisibleViews |
The view windows on which this entity will be visible. |
|
DrawRange |
The minimum and maximum distance from the camera for which this entity is displayed. |
DisplayEntity Outputs
|
Output Name |
Description |
|
Entity |
|
|
Name |
The unique input name for this entity. |
|
ObjectType |
The class of objects that this entity belongs to. |
|
SimTime |
The present simulation time. |
|
Parent |
The parent entity for this entity. |
|
DisplayEntity |
|
|
Position |
The present (x, y, z) coordinates of the DisplayEntity in its Region. |
|
Size |
The present (x, y, z) components of the DisplayEntity's size. |
|
Orientation |
The present (x, y, z) Euler angles of the DisplayEntity's rotation. |
|
Alignment |
The present (x, y, z) coordinates of a point on the DisplayEntity that aligns direction with the position output. Each component should be in the range [-0.5, 0.5]. |
|
GraphicalLength |
Polyline type objects: the length of the polyline determined by its Points and CurveType inputs. Non-polyline type objects: the largest of the Size inputs. |
|
ObserverList |
The observers that are monitoring the state of this entity. |
|
NextList |
The entities that are immediately downstream from this entity. |
|
PreviousList |
The entities that are immediately upstream from this entity. |
|
EntityReferenceList |
The entities that appear in the inputs to this entity. |


Contact: John Smith,
650-269-4545<EMAIL_ADDRESS>Origin
Location: Gilroy, CA 95020, Business with a Dock or Forklift,
Driver to assist in loading
Stop 1 in Transit: Milwaukee, WI 51932, Convention
Center/Tradeshow, Driver to Assist in unloading
Destination
Location: Menasha,
WI 54952, Business with a Dock or Forklift, Driver Not assisting in unloading,
~2,235
Start Bidding Window:
now: April 15, 10:25AM
Duration of Bidding Window:
1 Hour ( ) 4
Hours (●) 24 Hours ( ) 48 Hours ( )
Space Needed - Select - ê 23
Total Shipment Weight: in Pounds
Description of Goods:
Ready for Pick Up Mo / Day
RFQ Description (Optional)


Room Reservation Form
Name
Nationality
{{country.name}}
Address
State
{{state}}
City
Postal Code
You must supply a Postal Code
That doesn't look like a valid postal code.
{{selectedCountry.code}}
Email
Room Type
{{roomType.name}}
Number Of Days
Number of Rooms
Number of Adults
Number of Children
Number of Guests
{% load static %}


I was pretty bored with my life, and getting to be pretty depressed. Weed seemed to be a good time, so did alcohol, but I wanted to hallucinate. I wanted to see what was latent, floating around in my sub-conscious. I wanted to see the things I glimpsed in dreams. I read about Morning Glory seeds, and their history in Indian Shamanism is what intially attracted me. That and the potential for a hallucinogenic experience.
I purchased 16 packets of Heavenly Blue Morning Glory seed packets at the local chain-department store. I had read the warnings about the poisonous coatings but I had no way of obtaining Everclear or other such fluids. Nor did I have the space to complete this procedure, as I was 17, and living with my parents. I used a coffee grinder to grind up all the packets at once, and it became a soft but somewhat chunky powder. I had read about people who mixed the seeds with different juices and drank them, so I tried this with Razzberry iced tea. I emptied about half of my powder into a glass with the iced tea. Unfortunately, the powder wouldn't dissolve and just became a chunky pile of sludge at the bottom of the cup that was far too unappealing to possibly digest by itself. I threw this mixture out and saved the rest of the powder, thinking about different ways to down it.
Several weeks later, I brought the powder to school with me, and swallowed most of it in the bathroom at about 9:00 am, washing it down my throat with Pepsi. It had a distinct taste and smell, like topsoil almmost. Around 9:30 I began to feel nauseous and a little shaky. By about 10:30 I was feeling less nauseous and was experiencing a mild high, like that of being a little stoned. It was about this time I began to feel very hot, and jittery. I was extremely active, speaking and moving very quickly. I couldn't sit still and I began to sweat heavily. I felt silly and in general, still pleasant. I went to study hall and then an assembly. As I watched the speaker move in front of the overhead screen in the auditorium I saw faint coloured lines moving around her. I began to feel disoriented, talking to myself inside my head, and found I was unable to pay much attention to anything but the voice in my head.
At this point I began to feel nervous. I didn't say much, but I still figeted a lot. Things became a little blurry to me, and I was confused, trying to follow my friend to her locker. I could only pay attention to what I was thinking, and had to give one word answers to the people who spoke to me. A teacher stopped to tell me about a concert that was going on that evening that I was expected to attend and he made a joke. I remember thinking very hard about weather or not to laugh, his face looked distorted and angry even though he was laughing.
I bought my lunch and sat down with my friends. At this point I was so disoriented and drawn into myself I felt afraid. I told my best friend what I had taken and we continued eating lunch. I was sweating profusely, my forehead and eyebrows were soaked. I could hardly eat, my food seemed to be slipping off my fork. It was extrememly loud in the lunch room and instead of hearing things I felt as if someone was pouring warm water into my ears. The louder the noise, the more water. No one spoke at my lunch table, as I was obviously very 'sick.' I could hardly get the soup to my mouth because of my uncontrollable shaking and trembling. My friends asked me questions but I could only answer by nodding my head. Speaking was impossible, with all the water running in my ears, and the voice in my mind being so loud.
A teacher came over to chat with us and he stood next to me. His voice was unbearably loud, I cringed as he spoke. He was doing a crossword puzzle and when he asked me about a clue, I tried to answer. I opened my mouth but it felt as though hundreds of words were trying to force their way out at once. I simply shrugged and stared at the floor. Then my friend decided to take me to the nurse's office. As I walked across the hall to the health office a teacher passed me and asked what was wrong. My friend answered for me, saying I wasn't feeling well. She squatted and stared into my eyes and felt my forehead and said something to the affect of 'Holy shit, I guess not.' My hair was beginning to become wet with sweat.
I sat in the nurses office, hands clasped tightly together. She asked me questions and I only nodded yes or no. She eventually decided I had some sort of emotional issue and sent me to the school social worker.  When I nodded yes, she had me write down what it was on a slip of paper.
Back in the nurse's office, the two women were bewildered. What was 'morning glory?' I stared out the window, hearing only voices in my head and began to cry. The tree outside the window was waving in the wind and it's red buds appeared to be on fire. They left orange streaks in the air as they moved. The nurse called poison control and eventually an ambulance came. It was about 2:00pm now.
 The EMTs helped me down the hall as I could only shuffle, and into the ambulance. When I looked up at the ceiling, I saw the round lights blinking and I was unable to determine if they were real or I was imagining them. The burly EMT told me they were real, and looked at the notes I had written. I murmmered, asking him if I was going to be alright. He said at first that he didn't know. People on the internet don't care who they poison. A few minutes later he began telling me I was fine and that I would feel better in a few hours.
At the hospital I saw flashes as I was wheeled past my mother and into a room. A doctor came and asked me questions, along with a policeman.  I don't remember if I fell asleep or not, but around 7:00 pm I was straightening out. The nurse made me drink liquid charcoal to remove the toxins. This is extremely gross, avoid it!
In the end, I was suspended from school only for a little over a week, due to my past exemplary record. I was put in counseling, it being suspected this had been a suicide attempt, which it wasn't, but I wasn't about to argue. To this day, when I walk into a green house the smell of the soil and plants makes me nauseous.
Experience Reports are the writings and opinions of the individual authors who submit them.
Some of the activities described are dangerous and/or illegal and none are recommended by Erowid.


samba
Table of Contents
-
Module Description - What the module does and why it is useful
-
Reference - An under-the-hood peek at what the module is doing and how
Module Description
This module installs, configures, and manages samba without the use of opinionated templates or sets of parameters.
For more details on Samba and the capabilities it provides, please see: www.samba.org/
This module provides puppet data in module as well as uses the Puppet 4 type classes. It will not work on older versions of Puppet. It seems to work on Puppet 5 so far.
This module is currently written to support samba on CentOS/RedHat 6/7 operating systems. Other operating system support could be added if time permits (Pull requests are welcome. :)
Setup
What samba affects
-
A list of files, packages, services, or operations that the module will alter, impact, or execute on the system it's installed on.
-
Package(s): samba
-
File: /etc/samba/smb.conf
-
Service(s): smb, nmb
Setup Requirements
This module just configures samba. If you need to configure krb5.conf as a prerequite for samba (allowing for sssd for instance), may I suggest one of the following modules:
Speaking of, if you are trying to configure sssd for use with samba, may I suggest one of the following modules:
Beginning with samba
include samba
should be all that is needed to install,
configure, and start the smb service using the parameters specified by the
default smb.conf of the package install.
This module depends on the puppetlabs/stdlib and puppetlabs/concat modules.
Usage
All parameters to the main classc an be passed via puppet code or hiera.
Note: the Puppet lookup function will by default create a merged hash from hiera data for the samba::shares_definitions parameter. It would be possible to override the merge behavior in your own hiera data; however, this has not been tested and could create unexpected results.
Some examples are presented below with the file that is output from the code.
Creating the default CentOS 7 smb.conf file via hiera (less all the commented out parameters and comments)
samba::global_config:
'global':
'workgroup': 'SAMBA'
'security': 'user'
'passdb backend': 'tdbsam'
'printing': 'cups'
'printcap name': 'cups'
'load printers': 'yes'
'cups options': 'raw'
'homes':
'comment': 'Home Directories'
'valid users': '%S, %D%w%S'
'browseable': 'No'
'read only': 'No'
'inherit acls': 'Yes'
'printers':
'comment': 'All Printers'
'path': '/var/tmp'
'printable': 'Yes'
'create mask': '0600'
'browseable': 'No'
'print$':
'comment': 'Printer Drivers'
'path': '/var/lib/samba/drivers'
'write list': 'root'
'create mask': '0664'
'directory mask': '0775'
and the resulting configuration file:
# Managed by Puppet.
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups
printcap name = cups
load printers = yes
cups options = raw
[homes]
comment = Home Directories
valid users = %S, %D%w%S
browseable = No
read only = No
inherit acls = Yes
[printers]
comment = All Printers
path = /var/tmp
printable = Yes
create mask = 0600
browseable = No
[print$]
comment = Printer Drivers
path = /var/lib/samba/drivers
write list = root
create mask = 0664
directory mask = 077
Adding comments to the global and special sections
samba::global_config:
'global':
'load printers': 'yes'
'cups options': 'raw'
'#comment1': 'Here is the end of the global section... moving on.'
results in smb.conf:
[global]
load printers = yes
cups = raw
# Here is the end of the global section... moving on.
How it works: The template checks for a parameter that begins with the '#' character, and then uses the specified value as the actual comment. If you have multiple comment lines, each parameter needs to start with a '#' character and the rest of the characters need to be unique for that comment to prevent an error.
Adding white space between options
samba::global_config:
'global':
'workgroup': 'SAMBA'
'__blank1': ''
'security': 'user'
'passdb backend': 'tdbsam'
'__blank2': ''
'printing': 'cups'
results in:
[global]
workgroup = SAMBA
security = user
passdb backend = tdbsam
printing = cups
How it works: The template checks for a parameter that begins with two
_
characters, and then just inserts a blank line into the
resulting file. If you place multiple blank lines into a file, each
parameter must begin with two _
characters and be different
from the others in the rest of the characters to prevent an error. The
string value is ignored.
Creating commented configuration items in the global and special sections
samba::global_config:
'global':
'workgroup': 'SAMBA'
'security': 'user'
';passdb backend': 'tdbsam'
results is:
[global]
workgroup = SAMBA
security = user
; passdb backend = tdbsam
How it works: The template checks for a parameter that begins with a ';' character, and then starts the line with a ';' character, tabs and places the rest of characters (less the ';') followed by an equal sign, and then parses the string or array for the values of the parameter.
Specifying multiple settings for an global or special section option
samba::global_config:
'global':
'interfaces':
- 'lo'
- 'eth0'
'bind interfaces only': 'yes'
results in:
[global]
interfaces = lo eth0
bind interfaces only = yes
Specifying multiple settings for a share option
samba::shares_definitions:
'admin':
'comment': 'Admin Stuff'
'path': '/mnt/stuff'
'valid users':
- 'bar'
- 'bob'
- '@foo'
results in:
[admin]
comment = Admin Stuff
path = /mnt/stuff
valid users = bar, bob, @foo
Creating multiple shares using hiera
samba::shares_definitions:
'admin':
'comment': 'Admin Stuff'
'path': '/mnt/stuff'
'valid users': 'bar, bob, @foo'
'writable': 'yes'
'public':
'comment': 'Public Stuff'
'path': '/mnt/public'
'writable': 'no'
results in:
[admin]
comment = Admin Stuff
path = /mnt/stuff
valid users = bar, bob, @foo
writable = yes
[public]
comment = Public Stuff
path = /mnt/public
writable = no
Creating the same multiple shares as the previous example using puppet code
class { 'samba':
share_definitions => {
'admin' => {
'comment' => 'Admin Stuff',
'path' => '/mnt/stuff',
'valid users' => [ 'bar', 'bob', '@foo', ],
'writable' => 'yes',
},
'public' => {
'comment' => 'Public Stuff',
'path' => '/mnt/stuff',
'writable' => 'no',
},
}
}
Reference
Generated puppet strings documentation with examples is available from millerjl1701.github.io/millerjl1701-samba/
The puppet strings documentation is also included in the /docs folder.
Public Classes
-
samba: Main class which installs, configures, and manages the smb and nmb services.
Private Classes
-
samba::install: Class for installation of the samba package.
-
samba::config: Class for construction of the /etc/samba/smb.conf configuration file.
-
samba::service: Class for managing the state of the smb and nmb services.
Limitations
This module was setup using CentOS 6 and 7 installation and documentation for rules. In time, other operating systems will be added as they have been tested. Pull requests with tests are welcome!
No validation or testing of the resulting /etc/samba/smb.conf file is done. This is left as an exercise for the reader.
Development
Please see the CONTRIBUTING document for information on how to get started developing code and submit a pull request for this module. While written in an opinionated fashion at the start, over time this can become less and less the case.
There are many good modules to manage samba and winbind already; however, to me it seems they try to do too much. The design philosophy of this module is to keep things as simple as possible while being functional. If you need more added functionality that they provide, by all means do so.
Contributors
To see who is involved with this module, see the GitHub list of contributors or the CONTRIBUTORS document.
Credits
This module was inspired from the excellent design work of the sgnl05/sgnl05-sssd puppet module. I loved how I could use it to specify a configuration file at will without having to wrangle parameterized classes for management of sssd. As that modules does, I used the sssd.conf template from walkamongus/sssd to generate concat fragments which then are assembled into the final samba configuration file.


Toggle navigation
Kentucky Chapter
History
(current)
Executive Council
The Brothers
Outreach
Our Brothers
Our Sweetheart
-->


Step 01
Go to our online shop tab
Step 02
When you have done all your shopping, go to check out (top right hand button)
Step 03
Select your delivery area or postcode ( if you can not see your area please email us and we will see if we can deliver to your area)


|
TFKaldi
|
contains the functions used to prepare the data for GMM and DNN training More...
Functions | |
| def | processing.prepare_data.prepare_data (datadir, featdir, conf, feat_type, dynamic) |
| compute the features of all segments and save them on disk More... | |
| def | processing.prepare_data.compute_cmvn (featdir) |
| compute the cmvn statistics and save them More... | |
| def | processing.prepare_data.shuffle_examples (featdir) |
| shuffle the utterances and put them in feats_shuffled.scp More... | |
| def | processing.prepare_data.read_wav (wavfile) |
| read a wav file formatted by kaldi More... | |
contains the functions used to prepare the data for GMM and DNN training
| def processing.prepare_data.compute_cmvn | ( | featdir | ) |
compute the cmvn statistics and save them
| featdir | the directory containing the features in feats.scp |
| def processing.prepare_data.prepare_data | ( | datadir, | |
| featdir, | |||
| conf, | |||
| feat_type, | |||
| dynamic | |||
| ) |
compute the features of all segments and save them on disk
| datadir | directory where the kaldi data prep has been done |
| featdir | directory where the features will be put |
| conf | feature configuration |
| featureType | string containing the type of features, optione are: fbank, mfcc and ssc. |
| dynamic | the type of dynamic information added, options are: nodelta, delta and ddelta. |
| def processing.prepare_data.read_wav | ( | wavfile | ) |
read a wav file formatted by kaldi
| wavfile | a pair containing eiher the filaname or the command to read the wavfile and a boolean that determines if its a name or a command |
| def processing.prepare_data.shuffle_examples | ( | featdir | ) |
shuffle the utterances and put them in feats_shuffled.scp
| featdir | the directory containing the features in feats.scp |


THE PLEDGE A film review by Steve Rhodes Copyright 2001 Steve Rhodes RATING (0 TO ****): ***
Director Sean Penn and actor Jack Nicholson, who last collaborated in the over-the-top THE CROSSING GUARD, surprise us this time with THE PLEDGE, a picture of remarkable grace and subtlety. Taking a formula story -- that of a recently retired cop who wants a closed murder case reopened -- it changes the structure, the tone and the events to put fresh spins on old themes.
THE PLEDGE focuses almost exclusively on Jack Nicholson as Detective Jerry Black, although many fine actors show up to turn in nice cameos and supporting parts. Chief among these are Robin Wright Penn, as a scraggly haired, chipped tooth waitress, Helen Mirren, as a reluctantly helpful psychiatrist and Patricia Clarkson, as a dead girl's mother who extracts a pledge from Black to find the killer. The pledge is made on a cross that the girl had constructed herself.
 Later, much to the consternation of his replacement, Stan Krolak (Aaron Eckhart), Black insists that they've got the wrong man. This belief leads Black on a statewide quest for what he thinks is a serial killer on the loose.
If the first part of the film is more standard issue with the obsessed cop on the prowl for the perp, the second part is a change of pace, as Black retires to a life of fishing. Or is he just lying in wait? Or is it both? What is most unusual about the second half is that the script by Jerzy Kromolowski and Mary Olson-Kromolowski, based on Friedrich Dürrenmatt's book, telegraphs where it is going yet maintains the tension. And, when the story finally gets to the easily guessed destination, the film avoids the most committed sin by screenwriters everywhere -- the obsession with tying up all the loose ends. This, of course, may drive anal-retentive viewers nuts, but it does provide for great post-theater car conversations.
Still, what you will remember a week later isn't the ending. It will be Nicholson's exceptional and atypically reserved performance. His detective doesn't come from some overwrought method acting. Nicholson searches deep down within himself and comes up with a character whose furrowed brow says it all. Black is deeply scarred by the deaths. He has internalized the pain of the victims and their families. This has transformed him into a man driven as if by hidden demons. His worries are made palpable through an intense but delicately nuanced performance by Nicholson. It may not be his very best performance, but it sure is a treat to observe.
THE PLEDGE runs 2:04. It is rated R for strong violence and language and would be acceptable for older teenagers.
The film opens nationwide in the United States on Friday, January 19, 2001. In the Silicon Valley it will be showing at the AMC and the Century theaters.
Email<EMAIL_ADDRESS>Web: http://www.InternetReviews.com
The review above was posted to the
rec.arts.movies.reviews newsgroup (de.rec.film.kritiken for German reviews).
The Internet Movie Database accepts no responsibility for the contents of the
review and has no editorial control. Unless stated otherwise, the copyright
belongs to the author.
Please direct comments/criticisms of the review to relevant newsgroups.
Broken URLs inthe reviews are the responsibility of the author.
The formatting of the review is likely to differ from the original due
to ASCII to HTML conversion.
Related links: index of all rec.arts.movies.reviews reviews


Team Blur Technology
Role Design Team Lead
Tool Sketch
Figma
Invision
Principle
Duration 2017 Spring Design Position
Blur is a new social app that redefines how you chat, meet and date by showcasing your personalities, interests and lifestyle before anything else.
If you’re tired of appearance-driven social apps, this new app that blurs your match’s face might be just for you. Blur is a new dating and friendship app which blurs out your match's face until you strike up a conversation
I. Welcome Page
The welcome page uses vibrant color and micro-interactions to make users feel soothing and relaxed.
II. The Matching Wheel
Unlike other apps which simply swipes left and right, Blur provides a range of profiles users can be matched with from the Matching Wheel.
III. Gamification
Blur uses Machine Learning and pair you with your personality. All matches' faces will be blurred until you answer all the questions.
IV. Personality Hexagon
When there is a match, user will see his or her match with personality diagnosis which accompanied with some fun animations. For example, users will see specific aspects of match's personality such as caring and outgoing levels in our personality hexagon. There are always more aspects to explore.
V. More Fun to Explore
User can explore more fun under Daily Challenge tab to complete their Peronslaity Hexagon. Challenge will be different everyday. Users can see how their decision affects their profiles.
Regardless of how busy we are with work, school, or life, we might feel lonely sometime at some point and we just need someone to talk to. With today’s social or dating applications which take milliseconds to swipe and find matches, it has become easy to find quick matches, but . People come with strong intention or purpose, and it is hard to find someone who matches with your thoughts and who you can truly talk to.
People often say “the dating apps have killed romance”. It takes milliseconds to swipe right. You don’t have much time to think through before you make a decision.
Blur is a new social platform to find, chat and connect by showcasing your personality and interests before anything else. Finding a match is as fun as playing a game on Blur - the photos of your potential matches are initially blurred, as you answer short and fun quiz questions, they become clear
It’s personality first By answering simple & fun questions, you’ll meet interesting people and not make snap judgements based on a single profile photo.
Privacy is vital Profile photos are blurred and only revealed to people that share the same value and interests.
Make better matches Backed by advanced machine learning algorithms, Blur builds a comprehensive profile that makes better recommendations that fit you.
As users enjoy answering fun questions to de-blur their matches, Blur is simultaneously building comprehensive profiles for them, so the more they play the better matches become.
As the only designer on the startup team, I took a lot of responsibilities for all visual aspects. As past paced as a startup can be, I was in charge of wireframing, prototyping, user testing on each prototype at different stages, working with engineers to meet app updates, and assisting with any design-related visual needs for other purposes.
For the first version of the design, our team decided to use light pink and blue; nevertheless, some users reflected that the design wasn't engagine enough to capture their attention. There are too many social apps that are competing for the same user group.
Here comes the problem : How can we make ourselves stand out from other similar social apps?
We need to break the traditional flat design like other apps do and add more fun animated elements. Our design needs to be visually appealing but also simple and user friendly.
For onboarding screen, my design philosophy is to create simple yet fun design to quickly collect users' information to fasten the onboarding process. Users can click in sign in to access other partners to fill out information, or they could simply answer a short series of questions with animation.
Since we are personality based social app, we also encourage users to meet like minded friends based on our intervention. We understand the needs that sometimes users just need someone to talk to. Therefore, they will be paired with people who have similar purposes.
We did interviews users in four different age groups 18-28, 28-38, 38-48, and 48 above about their attitudes toward existing social apps. We identified that some of them don't use social apps because they don't like people with strong intention from existing social apps. They prefer to take time and develop stronger bonding relationships not only just for dating purposes.
Therefore, we wanted to design the app making the app intention clear for both parties at the beginning. If a user is not single, we will automatically pair this user with the friend's pool
In order to make the process even more fun, users will see eight blurred profile photots in front of them when they answer questions. The profile wheel will keep spinning until the user answers enough questions for our AI system to match him or her with the other user in our system who has best match.
After the match, user will see the the common features she or he shares with the other match immediately. User can simply choose anything from conversation starter to start the conversation. The user will have access to personality matrix as well by clicking match's profile picture. Nevertheless, in order to know more about the match, user needs to talk to the match more to deblur other information through "Light Up" feature.
The new feature we want to introduce is called "Light Up" to motivate users talk to their matches more. Once users match and deblur their matches' faces, they won't immediately know all information from their matches. They need to talk to the match at a certain conversation level to fully light up the "BLUR" letters and deblur more information such as "Career" and "Education".
During my time designing at Blur as a new startup, I learned to combine my business knowledge with design and adapt to this fast-paced environment. Most importantly, I learned how to take on ownership responsibility on tasks I was assigned because I knew how much my decision would affect the team and the company.
For future iterations, I would love to explore more on how to make Blur more fun and personal for users. Currently, we focus a lot on matching users together based on their personality. In the future, I would love to focus more on building stronger relationship between matches after they connect. To keep users coming back, I would love the possibility to explore community aspect. If we could use AI and Maching Learning to build a community for people with shared personality or interests, then users would be more likely to stay on the app. Furthermore, I would love to explore possibilities of creating more fun "deblur" games other than answering questions.
Thanks for reading about Blur. If you are interested in the project, I am happy to share more about it.


GALLERY: The Best in Mbombela 2019
Readers have voted to name the best in business excellence in Mbombela.
by LowvelderMBOMBELA – The annual awards function took place at Emnotweni on Tuesday evening.
This year the categories were increased to 84, with two special awards given out.
Hi-Tech Security won the service excellence award for the fifth time.
Pottie Potgieter from BUCO Nelspruit won the community contribution award.
See the full list of winners here: Best of Mbombela 2019