Pages

Wednesday, March 27, 2013

Game Not Fame – Lo Fi Performance Gallery Mural

Game Not Fame – Lo Fi Performance Gallery MuralGame Not Fame – Lo Fi Performance Gallery MuralGame Not Fame – Lo Fi Performance Gallery MuralGame Not Fame – Lo Fi Performance Gallery Mural

Wow has it been six months! Time for teeth cleaning and a stroll down Eastlake Avenue to check out the murals outside of the Lo Fi Performance Gallery. This time the mural is filled with all sorts of imagery that I’m not sure I understand but like: butterflies, flowers, a Cyclops KEG colonel, a Burner King logo, and many little creatures. Looks like this mural might be the work of gamenotfame.com. If you stand back from the mural you can make out “Game Not Fame” – which is what I’m calling it. Best of all (and perhaps not connected to the mural) is the golden-eyed owl directly next to the sidewalk on Eastlake. Here’s what was there a year ago today: Lo Fi Performance Gallery – Mural.

Game Not Fame – Lo Fi Performance Gallery MuralGame Not Fame – Lo Fi Performance Gallery MuralGame Not Fame – Lo Fi Performance Gallery Mural

Game Not Fame – Lo Fi Performance Gallery MuralGame Not Fame – Lo Fi Performance Gallery Mural

Working with Amazon S3 Using the Boto Library

Example of Working with Python Modules Described in this Post

Example of Working with Python Modules Described in this Post

Overview

