In many of the programs we build with p5.js, from video games to generative art to interactive applications, we sometimes like to have a bit of randomness to create unexpected and dynamic behavior. Many times though, the random() function is too random -- sometimes we want a function that wanders around but remains smooth and organic.
For this reason, p5.js has a function called noise(), which generates these smooth gradients using a function called Perlin noise, named after its inventor, Ken Perlin. Perlin noise was invented for applications which required semi-random variations with continuous and smooth trajectories. It's used in all sorts of applications, such as creating terrains and realistic looking textures for video games. The following pictures show some uses of noise.
The noise() function in p5.js takes 1, 2, or 3 arguments. Let's start by looking at noise with 1 argument. Take a look at the following example.
function setup() {
createCanvas(400, 400);
}
function draw() {
background(0);
noFill();
stroke(255);
beginShape();
for (var x = 0; x < width; x++) {
var nx = map(x, 0, width, 0, 10);
var y = height * noise(nx);
vertex(x, y);
}
endShape();
}
In the above sketch, we are plotting y=noise(nx) between nx=0 and nx=10. noise(x) always gives us back a number between 0 and 1 -- in this example, we scale it up by multiplying it by the height of the canvas, so the result is between 0 and height. There are two key characteristics to observe. The first is that unlike random(), noise() always gives us back the same value for the same arguments. So noise(5) will give us some value when we run it at some point during our sketch, and if we run noise(5) again later in the sketch, we will get the same value. The second important thing is that we expect to get closer y-values for closer x-values inputted to noise(). So for example, noise(5) and noise(10) may give very different values, but noise(5) and noise(5.5) will probably be comparatively closer to each other, and noise(5) and noise(5.001) will be very close to each other.
This last property is the key that lets us create and control very interesting trajectories -- by riding along a narrow band of noise, we get smooth continuous movement along an overall random path. By riding a larger band, we get faster and more varied movement. Try changing the range of the argument to noise (nx). What happens if instead of going from 0 to 10, we go from 0 to 100 instead? Or 0 to 1? Notice the smaller the range of values we traverse, the more smooth our movement becomes.
To see this in more detail, see the sketch below. Here we take the value of the noise function and map it to the y-position of a circle. At the same time, we increment the noise function by an amount which is controlled by the x-position of the mouse. As you move the mouse to the right, we increment the noise argument by larger amounts. By stepping through the argument in noise at increasingly larger amounts, the output becomes increasingly more erratic. Eventually, it is almost indistinguishable from pure randomness. Stepping through the noise field by very small amounts gives us very slow and smooth movement.
var t;
var t_increment;
function setup() {
createCanvas(400, 400);
textSize(16);
t = 0;
t_increment = 0;
}
function draw() {
background(0);
// t_increment will control how "fast" we move
// through the 1d noise graph
t_increment = map(mouseX, 0, width, 0, 0.2);
var y = height * noise(t);
// add t_increment to t
t += t_increment;
fill(0, 255, 0);
ellipse(width/2, y, 60, 60);
fill(255);
text("t_increment = "+t_increment, 20, 30);
text("t = "+t, 20, 60);
text("noise(t) = "+noise(t), 20, 90);
text("height * noise(t) = "+height * noise(t), 20, 120);
}
So what can we do with Perlin noise? One thing is we can create variables which move in seemingly random but organic ways. In the following sketch, we draw a simple circle whose position and color change along a smooth noise field.
var t;
function setup() {
createCanvas(400, 400);
background(0);
t = 0;
}
function draw() {
// fade the background by giving it a low opacity
background(0, 5);
var x = width * noise(t);
var y = height * noise(t+5);
var r = 255 * noise(t+10);
var g = 255 * noise(t+15);
var b = 255 * noise(t+20);
noStroke();
fill(r, g, b);
ellipse(x, y, 120, 120);
t = t + 0.01;
}
Wait... why did we add a constant number (5, 10, etc) to the t variable in each noise function? Recall that noise(x) always gives you the same output for any value of x, no matter how many times you call it in the same sketch. If we had simply used noise(t) for each of our five variables x, y, r, g, and b, they would have remained equal to each other at each point t -- thus we'd always have a gray circle moving along the diagonal line y=x between (0, 0) and (width, height)! Try removing that constant and see that it does that. By leaving that constant there as an offset, we ensure all of the values are different by moving them along different "regions" of the noise field. There is a better way to do this though, as we will see later...
As with the previous sketches, the smoothness of our movement depends on how fast we step through the noise field. In this sketch, that is controlled by the last line, t = t + 0.01. What happens if we increment it by a value more than or less than 0.01? Or even better, what if the increment value is itself controlled by a noise function! Try experimenting with this to get more intuition about how the noise function works.
Here's a more interesting example of noise in action. Here we are continuously drawing a single bezier curve to the canvas, whose end points and control points are all being moved according to noise. Notice again we use a small offset to make sure the noise values are different for each of the 8 variables. Accumulating these beziers on the canvas creates very interesting contours, giving it an almost 3d feel.
var t;
function setup() {
createCanvas(400, 400);
stroke(0, 18);
noFill();
t = 0;
}
function draw() {
var x1 = width * noise(t + 15);
var x2 = width * noise(t + 25);
var x3 = width * noise(t + 35);
var x4 = width * noise(t + 45);
var y1 = height * noise(t + 55);
var y2 = height * noise(t + 65);
var y3 = height * noise(t + 75);
var y4 = height * noise(t + 85);
bezier(x1, y1, x2, y2, x3, y3, x4, y4);
t += 0.005;
// clear the background every 500 frames using mod (%) operator
if (frameCount % 500 == 0) {
background(255);
}
}
A lot of times we need smooth continuous behavior from a variable in not just one but two dimensions. For example, if you are rendering clouds, you might want to have smooth color gradations in both the X and Y directions. For this reason, the noise() function can take two arguments instead of one, where the second argument works exactly like the first one. Take a look at the following example.
function setup() {
createCanvas(400, 400);
noStroke();
}
function draw() {
for (var x = 0; x < width; x+=10) {
for (var y = 0; y < height; y+=10) {
var c = 255 * noise(0.01 * x, 0.01 * y);
fill(c);
rect(x, y, 10, 10);
}
}
}
In the above example, we see that smooth gradations are visible in both dimensions. But having a second dimension to noise can be useful for more than just the X and Y directions; it can also be used for time-varying behavior as well. Take a look at the next, somewhat more complex, example. Here we are manually drawing a "circle" point by point, and as we go around, we deform the radius using the noise function, where one of the arguments is the angle from the center point. At the same time, the noise function is also varying in time. Thus each point in the circle is varied according to both time and angle, accumulating a series of deformed circles over time. For clarity, we clear the background every 600 frames.
var t;
function setup() {
createCanvas(400, 400);
background(255);
stroke(0, 15);
noFill();
t = 0;
}
function draw() {
translate(width/2, height/2);
beginShape();
for (var i = 0; i < 200; i++) {
var ang = map(i, 0, 200, 0, TWO_PI);
var rad = 200 * noise(i * 0.01, t * 0.005);
var x = rad * cos(ang);
var y = rad * sin(ang);
curveVertex(x, y);
}
endShape(CLOSE);
t += 1;
// clear the background every 600 frames using mod (%) operator
if (frameCount % 600 == 0) {
background(255);
}
}
The noise function can even take three arguments! So you can make it vary according to up to three different variables. This can be useful for example if you're creating a 3d scene, and you want a color value (or some other variable) to vary smoothly in all three spatial directions. Or another use is to add time-varying behavior to 2D Perlin noise. What if in the first 2D noise example with the rectangles, we added a third dimension to the noise variable controlling the darkness of the rectangles? That one is left up to you as an exercise!
In this tutorial, we learned how to use the noise function to create smooth organically-varying variables in p5.js. Perlin noise enables us to exert some control over the randomness of our variables, and is widely used for creating realistic textures, generative art, AI motions, and many more applications. Having an understanding of how to master it will give you a great way of adding dynamic behaviors to your programs.


MozTN Privacy Month Campaign- blog post 1
January 5, 2016
Here is a blog post by our Contributor Prasanth Rathinam who has shared his views on Online privacy.
"January..
While most of the people around the world enjoying the new year, many are striving hard to spread the news about data privacy and data protection as January is considered as Privacy month
Before moving to more details about Privacy Month, let us read more about Data Privacy and Why we need to protect our data"......


