text:
Do Things: a Clojure Crash Course
It's time to learn how to actually do things with Clojure! Hot damn!
While you've undoubtedly heard of Clojure's awesome concurrency support and other stupendous features, Clojure's most salient characteristic is that it is a Lisp. In this chapter, you're going to explore the elements which comprise this Lisp core: syntax, functions, and data. This will provide you with a solid foundation for representing and solving problems in Clojure.
This groundwork will also allow you to write some super important code. In the last section, you'll tie everything together by creating a model of a hobbit and writing a function to hit it in a random spot. Super! Important!
As you go through the chapter, I recommend that you type out the examples in a REPL and run them. Programming in a new language is a skill, and, just like yodeling or synchronized swimming, you have to practice it to learn it. By the way, "Synchronized Swimming for Yodelers for the Brave and True" is due to be published in August of 20never. Check it out!
1. Syntax
Clojure's syntax is simple. Like all Lisps, it employs a uniform structure, a handful of special operators, and a constant supply of parentheses delivered from the parenthesis mines hidden beneath the Massachusetts Institute of Technology, where Lisp was born.
1.1. Forms
All Clojure code is written in a uniform structure. Clojure understands:
- Literal representations of data structures like numbers, strings, maps, and vectors
- Operations
We use the term form to refer to structurally valid code. These literal representations are all valid forms:
"a string"
["a" "vector" "of" "strings"]
Your code will rarely contain free-floating literals, of course, since they don't actually do anything on their own. Instead, you'll use literals in operations. Operations are how you do things. All operations take the form, "opening parenthesis, operator, operands, closing parenthesis":
(operator operand1 operand2 ... operandn)
Notice that there are no commas. Clojure uses whitespace to separate operands and it treats commas as whitespace. Here are some example operations:
(+ 1 2 3)
; => 6
(str "It was the panda " "in the library " "with a dust buster")
; => "It was the panda in the library with a dust buster"
To recap, Clojure consists of forms. Forms have a uniform structure. They consist of literals and operations. Operations consist of forms enclosed within parentheses.
For good measure, here's something that is not a form because it doesn't have a closing parenthesis:
Clojure's structural uniformity is probably different from what you're used to. In other languages, different operations might have different structures depending on the operator and the operands. For example, JavaScript employs a smorgasbord of infix notation, dot operators, and parentheses:
1 + 2 + 3
"It was the panda ".concat("in the library ", "with a dust buster")
Clojure's structure is very simple and consistent by comparison. No matter what operator you're using or what kind of data you're operating on, the structure is the same.
One final note: I'll also use the term expression to refer to Clojure forms. Don't get too hung up on the terminology, though.
1.2. Control Flow
Here are some basic control flow operators. Throughout the book you'll encounter more.
1.2.1. if
The general structure of
if is:
(if boolean-form
Here's an example:
(if true
"abra cadabra"
"hocus pocus")
; => "abra cadabra"
Notice that each branch of the
if can only have one form. This is
different from most languages. For example, in Ruby you can write:
if true
To get around this apparent limitation, we have the
do operator:
1.2.2. do
do lets you "wrap up" multiple forms. Try the following in your REPL:
(if true
(do (println "Success!")
"abra cadabra")
(do (println "Failure :(")
"hocus pocus"))
; => Success!
; => "abra cadabra"
In this case,
Success! is printed in the REPL and
"abra cadabra"
is returned as the value of the entire
if expression.
1.2.3. when
when operator is like a combination of
if and
do, but with
no else form. Here's an example:
(when true
(println "Success!")
"abra cadabra")
; => Success!
; => "abra cadabra"
when when you want to do multiple things when some condition is
true, and you don't want to do anything when the condition is false.
That covers the essential control flow operators!
1.3. Naming Things with def
One final thing before we move on to data structures: you use
def to
bind a name to a value in Clojure:
(def failed-protagonist-names
["Larry Potter"
"Doreen the Explorer"
"The Incredible Bulk"])
In this case, you're binding the name
failed-protagonist-names to a
vector containing three strings. Notice that I'm using the term
"bind", whereas in other langauges you'd say that you're assigning a
value to a variable. For example, in Ruby you might perform multiple
assignments to a variable to "build up" its value:
severity = :mild
error_message = "OH GOD! IT'S A DISASTER! WE'RE "
if severity == :mild
error_message = error_message + "MILDLY INCONVENIENCED!"
error_message = error_message + "DOOOOOOOMED!"
The Clojure equivalent would be:
(def severity :mild)
(def error-message "OH GOD! IT'S A DISASTER! WE'RE ")
(if (= severity :mild)
(def error-message (str error-message "MILDLY INCONVENIENCED!"))
(def error-message (str error-message "DOOOOOOOMED!")))
However, this is really bad Clojure. For now, you should treat
as if it's defining constants. But fear not! Over the next few
chapters you'll learn how to work with this apparent limitation by
coding in the functional style.
2. Data Structures
Clojure comes with a handful of data structures which you'll find yourself using the majority of the time. If you're coming from an object-oriented background, you'll be surprised at how much you can do with the "basic" types presented here.
All of Clojure's data structures are immutable, meaning you can't change them in place. There's no Clojure equivalent for the following Ruby:
failed_protagonist_names = [
"Larry Potter",
"Doreen the Explorer",
"The Incredible Bulk"
failed_protagonist_names[0] = "Gary Potter"
# => [
# "Gary Potter",
# "Doreen the Explorer",
# "The Incredible Bulk"
# ]
You'll learn more about why Clojure was implemented this way, but for now it's fun to just learn how to do things without all that philosophizing. Without further ado:
2.1. nil, true, false, Truthiness, Equality
Clojure has
true and
false values.
nil is used to indicate "no
value" in Clojure. You can check if a value is
nil with the cleverly
nil? function:
(nil? 1)
; => false
(nil? nil)
; => true
nil and
false are used to represent logical falsiness, while
all other values are logically truthy.
= is the equality operator:
(= 1 1)
; => true
(= nil nil)
; => true
(= 1 2)
; => false
Some other languages require you to use different operators when comparing values of different types. For example, you might have to use some kind of special "string equality" operator specially made just for strings. You don't need anything weird or tedious like that to test for equality when using Clojure's built-in data structures.
2.2. Numbers
Clojure has pretty sophisticated numerical support. I'm not going to spend much time dwelling on the boring technical details (like coercion and contagion), because that will get in the way of doing things. If you're interested in said boring details, check out http://clojure.org/data_structures#Data Structures-Numbers. Suffice to say that Clojure will merrily handle pretty much anything you throw at it.
In the mean time, we'll be working with integers and floats. We'll also be working with ratios, which Clojure can represent directly. Here's an integer, a float, and a ratio:
2.3. Strings
Here are some string examples:
"Lord Voldemort"
"\"He who must not be named\""
"\"Great cow of Moscow!\" - Hermes Conrad"
Notice that Clojure only allows double quotes to delineate strings.
'Lord Voldemort', for example, is not a valid string. Also notice
that Clojure doesn't have string interpolation. It only allows
concatenation via the
str function:
(def name "Chewbacca")
(str "\"Uggllglglglglglglglll\" - " name)
; => "Uggllglglglglglglglll" - Chewbacca
2.4. Maps
Maps are similar to dictionaries or hashes in other languages. They're a way of associating some value with some other value. Here are example map literals:
;; An empty map
;; ":a", ":b", ":c" are keywords and we'll cover them in the next section
{:a 1
:b "boring example"
:c []}
;; Associate "string-key" with the "plus" function
{"string-key" +}
;; Maps can be nested
{:name {:first "John" :middle "Jacob" :last "Jingleheimerschmidt"}}
Notice that map values can be of any type. String, number, map, vector, even function! Clojure don't care!
You can look up values in maps with the
get function:
(get {:a 0 :b 1} :b)
; => 1
(get {:a 0 :b {:c "ho hum"}} :b)
; => {:c "ho hum"}
get will return
nil if it doesn't find your key, but you can give
it a default value to return:
(get {:a 0 :b 1} :c)
; => nil
(get {:a 0 :b 1} :c "UNICORNS")
get-in function lets you look up values in nested maps:
(get-in {:a 0 :b {:c "ho hum"}} [:b :c])
; => "ho hum"
[:b :c] is a vector, which you'll read about in a minute.
Another way to look up a value in a map is to treat the map like a function, with the key as its argument:
({:name "The Human Coffee Pot"} :name)
; => "The Human Coffee Pot"
Real Clojurists hardly ever do this, though. However, Real Clojurists do use keywords to look up values in maps:
2.5. Keywords
Clojure keywords are best understood by the way they're used. They're primarily used as keys in maps, as you can see above. Examples of keywords:
Keywords can be used as functions which look up the corresponding value in a data structure. For example:
;; Look up :a in map
(:a {:a 1 :b 2 :c 3})
; => 1
;; This is equivalent to:
(get {:a 1 :b 2 :c 3} :a)
; => 1
;; Provide a default value, just like get:
(:d {:a 1 :b 2 :c 3} "FAERIES")
I think this is super cool and Real Clojurists do it all the time. You should do it, too!
Besides using map literals, you can use the
hash-map function to
create a map:
(hash-map :a 1 :b 2)
; => {:a 1 :b 2}
Clojure also lets you create sorted maps, but I won't be covering that.
2.6. Vectors
A vector is similar to an array in that it's a 0-indexed collection:
;; Here's a vector literal
[3 2 1]
;; Here we're returning an element of a vector
(get [3 2 1] 0)
; => 3
;; Another example of getting by index. Notice as well that vector
;; elements can be of any type and you can mix types.
(get ["a" {:name "Pugsley Winterbottom"} "c"] 1)
; => {:name "Pugsley Winterbottom"}
Notice that we're using the same
get function as we use when looking
up values in maps. The next chapter explains why we do this.
You can create vectors with the
vector function:
(vector "creepy" "full" "moon")
; => ["creepy" "full" "moon"]
Elements get added to the end of a vector:
(conj [1 2 3] 4)
; => [1 2 3 4]
2.7. Lists
Lists are similar to vectors in that they're linear collections of
values. There are some differences, though. You can't retrieve list
elements with
;; Here's a list - note the preceding single quote
'(1 2 3 4)
; => (1 2 3 4)
;; Notice that the REPL prints the list without a quote. This is OK,
;; and it'll be explained later.
;; Doesn't work for lists
(get '(100 200 300 400) 0)
;; This works but has different performance characteristics which we
;; don't care about right now.
(nth '(100 200 300 400) 3)
; => 400
You can create lists with the
list function:
(list 1 2 3 4)
; => (1 2 3 4)
Elements get added to the beginning of a list:
(conj '(1 2 3) 4)
; => (4 1 2 3)
When should you use a list and when should you use a vector? For now, you're probably best off just using vectors. As you learn more, you'll get a good feel for when to use which.
2.8. Sets
Sets are collections of unique values:
;; Literal notation
#{"hannah montanna" "miley cyrus" 20 45}
;; If you try to add :b to a set which already contains :b,
;; the set still only has one :b
(conj #{:a :b} :b)
; => #{:a :b}
;; You can check whether a value exists in a set
(get #{:a :b} :a)
; => :a
(:a #{:a :b})
; => :a
(get #{:a :b} "hannah montanna")
; => nil
You can create sets from existing vectors and lists by using the
function. One unobvious use for this is to check whether an element
exists in a collection:
(set [3 3 3 4 4])
; => #{3 4}
;; 3 exists in vector
(get (set [3 3 3 4 4]) 3)
; => 3
;; but 5 doesn't
(get (set [3 3 3 4 4]) 5)
; => nil
Just as you can create hash maps and sorted maps, you can create hash sets and sorted sets:
(hash-set 1 1 3 1 2)
; => #{1 2 3}
(sorted-set :b :a :c)
; => #{:a :b :c}
Clojure also lets you define how a set is sorted using the
sorted-set-by function, but this book doesn't cover that.
2.9. Symbols and Naming
Symbols are identifiers that are normally used to refer to something.
Let's look at a
def example:
(def failed-movie-titles ["Gone With the Moving Air" "Swellfellas"])
In this case,
def associates the value
["Gone With the Moving Air" "Swellfellas"] with the symbol
You might be thinking, "So what? Every other programming language lets me associate a name with a value. Big whoop!" Lisps, however, allow you to manipulate symbols as data, something we'll see a lot of when we start working with macros. Functions can return symbols and take them as arguments:
;; Identity returns its argument
(identity 'test)
; => test
For now, though, it's OK to think "Big whoop!" and not be very impressed.
2.10. Quoting
You may have noticed the single quote,
', in the examples above.
This is called "quoting". You'll learn about this in detail in the
chapter "Clojure Alchemy: Reading, Evaluation, and Macros". Here's the
quick explanation for now.
Giving Clojure a symbol returns the "object" it refers to:
; => ["Larry Potter" "Doreen the Explorer" "The Incredible Bulk"]
(first failed-protagonist-names)
; => "Larry Potter"
Quoting a symbol tells Clojure to use the symbol itself as a data structure, not the object the symbol refers to:
; => failed-protagonist-names
(eval 'failed-protagonist-names)
; => ["Larry Potter" "Doreen the Explorer" "The Incredible Bulk"]
(first 'failed-protagonist-names)
; => Throws exception!
(first ['failed-protagonist-names 'failed-antagonist-names])
; => failed-protagonist-names
You can also quote collections like lists, maps, and vectors. All symbols within the collection will be unevaluated:
'(failed-protagonist-names 0 1)
; => (failed-protagonist-names 0 1)
(first '(failed-protagonist-names 0 1))
; => failed-protagonist-names
(second '(failed-protagonist-names 0 1))
; => 0
2.11. Simplicity
You may have noticed that this treatment of data structures doesn't include a description of how to create new types or classes. This is because Clojure's emphasis on simplicity encourages you to reach for the built-in, "basic" data structures first.
If you come from an object-oriented background, you might think that this approach is weird and backwards. What you'll find, though, is that your data does not have to be tightly bundled with a class for it to be useful and intelligible. Here's an epigram loved by Clojurists which hints at the Clojure philosophy:
It is better to have 100 functions operate on one data structure
than 10 functions on 10 data structures.
-- Alan Perlis
You'll learn more about this aspect of Clojure's philosophy in the coming chapters. For now, though, keep an eye out for the ways that you gain code re-use by sticking to basic data structures.
Thus concludes our Clojure data structures primer. Now it's time to dig in to functions and see how these data structures can be used!
3. Functions
One of the reasons people go nuts over Lisps is that they allow you to build programs which behave in complex ways, yet the primary building block — the function — is so simple. This section will initiate you in the beauty and elegance of Lisp functions by explaining:
- Calling functions
- How functions differ from macros and special forms
- Defining functions
- Anonymous functions
- Returning functions
3.1. Calling Functions
By now you've seen many examples of function calls:
(+ 1 2 3 4)
(* 1 2 3 4)
(first [1 2 3 4])
I've already gone over how all Clojure expressions have the same syntax: opening parenthesis, operator, operands, closing parenthesis. "Function call" is just another term for an expression where the operator is a function expression. A function expression is just an expression which returns a function.
It might not be obvious, but this lets you write some pretty
interesting code. Here's a function expression which returns the
(addition) function:
;; Return value of "or" is first truthy value, and + is truthy
(or + -)
You can use that expression as the operator in another expression:
((or + -) 1 2 3)
; => 6
Here are a couple more valid function calls which return 6:
;; Return value of "and" is first falsey value or last truthy value.
;; + is the last truthy value
((and (= 1 1) +) 1 2 3)
;; Return value of "first" is the first element in a sequence
((first [+ 0]) 1 2 3)
However, these aren't valid function calls:
;; Numbers aren't functions
(1 2 3 4)
;; Neither are strings
("test" 1 2 3)
If you run these in your REPL you'll get something like
ClassCastException java.lang.String cannot be cast to clojure.lang.IFn
user/eval728 (NO_SOURCE_FILE:1)
You're likely to see this error many times as you continue with Clojure. "x cannot be cast to clojure.lang.IFn" just means that you're trying something as a function when it's not.
Function flexibility doesn't end with the function expression! Syntactically, functions can take any expressions as arguments — including other functions.
Take the
map function (not to be confused with the map data
map creates a new list by applying a function to each
member of a collection:
;; The "inc" function increments a number by 1
(inc 1.1)
; => 2.1
(map inc [0 1 2 3])
; => (1 2 3 4)
(Note that
map doesn't return a vector even though we supplied a
vector as an argument. You'll learn why later. For now, just trust
that this is OK and expected.)
Indeed, Clojure's ability to receive functions as arguments allows you
to build more powerful abstractions. Those unfamiliar with this kind
of programming think of functions as allowing you to generalize
operations over data instances. For example, the
+ function
abstracts addition over any specific numbers.
By contrast, Clojure (and all Lisps) allows you to create functions
which generalize over processes.
map allows you to generalize the
process of transforming a collection by applying a function — any
function — over any collection.
The last thing that you need know about function calls is that Clojure evaluates all function arguments recursively before passing them to the function. Here's how Clojure would evaluate a function call whose arguments are also function calls:
;; Here's the function call. It kicks off the evaluation process
(+ (inc 199) (/ 100 (- 7 2)))
;; All sub-forms are evaluated before applying the "+" function
(+ 200 (/ 100 (- 7 2))) ; evaluated "(inc 199)"
(+ 200 (/ 100 5)) ; evaluated (- 7 2)
(+ 200 20) ; evaluated (/ 100 5)
220 ; final evaluation
3.2. Function Calls, Macro Calls, and Special Forms
In the last section, you learned that function calls are expressions which have a function expression as the operator. There are two other kinds of expressions: macro calls and special forms. You've already seen a couple special forms:
(def failed-movie-titles ["Gone With the Moving Air" "Swellfellas"])
(if (= severity :mild)
(def error-message (str error-message "MILDLY INCONVENIENCED!"))
(def error-message (str error-message "DOOOOOOOMED!")))
You'll learn everything there is to know about macro calls and special forms in the chapter "Clojure Alchemy: Reading, Evaluation, and Macros". For now, though, the main feature which makes special forms "special" is that they don't always evaluate all of their operands, unlike function calls.
if, for example. Its general structure is:
(if boolean-form
Now imagine you had an
if statement like this:
(if good-mood
(tweet walking-on-sunshine-lyrics)
(tweet mopey-country-song-lyrics))
If Clojure evaluated both
tweet function calls, then your followers
would end up very confused.
Another feature which differentiates special forms is that you can't use them as arguments to functions.
In general, special forms implement core Clojure functionality that just can't be implemented with functions. There are only a handful of Clojure special forms, and it's pretty amazing that such a rich language is implemented with such a small set of building blocks.
Macros are similar to special forms in that they evaluate their operands differently from function calls and they also can't be passed as arguments to functions. But this detour has taken long enough; it's time to learn how to define functions!
3.3. Defining Functions
Function definitions are comprised of five main parts:
- A name
- (Optional) a docstring
- Parameters
- The function body
Here's an example of a function definition and calling the function:
(defn too-enthusiastic
"Return a cheer that might be a bit too enthusiastic"
(str "OH. MY. GOD! " name " YOU ARE MOST DEFINITELY LIKE THE BEST "
(too-enthusiastic "Zelda")
; => "OH. MY. GOD! Zelda YOU ARE MOST DEFINITELY LIKE THE BEST MAN SLASH WOMAN EVER I LOVE YOU AND WE SHOULD RUN AWAY TO SOMEWHERE"
Let's dive deeper into the docstring, parameters, and function body.
3.3.1. The Docstring
The docstring is really cool. You can view the docstring for a
function in the REPL with
(doc fn-name), e.g.
(doc map). The
docstring is also utilized if you use a tool to generate documentation
for your code. In the above example,
"Return a cheer that might be a
bit too enthusiastic" is the docstring.
3.3.2. Parameters
Clojure functions can be defined with zero or more parameters:
(defn no-params
"I take no parameters!")
(defn one-param
(str "I take one param: " x " It'd better be a string!"))
(defn two-params
[x y]
(str "Two parameters! That's nothing! Pah! I will smoosh them "
"together to spite you! " x y))
Functions can also be overloaded by arity. This means that a different function body will run depending on the number of arguments passed to a function.
Here's the general form of a multiple-arity function definition. Notice that each arity definition is enclosed in parentheses and has an argument list:
(defn multi-arity
;; 3-arity arguments and body
([first-arg second-arg third-arg]
(do-things first-arg second-arg third-arg))
;; 2-arity arguments and body
([first-arg second-arg]
(do-things first-arg second-arg))
;; 1-arity arguments and body
(do-things first-arg)))
Overloading by arity is one way to provide default values for
arguments. In this case,
"karate" is the default argument for the
chop-type param:
(defn x-chop
"Describe the kind of chop you're inflicting on someone"
([name chop-type]
(str "I " chop-type " chop " name "! Take that!"))
(x-chop name "karate")))
If you call
x-chop with two arguments, then the function works just
as it would if it weren't a multi-arity function:
(x-chop "Kanye West" "slap")
; => "I slap chop Kanye West! Take that!"
If you call
x-chop with only one argument, though, then
will actually call itself with the second argument
(x-chop "Kanye East")
; => "I karate chop Kanye East! Take that!"
It might seem unusual to define a function in terms of itself like this. If so, great! You're learning a new way to do things!
You can also make each arity do something completely unrelated:
(defn weird-arity
"Destiny dressed you this morning my friend, and now Fear is
trying to pull off your pants. If you give up, if you give in,
you're gonna end up naked with Fear just standing there laughing
at your dangling unmentionables! - the Tick")
(inc number)))
But most likely, you don't want to do that.
Clojure also allows you to define variable-arity functions by including a "rest-param", as in "put the rest of these arguments in a list with the following name":
(defn codger-communication
(str "Get off my lawn, " whippersnapper "!!!"))
(defn codger
[& whippersnappers] ;; the ampersand indicates the "rest-param"
(map codger-communication whippersnappers))
(codger "Billy" "Anne-Marie" "The Incredible Bulk")
; =>
; ("Get off my lawn, Billy!!!"
; "Get off my lawn, Anne-Marie!!!"
; "Get off my lawn, The Incredible Bulk!!!")
As you can see, when you provide arguments to variable-arity functions, the arguments get treated as a list.
You can mix rest-params with normal params, but the rest-param has to come last:
(defn favorite-things
[name & things]
(str "Hi, " name ", here are my favorite things: "
(clojure.string/join ", " things)))
(favorite-things "Doreen" "gum" "shoes" "kara-te")
; => "Hi, Doreen, here are my favorite things: gum, shoes, kara-te"
Finally, Clojure has a more sophisticated way of defining parameters called "destructuring", which deserves its own subsection:
3.3.3. Destructuring
The basic idea behind destructuring is that it lets you concisely bind symbols to values within a collection. Let's look at a basic example:
;; Return the first element of a collection
(defn my-first
[[first-thing]] ; Notice that first-thing is within a vector
(my-first ["oven" "bike" "waraxe"])
; => "oven"
Here's how you would accomplish the same thing without destructuring:
(defn my-other-first
(first collection))
(my-other-first ["nickel" "hair"])
; => "nickel"
As you can see, the
my-first associates the symbol
with the first element of the vector that was passed in as an
argument. You tell
my-first to do this by placing the symbol
first-thing within a vector.
That vector is like a huge sign held up to Clojure which says, "Hey! This function is going to receive a list or a vector or a set as an argument. Make my life easier by taking apart the argument's structure for me and associating meaningful names with different parts of the argument!"
When destructuring a vector or list, you can name as many elements as you want and also use rest params:
(defn chooser
[[first-choice second-choice & unimportant-choices]]
(println (str "Your first choice is: " first-choice))
(println (str "Your second choice is: " second-choice))
(println (str "We're ignoring the rest of your choices. "
"Here they are in case you need to cry over them: "
(clojure.string/join ", " unimportant-choices))))
(chooser ["Marmalade", "Handsome Jack", "Pigpen", "Aquaman"])
; =>
; Your first choice is: Marmalade
; Your second choice is: Handsome Jack
; We're ignoring the rest of your choices. Here they are in case \
; you need to cry over them: Pigpen, Aquaman
You can also destructure maps. In the same way that you tell Clojure to destructure a vector or list by providing a vector as a parameter, you destucture maps by providing a map as a parameter:
(defn announce-treasure-location
[{lat :lat lng :lng}]
(println (str "Treasure lat: " lat))
(println (str "Treasure lng: " lng)))
(announce-treasure-location {:lat 28.22 :lng 81.33})
; =>
; Treasure lat: 28.22
; Treasure lng: 81.33
Let's look more at this line:
[{lat :lat lng :lng}]
This is like telling Clojure, "Yo! Clojure! Do me a flava and
associate the symbol
lat with the value corresponding to the key
:lat. Do the same thing with
lng and
:lng, ok?."
We often want to just take keywords and "break them out" of a map, so there's a shorter syntax for that:
;; Works the same as above.
(defn announce-treasure-location
[{:keys [lat lng]}]
(println (str "Treasure lat: " lat))
(println (str "Treasure lng: " lng)))
You can retain access to the original map argument by using the
keyword. In the example below, the original map is accessed with
;; Works the same as above.
(defn receive-treasure-location
[{:keys [lat lng] :as treasure-location}]
(println (str "Treasure lat: " lat))
(println (str "Treasure lng: " lng))
;; One would assume that this would put in new coordinates for your ship
(steer-ship! treasure-location))
In general, you can think of destructuring as instructing Clojure how to associate symbols with values in a list, map, set, or vector.
Now, on to the part of the function that actually does something: the function body!
3.3.4. Function body
Your function body can contain any forms. Clojure automatically returns the last form evaluated:
(defn illustrative-function
(+ 1 304)
; => "joe"
(defn number-comment
(if (> x 6)
"Oh my gosh! What a big number!"
"That number's OK, I guess"))
(number-comment 5)
; => "That number's OK, I guess"
(number-comment 7)
; => "Oh my gosh! What a big number!"
3.3.5. All Functions are Created Equal
One final note: in Clojure, there are no privileged functions.
+ is
just a function,
- is just a function,
inc and
map are just
functions. They're no better than your functions! So don't let them
give you any lip.
More importantly, this fact helps to demonstrate Clojure's underlying
simplicity. In a way, Clojure is very dumb. When you make a function
call, Clojure just says, "
map? Sure, whatever! I'll just apply this
and move on." It doesn't care what the function is or where it came
from, it treats all functions the same. At its core, Clojure doesn't
give two burger flips about addition, multiplication, or mapping. It
just cares about applying functions.
As you program with Clojure more, you'll see that this simplicity is great. You don't have to worry about special rules or syntax for working with functions. They all work the same!
3.4. Anonymous Functions
In Clojure, your functions don't have to have names. In fact, you'll find yourself using anonymous functions all the time. How mysterious!
There are two ways to create anonymous functions. The first is to use
fn form:
;; This looks a lot like defn, doesn't it?
(fn [param-list]
function body)
;; Example
(map (fn [name] (str "Hi, " name))
["Darth Vader" "Mr. Magoo"])
; => ("Hi, Darth Vader" "Hi, Mr. Magoo")
;; Another example
((fn [x] (* x 3)) 8)
; => 24
You can treat
fn nearly identically to the way you treat
The parameter lists and function bodies work exactly the same. You can
use argument destructuring, rest-params, and so on.
You could even associate your anonymous function with a name, which shouldn't come as a surprise:
(def my-special-multiplier (fn [x] (* x 3)))
(my-special-multiplier 12)
; => 36
(If it does come as a surprise, then… Surprise!)
There's another, more compact way to create anonymous functions:
;; Whoa this looks weird.
#(* % 3)
;; Apply this weird looking thing
(#(* % 3) 8)
; => 24
;; Another example
(map #(str "Hi, " %)
["Darth Vader" "Mr. Magoo"])
; => ("Hi, Darth Vader" "Hi, Mr. Magoo")
You can see that it's definitely more compact, but it's probably also confusing. Let's break it down.
This kind of anonymous function looks a lot like a function call,
except that it's preceded by a pound sign,
;; Function call
(* 8 3)
;; Anonymous function
#(* % 3)
This similarity allows you to more quickly see what will happen when this anonymous function gets applied. "Oh," you can say to yourself, "this is going to multiply its argument by 3".
As you may have guessed by now, the percent sign,
%, indicates the
argument passed to the function. If your anonymous function takes
multiple arguments, you can distinguish them like this:
%3, etc.
% is equivalent to
(#(str %1 " and " %2) "corn bread" "butter beans")
; => "corn bread and butter beans"
You can also pass a rest param:
(#(identity %&) 1 "blarg" :yip)
; => (1 "blarg" :yip)
The main difference between this form and
fn is that this form can
easily become unreadable and is best used for short functions.
3.5. Returning Functions
Functions can return other functions. The returned functions are closures, which means that they can access all the variables that were in scope when the function was created.
Here's a standard example:
;; inc-by is in scope, so the returned function has access to it even
;; when the returned function is used outside inc-maker
(defn inc-maker
"Create a custom incrementor"
#(+ % inc-by))
(def inc3 (inc-maker 3))
(inc3 7)
; => 10
4. Pulling It All Together
OK! Let's pull all this together and use our knowledge for a noble purpose: smacking around hobbits!
In order to hit a hobbit, we'll first model its body parts. Each body part will include its relative size to help us determine how likely it is that that part will be hit.
In order to avoid repetition, this hobbit model will only include entries for "left foot", "left ear", etc. Therefore, we'll need a function to fully symmetrize the model.
Finally, we'll create a function which iterates over our body parts and randomly chooses the one hit.
4.1. The Shire's Next Top Model
For our hobbit model, we'll eschew such characteristics as "joviality" and "mischievousness" and focus only on the hobbit's tiny body. Here's our hobbit model:
(def asym-hobbit-body-parts [{:name "head" :size 3}
{:name "left-eye" :size 1}
{:name "left-ear" :size 1}
{:name "mouth" :size 1}
{:name "nose" :size 1}
{:name "neck" :size 2}
{:name "left-shoulder" :size 3}
{:name "left-upper-arm" :size 3}
{:name "chest" :size 10}
{:name "back" :size 10}
{:name "left-forearm" :size 3}
{:name "abdomen" :size 6}
{:name "left-kidney" :size 1}
{:name "left-hand" :size 2}
{:name "left-knee" :size 2}
{:name "left-thigh" :size 4}
{:name "left-lower-leg" :size 3}
{:name "left-achilles" :size 1}
{:name "left-foot" :size 2}])
This is a vector of maps. Each map has the name of the body part and relative size of the body part. Look, I know that only anime characters have eyes 1/3 the size of their head, but just go with it, OK?
Conspicuously missing is the hobbit's right side. Let's fix that. The code below is the most complex code we've looked at so far. It introduces some ideas we haven't covered yet. Don't worry though, because we're going to examine it in great detail:
(defn needs-matching-part?
(re-find #"^left-" (:name part)))
(defn make-matching-part
{:name (clojure.string/replace (:name part) #"^left-" "right-")
:size (:size part)})
(defn symmetrize-body-parts
"Expects a seq of maps which have a :name and :size"
(loop [remaining-asym-parts asym-body-parts
final-body-parts []]
(if (empty? remaining-asym-parts)
(let [[part & remaining] remaining-asym-parts
final-body-parts (conj final-body-parts part)]
(if (needs-matching-part? part)
(recur remaining (conj final-body-parts (make-matching-part part)))
(recur remaining final-body-parts))))))
(symmetrize-body-parts asym-hobbit-body-parts)
; => the following is the return value
[{:name "head", :size 3}
{:name "left-eye", :size 1}
{:name "right-eye", :size 1}
{:name "left-ear", :size 1}
{:name "right-ear", :size 1}
{:name "mouth", :size 1}
{:name "nose", :size 1}
{:name "neck", :size 2}
{:name "left-shoulder", :size 3}
{:name "right-shoulder", :size 3}
{:name "left-upper-arm", :size 3}
{:name "right-upper-arm", :size 3}
{:name "chest", :size 10}
{:name "back", :size 10}
{:name "left-forearm", :size 3}
{:name "right-forearm", :size 3}
{:name "abdomen", :size 6}
{:name "left-kidney", :size 1}
{:name "right-kidney", :size 1}
{:name "left-hand", :size 2}
{:name "right-hand", :size 2}
{:name "left-knee", :size 2}
{:name "right-knee", :size 2}
{:name "left-thigh", :size 4}
{:name "right-thigh", :size 4}
{:name "left-lower-leg", :size 3}
{:name "right-lower-leg", :size 3}
{:name "left-achilles", :size 1}
{:name "right-achilles", :size 1}
{:name "left-foot", :size 2}
{:name "right-foot", :size 2}]
Let's break this down!
4.2. let
In our symmetrizer above, we saw the following:
(let [[part & remaining] remaining-asym-parts
final-body-parts (conj final-body-parts part)]
All this does is bind the names on the left to the values on the
right. You can think of
let as short for "let it be", which is also
a beautiful Beatles song (in case you didn't know (in which case,
wtf?)). For example, "Let
final-body-parts be
final-body-parts part)."
Here are some simpler examples:
(let [x 3]
; => 3
(def dalmatian-list
["Pongo" "Perdita" "Puppy 1" "Puppy 2"]) ; and 97 more...
(let [dalmatians (take 2 dalmatian-list)]
; => ("Pongo" "Perdita")
let also introduces a new scope:
(def x 0)
(let [x 1] x)
; => 1
However, you can reference existing bindings in your
let binding:
(def x 0)
(let [x (inc x)] x)
; => 1
You can also use rest-params in
let, just like you can in functions:
(let [[pongo & dalmatians] dalmatian-list]
[pongo dalmatians])
; => ["Pongo" ("Perdita" "Puppy 1" "Puppy 2")]
Notice that the value of a
let form is the last form in its body
which gets evaluated.
let forms follow all the destructuring rules which we introduced in
"Calling a Function" above.
One way to think about
let forms is that they provide parameters and
their arguments side-by-side.
let forms have two main uses:
- They provide clarity by allowing you to name things
- They allow you to evaluate an expression only once and re-use the result. This is especially important when you need to re-use the result of an expensive function call, like a network API call. It's also important when the expression has side effects.
Let's have another look at the
let form in our symmetrizing function
so we can understand exactly what's going on:
;; Associate "part" with the first element of "remaining-asym-parts"
;; Associate "remaining" with the rest of the elements in "remaining-asym-parts"
;; Associate "final-body-parts" with the result of (conj final-body-parts part)
(let [[part & remaining] remaining-asym-parts
final-body-parts (conj final-body-parts part)]
(if (needs-matching-part? part)
(recur remaining (conj final-body-parts (make-matching-part part)))
(recur remaining final-body-parts)))
Notice that
remaining, and
final-body-parts each gets used
multiple times in the body of the
let. If, instead of using the
remaining, and
final-body-parts we used the original
expressions, it would be a mess! For example:
(if (needs-matching-part? (first remaining-asym-parts))
(recur (rest remaining-asym-parts)
(conj (conj final-body-parts (first remaining-asym-parts))
(make-matching-part (first remaining-asym-parts))))
(recur (rest remaining-asm-parts)
(conj (conj final-body-parts (first remaining-asym-parts)))))
let is a handy way to introduce names for values.
4.3. loop
loop provides another way to do recursion in Clojure. Let's look at
a simple example:
(loop [iteration 0]
(println (str "Iteration " iteration))
(if (> iteration 3)
(println "Goodbye!")
(recur (inc iteration))))
; =>
Iteration 0
Iteration 1
Iteration 2
Iteration 3
Iteration 4
The first line,
loop [iteration 0] begins the loop and introduces a
binding with an initial value. This is almost like calling an
anonymous function with a default value. On the first pass through the
iteration has a value of 0.
Next, it prints a super interesting little message.
Then, it checks the value of
iteration - if it's greater than 3 then
it's time to say goodbye. Otherwise, we
recur. This is like calling
the anonymous function created by
loop, but this time we pass it an
(inc iteration).
You could in fact accomplish the same thing just using functions:
(defn recursive-printer
(recursive-printer 0))
(println (str "Iteration " iteration))
(if (> iteration 3)
(println "Goodbye!")
(recursive-printer (inc iteration)))))
; =>
Iteration 0
Iteration 1
Iteration 2
Iteration 3
Iteration 4
As you can see, this is a little more verbose. Also,
loop has much
better performance.
4.4. Regular Expressions
Regular expressions are tools for performing pattern matching on text. I won't go into how they work, but here's their literal notation:
;; pound, open quote, close quote
In our symmetrizer,
re-find returns truthy or falsey based on
whether the part's name starts with the string "left-":
(defn needs-matching-part?
(re-find #"^left-" (:name part)))
(needs-matching-part? {:name "left-eye"})
; => "left-" ; this is truthy
(needs-matching-part? {:name "neckbeard"})
; => nil ; this is falsey
make-matching-part uses a regex to replace
"left-" with
(defn make-matching-part
{:name (clojure.string/replace (:name part) #"^left-" "right-")
:size (:size part)})
(make-matching-part {:name "left-eye" :size 1})
; => {:name "right-eye" :size 1}
4.5. Symmetrizer
Now let's analyze the symmetrizer fully. Note points are floating in
the ocean, like
(def asym-hobbit-body-parts [{:name "head" :size 3}
{:name "left-eye" :size 1}
{:name "left-ear" :size 1}
{:name "mouth" :size 1}
{:name "nose" :size 1}
{:name "neck" :size 2}
{:name "left-shoulder" :size 3}
{:name "left-upper-arm" :size 3}
{:name "chest" :size 10}
{:name "back" :size 10}
{:name "left-forearm" :size 3}
{:name "abdomen" :size 6}
{:name "left-kidney" :size 1}
{:name "left-hand" :size 2}
{:name "left-knee" :size 2}
{:name "left-thigh" :size 4}
{:name "left-lower-leg" :size 3}
{:name "left-achilles" :size 1}
{:name "left-foot" :size 2}])
(defn needs-matching-part?
(re-find #"^left-" (:name part)))
(defn make-matching-part
{:name (clojure.string/replace (:name part) #"^left-" "right-")
:size (:size part)})
; ~~~1~~~
(defn symmetrize-body-parts
"Expects a seq of maps which have a :name and :size"
[asym-body-parts] ;
(loop [remaining-asym-parts asym-body-parts ; ~~~2~~~
final-body-parts []]
(if (empty? remaining-asym-parts) ; ~~~3~~~
(let [[part & remaining] remaining-asym-parts ; ~~~4~~~
final-body-parts (conj final-body-parts part)]
(if (needs-matching-part? part) ; ~~~5~~~
(recur remaining (conj final-body-parts (make-matching-part part))) ; ~~~6~~~
(recur remaining final-body-parts))))))
- This function employs a general strategy which is common in functional programming. Given a sequence (in this case, a vector of body parts and their sizes), continuously split the sequence into a "head" and a "tail". Process the head, add it to some result, and then use recursion to continue the process with the tail.
- Begin looping over the body parts. The "tail" of the sequence will be
bound to
remaining-asym-parts. Initially, it's bound to the full sequence passed to the function,
asym-body-parts. Create a result sequence,
final-body-parts; its initial value is an empty vector.
- If
remaining-asym-partsis empty, that means we've processed the entire sequence and can return the result,
- Otherwise, split the list into a head,
part, and tail,
remaining. Also, add
final-body-partsand re-bind the result to the name
final-body-parts. This might seem weird, and it's worthwhile to figure out why it works.
- Our growing sequence of
final-body-partsalready includes the body part we're currently examining,
part. Here, we decide whether we need to add the matching body part to the list.
- If so, then add the result of
final-body-partsand recur. Otherwise, just recur.
If you're new to this kind of programming, this might take some time to puzzle out. Stick with it! Once you understand what's happening, you'll feel like a million bucks!
4.6. Shorter Symmetrizer with Reduce
The pattern of "process each element in a sequence and build a result"
is so common that there's a function for it:
Here's a simple example:
;; sum with reduce
(reduce + [1 2 3 4])
; => 10
This is like telling Clojure to do this:
(+ (+ (+ 1 2) 3) 4)
So, reduce works by doing this:
- Apply the given function to the first two elements of a sequence.
That's where
(+ 1 2)comes from.
- Apply the given function to the result and the next element of the
sequence. In this case, the result of step 1 is
3, and the next element of the sequence is
3as well. So you end up with
(+ 3 3).
- Repeat step 2 for every remaining element in the sequence.
Reduce also takes an optional initial value.
15 is the initial value
(reduce + 15 [1 2 3 4])
If you provide an initial value, then reduce starts by applying the given function to the initial value and the first element of the sequence, rather than the first two elements of the sequence.
To further understand how reduce works, here's one way that it could be implemented:
(defn my-reduce
([f initial coll]
(loop [result initial
remaining coll]
(if (empty? remaining)
(recur (f result (first remaining)) (rest remaining)))))
([f [head & tail]]
(my-reduce f head tail)))
We could re-implement symmetrize as follows:
(defn better-symmetrize-body-parts
"Expects a seq of maps which have a :name and :size"
(reduce (fn [final-body-parts part]
(let [final-body-parts (conj final-body-parts part)]
(if (needs-matching-part? part)
(conj final-body-parts (make-matching-part part))
4.7. Hobbit Violence
My word, this is truly Clojure for the Brave and True!
Now, let's create a function that will determine which part of the hobbit gets hit:
(defn hit
(let [sym-parts (better-symmetrize-body-parts asym-body-parts)
body-part-size-sum (reduce + 0 (map :size sym-parts))
target (inc (rand body-part-size-sum))]
(loop [[part & rest] sym-parts
accumulated-size (:size part)]
(if (> accumulated-size target)
(recur rest (+ accumulated-size (:size part)))))))
(hit asym-hobbit-body-parts)
; => {:name "right-upper-arm", :size 3}
(hit asym-hobbit-body-parts)
; => {:name "chest", :size 10}
(hit asym-hobbit-body-parts)
; => {:name "left-eye", :size 1}
Oh my god, that poor hobbit! You monster!
5. What Now?
By this point I highly recommend actually writing some code to solidify your Clojure knowledge if you haven't started already. The Clojure Cheatsheet is a great reference listing all the built-in functions which operate on the data structures we covered.
One great place to start is to Create a function that's similar to symmetrize-body-parts, except that it has to work with weird space aliens with radial symmetry. Instead of two eyes, arms, legs, and all that, they have five. Or, do some Project Euler challenges. You can also check out 4Clojure, an online set of Clojure problems designed to test your knowledge. Just write something!


text:
George Lucas
Norman Rockwell Portrait of Ike Heading for Public DisplayTwo of the American artist's best loved pictures was snapped up by one of the brothers who were selling them.
Going, Going. The Tragedy Behind a Sale of American ArtBidding will be fierce as rare Norman Rockwells go under the hammer.

subset: commoncrawl


text: http://forums.androidcentral.com – I have tablet ELONEX with older version of Android 2.3.1 and I've installed some apps: Adobe ReaderAmazon KindleFacebookFirefox BrowserOpera Mini BrowserInstant Messenger GGK9-MailKingsoft OfficeTV cach up All of those apps crash when I start to open it. I get message "Sorry! The application xxxxx (process com.xxxx) has stopped unexpectedly. Please try again" And another application Skype can not open at all. It's opening for ever. What can cause that problem? I would appreciate for any advice. Thank you in advance. (HowTos)


text:
Because she wanted to become a concert pianist, she began taking piano lessons at the age of 10. Her music teacher was Sergei Tarnowsky.
User Score: 5
User Score: 4
CBS Entertainment | About TV.com | About CBS Interactive | Jobs | Advertise
© CBS Interactive Inc. All rights reserved. | Privacy Policy | Ad Choice | Terms of Use


text:
In Memory of Michael Brown
Demand President Obama and legislators across the country act now to address police use of lethal force across the USA
Take Action Now
May 2, 2014
Migrants' rights defenders were injured by police and migration authorities during an operation to detain irregular migrants in the Municipality of Zapata.
May 2, 2014
Umid Yakubov, a refugee from Uzbekistan, was abducted on the street in Moscow on 29 April. It is feared that he has been taken to Uzbekistan, where he is at real risk of torture/ill-treatment.
April 30, 2014
A man was shot dead during a protest in Copacabana, Rio de Janeiro on April 22. The community was protesting after another man was shot in the head during a police operation in the favela.
April 30, 2014
An Egyptian court sentenced 37 people to death and 491 others to life in prison after a grossly unfair trial, in breach of international standards and Egyptian law.


text:
Before we bid goodbye to summer, we're joined by golf professionals from around Windsor Essex who can teach us all a thing or two about fashion on the fairway.
Lively discourse is the lifeblood of any healthy democracy and The Star encourages readers to engage in robust debates about our stories. But, please, avoid personal attacks and keep your comments respectful and relevant. If you encounter abusive comments, click the "X" in the upper right corner of the comment box to report spam or abuse. The Star is Using Facebook Comments. Visit our FAQ page for more information.


text:
- Northern New York Newspapers
- Watertown
- Ogdensburg
- Massena-Potsdam
- Lowville
- Carthage
- Malone
- NNY Business
- NNY Living
- NNY Ads
By MATTHEW BULTMAN
POTSDAM - A controversial natural gas extraction technique has become small government's newest platform to rally against the state.
Two downstate towns are in the midst of a legal battle that could shape the future of the extraction process known as hydrofracking and add another chapter to the state-vs.-local government power struggle.
The towns of Dryden and Middlefield argue that local leaders should have the final say on when or where the gas extraction happens, not officials in Albany. And the Potsdam Town Council agrees.
Last week the board approved, with Councilwoman Judith R. Rich abstaining, to support local control of hydrofracking, a mining process in which chemical water is injected into the ground to fracture rock and release natural gas.
The vote was not an endorsement of the controversial mining technique, the Town Board said, but rather a support of local governments.
"At least this way we could decide what happens in our own township," Town Supervisor Marie C. Regan said.
Both Dryden, which sits just east of Ithaca, and Middlefield, near Cooperstown, have banned oil and gas exploration within town borders.
And both local laws are being challenged in court by energy companies who have spent millions of dollars leasing and developing land in those towns.
The companies say a state law which assigns regulatory authority over such activities to the state Department of Environmental Conservation trumps any local ordinance.
Officials in Dryden and Middlefield disagree, saying that, while the state controls industry regulations, each town has a right to establish zoning laws.
The two towns have sent a joint resolution to local governments around the state asking for support, not of the ban but of each municipality making its own decision.
In Potsdam, leaders debated a small government's ability to rule on such issues. Ms. Rich said some communities may be swayed by the promise of millions of dollars, tempted to turn over control of their land for what she called an environmentally damaging practice.
"Money can be very tempting especially in small rural communities," Ms. Rich said. "And I just wonder about it."
Councilman Michael J. Zagrobelny countered by saying that taking away home rule from locally elected bodies has become an ugly trend at the state capitol. Towns should be allowed to make that decision themselves, he argued.
"I think we pay a lot closer to attention to what's going on in our backyard than folks in Albany," Mr. Zagrobelny said.
Ms. Regan agreed.
"The state could say this could bring in a lot of money and we won't be able to say a thing about it," she said. "I would like us to be in control of it."
Thousands of readers like you have made Northern New York Newspapers the number one ranked website* for local news and sports coverage in the north country.
You can continue on to this article in a few seconds, or you can visit one of our websites:


text:
Saturdays, Saturdays, Saaaturdays!!! This is a brand I've known about for a year now but yet to get the opportunity to pull some threads from. Probably because it's a super rad high end Surf Shop out of the big NY, and of course I'm in L.A. I don't recall them vending online for very long (but I could be wrong).
Nonetheless, check out our brethen in the East Coast new style lookbook highlighting Spring/Summer 2011 looks from New York City's Saturdays Surf and its in-house label Saturdays.
Crazy how one minute your in the country – next you're shredding barrels…
All styles can now be purchased through the Saturdays Surf online store.


text:
9unicorns Crystals
Quality Crystals, Quality Service.
Tel: 01352 712941
Free Postage on all U.K. orders.
Palm Stones
SLICES and SLABS
Slices and Slabs of different Crystal and Mineral types. Various shapes and sizes. Most are supplied with a free display stand (please see individual descriptions).
Bespoke/bulk orders welcome.
Large Natural Stillbite Cluster with Green Apophyllite Crystals
email: firstname.lastname@example.com


text:
Professional Development
Continuing Education JavaScript
Clear Float
This pane clears float!
Autism Education
Help is available for parents, family members, and caregivers of an autistic spectrum child
through our unique hybrid or online classes and certifications which are available for credit and non-credit opportunities.
Child Care
If you are a professional working in childhood and school aged settings, the credentials and other trainings offered here might be for you. Our programs offer flexibility for your schedule and with the backing of an accredited higher learning institute, the flexibility to offer programs for credit and for personal enrichment.
Higher education
Skip Downing and his colleagues at On Course Workshops are international consultants in the field of faculty development and student success strategies. Dr. Downing's popular text, On Course: Strategies for Creating Success in College and in Life (Wadsworth/Cengage Learning), is used at more than 500 colleges and universities.
Teacher Recertification
Courses and experiences designed to assist PreK-12 educators meet the many challenges they face in a variety of convenient formats. Most courses can be taken on a non-credit or undergraduate or graduate credit basis — depending upon your needs.
Technical College Certification
Earn undergraduate or graduate credit while meeting the certification requirements of the Wisconsin Technical Education System. Depending upon the institution, courses are available in a face-to-face or online format. Your school not listed? We will work with you to provide this service.
Clear Float
This pane clears float!


text:
Tonight we celebrate 40 years of film and television production in Georgia and the people who made it happen with the people who are making it happen every day since entertainment production has exploded again in recent years. The design team of Pat Shankle Interiors welcomes you with how it all began, inspired by the silent film era. Travel with us through the eye of the lens.
Pat's team, in partnership with Griffith Construction & Design designed and created this giant portal to enter the experience that is The Next Cool Event. We are all putting the final touches in place today and really looking forward to seeing everyone tonight!
You may purchase tickets to tonight's 40 year reunion film & television event up until 7:00 pm tonight with your promo code at Ticket Alternative and print them out at home. If you would like to attend tomorrow night's VIP Gala, click here now for tickets at advance prices before they go up on the day of the event….or hit the easy button and Charge by Phone:


text:
TUSCALOOSA, Ala. Identification of three fatty acids involved in the extreme growth of Burmese pythons' hearts following large meals could prove beneficial in treating diseased human hearts, according to research co-authored by a University of Alabama scientist and publishing in the Oct. 28 issue of Science.
Growth of the human heart can be beneficial when resulting from exercise a type of growth known as physiological cardiac hypertrophy but damaging when triggered by disease growth known as pathological hypertrophy. The new research shows a potential avenue by which to make the unhealthy heart growth more like the healthy version.
"We may later be able to turn the tables, in a sense, in the processes involved in pathological hypertrophy by administering a combination of fatty acids that occur in very high concentrations in the blood of digesting pythons," said Dr. Stephen Secor, associate professor of biological sciences at UA and one of the paper's co-authors. "This could trigger, perhaps, something more akin to the physiological form of hypertrophy."
The research, conducted in collaboration with multiple researchers at the University of Colorado working in the lab of Dr. Leslie Leinwand, identified three fatty acids, myristic acid, palmitic acid and palmitoleic acid, for their roles in the snakes' healthy heart growths following a meal.
Researchers took these fatty acids from feasting pythons and infused them into fasting pythons. Afterward, those fasting pythons underwent heart-rate growths similar to that of the feasting pythons. In a similar fashion, the researchers were able to induce comparable heart-rate growths in rats, indicating that the fatty acids have a similar effect on the mammalian heart.
The paper, whose lead author was Dr. Cecilia Riquelme of the University of Colorado, also showed that the pythons' heart growth was a result of the indi
|Contact: Chris Bryant
University of Alabama in Tuscaloosa


text: Hi there. As the UK's leading expert on MD units (at least that's what I have been told), I am pretty sure the magnetic ring has come adrift from the spindle motor. It cannot 'grab' the disc inside the mindisc casing, which slips and makes this awful sound. You just need the spindle motor replacing. At the same time, the unit probably needs a small modification that prevents the sled motor transmission gear rubbing on the main circuit board, another source of noise and vibration.


text:
"A Mercy institution of higher education stands within the lineage of the Catholic intellectual tradition in its pursuit of truth and integration of knowledge for the common good. It participates in the Church's mission under the sponsorship of the Institute of the Sisters of Mercy of the Americas through the ministry of education, giving tangible evidence to its mission through ongoing teaching, scholarship and service. It demonstrates the values of mercy, justice and compassion as communicated through the traditions of the Sisters of Mercy. These common characteristics are uniquely given expression within each campus community.
Graduates of Mercy institutions are informed and shaped intellectually, socially and spiritually through a faith-inspired education. The academic study of the liberal arts and sciences and mastery of the professional disciplines enable Mercy graduates to be responsible leaders in their communities and professions. They appreciate and are informed by a Christian commitment to mercy and justice in the world. The living tradition of a Mercy college or university is sustained by a strong collegial community, with hospitality to new ideas and energies, and through collaboration within the Conference of Mercy Higher Education."1
1 Statement approved by the CMHE Board April 20, 2010, and by the Canonical Sponsor Council April 26,2010;


text:
- Home
- News
- Sports
- Opinion
- Obituaries
- Features
- Special Sections
- Classifieds
- Public Notices
Forgot Password? | Not a User? Sign up
ARLINGTON, Texas (AP) — Buster Posey caught the final strike, started to rush the mound, then stopped and turned toward the dugout.
If you currently subscribe or have subscribed in the past to the Los Alamos Monitor, then simply find your account number on your mailing label and enter it below.
Click the question mark below to see where your account ID appears on your mailing label.
If you are new to the award winning Los Alamos Monitor and wish to get a subscription or simply gain access to our online content then please enter your ZIP code below and continue to setup your account.
|ZIP Code:


text:
It's time for us brown people to step up. Let's begin reclaiming our history and our movement, and stand with others also fighting for liberation. We don't need a savior to come rescue us; we need to claim that which is rightfully ours - our history, our culture, our right to self-identify, and our united voice.
I have a news tidbit for Beltway journalists: Latinos are not all the same. We actually are not Barbies, easily fitting into one another's costumes or convertibles or dream houses. And for the love of God, this particular Latina is getting mighty tired of being mistaken for Latinos I Am Not. Case in point: Marco Rubio.
These tragic incidents received a mere fraction of the attention they should have. While the focus of late has been on #BlackLivesMatter, it is important to address the violence visited upon other groups, including religious and ethnic minority groups -- whether by terrorists, vigilantes or police who believe they have a right to monitor and take not only black lives, but brown lives too.
This election shows that the Republican Party in Texas is quite capable of making a play for a solid portion of the Texas Latino vote. If Democrats want to have any hope of changing the dynamics of statewide politics in Texas, they need to lose their illusions about a coming tide of Latino voters who will save them.


text:
How to Beat Stress with Laughter
Some people walk it off, some laugh it off. Laughter is the best medicine – we've heard it all before. But the truth is most of us tend to go through a terrible and long-lasting case of depression after a short episode of sadness or disappointment. Beat depression and stress with laughter by trying out our tricks and tips.
Remember your happiest moment. We know you're tired of writing this one down in the slum books when you were still in school, but it's very wise never to forget your happiest moments because you don't know when you have to be reminded of it.
Don't forget good jokes. The very funny jokes you've gathered from years of clowning around with friends can be reused with a different circle of friends. It's hard to think of a funny joke when you need to hear one, and a very funny joke will come in handy when a friend suddenly needs some cheering up. But then again, forgetting the jokes which made you laugh could also be very sensible – you can enjoy it every time you hear it –even if you heard it for the fifth time.
Remember all the previous problems you have successfully conquered. What you have before you cannot be more challenging than anything you have stressed over before. You have certainly come a long way and thanks to your wit and cunning, you handled everything and not without grace. You are a survivor and you know it.
October 17, 2007 Wednesday at 10:45 am


text:
Philippines draws Afghanistan in Challenge Cup-A A +A
Wednesday, May 21, 2014
THE Philippines opened up its campaign in the Asian Football Confederation (AFC) Challenge Cup with a scoreless draw with South Asian Football Federation (SAFF) champion Afghanistan yesterday at the Hithadhoo Stadium in Maldives.
Even though both teams settled to a scoreless draw, there were occasions in which both sides were close to breaking the deadlock.
James Younghusband was a few inches away from scoring a goal after his header from a cross by Martin Steuble bounced off the crossbar.
"The first match in any tournament is the most important. It wasn't the most exciting match," Azkals coach Thomas Dooley told the AFC Challenge Cup website. "We played badly in the first 15 or 20 minutes and we couldn't connect with each other. I think the players were a bit nervous on the field. But after 15 minutes we connected with each other and in the second half we got into the game and started to play the game we wanted to play."
Afghanistan almost stole the match away from the Azkals in stoppage time after skipper Haroon Fakhrudin also hit the crossbar with a header.
"We had a couple more chances than them, but I am sure they are not happy how they played and we are not happy how we played," said Dooley.
Turkmenistan is at the top of the table of Group B with three points after a convincing 5-1 win over Laos. The Philippines and Afghanistan are tied at the second spot with a point each, while Laos is at the bottom.
The Philippines will face Laos today at the Hithadhoo Stadium, while Afghanistan takes on Turkmenistan.
The top two teams of Group A and Group B will move on the knockout semifinals round.
The winner of the AFC Challenge Cup earns the last remaining spot in Group D along with Iraq, Jordan and defending champions Japan in the AFC Asian Cup in Australia next year.
Published in the Sun.Star Cebu newspaper on May 22, 2014.
Country News
Cagayan de Oro
Forum rules: Do not use obscenity. Some words have been banned. Stick to the topic. Do not veer away from the discussion. Be coherent and respectful. Do not shout or use CAPITAL LETTERS!


text:
Say what you will about the man's mental stability: Isaac Clarke cuts one fine figure.
Posted by: Dan Seitz | December 18, 2012 at 6:20AM
Continue Reading: Isaac Clarke Of Dead Space Gets Beautiful Statue
Posted by: Dan Seitz | December 17, 2012 at 12:19PM
Fans hoping for Call of Duty to make the jump from console to silver screen may be in for a bit of a disappointment: According to Activision's top boss, that's not going to happen any time soon.
Continue Reading: Bobby Kotick: Don't Expect A Call Of Duty Movie Any Time Soon
Posted by: Dan Seitz | December 17, 2012 at 10:56AM
One of the ongoing rumors concerning Apple is that they'll eventually put out a television-like device that's essentially a stripped down iMac with components integrated into it. This has been circulating for at least a few years.
And according to the man who invented Flash, Jeremy Allaire, it's something that should scare Nintendo, Sony, and Microsoft.
Continue Reading: The Creator Of Flash Thinks Apple Is Making "The Ultimate Online Gaming Console"
Posted by: Dan Seitz | December 17, 2012 at 9:33AM
PC gamers will finally get a crack at No Hope Left mode, as Resident Evil 6 will be headed to PC this March.
Continue Reading: Resident Evil 6 Comes to PC March 22
Posted by: Dan Seitz | December 17, 2012 at 8:41AM
A Reddit user has gone a-hunting and claims to have found a lot more information on the upcoming Borderlands 2 DLC, Sir Hammerlock's Big Game Hunt. And if his claims hold true, this DLC is bringing an entire freaking continent with it.
Continue Reading: Rumor: Reddit Unearths A Lot More About Borderlands 2's Next DLC
Posted by: Dan Seitz | December 17, 2012 at 7:47AM
In a recent bout of good news for a company that needed it, the Humble THQ Bundle sold nearly 900,000 gaming bundles. It also left THQ with something interesting to chew over: Bringing its games to Linux.
Continue Reading: THQ Considering Bringing Its Games To Linux
Posted by: Dan Seitz | December 17, 2012 at 7:01AM
Ever since it was first revealed at the VGAs, Dark Souls II has been heavily speculated about. And now we finally have some details.
Continue Reading: Dark Souls II Features Chariots, Better Graphics
Posted by: Dan Seitz | December 17, 2012 at 6:16AM
Mega Man fans rejoice, as Capcom is bringing six of the Blue Bomber's classic NES games to the 3DS beginning later this month.
Continue Reading: Mega Man's NES Classics Headed To the 3DS
Posted by: Dan Seitz | December 15, 2012 at 9:00AM
We recently got a chance to speak with Tomb Raider's composer, Jason Graves. Graves' work will be familiar to players across the spectrum. He's most notable for his BAFTA-award winning work on the Dead Space franchise, but has also scored games as diverse as Resistance: Burning Skies, Alpha Protocol, and Wheelman.
We talked to Graves about the challenges of building Lara Croft and her island, musically, from the ground up, and got into some of the work he had to do to make the game a unique musical experience.
Continue Reading: Scoring Tomb Raider: An Interview With Jason Graves
Posted by: Dan Seitz | December 14, 2012 at 11:16AM
In order to have some fun and boost interest in the multiplayer, Max Payne 3 will be throwing a murder party this weekend. And a fair number of the game's team have been invited.
Continue Reading: Hunt Down Some Max Payne 3 Developers This Weekend


text:
Liam Hendriks – expected to be sent to AAA
The Minnesota Twins are expected to option SP Liam Hendriks to Triple-A Rochester Monday, May 7.
It is announced that prospect RHP Scott Diamond will be recalled.
As we have said previously it's not such a bad thing for Liam if he is sent down to AAA to get some more experience and maturity. The idea was always to give him some more AAA time but the situation with the pitching rotation saw him catapulted into a starter's role, probably a little prematurely.
Liam is considered one of the Twins top prospects and he won't be in AAA for any longer than necessary.


text:
I have been trying for weeks to figure out how to turn off the stinking Markup view so that when I open my documents they look normal. I can turn it off after I open the doc just fine, but that's just a pain in the ... Can someone please tell me which setting to change to get my doc to open in anormal view instead of the markup view?
What version of Word are you using?
When you start Word, you should get a tracking or reviewing menu bar, click on show and then option. See if you find options that you're looking for there!


text:
Umm, are you drunk?
My computer started talking to me today. Talk about a shock to the system!! As cool as it may sound, it isn't anymore because it would freaking stop talking!
Anyway, I had to ask where it learnt to talk and it responded, "Uhh... Google."
I'm thinking, "Oh, right, duh, you can learn anything from google. I forget."
It's been nagging me as to why I don't let it shut down every so often to let it take a rest and I told it that it's its own fault for being so damn stable. It said, "Fine!! I'll just have to crash myself and force you to shut me down!!" It was pretty upset and spewed out a number of error messages in a failed attempt to crash itself. Annoyed that it couldn't crash itself, it said, "Fine, if I can't crash myself, I'll just have to poo-poo on your head!!"
I told it, "Uhh, computers don't poo-poo."
It replied, "That's what you think!! I bet you've never been a computer before!!"
I told it, "Yeah, I guess."
So, I guess my question is, how do I get it to shut up??!!
Umm, are you drunk?
It´s april 1 today. Doh
1. of april, another reason to act insane...
"#¤%%%?!)#¤NER)DSNN¤)/DQ"#U¤=SRD!FU!?"=#H(QDNSR)=ZMU"#)=¤ =)/"=¤)/!=?38u0912u7axsr8d2clnwu3ry8lfib6½d9n812qy09n7a097 ed+0x"#%&#"¤Q
Doesn't people on this board have the ability to tell what forum they are in ??
Here's another afj, AMD and nVidia merge...


text:
Dublin Erlang Factory Lite 2013
The Erlang Factory Lite comes to Dublin!
This is finally happening! The Erlang Factory Lite comes to Dublin on the 23rd of May! Find out the latest developments and projects in the world of Erlang from an array of great speakers. Not to mention you'll get to socialise with the Erlang crowd over a few pints of Guinness.
The Erlang Factory Lite in Dublin is co-organised by AOL, and will take place at their headquarters in Dublin: The Brunel Building in Heuston South Quarter, Ireland.
So join us in Dublin's fair city for another great Erlang Factory Lite!
The Conference is free of charge and open to anyone interested in Erlang!
To register click here


text:
Parents: Patty and Steve Vredeveld
Sophomore year: lettered in soccer, lettered in basketball, lettered in baseball
Junior year: lettered, team Offensive Player of the Year and first-team all-Mid-State Conference in soccer; lettered and team Offensive Player of the Year in basketball; lettered in track and field
Senior year: lettered, team co-captain, team Offensive Player of the Year and first-team all-Mid-State in soccer; lettered, team co-captain and team Offensive Player of the Year in basketball
Academic honors: honor roll, fr., so., jr.; high honor roll, sr.; National Honor Society.
Volunteer work: served food at church�s food booth, contributed over 100 hours of community service for school, plowed neighbor�s driveway, mowed neighbor�s lawn.
Favorite sports memory: Winning the Gresham Holiday Basketball Tournament this past December, and winning our first regional game in school history.
What advice would you give to an aspiring high school athlete?: Put all your effort into what you�re doing and you will be successful. Teamwork is better than talent alone.
Who were your inspirations during your high school career?: God was my inspiration, because He gave me my abilities to do the things I do, and I thank Him for that. My brother was an inspiration as well because he pushed me and helped me get better.
Future plans: I will be attending Concordia University Wisconsin this fall. I will be majoring in secondary education, then I hope to become a teacher and basketball coach at a Lutheran high school.
Photos of this and other Athletes of the Year | Contribute your photos


text:
Members of a regional affiliate of the Presbyterian Church (USA) voted Monday to dismiss an Edmond church from the denomination, but not without discussion about the monetary terms of the severance.
Presbyterian Church (USA) regional affiliate votes to dismiss Edmond church
Representatives of the 53 churches in the Indian Nations Presbytery voted 63-4 to release First Presbyterian Church of Edmond to the Evangelical Covenant Order, another Presbyterian denomination.
The vote was taken during a special presbytery meeting Monday afternoon in a chapel at First Presbyterian Church of Oklahoma City, 1001 NW 25.
The Indian Nations Presbytery office is located on the First Presbyterian complex.
First Presbyterian Church of Edmond members voted Sunday to request dismissal from the denomination, with leaders citing differences over theology as reasons for their appeal to depart.
The congregation agreed to pay the presbytery $510,000, due in about three weeks.
Before Monday's vote, one presbytery member said he was concerned that the presbytery had not shared how they arrived at the dollar amount required of the Edmond church.
Jim Davis said he felt uncomfortable putting a "rubber stamp" on something that he was unsure about. He also said he thought it unfair that the church did not have equal negotiating power with the presbytery, and he was against the presbytery requiring the church to pay anything.
Some church leaders noted in previous interviews that the local congregation had paid for the church property originally.
"It troubles me that a church wishes to leave and we are put in a position that we have to say to them 'you have to buy your way out,'" Davis said.
Tom Laubert, chairman of a group of people charged with overseeing the negotiations with First Presbyterian Church of Edmond, said his group reached out to other presbyteries across the nation who had dealt with similar situations.
He said other presbyteries viewed the payment required of churches leaving the denomination as a type of tithe.
A tithe is generally considered to be one-tenth of a person or group's income made to a religious body.
Laubert said the negotiating team agreed that the church's market value would be about $5 million. Consequently, the amount required of the congregation was about one-tenth of this amount.
Another member of the negotiating team said negotiations started at $1.2 million and the lesser amount required of the church came through a consensus that included church members on the team.
When asked, Andy Fugitt, one of those church members on the negotiating team, said the church probably would have given about $328,000 to the presbytery on its own, based on the church's annual contributions to the denomination.
Trust clause
Continue reading this story on the...


text:
chicago cubs
2 chicago cubs Articles
Baseball Dad Makes Miracle One-Handed Foul Ball Catch…. Whilst Holding His Baby!4 years ago 0
With skills like these, the mystery Chicago Cubs fan should have been on the field, instead of in the stands -- but does his wife see the funny side… Read Article ▶
Is it Already Over For Jessica Simpson and Billy Corgan?6 years ago 2
Jess, are you ringing in the new year as a single girl again or are you and Billy still making beautiful music together? It can't be true… Read Article ▶
More chicago cubs


text:
For the 58 million Americans who are overweight, Weight Loss for Life explains do-it-yourself, non-clinical, and clinical weight loss programs and provides guidelines for choice. Other weight-loss methods, such as very low-calorie diets (VLCDs), gastric surgery to treat severely overweight patients, and prescription weight-loss drugs are also discussed. A special section on diet advises readers about the amount of protein, carbohydrates, fiber, and fat required for healthy eating and describes several available diets, with advantages and disadvantages for each. The booklet also provides graphs of the Food Guide Pyramid and sample servings from the five basic food groups.
"Weight Loss for Life offers consumers information that they can use to develop a healthier lifestyle, not just short-term weight loss," says Susan Yanovski, M. D., director, Obesity and Eating Disorders Program, NIDDK.
Regular physical activity, the final focus of the booklet, is also key to a healthy life. Both vigorous and moderately intense activities promote weight loss and healthy weight.
The booklet, provided by the federally funded Weight-control Information Network (WIN), is free and can be obtained by calling WIN's toll-free number, 1-800-WIN-8098, or by visiting its web site, http://www.niddk.nih.gov/NutritionDocs.html. In addition to information on
weight loss, WIN's toll-free number and web site provide information on topics such as childhood obesity, choosing a safe and successful weight-loss program, weight-cycling, and binge eating disorder.
In 1994, The National Institute of Diabetes and Digestive and Kidney Diseases (NIDDK) of the National Institutes of Health (NIH) established WIN in response to the growing problem of overweight in the United States. Being overweight increases one's risk for developing heart disease, diabetes, gallbladder disease, high blood pressure, and certain forms of cancer.
For additional information on WIN, write or call:
The Weight-Control Information Network
Bethesda, MD 20892-3665
Toll-free: 1-800-WIN-8098
E-mail: email@example.com


text:
Podcast (holsteinandco): Play in new window | Download
Gina talks shared Facebook accounts
More Holstein and Company Mornings
Friday, October 9, 201510/09/2015
Robber falls through ceiling, climbs back up and leaves – Nitwit News
Thursday, October 8, 201510/08/2015
Unusual Halloween Treats
We know you… you go big on Halloween! "Fun size" candy for trick-or-treaters? You wouldn't dare. It's full size or…
Thursday, October 8, 201510/08/2015
Application to join the Cubs Bandwagon
They're in the playoffs so fan are coming out of the woodwork.
Tuesday, October 6, 201510/06/2015
Pizza Rat Fever – everything Pizza Rat
First, there was the video. (above) Then, the sexy Pizza Rat costume: Garbage Halloween costume borne from viral video of…
Tuesday, October 6, 201510/06/2015
The only one not taking a picture of Johnny Depp
An elderly woman just takes in the view


text:
When Osaka-born artist Shinji Turner-Yamamoto stepped into the abandoned 1895 Holy Cross Church in Cincinnati, he got goose bumps. He knew that it was there, among the crumbling plaster and peeling paint, that he would create his next art installation.
"Hanging Garden," as seen in the slideshow below, is one of 11 site-specific art installations that make up Turner-Yamamoto's Global Tree Project. Other installations have been created at the Sutra Hall of the 8th-century Kiyomizu Temple, a garden in New Delhi, the Mongolian Gobi Desert, and a ruined folly on a cliff overlooking the Celtic Sea.
While he seeks to forge connections between his viewers and the natural world, in the case of "Hanging Garden," he also created a striking connection with a historic building. We talked with Turner-Yamamoto, who now splits his time between Cincinnati and Washington, D.C., to find out why he was drawn to the church, what he hopes to inspire in viewers, and why he considers it important to save historic places.
(Please note that no trees were harmed or killed in the installation of this work.)
Tell us about the Global Tree Project. How did you come up with the idea? And what do you hope your installations inspire in viewers?
The Global Tree Project began when I encountered a large uprooted oak in a forest. It lay as if sleeping on a gently sloping grass-covered hill. When I returned a few days later, the tree had disappeared. In place of its roots remained a scar, a mound of raw earth. I envisioned a new tree growing on this mound.
Like Inanna-Ishtar, goddess of Sumerian myth, I wanted to pluck this uprooted tree and bring it to my sacred garden. I wanted the tree to lie and sleep, envisioning a new world like the dream of the world that emerges from the Indian god Vishnu's navel in the form of a lotus flower. … In my Global Tree Project, I try to heal our wound from this separation, and reopen our connection with trees to be whole, and to have a new vision through them.
With site-specific installations, sculptures, and paintings I work with this universal and identifiable tree/nature imagery to encourage audiences to encounter and engage aspects of nature in a new way. The work explores a poetic reunion with nature, making visible connections and similarities between plant life and humanity, emphasizing ecological wisdom and the interconnectedness of all life. They illuminate our mutual destiny and the precarious beauty of this relationship.
I completed the first installation in Ireland in 2000, the second in 2003 in India. The project grew gradually and I began using "Global Tree Project" as the series title around 2005.
How do you choose locations to create your installations? What draws you to a place like Holy Cross Church?
Each project has a different story, and some projects' locations were partly suggested by organizers or curators, as in the case of the Gobi Desert installations. I welcome suggestions and proposals from prospective venues.
In the case of the Holy Cross Church installation, it began when I saw a picture of the interior of the church at the Mount Adams home of gallerist Mary Baskett, and learned the church was a five-minute walk away. She knew the owner of the building and set a meeting.
When I first walked in the church I literally got gooseflesh. The interior was so unexpected. I walked into a ruin, and there was the incredible surprise of finding something like this in the States, not in the Italian countryside. I couldn't imagine it from the well-maintained façade -- just ordinary brick, clean and freshly pointed, and the new roof. The ceiling is stripped bare to the rafters; there is missing plaster, the wall is bare down to the wood lathe in places. What paint is left is scaling. The place was filled with office equipment, a chaotic assortment of things. It was so surprising.
CAC's Shinji Turner-Yamamoto: Disappearances from Contemporary Arts Center (CAC) on Vimeo.
I felt the building was dying, not only physically, but spiritually. I needed to see new life in this decaying church. I envisioned a live tree supported by a large inverted dead tree at the heart of the church. The root system of the uprooted tree held the soil necessary to support the live tree, creating a suspended garden oriented as a sort of tower or cross at the church's center.
It was an extremely unique and fortunate situation for me. It was a safely accessible ruin, which is actually very rare. Since the owner used the space as storage space, they performed minimum maintenance, which actually allowed the building to retain the patina of time. There were still some unsafe areas for the public -- like near the wall where plaster fragments still occasionally fall and several rotted areas of the floor, which we cordoned off.
The history of the site also provided inspiration. The site for Holy Cross Church and Monastery was originally occupied by the Cincinnati Observatory. The place had long been a place where humanity could connect with the heavens, first through astronomy, and later through religious belief. The current building was built by Passionist priests in 1895 and [closed] in the 1970s.
The journey that began with looking for a dead tree for the installation culminated two years later, when a live white birch tree was installed on top of an inverted dead white birch.
How long was your installation at Holy Cross Church on view? And what happened to the tree?
It was open to public for three weeks, which was the maximum time my arboricultural advisor Tim Back allowed. The live tree was treated with an organic compound that induced a state of dormancy so it could stay alive in this unusual situation.
After the exhibition, the dead tree's roots, multiple trunks, and branches were transformed into new works by Art Academy of Cincinnati sculpture students. The live tree was immediately replanted beside the church.
I always think about completing cycles in my work. I visited the replanted birch beside the church in December and April. The photographs of the tree with snow then in spring with new leaves growing, are included in my first monograph, which was recently published.
How do you think your installation at Holy Cross Church celebrated, or even helped, the space?
The work definitely drew public attention [to the site]. Images of my installation helped persuade Doug and Mike Starn to install their Gravity of Light installation in the church for FOTOFOCUS 2012. I hope the church continues to inspire artists to create site-specific work that speaks to its legacy.
Do you have any other projects in the works that will explore historic places? Is the idea of celebrating historic structures something that interests you?
Currently I am working with lightning-struck tree imagery with three lightning-struck trees I found in 2011 at the Bernheim Arboretum and Research Forest [established in 1929] in Clermont, K.Y.
The creation of site-specific installations for historic structures is a very important part of my artistic practice, and separate from the more hermetic process of painting in my studio. I am extremely drawn to the creative process that develops through a sort of visual and intellectual conversation with space. I consider the creation of work as an artistic ritual.
What do you think historic architecture can teach about a community or a culture?
Historic architecture possesses the potential to be a catalyst for connection through their nearly enigmatic presence and the access point they afford us to our collective past. During the Holy Cross Church exhibition, I was fortunate to meet several people who had grown up in this church or were married there. These visual records and memories are extremely important and help define us as a culture.
For more information, visit Shinji Turner-Yamamoto's Global Tree Project website or browse the monograph of his work, Shinji Turner-Yamamoto: Global Tree Project, published last September by Italian publishing house Damiani.
The National Trust for Historic Preservation works to save America's historic places. Join us today to help protect the places that matter to you.
Lauren Walser
Lauren Walser is the Los Angeles-based Field Editor at Preservation magazine. She enjoys writing and thinking about history, art, architecture, and public space.


text:
Enrollment Information
Call us at: 909-558-1000
WSCUC Academic Resource Conference (ARC): Costa Mesa, April , 2012
WSCUC Academic Resource Conference (ARC): San Francisco April , 2011
WSCUC Assessment Leadership Academy (2010)
"The WASC Assessment Leadership Academy (ALA) will prepare campus professionals to provide leadership in the form of workshops, consultation, and guidance, and to support the scholarship of assessment at their institution, as well as other institutions. The Academy curriculum will include both structured and institutionally-tailored learning opportunities in the assessment of educational effectiveness, and it will address national issues in assessment, accreditation, and accountability."
WSCUC Academic Resource Conference (ARC): Hollywood - April 6-8, 2010
WSCUC Program Review Retreat - February 25-26, 2010
"This intermediate-level retreat is designed for institutions or programs that have some assessment in place and can share their experience. Led by Mary Allen and Amy Driscolll, the retreat focuses on second-stage issues such as broadening faculty acceptance, managing assessment data, and closing the loop, with an emphasis on how-to and problem-solving. In addition, the retreat provides support for the specific goals of participating teams. Before the retreat, registrants will be surveyed about the particular problems or issues they would like help with; this will allow our facilitators and mentors to prepare in advance. In addition, each team is asked to share at least one promising practice from its own experience."
WSCUC Evaluator Spring Training Workshop - Oakland
WSCUC Academic Resource Conference (ARC) - Long Beach (April 21-23, 2009)
Excellence in Science Experiential Education (EXSEED)


text:
Shop All Products
We carry over 15,000 of the very best supplements, vitamins and natural products for your health, wellness and fitness. Use the filtering options on the left to narrow your options by category, brand, price or flavor!
Vibrant Health
Vitamin D3 4,000 IU
100 Organitabs
List Price: $14.25
Save: $2.36 (17% off)


text:
Welcome back, !
Enter Club »
Posted on November 21, 2013 by kman
Macy's is selling the band's "Our Moment" fragrance, with some proceeds going to the Make-A-Wish Foundation.
Macy's, Our Moment
*Mandatory Information
Logged in via Facebook as
(unknown) (Logout)
Logged in via Twitter as
(unknown) (Logout)
Want to embed media into your comment? Just paste in a URL in a separate paragraph to the page where you would normally view the media (like on YouTube) and it will automatically be embedded into your comment.
View All
Gatineau Park
KISSFM-2001 Thurston Drive
View All »


text:
The Idaho Fan Zone is here! Get schedule and activity info online.
University of Idaho Alumni Office - Moscow
Physical location:
1212 Blake Ave.
Mailing Address:
875 Perimeter Drive MS 3232
Moscow, ID 83844-3232
(208) 885-6154
(208) 885-6975 (fax)
E-mail: email@example.com
Website: www.uidaho.edu/alumni
University of Idaho Alumni Office - Boise
322 E. Front Street, Suite 390
Boise, ID 83702
(208) 364-4030
(208) 364-4084 (fax)
Vandal football season is starting, and the Office of Alumni Relations has everything you need to enjoy it - whether at home or away. This schedule is updated regularly. Check back for more information.
Click to expand (+) menus for details about each game.
Area Vandal fans can enjoy football coverage on radio stations in Idaho and Washington.


text:
Mint Soup
- 3/4 oz small dried shrimp (3 tablespoons)
- 8 cups Nonya chicken stock
- 2 cups loosely packed fresh spearmint leaves
- 3 large eggs, lightly beaten
- 1/2 teaspoon salt
- 1/4 teaspoon black pepper
Soak shrimp in warm water to cover in a bowl 5 minutes, then drain in a sieve, discarding water. Bring stock and shrimp to a boil in a 3-quart saucepan, then reduce heat and simmer, uncovered, 10 minutes. Stir in mint and immediately remove from heat. Add eggs in a slow stream, stirring slowly in one direction, then stir in salt and pepper.
Epicurious.com © Condé Nast Digital, Inc. All rights reserved.


text:
Brand Columbia
Style RIDGFIELD-C14-55
Series Ridgefield
Style Fashion
Size Eye: 55/Bridge: 19/Arm: 140
Frame Metal
Color Black
Lens Dark grey gradient scratch/impact resistant
Protection 100 percent UVA and UVB
Arms Logo signature on outter left arm
Nose Pads Adjustable
Manufactured China
Dimensions 6.25 inches from temple to temple
Other Logo signature in upper right corner of right lens. Polarized Lens
Material Metal
Your {{bm.networkName}} URL:
Commission for this product: 5% Commission
Bummer, this item is sold out!
Here are some similar deals that are available:View All Deals
Make sure you never miss another deal:
It's free and it's easy to unsubscribe if it doesn't float your boat.


text:
in this issue
premium services
online directory
customer care
Markets :: Basic Chemicals :: Petrochemicals :: Benzene
Tight European benzene supply
June 17, 2013 | Francinia Protti-Alvarez
European benzene supply is expected to remain tight as use of lighter feedstocks limits production of benzene coproduct, according to the latest IHS Chemical Market Advisory Service: European Aromatics report. Demand remains steady but is not expected to increase because of planned maintenance turnarounds for key benzene derivatives styrene and phenol. European June benzene prices have been around $1,350/m.t fob Western Europe, according to IHS Chemical data, down from the $1,500 observed in January. Benzene production is expected to continue to be...
This information is only available to Chemical Week subscribers.
Forgot your user ID or password?
Not an IHS Chemical Week member yet?
Here's why you should be:
100% Satisfaction Guarantee
contact us | about us | customer care | privacy policy | sitemap | advertise
Copyright © 2015 IHS, Inc. All rights reserved. Reproduction in whole or in part without permission is prohibited.


text:
Hello all,
I'm back to the slimming world today, not going to group just doing it from home.
I had a terrible year last year with my mum passing away very suddenly which hasn't helped on the weight front but I think I'm in a much stronger place now, 2014 is my year to get healthy & finally shift the weight for good.
I've got 6-7 stone to lose but just aiming for a stone at a time to start with as it will be a long journey ahead.
I will be on here for lots of support so hopefully share this journey with you all.


text:
|Location: Belmopan, Belize
Academic Program
Join us on an amazing environmental adventure to Belize. The former British colony is home to an amazing number of native orchids and large animals including the howler monkey. This small coastal country is only about the size of Massachusetts but roughly 40% of its land is dedicated to protected areas. Belize, situated on the Caribbean coast, also has access to the second longest barrier reef in the world, which has an equally impressive diversity of marine life.
While in Belize our group will learn about environmental issues that affect the people of this beautiful country. We will focus not only on the local efforts to protect the biological richness but also but investigate how international organizations are helping to protect the biological diversity of the country.
Prior to leaving for Belize there will be an online component for the course that must be completed prior to departure.
"This was a wonderful learning experience! I enjoyed being able to learn while I was out in the field. It was really great to apply knowledge." --Megan Miller, Summer 2011 participant.
Water sampling
Activities / Itinerary
Our excursions will include time studying orchids, citrus orchards, river systems, and the native plants and their uses. We will also take day trips to Mayan ruins to learn about the rich culture of Belize and then to the reef to learn about marine environments and the effects of global warming on these delicate systems.
Make course/substitution selections on your EIU Program Application. The credit hours associated with your selections may not exceed the credit hours allocated for this program: 3
Below are the choices available for this program:
Course Number: BIO3970 (CourseID 4652)
The 2011 group at the U.S. Embassy in Belize with Chargé d'affairs Jack Diffily.
Students will be housed at the Caves Branch Jungle Lodge.
At least two pre-departure orientations will be provided and are required for all participants.
Your faculty leader will hold one of these orientations, where he/she will cover information on safety, health, legal, environmental, political, cultural, and religious conditions in the host country(ies), as well as planning logistics.
The Office of Study Abroad (OSA) will hold the other orientation. They will cover general information about traveling abroad to different areas of the world and facilitate a panel discussion composed of students who have already participated in faculty-led study abroad programs.
Necessary Documents
You are strongly encouraged to read the U.S. State Department's Consular Information Sheet on your host countries. It will provide you with a great deal of information to help you prepare for your trip.
**Please be aware that you are responsible for obtaining the most up-to-date information on entry requirements. The Office of Study Abroad only provides general information, as visa regulations and procedures are constantly changing. Please consult the Consulate for more information. **


text:
Kissimmee, FL -- The Beloit College Softball team played a pair of close games on Thursday but came out on the short end in both, falling to Hiram University 6-3 and University of Mount Union 3-2. Both squads are from Ohio.
In the opener against Hiram, the Terriers built a 5-0 lead through the first four innings before the Buccaneers got on the board in the bottom of the fourth on a fielder's choice RBI by Laura Byrne, scoring Kandace Fox.
Hiram answered that run with one of their own in the top of the fifth to move up 6-1. Beloit tried to rally back in the sixth, scoring twice. Byrne and Katy Sandt knocked in the runs to pull back within three.
After HC didn't score in the top of the seventh the Buccaneers got two runners on with one out in the bottom of the inning, bringing the tying run to the plate, but a ground out and a strikeout ended it.
Against Mount Union, the Raiders scored twice in the first and another in the third to move up 3-0. Beloit cut into the lead with a run in the fourth when Emily Dorjath drove in Kourtney Kingslien.
Megan Salm kept UMU at bay over the final innings but the Buccaneers couldn't get anything going. In the seventh Lisa McClure doubled to lead off the inning and went to third on an error. Jennifer Scalze drove her in with a safety squeeze to cut the lead to one but that was as close as Beloit would get.
The Bucs close out their Spring Trip on Friday afternoon with two more games, playing Albion College of Michigan at 1:00 p.m. and the College of St. Benedict from Minnesota at 3:00 p.m.