The goal of this post is to help you get familiar with the boto library as an interface to Amazon Web Services and to do that by trying some simple tasks using Amazon S3. (In case you haven't made the connection yet, boto refers to a type of dolphin native to the Amazon and referred to as Boto in Portuguese.)

Of course if you don't care about rolling your own, but want to use Python, you can use the AWS SDK for Python which has support for S3. With that SDK you can use commands like this "aws s3 list-objects --bucket bucketname". Read on if you are less interested in a command line interface - which the AWS SDK for Python is - and want to see how to create your own Python scripts for working with Amazon S3.

In terms of working with Amazon S3, I was curious to see how I could use Amazon S3 seemlessly from a command shell, manipulating buckets and objects. I was inspired by trying the Google Cloud Storage gsutil tool.

One thing you might note is that the AWS site for Python points to the AWS site for AWS SDK for Python (Boto) which tells you basically to install the boto library assuming you already have Python. In other words, this library is not like the Java or .NET libraries that support AWS services. Even the URL for the docs (boto.readthedocs.org) tells you that something is different since it is not hosted on the AWS domain: docs.aws.amazon.com.

 

Prerequisites Before Running the Modules

1. Python installed. I run Python 2.6 on an Amazon Linux AMI. Boto currently requires greater than Python 2.5. In particular, I followed the setup instructions here: http://www.pip-installer.org/en/latest/installing.html

$ curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py
$ [sudo] python get-pip.py
$ pip install boto

2. AWS Access Key ID and Secret Access Key to access the buckets you want to work with.

  • If you are the account owner, great, nothing more to do.
  • If you are an IAM user, work with the account owner to get the keys and access to the bucket.

3. Python configured to use the Access Key ID and Secret Access Key as suggested here: http://boto.readthedocs.org/en/latest/boto_config_tut.html.

4. Familiarity with the Python interpreter. I work in and out of the interpreter which I find useful when creating a module. For more information on the interpreter, see Chapter 2. Using the Python Interpreter. One very helpful command you can use in the interpreter is the build-in function dir()which uncovers which names a module defines, basically which properties and methods you can use.

5. An editor. Any editor will do. I use VIM since I developed these modules on Linux.

 

Usage Notes

Note 1 The very first issue I ran into was a bucket casing issue. If you read the bucket naming guidelines, it states the uppercase characters are okay only for buckets created in the US Standard Region. But even then, if you try to access the bucket using a virtual hosted-style request, e.g. http://MyAWSBucket.s3.amazonaws.com, you will get a bucket not found error. If you use the path style request, e.g. http://s3.amazonaws.com/MyAWSBucket/ then it will work.

To access mixed case named buckets you have to tell the boto library to do so as described here. Boto by default uses virtual hosted-style requests. You can see this by setting the debug level to 2 as described in the Config docs. Short answer is: use lowercased bucket names.

Note 2 The logic for dealing with input arguments was intentionally kept minimal in the modules shown here. In the context of a module, the __name__ global variable is equal to the name of the module. When a module is executed as a script, __name__ is set to __main__. So the common strategy is to check the value of __name__ and if it is equal to __main__ then you know you are dealing with a scripting situation and you can check for input arguments. For more information about modules, see the Python documentation, Chapter 6. Modules. This Artima Developer article provides some different ways of dealing with arguments that are interesting.

Note 3 Some of the modules here show code with fixed parameters (e.g., bucket name) and are not as interesting as a module that takes input arguments like bucket name. This post shows two types of modules, the first type is illustrative and has hardcoded parameters. The second type of module can be takes input arguments.

Note 4 To make a module more useful, you can make the module executable so you don't have to type "python module.py" to run it. Instead you can type "./module.py". Make the module executable by doing the following:

  • Put #!/usr/bin/env python as the first line in the module.
  • Change the script to executable, e.g. chmod +x s3-lb.py

Note 5 You can run modules in the interpreter as well by importing them and then passing in arguments. For example, you can run modules in the interpreter like so:

>>>import s3_hb, s3_lb
>>>s3_lb.main('')
>>>s3_hb.main('mybucketname')

where s3_hb and s3_lb are modules defined in s3_hb.py and s3_lb.py, respectively. s3_lb.py takes an optional argument. s3_hb.py has one required argument.

If the module named in the import doesn't have a check for __name__ the import action seems to run the module at least on first import.

 

Modules

Module summary.

Functionality Module w/ no Arguments Module w/ Arguments
optional in italics
List buckets listbuckets.py s3_lb.py (bucket name filter)
Create bucket
Delete bucket
createdeletebucket.py s3_cb.py (bucket name)
s3_db.py (bucket name)
Head bucket (see if the bucket exists and you have access to it) headbucket.py s3_hb.py (bucket name)
List objects in a bucket listobjects.py s3_lo.py (bucket name, key prefix)
Get objects in a bucket
Put objects in a bucket
getputobject.py s3_go.py (bucket name, key)
s3_po.py (bucket name, file)
Delete an object deleteobject.py s3_do.py (bucket name)
Describe bucket lifecycle lifecycle.py  

 

List Buckets (listbuckets.py)

#!/usr/bin/env python
#list buckets
import boto
conn = boto.connect_s3()
rs = conn.get_all_buckets()
print '%s buckets found.'%len(rs)
for b in rs:
print b.name



List Bucket with Arguments (s3_lb.py)

#!/usr/bin/env python
#list buckets
import sys
import boto.exception

def main(name_fragment):
conn = boto.connect_s3()
try:
rs = conn.get_all_buckets()
for b in rs:
if b.name.find(name_fragment)> -1:
print b.name
except Exception, ex:
print ex.error_message

if __name__ == "__main__":
name_fragment = ''
if len(sys.argv)==2:
name_fragment = sys.argv[1]

main(name_fragment)



 


Create/Delete a Bucket (createdeletebucket.py)

#!/usr/bin/env python
#create and delete bucket in the standard region
import boto
from datetime import datetime

bucket_name = 'auniquebucketname'+datetime.now().isoformat().replace(':','-').lower()
conn = boto.connect_s3()
conn.create_bucket(bucket_name)

print 'Creating a bucket %s '%bucket_name
bucklist = conn.get_all_buckets() #GET Service
for b in bucklist:
if b.name == bucket_name:
print 'Found bucket we created. Creation date = %s'%b.creation_date

print 'Deleting the bucket.'

conn.delete_bucket(bucket_name)



Create a Bucket with Arguments (s3_cb.py)

#!/usr/bin/env python
#create bucket
import sys
import boto.exception

def main(bucket_name):
conn = boto.connect_s3()
try:
conn.create_bucket(bucket_name)
print 'Creating bucket %s '%bucket_name
bucklist = conn.get_all_buckets() #GET Service
for b in bucklist:
if b.name == bucket_name:
print 'Bucket exists. Creation date = %s'%b.creation_date
except Exception, ex:
print ex.error_message

if __name__ == "__main__":
if len(sys.argv)==2:
bucket_name = sys.argv[1].lower()
main(bucket_name)
else:
print 'Specify a bucket name.'
print 'Example: s3_cb.py bucketname'
sys.exit(0)



Delete a Bucket with Arguments (S3_db.py)

#!/usr/bin/env python
#delete bucket
import sys
import boto.exception

def main(bucket_name):
conn = boto.connect_s3()
try:
conn.delete_bucket(bucket_name)
print 'Deleting bucket %s '%bucket_name
if conn.lookup(bucket_name) == None:
print 'Bucket deleted.'
else:
print 'Bucket may not have been been deleted.'
except Exception, ex:
print ex.error_message

if __name__ == "__main__":
if len(sys.argv)==2:
bucket_name = sys.argv[1].lower()
main(bucket_name)
else:
print 'Specify a bucket name.'
print 'Example: s3_db.py bucketname'
sys.exit(0)



 




Head Bucket (headbucket.py)

#!/usr/bin/env python
#head bucket
#determine if a bucket exists and you have permission to access it
import boto
import boto.exception
conn = boto.connect_s3()
try:
buck = conn.get_bucket('travelmarxbucket')
print 'The bucket exists and you can access it.'
except Exception, ex:
#print ex.args

print ex.error_message



Head Bucket with Arguments (s3_hb.py)

#!/usr/bin/env python
#head bucket
import sys
import boto.exception

def main(bucket_name):
conn = boto.connect_s3()
try:
buck = conn.get_bucket(bucket_name)
print 'The bucket exists and you can access it.'
except Exception, ex:
print ex.error_message

if __name__ == "__main__":
if len(sys.argv)==2:
bucket_name = sys.argv[1]
main(bucket_name)

else:
print 'Received %s arguments'%len(sys.argv)
print 'Specify a bucket name.'
print 'Example: s3_hb.py bucketname'

sys.exit(0)



List Object in a Bucket (listobjects.py)

#!/usr/bin/env python
#list objects in a bucket
import boto
conn = boto.connect_s3()
try:
buck = conn.get_bucket('travelmarxbucket')
bucklist = buck.list()
for key in bucklist:
print key.name
except:
print 'Can\'t find the bucket.'



List Objects in a Bucket with Arguments (s3_lo.py)

#!/usr/bin/env python
#list a bucket with optional prefix
import sys
import boto.exception

def main(bucket_name, prefix):
conn = boto.connect_s3()
try:
buck = conn.get_bucket(bucket_name)
bucklist = buck.list(prefix=prefix)
count = 0
for key in bucklist:
print key.name
count +=1
print '%s key(s) found.'%count

except Exception, ex:
print ex.error_message

if __name__ == "__main__":
if len(sys.argv)>=2:
bucket_name = sys.argv[1]
if len(sys.argv)==3:
prefix = sys.argv[2]
else:
prefix = ''
main(bucket_name, prefix)

else:
print 'Specify at least a bucket name and optionally a prefix.'
print 'Example: s3_lo.py bucketname prefix'
sys.exit(0)



Put/Get Object in a Bucket (getputobject.py)

#!/usr/bin/env python
#put and get objects
import boto
from boto.s3.key import Key
conn = boto.connect_s3()
buck = conn.get_bucket('travelmarxbucket')

key = Key(buck)

# add a simple object from a string
key.key = 'testfile.txt'
print 'Putting an object...'
key.set_contents_from_string('This is a test.')

# get the object
print 'Getting an object...'
key.get_contents_as_string()

# create a test file
f = open('testfile-local.txt','w')
f.write('A local file. This is a test.')
f.close()

# add an object (upload the file)
key.key = 'testfile-local.txt'
key.set_contents_from_filename('testfile-local.txt')

# get the object
key.get_contents_to_filename('testfile-local-retrieved.txt')



Get Object in a Bucket with Arguments (s3_go.py)

#!/usr/bin/env python
#get object
import sys
import boto
from boto.s3.key import Key
import boto.exception

def main(bucket_name, key):
conn = boto.connect_s3()
try:
buck = conn.get_bucket(bucket_name)
key_fetch = Key(buck)
key_fetch.key = key
key_fetch.get_contents_to_filename(key)
except Exception, ex:
print ex.error_message

if __name__ == "__main__":
if len(sys.argv)>=3:
bucket_name = sys.argv[1]
key = sys.argv[2]
main(bucket_name, key)

else:
print 'Specify a bucket name and key to fetch.'
print 'Example: s3_go.py bucketname key'
sys.exit(0)



Put Object in a Bucket with Arguments (s3_po.py)

#!/usr/bin/env python
#put object
import os
import sys
import boto
from boto.s3.key import Key
import boto.exception

def main(bucket_name, file):
conn = boto.connect_s3()
try:
buck = conn.get_bucket(bucket_name)
key_upload = Key(buck)
key_upload.key = file
key_upload.set_contents_from_filename(file)
except Exception, ex:
print ex.error_message

if __name__ == "__main__":
if len(sys.argv)>=3:
bucket_name = sys.argv[1]
file= sys.argv[2]
if os.path.isfile(file) == False:
raise Exception('File specified does not exist.')
main(bucket_name, file)

else:
print 'Specify a bucket name and file to upload.'
print 'Example: s3_po.py bucketname file'
sys.exit(0)



Delete an Object in a Bucket (deleteobject.py)

#!/usr/bin/env python
#delete object
import boto
from boto.s3.key import Key
conn = boto.connect_s3()
buck = conn.get_bucket('travelmarxbucket')
key = Key(buck)
key.key = 'testfile.txt'
if key.exists() == True:
key_deleted = key.delete()
if key_deleted.exists() == False:
print 'Key was deleted.'
else:

print 'Key doesn\'t exist'



Delete an Object in a Bucket with Arguments (s3_do.py)

#!/usr/bin/env python
#delete object
import sys
import boto
from boto.s3.key import Key
import boto.exception

def main(bucket_name, key):
conn = boto.connect_s3()
try:
buck = conn.get_bucket(bucket_name)
key_to_delete = Key(buck)
key_to_delete.key = key
if key_to_delete.exists() == True:
key_deleted = key_to_delete.delete()
if key_deleted.exists() == False:
print 'Key was deleted.'
else:
print 'Key doesn\'t exist'

except Exception, ex:
print ex.error_message

if __name__ == "__main__":
if len(sys.argv)>=3:
bucket_name = sys.argv[1]
key= sys.argv[2]
main(bucket_name, key)

else:
print 'Specify a bucket name and key to delete.'
print 'Example: s3_do.py bucketname file'
sys.exit(0)



Get a Bucket Lifecycle (lifecycle.py)

#!/usr/bin/env python
#get bucket lifecycle
import boto
from boto.s3.key import Key
conn = boto.connect_s3()
buck = conn.get_bucket('travelmarxbucket')
print 'Lifeycle for %s'%buck.name
try:
lifecycle = buck.get_lifecycle_config()
for rule in lifecycle:
print '\nID: %(1)s, status %(2)s' % {'1':rule.id, '2':rule.status}
days_expiration = rule.expiration.days if hasattr(rule.expiration, 'days') else 'Not set.'
days_transition = rule.transition.days if hasattr(rule.transition, 'days') else 'Not set.'
print 'Expiration days: %(1)s, Transition: %(2)s' % {'1': days_expiration,'2':days_transition}
except:
print 'Lifecycle not defined.'

Tuesday, March 26, 2013

Do What You Wanna Do – Just Know That You are Not Alone

Do What You Wanna Do – Just Know That You are Not Alone
The Seattle Grrrl Army is behind this poignant mural on Aurora Avenue just north of 41st, a spot popular with prostitutes. The mural lists resources for prostitutes including The Organization of Prostitution Survivors (OPS), Children of the Night, and The Genesis Project.

For background on Aurora, check out The Stranger article The Message on Aurora and this short video describing the history of Aurora Avenue.

Update 2014-10-18: The Art of Survival (video) by Aileen Imperial is a KCTS 9 piece about this mural.

Sunday, March 24, 2013

Kähler Vase and Lungwort


Left: Kähler Vase with Lungwort; Right: Kähler Vase on Hazelnut ShellsKähler Vase with LungwortKähler Vase on Hazelnut Shells
In this POTS and PLANTS episode, we pair Kähler Keramik vase and Pulmonaria (lungwort). The sun peeked out for a few minutes on a winter day and out we went outside to play with pots. As I write, I see we already feature this vase in the Kähler and Colchicum post. That entry contains more history about Kähler pottery that we’ll include here.

I can’t even remember where the vase came from but I’ve always liked the blue color and black design, vaguely reminiscent of leaves. I believe the design was created with a process called horn painting, literally a cow horn filled with slip and used like a pen to draw on the piece. On the bottom of the vase the “HAK” mark is incised. I don’t have a date for the production of this piece, but hazard a guess that it’s after 1920 and before 1960. How’s that for precise?

The featured plant, Pulmonaria, has been in our yard for about 15 years and has suffered much abuse: a house remodel, fence re-do, much foot traffic, and poor care to boot. Finally, we finished our house projects, moved the lungwort to a location with less foot traffic, and ignored it for a few years. It seems to be coming back.

Pulmonaria is in the Boraginaceae (Borage) family. I’d guess we have P. officinalis here. From Quattrocchi, the origin of the generic name is:

Latin pulmo, pulmonis “lung,” adj. pulmonarius, a, um “diseased in the lungs, curative of the lungs.”

Most sources of information about lungwort says something like this: the characteristic spots on the leaves and perhaps the leaf shape suggest lungs, and back when the plant was named (by Linnaeus) it was commonly thought to cure ailments of the lungs. This line of thinking is courtesy of the Doctrine of Signatures, a philosophy of the use of plants that goes back at least 2,000 years. If a plant looks like a part of the body, it cures it. There are many information sources today that echo the modern version of this idea of similarity equals cure. I’m sure by chance, there are some plants that are said to cure something because they look like it, actually might or do. In Weeds: In Defense of Nature’s Most Unloved Plants by Richard Mabey writes a lot about, well weeds, and many were and are used in traditional remedies.

“The doctrine of signatures was sympathetic magic tidied up, stripped of its blatant magical influences, and given Christian authority. What it taught was that God has ‘signed’ plants, with certain suggestive shapes and colours, say, in order that humans could ‘read’ the illnesses they were designed to ease.”

If only it were so simple. Following the trail of lungwort back in time (oh because we have a couple of hours to kill on a Sunday night), things get muddled. I tried to find lungwort in Nicholas Culpeper’s Complete Herbal (first published in 1653). However, all I could find was the lichen called Lobaria pulmonaria which also – are you ready for it? - looks like lung tissue. As an example of the doctrine of signatures, here’s what Culpeper, the curious 17th century herbalist and some might say quack, says about the lichen in an 1816 edition of the book:

p. 243 Lung-wort. It helps infirmities of the lungs, as hoarsness, coughs, wheezing, shortness of breath, &c. You may boil it in Hyssop-water, or any other water that strengthens the lungs.

p. 304 Syrupus Scabiosae Or Syrup of Scabious. College.] Take the roots of Elecampane, and Polypodium of the Oak, of each two ounces, Raisins of the sun stoned an ounce, Sebestens twenty, Colt’s-foot, Lungwort, Savory, Calaminth, of each a handful and an half, Liquorice, Spanish Tobacco, of each half an ounce, the seeds of Nettle and Cotton, of each three drams, boil them all (the roots being infused in white Wine the day before) in a sufficient quantity of Wine and Water to eight ounces, strain it, and adding four ounces of the Juice of Scabious, and ten ounces of sugar, boil it to a Syrup, adding to it twenty drops of oil of sulphur. Culpeper.] It is a cleansing Syrup appropriated to the breast and lungs, when you perceive them oppressed by flegm, crudites, or stoppings, your remedy is to take now and then a spoonful of this Syrup, it is taken also with good success by such as are itchy, or scabby.