When a user was abusive, Dudley chased him across channels, however he did on occasion get distracted...
[0:58] * dudley_ is on #lesbian
[0:58] <dudley_> <g>
<JamesOff> !
[0:58] <dudley_> quiet.
[0:58] <dudley_> hmmm...
[0:58] <dudley_> I'll relay anything good
* JamesOff raises an eyebrow
[1:01] <dudley_> *** Alex was kicked by arachne (op)
[1:01] <dudley_> <g>
[1:01] <FairyDust> HEHEHE!!!!!!!!
[1:02] <FairyDust> Just called the guy a girl. His real name is Alexandra
.
.
.
[1:06] * dudley_ is still watching #lesbian
--
And a lagged misunderstanding of Kit(UK) being nice to Kim(Canada) resulted in this topic...
*** dudley_ changes topic to "Shock as Kit claims to have 6000 mile long %&$%&!"
--
And always on the forefront of technology, 1997 was ASCII-ART year.
<JamesOff> I have here a nice piccy of the enterprise
<JamesOff> ___
<JamesOff> ___....-----'---`-----....___
<JamesOff> =========================================
<JamesOff> ___`---..._______...---'___
<JamesOff> (___) _|_|_|_ (___)
<JamesOff> \\____.-'_.---._`-.____//
<JamesOff> ~~~~`._ `---' _.'~~~~
<JamesOff> `-----'
--
<JamesOff> and here we have the defiant
<JamesOff> ___.---' \
<JamesOff> __.---' ___.-\- \
<JamesOff> \ __.---(______\\ \__
<JamesOff> __.-\__) ___.---` `-.
<JamesOff> _| \ ___.---' \|| `.
<JamesOff> .-' | ' ___--_.--. \|`---`.
<JamesOff> --| _|___----' .' _.._`-. | \__ _\_
<JamesOff> | | |_ [[[[| > / .'__- `. \ | |/___`--.
<JamesOff> | | _|======---- | |(o_)] | | |-->-|___-- |
<JamesOff> | | |___[[[[| > \ `._ -_.' / | _|\___.--'
<JamesOff> `--| | ----.___ `._ `' _.' | / /
<JamesOff> `-._| .___ `-- `--' /|.---.'
<JamesOff> |__ /_ `---.___ /|| .'
<JamesOff> `-/__) ______`---._.-'

 Only if heavy weaponary is involved...
[0:31] <confused> I wanna start an arguement!!!
[0:31] <Kit_> Ok - are you a shooter
[0:31] <confused> You are a tool
[0:32] <Kit_> Do you own or have an interest in any sort of firearm?
[0:32] <dudley_> kit's a shirtlifter...
[0:32] <confused> Yeh a nuclear pistol
[0:32] <confused> BFG
[0:32] <Kit_> Right - lets argue...
--
And James can always smile through the pain of a "data re-location incident"...
<JamesOff> If Random > 0.5 Then CorruptAllOfDisk Else CorruptALittleBit
<JamesOff> thats the main command in drvspace
--
And still Kit... never learns...

--
Kim is well known for many things, including hurting herself...
[0:50] <FairyDust> Ouch!
[0:50] <FairyDust> I ran over my toe
... singing ...
[0:54] <FairyDust> La la la la la...
... and being bored ...
[0:56] <FairyDust> I'm bored. :(
(And yes, those are all from the same day)
Ahhh bless... it's the first ever "topic" we had when Kim didn't realise what she'd said in English slang
[1:01] <FairyDust> Hey James Wanna take me?
<JamesOff> * There is an uncomfortable pause
Fortunately, once Kim was aware of her error, everything was cleared up
[1:10] <FairyDust> heheh sorry James
[1:10] <FairyDust> let me refrase
[1:12] <FairyDust> James would u like to go to Rome with me?
[1:12] <FairyDust> There I didn't screw up to bad that time did I?
Pain...
[1:28] <FairyDust> ouch hurt myself again
[1:28] <FairyDust> but too weird to tell u guys
[1:28] <FairyDust> u'l think I'm insane
(We never did find out what Kim did that time)
And of course, the #ags ops are cultured people, each and every one of us
[1:32] <FairyDust> OH NO!  HELP ME!
[1:32] <reaperman> ok
<JamesOff> kim! put these in your ears quick!
* JamesOff hands kim headphones
[1:32] * reaperman decapitates kim with cheeseknife
[1:32] <reaperman> similar result...
<JamesOff> !
[1:32] <reaperman> :>
<JamesOff> rather terminal
[1:33] <reaperman> no more opera though...
[1:33] <FairyDust> hehe Thanx JA
[1:33] <FairyDust> OOPS
[1:33] <FairyDust> HEHE
[1:33] * reaperman gets frowned at.
[1:33] <FairyDust> well u got the point
* JamesOff knows enough about opera to avoid it
* JamesOff is listening to Tchaikovsky
<JamesOff> :)
<JamesOff> #dum de dum
[1:34] * FairyDust smiles at Reap
[1:34] <FairyDust> how do u know about opera James?
[1:34] <FairyDust> U sing it??
<JamesOff> #dum dum de dum de dum
<JamesOff> no
[1:34] <FairyDust> :) hehehe
<JamesOff> i avoid it
[1:34] <reaperman> I like the pearl fishers duet by Bizet.
[1:34] <FairyDust> oh no its back!
[1:36] <FairyDust> Oh good Comedy show
One thing you could never accuse us of is stupidity
[23:44] <dudley_> Pointless fact of the day : If UK was a US state, it would be the 18th largest.
or culture
[23:54] <dudley_> arse
[23:54] <reaperman> eh?
[23:54] <dudley_> drink
[23:54] <dudley_> girls
[23:54] <reaperman> feck
[23:54] <reaperman> :)
[23:54] <dudley_> feck
Because we're computer scientists, we know our way around the insides of the magic boxes
[0:00] <dudley_> Main things in ANY Pc.
[0:00] <dudley_> CPu - Processor - does the work. Mostly made by Intel.  Super-fast but needs constant power.
[0:01] <dudley_> stores stuff
[0:01] <Kitsune_X> how?
<JamesOff> power supply - shiny square thing. don't open it
[0:01] <dudley_> computers store using 0 and 1s
[0:02] * dudley_ tries to work out how to explain.
[0:03] <dudley_> James? can you explain binary numbers easily?
[0:03] * Kitsune_X know binary.
[0:03] <dudley_> good
[0:03] <dudley_> That's how things are stored.
[0:12] <dudley_> Hard disk - stores same as memory but much slower. Does however not need any power.
[0:13] <reaperman> cpu = very useful :P
[0:13] <reaperman> :)
[0:13] <dudley_> Hard disk is the loud buzzy thing that takes up most of the startup time
If you think we're cultured, you should see the bots
[1:13] <PheobeOff> arse
[1:13] <dudley_> uh-ho
[1:13] <PheobeOff> drink
[1:13] <PheobeOff> feck boys
[1:13] <dudley_> help!
--
James was so happy about getting his water filter, his knowledge of the 3 states of matter escaped him...
* JamesOff looks at lovely cuppa tea with no film on top
<JamesOff> pat pat
* JamesOff wipes fingers on chair
--
Fortunately for us, there are people more stupid than we are
[1:36] * Agos sets fire to room, blocks all exits, and leaves
--
Dudley yet again comes up with a good theory but forgets that modems rarely have deductive reasoning powers...
[2:00] * dudley_ in gratitude for a 3.5kbs download gives his modem a 3.5second rest
<JamesOff> generosity or what
[2:02] <dudley_> I'm hoping the modem will realise the link and d/l a 1gb/sec
<JamesOff> ambitious
<JamesOff> a jaz disk a second?
[2:03] <dudley_> <g>
--
Lifelike bots? You'd better believe it:
[23:28] <dudley_> Pheobs and Monica both go to a girls school across the road
[23:29] <PheobeOff> hello
[23:29] <dalover> i thought you went to a&m
[23:29] <MonicaOff> heya dalover
[23:30] <dalover> we have an ags channel at texas A&M
[23:30] <dudley_> ah
[23:30] <dudley_> I see.
[23:30] <dalover> hello monica
[23:30] * dudley_ understands confusion
[23:30] <MonicaOff> hello
[23:30] * PheobeOff goes for drink - brb
[23:31] <dalover> where are yall from
[23:31] <MonicaOff> about 40miles from London UK
[23:31] <dalover> cool
[23:32] <dalover> i might go there for xmas
[23:32] <dudley_> All from within 5 miles of each other
[23:32] <dalover> cool
[23:33] <dudley_> james - had a chance to look at those 2 files?
<JamesOff> not yet
[23:33] <PheobeOff> back.
[23:33] <PheobeOff> Send me a copy I got gamemenu running easily
[23:33] <dudley_> np
* JamesOff saved them to g:
[23:34] * dudley_ feels really dumb now
[23:34] <MonicaOff> g ?
[23:34] <dalover> well yall have a good year i gotta go
<JamesOff> monica - my jaz drive
[23:34] *** Parts: dalover<EMAIL_ADDRESS> :P
[0:09] <dudley_> hot, boring, full of old buildings. Worse - old religious buildings
--
Although we do get confused from time to time
<JamesOff> Arrrrgh! "The background task 'CalcBestApproach' caused a GPF in your Neural
Net.  Kit got *very* confused at one point
[23:17] *** Joins: Reapster<EMAIL_ADDRESS>The full explanation for this incident is protected by the official secrets act.
--
And despite being a girl bot, someone should have told kit about Pheobs' Thai kick-boxing medals...
[23:30] <Reapster> #"If your happy and you know it thump the bot..."
 I'm alergic)
[23:32] *** Joins: Reapster<EMAIL_ADDRESS><JamesOff> lol
[23:32] <dudley_> pheobs is alergic
[23:32] <Reapster> <f>
--
Kam, did you really mean to tell us this?
[23:58] * Kamala is tired went to bed at 7 am but did not do much sleeping
--
[23:33] * dudley_ has very thick skin
[23:33] <dudley_> Either that or I'm putting on weight
<JamesOff> you're putting on weight
[23:33] <dudley_> WAHHHHHHHHHHHHHHHHHHHHHHHHHHH!
[23:34] <dudley_> sniff
Sadly further investigatin and several broken sets of scales proved that Dudley was indeed putting on weight.
--
James' decency filter can be very effective sometimes...
[0:14] <FairyDust> hold on K?
<JamesOff> okie
* JamesOff looks for something to hold on to
<JamesOff> ERROR: That joke has been terminated on grounds of decency
[0:15] <FairyDust> hehehe
[0:15] * FairyDust hands JAmes a handle of some kind
<JamesOff> oh thanks
* JamesOff holds onto handle :)
[0:16] * dudley_ reminds kim she forgot to attach the handle to something
<JamesOff> dud - better than
<JamesOff> ERROR: That joke has been terminated....
[0:16] <dudley_> :)
--
And still Kit is over-protective of the channel. Anyone would think he was a psycho the way he uses that Kick command.
[2:35] * Lavalamp iz dead.
[2:35] *** Lavalamp was kicked by Reapster (Reapster)
[2:35] <FairyDust> REAP!!!!!!!!!!!!!!!!!!!!!!!!
<JamesOff> erm
[2:35] *** Reapster sets mode: +v muggy2
[2:35] <sheep> kit
[2:36] *** Reapster was kicked by FairyDust (FairyDust)
[2:36] *** Joins: Reapster<EMAIL_ADDRESS>[2:36] <muggy2> ?
[2:36] <Reapster> lavalamp izdead????
[2:36] *** MonicaOff sets mode: +o Reapster
[2:36] <FairyDust> hmph
[2:36] <muggy2> reapster what's +v mode?
[2:36] <sheep> i think we need a peaceful mediator here. james step forward
<JamesOff> kit, i think he meant in terms of being tired
[2:36] *** Reapster sets mode: -o Reapster
[2:36] <FairyDust> Great now I gotta explain
[2:36] * FairyDust slaps Reapster around a bit with a large trout
<JamesOff> mon invite lavalamp
[2:36] <Reapster> sorry - i though in terms of connection
[2:37] <MonicaOff> Affirmative: Inviting lavalamp to #ags.
[2:37] *** Parts: muggy2<EMAIL_ADDRESS><JamesOff> kit - if the connection was dead, how could he send the message?
[2:37] <FairyDust> thanks Sheep
[2:38] <Reapster> because muggy2 appeared exactly as that message appeared - so i assumed it was lavalamp saying it gone duff
[2:38] *** Joins: Lavalamp<EMAIL_ADDRESS>[2:39] <FairyDust> Heya Matt
[2:39] <Lavalamp> yo
<JamesOff> re matt
[2:39] <FairyDust> u might not want to anything about being dead this time
[2:39] <FairyDust> :)
[2:39] <sheep> welcome back lavalamp, feel free to abuse kit
Well, abusing kit comes free when you enter #ags. (although a 51p donation will get Kit's brother to mince him for you)
--
Nick had trouble with the idea of check boxes...
[2:43] <dudley_> Nick's details from ICq include the following
[2:43] <dudley_> Gender : Female
--
Sometimes you have to be cruel to be kind...
[0:05] * FairyDust is choking on a piece of popcorn
[0:05] * dudley_ slaps kim on back
[0:06] * FairyDust chokes even harder as it goes further down my throat.
[0:06] * Reapster jumps up and down on Kim until popcorn reaches stomach
[0:06] <Reapster> :) - there you go
[0:06] * dudley_ looks at kim' now concave stomach
--
And faced with the lonliness of his existence, Nick seeks confort in the arms of a...
[0:12] <Nick> no, the dog's asleep beside me
--
Dudley has always been the master of the understatement...
[23:15] * Dudley_ calculates cost of 162 Jaz disks....
[23:16] <Dudley_> Have to wait till next pay-day ;-)
--
And James forever regreted not popping down to the shop the minute he ran low on...
<JamesOff> oh no! i've run out of spice girls
--
So you try to work out how much going to the loo tired dudley out...
* JamesOff goes to warp in direction of loo
[23:05] * dudley_ being more tired than James heads for loo at half-impulse.
[23:06] * dudley_ ambles back from loo at 200kph
--
Dudley did plan to enter the "Blind-omlette" championships, but training was hard...
[23:50] <dudley_> Anyone know a fool-proof method removing 6 broken eggs from a floor?
[23:50] <dudley_> a stone floor.
[23:51] <FairyDust> Vacuum!
<JamesOff> toungue
[23:52] <FairyDust> yuck!
<JamesOff> :)
[23:52] * dudley_ wonders if anyone knows how to remove 6 eggs and a teabag from a stone floor
--
One of life's eternal truths is that Kit never proofreads...
[0:09] <reapster> fucking midi files
[0:10] <dudley_> kit - we don't want to know about your personal life.
 :)
Although IE tends to be slower and misses out parts at random...
--
When Kim goes to sleep she likes to stretch out a bit, in this case, 5000 miles...
[23:34] * FairyDust falls asleep on James. ZZZZZZZzzzzzzzzz
* JamesOff moves arm to reach mouse
--
Dudley is not maintenance minded, as we discovered when he tried to find out what was wrong with his CD-ROM drive...
[0:26] * dudley_ opens
[0:26] * dudley_ presses
[0:27] * dudley_ gets head blown off by industry strength laser
[0:27] * dudley_ retrieves head
[0:27] <Reapthing> <g>
[0:27] <dudley_> selotape
--
At Aylesbury Grammar School we have the greatest respect for our teachers...
[0:32] * dudley_ looks at idiot proof 20 page manual
[0:32] <dudley_> I think Mr Thornley'll need a hand with some of these words
[0:32] <dudley_> like BBC
<JamesOff> or "the"
<JamesOff> "a"
[0:32] <dudley_> :)
In the end it confused the teacher to hell and he gave up
--
And the combination of Caffeine, colourants, sugar, honey and nuts is lethel to dudley....
[0:55] * dudley_ is now on a major Dr Pepper / cookie high
[0:55] <dudley_> wheeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee!
[0:55] <dudley_> boing!
[0:55] <dudley_> woohoo!
[0:55] <dudley_> wibblewobblebannanahippoarse!
[0:56] <dudley_> narfzoikpoit!
[0:56] <dudley_> Doiper!
[0:57] <dudley_> phew!
[0:57] <dudley_> I feel much better now.
Dudley was last seen in a rehabilitaion clinic in Bromsgrove...
 :P
[23:14] <dudley_> And 2 tick boxes marked "M" and "F"
[23:14] <dudley_> Next one is "age"
[23:15] <dudley_> What? Age of my pets?
[23:15] <dudley_> fair enough
[23:15] <dudley_> Then you get to the choices....
[23:15] <dudley_> "Pub" "burger" "pizza" and "restaurant"
[23:15] * dudley_ eats out at a burger
[23:16] <dudley_> fool
--
[23:06] <reapster> once slapped - forever quiet.
Yeah right :)
--
And the issue of exactly what is under dudley's bed is set to run and run...
[1:08] <`Nick> I lost mIRC btw
[1:08] * dudley_ did that
[1:08] <dudley_> I found it under my bed
--
Kit gets strange cravings as well though, in this case, for powdered mashed potato.
[1:19] <reapster> I NEED SMASH I NEED SMASH
It's either that or a banned drug. Actually, having tasted the afore-mentioned potato I think it should be banned... :)
--
And, always one to plan ahead, Dudley readies himself for the banning of Atomic Warfare...
[0:06] * dudley_ will create the cabbage bomb
--
And having discovered a few cool bot commands, Dudley wonders if they'll work on James.
[23:55] <dudley_> James - become a trappist monk
<JamesOff> dud: get lost
[23:56] <dudley_> oh well
[23:56] <dudley_> worth a try
--
James tells us what would happen if you put a finger on a spining hard drive at InterNic: apparently, the hard drive would stop and...
<JamesOff> * InterNic starts spinning at 2000rpm
--
James is always one for the peaceful solution...
[0:41] *** Quits: dudley_ (Kit, James called you a wanker. (dudley runs for it))
[0:41] <reapster> thanx dud
[0:41] <reapster> :)
[0:41] * reapster unpacks Nerve gas bomb
* JamesOff packs it away again
Boring...
--
And James' organisation is rumoured to be responsible for 98% of the internet's backlog...
* JamesOff makes note to kick kit
* JamesOff reads note
* JamesOff kicks kit
--
Sorry, Dudley, you *what*?
[0:29] <dudley_> you know I'd rather have a Corsa than the Astra
(Dudley would like to very it very clear the above are models of car. He would also like to make it clear that now he's passed his test and can drive on his own, he's discovered that the above line is quite clearly bollocks)
--
Dudley comes from the IRA school of tiding up...
[0:44] * Voyabot replicates Dirt-Devil Crumb Buster and sends it by express courier to Dudley.
<JamesOff> * Dudley_ blows up crumbs with Crumb Buster
--
And James was very glad he bought that Spell-right armour
[0:22] <reapster> phooooom
* JamesOff is impervious to incorrectly spelled explosions
--
Dudley is practising for the end of a long drinking session in the pub...
[0:37] *** Quits: dudley_ (And the drinks are on James. (runs for it))
[0:38] <reapster> :)
<JamesOff> ahem
* JamesOff removes drinks from head and hands them out
James, in the meantime, was obviously practicing for the all-comers crap joke championship.
--
James' alternate theory of the job of Santas elves was fun...
<JamesOff> cue people walking a 3 x the speed of light and removing other peoples' bras
<JamesOff> run runity run run
<JamesOff> bash prod trip
--
James can be cruel sometimes to a humble "blokepretendingtobeabot"...
<JamesOff> dud eat small lampshade
[23:17] * dudley_ eats a small lampshade and is violently sick
--
And the craze for version numbers goes on and on...
[23:45] <reapster> ooooh - sounds like encryption - can I play?
<JamesOff> you can be kicked
[23:46] * reapster offers Jamesoff anti-flame v1.02
[23:46] * dudley_ offers james NoKit 95 v1.00
* JamesOff gets out anti-talk_about_encryption 2.3
--
Dudley in his usual forthright style gives his opinon of care in the community...
[0:29] * dudley_ has always felt that a sledge hammer is a far more amusing criminal deterent
--
And dnelms takes the "Most Incorrect Statement 1997" award. Apparently he'd like to thank his sister, his girlfriend and his dog, but not presumably at the same time.
[23:32] <dnelms> Kerzon indiana?
[23:32] <dnelms> He's not in indiana :)
--
Kit *still* doesn't learn...
<JamesOff> /kick kit not really
[0:17] <reapster> Just try it - go on.
[0:18] *** reapster was kicked by JamesOff (alright)
--
James has a low opinion of Java
<JamesOff> "You need a Java enabled browser to view this applet." <-- and a P5billion with 4squillion teramegs of ram using a 50Pbit connection
* JamesOff doesn't like java
Dudley of course views java with just a 49Pbit connection, but he's always lived life on the edge...
--
It's sad really...
[1:18] <Nick> how much coffee?
[1:18] <FairyDust> knowing James alot
<JamesOff> 1 cup
[1:18] <Nick> boring... :)
<JamesOff> of instant coffee...
<JamesOff> ...powder
* JamesOff gets spoon
<JamesOff> * munch munch munch
* JamesOff finishes eating the spoon and starts on the coffee
but since the coffee was Safeway own brand, the spoon probably tasted better...
--
Nick gets lucky
[1:24] <BundyGirl> ßundyGirL gives Nick a great big SuperTightAndReallySuperEroticGropingFondlingEarthShatteringSonicBoomOhGawdIfYouStopI'llKillYouAreBetterThanHeavenYetHotterThanHellWatchWhereYaStickYerHandsSuperHugeOhGawdOhGawdOhGawdDon'tYaDareStopTouchingMeHuggerooniesAndAKneesAreShakingEarthIsTremblingMyHeartHasStopBeatingMyKneesAreShakingLotsAGoosebumpsWasThatTheGroundMovingPassionateWetDeepLingering KISS
And apparently it was all becuse Nick liked Milk Tray.
--
Dudley has promised to stop making jokes like this when we go to uni. Well, that's half the channel traffic gone...
[0:21] * reapster has 7up Light
[0:23] <dudley_> light?
[0:23] * dudley_ bolts stabledoor after watching horse dissapear over hill
--
And Dudley has never been one to RTFM...
[0:41] * dudley_ borrows gun from kit
[0:41] <dudley_> BOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOM!
[0:42] <dudley_> I'm still here. hmmmm
[0:42] * dudley_ failed to read suicide instructions
[0:42] <dudley_> Ah!
[0:42] <dudley_> Point gun at self...
[0:42] <dudley_> SORRY ADAM!
--
He does however find the most practical use for almost anything...
[0:46] <reapster> vb replicate Dudley_ One Set Borg Eye implants v1.03
[0:46] * Voyabot replicates One Set Borg Eye implants v1.03 and sends it by express courier to Dudley_.
[0:49] * dudley_ buys upgrade to v1.04 including new X-ray mode
[0:49] * dudley_ heads for room next to AHS changing rooms
[0:49] <dudley_> brb
--
It appears Kit and Dudley will get along with each other at uni by playing to their strengths...
[0:57] <reapster> I bake a mean loaf
[0:57] * dudley_ wants kit to bake a nice loaf
.
.
.
[0:57] * reapster enjoys cooking
[0:57] * dudley_ enjoys eating
[0:58] <dudley_> should be perfect...
[0:58] <dudley_> :)
--
After 14hrs uptime, the usually calm dudley and james switch to 18 (R) rated chat...
[1:14] * dudley_ 's PC sets mode -canbefucked
<JamesOff> hmmm. an unfuckable pc
<JamesOff> (sorry)
[1:15] <reapster> <g>
[1:15] <dudley_> erm... checks time
[1:15] <dudley_> ah, past 14 hours
--
and James has learnt the hard way you can lead a bot to a chan but you can't make it enter...
<JamesOff> in query to mon:
<JamesOff> <JamesOff> join #ags
<JamesOff> <JamesOff> for fucks sake join #ags
James is our graphics person...
* JamesOff tells NS where it can stick its </TD> tag
Well, he's graphic in his complaints anyway...
--
Dudley's plan to nick James' coffee went horribly wrong...
[0:46] * dudley_ secretly runs 5 mile long straw into james' room
[0:46] <dudley_> plink!
[0:46] <dudley_> slurrrrrrrrrrp
[0:46] <dudley_> thanks
[0:47] <dudley_> hey wait a minute that was lighter flu(hic!) BOOOOOOOOOOM!
Dudley's body was scattered over a 7 mile area. It's a good thing he was running a T-1000 patch.
--
Borgie (bless) likes a busy channel and can be very forceful...
[23:08] * borgie opens and closes James' mouth untill hew talks
[23:09] <^TheRaven> hehehehe
* JamesOff does passable fish impression with borgie's help
<JamesOff> blah blah blah :)
and it allowed James to forfil a fantasy as well...
--
Baggage's initial IRC confusion was mercilessly lept upon by the other ops...
[22:49] <Baggage> And I had a sex change.
[22:49] * dudley_ slaps baggage with the bonnet from a 1963 Ford Anglia
[22:49] * Butcher_ hacks IE4 to mince
[22:49] <dudley_> James- Baggage has become Male
<JamesOff> ! eek
[22:50] * dudley_ giggles manically
[22:50] * Baggage puts Dudley in Blender with mushy peas.
[22:50] * Butcher_ puts baggage in transporter
[22:50] * Butcher_ forgets to rematerialize baggage
[22:50] * dudley_ introduces Baggage to the delights of combine harvestor innards.
[22:50] <dudley_> squelch
[22:50] <Butcher_> he he
[22:51] * Baggage would kick Butcher were he an op
[22:51] <^TheRaven> =) hmmmmm
[22:51] <reapster> no he wouldn't
[22:51] * Butcher_ would ban baggage if he were an op
[22:51] *** reapster sets mode: +o Butcher_
[22:51] <dudley_> okey
[22:51] <reapster> go ahead...
[22:51] <reapster> :)
[22:51] <Butcher_> thanks
[22:51] * Baggage wants to know what is meant by internet virgins
[22:51] <dudley_> baggage - Well, you know what a normal virgin is....
[22:51] <dudley_> well.. you might.
Sadly, Dudley's explaination was never finished. (Dudley would like to state that an internet virgin is someone who hasn't shagged up the internet. Obviously)
--
Dudley is not ashamed to admit his slight dandruf problem...
[23:37] <Butcher_> dudley - obviuosly you don't use head and shoulders
[23:37] <dudley_> butcher - Head and Shoulders DOES NOT work
[23:37] <dudley_> at all
[23:37] <dudley_> It's + duff
[23:37] * reapster knows why
[23:37] <Butcher_> shave head then
[23:37] <Butcher_> reapster - why?
[23:37] * dudley_ uses Polytar Plus
[23:37] <dudley_> so strong its perscription only
[23:37] <reapster> it basically puts a layer of latext based stuff OVER the skin on your head.
[23:37] <^TheRaven> =)
[23:37] <Butcher_> mm strong then
[23:38] <Butcher_> just get a latex head :)
[23:39] <dudley_> butcher - Or wear the kind of gear you can only get through dodgy mail-order catalogues
Rumours that Dudley has the contract for the artifical slopes at the winter olympics has been denied. Meanwhile the other ops want to know where he got the catalogues. Rumours that they want some themselves have been...
--
And the #ags music tolerence is, to put it mildly, low.
<JamesOff> #RAISE YOUR HANDS
* JamesOff turns down cd
[23:31] * Baggage_ raises hands
[23:31] * Butcher cuts off james hands
<JamesOff> vb replicate JamesOff hands
[23:31] * Butcher cuts off baggages hands
[23:31] * Baggage_ firebombs Butcher
[23:32] * dudley_ sends Baggages hands to Jamesoff
<JamesOff> * stitch
[23:32] * Baggage_ kindly asks JamesOff for hands back
[23:34] * Baggage_ is still waiting for hands
<JamesOff> vb replicate Baggage box of luxury hands
[23:34] * Voyabot replicates box of luxury hands and sends it by express courier to Baggage.
[23:34] * Baggage_ returns to non-psychotic personality
[23:34] * Baggage_ tests new hands
[23:35] <Baggage_> Yup, they work
What we want to know, is, how did James type that 1st vb replicate line when he didn't have hands, and how did he stitch them on.
--
There is no debate on the favoite spice girl of #ags. The debate on who gets her is more violent...
* JamesOff downloads the spice girls
<JamesOff> *wish*
[0:07] <Butcher> give me Emma
[0:07] <`Nick> LOL
[0:07] <Butcher> keep the rest
[0:07] <`Nick> no, Emma's mine!
<JamesOff> sorry. Emma is official #ags spice girl
[0:07] <Butcher> she's MINE!
<JamesOff> and i'm an op
[0:08] <Butcher> drat have to share
<JamesOff> and my name is above Nick's on the names list
[0:08] <Butcher> that's cos it's aplphabeticcal!
<JamesOff> be quiet
[0:08] * Butcher steals Emma from James
[0:09] <`Nick> i kan spel 2!
[0:09] <Butcher> shut up Lamb Boy!
* JamesOff withholds the URL of the best SG site around
[0:09] <Butcher> SG?
[0:09] * `Nick tries in vain to contain build up of steam in head!
<JamesOff> SG = Spice Girls... DOH!
* JamesOff drills hole in Nick's head to let steam out
[0:10] * Butcher realised straight after typing
[0:10] <`Nick> DOH!
[0:10] <Butcher> DOH!
<JamesOff> DOH!
[0:10] * `Nick drills hole in Ric's head for derogatory comment!
[0:10] * Butcher politely requests URL
* JamesOff politely requests Emma returned from Butcher :)
[0:11] * Butcher returns Emma
<JamesOff> http://<IP_ADDRESS>/spice_girls/index.htm
[0:11] <Butcher> ta
Ah, the barter system. Our economy was built on it. Emma was unavaliable for comment...
--
To call the #ags crew accident prone would be an understatement
<JamesOff_> * ears fall off
<JamesOff_> oops
<JamesOff_> * pick
[0:49] * Butcher picks up james ears
<JamesOff_> vb replicate JamesOff selotape
[0:49] * Voyabot replicates selotape and sends it by express courier to JamesOff.
<JamesOff_> richard: plz selotape ears to side of head (my head)
<JamesOff_> one per side
[0:50] <`Nick> :P
[0:51] * Butcher selootapes james ears to his left arm
<JamesOff_> ho hmm
[0:51] <Butcher> oops
[0:51] * Butcher sellotapes james ears in proper place
<JamesOff_> thank you
.
.
.
[1:01] *** Quits: Butcher (accidentally chopped off legs!)

--
Kit has never suffered from self-doubt.
[0:34] <reapster> yeah - and I'm female.
--
If you are going to hack the network, have help...
[0:34] <_Butcher> James, I'l have my ultra turbo high power mincing machine in school on Monday
[0:34] <reapster> with added mincing ability?
[0:34] <_Butcher> yep
[0:34] <reapster> hmmm
[0:34] <reapster> cool
[0:35] * dudley_ is deliberating whether to drag his laptop and a serial cable in and sneakily copy FTSE off the network
[0:35] <dudley_> just to see if it can be done
[0:35] <_Butcher> if carpenter catches you you'll become a puddle of goo
<JamesOff> unless we employ ButcherSecurity (tm)
[0:37] <_Butcher> I'll have the mincing machine warmed up ready
--
Be caeful when you greet...
[1:42] *** Joins: _Butcher<EMAIL_ADDRESS>[1:43] <dudley_> butch. (nod)
<JamesOff> richard (headbutt)
[1:43] <_Butcher> james (pickaxe)
<JamesOff> dudley (lightly grill)
[1:44] <dudley_> voyabot (Deep fat fry)
[1:45] <_Butcher> dudley (mince and add to stew)
<JamesOff> richard (finely cube)
[1:45] *** Quits: Voyabot (Ping timeout)
Oh, and never headbutt a bot.
--
Also, relying on old sayings never gets you very far...
<JamesOff> bird in hand >= two in bush
<JamesOff> ergo one in bush <= half bird in hand....

--
Cynical? Us?!?  Borgie wants to have our babies...
[22:44] <borgie> DUDLEY_!!!!!!!!!!!!!
[22:44] <borgie> BAGGAGE!!!!!!!!!!!
[22:44] <borgie> _BUTCHER!!!!!!
[22:44] <borgie> DAN!!!!!!!!!!!
[22:45] <borgie> JAMES!!!!!!!!!!!
[22:45] * dudley_ is blown off feet by force of greeting
--
Sometimes we think these bots have a life of their own...  :P
--
And when Dudley eats, Dudley eats...
[23:24] <borgie> DIG IN GUYS!!!!
[23:24] <dudley_> dive
[23:24] <dudley_> munch
[23:24] <dudley_> chew
[23:24] <dudley_> eat
<JamesOff> dudley: that's not the food
[23:25] <dudley_> consume
[23:25] <dudley_> devour
[23:25] <dudley_> absorb
[23:25] <dudley_> osmosise
[23:25] <dudley_> james - oops
<JamesOff> that was a pile of bricks
[23:25] <dudley_> sorry
[23:25] * dudley_ re-builds james' house
[23:25] * dudley_ spits out roof tile
Any cracks along the lines of James getting wet because of Dudley will be punishable by Barbie Girl single.
--
Butcher knows how to have a good night out...
[23:44] * _Butcher has party (any excuse)
[23:45] * _Butcher becomes stupidly drunk and passes out in a pool of vomit
<JamesOff> whose vomit?
[23:46] <_Butcher> erm.. good question
<JamesOff> not mine
[23:46] <_Butcher> mine possibly
<JamesOff> vomit check report 100%
[23:46] <_Butcher> vomit check report not functioning
<JamesOff> there we go then
[23:47] <_Butcher> presumably you're still sober though
<JamesOff> yup
* JamesOff goes for coffee
James' personal life is no concern of ours...
--
Always ask for an ownership certifcate when a Wine Gum is offered. As Dudley descovered to his cost...
* JamesOff offers everyone a wine gum
[22:11] * reapster accepts
[22:11] <KT_> no they're mine!!!
[22:11] * reapster doesn't accept
[22:11] * dudley_ pinches and runs for it
* JamesOff takes it back
[22:11] <dudley_> armed with Megadrive box
* JamesOff reaches for big gun and points it at dudley
[22:11] * KT_ runs after dud at high speed
[22:12] * KT_ is armed with baseball bat
* JamesOff hands KT Megadrive box-proof hat
[22:12] * reapster hides very well
[22:12] * dudley_ attaches chemical weapons to box
[22:12] * Davria pulls dud to the floor while KT swings the bat wildly
* JamesOff spies Kit hiding behind lamp post
[22:12] * dudley_ buys his own sodding wine gums
[22:12] <dudley_> LOL
[22:12] * dudley_ throws box at kit
[22:12] * reapster hurls lampost at Jamesoff
[22:12] <reapster> weee - FIGHT
{We should explain that dud had a cut lip and whenever he laughed the scab fell off}
[22:13] * dudley_ laughs so hard his lip explodes again
[22:13] <dudley_> oh sod
[22:13] <dudley_> wipe
* JamesOff ducks and lampost flies out of #ags
[22:13] * dudley_ now has even more blood on his sleeve
<JamesOff> * lamppost heads into #startrek and hits Kerzon on the head
[22:13] <reapster> oh bugger
[22:14] <reapster> :)
* JamesOff informs Kerzon of said fact
[22:14] * reapster runs
[22:14] <reapster> (slowly)
[22:15] <KT_> haha
--
And while James likes the attention, when he offered to be half with Davira and half with Sara, this was not what he had in mind...
[22:27] * Davria and the raven split james inhalf
[22:27] <^TheRaven> hahaha =)
[22:28] <^TheRaven> I'll give you 100$ for you half borgie =)
--
#ags plans for the future...
[22:39] <Davria> James and KT should get married and invite me to teh wedding
[22:39] <KT_> ok, we were looking at rings today, weren't we?
[22:40] <^TheRaven> go KT =)
[22:40] <^TheRaven> marry that boy =)
[22:40] <KT_> haha
[22:40] <KT_> yeah
[22:41] <Davria> I'll be the maid of honour
[22:41] <KT_> ok borgie
[22:41] <KT_> u can b a bridesmaid
[22:41] <KT_> vb is the page boy
[22:41] <Davria> yea!!!!
[22:41] <KT_> =)
[22:41] <Davria> ha
[22:41] <^TheRaven> what about me???????
[22:42] * reapster will be minister
[22:42] <Davria> raven is another bridsmaid
[22:42] <^TheRaven> hahaha =)
[22:42] <Davria> with mne
[22:42] <Davria> =)
[22:42] <^TheRaven> woohoo!!!
[22:42] <^TheRaven> =)
[22:42] <KT_> baggage offers to b brother of the bride
[22:42] * KT_ refuses politely
[22:42] <reapster> hmm
[22:42] <^TheRaven> hahaha =)
[22:42] <Davria> hahahah
[22:43] <Davria> who is the best man?
[22:43] <Davria> dudley_?
[22:43] <KT_> jms decides
[22:43] * reapster would offer ;)
[22:43] <reapster> :P
[22:43] <KT_> -:)
[22:43] <reapster> except I already have a job...
[22:44] <Davria> james........
[22:44] <reapster> :-)|| <-- Me with Dog collar
[22:44] <^TheRaven> job's are good =)
[22:44] <reapster> urm
[22:44] <reapster> I didn't mean that
<JamesOff> davria: hello? yes?
[22:44] * ^TheRaven needs a job
[22:44] <KT_> raven can cater
[22:44] <KT_> !!!!
[22:44] <Davria> who do you want to bo the best man?

* JamesOff is setting up an email address for KT
[22:56] <KT_> he's already doing jobs 4 me
[22:56] <KT_> j/k
[22:57] <^TheRaven> eww that's sweet =)
James will be away now while he re-builds the Hoover Dam at KT's request...
--
Not the most cunning disguise ever...
[22:41] <Baggage> Is Biip Bip?
[22:41] <Biip> yeah
[22:41] <Biip> :)
[22:41] <Alexj> :|
[22:41] <Butcher> why biip not bip?
<JamesOff> Biip: your cover has been blown! :P
[22:41] <Baggage> Hi Bip!
--
Alex makes the fatal mistake of putting the wrong type of slash in front of a command typed in the #ags window
[23:06] <Alexj> \QUERY JamesOff will you please kick that annoying bugger
<JamesOff> nice one alex
[23:07] *** Alexj was kicked by JamesOff (this annoying bugger?)
Dudley thinks he got the right bloke.
--
When a lamer came into the channel and started accusing us of things and thretning us, James obligingly looked them up in the dictionary...
<JamesOff> bum bandit (n). A person who steals people's bottoms
<JamesOff> fiery surprise (n) to receive a brand spanking new electric fire you never knew about
--
James learns the awful truth about KT...
<JamesOff> she's so sweet - she even managed to spend my money for me
[23:38] <Butcher> how nice
[23:38] <dudley_> James - Welcome to life with girls
--
James was looking for R rated mail...
* JamesOff complains at HotMail for not being so Hot
Apparently Hotmail does like him, it just had a headache
--
James and Richard attempt to get across to Dan what Alex's hair is like
[23:58] <Butcher> alex also has the worst haircut EVER!
<JamesOff> afro
[23:58] <|007|> like adam?
[23:58] <Butcher> looks duff
[23:58] <Butcher> duff+ infact
<JamesOff> like Ace? no way
<JamesOff> we're talking BIG hair
[23:59] <|007|> oooh
[23:59] <|007|> naked gun style?
* JamesOff wishes he had a photo of alex
<JamesOff> yeah, like that
[23:59] <Butcher> yep just about
[23:59] <Butcher> maybe a bit bigger
[23:59] <|007|> haha
<JamesOff> heh
Dudley just sugested that the word Crap would suffice.
--
And this one is probably best left to speak for itself...


The Digital South English Legendary (Digital SEL) is a web-based, interactive application that allows users to view multiple versions of individual texts from the South English Legendary at the same time.
The South English Legendary is a large collection of Middle English verse saints’ lives and related religious literature, originally composed in the late thirteenth century. The legendary was later revised and augmented, and its various forms enjoyed widespread readership, being copied until the fifteenth century. Today, the SEL survives in part or whole in more than 60 manuscripts. The legendary’s popularity and the readiness of later poets and scribes to revise and supplement the collection mean that there is a large degree of textual variation between individual witnesses of the SEL. Despite a great deal of work by earlier scholars, the SEL has never been edited in whole and the editions that have appeared are typical of printed editions in that they present a base text with variations noted in a critical apparatus.
The intent of the Digital SEL is to use a web-based application to create a kind of digital variorum edition of the text, which will allow users to view multiple versions of different SEL texts at the same time. The ultimate goal of the project is to provide a model of digital publishing that destabilizes the kind of editorial practice that imagines a “base” or “best” version of a text with variations noted in an apparatus.
Recent advances in web-based programing have made designing this type of edition possible. The advent of AJAX (asynchronous JavaScript + XML), popularized by Google Maps, makes it possible to load multiple different text files into the DOM at any time, without refreshing the browser. This allows users of the Digital SEL to pick various versions of a text and display them at will. JQuery UI’s resizable and sortable plugins enable users to manipulate objects on the page and view the texts in whatever order they please.
The Digital SEL is ongoing and will be updated as different aspects of the site are completed. As of this stage of the project’s development, I have designed and programed an application for viewing a sample set of texts: the previously un-published SEL life of Saint Botulf.
The Digital South English Legendary was conceived, edited, and developed by William E. Bolton. The Digital SEL is an open source project and all of the source code is available at GitHub. Please feel free to email me at wbolton@asu[dot]edu or find my contact information via my CV at my personal website
The Digital South English Legendary by William E. Bolton is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.


- AMPLIFYING EMOTIONAL STORIES THAT CREATE CHANGE IN THE WORLD -
Menu
Short Films
About
Contact
DJI
BBC & OC TRANSPO
BBC & SOY NINA
Al JAZEERA THE TRAVELLER
IBELIV
ALZHEIMER'S ASSOCIATION
ALLIANCE TO END PLASTIC WASTE
CARE


fakebook
®
Registration
It is safe and it will always be!
Non-Important Information
Birthday
Female
Male
Other
Important Information *required
Country
Germany
Serbia
Bulgaria
Greece
Door Color
Aunt Panties` size
30
32
34
More Personal Information
Register


