text:
In the Monads of Madness
One thing about monad tutorials is that they almost universally cover simple monads - often the most complex monad you get is the Sequence monad. The Error or Maybe monads are also common examples, but in those dynamic languages which most folks are familiar with there are already facilities for dealing with Errors or Exceptions and so these monads seem like trinkets. Why bother?
(Keep reading, I promise we will make pretty pictures.)
This seems to lead to the commonly expressed opinion that monads aren't really useful in anything but Haskell, and that unless you live there, there isn't any point in understanding them. I can see this perspective, particularly because unless you work in Lisp or want to bang around with some heavyweight meta-programming tool like Metalua, the syntax which makes using monads convenient isn't available anyway.
Another part of me, however, thinks its too bad. There are some problems which find elegant expression by recourse to monadic computation. Monadic parser combinators are an example, I think. I'd always found parsing to be an unapproachable activity, requiring special use tools and an understanding of and separate domain specific languages to program them. If one develops monadic parser combinators in Lisp, with the appropriate binding expressions to clean up the monadic details, parsing pops out as just one more programming task.
This post covers another example of a monad coming to the rescue when a complex problem needs solving. It is also an example of a monad which I've never seen before (although it is some unnamed state flavored monad transformer on the result of using the standard state monad transformer on the sequence monad, I believe). I'm going to try and present things in the order they occured to me, and hopefully give one a flavor of how one constructs a monad for a specific purpose, rather than grabbing one off the shelf. Also, for variety, we'll be using Scheme, rather than Emacs Lisp. While the code here is probably a stone's throw away from any Scheme implementation, I'm working in Racket.
Remember Turtle Graphics?
Back when I was but a wee lad in Louisiana, I went to nerd camp. This was a program called ADVANCE for kids who wanted to spend three weeks of their summer in intense study - you could get credit to skip highschool classes. For brainy kids, this was also a place where you could expect to be around a lot of other brainy kids, and if that didn't exactly lift the pall of awkwardness which hung over most of us, it surely made us feel less strange for it all.
Anyway, I never took a programming class any of the summers I spent at ADVANCE, but I do remember walking past the computer labs a couple of times and seeing a little blinking triangle and a window beneath. This is probably familiar to some other readers. It was some implementation of Turtle Graphics.
In a Turtle Graphics system one is given a special programming language with most of the usual fixings and one other distinguishing feature: the language includes primitive operators for controlling the motion of that little triangle on the screen - the titular Turtle. You can tell the turtle to move forward or to rotate in place or to lift up or place the "pen" it carries in its little forelimb. When the pen is down, the turtle leaves a line on the screen.
That first figure up there, for instance, was produced using the library we'll build today. The following code does it:
(mlet* m-turtles
((new-pos (jump-to 150 150))
(len (setl 'len 2))
(new-pos (n-times
(mlet* m-turtles
((len (getl 'len))
(p (move* len))
(r (turn (/ pi 1.99)))
(len (setl 'len (+ len 2))))
(m-return p))
(m-return new-pos)))
Here is the result again, since its not on the screen anymore:
You can imagine that with such a system, one can very quickly convince the turtle to draw all sorts of spirographical images, telling the turtle to repeat some sequence of commands which accumulate into elaborate patterns. Pretty neat stuff.
At first I wanted to create a turtle graphics system in a purely functional style (at least as purely functional as possible), as a learning exercise. But then I got to thinking:
What about a Hyperturtle?
Symmetry is an extremely important aesthetic principle which is somewhat difficult to capture in Turtle Graphics. It you want to describe a system with bilateral symmetry using the turtle, you've got to convince him to traverse the two sides of the figure in one go. If you want to draw a Y, for instance, you have to say something like (in pseudo code):
(face north)
(move 10)
(rotate 45)
(move 5)
(rotate 180) ; these lines describe
(move 5) ; backtracking
(rotate 90)
(move 5)
What if you could just move the Turtle up to the stem of the Y and then tell it to rotate BOTH 45 degrees and -45 degrees and then tell it to follow the rest of the instructions. To satisfy your demands, the Turtle must split itself into two turtles, but after that point each turtle follows exactly the same directions, and you save yourself a few commands and some complexity.
An even simpler approach might be to tell the turtle to have two
different "helicities," that is, one turtle interprets (turn 45)
meaning to turn clockwise, and the other interprets it to mean
counter-clockwise. Now any sequence of drawing commands will produce
a symmetric figure, all for free. State dependent computations with
multiple possible outcomes?
Is anyone else's monad sense tingling!?
Monads in Scheme (a diversion)
If you've read any of my other posts about
monads, you know how this is going to go.
We are going to define a macro to facilitate monadic computation.
Since this is a kind of advanced article, I'm going to assume you
have the basic idea about bind
and return
more or less down. If I
say that:
(mlet* sequence-monad
((x '(1 2 3))
(y '(4 5 6)))
(m-return (+ x y)))
Expands to:
(sequence-bind '(1 2 3)
(lambda (x)
(sequence-bind '(4 5 6)
(lambda (y)
(sequence-return (+ x y))))))
You should follow what I mean and why. As it happens, this monadic
binding expression is defined in the racket library associated with
this article, in functional/monads
. (Except there sequence-monad is
called m-list
). The mlet*
defined in that library provides one
additional feature which I've found useful. You can interpolate
monadic and non-monadic binding:
(mlet* sequence-monad
((x '(1 2 3))
((q (+ x 1))))
(y '(4 5 6)))
(m-return (+ q y)))
Causes q
to be bound only once per x
, rather than bound as a
monadic value. We're going to be liberally using mlet*
the rest of the article, so if you don't see how it works, check out
the other monad tutorial.
Turtle Functions
Let's backtrack and think about the regular old turtle monad. A basic
turtle might be implemented as a dictionary containing keys like
, direction
, pen-status
, etc. In the land of
imperative, side-effect producing programs we'd probably just have a
global dictionary someplace holding these values. In an object
oriented language we might do something obscene like a singleton
class. Both would involve side effects. Suppose we wanted to avoid
side effects forever (or at least until we had to talk to the hardware
handling rendering)?
The obvious solution is to thread our turtle state through tons of functions which non-destructively modify it. Our turtle may as well carry around a representation of whatever "drawing" it has done in its mind, too. Once we pass the state through all of the state-dependent functions we want to, we'll extract that representation of the drawing and pass it on to our GUI to draw. The modification of the memory of the screen will be the only conceptual side effect.
What about querying the state? We might want, for instance, to make our turtle avoid certain regions of space, which means we'll need to make inquiries into the state of the turtle, and we'd like to do so in a standard way. We'd also like to be able to combine queries with modification. What kind of function enables this behavior? Well, consider these:
(Note for non-lispers, cons
simply cons
structs a pair or tuple.)
(require racket/dict)
(define (turtle-position^ turtle)
(cons (dict-ref turtle 'position) turtle))
(define (try-to-move turtle amt)
(let* ((pos (dict-ref turtle 'position))
(dir (dict-ref turtle 'direction))
(move-point-in-dir pos dir amt)))
(if (point-on-screen? new-position)
(cons new-position (dict-set turtle 'position new-position))
(cons #f turtle))))
So, in order to let our turtle-dependent function communicate
information to us other than a possibly modified state value, we will
let them return a pair
of things. The first part of the pair is the
returned value, the second part is the possibly modified state.
just fetches the turtle's position into the first
part of the pair, returning the unmodified turtle in the second part
of the pair. try-to-move
actually uses the facility to return
values in a non-trivial way. It calculates the new position of the
turtle, tests to see if it is on the screen and then returns the new
point and modified turtle if it is, and otherwise simply returns #f
and the unmodified turtle. A caller of this function can inspect the
first value to see if it succeeded without knowing too much about the
internal representation of the turtle itself. That's hott.
I want to point out something about the try-to-move
function at this
point. Note that it takes more arguments than just the turtle.
Somewhere down the line we might want to reduce it to a function of
just the turtle-state. In fact, this is such a common thing to do
that we should really rewrite the function in a curried
(define (try-to-move amt)
(lambda (turtle)
(let* ((pos (dict-ref turtle 'position))
(dir (dict-ref turtle 'direction))
(move-point-in-dir pos dir amt)))
(if (point-on-screen? new-position)
(cons new-position (dict-set turtle 'position new-position))
(cons #f turtle)))))
Now we've got a function which returns a compliant turtle function - a
function of just state and which returns a pair. When we finally
figure out the machinery to combine such functions, we can just pass
in amt
before we pass the resulting state function to that
machinery, where it can be handled in a uniform way.
Now that we've factored the functionality in this way, we can
recognize try-to-move
as a function which produces a
turtle-function. This is an important class of functions which we'll
call "turtle combinators." Think of such a function as a turtle
function "waiting" for a value before it commits to being a particular
turtle function. try-to-move
represents the family of all movement
functions parametrized by amt
. Each call to try-to-move
such a function.
Thinking Monadically
Ok, so we've cooked up an ad-hoc formalism for dealing with our purely functional turtle. Lets relate this to a monad. A monad relates the following types of interest:
- Values These are just any old kind of value held "in" the monad.
- Monadic Values These are the "container" into which values go.
- Monadic Functions These are functions which take a Value and return a Monadic Value.
So one way of thinking about monads that comes up a lot is that there
is a monad for every data structure. Lists form a monad, Trees form a
monad, the maybe monad is just a data type consisting of two kinds of
things, (Just <something>)
and (None)
(in much the same way that a
list is either an element and a pointer to another list or nil).
We can imagine that a function of state which returns a value and a new state is a kind of data structure. The analogy isn't that tortured, really. You can put an element "into" a state function:
(define (insert-into-state x)
(lambda (state)
(list x state)))
Returns a state function that itself returns x
when you ask for it
with a state. In terms of our types of interest: x
is a Value,
(lambda (state) ...)
is a Monadic Value and insert-into-state
a Monadic Function.
You get data out of a state function by passing a state in:
(define (val-of pair) (car pair))
(define (state-of pair) (cdr pair))
(val-of ((insert-into-state 10) '() )) -> 10
For the sake of driving the analogy home,
(first (list 10)) -> 10
(Type note: 10 is a Value, (list 10)
is a Monadic Value.)
is the equivalent code for the data structure called a list. We put
things in, and take them out again. So if these state functions are a
data structure, what is the associated monad? Welp, a monad exists
when you have a return
and a bind
operation. For the list monad
these are:
(define (list-return x) (list x))
(Type note: list-return
is a Monadic Function.)
(define (reduce f lst)
(foldl f (car lst) (cdr lst)))
(define (list-bind monadic-val monadic-fun)
(reduce append (reverse (map monadic-fun monadic-val))))
It should be reasonably clear why insert-into-state
. It constitutes the operation of placing any object
into the monad.
What about bind? Well, squint at the list-bind
operation and dig this: its essence is that it takes the monadic
function (a function which represents a monadic value "waiting" for
some input to compute itself) maps it over the values in the monad,
and collects each of them into a complete list. Monadic functions
must take values and return monadic values, so the map returns a list
of lists, which we reduce
with append
. If you squint, you can
pull out the following all right description for what bind does:
Monadic bind takes values out of the monad, applies a monadic function to them, which results in lots of little monadic values. These monadic values are combined, finally, into one big monadic value, which is returned.
List-bind takes the elements out of a list, applies a function to them to generate a bunch of lists, and combines them together.
What is the equivalent operation for the state monad? Well, bind has to return a monadic value, which is a state function in our case. So we know that bind will return a lambda. And we know bind has to extract the value from the state function passed in, and we know to do that, bind will need the state value, so everything interesting has to happen inside the returned state function. What has to happen in there?
Well, we will apply the monadic value to the state passed into the function we are returning. This generates a pair, the first part of which is the "value" extracted from the monad. We'll pass this value to the monadic function, which will generate a new state function. We will then pass the new state function the second part of the previously produced pair, which is the new state value. The return value of the new state function on the new-state will be the return value of the function we return.
Ok, I admit, that is a lot to follow. Read the code:
(define (state-bind state-fun state-fun-producer)
(lambda (state)
(let* ((pair (state-fun state))
(val1 (val-of pair))
(new-state (state-of pair))
(state-fun-producer val1)))
(new-state-fun new-state))))
(define state-return insert-into-state)
It is slightly more obvious as source code than text. That has got to
mean something about language, the power of abstraction, etc. The
state monad is already implemented in functional/monads
, so we can
(require functional/monads
(define (st-fetch key . or-val)
(if (not (empty? or-val))
(lambda (state)
(list (hash-ref state key or-val) state))
(lambda (state)
(list (hash-ref state key) state))))
(define (st-set key val)
(lambda (state)
(list val (hash-set state key val))))
(define (point+ p1 p2)
(map + p1 p2))
(define (dir->vec dir)
(list (cos dir) (sin dir)))
(define (point* p scalar)
(map (lambda (x) (* x scalar)) p))
(define (move amount)
(mlet* m-state
((position (st-fetch 'position '(0 0)))
(direction (st-fetch 'direction 0))
((new-position (point+ position
(point* amount
(dir-vec direction))))))
(_ (st-set 'position new-position)))
(m-return new-position)))
Let's focus on the last function - move
. The body is a monadic
expression in the state monad, which means that it returns a function
itself. Specifically, it returns a function which takes a state and
returns a value/state pair. Each expression in the binding part of
the mlet*
threads the value produced by each right hand expression
through state-bind and binds the variable in the left hand side to the
"value" part of the value returned by the state function in the
subsequent expressions. The body of mlet*
provides a final location
to evaluate expression in the monad. It must evaluate to a state
function, hence we use m-return
The Hyperturtle Monad
Our mask slipped above and we just started calling the turtle monad the state monad, which is exactly what it is. Astute readers might notice that it is also, for all intents and purposes, equivalent to the parser monad (types notwithstanding, obviously) seen from a different perspective.
The whole reason I'm writing this up is because I've never read a really lengthy development of a novel monad. Most tutorials say "you don't really have to understand how to write one, just how to use them," but I think this is a shame. As we'll see, the right monad will enable an almost magical extension to the notion of turtle graphics.
Ok, so lets think some about the hyperturtle we want to create. The basic idea is that our turtle can be told to do multiple things at once. That is, we want to be able to say something like
(parallel-rotate (/ pi 2) (- (/ pi 2)))
And have our system interpret it as a command which results in the turtle splitting into two turtles, one which rotates +pi/2 and the other which rotates -pi/2. In other words, we want to allow multiple possible outcomes to each monadic function, which sounds a lot like the list monad. Monadic functions of the list monad take a single value and return a list of values. Depending on one's perspective, it can be meaningful to view this list of results as a list of possible return values over which subsequent computation in the monad is split:
(mlet* m-list
((x '(1 2 3))
(y (list (+ x 1) (- x 1))))
(m-return (list x y)))
Will evaluate to:
((1 2) (1 0) (2 3) (2 1) (3 4) (3 2))
by this very logic. For each possible value of x
we have multiple
values of y
. We finally return all the combinations of these
possible bindings in a list of possible results.
But the hyperturtle monad can't be the list monad alone. After all, each expression in the binding has to depend on the previous turtle state, and the result of a monadic expression needs to be like a state function somehow. Turns out there is a standard way of constructing the monad we are interested in using monad-transformers, but we'll do it the hard way for now so as to elucidate how one goes about it.
Let's think carefully. We still need state functions, but now they are going to be returning "virtually" more than one possible outcome. Since each possible outcome might also involve a separate modification of the state, as well as a distinct value, it might make sense for our functions to accept a single state but return a list of value/state pairs. So, our monadic values are functions which take a state and return a list of possible outcomes.
What does return look like for this hypothetical monad? Well:
(define (pstate-return val)
(lambda (state)
(list (pair val state))))
Bind is going to be a bit more difficult, but we can keep our head straight by just remembering what bind always does. It returns a new monadic value, so its got to return a function which takes a state and returns a list of pairs. Inside that function, we've got to use the state to produce a list of state/val pairs. Then we need to use each pair to produce the next state function, which we apply to the new-state to get a list of state/val pairs. We collect all these pairs back together into a single list of state/val pairs, which is our return value.
Might be clearer in code:
(define (pstate-bind pstate-fun pstate-fun-producer)
(lambda (state)
(let* ((pairs (pstate-fun state))
(lambda (pair)
(let ((val (car pair))
(state (cdr pair)))
((pstate-fun-producer val) state)))
(reduce append new-results))))
Ok, so there we go. We've got a parallel state monad where we can orchestrate multiple results. But wait? What if turtles need to share information with one another or reference a "global" state? For instance, a turtle might wish to avoid an area if a line has already been drawn there. We need an additional level of global state? How might we represent that?
One way is to consider functions which accept a pair of states, one representing a possible "local" state and the other representing the shared "global" state. These functions want to reflect that the local state might split into many new local states (or none at all), and they also might modify the global state. So its got to return the list of new local states, the new global state and the local results of each possible outcome. The functions can sensibly return this collection of things by returning a pair consisting of a list of value/local-state pairs and a global state. Consider the return operation for this new monad:
(define (ps-return val)
(lambda (st-pair)
(pair (list (pair val (car st-pair)))
(cdr st-pair))))
We return a state function which destructures the st-pair input, returning a pair containing a list with one element, a val/local-state pair, and the global state.
Now the coup de grace, what is the bind operation for this crazy monad? Well, it is similar to the bind operation for the sequence-of-state monad, except we have to deal with the global state. Each monadic value needs to use the previously calculated global state function. The named let expression below amounts to a fold operation over the global state.
(define (ps-bind monadic-val monadic-fun)
(lambda (state-doublet)
(let* ((results/global
(monadic-val state-doublet))
(let loop ((global-state (cdr results/global))
(pairs (car results/global))
(results-acc '()))
(if (empty? pairs) (reduce append (reverse results-acc))
(let* ((pair (car pairs))
(rest (cdr pairs))
(val (car pair))
(new-mv (monadic-fun val))
(new-res (new-mv (cons (cdr pair)
(loop (cdr new-res)
(cons (car new-res) results-acc)))))))))
Ok, this is kind of complicated - but we've expressed it in just 17 lines of code. Include return and we're up to 21 lines. Once we define a few "primitive" monadic functions/values we'll be able to write incredibly concise and arguably expressive hyperturtle code.
Useful Hyperturtle Functions
We'll want to tell a branch of our computation to simply terminate. This corresponds to returning no values whatever in the local part of a state function, and leaving the global state unmodified:
(define (poof st-doublet)
(cons '() (cdr st-doublet)))
We're going to use the good old association list to represent our local and global states. That way we can add and remove arbitrary data from them. Just in case we want to use another table abstraction later, though, we're going to use racket's dict library to wrap them:
(require racket/dict)
(define (setl key val) ; setl = set local
(lambda (state-doublet)
(cons (list (cons val
(dict-set (car state-doublet) key val)))
(cdr state-doublet))))
(define (setg key val) ; setg = set global
(lambda (state-doublet)
(cons (list (cons val (car state-doublet)))
(hash-set (cdr state-doublet) key val))))
Ok, so our pattern sense should be tingling. We keep writing
functions which take some parameters now and return a state function.
Let's whip up some notation for this kind of common task. Eventually
our library of combinators/monadic functions/monadic values will be
large enough that merely mlet*
will be sufficient to write most
functions of interest, but until then, its nice to have some syntactic
sugar. Consider the hygienic macro:
(require racket/match)
(define-syntax (define<turtles> stx)
(syntax-case stx (^)
[(_ (id lstate-id gstate-id) body ...)
(syntax (define (id dblt)
(match dblt
[(cons lstate-id gstate-id)
(begin body ...)])))]
[(_ (id lstate-id gstate-id ^ var) body ...)
(syntax (define (id var)
(lambda (dblt)
(match dblt
[(cons lstate-id gstate-id)
(begin body ...)]))))]
[(_ (id lstate-id gstate-id ^ var ...) body ...)
(syntax (define (id var ...)
(lambda (dblt)
(match dblt
[(cons lstate-id gstate-id)
(begin body ...)]))))]
[(_ id val)
(syntax (lambda (dblt)
(match dblt
[(cons lstate-id gstate-id)
(cons (list (cons val lstate-id)) gstate-id)])))]))
This lets us write the above two functions like so:
(define<turtles> (setl local global ^ key val)
(cons (list (cons val (dict-set local key val))) global))
(define<turtles> (setg local global ^ key val)
(cons (list (cons val local) (dict-set global key val))))
Ahhhhhh. Much more concise. For those not too familiar with syntax-rules style macros, this:
(define<turtles> (setg local global ^ key val)
(cons (list (cons val local) (dict-set global key val))))
expands to:
(define (setg key val)
(lambda (state)
(match state
[(cons local global)
(begin (cons (list (cons val local) (dict-set global key
The ^
character is just a piece of visual lint meant to help
distinguish between the fact that the first two arguments are curried
off from the rest of the arguments.
We've now constructed enough machinery to understand the actual code
used in my implementation. There is just one note I should make
before we switch over to looking at actual code. Since we are
returning a list of pairs and we're using association-lists, which
are just lists, after all, and lists are made of pairs, I felt that we
were just overburdening cons
a little too much to make the code easy
to debug. Hence, instead of using pairs
where I wasn't using a
list, I created a new structure:
(define doublet (a b))
(doublet-a (doublet 10 11)) -> 10
(doublet-b (doublet 'x 'y)) -> 'y
So with doublets,
(define<turtles> (setg local global ^ key val)
(cons (list (cons val local) (dict-set global key val))))
(define<turtles> (setg local global ^ key val)
(doublet (list (doublet val local) (dict-set global key val))))
This change gives the Racket environment a little hand when it comes to checking types.
I promise, things are about to get RAD. We just need a few more primitives:
(define<turtles> (getg lo g ^ symbol)
(doublet (list (doublet (dict-ref g symbol #f) lo))
(define<turtles> (getl lo g ^ symbol)
(doublet (list (doublet (dict-ref lo symbol #f) lo))
(define<turtles> (getl-or lo g ^ symbol or-val)
(doublet (list (doublet (dict-ref lo symbol or-val) lo))
(define<turtles> (getg-or lo g ^ symbol or-val)
(doublet (list (doublet (dict-ref g symbol or-val) lo))
These primitives let us fetch values from either the local state or the global one.
Ok, now here is the cool step. Consider the function:
(define<turtles> (split-setl lo g ^ key vals)
(map (lambda (val)
(doublet val (dict-set lo key val)))
This function lives in the turtle-state monad, evidently enough. It
takes a key and a list of values in vals
. It then returns a
list of new local states where the key has been set to each of the
values in turn. Any further state function when used within the monad
will now execute in multiple contexts, one for each possible
assignment of the key
Representing the Drawing
All turtles will share a global representation of the drawing, which
we will store in a global key
as a series of objects to draw.
Hence, the function to add a line to a drawing might be:
(struct point (x y))
(struct line (p1 p2))
(define (add-line x1 y1 x2 y2)
(mlet* m-turtles
((lines (getg 'draw-these))
(lines (setg 'draw-these (cons (line
(point x1 y1)
(point x2 y2))
(if lines lines '())))))
(m-return lines)))
(define (add-line-pts p1 p2)
(mlet* m-turtles
((lines (getg-or 'draw-these '()))
(lines (setg 'draw-these (cons (line
(m-return lines)))
These functions also provide an example of using the turtle monad with
monadic notation to write monadic functions. In add-line
we write a
function which takes four values and returns a state function produced
by the mlet*
form using the turtles-monad
(incidentally, this is:
(define m-turtles
(list (cons 'bind m-bind)
(cons 'return m-return)
(cons 'plus #f)
(cons 'zero poof)))
Monads are simply dictionaries containing the appropriate operators.
fetches the value of the global key draw-these
or an
empty list, conses a new line onto that list, and finally sets the
value of that key with setg
. To finally draw our drawing, we'll
call our monadic function on an initial state (
(define init-state (doublet '() '()))
), take apart the returned state doublet, grab the draw-these
from the global state, and pass it to Racket's GUI library. This
tutorial is already too long to provide all the code to do that, but
you can download it all from my github. The
interface is easy enough. The function called turtles-go
takes a
turtle-state fun and applies it to an empty initial state, pulls out
the drawing after the function is finished, and draws it.
Let's practice using the turtle monad to draw something. How about a regular n-gon? A regular n-gon is defined by an edge length and a number of sides. A regular n-gon's interior angles are all the same and add up to (n-2)pi radians, which means they must each be ((n-2)pi)/n radians. To draw such a figure, we can just move by and edge length, rotate by the appropriate angle and repeat the process until we reach the number of sides the polygon has.
We'll need a move and a turn function:
(define (turn amount)
(mlet* m-turtles
((helicity (getl-or 'helicity 1))
(facing (getl-or 'facing (/ pi 2)))
(new-facing (setl 'facing
(+ (* amount helicity) facing))))
(m-return new-facing)))
(define (move amt)
(mlet* m-turtles
((pos (getl-or 'pos (point 0 0)))
(facing (getl-or 'facing (/ pi 2)))
(direction->vector facing))))
(new-pos (setl 'pos (point+
pos (scale facing-vector amt)))))
(m-return new-pos)))
(define (move-line amt)
(mlet* m-turtles
((pos (getl-or 'pos (point 0 0)))
(new-pos (move amt)))
(add-line-pts pos new-pos)))
The turtle's current direction is stored in the local variable
its current position stored in pos
. turn
also uses a
value called helicity
to determine which way the turtle turns.
For now, we'll always use the default value of 1
. move-line
does the appropriate move and adds a line between the previous and
new-current point.
(define (n-times fun n)
(if (= n 1) fun
(mlet* m-turtles
((_ fun))
(n-times fun (- n 1)))))
takes a monadic function and causes it to execute n
times. Ok, here is our polygon drawing routine:
(define (n-gon n edge-len)
(let* ((int-ang (/ (* (- n 2) pi) n))
(ext-ang (- pi int-ang)))
(mlet* m-turtles
((p (move-line edge-len))
(a (turn ext-ang)))
(m-return p))
And here is how we use it:
(mlet* m-turtles
((p (jump-to 150 150))
(p2 (n-gon 6 30)))
(m-return p2)))
And here is the result:
So we're still in regular old turtle territory. Can we see an example of hyper turtle action? Well, what would you think the following will produce?
(mlet* m-turtles
((p (split-setl
(list (point 150 150)
(point 200 150)
(point 150 200)
(point 200 200))))
(p2 (n-gon 6 30)))
(m-return p2)))
Instead of just jump
ing to
the single point 150 150
instructed our turtle to jump in parallel to four different points,
and then to cruise along drawing a polygon just as before. What is
the result?
We can do some pretty neat things in short order by changing the way motion commands are interpreted by the turtle. Remember the helicity option? Helicity changes the way individual turtles interpret turn commands:
(mlet* m-turtles
((p (split-setl
(list (point 150 150)
(point 200 150)
(point 150 200)
(point 200 200))))
(h (split-setl
'helicity '(-1 1)))
(p2 (n-gon 6 30)))
(m-return p2)))
Results in:
We can do tons of things by modifying helicity, but lets do one more different trick:
(mlet* m-turtles
((p (jump-to 150 150))
(n (split-setl
'n '(3 5 7 9 11 13)))
(p2 (n-gon n 30)))
(m-return p2)))
Results in:
Eee gads! We've drawn the first six prime n-gons all at once! I leave you to consider what could be done with the following combinator:
(define (move* amt)
(mlet* m-turtles
((jitter-mag (getl-or 'jitter-mag 0))
((amt (+ amt (random-normal 0 jitter-mag)))))
(pos (getl-or 'pos (point 0 0)))
(_ (move amt))
(pos2 (getl 'pos))
(f (getl-or 'move*-fun (lambda () add-line-pts)))
(_ (f pos pos2)))
(m-return pos2)))
Musings on Monads
Besides drawing pretty pictures, what are we trying to accomplish here? Well, if you go sniffing around the internet about monads, you'll often hear that monads "don't work" programming languages besides Haskell. Reasons proferred include "it is easier to use side-effects," "there isn't syntactic support," and "you need static typing." I'm not a Haskell programmer, so I can't speak too authoritatively on the subject static typing, but I think that at least in Lisp dialects, where the second argument can be easily dispensed with, the first argument doesn't hold water.
If you look up the Forth pages on the C2 Wiki you'll eventually come across the programmer's meme: Do the Simplest Thing That Could Possibly Work. This means what it says: when you've got a problem, don't worry about picking an optimal solution, just do the simplest thing that could possibly work.
In my mind, this was the simplest implementation of a hyperturtle graphics system.
Now, I know that is going to seem pretty crazy to a person just trying
to wrap their heads around monads. Surely, you'll object, this can't
be the simplest possible implementation! To that, I'd say go back and
look at the implementation of return
and bind
which together add
up to 21 or so lines of code. If we had the right monad transformers
at our disposal, we could write the same monad in one line of code!
Assuming we had a handle on each of the monads in question, what we'd
have accomplished is the creation of a sub-langage with entirely novel
semantics in a few tokens. Add the mlet*
syntax (itself about 20
lines of syntax-case macro) and the minimal subset of turtle
primitive functions, and we are suddenly looking at a
domain-specific-language on steroids.
But this is a very simple solution! You write a short bind and return function, use the already "standard" monadic syntax, and inside those expressions, you've got a whole new programming language. Because everything is purely functional, up to this point you've made no hard design decisions. You haven't declared any global variables, thought about how to represent the persistent state of anything. The monad provides a clean bed to write code in - and you don't need much code to get somewhere interesting.
Performance might be a problem - but I'd suggest that as a prototype system the monad provides excellent semantics for any more efficient implementation to target. This is enhanced because of the very compactness of the implementation! You know what your system does when you design it this way, because all the important behavior is specified in one place.
Secondly, I hope the article has provided an example of the process by which monads are constructed and used that isn't particularly artificial. Most monad tutorials provide ad-hoc examples which don't do anything interesting, and use pre-fab monads. I hope this development of a free-form monad for a novel problem is interesting.
And that is about it!
As always, the code for this project is hosted on my github. Comments, critiques, corrections are extremely welcome!


text:
Eurofase Lighting TK2-5P Contemporary / Modern Single Light Duotracks Polo Spot Light from the Fundamentals Collection
Item #:
Compare Our Prices
Technical Specs
Specification Sheet | |
Bulb Base | Bi Pin, Fluorescent Pin, GU5.3, Medium (E26) |
Bulb Type | Compact Fluorescent, Halogen, Incandescent |
Bulbs Included | No |
Light Direction | Up / Down Lighting |
Number of Bulbs | 5 |
Suggested Room Fit | Living Room, Office |
Theme | Functional |
Voltage | 12 |
Wattage | 25 |
Watts Per Bulb | 5 |
Single Light Duotracks Polo Spot Light from the Fundamentals Collection
- Cone glass diffuser.
- Dual "S" curve rail design.
- 5 light all-in- one track kit.
- Heads and power feed can be positioned anywhere along the track.
- Low voltage (12V) open conductors are safe to touch.
- No exposed wires.
- Fully adjustable track heads.
- Requires Five 5 Watt MR16/C Bulbs (Not Included)
- Product Dimensions: 8 H x 144 L
Proudly entering its third decade of existence, Eurofase continues its evolution as a provider of artful illumination. Eurofase is born of a company culture that passionately seeks to improve the lives of its customer with innovative design, lasting quality and genuine service.
Additional Eurofase Lighting Links
- Shop All Eurofase Lighting Products
- Shop All Eurofase Lighting Fundamentals Collection Products
Our SKU: TK2-5P
This product is listed under the following manufacturer number(s):
Platinum / Frost
*Denotes a finish or option that has been discontinued
Eurofase Lighting Fundamentals Collection
Other Products In The Eurofase Lighting Fundamentals Collection
Eurofase Lighting 19240
Contemporary / Modern Single Light LED Spotlight 112MM from the Fundamentals Collection$58.00
Eurofase Lighting 19329
Contemporary / Modern 4 Inch 5 Light LED Retro Round Recessed Light from the Fundamentals Collection$88.20(1)
Eurofase Lighting 19332
Contemporary / Modern 4 Inch 5 Light LED Conversion Round Recessed Light (Trim Only) from the Fundamentals Collection$75.60
Eurofase Lighting 19165
Contemporary / Modern 4 Inch PAR20 Gimbal Trim Recessed Light (Trim Only) from the Fundamentals Collection$19.00
Eurofase Lighting 19167
Contemporary / Modern 4 Inch PAR20 Square Trim 2 Recessed Light (Trim Only) from the Fundamentals Collection$17.10

subset: commoncrawl


text:
Roberto Clemente Coliseum
Coliseo Roberto Clemente (or Roberto Clemente Coliseum) is a sporting events and concert arena in San Juan. It was, for many years, Puerto Rico's largest event facility, and it continues being one of the largest.The Coliseum is named after baseball hall of famer Roberto Clemente, who died in a plane crash off Luis Munoz Marin International Airport in Carolina in 1972, while flying with relief articles to be given to earthquake victims in Nicaragua. Construction of the facility began in 1973, it was finished in 1974, and inaugurated soon after.
The coliseum has been host to a variety of events, including world championship boxing, business expos, circus, concerts and other things. Many Puerto Rican and international performers have been there, including Antonio Aguilar, Menudo, Marco Antonio Solis, Wilkins, Whitesnake, Duran Duran and others. It has been the home of three different BSN professional basketball teams and the BSN has also used it as a neutral site for their most important games, including game 7 of the championship finals, several times.
The Coliseum has also been used by religious leaders for conferences and religious services.
Most of the world championship boxing bouts fought in Puerto Rico during the late 1970s and early 1980s were fought at the Roberto Clemente coliseum, including Roberto Duran's world title defense versus Mexican Leoncio Ortiz, Wilfredo Gomez's knockout win against Carlos Zarate, many of Samuel Serrano's title defenses, and the fight where Muhammad Ali defended his title againt Jean Pierre Coopman, the only time a world Heavyweight championship fight has been held in Puerto Rico. George Foreman had his last fight before announcing his first retirement there, and Julio Cesar Chavez had one of his first important fights there, on the undercard of Edwin Rosario's world Lightweight championship win against Jose Luis Ramirez. Because of all the boxing action going on during that era, many obeservers call the period from the middle 70's to the middle 80's as the golden age of boxing in Puerto Rico.
The Clemente coliseum has also been the place of large political rallies, and Puerto Rico's electoral commision uses it's facilities to count votes after each election.


text:
D228 Administrator Contracts Up for Revision
The Bremen High School District 228 board of education approved a potential new contract for district administrators. The contract will be presented to the administrators sometime early next week.
Months after agreeing on a new contract with the Joint Faculty Association, District 228 board members took a closer look at adminstrator contracts during a special meeting Dec. 28. A new approach to contracts includes modeling administrator contracts more similarly to teacher contracts, including pension line items, said Community Relations Coordinator Lori DeVos. Details were discussed in closed session; board members approved the measure in a public vote. District administration have yet to view and approve a formal contract. "The board met last week to go over, to put together a new mulit-year contract for administrators so that it was similar to the teachers' contract," DeVos said. "So, that all the certified staff had something that…
In this Article:


text:
Roe Plus Forty: Where Now?
This week marks the 40th anniversary of the U.S. Supreme Court's decision in Roe vs. Wade, which effectively invalidated the 50 states' abortion laws, asserting for the first time a woman's constitutional right to an abortion. Although the court undoubtedly saw itself settling a contentious issue for a divided polity, we know now that Roe did nothing of the sort. Instead, it only increased the divisive nature of the issue, further polarizing a population into pro-choice and pro-life factions, each of which has taken apparently irreconcilable positions.
Earlier this month TIME Magazine carried a cover story whose author argues that, since the Roe ruling, the pro-choice side has been gradually losing the battle for abortion rights. Why? Physicians are less willing to perform abortions, and pro-lifers have succeeded in persuading their respective state legislatures to tighten up restrictions on the practice, which effectively places hurdles in the way of those who would procure the procedure. Some of these have a primarily psychological deterrent effect, such as requiring the mother to have an ultrasound of the child, thereby impressing on her the reality of the human life growing in the womb. There may also be something to the observation that, because pro-lifers have more children, their beliefs have a certain demographic advantage over those of pro-choicers. For these and other reasons, pro-lifers have reason to think that their long-term prospects are bright, even in the current absence of a sympathetic political climate in the highest places.


text:
GIMP 2.8 landed in Ubuntu 12.10's main repos (available via Ubuntu Software Center)
GIMP is an important application in the "open" world, app that has a slow development cycle in terms of major releases, approach that can sometimes trigger missing up-to-date packages in various Ubuntu releases, like for instance, Ubuntu 12.04, even though it is an LTS, doesn't contain GIMP 2.8 in its default repos.
Weeks ago, GIMP 2.8 final was released but, due to Precise's LTS nature, has not landed in Ubuntu 12.04's official repos.
GIMP 2.8 stable has just in landed in Ubuntu 12.10's official repos, meaning it it now certain that Quantal users will benefit the new GIMP version by installing it via Ubuntu Software Center.
Worth mentioning
GIMP 2.8 can be installed in Ubuntu 12.04 via PPA.
- GIMP Magazine Issue 3 released and freely available for download
- GIMP 2.8.4 released with numerous bug fixes (PPA available)
- Meet Cronopios & Famas, 100 minute animation movie produced with 100% open-source tools
- Creative artist presents step-by-step user-friendly tutorial on how to create fancy wallpapers
- GIMP Magazine issue #1 published and available for download (free of charge)


text:
Dr Laurence Spurling
BA (Cantab) Social Science, Ph.D. (Manchester) Philosophy
Senior Lecturer in Psychosocial Studies (0.5)
Admissions Tutor for MSc in Psychodynamic Counselling
Contact details
Room 508
30 Russell Square
Department of Psychosocial Studies
Birkbeck College, University of London
London WC1B 5DT
Tel: 020 7631 6395
Email: firstname.lastname@example.com
Academic background
- Laurence Spurling joined Birkbeck in 1986 as a tutor on what was then the Department of Extra-Mural Studies, teaching on the Diploma in Adult Counselling. In 1994 he became a Lecturer in Counselling in the School of Psychology. He is now Senior Lecturer in the Department of Psycho-social Studies, with overall responsibility for the counselling and psychotherapy provision within the department. He is Programme Director of the MSc in Psychodynamic Counselling & Psychotherapy, where he teaches in the third year, and of the Foundation Degree in Short-term Dynamic Counselling and CBT.
- He works part-time at Birkbeck, and combines his academic career with a part-time clinical post as a Consultant Adult Psychotherapist in the NHS, as well as working in private practice as a psychoanalytic psychotherapist.
Research and teaching
Research interests
- Psychoanalytic theory and technique
- Combining psychoanalytic practice with other therapies
- Psychoanalysis in public settings
- Theoretical and clinical seminars on the MSc in Psychodynamic Counselling & Psychotherapy
- M.A., Professional Doctorate and Ph.D students in Psychoanalytic studies
- 2009: 2nd edition of An Introduction to Psychodynamic Counselling, with one new chapter (20 pages) and revisions
- 2004: Spurling, L. An Introduction to Psychodynamic Counselling, Palgrave/MacMillan 156 pages
- 1977: Phenomenology and the Social World: Routledge
Journal articles
- Spurling, L (2012) 'Characters in interpersonal and psychoanalytic therapy: a comparison', Psychoanalytic Psychotherapy, vol.26, no.3, 230-244
- Spurling, L. (2010) 'Can there be an analytic practice of a non-analytic therapy?' Psychodynamic Practice vol.16, no.1. 45-59.
- Spurling, L. (2008). 'Is there still a place for the concept of therapeutic regression in psychoanalysis?', International Journal of Psychoanalysis, vol.89, no.3:523-540(translated as 'Gibt as in der Psychoanalyse noch einen Platz fur das Koncept der "therapeutischen Regression"?' in Internationale Psychoanalyse 2009, ed. A.Mauss-Hanke, Psychosozial Verlag)
- Spurling, L. (2005). 'Combined therapy with Borderline patients'. British Journal of Psychotherapy, 21(4), 543-558
- Spurling, L. (2003). 'Transference with the Borderline client: Some implications for training psychodynamic counsellors'. Psychodynamic Practice, 9(1), 25-42
- Spurling, L. (2003).'On the therapeutic value of not offering Psychotherapy: An account of an extended asssessment'. Psychoanalytic Psychotherapy,17(1), 1-17
- Spurling, L. (2003). 'On Psychoanalytic figures as transference objects', International Journal of Psychoanalysis, vol.84: 31-43
Professional membership and awards
Professional membership
- Senior Member, London Centre for Psychotherapy


text:
GamesTracker Pro Evolution Soccer 12 Wii overview page. We track games news, reviews, previews and prices around the web.
Select a sub-section below or from the menu on the right.
Alternate Titles
Pro Evolution Soccer 2012 Wii (English)
Compare Prices
Cheapest Price New:
None available
Cheapest Price Used:
None available
Number of prices delivering to your region:
GamesTracker has located 49 prices for Pro Evolution Soccer 12 on Wii
To show prices relevant to your location please select a country from the list on the right...
Number of news articles allocated to this game:
No news articles allocated to Pro Evolution Soccer 12 Wii
Number of previews:
No Pro Evolution Soccer 12 Wii previews have been published yet.
Number of reviews:
No Pro Evolution Soccer 12 Wii reviews have been published yet.
Overall GT Rating (Average):
Waiting for 9 Wii reviews. GamesTracker ratings are based on the average score of at least 9 reviews.
Number of user reviews:
Number of screenshots:
Number of trailers:
Number of cheats:
Manufacturers Description
PES 2012 continues KONAMIs determination to work with fans of both the PES series and football in general, to create a truly realistic, immersive and utterly playable take on the modern game. Thus, the focus in PES 2012 is the instinctive way the game can be played and on teamwork in particular. Seabass and his Tokyo team have worked to recreate the very essence of top-level football, ensuring the new games AI engine has undergone a major overhaul and provide an experience akin to being part of a real team.
Last 10 Updates


text:
This post has expired! It was posted more than 30 days ago.
A fantastic opportunity exists with one of South Africa's Investment holding Companies. They are looking to expand their IT Team by recruiting a Junior Developer, who will be responsible and accountable for analysing business requirements, architecting solutions for these requirements, as well as testing, maintaining and enhancing current systems and applications.
If you meet the requirements and you are looking for an excellent new career opportunity please forward your details.
1) Your CV,
2) Current salary
3) Notice period
- Minimum Qualification: Tertiary education: diploma or degree: ND IT, BTech IT, BSc IT from recognized SA Technikons or Universities only (No certificates)
- Minimum Experience: 0- 3 years in programming
- Essential knowledge of/experience in:
- Solid understanding of: C#, ASP.NET, XML, SOAP, MS SQL, SSIS
- Working knowledge of using relational databases, specifically MS SQL Server
- Desirable knowledge of/experience in:
- Basic understanding of networks
- Basic understanding of accounting and financial systems
- Telephony experience will be advantages
Key Performance Areas
1. Investigating and documenting business requirements
2. Creating functional specifications and test plans from business requirements
3. Creating technical specifications from user requirements or functional specification;
4. Writing technical documentation;
5. Designing and writing new software programs and maintaining existing
6. Testing new programs and fault finding in existing;
7. Investigating new technologies


text:
On 25/05/2013,
you requested for the version in force on 25/05/2013
incorporating all amendments published on or before 25/05/2013.
The closest version currently available is that of 12/04/2004.
17. Section 36 of the principal Act is amended —
by inserting, immediately after the words "class of petroleum" in subsection (1), the words "or any flammable material"; and
by inserting, immediately after the word "petroleum" in the section heading, the words "and flammable material".


text:
Is Hormone Replacement Therapy Right for You?
There is this specific kind of hormone called as the Human growth hormones that is present in everyone's bodies. It is very much suggestive from the name that they are needed as well as helpful for growth of the body. If the same amount of this growth hormone is produced for our entire lives then in that case an individual would continue to grow for a never ending time and length. But unfortunately the production in large amounts of this hormone is brought to halt by our bodies as we attain a specific age. From there on the production of this hormone begins to decrease and this decrement continues until it comes to a complete halt. As mentioned above that the stoppage as well as the decrement of this particular hormone is unfortunate as HGH (human growth hormone) brings along with a lot of benefits for the human beings. The term human therapy another association with hormones is basically the usage of the hormones in the process of medical treatment. Another reference of hormonal therapy can also when being treated with the hormone antagonists.
Is Hormone Replacement Therapy Right for You? One definitely needs to find the answer of what is a hormone? Before knowing about its types and the further found kinds this must be known first what it actually is. A hormone is a precise kind of a chemical that is released by some gland or cell found at one or the other part present at some or the other part of the human body whose function is sending out messages which would affect cells that are present in various other parts of the human body. There are various types of HGH available which are made by humans via various technologies available these days and they are as given below.
GenF20 Plus hgh supplements is the rHGH that is sold in the country of Canada and is very popular as well. In accordance with LEC which is a firm that has an international recognition in the market, GenF20 Plus manages to be the absolute leader of the market in Canada occupying the 75 percentage of the share of the market. This GenF20 Plus named Human growth hormone has occupied many regions where it can provide with benefits. Its beneficial aspects can be mentioned as follows. It helps reducing the excess fat of the body. Gives an increment to the mass of the muscles as well as provides reduction in the wrinkles present on the skin.
IGF-1 that is the abbreviated form of the term Insulin-like growth factor is also called as somatomedin C. It is basically a protein found in humans that is encoded with the gene of IGF1. It is also given a reference of being the sulfation factor. This hormone is very much similar to insulin in terms of the molecular structure. It has a very important role to play in the growth during childhood and it even continues to impart effects that are anabolic in adults. There is this analog of the hormone IGF-1which is of the synthetic form named as mecasermin that is brought in use for the purpose of treating the problem of failure in growth.
GHR that is the abbreviated form of the term growth hormone releaser is being used these days in order to make an attempt to turn around the clock else try to slow it. And this trend is basically becoming common among the people of middle age as these people are basically on a look out of ways to look as well as feel younger.
The HGH that is the human growth hormone is also available for sale online and can be bought. Thus the people who have ant interests to buy HGH can go for the injectable form of this hormone available. On getting injected with the HGH the life is given on a new lease. It seems to be a priceless boon as it can serve as a breakthrough in the field of anti-ageing especially for the adults who are of the age above 30 years and also suffer from hormonal imbalance.


text:
Excrement-powered toilet motorcycle skids into view
It may sound potty, but a Japanese toilet company has lifted the lid on a trike that uses a rather crappy fuel source - quite literally, in fact.
Powered entirely by the excrement of animals and waste water, the 'highly efficient' Toilet Bike Neo is designed to run on biogases – fertilised, purified and compressed livestock waste and household waste water sourced from Shika-oi Town in Hokkaido and Kobe City.
The bonkers contraption, based on a 250CC trike, was created by the toilet firm partly as a PR stunt but also as part of plans to halve the company's carbon footprint. The fully road legal bike has completed around 870 miles of testing since October, proving that excrement, when placed in the hands of the right boffins, is a viable source of renewable energy.
Given that the image above shows a toilet seat attached to the trike, you might be forgiven for thinking riders can supply their own 'fuel' whilst on the move, but that's sadly not the case. Its makers have simply placed the toilet seat there to raise public awareness of the possibilities offered by alternative energy.
"The waste and household water are converted to methane gas by fermenting, and the methane gas is converted to bio-gas by purifying," a Toto engineer explained. "Which means there's no waste on board." What he neglected to tell the world was whether the exhaust emissions smell anything like the fuel did when it was originally sourced.
You might want to hold tight before you rush off and buy a cow, some feed and a few dozen buckets. Toto, which has been working on the three-wheeler since 2009, is unlikely to actually release the toilet trike. However don't be surprised if others follow in its footsteps and experiment with alternative power sources.
In August 2010, for example, Wessex Water sewage works created what was essentially a fart-powered Beetle that ran on methane gas.
Source and image: Metro UK


text:
Intertitle: "ROSCOE ARBUCKLE known to thousands as 'Fatty' is now in London".
M/S of Fatty with several male companions walking up a London street - Fatty clowns about to the amusement of his friends. Fatty accepts a cigarette from one of the men, he uses another man's cigar...
We always welcome comments and more information about our films.
All posts are reactively checked. Libellous and abusive comments are forbidden.


text:
Store > Batiks > Batiks - BROWN & Earthy Colors > KABEMICR
KABEMICR 0.50 remaining Elementals - Cascading Petals Batik - HoneycremeUS $10.75
Ivory, Taupe, Mocha, Chai, Chocolate, HoneycremeThis abstract batik is done with a limited, monochromatic palette, rich with tints and shades of earthy brown, gold and tan hues. The essence of cascading cherry blossom petals tumbling over an atmospheric ground adds a lovely botanical element. Batik, larger spots are about 7/16", from the 'Elementals Nature' collection by Lunn Studios for Kaufman Fabrics.
Quantity: yardsMinimum 0.5 yard;increments of 0.25 yard


text:
All Sites Contain:
Search-engine optimization
Responsive design
Customized layout
Search functionality
Multi-level contact forms
Training on editing and updating
Unlimited pages and posts
No required software to purchase.
Ability to Edit from any Browser
Seach engine friendly
Cross Browser for All Major Browsers
WYSIWYG Editing
Modify your own website
from anywhere at any time.
Easily add, edit and update the site,
without depending on a web designer.
You're gonna love this!
Working side-by-side with you, Avelex will build you a customized website using open-source content management system like Drupal or Wordpress. Check out our portfolio!
Even our most basic sites have full search-engine optimization, search functionality, interactive contact forms, social integration and everything else you'd need to run a website..
Clients love our content management systems. With only minimal training, you'll be able to maintain your own sites, adding and deleting content any time, anywhere.
If you choose to host the site with us, we'll provide ongoing maintenance and support of your site.
One less headache for you!
Nothing fancy here – we just build solid websites based on open-source (i.e. free) technologies, efficiently and cost-effectively. Take a look at our site and see why so many people are choosing Avelex as their web design company.
In the first year, traffic to the site has been phenomenal. We are constantly receiving compliments about our website, which is solely the result of Kim and the efforts she has placed in seeing my small business succeed. She continues to offer superior service, advice, and support as we continue to grow and have changing needs.
If a job is once begun, never leave it 'till it's done. Be the labor great or small, do it right or not at all.


text:
Highlights: Ecuador (Quito) , Galapagos (Santa Cruz Island)
Your kids will squeal with delight as an inquisitive dolphin swims near and splashes its playful greeting as you snorkel this pristine marine environment where the protected wild residents hold little fear of people.
Highlights: Ecuador (Quito) , Galapagos (Santa Cruz Island, Isabela Island)
The Galapagos Safari Camp is a unique way of exploring the Galapagos archipelago. The first eco-luxury tented camp in Ecuador follows the african safari tradition in which guests enjoy total comfort in their tents while experiencing nature in its purest form. Combined with a two night stay on the infamous Isabela Island.
Stay in the know: Subscribe to our newsletter to have our hand-picked trips & specials delivered to you!
Please enter a destination


text:
I'll be away for a couple of days, doing a spot of housekeeping, tidying, and mending some things that need fixing. Do excuse my absence but rest assured that I'll be back soon. Meanwhile, here's a sight for sore eyes: my version of the old TV test card. You can probably tell that I'm a little obsessed by old cards of mending thread. Some of my favourites are tucked in here: the Duldarn lady with her Marcel wave has to be right up there in my top three. Enjoy!
Tagged: Lusta
A spot of mending
Posted in Life leakage, Thrift, Vintage haberdashery Cartier Bresson Chadwick's Clark's darning Dorothy Duldarn Filosheen haberdashery Lusta Make do and mend mending Spider vintage Vintage haberdashery vintage thread Wolsey
scraps & scribblings on sewing, thrift, upcycling & vintage haberdashery
- Baking
- Bath places
- Book review
- Children's books
- Classes
- Craft Magazines
- Cross-stitch
- Embroidery
- Etui essentials
- Fashion
- Getting organised
- Giveaway
- Grand days out
- Herbs
- How-tos
- Laundry
- Life leakage
- Mending
- My favourite makers
- My first sewing machine
- Patchwork
- Pattern review
- Quilting
- Rag
- Scrap of the week
- Textile history
- Thrift
- Uncategorized
- Upcycling
- Vintage bedding
- Vintage books
- vintage buttons
- Vintage fabrics
- Vintage haberdashery
- Vintage samplers
- Vintage sewing machines
- A Dress A Day
- Always Find A Happy Place
- Bath Craft Community
- Betz White
- Cathy Cullis
- Cornflower
- Corset Laced Mannequins
- Cozy Homemaking
- Craft Leftovers
- Creative Salvage
- Doll
- Fashion Historia
- Feeling Stitchy
- Halfpenny Home
- House Wren Studio
- It's Darling!
- Laundry etc
- Lil Fish Studios
- Magpie's Laundry
- Male Pattern Boldness
- Mantua Maker
- Materialised
- Maya Made
- Meridien Ariel
- Naturally Dyeing
- Needleprint
- Old Singer Sewing Machine blog
- One Churchills Green
- One Million Gold Stars
- Paint Drops Keep Falling
- Selvedge
- Sweet Myrtle
- The Bath Crafting Cranny
- The Knackered Hack
- The Long Thread
- The Purl Bee
- Tinctory
- Tom of Holland
- Vintage Ricrac
- Whip Up
- Zakka Life
rummage here for more
"waste not want not" 1950s Bath buttons Christmas Christmas decoration clothes pegs darning Edwardian Embroidery felt felted sweater gift haberdashery hearts It's Darling! lambswool Laundry lavender Liberty Liberty Tana Lawn linen love Make do and mend mending Mollie Makes Patchwork ribbon scrap sewing Singer strawberry emeries Sylko the big mend thread Thrift tweed upcycled Upcycling vintage vintage eiderdown vintage fabric Vintage haberdashery vintage strawberries workshops- This work by Scrapiana is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported.
Buy Handmade Campaign
Bath Artisan Market


text:
Welcome To Pesci's Seafood Restaurant Cairns
Situated overlooking the Pier Marina, Pesci's seafood restaurant, Cairns is truly one of the most attractive waterfront restaurants around.
Relax while looking out over Trinity Inlet and wash away the hours enjoying the daytime view of game boats returning with their catch and outriggers training up and down the inlet, or by night, the soft moonlight flickering off the water.
From a selection of seafood dishes caught right off our back door to the finest produce fresh from the tropical NQ Tablelands, even the fussiest of critics can be satisfied with our expertly prepared cuisine. All our ingredients are the freshest possible and we only use organic poultry and grain fed beef.
For a night of fine food and wine with friends, or that special occasion, Pesci's seafood restaurant, Cairns is unbeatable.


text:
I picked Ryan up at the airport last night at midnight. It was snowing in town, this picture is from outside the airport. My friend Ben Victor made the statues. They are neat.
Our main goal for the five weeks that Ryan is spending in South Dakota is to get the rolling chassis and sheet metal for the giveaway bike fit and finished. We straightened frames today, so we squeezed Ryan's Fork into the batch. The fork is n.o.s., but it was bent. The bottom legs were squeezed together.
In this pic Ryan is giving the fork the old "Johny Powers precision eyeball" The fork passed his inspection so we moved onto the front leg.
Here is the rough check for the front leg. It was bent, so we bolted our fixture between the bottom rocker holes and straightened it out.
Ryan blasted all of his hardware for his fork, and assembled the springs. The rockers were missing some of the nuts and washers. I found one washer to use as a pattern, so we made up the other three that were missing.
In this pic Ryan is drilling out the i.d.
After we made the three washers, I taught Ryan how to use the surface grinder to make sure that they were all the same width. The three washers were within four thousandths of being the same thickness, but it was a good opportunity to show Ryan how to use a surface grinder.
The new washers and the o.g. sample
Ryan and his new fork. We are going to work hard on getting everything assembled and fit up before we worry about painting things. This will give Ryan good practice on assembling and disassembling his bike. We will keep you posted. Have a nice night.


text:
WHEN it comes to comparing life in the Top End with Ballarat, it's not just the weather that's different.
For a 12-year-old, it's virtually another world.
The Ballarat Football Netball Club will host an Indigenous awareness night on Wednesday at Simonds Park, Alfredton, in conjunction with the Thathangathay Foundation.
Foundation members made up of young men and women from the Wadeye community in the Northern Territory, including young footballers, will give junior footballers from the Ballarat region an insight into what life is like growing up in a remote indigenous community.
Dominic Crawley, who is under-12 seniors coach at the Ballarat Swans, said it would likely prove an eye-opener for some.
"I think as football clubs, we need to develop young people, not just from a sporting ability point of view, but also life as a whole," Crawley said. "It is a great opportunity to get about 250 kids together to talk about social issues. My brother, Justin, is the director of the Thathangathay Foundation and, since the Aboriginal side of things has been a hot topic in football, we thought we'd have an awareness night.
"For example, a 12-year-old up there is effectively considered an adult, and must learn to look after themselves in some ways. So we will look at the comparisons between young people here and young people up there.
"We had an awareness night in Bright in north-eastern Victoria and the kids up there were blown away that there are parts of Australia where English is a second language."
Justin Crawley was a school principal in Port Keith in remote Northern Territory, which is also called Wadeye in the local language.
Dominic Crawley said junior footballers and netballers from other clubs were also welcome to attend providing they booked in advance through the Ballarat Football Club's website www.ballaratfc.com
The club will be running two sessions as follows: Under-10 and under-12s between 4pm and 5pm, and under-14 and under-16.5 from 5pm to 6pm.
The club will put on a barbecue and there will opportunities to win signed AFL jumpers and tickets to the "Dreamtime at the G" match between Essendon and Richmond at the MCG.
Proceeds will go to the Thathangathay Foundation.


text:
There are no known Sleeptek retailers near Seattle, WA. Change this location →
We couldn't find any Sueno deals near Seattle, WA. Change this location →
Do you have a Sueno mattress? Write a Review!
The Sueno product line is a collection of mattresses that is manufactured by Sleeptek.
Have an update or correction to our information about Sueno? If so, please take a moment to suggest an edit.


text:
Khaled Meshaal, the political leader of Hamas, has called for Palestinians to wage a new intifada against Israel, including a return to suicide missions.
In an interview on Al Jazeera, Meshaal said: "We called for a military intifada against the enemy. Resistance will continue through suicide missions."
Meshaal's call came after Israel hammered Hamas targets in the Gaza Strip, killing at least 220 people in one of the bloodiest days of the decades-long Middle East conflict.
Meshaal said Hamas had accepted "all the peaceful options, but without results."
He said that for there to be any talks with the people of Gaza, "the blockade must be lifted and the crossings [from Israel] opened ... notably that in Rafah," which leads to Egypt.
Meshaal was referring to a blockade imposed on Gaza after Hamas full seized control of the overcrowded, impoverished strip from forces loyal to moderate Palestinian president Mahmoud Abbas in June 2007.
The Hamas leader, who live in exile in Syria, said he was open to reconciliation with Abbas, but demanded that the Palestinian president cease negotiations with Israel."Neither rockets nor suicide operations are absurd, but negotiations are," he said.
Hamas has not carried out a suicide attack on Israel since January 2005.
The first intifada, or uprising, broke out in 1988, and was followed by the 1993 Oslo peace accords, which led to a certain degree of Palestinian autonomy with the creation of the Palestinian Authority.
A second intifada broke out in 2000 and eventually ran out of steam three years later.
Content on this website is for general information purposes only. Your comments are provided by your own free will and you take sole responsibility for any direct or indirect liability. You hereby provide us with an irrevocable, unlimited, and global license for no consideration to use, reuse, delete or publish comments, in accordance with Community Rules & Guidelines and Terms and Conditions.


text:
Former Church Member Sued for $500K in Defamation for Blogging About Church
Originally posted May 25, 2012. An UPDATE posted below.
An Oregon woman, Julie Anne Smith, her daughter and three other former church members may be sued for blogging about their criticisms of their former church at the possible amount of $500,000.
Smith's blog known as the Beaverton Grace Bible Church Survivors was launched after she left the church a few years ago. Smith says she was shunned by church friends, she told KATU News.
"If I went to Costco or any place in town, if I ran into somebody, they would turn their heads and walk the other way," she told KATU. "All we did was ask questions. We just raised concerns. There's no sin in that."
Smith posted critical reviews of the church on Google that were later removed. In February, she started her blog, which accuses BGBC of spiritual abuse and its pastor, Charles O'Neal, of "narcissism in the pulpit," ABC News reported.
"The story of spiritual abuse needs to be told,"she wrote. "People are being hurt emotionally and spiritually by pastors who use bully tactics and we need a place to learn, to talk freely, and to heal. I will not be silenced."
UPDATE on Aug. 1, 2012: A Washington County judge has dismissed the lawsuit the church had against former church member and blogger Julie Ann Smith. Both parties received the decision made by the judge by postal mail.
The Church Report reported:
Their attorney, Linda K. Williams, said the church practices "Old Testament shunning" and her clients were all eventually ostracized by the church. Their negative comments, which they published online, were protected free speech, she said.
We are very happy the former church member's case against her and others was dismissed. It is definitely FREE SPEECH and that is what we do. People can't change or muzzle the voice of opinion of other people.


text:
It was tough getting my daughter down on Sunday night, so my wife and I DVRd the closing ceremonies of the 30th Olympiad with the intent of taking it all in later that night. It didn't happen. Before I go any further, I'm going to go all juvenile for a second. Pardon me for a moment. I'm a sucker for the Olympics, so I'm legitimately going to miss the competition, but I think I'm going to miss more giggling every time I pulled up my DVR list to see "XXX Summer Olympics" in the selection window. It never got old. How long before Jackie Treehorn grabs a hold of that and runs with it?
OK, back to adulthood.
Like I said, my wife and I had intended to watch the closing ceremonies on Sunday, but ended up not getting around to it until last night. I have a lot of questions. Like: where was George Michael at the start of Freedom 90? Initially, when the intro dragged on and Michael eventually surfaced in verse 2, I figured the dude was going to do a medley. But then he sang the whole song. So…why didn't we just take it from the top?
Most of my questions are of that nature, so I won't belabor this post, but I do have one legitimate question: for nations of an extreme controlled state, like North Korea and China, did their athletes have any idea who these performers were?
The cameras never roamed to those delegations during the closing ceremonies. I'm assuming that was a calculated decision, designed to preserve the perception of a great time had by all, for I'm surmising that the blank looks on the faces of those "partying" under the aforementioned flags would have made for bad TV.
I was very entertained by London's wrap, but I truly felt for those countries whose governments do not permit their populations to experience the simple pleasures that we do in the free world. Stuff like this, for example. I'm guessing Dong Dong will never have the opportunity to see this:


text:
For researchers who dream of controlling materials properties down to the atomic level, 2005 marks a milestone for a revolutionary new science. Oak Ridge National Laboratory is opening the Center for Nanophase Materials Sciences (CNMS), the first of five new Department of Energy Nanoscale Science Research Centers. Located adjacent to the Spallation Neutron Source, the $65 million facility houses state-of-the art instruments and is open to users from universities, national laboratories, and commercial firms, as well as the University of Tennessee and ORNL. The six-year journey from conception to completion of the CNMS began in 1999 when ORNL researchers joined DOE in planning for the National Nanotechnology Initiative. Meanwhile, ORNL invested internal funds to strengthen the Laboratory's nanoscience research capabilities and prepared a successful proposal to build DOE's first nanoscience center in Oak Ridge. With construction of its building completed at the beginning of May 2005, the CNMS announced a Call for Proposals and hosted an Inaugural User Meeting with more than 270 participants. During FY2004-2005 ORNL also operated a limited "jump start" nanoscience research program that resulted in support for 75 user projects. The revolution was truly taking flight. This issue of the ORNL Review highlights the role of the CNMS in creating a highly collaborative environment that will accelerate nanoscience discovery and drive technological advances. Because nanoscale science is highly integrative, we are striving to bring together the best ideas, instruments, and individuals to form a highly interactive and multidisciplinary CNMS user research community. We are guided by the Department of Energy's challenge to design a nanoscience center that would "enable research of a scope and depth beyond current national capabilities." The CNMS will meet this challenge by providing new capabilities for nanomaterials synthesis and characterization, nanofabrication, theory and modeling of nanoscale phenomena, and, ultimately, the design of functional nanomaterials. Equally important, the CNMS also will create scientific synergies by exploiting ORNL strengths in neutron science, leadership computing, materials synthesis, and instrument development, each of which provides opportunities for international leadership in nanoscience. The facility will be aided by a new generation of unique, state-of-the-art instruments that combine nanoscale imaging with simultaneous nanomaterials' manipulation and properties' measurements, and, on occasion, special sample environments. Using the Spallation Neutron Source, which opens in 2006, and the recently upgraded High Flux Isotope Reactor, the CNMS will exploit neutron scattering's unique capabilities-complementary to other techniques-to probe polymeric and bio-inspired materials, as well as magnetic materials and phenomena. The CNMS' Nanomaterials Theory Institute will make use of the expertise and supercomputers at DOE's new National Leadership Computing Facility at ORNL to address several grand challenges of computational nanoscience. The Institute already is pursuing these challenges by establishing "NanoFocULs" laboratories that bring together users with world leaders in computational nanoscience, to develop community-based codes. Pursuing yet another scientific synergy, CNMS researchers will focus on "science-driven synthesis" as a tool for discovery to reveal new phenomena and obtain new functionalities. The new Nanofabrication Research Laboratory will be used to develop ways of achieving the controlled synthesis and directed assembly of functional nanomaterials needed for nanotechnology. The materials processing and nanoscale patterning capabilities in the laboratory's "clean room" already are attracting local science-based firms, reinforcing predictions that the CNMS could be an incubator for commercial nanotechnology. Our dreams have been realized. Our real work is just beginning. |
Web site provided by Oak Ridge National Laboratory's Communications and External Relations |


text:
Best kidga.com game with hiqh quality graphics. There is no time-rush, but a plenty of time to think over in an amazing mind twisting game.
★ Game Rules:
Select bricks of the shown figure(no rotation) shape to remove it from
field. Clear row to make new bricks available. Challenge other gamers in pursuit of highscore.
Use new game feature: hold current figure (click on figure to hold it). Drop rows successively by each figure to get bonus points.
★ More Games:
See also Quazzle with figures rotation and
Pentas (5x blocks game) - a new continuation of Quadris! More fun with tricky puzzle game!
Much more blocks and figures games, Match3 and 3-in-a-row genre puzzle and mind-breaker games at http://kidga.com
★ Contacts:
Twitter: http://twitter.com/KidgaCom
E-mail: firstname.lastname@example.com
Great app, would highly recommend it!


text:
Noumea & Tahiti, South Pacific & Hamburg, Federal Republic of Germany (Western Germany).
Title reads 'Night Life - The International Way'.
Various shots of a fashion show set up at night at Noumea, New Caledonia. The audience looking at the dresses, also a wedding dress. A live band...
We always welcome comments and more information about our films.
All posts are reactively checked. Libellous and abusive comments are forbidden.


text:
General Location:
More Specific:
Don't have time to sift through profiles? Let us be your "production concierge." Simply submit your request & we'll match you to qualified vendors in our network who will respond directly to you.
To begin: simply enter one brief sentence, then click start.
Find out more about a ProductionHUB Featured Profile.
Full Service Production Company Specializing in Live Productions Operate an SD Mobile Production Truck and a KU Digital/Analog Uplink Truck
Indiana University's Radio and Television Services—IURTVS—brings a wide range of educational services to the academic community at IU, the residents of Indiana, and to the rest of the United States. In addition, IURTVS provides the surrounding area with radio and television programming that ranges from local public affairs…
Freelance producer, Tech, and Production Assistant.
I''ve been a field sound mixer for the past five months. I''ve worked on a daily half hour entertainment show. They other shows I''ve worked on vary from extreme sports to fashion.
A production assistant available to start now.
ProductionHUB Directory profiles can only be contacted regarding hiring their services. Contacting Directory profiles in order to try and sell them something or promote yourself, your company, idea, script, website, film, band, book, contest or find employment is a violation of our TERMS OF USE and may result in your account being suspended.
The ProductionHUB Directory is where production companies & professionals get listed so they can be found by people needing to hire production services. If you are in the industry, and haven't added a profile yet, GET LISTED.


text:
FreshBiz Workshop sample
About FreshBiz
FreshBiz is a game that fundamentally changes the way its participants play their business and their life by simulating and then practicing new, creative methods of entrepreneurial thinking and problem solving to achieve their most vital goals.
For a complete overview of the FreshBiz entrepreneurship game, vision, and opportunity, just watch this presentation.
The Game
Through its game-based learning, participants travel through the game on a mission to win, while gaining skills, understandings and strategies that not only help them to achieve their goals in the game, but also to excel in their lives.
Often, in business and in life, we use understandings and assumptions to help us make our way through the endless possibilities we confront.
Utilizing common business practices, and years of insight from entrepreneurs, FreshBiz uses tools such as buying/selling of businesses, leveraging, loans, business opportunities and much more to simulate a business environment. Simultaneously, relationships are forged and the atmosphere of the room buzzes as participants engage with themselves and others in entrepreneurial, multi-dimensional thinking.
Insights gained during a 90-minute game last far into the future, as our participants claim that the game impacts them from the moment they play, to the rest of their lives.
During the game, and in FreshBiz workshops, the following areas are addressed:


text:
Reviews for Eminem
By Pages: Previous 10 Pages 11 12 13 14 15 16 17 18 19 20 Current page No. 11/ 20
Add New Review About The Artist
love ya!! | Reviewer: Melissa | 1/18/08
Omg i luv u soooo much! u r the bestest rapper ever i luv all ur songs n ur also so fuckin sexy!!!!! luv ya 2 death! :P
i luv u so much | Reviewer: brittany | 1/13/08
heyy im brittany and i luv u so much.i have so much respect for u em because u dont care what the hell ppl think bout u.and i have all your cds which i luv, i cant wait untill your new albulm comes out. i hope u and your family r doing fine ....i want to meet u so bad. well thats all for now luv u with all my heart, luv brittany......... i <3 u so much
to one of my influences | Reviewer: victoria | 12/31/07
hey wutup eminem , yo i dont know wut to say so i will let my heart speak for its self. if it wasent for you i would prob give up my only think in life that makes me happy writing and rapping people say and put me down becasue of my race and that i come from a southern place but i dont care i dress diffrent then them and i act diffrent the two main rappers who i look up to is tupac ,and you .people tell me jsut to give up but i dont i keep doing every day they say that i am crazy and say that i enbarrase them what i say is fuck you i dont really care because it is what i do and i f you dont like you can go suck one you know they dis you but i stand up for you and say he is a great rapper and a great father well i just want to say keep doing what you are doing and you are a great father nomatter what anybody says and i will always love you and be your fan well i have to go now just get back if u can ok much love victoria aka babygurl
eminem you are my idol. | Reviewer: TIFFANY | 12/31/07
eminem I love your music.I have all your shirts and I just wanted to tell you my favorite song in the history of rap is (squaredance).the girl who just wrote you this is TIFFANY from Bismarck AR. if you have the time could you wright me back my adress is 1341 qwapaw RD. please wright me back
Cool thyme for slim, Hey wat if I win. Who knows I do not dispose. | Reviewer: Kristian Petkov | 12/29/07
Helo Eminem, I hope you are fine. I do not Whant you to get out of line and rhyme. I can do it, I could ryme, come on this is fine, I never get out of line.
Something diferent about me I am 20 years old, do love youar gap, I met rap. This is about all I can say, hey.
I hope you have a good time, brcause me I am fine.
Something diferent about me I am 6'6 hoping to grow because I want to be able to dunk. I am not a scunk.
I can write to you for ever, but never should I alow for this to hapen. I will just be wraping.
THE REAL SLIM SHADY............ | Reviewer: rena | 12/22/07
I just can't live without his songs! | Reviewer: Ollka | 12/23/07
really Eminem is the best rapper after 2Pac's died...
Eminem's songs are about life, love... by Eminem you learn WHAT's THAT! and while I'm listening 2 'em, I realise, that not all of the rappers know what they are singing about ('i'm about the russian ones) .. But Marshall came a long way to his present success... He chose a very difficult career for a white man.. his songs.. don't know.. they are like his diary... RESPECT U
I'm from Russia and i'm listening to your music since i was 9. And I respect this man, respect, cuz he's a great father. A great father which I've never had... cuz he's a great singer, and I'm his fan...
when I have quarelling and scandals at home the only help gor me are Em's songs... there were some situations, when I wanted only to suicide... Thanks God, that I didn't do that...
I just wanted to say thank u for your lyrics and songs.
4ever your fan! 4EVER!!!
P.S. I'm just waiting till YOU come to Russia, S-Petersburg...
the bobb is ...eminem | Reviewer: vanessa boulay | 12/16/07
hey this is vanessa eminem just wanted to say that you are the real thing withouit u ther woud be no great rappers...i really hope you keep on making songs. your rap music is sooooooo great i have all of your cds and tonz of posters. i may be young but i have ben lisnen 2 u like 4 eva! lmao. luv ya tonz!
xoxo vanessa xoxo
eminem the best rapper | Reviewer: aditya kulashri | 12/17/07
eminem is the greatest i have ever seen and every time i hear his track mocking bird, when i am gone, i feel like crying coz really they r heart touching and the way he raps its amazing. have a nice future mathew mathers. m & m. ba bye
God of rap in all over the world | Reviewer: Nader | 12/13/07
Iam an Iranian that love Eminem.Ithink his rhymes are very relaxing.all of the rapper in all of the world must follow him
shady | Reviewer: kufa noble | 12/11/07
eminem your the best rapper since tupac died. i hope you still bring songs out because i just love to listen to your music dont listen to all the bad remarkes what been said to you more people love then there do hate ya love ya loads
the man of the RAP | Reviewer: blendd | 12/7/07
What is rap if eminem not sing what is rap if the king not sing.Use you're brain and vote b-rabit hej eminem i love you and x-zibit. I LOVE THE SONG '' MOCKING BIRD''not listen every song because ..what is life.. by eminem you learn . hej marshall don't give up ... these are boulls shit and who hate eminem fuck up.Im crazy meet you im a psychoman and for you're songs too. so , D!@ are kingzzzz..ZZz....:)
Legend ''eminem'' | Reviewer: blend | 12/7/07
look eminem you are my idoll,my life,my song and everything for me.Im from albanian so i want very much meet you.you're songs are very very nice.you're rimes are very cool. So. go B-rabit heh.and film 8 mile is very good. WHO hate the legend i kill him ''not really''. FUCK FREE WORLD
12/7/07 | Reviewer: Ellie | 12/7/07
I'm really am not the type of girl that people would think to like... scratch that LOVE rap and Em's work, but I am, im 13 and d*mn proud of it, I hate how people think that the music makes the person, its the other way around its the people that make the music! I have been an Eminem fan for like half my life, ever sense I heard "Cleanin' Out my Closet" I have been hooked, and I know like all the word to the 3cd's worth of song of Em's that I have!!! The somg I love the most of Em's is Hailie's Song, I love how down to Earth it is. Eminem rocks and I hope he keeps rocking... scratch that rapping! 831, peace out Ellie from Wisconsin
loving 'em | Reviewer: Shana | 12/5/07
hey boi sup?
what can i say?
Ever since i heard the song Mockingbird a few years ago it made meh cry! that's when i realized that ur life ain't so different from mine. i grew up w/o a father and troubles with my mother and school life is totally not fair! i'm from missouri! i've been n Kansas City a few times and it's great! sometimes when life is messed up the only way u can really go is forward! i like rapping too even though i'm a grrl! and some day i hope i will make music too! i have 17 songs written but i haven't yet recorded them! I think ur the best damn rapper artist out there! you've put so much inspiration on me! very influential! When i'm upset i just put ur music on and i feel better afterwards! i feel like i can b who ever i want to b and not feel down bcuz i have the power to get a grip and do what eva i want! i know ow it feels to b different and especially wanting to rap! i'm not normal in school! my dreams is to become like u and wanting to b an actress! and yes i love you more than all yo fans! I love you Eminem! ps.keep it real man! i love ur work!
Add New Review About The Artist
By Pages: Previous 10 Pages 11 12 13 14 15 16 17 18 19 20 Current page No. 11/ 20


text:
Things to Do in Eau Claire
Things to Do Deals
Studio One Yoga & Massage
- Stillwater
Serene studio setting hosts schedule of mind-body classes taught by experienced instructors, including hot yoga, Vinyasa, and tai chi
Chateau St. Croix Winery & Vineyard
- Saint Croix Falls
Vintners host wine tasting that features grapes grown and bottled on Chateau St. Croix's 55-acre grounds.
Riverwood Canoe
- Osceola
Shaded by the surrounding cliffs and pine trees, canoes snake down the St. Croix River
Apple River Hideaway
- Somerset
An idyllic tree-lined shore speeds by tubers enjoying a jaunt down gushing rapids near a campsite with ample room for overnight visitors
Red Wing Golf Club
- Red Wing
18-hole course cleaves through the towering oaks, verdant pines, and sandstone bluffs of the Mississippi River Valley
Oak Hill Stables
Equestrian facility doles out English, Western, and Driving instruction via private and group lessons and trail rides
Wild Mountain/Taylors Falls Recreation
- Taylors Falls
Paddlewheel riverboats float down the St. Croix river during guided tours; on-board snack bar with chips and beer
Recommended Things to Do by Groupon Customers
For 53 years, the Saint Paul Chamber Orchestra has engaged eardrums with a vast repertoire of classical masterpieces and 128 newly commissioned works, earning 15 ASCAP awards for its adventurous programming. This season, the distinguished troupe hosts a quintet of internationally acclaimed artistic partners, a group that consists of visiting conductors, singers, fog horns, and musicians whose varied styles diversify the orchestra's huge selection of performances. During a marathon concert season, the orchestra's nimble bows and lusty horns leap and dash through the notes of Mendelssohn, Schubert, Haydn, and Mozart in dozens of concert dates. Awe strikes audiences during a rousing performance of Beethoven's Piano Concerto No. 1 (November 25–27), and Dawn Upshaw—recipient of a rare MacArthur Genius Award—sings sweetly in "Upshaw Sings Ravel and Debussy" (February 16 and 18). Many Friday and Saturday performances also include free preconcert discussions, which bring scholars, guest artists, conductors, and musicians to chat with audiences about the upcoming performance and their favorite mac 'n' cheese recipes.
Held aloft by 35 years of family tradition, Stillwater Balloon sends intrepid explorers skyward from a port just off the scenic St. Croix River. Friendly FAA-certified pilots operate each craft and readily answer any questions that passengers may have as they float through gorgeous views of the surrounding valley. The billowy, multicolored behemoths cruise at treetop level, allowing travelers to shake hands with monkeys. Private and semiprivate flights are the business's forte, but Stillwater Balloon also accommodates custom flights for backyard surprises or ultimate school pickups.
Several years ago, Ken Smith and Chase Williams were typical door-to-door salesmen. In need of a gimmick to boost sales and a quicker mode of transport, the duo tried riding Segways and immediately fell in love. Eventually, they turned their love for the two-wheeled transporter into their current venture, All American Segway. Their company provides all manner of Segway engagement, including guided Segway tours that offer rolling educations in local history and wildlife. Customers can also discover the revolutionary devices on their own by renting out Segways for recreational use, private parties, or as a friend for a lonely office chair or shopping cart.
Glacier-carved canyon walls framing the falls of the Willow River. Great blue herons stalking the wildflowers along the Kinnickinnic River. Owner and lifelong outdoorsman Mike Kealy and his guides lead kayaking trips past these and more dramatic sites, which typify the undeveloped riverbanks throughout eastern Minnesota and western Wisconsin. Each outing begins at a select meet-up point, from which guides provide shuttle service to and from the launch sites. Along with unveiling the rivers' untouched scenery, River Guide's team can also add a fishing guide to each trip, taking guests into streams teeming with brown, rainbow, and zebra-striped trout.:m]]
Tucked in the cool shadows of old, forest oak trees, St. Croix Valley Golf Course's nine-hole layout invites golfers to swing across 133 acres of rolling topography. Originally sculpted into the woods in 1925, the 3,060-yard course eschews sand traps and favors natural obstacles including ponds, trees, elevation changes, and indigenous photographers who snap their shutters during players' backswings. The golf experts that preside over the pro shop can sharpen swings with lessons, ensure trustworthy equipment with club regripping services, and offer rental clubs so players don't have to hit with the oversized gavel normally used to settle remote control disputes at home.
Course at a Glance:
- 9-hole, par 36 course
- Length of 3,060 yards from the farthest tees
- Course rating of 34.7 from the farthest tees
- Slope rating of 122 from the farthest tees
- Four tee options
Designed atop a moraine left by glaciers thousands of years ago, Spring Valley Golf Course showcases two distinct front and back nine sides featuring significant elevation changes due to the landscape's ancient terrain. The front nine is designed over a deposit of debris, rocks, and the scribbled wills of melting icebergs, a tricky track of holes where wind becomes a factor due to the scarcity of trees. As soon as players make the turn to the more challenging back nine, towering pine trees crowd the narrow fairways and demand extremely precise course play.
Players can browse the latest equipment or rest weary legs on the Pro Shop's welcoming porch, a prime vantage point for watching players take aim at the green of the par 3 seventh hole or swordfight with sand wedges over a disagreement concerning maximum gimme distance. The grounds also encompass a restaurant and full bar area.
Course at a Glance:
- 18-hole, par 72 course
- Total length of 6,053 yards from the back tees
- Course rating of 70.4 from the back tees
- Course slope of 124 from the back tees
- Four sets of tees per hole
- Scorecard