Pages from  Culpeper’s Complete Herbal
Page from  Culpeper’s Complete HerbalPage from  Culpeper’s Complete Herbal

It sounded like a delightful cocktail up to the drops of sulphur. Then the crudites just spoiled it completely. Even if it is the wrong lungwort it gives you an idea of the Doctrine of Signatures.

But I felt unsatisfied, because I wondered, not whether lungwort cures ailments of the lungs, but why there are spots on the leaves at all. You would think that that question would be easy to find, but sadly it isn’t. All the “other stuff” comes up first when searching. The first reference I found to the spots is in an article on Pulmonaria by Tony Avent where the reason is given as:

The silver spots on pulmonaria leaves are actually the result of foliar air pockets, used for cooling the lower surface of the leaves. These air pockets mask the appearance of chlorophyll in the leaves, creating the foliar patterns that we enjoy as gardeners. The logical conclusion is that cultivars with more silver in the leaves should be able to tolerate more heat and possibly sun.


Left: Kähler Vase with Lungwort; Right: Lungwort Flowers
Kähler Vase with LungwortLungwort Flowers

Left: Lungwort Flowers (Pulmonaria officinalis); Right: Incised HAK Mark on Bottom of Vase
Lungwort Flowers (Pulmonaria officinalis)Incised HAK Mark on Bottom of Vase