%online%
Options:
Status:
Block Buffs:
Block Exp:
Hide Shops:
Auto Pick Up:
Auto Pick Herbs:
Auto SS:
Don't show Animations:
Block Trade Requests:
Block Party Invite:
Block Friend Invite:
Services


Auxilliary Tool:
A linear feature that uses the "Integral
Image" trick to efficiently evaluate convolution kernels on an image, where the kernel can be expressed as a sum of boxes.
More...
#include <BoxFeature.h>
Public Member Functions | |
| BoxFeature (cv::Size expectedPatchSize=cv::Size(0, 0), int nBoxes=2) | |
| Constructor. | |
| virtual | ~BoxFeature () |
| Destructor. | |
| virtual void | setFeatureParameters (const cv::Mat ¶mVec) |
| Set the parameters that describe the position of the boxes. See detailed description of the parameters below. | |
| virtual double | evaluateImagePatch (const ImagePatch *patch) |
| Turn an ImagePatch into a scalar value by applying the box filter. | |
| virtual void | filterPatchList (PatchList *patches) |
| Apply the feature to a PatchList data structure. |
Auxilliary Tool:
A linear feature that uses the "Integral
Image" trick to efficiently evaluate convolution kernels on an image, where the kernel can be expressed as a sum of boxes.
The derived HaarFeature class is a subset of these box features that are like wavelets composed of blocks.
| BoxFeature::BoxFeature | ( | cv::Size | expectedPatchSize = cv::Size(0,0) , |
| int | nBoxes = 2 |
||
| ) |
Constructor.
| expectedPatchSize | Specifies the size of the filter, which specifies the possible ranges for the box positions. |
| nBoxes | The number of boxes. The filtering time decreases linearly with the number of boxes. |
| double BoxFeature::evaluateImagePatch | ( | const ImagePatch * | patch ) | [virtual] |
Turn an ImagePatch into a scalar value by applying the box filter.
| patch | The image patch to evaluate. |
Implements Feature.
| void BoxFeature::filterPatchList | ( | PatchList * | patches ) | [virtual] |
| void BoxFeature::setFeatureParameters | ( | const cv::Mat & | paramVec ) | [virtual] |
Set the parameters that describe the position of the boxes. See detailed description of the parameters below.
The BoxFeature parameter vector has 5N+4 elements, where N is the number of boxes. The first 5N elements describe the sign of the box (addition or subtraction), x,y position of the box's top-left corner, and its width and height respectively. The parameters for each box are together, so the first 5 elements describe the first box, etc. The sign parameter can be -1 or +1, and the position parameters are bounded below by 0 and above by patchSize.[width or height]-1, as appropriate.
The last 4 parameters describe global behavior of the filtering process. They are: horizontal symmetry, vertical symmetry, mean subtraction, brightness normalization respectively.
The first two each effectively double the number of boxes, by reflecting them around the horizontal and vertical axes respectively. Values for these can be -1,0,+1. 0 means no symmetry, -1 means the symmetric box has the opposite sign, and +1 means the symmetric box has the same sign.
Mean Subtraction means the mean pixel value of the image patch is subtracted before filtering. This normalizes for contrast but not brightness. Brightness Normalization divides the image patch by its L1 norm before filtering. If both options are set, brightness is normalized and then the mean is subtracted. Both of these operations incur a time penalty, which is relatively small.
Implements Feature.
Reimplemented in HaarFeature.


Discover CiphSafe
CiphSafe provides an easy-to-use method for storing account+password pairs as well as any sort of notes you wish to keep safe. The notes section of each entry is basically a full-blown RTFD editor, just like TextEdit.
Adding and editing entries |
|
|
Adding and changing entries is quite simple, done with a no-nonsense entry window. Viewing and/or changing is as simple as double-clicking an entry. |
Searching is simple, Mac OS X-style |
|
|
Searching entries in CiphSafe is as easy as the familiar search in other Mac OS X applications: click in the search field in the upper-right corner and start typing. Click the magnifier glass to select which field to search, and the list of entries is constantly updated with your search needs. |
Exporting data |
|
|
CiphSafe now has two ways to get data to other applications: drag and drop, and an export option (new in 1.3). Drag and drop works as any Mac user would expect, and use the export feature to generate CSV or XML files from your data. |
Miscellaneous Options |
|
|
A few other bits you may want or need to know. |


Pep Guardiola encourages Man United star Fred after being racially abused
- Pep Guardiola offers Man United star Fred words of encouragement
- The Brazilian was racially abused during Red Devils' victory over Man City
- English FA are investigating the matter in a bid to punish the offender
Manchester City boss Pep Guardiola showed how compassionate he is after offering Manchester United midfielder Fred some encouraging words after being racially abused in last weekend's city derby.
A goal each from Marcus Rashford and Anthony Martial helped the Red Devils compound City's woes after going 14 points behind current table-toppers Liverpool.
The Brazilian was said to have been abused by a 41-year-old City fan - who denies he was being racist during the game.
PAY ATTENTION: Become a member of the leading sports Facebook group 'Naija Football Fan Zone'
SunSport reports that the authorities have arrested the man and the FA are likely to launch an investigation today.
Meanwhile, the former Barcelona and Bayern Munich handler was said to have tracked the Man United star in the tunnel to offer him some words of comfort.
Ndidi makes big statement about Leicester City's title challenge with Liverpool
It would be recalled that Man City was almost signing ex-Shakhtar Donetsk man, before joining the Red Devils in a deal around £52 million in summer 2018
Although, Fred did not see the abuse when it happened but he was dismayed when shown the footage in the dressing room.
READ ALSO: NAIJ.com upgrades to Legit.ng
Chief executive Ferran Soriano and other senior officials from City spoke to United director David Gill in the tunnel area after United’s 2-1 victory.
Soriano made it clear that they will look into the matter after condemning the attacker was said to have been hit with an object.
Legit.ng earlier reported that Manchester City’s title defence was dealt a massive blow courtesy of their bitter city rivals as Guardiola’s boys succumbed to a shock 2-1 loss to Manchester United.
Marcus Rashford and Anthony Martial scored a goal apiece to beat the defending champions in their crunch fixture over the weekend. The Red Devils are now fifth on the table after matchday 16.
Abu Azeez: Meet the only Nigerian rated among top 50 beach soccer players worldwide | Legit TV