Monday, March 18, 2013

Quaking Aspen Branch Scars

Populus tremuloides – Scars Left After Branch Removal

Populus tremuloides – Scars Left After Branch RemovalPopulus tremuloides – Scars Left After Branch Removal

These photos of Quaking Aspen (Populus tremuloides) were taken in the Grove section of the Olympic Sculpture Park in Seattle. We were struck by the oddness of the collar scars left after branch removal. Some scars look like eyes complete with eyebrows and bags under the eyes. The eyebrows are the branch bark ridges and the bags are the branch collars.

Left: Populus tremuloides – Branches, Right: Scars Left After Branch Removal
Populus tremuloides – BranchesScars Left After Branch Removal

Sunday, March 17, 2013

RE Store Mural - Ballard

Left: RE Store Mural Face, Right: Indian Proverb
RE Store Mural FaceRE Store Mural - Indian Proverb
The RE Store mural is a collaboration between RE Store and the Summit High School art students, Sustainable Ballard, artist David Benzler and Art Books Press. The mural features a large woman’s face. One of her eyeballs is planet earth and from the same eye flows a river. The other eye features plant leaves for eyelashes. Around the top of the head: day and night. Around the bottom of the face: sustainable cityscape with windmills, solar panels, green roofs, small markets, and public transportation. It has this Ancient Indian Proverb written in the bottom left corner: “Treat the earth well. It was not given to you by your Parents, it was loaned to you by your Children. We do not inherit the earth from our Ancestors, we borrow it from our children.”