sisy¶
Sisy is a Django package which uses the Channels message-passing infrastructure to run functions in worker processes. In other words, it lets you hand off work to background processes in various ways, rather than having long-running processes stall your web requests.
Sisy has the following requirements and compatibilities:
- Python 3.6 or above
- Django 1.11 or above, including 2.x
- Channels 1.1.8 or above (earlier versions may work but no guarantees)
Sisy is released under the MIT License.
Why yet another task runner package?¶
There are already several fine Python packages which function as task runners, such as celery, rq, and others, but I wanted to have a package that worked seamlessly within the Channels architecture, in order to avoid duplication of effort.
Design goals¶
Sisy has a few design goals that it is good to keep in mind when evaluating whether it will fit your particular use case:
- It is designed to work with tasks that are similar to those one would work with using the Unix cron utility. In other words, its tasks are expected to run on a frequency scale of minutes, hours, and days rather than seconds or milliseconds.
- It is designed for small to medium installations. I think it probably could handle a surprisingly large site, since it is possible to separate its workers, objects, and messages onto their own infrastructure through the use of such tools as Django database routing, channel layers, and separate redis servers. But it has not been tested in these scenarios.
- It is designed with developer ease of use in mind. It does lack certain facilities such as interruptibility, but such features can be designed into the functions that handle the task messages, and of course those functions can in turn send other messages if necessary.
Note
There is a demo project in the github repo, under extra/demo
. This
project is very basic, but provides concrete examples of using Sisy in
various ways, including data migrations. This project also functions
as the host project for generating these docs.
Table of Contents


Copyright |
2010 Thomas Sawyer, Rubyworks |
License |
BSD-2-Clause |
Status |
TapOut is a TAP handler. TapOut supports TAP-Y/J as well as traditional TAP.
TAP-Y/J is a modernization of TAP using pure YAML/JSON streams. Traditional TAP has less detail than TAP-Y/J, but it can still be translated with fairly good results. TapOut includes a TAP adapter to handle the translation transparently. Current TapOut support TAP v12 with minor limitations.
To learn about the TAP-Y/J specification, see the TAP-YJ.rdoc file.
For information about TAP, see testanything.org/wiki/index.php/Main_Page.
Using a test framework that produces a TAP-Y output stream, simply pipe the stream into `tapout`.
$ ruby-test -y -Ilib test/foo.rb | tapout
TapOut supports a variety of output formats. These are selectable via the first argument. The default if not given, as in the example above, is `dotprogress`.
$ ruby-test -y -Ilib test/foo.rb | tapout progessbar
TapOut is smart enough to match the closest matching format name. So, for example, the above could be written as:
$ ruby-test -y -Ilib test/foo.rb | tapout pro
And tapout will know to use the `progressbar` format.
To see a list of supported formats use the list subcommand:
$ tapout --help
If your test framework does not support TAP-Y, but does support traditional TAP, TapOut will automatically recognize the difference by TAP’s `1..N` header.
$ ruby-test -ftap -Ilib test/foo.rb | tapout progressbar
TapOut, Copyright © 2010 Thomas Sawyer
TapOut is licensed under the terms of the FreeBSD license.
See COPYING.rdoc and LICENSE.txt for details.


|
Book us now! Download Press-kit Customer Survey (right click, save as..) |
|---|
|
Specific quote or questions? Email<EMAIL_ADDRESS>|
|---|
|
Or call us! |
|---|
| We have a large group of seasoned performers available to turn any event into a hot party. We simply offer the best fire entertainment with more variety than anyone in the Mid-West USA, and proudly create a unique artistic presense that will not only entertain, but mesmerize crowds of all sizes and all age groups. We also perfrorm with LED/UV where fire is not suitable. Thank you for your interest in our troupe, we are eager to melt your face!
|
|---|
| Solo Artists & Acts starting at $175/hour Many of our artists have a diverse act that is all their own, and can create memoriable and exciting solo performances that entertain crowds of small to medium size. This option also works perfectly if you need a unique firey ambience to top off your event. View an example! Book this now! |
| Duet Acts starting at $300 What's hotter than a male / female fire duo!? This package includes a stunning combination of fire and choreography adding more depth and variety to events large and small. This combo also works as a unique firey ambience to top off your night! View an example! Book this now! |
| Just The Ladies starting at $450 Beautiful skilled ladies manipulating fire!? This package includes a minimum of 3 of our gals, spinning hoops, poi, staves and even breathing and eating fire. Adding a fire-femme spin to any event large or small. Choose from elegant, tribal, or sexy costuming. View an example! Book this now! |
| Just The Gentlemen starting at $450 Athletic and handsome men, making a presence in a firey manner. This package includes a minimum of 3 of our guys, spinning poi, staves, nunchucks, eating and breathing fire and so much more. Add this flaming hot group to events large or small. Choose from classy, martial, or sexy costuming. View an example! Book this now! |
| Variety Pack 3-8 starting at $450 Take your pick of our available performers and fire arts, create a show all your own or leave it to us to wow you with dynamics and make you sweat from the heat. This is where our diversity in gender, and variety of talents is best represented. We can craft this show to never be forgotten. View an example! Book this now! |
| All UV or LED performances also available Have an event that doesn't accomodate fire? We also offer UV blacklight performances with LED lit props in place of fire. Same Fire Tech show, but so much more COLOR! View an example! Book this now! |


# File vendor/plugins/active_scaffold/lib/helpers/view_helpers.rb, line 48 def in_subform?(column, parent_record) return true unless column.association # Polymorphic associations can't appear because they *might* be the reverse association, and because you generally don't assign an association from the polymorphic side ... I think. return false if column.polymorphic_association? # We don't have the UI to currently handle habtm in subforms return false if column.association.macro == :has_and_belongs_to_many # A column shouldn't be in the subform if it's the reverse association to the parent return false if column.association.reverse_for?(parent_record.class) #return false if column.association.klass == parent_record.class return true end


We provide an online platform where books customers meet many publishers countrywide and order the books they need in different parts of the country.We therefore not provide delivery service to them but only link them to legit products.This is because many people have been victims of substandard books and end up losing money to masters of pirated books.Publishers will get maximum revenue from their products because there will be no or minimal second party for their materials.
To partner with various publishers locally and worldwide for betterment of Education,to embrace everyone in our community,to provide diverse awareness of the reliable and legit technology.
We hope to eradicate the case of pirating books of publishing substandard materials,to connect Publishers to various trusted dealers countrywide,provide long lasting satisfaction to customers and make publishers acquire more revenue.