RE Store Mural, Ballard
RE Store Mural, Ballard

Thursday, March 7, 2013

Lichen It - Xanthoria parientina

Xanthoria parientinaXanthoria parientina

We were walking in Myrtle Edwards Park on a Sunday afternoon and were struck by the vividness of this lichen, what we believe to be Xanthoria parientina. It was growing within 30-40 feet of the edge of Puget Sound on a deciduous tree in a sunny location. The little orange “cups” that stick up are called apothecia, the fruit body. Apparently, the more colorful Xanthoria is, the more it is producing sunscreen to protect the alga partner inside the lichen. You see, lichen is a partnership of two organisms living together: a fungus and a green alga or a cynobacterium or both. The lichen provides the house and the algae/cynobacterium provides food for the fungus. There is a nice page from the Natural History Museum about X. parientina.

X. parientina was originally name by our Linnaeus as Lichen parientinus. It can be found on page 1143 (page in Botanicus) of Species plantarum (1753) in the CRTYPTOGAMIA class (XXIV). The genus name comes from the Greek xanthos for yellow. The specific epithet parientina means “on walls”. A common name for this lichen is Golden Shield Lichen.

According to the Online Etymology Dictionary, the word lichen is described as: “c.1600, from Latin lichen, from Greek leichen, originally ‘what eats around itself,’ probably from leichein "to lick" (see lick). Originally used of liverwort; the modern sense first recorded 1715.”

Xanthoria parientina

Monday, March 4, 2013

Sauerkraut - Batch II

Left: Fermentation pot, week 1;  Right: Jarred and ready to share the last of batch II, week 4
Fermentation pot, week 1Jarred and ready to share the last of batch II, week 4

For sauerkraut batch II, we used 1 head or red cabbage, 1 head of white cabbage, 2 red turnips, and 2 white turnips. The result is decidedly pinkish red colored, but nonetheless delicious. Go here for a view of sauerkraut batch I.

Pink sauerkraut
Pink sauerkraut

Encounter of Waters Wall Design and Sculpture

Views of Encontro das Águas installation
Views of Encontro das Águas InstallationViews of Encontro das Águas Installation

Sandra Cinto’s Encontro das Águas (Encounter of Waters) is an installation at the Olympic Sculpture Park’s PACCAR Pavilion from April 14, 2012 - October 20, 2013. The wall is designed with water motifs using blue paint and silver pen. The design is reminiscent of water as depicted in Japanese woodblock prints. A wooden boat sculpture is in front of the wall, off to one side. The statement that accompanies the installation mentions the risk and renewal qualities of water and the significance of the boat as a metaphor for journeys and as a reference to the painting The Raft of the Medusa.

Since we have a passing interest in the decoration of walls, especially murals and graffiti, we were interested in this installation. Obviously this isn’t the typical mural or graffiti we like to cover. This isn’t a group of local students getting together to brighten up a gloomy underpass or someone paid to decorate the side of a business in big, puffy, hard to decipher letters. No, this is an upscale, city cousin to those. It’s an installation. There is a serious description about it. And, this installation doesn’t run as great a risk of getting vandalized as its cousins in the wild do. ;-) All ribbing aside, this installation is fun, worked for the space, and on the sunny Sunday afternoon we were there, it brightened up our day.

Left: Views of Encontro das Águas installation with boat and chairs; Right: Installation description
Encontro das Águas installation description

Left: The boat and wall in Encontro das Águas; Right: People have an encounter with the water
The boat and wall in Encontro das Águas People have an encounter with the water

Sunday, March 3, 2013

Linnaeus: The Compleat Naturalist

Overview


Front Cover of Linnaeus: The Compleat NaturalistBack Cover of Linnaeus: The Compleat Naturalist
Front and back covers of Linnaeus: The Compleat Naturalist.

Linnaeus: The Compleat Naturalist is a book by Wilfrid Blunt that was first published in 1971. It was updated in 2001 (hardcover) and 2004 (softcover) with the addition of an introduction by William T. Stearn, illustrations, a bibliography by Gavin D. Bridson, and two appendices. The first appendix is Linnaean Classification, Nomenclature, and Method by Stearn and the second appendix is Systematics and Taxonomy in Modern Biology by C.J. Humphreys. The first appendix is a very good introduction to the Linnaean nomenclature.

In this biography, Blunt walks us through the highlights of Linnaeus’ life (1707 - 1778), at times using much of Linnaeus’ own writing. Blunt describes the arc of Linnaeus’ life in three parts: Part 1: The Years of Struggle 1707-35, Part 2: In Search of Fame 1735-8, and Part III: The Prince of Botanists 1738-78. Included are descriptions of the journeys  Linnaeus took both inside and outside of Sweden. The journeys were important in shaping his thinking as well as helping to  spread his ideas, much like other scientists in Age of Enlightenment. The book describes his:
  • Lapland Journeys
  • Germany and Holland travels
  • A month in England
  • Provincial journeys in Southern Sweden, to Skåne and West Gothland.
The book includes helpful maps with routes for Linnaeus’ journeys in and around Sweden so you can make geographical sense of where he went.

Blunt doesn’t hesitate to point out Linnaeus’ less desirable behaviors like when he is whiny or a blowing his own horn or even out right fibbing. In regard to the last behavior, there is the incident when Linnaeus invented a whole leg of one of his Lapland journeys in order to exaggerate (and not very convincingly the experts say) the hardship he went through. Blunt writes: “It is understandable, if regrettable, that Linnaeus wanted to impress the officers of the Society by exaggerating his distances and miseries: he felt that they had treated him stingily and hoped to extract more money from them; what is curious, however, is that he should have submitted to them an account containing such clumsy inconsistencies.” [Part I - Chapter 5: The Lapland Journey: Luele and Torne Lappmark]

At times, it seems Linnaeus is treated roughly in Blunt’s hands. For example, there was an incident when Linnaeus was in Germany in 1735 on his way by coach to Hamburg. An angry farmer with an ax stops the coach and when Linnaeus speaks up, the farmer comes toward him of which Linnaeus writes “Had it not been for my companions, I would have taken him on.” Blunt writes: “How accurate, one may wonder, is this account of the brave young man so eager to fight, single-handed, a raging farmer armed with an axe, desisting only when restrained by his fellow travellers or in order to spare them an ugly spectacle? And was it in Latin that he addressed him?” [Part II - Chapter 1: Germany] Ouch.

I approached the autobiography with a degree of naiveté because I knew really nothing about Linnaeus, except that he laid the foundations for binomial nomenclature. Even after the less than flattering portrait of him in this biography, I can say that I came away with an appreciation of Linnaeus, his peculiarities and the hardships he endured to make a name for himself, raise a family and pursue his passion: naming things. For more information on family and where Linnaeus lived, see A Visit to the Linnaeus Garden in Uppsala Sweden.

Penchant for Order


The essay in the first appendix (by William T. Stearn) sums it up this way: “The basis of Linnaeus’ achievement was his strong sense of order.”

Blunt makes this observation about Linnaeus’ sense of order: “It was the same through his whole life. In Holland, where he was to spend three years, he never noted Rembrandt or Frans Hals. Still more strangely he never mentioned the great flower painters Jan van Huysum and Rachel Ruysch, both of whom were still alive and working in Amsterdam. It was said of Linnaeus, ‘God created, Linnaeus set in order’; but what man created, Linnaeus largely ignored, except where is archaeological, ethnographical or practical interests were aroused. Perhaps, however, it was just as well that he had these blind spots: a tenth of the task he was to set himself would have been a lifetime’s work for an ordinary man (as he frequently said). Moreover, he did possess what is none too common in scientists: literary talent of a very personal kind.” [Part I - Chapter 3: Uppsala]