Geode solutions architects need to estimate resource requirements for meeting application performance, scalability and availability goals.
These requirements include estimates for the following resources:
- memory
- number of machines
- network bandwidth
The information here is only a guideline, and assumes a basic understanding of Geode. While no two applications or use cases are exactly alike, the information here should be a solid starting point, based on real-world experience. Much like with physical database design, ultimately the right configuration and physical topology for deployment is based on the performance requirements, application data access characteristics, and resource constraints (i.e., memory, CPU, and network bandwidth) of the operating environment.
Core Guidelines for Geode Data Region Design
The following guidelines apply to region design:
- For 32-bit JVMs: If you have a small data set (< 2GB) and a read-heavy requirement, you should be using replicated regions.
- For 64-bit JVMs: If you have a data set that is larger than 50-60% of the JVM heap space you can use replicated regions. For read heavy applications this can be a performance win. For write heavy applications you should use partitioned caches.
- If you have a large data set and you are concerned about scalability you should be using partitioned regions.
- If you have a large data set and can tolerate an on-disk subset of data, you should be using either replicated regions or partitioned regions with overflow to disk.
- If you have different data sets that meet the above conditions, then you might want to consider a hybrid solution mixing replicated and partition regions. Do not exceed 50 to 75% of the JVM heap size depending on how write intensive your application is.
Memory Usage Overview
The following guidelines should provide a rough estimate of the amount of memory consumed by your system.
Memory calculation about keys and entries (objects) and region overhead for them can be divided by the number of members of the distributed system for data placed in partitioned regions only. For other regions, the calculation is for each member that hosts the region. Memory used by sockets, threads, and the small amount of application overhead for Geode is per member.
For each entry added to a region, the Geode cache API consumes a certain amount of memory to store and manage the data. This overhead is required even when an entry is overflowed or persisted to disk. Thus objects on disk take up some JVM memory, even when they are paged to disk. The Java cache overhead introduced by a region, using a 32-bit JVM, can be approximated as listed below.
Actual memory use varies based on a number of factors, including the JVM you are using and the platform you are running on. For 64-bit JVMs, the usage will usually be larger than with 32-bit JVMs. As much as 80% more memory may be required for 64-bit JVMs, due to object references and headers using more memory.
There are several additional considerations for calculating your memory requirements:
Size of your stored data. To estimate the size of your stored data, determine first whether you are storing the data in serialized or non-serialized form. In general, the non-serialized form will be the larger of the two. See Determining Object Serialization Overhead
Objects in Geode are serialized for storage into partitioned regions and for all distribution activities, including moving data to disk for overflow and persistence. For optimum performance, Geode tries to reduce the number of times an object is serialized and deserialized, so your objects may be stored in serialized or non-serialized form in the cache.
Application object overhead for your data. When calculating application overhead, make sure to count the key as well as the value, and to count every object if the key and/or value is a composite object.
The following section “Calculating Application Object Overhead” provides details on how to estimate the memory overhead of the keys and values stored in the cache.
Calculating Application Object Overhead
To compute the memory overhead of a Java object, perform the following steps:
- Determine the object header size. Each Java object has an object header. For a 32-bit JVM, it is 8 bytes. For a 64-bit JVM with a heap less than or equal to 32GB, it is 12 bytes. For a 64-bit JVM with a heap greater than 32GB, it is 16 bytes.
Determine the memory overhead of the fields of the object. For every instance field (including fields from super classes), add in the field’s size. For primitive fields the sizes are:
- 8 for long and double
- 4 for int and float
- 2 for char and short
- 1 for byte and boolean
For object reference fields, the size is 8 bytes for 64-bit JVM with a heap greater than 32GB. For all other JVMs, use 4 bytes.
Add up the numbers from Step 1 and 2 and round it up to the next multiple of 8. The result is the memory overhead of that Java object.
Java arrays. To compute the memory overhead of a Java array, you would add the object header (since the array is an object) and a primitive int field that contains its size. Treat each element of the array as if it was an instance field. For example, a byte array of the size 100 bytes would have one object header, one int field, and 100 byte fields. Use the three step process described above to do the computation.
Serialized objects. When computing the memory overhead of a serialized value, remember that the serialized form is stored in a byte array. Therefore, to figure out how many bytes the serialized form contains, compute the memory overhead of a Java byte array of that size and then add in the size of the serialized value wrapper.
When a value is initially stored in the cache in serialized form, a wrapper around the value is introduced that is kept in memory for the life of that value even if the value is later deserialized. Although this wrapper is only used internally, it does add to the memory footprint. The wrapper is an object with one int field and one object reference.
If you are using partitioned regions, every value is initially stored in serialized form. For other region types only values that come from a remote member (peers or clients) are initially stored in serialized form. (This is the most common case.) However, if a local operation stores the value in the local JVM’s cache, then the value will be stored in object form. A large number of operations can cause a value stored in serialized form to be deserialized. Any operation that needs the object form of the value to be local can cause this deserialization. If such operations are performed, then that value will be stored in object form (with the additional serialized wrapper) and the serialized form becomes garbage.
Note:
An exception to this is if the serialized from is encoded with PDX, then setting read-serialized
to true will keep the serialized form in the cache.
See Determining Object Serialization Overhead for additional information on how to calculate memory usage requirements for storing serialized objects.
Using Key Storage Optimization
Keys are stored in object form except for certain classes where the storage of keys is optimized. Key storage is optimized by replacing the entry’s object reference to the key with one or two primitive fields on the entry that store the key’s data “inline”. The following rules apply to determine whether a key is stored “inline”:
- If the key’s class is
java.lang.Integer
,java.lang.Long
, orjava.util.UUID
, then the key is always stored inline. The memory overhead for an inlined Integer or Long key is 0 (zero). The memory overhead for an inlined UUID is 8. If the key’s class is
java.lang.String
, then the key will be inlined if the string’s length is small enough.- For ASCII strings whose length is less than 8, the inline memory overhead is 0 (zero).
- For ASCII strings whose length is less than 16, the inline memory overhead is 8.
- For non-ASCII strings whose length is less then 4, the inline memory overhead is 0 (zero).
- For non-ASCII strings whose length is less then 8 the inline memory overhead is 8.
All other strings are not inlined.
When to disable inline key storage. In some cases, storing keys inline may introduce extra memory or CPU usage. If all of your keys are also referenced from some other object, then it is better to not inline the key. If you frequently ask for the key from the region, then you may want to keep the object form stored in the cache so that you do not need to recreate the object form constantly. Note that the basic operation of checking whether a key is in a region does not require the object form but uses the inline primitive data.
The key inlining feature can be disabled by specifying the following Geode property upon member startup:
-Dgemfire.DISABLE_INLINE_REGION_KEYS=true
Measuring Cache Overhead
This table gives estimates for the cache overhead in a 32-bit JVM. The overhead is required even when an entry is overflowed or persisted to disk. Actual memory use varies based on a number of factors, including the JVM type and the platform you run on. For 64-bit JVMs, the usage will usually be larger than with 32-bit JVMs and may be as much as 80% more.
| When calculating cache overhead… | You should … |
|---|---|
| For each region
Note:
Memory consumption for object headers and object references can vary for 64-bit JVMs, different JVM implementations, and different JDK versions. |
add 64 bytes per entry |
| And concurrency checking is disabled (it is enabled by default) | subtract 16 bytes per entry |
| And statistics are enabled for the region | add 16 bytes per entry |
| And the region is persisted | add 52 bytes per entry |
| And the region is overflow only | add 44 bytes per entry |
| And the region has an LRU eviction controller | add 16 bytes per entry |
| And the region has global scope | add 110 bytes per entry |
| And the region has entry expiration configured | add 112 bytes per entry |
| For each optional user attribute | add 40 bytes per entry plus the memory overhead of the user attribute object |
For indexes used in querying, the overhead varies greatly depending on the type of data you are storing and the type of index you create. You can roughly estimate the overhead for some types of indexes as follows:
- If the index has a single value per region entry for the indexed expression, the index introduces at most 243 bytes per region entry. An example of this type of index is:
fromClause="/portfolios", indexedExpression="id"
. The maximum of 243 bytes per region entry is reached if each entry has a unique value for the indexed expression. The overhead is reduced if the entries do not have unique index values. - If each region entry has more than one value for the indexed expression, but no two region entries have the same value for it, then the index introduces at most 236 C + 75 bytes per region entry, where C is the average number of values per region entry for the expression.
- Lucene indexes add approximately 737 bytes per entry. The other index overhead estimates listed here also apply to Lucene indexes.
Estimating Management and Monitoring Overhead
The Geode JMX management and monitoring system contributes to memory overhead and should be accounted for when establishing the memory requirements for your deployment. Specifically, the memory footprint of any processes (such as locators) that are running as JMX managers can increase.
For each resource in the distributed system that is being managed and monitored by the JMX Manager (for example, each MXBean such as MemberMXBean, RegionMXBean, DiskStoreMXBean, LockServiceMXBean and so on), you should add 10 KB of required memory to the JMX Manager node.
Determining Object Serialization Overhead
Geode PDX serialization can provide significant space savings over Java Serializable in addition to better performance. In some cases we have seen savings of up to 65%, but the savings will vary depending on the domain objects. PDX serialization is most likely to provide the most space savings of all available options. DataSerializable is more compact, but it requires that objects are deserialized on access, so that should be taken into account. On the other hand, PDX serializable does not require deserialization for most operations, and because of that, it may provide greater space savings.
In any case, the kinds and volumes of operations that would be done on the server side should be considered in the context of data serialization, as Geode has to deserialize data for some types of operations (access). For example, if a function invokes a get operation on the server side, the value returned from the get operation will be deserialized in most cases (the only time it will not be deserialized is when PDX serialization is used and the read-serialized attribute is set). The only way to find out the actual overhead is by running tests, and examining the memory usage.
Some additional serialization guidelines and tips:
If you are using compound objects, do not mix using standard Java serialization with with Geode serialization (either DataSerializable or PDX). Standard Java serialization functions correctly when mixed with Geode serialization, but it can end up producing many more serialized bytes.
To determine if you are using standard Java serialization, specify the
-DDataSerializer.DUMP_SERIALIZED=true
upon process execution. Then check your log for messages of this form:DataSerializer Serializing an instance of <className>
Any classes list are being serialized with standard Java serialization. You can optimize your serialization by handling those classes in a
PdxSerializer
or aDataSerializer
or changing the class to bePdxSerializable
orDataSerializable
.A simple way to determine the serialized size of an object is to create an instance of that object and then call
DataSerializer.writeObject(obj dataOutput)
where “dataOutput” wraps aByteArrayOutputStream
. You can then ask the stream for its size, and it will return the serialized size. Make sure you have configured yourPdxSerializer
and/orDataSerializer
(s) configured before you callingwriteObject
.
If you do want to estimate memory usage for PDX serialized data, the following table provides estimated sizes for various types when using PDX serialization:
| Type | Memory Usage |
|---|---|
| boolean | 1 byte |
| byte | 1 byte |
| char | 2 bytes |
| short | 2 bytes |
| int | 4 bytes |
| long | 8 bytes |
| float | 8 bytes |
| String | String.length + 3 bytes |
| Domain Object | 9 bytes (for PDX header) + object serialization length (total all member fields) + 1 to 4 extra bytes (depends on the total size of Domain object) |
A note of caution– if the domain object contains many domain objects as member fields, then the memory overhead of PDX serialization can be considerably more than other types of serialization.
Calculating Socket Memory Requirements
Servers always maintain two outgoing connections to each of their peers. So for each peer a server has, there are four total connections: two going out to the peer and two coming in from the peer.
The server threads that service client requests also communicate with peers to distribute events and forward client requests. If the server’s Geode connection property conserve-sockets is set to true (the default), these threads use the already-established peer connections for this communication.
If conserve-sockets is false, each thread that services clients establishes two of its own individual connections to its server peers, one to send, and one to receive. Each socket uses a file descriptor, so the number of available sockets is governed by two operating system settings:
- maximum open files allowed on the system as a whole
- maximum open files allowed for each session
In servers with many threads servicing clients, if conserve-sockets is set to false, the demand for connections can easily overrun the number of available sockets. Even with conserve-sockets set to false, you can cap the number of these connections by setting the server’s max-threads parameter.
Since each client connection takes one server socket on a thread to handle the connection, and since that server acts as a proxy on partitioned regions to get results, or execute the function service on behalf of the client, for partitioned regions, if conserve sockets is set to false, this also results in a new socket on the server being opened to each peer. Thus N sockets are opened, where N is the number of peers. Large number of clients simultaneously connecting to a large set of peers with a partitioned region with conserve sockets set to false can cause a huge amount of memory to be consumed by socket. Set conserve-sockets to true in these instances.
Note:
There is also JVM overhead for the thread stack for each client connection being processed, set at 256KB or 512KB for most JVMs . On some JVMs you can reduce it to 128KB. You can use the Geode max-threads
property or the Geode max-connections
property to limit the number of client threads and thus both thread overhead and socket overhead.
The following table lists the memory requirements based on connections.
| Connections | Memory requirements |
|---|---|
| Per socket | 32,768 /socket (configurable) Default value per socket should be set to a number > 100 + sizeof (largest object in region) + sizeof (largest key) |
| If server (for example if there are clients that connect to it) | = (lesser of max-threads property on server or max-connections)* (socket buffer size +thread overhead for the JVM ) |
| Per member of the distributed system if conserve sockets is set to true | 4* number of peers |
| Per member, if conserve sockets is set to false | 4 * number of peers hosting that region* number of threads |
| If member hosts a Partitioned Region, If conserve sockets set to false and it is a Server (this is cumulative with the above) | =< max-threads * 2 * number of peers
Note:
it is = 2* current number of clients connected * number of peers. Each connection spawns a thread. |
| Subscription Queues | |
Per Server, depending on whether you limit the queue size. If you do, you can specify the number of megabytes or the number of entries until the queue overflows to disk. When possible, entries on the queue are references to minimize memory impact. The queue consumes memory not only for the key and the entry but also for the client ID/or thread ID as well as for the operation type. Since you can limit the queue to 1 MB, this number is completely configurable and thus there is no simple formula. |
1 MB + |
| Geode classes and JVM overhead | Roughly 50MB |
| Thread overhead | |
Each concurrent client connection into the a server results in a thread being spawned up to max-threads setting. After that a thread services multiple clients up to max-clients setting. |
There is a thread stack overhead per connection (at a minimum 256KB to 512 KB, you can set it to smaller to 128KB on many JVMs.) |