In the Introduction to a translation (by Stephen Freer) of Philosophia Botanica, Paul Alan Cox writes: “Let us not forget that in Linnaeus' day biology was still strongly Aristotelian, with the search for a Platonic eidos or natural form being the goal of every biologist.” It gives some context to the passion with which Linnaeus worked to sort out the jumbled classification of the world.

Linnaeus’ classification system is order by sexual parts of flowers: the stamens (male organs) and stigmas and styles (female organs). He created 24 classes. Class I is for plants with one stamen, Class II is for plants with two stamens, and so on up to ten. After ten, the classification isn’t linear. For example, Class XIII is “twenty or more stamens fixed to the receptacle.” The Class XXIV is for plants which the fruit-body is concealed.

Classes are then broken down into orders based on the number of stigmas and styles. The system was full of imagery that Linnaeus did not hesitate to call into use. For Class XIII (Polyandria) he describes it as “Mariti viginti & ultra in odem cum femina thalamo” translated as “Twenty males or more in the same bed with the female” [Systema naturae] as in poppies and lindens. It’s no wonder some called him a “botanical pornographer” and his system met resistance by those shocked by such imagery.


Clavis Systematis Sexualis (Linnaeus’s Key to Sexual Classification of Plants)A modern copy of an Ehret engraving depicting Linnaeus’s system
Left: Clavis Systematis Sexualis (Linnaeus’ key to sexual classification of plants); Right: A modern copy of an Ehret engraving depicting Linnaeus’ system (Photographed at the British Museum, Englightment Gallery, July 2011).
 

Nomen Triviale


Before Linnaeus, there had been many attempts at classifying plants. In Philosophia Botanica, Linnaeus summarizes all the efforts that went before him with the likes of Cesalpino, Morrison, Ray, Boerhaave, and Tournefort, to name a few. Aphorism #59 reads “RAY (28) formerly a fructist (28) eventually became a corollist (29).” (Such is the intrigue of botany?)

Today, Linnaeus’ system of classification (based on flower parts) is not used, but his contribution to the separation of taxonomy and nomenclature endures.
  • Taxonomy is the process of defining and naming groups of biological organisms on the basis of shared characteristics. For example, the species name (nomen specificum) serves as a diagnostic phrase for the plant. For the plant Linnaea borealis the diagnostic phrase is “floribus geminatis”. It’s just two words in this example, but could be much longer.
  • Nomenclature refers to the assignment of a word or phrase to an object, in this case a biological organism. The specific epithet (nomen triviale) serves as a catch-word, an easy way to remember a species. The specific epithet designates the species. Though not the first to use a catch-word, Linnaeus codified it. So in the binomial name (binomial, binomen, or scientific name) of a plant, the second part is really the specific epithet, not the species name.
As an example, let’s look at Jasminum officinale or common jasmine. You can find it on page 7 of Species Plantarum (page in the Biodiversity Heritage Library, page in Botanicus). In the entry, the generic name is “JASMINUM”, the diagnosis or nomen specificum is “follis oppofitis pinnatis”, and the nomen triviale is “officinale” (in the margin of the page). Other data included in the entry are references to other diagnoses and synonyms in other works (e.g., Hortus Cliffortinaus) and an indication of habitat (e.g. India).

Page from Species Plantarum Showing Jasminum officinale
Page from Species Plantarum showing Jasminum officinale.

In the preparation of this post, I actually had trouble finding Linnaea borealis, Linnaeus’ namesake plant, in Species Plantarum. I tried figuring it out based on number of stamens, four, but stopped at TETRANDIA - Class IV. When I did by glance down the chart to DIDYNAMIA - Class XIV - two long stamens and two short ones, there it was on page 631 of Species.

What’s the best way to find an entry for a plant in Species Plantarum? One way I discovered is to go to Tropicos and search for the plant. On the detail page of each plant there is a link to the Species Plantarum page (if it exists) in the Biodiversity Heritage Library and Botanicus. So L. borealis or J. officinale are mentioned in Species Plantarum; Cercidiphyllum japonicum (Katsura Tree) is not since it was discovered after Linnaeus.
 

Connecting Plant Names with People


In Section VII Names of Philosophia Botanica, Linnaeus writes that “If you do not know the names of things, the knowledge of them is lost too.” [Aphorism #210] Later he writes that “generic names that have been formed to perpetuate the memory of a botanist who has done excellent service should be religiously preserved.” [Aphorism #238]. And in that spirit, here are a few of the plants and the people they commemorate that are mentioned in Linnaeus The Compleat Naturalist:
  • Dr. Olof Celsius (1670 - 1756) was a benefactor to young Linnaeus who, in gratitude, named the genus Celsia in his honor.
  • Olof Rudbeck the Younger (1660 - 1740) was a benefactor to young Linnaeus who, in gratitude, named Rudbeckia in his honor.
  • Linnaeus’ trademark flower Linnaea borealis, named in his honor by the Dutch botanist, Gronovius (1686 - 1762).
  • Elias Tillandz (1640 - 1693). Tillandz is honored by the genus of epiphytic plants, Tillandsia. The story goes that Linnaeus named these plants after Tillandz who disliked travel by sea. His name meaning “till lands” in Swedish or “by land” in English.
  • Johann Heinrich von Spreckelsen was a lawyer and plant lover that Linnaeus encountered during his time in Germany. The German botanist, Lorenz Heister (1683 - 1758) honored von Spreckelson with the genus Sprekelia
  • Isaac Lawson was a Scottish lawyer who helped fund the first publication of Linnaeus’ Systema Naturae. Linnaeus paid him gratitude by naming the genus Lawsonia (henna of the East) in his honor.
  • Jan Frederik Gronovius (1686 - 1762) was another benefactor in the first publication of System Naturae honored with the genus Gronovia (a climbing plant).
  • Peter Artedi (1705 - 1735) was a Swedish naturalist and friend of Linnaeus. Artedi died unexpectedly and Linnaeus fulfilling a promise published Artedi’s final work. Linnaeus also named a plant in the Umbelliferae family, Artedia, in his memory.
  • Peter Collinson (1694 - 1768) was an English Quaker, businessman, and avid gardener honored with the genus Collinsonia in the mint family.
  • Johann Bartsch (1709 - 1738) was a German physician recommended by Linnaeus for a post as a doctor in Suriname. Six months after his arrival there, Bartsch died. Linnaeus named the genus Bartsia in his honor.
  • Johann Siegesbeck was a St. Petersburg academician and vocal critic of Linnaeus’ sexual system. Siegesbeck is (dis)honored with the genus Siegesbeckia which Stern describes as an “unpleasant, small-flowered weed.”
  • Christopher Tärnström (1703 - 1745) was a student of Linnaeus who traveled to and died in modern day Vietnam. (Linnaeus used the term “apostle” to refer to his students who traveled overseas to study plants and keep Linnaeus supplied with plants and information.) The tropical genus Ternstroemia is named for Tärnström.
  • Pehr Kalm (1716 - 1779) was a Linnaean apostle who explored North America and returned with a number of new plant species that made it into Species Plantarum. The genus of evergreen shrubs Kalmia is named in his honor.
  • Pehr Osbeck (1723 - 1805) was a Linnaean apostle who botanized in China and is honored with the genus Osbeckia, native to the Eastern Asia.
  • Pehr Löfling (1729 - 1756) was a Linnaean apostle who collected in Spain and South America. He died in Guyana and is commemorated with the genus Loeflingia in the pink family (Caryophyllacea).
  • Baron Clas Alströmer (1736 - 1794) was a Linnaean apostle who traveled throughout Europe and is the namesake of the genus Alstroemeria, commonly called the Peruvian lily.
  • Daniel Solander (1733 - 1782) was a Linnaean apostle who traveled widely and worked closely with the famous Englishman Joseph Banks. The genus Solandra in the nightshade family (Solanaceae) is named after Solander.
  • Anders Sparman (1748 - 1820) was a widely travel led Linnaean apostle honored by the genus Sparrmannia in the lime family (Tiliaceae).
  • Carl Peter Thunberg (1743 - 1828) was a Linnaean apostle often referred to as the “Japanese Linnaeus” due to his botanizing in Japan. He is commemorated with the genus of tropical plants Thunbergia in the acanthus (Acanthaceae) family that contains the well-known T. alata or Black-eyed Susan vine.
  • Captain Carl Gustaf Ekeberg (1716 - 1784) was a Swedish explorer who brought back specimens for Linnaeus from his numerous voyages. He is honored with the genus Ekebergia in the mahogany family (Meliaceae). Linnaeus hoped that the Ekebergia that the captain brought back to Sweden would seed a tea industry in in Sweden. It was not to be the case.
  • Landgravine Caroline Louise of Hesse-Darmstadt (1723 - 1783) an admirer of Linnaeus honored with the tropical tree Carolinea (a synonym of Pachira) in the mallow family (Malvaceae).

Philosophica Botanica – Tips on Travelling


As I was researching different aspects of Linnaeus’ life, I started looking at Philosophia Botanica, first published in 1751 a few years before Species Plantarum. The book is composed mainly of aphorisms in which the “foundations of botany are explained, with definitions of the parts, examples of the technical terms and observations of rarities”. You can download the original book in Latin at a number of sites (Internet Archive for example or here in the Biodiversity Heritage Library). Or, you can buy it translated into English by Stephen Freer (which is the source of all the translations here). One thing that caught my attention in Philosophia are these terse instructions on how to travel (page 297 of the original):
PEREGRINATIO  
Principium erit mirari omnia, etiam tristissima.
Medium est calamo committere visa, et utilia.
Finis erit naturam adcuratiùs delineare, quàm alius.
Freer translates the Latin as:
Travelling 
The starting-point must be to marvel at all things, even the most commonplace.
The means is to commit to writing things that have been observed, and are useful.
The end must be to depict nature more accurately than anyone else.

Cover of an English Translation of Linnaeus’s Philosophia BotanicaA Page from Philosophia Discussing Travel Tips
Left: Cover of an English translation of Linnaeus’ Philosophia Botanica; Right: A page from Philosophia discussing travel tips.


A page from Philosophia Botanica showing flower parts.
A page from Philosophia Botanica showing flower parts.