Class
ContigStoreElementRepresents a single contig.
Represents a single contig.
| Defined in | <seqan/store.h> |
|---|---|
| Signature |
template <typename TContigSeq, typename TGapAnchor[, typename TSpec]>
class ContigStoreElement;
|
Template Parameters
TContigSeq |
Type to store the contig sequence. |
|---|---|
TGapAnchor |
Type of the GapAnchor. |
TSpec |
Specializing type. Default: void. |
Member Function Overview
-
ContigStoreElement::ContigStoreElement();
Constructor.
Member Typedef Overview
-
typedef (...) ContigStoreElement::TContigSeq;
Type fo the seq member. -
typedef (...) ContigStoreElement::TGapAnchors;
Type of the gaps member. -
typedef (...) ContigStoreElement::TPos;
Type of the fileBeginPos and fileEndPos emmbers. -
typedef (...) ContigStoreElement::TSpec;
The specializing type.
Member Variable Overview
-
TPos ContigStoreElement::fileBeginPos
Begin position of the contig sequence fragment in the file. -
TPos ContigStoreElement::fileEndPos
End position of the contig sequence fragment in the file. -
TId ContigStoreElement::fileId
Refers to a file in the contigFileStore or is INVALID_ID if the contig has no file association. -
TGaps ContigStoreElement::gaps
String of contig GapAnchor objects. CAn be used to create a AnchorGaps alignment row. -
TId ContigStoreElement::INVALID_ID
Constant to represent an invalid. -
TContigSeq ContigStoreElement::seq
Contig sequence. -
unsigned ContigStoreElement::usage
Count the number of locks.
Detailed Description
Value type of the contigStore string.
Member Functions Detail
ContigStoreElement::ContigStoreElement();
Constructor.
Set fileId to INVALID_ID and usage, fileBeginPos, fileEndPos to 0.
Data Races
Thread safety unknown!
Member Typedef Detail
typedef (...) ContigStoreElement::TContigSeq;
Type fo the seq member.
typedef (...) ContigStoreElement::TGapAnchors;
Type of the gaps member.
typedef (...) ContigStoreElement::TPos;
Type of the fileBeginPos and fileEndPos emmbers.
typedef (...) ContigStoreElement::TSpec;
The specializing type.
Member Variables Detail
TPos ContigStoreElement::fileBeginPos
Begin position of the contig sequence fragment in the file.
TPos ContigStoreElement::fileEndPos
End position of the contig sequence fragment in the file.
TId ContigStoreElement::fileId
Refers to a file in the contigFileStore or is INVALID_ID if the contig has no
file association.
TGaps ContigStoreElement::gaps
String of contig GapAnchor objects. CAn be used to create a AnchorGaps
alignment row.
TId ContigStoreElement::INVALID_ID
Constant to represent an invalid.
TContigSeq ContigStoreElement::seq
Contig sequence.
unsigned ContigStoreElement::usage
Count the number of locks.


My Team
Bossy
Manager
ID: 22222
Email:
<EMAIL_ADDRESS>Office number: 55555
Ramiro
Engineer
ID: 1111
Email:
<EMAIL_ADDRESS>GitHub:
ramflorez
,
Engineer
Engineer
ID: 0101010
Email:
<EMAIL_ADDRESS>GitHub:
ramflorez
Intern
Intern
ID: 393939
Email:
<EMAIL_ADDRESS>School: Intern School


The idea behind this painting was to create a physical representation of some of the emotions I felt while delving into this project.
The red represents the anger that I felt about how the system criminalizes the homeless.
The blue represents the sadness I felt while hearing some of their compelling stories.
The green represents the nervousness I felt while walking around the “Methadone Mile” and actually interacting with people on the street.
Finally, the spots of yellow represents some of the happiness I felt while learning about the great outreach programs available to the homeless community.
- Justin
This collage is a representation of the emotions and feelings that come to mind when I reflected upon homelessness in Boston.
The silhouette covered by these images that represent homelessness, actually depicts a deeper meaning in itself;
that meaning or idea being the invisibility that those who suffer from homelessness, experience.


Dashboard
Acces Time
Illustrations
Add some quality, svg illustrations to your project courtesy of unDraw, a constantly updated collection of beautiful svg images that you can use completely free and without attribution!
Browse Illustrations on unDraw →Bar Chart
Styling for the bar chart can be found in the
/js/demo/chart-bar-demo.js
file.


{% extends "base.html" %} {%block title %}Results{% endblock %} {% block content %}
Education is one of the most important factors in determining an individual’s earning power. Individuals with higher levels of education tend to earn more, as seen in Chart 1, where people with Advanced Degrees earn the most. This should be good news for women, as they earned over 800,000 more degrees than men did in 2013; yet for each level of education, women earn less.
One possible explanation is that women focus on majors that have lower earnings powers, such as education and the arts, than the majors chosen by men, such as computer science and engineering.
To identify differences in education outcomes for men and women, IPEDS data is used to calculate the most common degree groups. Perhaps surprisingly, the three most common degree families for both men and women are Business, Healthcare and Liberal arts.
Yet the common perception of ‘typical’ majors for each gender likely still plays a part in earnings potential. The fourth and fifth most common degrees for men are in computer science and engineering, while education is fourth for women and the visual arts comes in at number eight. Table 1 shows how these ‘typical’ male majors relate to occupations that earn over $400 more every week than the ‘typical’ female majors.
| Degree Family and Occupation Name | Percent Female Graduates | Median Weekly Earnings |
|---|---|---|
| Computer Science and Mathematics | 26.1% | $1,428 |
| Engineering and Architecture | 21.1% | $1,424 |
| Visual and Performing Arts | 59.8% | $1,001 |
| Education and Library Sciences | 78.3% | $956 |
Therefore it is necessary to turn to the CPS data to review differences in earnings by different occupations, as well as within the same occupations between men and women.
Chart 2 shows a variety of different occupations, starting with the five highest earning occupations and ending with the five lowest earning occupations. Amongst the five highest earning occupations, only Pharmacists have an equal number of men and women; the remaining four are heavily male dominated. On the opposite end of the spectrum, the five lowest earning occupations tend to have more women than men, except for cooks. This lack of women in the highest earning fields, and high representation in low earning fields, likely accounts for at least part of the observed lower median earnings for women at the national level.
In examining Chart 2, it is also striking that the lowest paid occupations are also the most equal in pay across gender. Women who are Cooks or in either Food Preparation occupation, earn over 93 cents on the dollar that men earn in these occupations. However this is from a very low base where earnings cannot go much lower. Meanwhile women who are Chief Executives or Physicians earn only 80 cents on the dollar that men earn. This suggests there is great variability in pay at the top of the spectrum, perhaps caused by further specialization within these occupations that is not possible in the lowest earning occupations.
Finally the other six fields in this Chart show the three largest employers each for men and women, based on the number of men or women employed in that occupation. The largest employer of men is “Other Managers”, an occupation that earns $1,408 a week overall, whereas the largest employer of women “Registered Nurses” earns $1,116 overall, a difference of almost $300 a week. However, in comparing the earnings of female nurses versus male managers, the difference opens up to almost $600 a week.
Therefore while the nation-wide wage gap between men and women is 81 cents on the dollar, there appears to be some occupational sorting that helps to explain some of the difference. However, even within individual occupations there appears to be a wide range in the wage gap between men and women.


Monte Carlo simulation is a commonly used method for derivatives pricing where the payoff depends on the history price of the underlying asset.
The essence of using Monte Carlo method to price the option is to simulate the possible paths for stock prices then we can get all the possible value of stock price at expiration.
In option pricing, Monte Carlo simulations use the risk-neutral valuation result. More specifically, sample the paths to obtain the expected payoff in a risk-neutral world (The expected annual return rate and the risk-free annual rate should be the same in order to get the correct estimation of the option) and then discount this payoff at the risk-neutral rate.
def mc_euro_options(option_type,s0,strike,maturity,r,sigma,num_reps): payoff_sum = 0 for j in range(num_reps): st = s0 st = st*e**((r-0.5*sigma**2)*maturity + sigma*np.sqrt(maturity)*np.random.normal(0, 1)) if option_type == 'c': payoff = max(0,st-strike) elif option_type == 'p': payoff = max(0,strike-st) payoff_sum += payoff premium = (payoff_sum/float(num_reps))*e**(-r*maturity) return premium mc_euro_options('c',927.96,785,100.0/252,0.01,0.23,500)
Suppose the risk-free rate is 1%. A European call option with strike price being $785 and expires in 100 days, the spot price is $927, the premium by using Monte Carlo method is $149.


Bay Area Funs
Weekend Funs
Checkout these great opportunities for family funs for this weekend.
Fun Places
Birthday Parties
Use the Bay Area Funs Party Directory to plan a fantastic celebration for your child. Find the perfect party place, talented and engaging entertainers, and fun rental bouncers.
Lessons
Enrichment classes help your child learn new skills, make new friends and gain confidence in a fun and supportive environment.
Hiking with kids
About us
We provides bay area events and activities information for families.
Contact
funsbayarea at gmail.com.


Get Logo Luxel Pictures. Logos for editorial use are on 4/19/1918, a u.s. Download free luxell vector logo and icons in ai, eps, cdr, svg, png formats.
Find & download free graphic resources for logo lux. 300+ vectors, stock photos & psd files. © 2021 luxel բոլոր իրավունքները պաշտպանված են
Choose from hundreds of fonts then just save your new logo on to your computer!
No professional skills required, try it now to generate a perfect logo for your business. Logos for editorial use are on 4/19/1918, a u.s. Just enter your name and industry and our logo maker tool will give you hundreds of logo templates to choose from professionally made to fit your business. Brands of the world is the world\'s largest library of brand logos in vector format available to download for free.


Set<E> Interface
This class is the public interface of a set. A set is a collection without duplicates.
Default class
Extends
Subinterfaces
Constructors
Code new Set() #
Set();
Code new Set.from(Iterable other) #
Creates a Set that contains all elements of other.
Set.from(Iterable<E> other);
Methods
Code void add(value) #
Adds value into the set. The method has no effect if value was already in the set.
void add(E value);
Code void addAll(Collection collection) #
Adds all the elements of the given collection to the set.
void addAll(Collection<E> collection);
Code bool containsAll(Collection collection) #
Returns true if this collection contains all the elements of collection.
bool containsAll(Collection<E> collection);
Code Set intersection(Collection other) #
Returns a new set which is the intersection between this set and the given collection.
Set<E> intersection(Collection<E> other);
Code bool isSubsetOf(Collection collection) #
Returns true if collection contains all the elements of this collection.
bool isSubsetOf(Collection<E> collection);
Code bool remove(value) #
Removes value from the set. Returns true if value was in the set. Returns false otherwise. The method has no effect if value value was not in the set.
bool remove(E value);
Code void removeAll(Collection collection) #
Removes all the elements of the given collection from the set.
void removeAll(Collection<E> collection);