text:
!!> PDF / Epub ☀ Things in Jars ✈ Author Jess Kidd – 52yinyin.info
Recipe Throw in a very unusual detective named Bridie, her housekeeper Cora whom Bridie helped rescue from a freak show, and a ghost, an ex boxer who has a tattooed body, with tattoos that move, wearing only a top hat and baggy underdrawers Add a missing child from a notable personage, the folk story of the merrow, one or two evil men, a unusual but helpful apothecary and freak shows and oddities galore What one now has is a truly imaginative, inventive and entertaining look at a time when strange ruled the day.Don t know how Kidd comes up with the story ideas she has, but I ve enjoyed all three of her very different books This is a dark London, a hidden London where many things go unnoticed and unreported Bridie has her hands full and a very interesting back story The ghost insists she knows him from the past, but she doesn t remember,though by books end that will change The mood, the atmosphere, the gothic storytelling aided in my quest to know how s the author would bring this all together She does, in a thriller sty e with an emotional edge.One can t help wondering where this author will take us next, or if this might be the start of a series featuring Bridie Time will tell. 4.5 STARS A dark, bizarre and fanciful world Imaginative storytelling that was menacing, detailed and plotted to perfection.I was quickly captivated by the gothic setting and the missing child investigation The female detective, Birdie Devine specializes in domestic investigations and minor surgery She was a fantastic character that brought humor and humanity to the tale.The supernatural elements and fairytale esque cast of characters kept me glued to the pages and immersed in their quest for the Winter Mermaid The images of snails, scales and those things in jars were mesmerizing I also learned about merrows, which both fascinated and terrified me A splash of magical realism, some wicked happenings and plenty of side characters to love hate made this one quite a fantastical journey Thanks to NG and the pub for my review copy OUT Feb 2020 In The Dark Underbelly Of Victorian London, A Formidable Female Sleuth Is Pulled Into The Macabre World Of Fanatical Anatomists And Crooked Surgeons While Investigating The Kidnapping Of An Extraordinary Child In This Gothic Mystery Perfect For Fans Of The Essex Serpent And The Book Of SpeculationBridie Devine Female Detective Extraordinaire Is Confronted With The Most Baffling Puzzle Yet The Kidnapping Of Christabel Berwick, Secret Daughter Of Sir Edmund Athelstan Berwick, And A Peculiar Child Whose Reputed Supernatural Powers Have Captured The Unwanted Attention Of Collectors Trading Curiosities In This Age Of Discovery Winding Her Way Through The Labyrinthine, Sooty Streets Of Victorian London, Bridie Won T Rest Until She Finds The Young Girl, Even If It Means Unearthing A Past That She D Rather Keep Buried Luckily, Her Search Is Aided By An Enchanting Cast Of Characters, Including A Seven Foot Tall Housemaid A Melancholic, Tattoo Covered Ghost And An Avuncular Apothecary But Secrets Abound In This Foggy Underworld Where Spectacle Is King And Nothing Is Quite What It Seems Blending Darkness And Light, History And Folklore, Things In Jars Is A Spellbinding Gothic Mystery That Collapses The Boundary Between Fact And Fairy Tale To Stunning Effect And Explores What It Means To Be Human In Inhumane Times Below her, streets and lanes, factories and workhouses, parks and prisons, ground houses and tenements, roofs, chimneys and treetops And the winding, sometimes shining, Thames the sky s own dirty mirror The raven leaves the river behind and charts a path to a chapel on a hill with a spire and a clock tower She circles the chapel and lands on the roof with a shuffling of wings She pecks at brickwork, at lichen, at moth casts, at nothing She sidles up to a gargoyle and runs her beak affectionately around his eyes, nudging, scooping Bridie Devine is a young Irishwoman, not the flinching kind, who works as a detective, aided by her faithful housekeeper, Cora, and offering an often exasperating help to Inspector Rose Brightest than the blazing flame, determined and dedicated, she is called to investigate the disappearance of Christabel A child that has the power to enter your conscience just by looking at you with eyes that change colours Bridie enters a world of illegal medical research, anatomists, and legends and faces the darkest aspects of her childhood, aided by a mysterious rugged man with a top hat who happens to bedead.What follows is my personal blabbering, full of adoration for London, Gothic atmosphere, mermaids and the intention to build a bookcase shrine to properly worship Jess Kidd s extraordinary talent Ye have been warnedThe woman is made of boot polish and pipe smoke, clean cloth and the north wind And as for the dead man walking behind her, well, he means no harm London is the central character It comes alive through the pages I don t know, Jess Kidd has a supernatural gift I don t know how else to explain her ability to hypnotize the reader She has created an elaborate time machine to transport us to London during the 1860s We walk and see and smell and listen It couldn t be real than that The multicultural neighborhoods of the capital, the dreadful orphanages vividly described by Dickens, Trollope, and Thackeray, the ever present threat of cholera, the mysterious nights, the penny dreadfuls scenery And most importantly, Old Father Thames stands witness to a city that retains so many secrets, so many horrors, and so much beauty The marvelous way in which Kidd leads the readers in the streets and alleys of the city reminded me of Michel Faber s masterpiece The Crimson Petal and the White.I mean, read these paragraphsThe metropolis isn t sleeping, not really For every Londoner in bed there are ten awake and up to no good on the fly, on the loose, on the tiles The moon knows she sees all Tonight, she s our guide, for it s late and every self respecting raven will be perched in her own black feathered embrace Let the corvid sleep The moon sees the beauty and cruelty of London her whores and drunks, saints and murderers, thieves and lovers and fighters The moon sees every black alley and yard, scrubland and marsh Coming up from beneath London s streets, another new sound a tumultuous rushing The ancient rivers of London, newly awaken and gathering force, now erupt Flooding lane and street, drowning basement dwelling families and overwhelming cesspits Then there is the rain Great drops of the stuff, a constant patter on every window and shutter, tin can and bucket And the Thames keeps rising And then, the Gothic elements are used to perfection There are traces of witchcraft and potential hauntings Strange things in jars, the circus world with its peculiars Anatomists struggling to learn and to deceive Stories of mermaids from Ireland, Holland, and France The presence of the merrow, the evil mermaid, a figure we don t often witness in Literature Pigeons and seagulls form common imagery throughout the novel, creating a sense of unrest and eerie commotion There is a tale within the tale and the effect is astonishing, it will give you nightmares There s even a reference to Herne the Hunter, a legendary British Folklore figure.And the characters Nevermind the perfect prose, the beautiful dialogue, the astonishing imagery BridieJesus Christ, I could highlight every sentence she utters, she is my new spirit animal From beloved Wicklow Sassy and ferocious, with an acute sense of irony, indifferent to all norms and rules How can I not adore her Cora, loyal, fierce, honest and sensitive And RubyRuby stands equal to Himself s Mahony in terms of charm level, all handsome and valiant and electrifying Bridie and Ruby are one of the best, most unique, most perfect I could go on forever couples you ll ever encounter in a novel.Is this the best Jess Kidd novel yet I think so I adore all three but this one truly captured my heart, put it in a chest and hid the key In a jar When perfect writing, outstanding atmosphere, and sheer literary Art come together, the result is a masterpiece like Things In Jars.Also, Jess Kidd, why are you so perfectBridie walks between the headstones, the crosses, the covered urns, the plump marble pillows inviting everlasting slumber Stone angels perch on all four corners of her tomb wings folded and faces impassive, they are giving nothing away My reviews can also be found on Jess Kidd is now officially one of my most favourite authors Three beautiful books in a row with not a fault in any of them What to ask for.Things in Jars moves us away from the author s usual locations in Ireland and off to London Of course our main characters are still beautifully Irish and, also of course, one of them is a ghost Kidd describes Victorian London perfectly with all its horrors and its smells and its poverty among the lower classes Her characters too are all larger than life Bridie Devine, the finest female detective of the time, takes on a case of a stolen child who turns out to be a very unusual child indeed Helping her in the search is Ruby Doyle, champion boxer, now deceased but not yet resting in peace, and Cora Butter the only, and most terrifying, seven foot tall housemaid in London The story goes into some very dark places but it is also humourous, totally entertaining and very well written A really excellent and very readable book I loved it. But a mermaid has no tears, and therefore she suffers so muchHans Christian Andersen, The Little MermaidI m a huge fan of Jess Kidd s exquisite, playful writing and KERPOW, what a start Her vivid prologue was one of the finest things I ve read in a long, long time Gadzooks That alone was worth the entrance fee The book is set in a Victorian London that Dickens might have portrayed one which is theatrically grotesque and wonderfully atmospheric whose slums are as lively as a blanket full of lice Our heroine is special detective Bridie Devine, a dynamic pipe smoking woman of around thirty years of age She wears the ugliest bonnet in Christendom and can drink most men under the table.Ms Devine womankind s answer to Sherlock Holmes has a psychic talent for reading corpses that have met with inexplicable deaths The author describes her as being a woman made from boot polish and pipe smoke Kidd s female characters are often gloriously independent, which I love.Devine s latest case is the kidnapping of Baronet s daughter, Christabel Berwick, a pike toothed child who smells of the sea and is kept shackled and hidden in a locked nursery The magical realism herein is precisely as it should be dark, imaginative, irreverent and wryly amusing To explain this thriller mystery any further would be to divulge its silty, slippery secrets It rather frustrates me that certain ham handed authors find themselves on Booker shortlists when ber talented Jess Kidd can write their socks off Mind you, that said, I m not altogether sure why she felt the need to hyphenate words that shouldn t be hyphenated church yard crest fallen dumb founded gas lights Perhaps she was going for a Victorian style of writing Disappointingly, the story began to lose its cut and thrust in the middle stages I was even gulp bored for several chapters The treacherous ocean had become a gentle millpond and I wanted Ah, but wonderful Jess Kidd redeems herself with a poignant scene at the book s d nouement a passage so pitiful, so heroic, that the scales on the back of my neck stood on end and my gills began to gasp Bravo, Jess I squeaked, clapping my fins together Best supporting character awards go to two protags one living, one dead Cora Butter, Bridie s seven foot tall housemaid, who is fiercely loyal and commendably noble and to Ruby Doyle, a top hatted prizefighter whose sliding tattoos have a mind of their own.As ever, Jess Kidd s lyrical prose is a joy to behold and she employs an opulence of literary devices to good effect personification aphorisms allusion and zoomorphism, to name but a few All told, I liked this dark, exuberant, whimsical extravaganza very much Indomitable Bridie Devine is a mesmerising character who will linger in your mind long after the final page is turned Nevertheless, I enjoyed this author s previous offerings Four stars, bumped up to five, because Jess Kidd has ninja writing skillz. Meeting Birdie Devine, a female investigator, who in 1863 receives an offer from a baronet to find hs kidnapped daughter, was a pleasure More than that, I was delighted to get acquainted with her and follow her efforts to uncover the truth behind the abduction She is observant, intelligent, has no fear of the dead or alive, with one exception, perhaps, and she has been through a lot in life And she is accompanied by a former boxer who, though dead, gives some advice, occasionally I loved everything about this mixture of HF, fantasy and gothic elements The narration is exquisite, and the things we learn about Birdie s past definitely add to the atmosphere in the novel All characters are vividly described, each with the characteristics that make them peculiar and particular There is no character which is unnecessary, and the way Ms Kidd conncects them is brilliant Birdie is a survivor, created by what she experienced and by whom she met in the past I love Birdie When I saw the title of this book months ago, I immediately thought of the macabre the Victorians were so interested in, and it turned out, I was right This novel has Victorian touch of the highest quality, and I truly recommend it to anyone eager to dive into a terrific read Many thanks to Jess Kidd, Atria Books and NetGalley for arc in exchange for my honest review. THINGS IN JARS by Jess Kidd is a gothic story set in Victorian London in the 1860s with a few flashback chapters in the 1830s and 1830s Birdie Devine is a female detective that takes on domestic investigations and does minor surgeries She has two cases, one given to her by Inspector Valentine Rose of Scotland Yard, and a second one when she is hired by Sir Edmund Athelstan Berwick to find his kidnapped daughter.Kidd des a great job of writing in such a way that you not only hear what s happening, but you can see it vividly, and even experience the unfortunate smells of the time The story is somewhat gruesome and shocking at times and there is a paranormal aspect to it as well It is gritty and dark at times and, at other times, it takes on a lighter tone.The characters are compelling, fascinating, and felt three dimensional with clear motivations There was enough at stake to keep me engaged throughout the story The world building was absolutely fantastic and gave a clear sense of time and place.Overall, this was an entertaining book that I would recommend to those that enjoy stories set in Victorian London and like a little paranormal and a bit of romance in their stories Thanks to Atria Books and Jess Kidd for a digital ARC of this novel via NetGalley and the opportunity to provide an honest review Opinions are mine alone and are not biased in any way. Jess Kidd shifts direction in her 3rd novel setting it in Victorian times with its inherent brutality and inhumanity, teeming with villains, murderers, the arrogance of killing medics, and ruthless amoral gentlemen anatomy collectors, hungry for what should not be alive There are Things in Jars, with their ability to disturb the natural order of things, life and death, ashes to ashes, time in supension, pickling yesterday, holding eternity in a jar Into this latest historical novel, Kidd brings her trademark elements, Irish folklore, superstitions, ghosts, the eccentric, her stellar female characters, with her standout lyrical prose that enchants and enthralls It is 1863 and London is marked by crime, disease, grime, violence, stink and penury Addicted to smoking experimental concoctions by Prudhoe in her pipe, the red haired Bridie Devine is haunted by her inability to prevent the death of a child in her last case With her now battered reputation, it is a surprise when Sir Edmund Berwick hires her to find his kidnapped 6 year old daughter, Christobel Only Christobel is no ordinary child, with extraordinary abilities, playing with memories, eyes that see too much, and pike s teeth that can wreak serious damage This time Bridie is determined not to fail a child, aided by her magnificently gigantic maid, Cora, endowed with her thick and glossy facial hair, and the ghost of the love lorn illustrated Ruby, a prizefighter, claiming to know Bridie, although she is doubtful of this fact In a narrative that goes back and forth in time to reveal Bridie s childhood of coming over from Ireland, collecting corpses with Gan, and her time as laboratory assistant to Dr John Eames at Albery Hall, wearing the clothes of the dead Lydia, links poke their heads from Bridie s past to trouble her in her present investigations There are colourful characters galore, such as the predatory and sly Mrs Bibby, born for bad business, with the tooth and claws and the backbone for it, and the viciously dangerous and manipulative Gideon In a story that takes in walled in women and children and the Winter Mermaid , there are gruesome murders, double dealing and avarice, and Bridie s life is endangered as a deadly foe comes back from the dead In the meantime, Londoners cower with fear and horror as lost rivers are resurgent, battered by never ending biblical rains as the city floods.Once again, Jess Kidd beguiles and charms with her gifts as a storyteller, her shift to the Victorian era is a sublime decision, as the era positively drips with gothic elements that serve a veritable feast for Kidd s imagination This includes the ravens, experimental potions, the penchant for curiosities, a medical profession that is unhindered by anything remotely ethical, and the corrupt scientific anatomy collectors desperate to acquire living anomalies by any means necessary and preserve them in their jars However, it is in the mix of the fantastical, Irish folklore such as the merrow, with the everyday, and Kidd s remarkable talents in characterisation that make her novels a joy to read, and ensures that her readership will continue to grow This is compulsive and magical reading fare, such infernally dark matter, but shot through with light by Bridie, Cora, Ruby and Inspector Valentine Rose I cannot describe how keen I am to get my hands on the next book Kidd writes So, what is left to say Just the small matter of this book coming highly recommended Many thanks to Canongate for an ARC. Here is time held in suspension Yesterday pickled Eternity in a jar In Things in Jars, A 7 foot tall bearded parlor maid, mythical sea monsters, a ghost, and a winter mermaid are all brought together by a female pipe smoking detective in Victorian London to solve the kidnapping of a mysterious childWhen a child with supposed supernatural powers is kidnapped, Detective Bridie Devine is commissioned to find her Bridie s sleuthing abilities lead her into the dark underbelly of nineteenth century London where she encounters a criminal element obsessed with possessing the world s oddities Dead or alive, there is a price on the head of those who are different and don t fit societal norms.Part mystery, part social commentary, part fairy tale, Things in Jars had me completely enthralled Jess Kidd encompasses all of the strange eccentricities of the Victorians In Bridie, Ruby, a dead boxer, and Cora, a 7 foot tall parlor maid, she creates fascinating and multi dimensional characters I hope to see them again in a future novel Kidd seamlessly weaves together a story filled with magic, strong women, and those who long to possess those who are different I LOVED loved loved every minute of this book It is strange, eccentric, and wonderfully weird This is definitely one of the best books I have read in 2019 I received an ARC of this book from NetGalley and the publisher in exchange for an honest review.


text:
The past few months apparently haven't done much to recommend ObamaCare to the Americans that the Obama administration is fervently hoping to convince to sign up for the insurance through the proffered programs when their exchanges open for business this October. According to the June edition of the Kaiser health tracking poll, Americans still don't hold the "Affordable" Care Act in high regard by an eight point margin, with 43 percent holding an unfavorable view and 35 percent a favorable view.
The outreach program to desperately sell the still-unpopular legislation to the public has already begun, but it sounds like the Obama administration has figured out that just some ordinary, run-of-the-mill political marketing campaign isn't going to quite cut it. For an effort this massive, they need to step up their game — and how.
The Obama administration has reached out to the NBA about a potential marketing partnership to promote the health law, POLITICO has learned.
The news, revealed recently by Massachusetts officials who have been in contact with the administration, offers a glimpse at how President Barack Obama's team plans to push the new coverage options to a public that largely has been clueless about the new health insurance options. …
It's unclear whether a potential partnership would put big-name ballplayers — like James, the Miami Heat superstar — at the center of ad campaigns or whether it would be as modest as permitting the administration to affix the NBA logo onto marketing materials. An agreement itself isn't even a slam dunk; Obamacare is partisan and controversial, and the NBA could decide it doesn't want to go near it.
The NBA is keeping mum about the reported offer so far, but for the Obama administration, this would be a serious win — the NBA's regular season closely coincides with the time period in which the administration needs people to sign up through the exchanges, and could help them reach a much wider audience. It's the type of popular endorsement that could help them out a lot, and it is sounds like it isn't the only one they're pursuing.

subset: commoncrawl


text:
Awesome Bruce Lee 'Enter The Dragon' Remix [VIDEO]
Bruce Lee's 'Enter The Dragon' is like the top of the list, when it comes to great martial arts movies. It spawned a whole generation of copycats, some good, some not so good. Even if you haven't seen the movie, you''' appreciate this short you tube remix. Check it out below.
If you like that, you'll like this too.
And this.
You Tube


text:
nginx (pronounced "engine X"), is a free, open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server, written by Igor Sysoev in 2005. nginx is well known for its stability, rich feature set, simple configuration, and low resource consumption.
This article describes how to set up nginx and how to optionally integrate it with PHP via #FastCGI.
- 1 Installation
- 2 Running
- 3 Configuration
- 3.1 Configuration example
- 3.2 General configuration
- 3.3 FastCGI
- 4 Installation in a chroot
- 5 Tips and tricks
- 6 Troubleshooting
- 6.1 Configuration validation
- 6.2 Accessing local IP redirects to localhost
- 6.3 Error: The page you are looking for is temporarily unavailable. Please try again later. (502 Bad Gateway)
- 6.4 Error: No input file specified
- 6.5 Warning: Could not build optimal types_hash
- 6.6 Cannot assign requested address
- 7 See also
Install the package nginx-mainline (mainline branch: new features, updates, bugfixes) or nginx (stable branch: major bugfixes only).
Using the mainline branch is recommended. The main reason to use the stable branch is that you are concerned about possible impacts of new features, such as incompatibility with third-party modules or the inadvertent introduction of bugs in new features.
For a chroot-based installation for additional security, see #Installation in a chroot.
The default page served at http://127.0.0.1 is
First steps with nginx are described in the Beginner's Guide. You can modify the configuration by editing the files in
/etc/nginx/ The main configuration file is located at
More details and examples can be found in http://wiki.nginx.org/Configuration and the official documentation.
The examples below cover the most common use cases. It is assumed that you use the default location for documents (
/usr/share/nginx/html). If that is not the case, substitute your path instead.
Configuration example
user http; worker_processes auto; worker_cpu_affinity auto; events { multi_accept on; worker_connections 1024; } http { charset utf-8; sendfile on; tcp_nopush on; tcp_nodelay on; server_tokens off; log_not_found off; types_hash_max_size 4096; client_max_body_size 16M; # MIME include mime.types; default_type application/octet-stream; # logging access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log warn; # load configs include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; }
General configuration
Processes and connections
You should choose a fitting value for
worker_processes. This setting ultimately defines how many connections nginx will accept and how many processors it will be able to make use of. Generally, making it the number of hardware threads in your system is a good start. Alternatively,
worker_processes accepts the
auto value since versions 1.3.8 and 1.2.5, which will try to autodetect the optimal value (source).
The maximum connections nginx will accept is given by
max_clients = worker_processes * worker_connections.
Running under different user
By default, nginx runs the master process as
root and worker processes as user
http. To run worker processes as another user, change the
user directive in
user user [group];
If the group is omitted, a group whose name equals that of user is used.
root using systemd. See #Running unprivileged using systemd.
Server blocks
It is possible to serve multiple domains using
server blocks. These are comparable to "VirtualHosts" in Apache HTTP Server. Also see the upstream examples.
In the example below the server listens for incoming connections on IPv4 and IPv6 ports 80 for two domains,
domainname1.dom and
... server { listen 80; listen [::]:80; server_name domainname1.dom; root /usr/share/nginx/domainname1.dom/html; location / { index index.php index.html index.htm; } } server { listen 80; listen [::]:80; server_name domainname2.dom; root /usr/share/nginx/domainname2.dom/html; ... }
nginx.service to apply any changes.
Managing server entries
It is possible to put different
server blocks in different files. This allows you to easily enable or disable certain sites.
Create the following directories:
# mkdir /etc/nginx/sites-available # mkdir /etc/nginx/sites-enabled
Create a file inside the
sites-available directory that contains one or more server blocks:
server { listen 443 ssl http2; listen [::]:443 ssl http2; ... }
Append include
sites-enabled/*; to the end of the
http block:
http { ... include sites-enabled/*; }
To enable a site, simple create a symlink:
# ln -s /etc/nginx/sites-available/example.conf /etc/nginx/sites-enabled/example.conf
To disable a site, unlink the active symlink:
# unlink /etc/nginx/sites-enabled/example.conf
nginx.service to enable changes to the sites configuration.
OpenSSL provides TLS support and is installed by default on Arch installations.
- You may want to read the ngx_http_ssl_module documentation first before configuring SSL.
- Let's Encrypt is a free, automated, and open certificate authority. A plugin is available to request valid SSL certificates straight from the command line and automatic configuration.
- Mozilla has a useful TLS article as well as an automated tool to help create a more secure configuration.
- Cipherli.st[dead link 2020-04-01 ⓘ] provides strong TLS implementation examples and tutorial for most modern webservers.
Create a private key and self-signed certificate. This is adequate for most installations that do not require a CSR:
# mkdir /etc/nginx/ssl # cd /etc/nginx/ssl # openssl req -new -x509 -nodes -newkey rsa:4096 -keyout server.key -out server.crt -days 1095 # chmod 400 server.key # chmod 444 server.crt
-days switch is optional and RSA keysize can be as low as 2048 (default).
If you need to create a CSR, follow these instructions instead of the above:
# mkdir /etc/nginx/ssl # cd /etc/nginx/ssl # openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:4096 -out server.key # chmod 400 server.key # openssl req -new -sha256 -key server.key -out server.csr # openssl x509 -req -days 1095 -in server.csr -signkey server.key -out server.crt
Basic example of
/etc/nginx/nginx.conf using TLS:
http { ... ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; .. # Redirect to HTTPS server { listen 80; server_name localhost; return 301 https://$host$request_uri; } server { #listen 80; # Uncomment to also listen for HTTP requests listen 443 ssl http2; # HTTP/2 is only possible when using SSL server_name localhost; ssl_certificate ssl/server.crt; ssl_certificate_key ssl/server.key; root /usr/share/nginx/html; location / { index index.html index.htm; } } }
nginx.service to apply any changes.
Per-user directories
To replicate Apache-style
~user URLs to users'
~/public_html directories, try the following. (Note: if both rules are used, below, the more-specific PHP rule must come first.)
... server { ... # PHP in user directories, e.g. http://example.com/~user/test.php location ~ ^/~(.+?)(/.+\.php)$ { alias /home/$1/public_html$2; fastcgi_pass unix:/run/php-fpm/php-fpm.sock; fastcgi_index index.php; include fastcgi.conf; } # User directories, e.g. http://example.com/~user/ location ~ ^/~(.+?)(/.*)?$ { alias /home/$1/public_html$2; index index.html index.htm; autoindex on; } ... } ...
See #PHP implementation for more information on PHP configuration with
nginx.service to enable the new configuration.
FastCGI, also FCGI, is a protocol for interfacing interactive programs with a web server. FastCGI is a variation on the earlier Common Gateway Interface (CGI); FastCGI's main aim is to reduce the overhead associated with interfacing the web server and CGI programs, allowing servers to handle more web page requests at once.
FastCGI technology is introduced into nginx to work with many external tools, e.g. Perl, PHP and Python.
PHP implementation
PHP-FPM is the recommended solution to run as FastCGI server for PHP.
Install php-fpm and make sure PHP has been installed and configured correctly. The main configuration file of PHP-FPM is
/etc/php/php-fpm.conf. For basic usage the default configuration should be sufficient.
Finally, enable and start
- If you run nginx under a different user, make sure that the PHP-FPM socket file is accessible by this user, or use a TCP socket.
- If you run nginx in chrooted environment (chroot is
/srv/nginx-jail, web pages are served at
/srv/nginx-jail/www), you must modify the file
/etc/php/php-fpm.confto include the
chroot /srv/nginx-jailand
listen = /srv/nginx-jail/run/php-fpm/php-fpm.sockdirectives within the pool section (a default one is
[www]). Create the directory for the socket file, if missing. Moreover, for modules that are dynamically linked to dependencies, you will need to copy those dependencies to the chroot (e.g. for php-imagick, you will need to copy the ImageMagick libraries to the chroot, but not imagick.so itself).
- Since
php-fpmversion 7.4.0
ProtectHome=truewhich restricts access to files located within
/run/user, yielding the error message
No input file specified.FS#64683#comment184136
nginx configuration
When serving a PHP web-application, a
location for PHP-FPM should to be included in each server block [2], e.g.:
server { root /usr/share/nginx/html; location / { index index.html index.htm; } location ~ \.php$ { # 404 try_files $fastcgi_script_name =404; # default fastcgi_params include fastcgi_params; # fastcgi settings fastcgi_pass unix:/run/php-fpm/php-fpm.sock; fastcgi_index index.php; fastcgi_buffers 8 16k; fastcgi_buffer_size 32k; # fastcgi params fastcgi_param DOCUMENT_ROOT $realpath_root; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; #fastcgi_param PHP_ADMIN_VALUE "open_basedir=$base/:/usr/lib/php/:/tmp/"; } }
If it is needed to process other extensions with PHP (e.g. .html and .htm):
location ~ [^/]\.(php|html|htm)(/|$) { ... }
Non .php extension processing in PHP-FPM should also be explicitly added in
security.limit_extensions = .php .html .htm
fastcgi_pass argument, as it must be the TCP or Unix socket defined by the chosen FastCGI server in its config file. The default (Unix) socket for
php-fpm is:
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
You might use the common TCP socket, not default,
fastcgi_pass 127.0.0.1:9000;Unix domain sockets should however be faster.
server blocks using the same PHP-FPM configuration, a
php_fastcgi.conf configuration file may be used to ease management:
location ~ \.php$ { # 404 try_files $fastcgi_script_name =404; # default fastcgi_params include fastcgi_params; # fastcgi settings ... }
To enable PHP support for a particular server, simply include the
php_fastcgi.conf configuration file:
server { server_name example.com; ... include /etc/nginx/php_fastcgi.conf; }
Test configuration
You need to restart the
php-fpm.service and
nginx.service units if the configuration has been changed in order to apply changes.
To test the FastCGI implementation, create a new PHP file inside the
root folder containing:
<?php phpinfo(); ?>
Navigate this file inside a browser and you should see the informational page with the current PHP configuration.
CGI implementation
This implementation is needed for CGI applications.
Install fcgiwrap. The configuration file is
/usr/lib/systemd/system/fcgiwrap.socket. Enable and start
Multiple worker threads
If you want to spawn multiple worker threads, it is recommended that you use multiwatchAUR, which will take care of restarting crashed children. You will need to use
spawn-fcgi to create the unix socket, as multiwatch seems unable to handle the systemd-created socket, even though fcgiwrap itself does not have any trouble if invoked directly in the unit file.
Copy the unit file from
/usr/lib/systemd/system/fcgiwrap.service to
/etc/systemd/system/fcgiwrap.service (and the
fcgiwrap.socket unit, if present), and modify the
ExecStart line to suit your needs. Here is a unit file that uses multiwatchAUR. Make sure
fcgiwrap.socket is not started or enabled, because it will conflict with this unit:
[Unit] Description=Simple CGI Server After=nss-user-lookup.target [Service] ExecStartPre=/bin/rm -f /run/fcgiwrap.socket ExecStart=/usr/bin/spawn-fcgi -u http -g http -s /run/fcgiwrap.sock -n -- /usr/bin/multiwatch -f 10 -- /usr/sbin/fcgiwrap ExecStartPost=/usr/bin/chmod 660 /run/fcgiwrap.sock PrivateTmp=true Restart=on-failure [Install] WantedBy=multi-user.target
-f 10 to change the number of children that are spawned.
ExecStartPost line is required because of strange behaviour I'm seeing when I use the
-M 660 option for
spawn-fcgi. The wrong mode is set. This may be a bug?
nginx configuration
/etc/nginx, copy the file
fastcgi_params to
fcgiwrap_params. In
fcgiwrap_params, comment or delete the lines which set
SCRIPT_NAME and
Inside each
server block serving a CGI web application should appear a
location block similar to:
location ~ \.cgi$ { include fcgiwrap_params; fastcgi_param DOCUMENT_ROOT /srv/www/cgi-bin/; fastcgi_param SCRIPT_NAME myscript.cgi; fastcgi_pass unix:/run/fcgiwrap.sock; }
The default socket file for
fcgiwrap is
fastcgi_param SCRIPT_FILENAME /srv/www/cgi-bin/myscript.cgi is a shortcut alternative to setting
DOCUMENT_ROOT and
SCRIPT_NAME. If you use
SCRIPT_FILENAME, you also will not need to copy
fastcgi_params to
fcgiwrap_params and comment out the
DOCUMENT_ROOT and
SCRIPT_NAME lines.
If you keep getting a
502 - bad Gateway error, you should check if your CGI-application first announces the mime-type of the following content. For html this needs to be
Content-type: text/html.
If you get 403 errors, make sure that the CGI executable is readable and executable by the
http user and that every parent folder is readable by the
http user.
Installation in a chroot
Installing nginx in a chroot adds an additional layer of security. For maximum security the chroot should include only the files needed to run the nginx server and all files should have the most restrictive permissions possible, e.g., as much as possible should be owned by root, directories such as
/usr/bin should be unreadable and unwriteable, etc.
Arch comes with an
http user and group by default which will run the server. The chroot will be in
A perl script to create this jail is available at jail.pl gist. You can either use that or follow the instructions in this article. It expects to be run as root. You will need to uncomment a line before it makes any changes.
Create necessary devices
nginx needs
/dev/random, and
/dev/urandom. To install these in the chroot create the
/dev/ directory and add the devices with mknod. Avoid mounting all of
/dev/ to ensure that, even if the chroot is compromised, an attacker must break out of the chroot to access important devices like
/srv/http is mounted without nodev option
ls -l /dev/{null,random,urandom} to better understand the mknod options.
# export JAIL=/srv/http # mkdir $JAIL/dev # mknod -m 0666 $JAIL/dev/null c 1 3 # mknod -m 0666 $JAIL/dev/random c 1 8 # mknod -m 0444 $JAIL/dev/urandom c 1 9
Create necessary directories
nginx requires a bunch of files to run properly. Before copying them over, create the folders to store them. This assumes your nginx document root will be
# mkdir -p $JAIL/etc/nginx/logs # mkdir -p $JAIL/usr/{lib,bin} # mkdir -p $JAIL/usr/share/nginx # mkdir -p $JAIL/var/{log,lib}/nginx # mkdir -p $JAIL/www/cgi-bin # mkdir -p $JAIL/{run,tmp} # cd $JAIL; ln -s usr/lib lib # cd $JAIL; ln -s usr/lib lib64 # cd $JAIL/usr; ln -s lib lib64
Then mount
$JAIL/tmp and
$JAIL/run as tmpfs's. The size should be limited to ensure an attacker cannot eat all the RAM.
# mount -t tmpfs none $JAIL/run -o 'noexec,size=1M' # mount -t tmpfs none $JAIL/tmp -o 'noexec,size=100M'
In order to preserve the mounts across reboots, the following entries should be added to
tmpfs /srv/http/run tmpfs rw,noexec,relatime,size=1024k 0 0 tmpfs /srv/http/tmp tmpfs rw,noexec,relatime,size=102400k 0 0
Populate the chroot
First copy over the easy files.
# cp -r /usr/share/nginx/* $JAIL/usr/share/nginx # cp -r /usr/share/nginx/html/* $JAIL/www # cp /usr/bin/nginx $JAIL/usr/bin/ # cp -r /var/lib/nginx $JAIL/var/lib/nginx
Now copy over required libraries. Use ldd to list them and then copy them all to the correct location. Copying is preferred over hardlinks to ensure that even if an attacker gains write access to the files they cannot destroy or alter the true system files.
$ ldd /usr/bin/nginx
linux-vdso.so.1 (0x00007fffc41fe000) libpthread.so.0 => /usr/lib/libpthread.so.0 (0x00007f57ec3e8000) libcrypt.so.1 => /usr/lib/libcrypt.so.1 (0x00007f57ec1b1000) libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00007f57ebead000) libm.so.6 => /usr/lib/libm.so.6 (0x00007f57ebbaf000) libpcre.so.1 => /usr/lib/libpcre.so.1 (0x00007f57eb94c000) libssl.so.1.0.0 => /usr/lib/libssl.so.1.0.0 (0x00007f57eb6e0000) libcrypto.so.1.0.0 => /usr/lib/libcrypto.so.1.0.0 (0x00007f57eb2d6000) libdl.so.2 => /usr/lib/libdl.so.2 (0x00007f57eb0d2000) libz.so.1 => /usr/lib/libz.so.1 (0x00007f57eaebc000) libGeoIP.so.1 => /usr/lib/libGeoIP.so.1 (0x00007f57eac8d000) libgcc_s.so.1 => /usr/lib/libgcc_s.so.1 (0x00007f57eaa77000) libc.so.6 => /usr/lib/libc.so.6 (0x00007f57ea6ca000) /lib64/ld-linux-x86-64.so.2 (0x00007f57ec604000)
For files residing in
/usr/lib you may try the following one-liner:
# cp $(ldd /usr/bin/nginx | grep /usr/lib/ | sed -sre 's/(.+)(\/usr\/lib\/\S+).+/\2/g') $JAIL/usr/lib
And the following for
# cp /lib64/ld-linux-x86-64.so.2 $JAIL/lib
linux-vdso.so: it is not a real library and does not exist in
Copy over some miscellaneous but necessary libraries and system files.
# cp /usr/lib/libnss_* $JAIL/usr/lib # cp -rfvL /etc/{services,localtime,nsswitch.conf,nscd.conf,protocols,hosts,ld.so.cache,ld.so.conf,resolv.conf,host.conf,nginx} $JAIL/etc
Create restricted user/group files for the chroot. This way only the users needed for the chroot to function exist as far as the chroot knows, and none of the system users/groups are leaked to attackers should they gain access to the chroot.
http:x:33: nobody:x:99:
http:x:33:33:http:/:/bin/false nobody:x:99:99:nobody:/:/bin/false
http:x:14871:::::: nobody:x:14871::::::
http::: nobody:::
# touch $JAIL/etc/shells # touch $JAIL/run/nginx.pid
Finally make set very restrictive permissions. As much as possible should be owned by root and set unwritable.
# chown -R root:root $JAIL/ # chown -R http:http $JAIL/www # chown -R http:http $JAIL/etc/nginx # chown -R http:http $JAIL/var/{log,lib}/nginx # chown http:http $JAIL/run/nginx.pid # find $JAIL/ -gid 0 -uid 0 -type d -print | xargs chmod -rw # find $JAIL/ -gid 0 -uid 0 -type d -print | xargs chmod +x # find $JAIL/etc -gid 0 -uid 0 -type f -print | xargs chmod -x # find $JAIL/usr/bin -type f -print | xargs chmod ug+rx # find $JAIL/ -group http -user http -print | xargs chmod o-rwx # chmod +rw $JAIL/tmp # chmod +rw $JAIL/run
If your server will bind port 80 (or any other port in range [1-1023]), give the chrooted executable permission to bind these ports without root.
# setcap 'cap_net_bind_service=+ep' $JAIL/usr/bin/nginx
Modify nginx.service to start chroot
Before modifying the
nginx.service unit file, it may be a good idea to copy it to
/etc/systemd/system/ since the unit files there take priority over those in
/usr/lib/systemd/system/. This means upgrading nginx would not modify your custom .service file.
# cp /usr/lib/systemd/system/nginx.service /etc/systemd/system/nginx.service
The systemd unit must be changed to start up nginx in the chroot, as the http user, and store the pid file in the chroot.
[Unit] Description=A high performance web server and a reverse proxy server After=syslog.target network.target [Service] Type=forking PIDFile=/srv/http/run/nginx.pid ExecStartPre=/usr/bin/chroot --userspec=http:http /srv/http /usr/bin/nginx -t -q -g 'pid /run/nginx.pid; daemon on; master_process on;' ExecStart=/usr/bin/chroot --userspec=http:http /srv/http /usr/bin/nginx -g 'pid /run/nginx.pid; daemon on; master_process on;' ExecReload=/usr/bin/chroot --userspec=http:http /srv/http /usr/bin/nginx -g 'pid /run/nginx.pid; daemon on; master_process on;' -s reload ExecStop=/usr/bin/chroot --userspec=http:http /srv/http /usr/bin/nginx -g 'pid /run/nginx.pid;' -s quit [Install] WantedBy=multi-user.target
You can now safely get rid of the non-chrooted nginx installation.
# pacman -Rsc nginx
If you do not remove the non-chrooted nginx installation, you may want to make sure that the running nginx process is in fact the chrooted one. You can do so by checking where
/proc/PID/root symmlinks to. If should link to
/srv/http instead of
# ps -C nginx | awk '{print $1}' | sed 1d | while read -r PID; do ls -l /proc/$PID/root; done
Tips and tricks
Running unprivileged using systemd
Edit nginx.service and set the
User and optionally
Group options under
[Service] User=user Group=group
We can harden the service against ever elevating privileges:
[Service] ... NoNewPrivileges=yes
Then we need to ensure that
user has access to everything it needs:
- Port
Linux does not permit non-
rootprocesses to bind to ports below 1024 by default. A port above 1024 can be used:
server { listen 8080; }Tip: If you want nginx accessible on port 80 or 443, configure your firewall to redirect requests from 80 or 443 to the ports nginx listens to.
Or you may grant the nginx process the CAP_NET_BIND_SERVICE capability which will allow it to bind to ports below 1024:
[Service] ... CapabilityBoundingSet= CapabilityBoundingSet=CAP_NET_BIND_SERVICE AmbientCapabilities= AmbientCapabilities=CAP_NET_BIND_SERVICE
- PID file
nginx uses
/run/nginx.pidby default. We can create a directory that user has write access to and place our PID file in there. An example using systemd-tmpfiles:
d /run/nginx 0775 root group - -
Run the configuration:
# systemd-tmpfiles --create
Edit the PID values based on the original
[Service] ... PIDFile=/run/nginx/nginx.pid ExecStart= ExecStart=/usr/bin/nginx -g 'pid /run/nginx/nginx.pid; error_log stderr;' ExecReload= ExecReload=/usr/bin/nginx -s reload -g 'pid /run/nginx/nginx.pid;'
Some directories under
/var/lib/nginxneed to be bootstrapped by nginx running as
root. It is not necessary to start the whole server to do that, nginx will do it on a simple configuration test. So just run one of those and you are good to go.
- Log file & Directory Permissions
The step of running a configuration test will create a dangling
root-owned log. Remove logs in
/var/log/nginxto start fresh.
The nginx service user needs write permission to
/var/log/nginx. This may require changing permission and/or ownership of this directory on your system.
Now we should be good to go. Go ahead and start nginx, and enjoy your completely rootless nginx.
Alternative script for systemd
On pure systemd you can get advantages of chroot + systemd. [3] Based on set user group an pid on:
user http; pid /run/nginx.pid;
the absolute path of file is
[Unit] Description=nginx (Chroot) After=syslog.target network.target [Service] Type=forking PIDFile=/srv/http/run/nginx.pid RootDirectory=/srv/http ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf ExecReload=/usr/sbin/nginx -c /etc/nginx/nginx.conf -s reload ExecStop=/usr/sbin/nginx -c /etc/nginx/nginx.conf -s stop [Install] WantedBy=multi-user.target
It is not necesary to set the default location, nginx loads at default
-c /etc/nginx/nginx.conf, but it is a good idea though.
Alternatively you can run only
ExecStart as chroot with parameter
RootDirectoryStartOnly set as
yes (see systemd.service(5)) or start it before mount point as effective or a systemd path (see systemd.path(5)) is available.
[Unit] Description=nginx (Chroot) path [Path] PathExists=/srv/http/site/Public_html [Install] WantedBy=default.target
Enable the created
nginx.path and change the
WantedBy=default.target to
WantedBy=nginx.path in
PIDFile in unit file allows systemd to monitor process (absolute path required). If it is undesired, you can change to default one-shot type, and delete the reference from the unit file.
Nginx beautifier
nginxbeautifierAUR is a commandline tool used to beautify and format nginx configuration files.
Better headers management
Nginx has a rather unintuitive header management system where headers can only be defined in one context, any other headers are ignored. To remedy this we can install the headers-more-nginx module.
Install the package nginx-mod-headers-more package. This will install the module to
/usr/lib/nginx/modules directory.
To load the module add the following to the top of your main nginx configuration file.
load_module "/usr/lib/nginx/modules/ngx_http_headers_more_filter_module.so"; ...
Configuration validation
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Accessing local IP redirects to localhost
Solution from the Arch Linux forum.
/etc/nginx/nginx.conf locate the
server_name localhost line without a
# in front of it, and add below:
server_name_in_redirect off;
Default behavior is that nginx redirects any requests to the value given as
server_name in the config.
This is because the FastCGI server has not been started, or the socket used has wrong permissions.
Try out this answer to fix the 502 error.
In Archlinux, the configuration file mentioned in above link is
Error: No input file specified
1. Verify that variable
open_basedir in
/etc/php/php.ini contains the correct path specified as
root argument in
nginx.conf (usually
/usr/share/nginx/). When using PHP-FPM as FastCGI server for PHP, you may add
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:/tmp/:/proc/"; in the
location block which aims for processing php file in
2. Another occasion is that, wrong
root argument in the
location ~ \.php$ section in
nginx.conf. Make sure the
root points to the same directory as it in
location / in the same server. Or you may just set root as global, do not define it in any location section.
3. Check permissions: e.g.
http for user/group,
755 for directories and
644 for files. Remember the entire path to the
html directory should have the correct permissions. See File permissions and attributes#Bulk chmod to bulk modify a directory tree.
4. You do not have the
SCRIPT_FILENAME containing the full path to your scripts. If the configuration of nginx (
fastcgi_param SCRIPT_FILENAME) is correct, this kind of error means php failed to load the requested script. Usually it is simply a permissions issue, you can just run php-cgi as root:
# spawn-fcgi -a 127.0.0.1 -p 9000 -f /usr/bin/php-cgi
or you should create a group and user to start the php-cgi:
# groupadd www # useradd -g www www # chmod +w /srv/www/nginx/html # chown -R www:www /srv/www/nginx/html # spawn-fcgi -a 127.0.0.1 -p 9000 -u www -g www -f /usr/bin/php-cgi
5. If you are running php-fpm with chrooted nginx ensure
chroot is set correctly within
/etc/php-fpm/php-fpm.d/www.conf (or
/etc/php-fpm/php-fpm.conf if working on older version)
Warning: Could not build optimal types_hash
When starting the
nginx.service, the process might log the message:
[warn] 18872#18872: could not build optimal types_hash, you should increase either types_hash_max_size: 1024 or types_hash_bucket_size: 64; ignoring types_hash_bucket_size
To fix this warning, increase the values for these keys inside the
http block [4] [5]:
http { types_hash_max_size 4096; server_names_hash_bucket_size 128; ... }
Cannot assign requested address
The full error from
systemctl status nginx.service is
[emerg] 460#460: bind() to A.B.C.D:443 failed (99: Cannot assign requested address)
Even, if your nginx unit-file is configured to run after
network.target with systemd, nginx may attempt to listen at an address that is configured but not added to any interface yet. Verify that this the case by manually running start for nginx (thereby showing the IP address is configured properly). Configuring nginx to listen to any address will resolve this issue. Now if your use case requires listening to a specific address, one possible solution is to reconfigure systemd.
To start nginx after all configured network devices are up and assigned an IP address, append
network-online.target to
After= within
nginx.service and start/enable


text:
Conservation and Environment in Costa Rica: Monthly Updates
Conservation in Costa Rica - Monthly Update August 2010
August was another busy month for us here in Costa Rica with another big group of volunteers staying with us for half the month. With lots of work to do in general we kept everyone very busy!
A few months ago Eduardo, our Biologist, joined our team here in Barra Honda and quickly set to work organising all the data we had collected and setting everything straight with our 3 main investigations, he also began identifying more projects we could set up in the near future and extensions of current projects. After a couple of weeks he gave me a detailed list of about 30 new projects that we need to start in the park and the preferred order that we should do them.
We selected two new projects for the moment, which are extensions of our current investigation projects, things that are designed to give us more detailed information on the areas we are working on and that will help us understand why we have the results we do. The first of these projects is called a habitat description project, the basic idea of this project is that when we place the cameras, butterfly traps or mist nets in any area we need to know what is there that is either attracting or not attracting the wildlife, so we go in to these areas and start looking for nests, water, fruiting trees, flowers, animal trails, animal tracks and many other things.
All of this information has a certain value and with some calculations you can the work out a predicted wildlife abundance for a certain area which we then compare with the results we have gathered to see if they are the same, if they are different then we have to go back to the area and monitor it again and try to see if we can find what is attracting or disturbing the wildlife from that area so we can either protect it better or make changes to it to help bring the wildlife back to the area.
The second new project is an extension of the bat identification project. One of the main thoughts about the bat populations in Barra Honda is that they live in the many caves and rock formations we have in the area, this is true in most cases but we have also captured many species of bats that are known to live outside of the caves. The new project is a Bat Nest Location project, we are going out to areas around the park, mainly around the areas we have been doing the bat project in the past, and trying to locate as many of the bat nests that we can, these can be found under leaves, in trees, under rocks and a few other locations as well.
With this information we are able to better understand the movement of bat populations around the park and it will be very useful to us in the future, we plan on expanding our project slightly next year to focus mainly on capturing as many individuals as possible and marking them all so we can begin to locate nesting sites, flight paths and feeding grounds so we can be sure that these areas are protected as well as possible.
One of our biggest community related projects over the last two years has been working on the park's recreation area (football field) and restoring it to usable conditions, we started this project about two years ago and have finally got to the finishing point, we only need to do a couple of small things in the dry season, flatten it out a little and repair a small area where the water is running through part of the field. The idea of this project is to provide a free area for people to use inside the park's grounds for kids just playing a quick game to full on organised games with other parks and communities in the area.
As you can see in the photo provided and if you look back through a few other reports you can see the contrast in quality, the ground is now covered in grass and has a very small percentage of weeds and other things that we need to get rid of. We hope that when the weather starts to dry out again we can organise the first official use of the field, we have the vision of having the next world cup here but I don't think that's going to work, so a Costa Rica National Park Championship might be the next best thing!
The weather over the last few weeks here in the south west of Costa Rica has been absolutely awful, although I'm sure some of you have worse climates in your home countries for us we think it's awful when the temperature is below 25C and it rains for more than a couple of hours a day.
August has been the wettest month of the year so far and it's looking like it's going to be worse next month too, we get a lot of rain here from tropical depressions in the Pacific and Caribbean oceans which as some of you may know have been a lot stronger and more regular than normal this year. Luckily we live on a hill so we have no risk of flooding but it does mean that we have to do a lot more maintenance work on the roads and trails in the park than normal.
The main problems that we face are that that with the amount of rain and the force that the water gathers on its downhill journey to the bottom of the hill it drags with it a lot of sand, stones and dirt which get stuck along various parts of the trail and create blockages which divert the water on to the main part of the trail and destroy the trail itself.
The main tasks that we have been concentrating on are clearing the drainage channels along the trails and then on a few points we have had to dig out the whole road and re-build it with a rock base to help deal with drainage problems in really wet areas. These jobs have been really hard work for everyone, but the difference it has made is very impressive, two areas in particular which were basically one meter deep mud pits are now among the best parts of the trail in the whole park! That's how good we are!
Richard Munday
Conservation Coordinator
Barra Honda National Park
August 2010


text:
Policy-makers must rethink economic growth, promote social equity and ensure environmental protection, says IUCN (International Union for Conservation of Nature) at the United Nations Conference on Sustainable Development (UNCSD). Among the key issues are the green economy and an institutional framework in the context of sustainable development and poverty eradication.
"Nature is still the missing link in Rio+20 discussions, yet sustainable development cannot be achieved without it,'" says Julia Marton-Lefèvre, IUCN Director General. "Nature can and does provide solutions to development challenges such as climate change, and food, water and energy security. It is time governments included nature in development strategies."
IUCN supports socio and economic development that places nature at its center and adopts measures that ensure justice. This includes critical issues such as decent jobs, energy, sustainable development as the answer to economic and financial crises, food security, water, oceans, and disaster readiness. Social equity and inclusiveness are overarching principles of sustainable development strategies, according to IUCN.
Rio+20 is an important opportunity to promote investments in enhancing the natural assets on which poor communities depend. For example, the value of forests and the direct benefits they currently provide to approximately 1.6 billion of the rural poor is estimated at IUCN at US $130 billion per year. This is almost the same amount of money that goes into Official Development Assistance (ODA).
"Landscape restoration will help countries meet international commitments to slow, halt and reverse forest and carbon loss and to restore degraded ecosystems. By focusing on both forest and agricultural lands it will generate income worth billions of dollars each year to national and local economies and provide food security to millions of forest-dependent people," says Stewart Maginnis, Global Director, Nature Based Solutions Group. "This should include concerted efforts to invest in the Bonn Challenge to restore 150 million hectares of lost forests and degraded lands by 2020."
IUCN urges governments to do more in terms of policy and institutional coherence. Understanding the interaction between nature and climate change will generate stronger policies and commitments.
"Rio+20 is the place to give a new impetus to international cooperation," says Constanza Martinez, Senior Policy Officer, Global Policy Unit. "States, civil society organizations and the private sector are well aware of what needs to be done—there must be a commitment to working together towards the same goal: protecting nature so it can protect us. We must move towards a more resilient planet."


text:
As a sampler, its cherry-picking of other styles bodes well for those apprehensive of the straight-up house album. The production is sharp, with lavish pads, lambent synths, the odd uplifting string section and full-bodied bass, setting a range from blissed-out to grinding. The bouncing Moog line of "Space Balloon" is a good example of the latter, though it's punctuated by brief interludes of sweeping, sonic lasers that elevate the funk to higher planes. If Trago manages to stay on these over the course of 15 tracks, then Iris should be a treat.
Published /
Tue / 22 Mar 2011
Words /
Jack Haighton
Tracklist /
A1 Being With You
A2 Space Balloon
B What You Do


text:
GNU.WIKI: The GNU/Linux Knowledge Base
[HOME] [PHP Manual] [HowTo] [ABS] [MAN1] [MAN2] [MAN3] [MAN4] [MAN5] [MAN6] [MAN7] [MAN8] [MAN9]
[0-9] [Aa] [Bb] [Cc] [Dd] [Ee] [Ff] [Gg] [Hh] [Ii] [Jj] [Kk] [Ll] [Mm] [Nn] [Oo] [Pp] [Qq] [Rr] [Ss] [Tt] [Uu] [Vv] [Ww] [Xx] [Yy] [Zz]
Bio::Restriction::Enzyme - A single restriction endonuclease (cuts DNA
at specific locations)
# set up a single restriction enzyme. This contains lots of
# information about the enzyme that is generally parsed from a
# rebase file and can then be read back
use Bio::Restriction::Enzyme;
# define a new enzyme with the cut sequence
my $re=Bio::Restriction::Enzyme->new
(-enzyme=>'EcoRI', -seq=>'G^AATTC');
# once the sequence has been defined a bunch of stuff is calculated
# for you:
# find where the enzyme cuts after ...
my $ca=$re->cut;
# ... and where it cuts on the opposite strand
my $oca = $re->complementary_cut;
# get the cut sequence string back.
# Note that site will return the sequence with a caret
my $with_caret=$re->site; #returns 'G^AATTC';
# but it is also a Bio::PrimarySeq object ....
my $without_caret=$re->seq; # returns 'GAATTC';
# ... and so does string
$without_caret=$re->string; #returns 'GAATTC';
# what is the reverse complement of the cut site
my $rc=$re->revcom; # returns 'GAATTC';
# now the recognition length. There are two types:
# recognition_length() is the length of the sequence
# cutter() estimate of cut frequency
my $recog_length = $re->recognition_length; # returns 6
# also returns 6 in this case but would return
# 4 for GANNTC and 5 for RGATCY (BstX2I)!
# is the sequence a palindrome - the same forwards and backwards
my $pal= $re->palindromic; # this is a boolean
# is the sequence blunt (i.e. no overhang - the forward and reverse
# cuts are the same)
print "blunt
" if $re->overhang eq 'blunt';
# Overhang can have three values: "5'", "3'", "blunt", and undef
# Direction is very important if you use Klenow!
my $oh=$re->overhang;
# what is the overhang sequence
my $ohseq=$re->overhang_seq; # will return 'AATT';
# is the sequence ambiguous - does it contain non-GATC bases?
my $ambig=$re->is_ambiguous; # this is boolean
print "Stuff about the enzyme
Cuts after: $ca
"Complementary cut: $oca
$with_caret or
" $without_caret
print "Reverse of the sequence: $rc
Recognition length: $recog_length
"Is it palindromic? $pal
print "The overhang is $oh with sequence $ohseq
"And is it ambiguous? $ambig
### THINGS YOU CAN SET, and get from rich REBASE file
# get or set the isoschizomers (enzymes that recognize the same
# site)
$re->isoschizomers('PvuII', 'SmaI'); # not really true :)
print "Isoschizomers are ", join " ", $re->isoschizomers, "
# get or set the methylation sites
$re->methylation_sites(2); # not really true :)
print "Methylated at ", join " ", keys %{$re->methylation_sites},"
#Get or set the source microbe
$re->microbe('E. coli');
print "It came from ", $re->microbe, "
# get or set the person who isolated it
$re->source("Rob"); # not really true :)
print $re->source, " sent it to us
# get or set whether it is commercially available and the company
# that it can be bought at
$re->vendors('NEB'); # my favorite
print "Is it commercially available :";
print $re->vendors ? "Yes" : "No";
print " and it can be got from ", join " ",
$re->vendors, "
# get or set a reference for this
$re->reference('Edwards et al. J. Bacteriology');
print "It was not published in ", $re->reference, "
# get or set the enzyme name
print "The name of EcoRI is not really ", $re->name, "
This module defines a single restriction endonuclease. You can use it
to make custom restriction enzymes, and it is used by
Bio::Restriction::IO to define enzymes in the New England Biolabs
REBASE collection.
Use Bio::Restriction::Analysis to figure out which enzymes are
available and where they cut your sequence.
At least three geneticaly and biochamically distinct restriction
modification systems exist. The cutting components of them are known as
restriction endonuleases. The three systems are known by roman
numerals: Type I, II, and III restriction enzymes.
REBASE format 'cutzymes'(#15) lists enzyme type in its last field. The
categories there do not always match the the following short
descriptions of the enzymes types. See
http://it.stlawu.edu/~tbudd/rmsyst.php for a better overview.
Type I systems recognize a bipartite asymetrical sequence of 5-7 bp:
---TGA*NnTGCT--- * = methylation sites
---ACTNnA*CGA--- n = 6 for EcoK, n = 8 for EcoB
The cleavage site is roughly 1000 (400-7000) base pairs from the
recognition site.
The simplest and most common (at least commercially).
Site recognition is via short palindromic base sequences that are 4-6
base pairs long. Cleavage is at the recognition site (but may
occasionally be just adjacent to the palindromic sequence, usually
within) and may produce blunt end termini or staggered, "sticky end"
The recognition site is a 5-7 bp asymmetrical sequence. Cleavage is ATP
dependent 24-26 base pairs downstream from the recognition site and
usually yields staggered cuts 2-4 bases apart.
I am trying to make this backwards compatible with
Bio::Tools::RestrictionEnzyme. Undoubtedly some things will break, but
we can fix things as we progress.....!
I have added another comments section at the end of this POD that
discusses a couple of areas I know are broken (at the moment)
· Convert vendors touse full names of companies instead of code
· Add regular expression based matching to vendors
· Move away from the archaic ^ notation for cut sites. Ideally I'd
totally like to remove this altogether, or add a method that adds it
in if someone really wants it. We should be fixed on a sequence,
number notation.
Mailing Lists
User feedback is an integral part of the evolution of this and other
Bioperl modules. Send your comments and suggestions preferably to one
of the Bioperl mailing lists. Your participation is much appreciated.
firstname.lastname@example.com - General discussion
http://bioperl.org/wiki/Mailing_lists - About the mailing lists
Please direct usage questions or support issues to the mailing list:
rather than to the module maintainer directly. Many experienced and
reponsive experts will be able look at the problem and quickly address
it. Please include a thorough description of the problem with code and
data examples if at all possible.
Reporting Bugs
Report bugs to the Bioperl bug tracking system to help us keep track
the bugs and their resolution. Bug reports can be submitted via the
Rob Edwards, firstname.lastname@example.com
Heikki Lehvaslaiho, heikki-at-bioperl-dot-org Peter Blaiklock,
firstname.lastname@example.com Mark A. Jensen, maj-at-fortinbras-dot-us
Copyright (c) 2003 Rob Edwards.
Some of this work is Copyright (c) 1997-2002 Steve A. Chervitz. All
Rights Reserved. This module is free software; you can redistribute it
and/or modify it under the same terms as Perl itself.
Bio::Restriction::Analysis, Bio::Restriction::EnzymeCollection,
Methods beginning with a leading underscore are considered private and
are intended for internal use by this module. They are not considered
part of the public interface and are described here for documentation
purposes only.
Title : new
Function : Initializes the Enzyme object
Returns : The Restriction::Enzyme object
Argument : A standard definition can have several formats. For example:
$re->new(-enzyme='EcoRI', -seq->'GAATTC' -cut->'1')
Or, you can define the cut site in the sequence, for example
$re->new(-enzyme='EcoRI', -seq->'G^AATTC'), but you must use a caret
Or, a sequence can cut outside the recognition site, for example
$re->new(-enzyme='AbeI', -seq->'CCTCAGC' -cut->'-5/-2')
Other arguments:
-isoschizomers=>\@list a reference to an array of
known isoschizomers
-references=>$ref a reference to the enzyme
-source=>$source the source (person) of the enzyme
-commercial_availability=>@companies a list of companies
that supply the enzyme
-methylation_site=>\%sites a reference to hash that has
the position as the key and the type of methylation
as the value
-xln_sub => sub { ($self,$cut) = @_; ...; return $xln_cut },
a coderef to a routine that translates the input cut value
into Bio::Restriction::Enzyme coordinates
( e.g., for withrefm format, this might be
-xln_sub => sub { length( shift()->string ) + shift } )
A Restriction::Enzyme object manages its recognition sequence as a
Bio::PrimarySeq object.
The minimum requirement is for a name and a sequence.
This will create the restriction enzyme object, and define several
things about the sequence, such as palindromic, size, etc.
Title : name
Usage : $re->name($newval)
Function : Gets/Sets the restriction enzyme name
Example : $re->name('EcoRI')
Returns : value of name
Args : newvalue (optional)
This will also clean up the name. I have added this because some people
get confused about restriction enzyme names. The name should be One
upper case letter, and two lower case letters (because it is derived
from the organism name, eg. EcoRI is from E. coli). After that it is
all confused, but the numbers should be roman numbers not numbers,
therefore we'll correct those. At least this will provide some
standard, I hope.
Title : site
Usage : $re->site();
Function : Gets/sets the recognition sequence for the enzyme.
Example : $seq_string = $re->site();
Returns : String containing recognition sequence indicating
: cleavage site as in 'G^AATTC'.
Argument : n/a
Throws : n/a
Side effect: the sequence is always converted to upper case.
The cut site can also be set by using methods cut and
This will pad out missing sequence with N's. For example the enzyme
Acc36I cuts at ACCTGC(4/8). This will be returned as ACCTGCNNNN^
Note that the common notation ACCTGC(4/8) means that the forward strand
cut is four nucleotides after the END of the recognition site. The
forward cut() in the coordinates used here in Acc36I ACCTGC(4/8) is at
6+4 i.e. 10.
** This is the main setable method for the recognition site.
Title : revcom_site
Usage : $re->revcom_site();
Function : Gets/sets the complementary recognition sequence for the enzyme.
Example : $seq_string = $re->revcom_site();
Returns : String containing recognition sequence indicating
: cleavage site as in 'G^AATTC'.
Argument : none (sets on first call)
Throws : n/a
This is the same as site, except it returns the revcom site. For
palindromic enzymes these two are identical. For non-palindromic
enzymes they are not!
On set, this also handles setting the revcom_recog attribute.
See also site above.
Title : cut
Usage : $num = $re->cut(1);
Function : Sets/gets an integer indicating the position of cleavage
relative to the 5' end of the recognition sequence in the
forward strand.
For type II enzymes, sets the symmetrically positioned
reverse strand cut site by calling complementary_cut().
Returns : Integer, 0 if not set
Argument : an integer for the forward strand cut site (optional)
Note that the common notation ACCTGC(4/8) means that the forward strand
cut is four nucleotides after the END of the recognition site. The
forwad cut in the coordinates used here in Acc36I ACCTGC(4/8) is at 6+4
i.e. 10.
Note that REBASE uses notation where cuts within symmetic sites are
marked by '^' within the forward sequence but if the site is asymmetric
the parenthesis syntax is used where numbering ALWAYS starts from last
nucleotide in the forward strand. That's why AciI has a site usually
written as CCGC(-3/-1) actualy cuts in
In our notation, these locations are 1 and 3.
The cuts locations in the notation used are relative to the first (non-
N) nucleotide of the reported forward strand of the recognition
sequence. The following diagram numbers the phosphodiester bonds
(marked by + ) which can be cut by the restriction enzymes:
1 2 3 4 5 6 7 8 ...
... -5 -4 -3 -2 -1
Title : cuts_after
Usage : Alias for cut()
Title : complementary_cut
Usage : $num = $re->complementary_cut('1');
Function : Sets/Gets an integer indicating the position of cleavage
: on the reverse strand of the restriction site.
Returns : Integer
Argument : An integer (optional)
Throws : Exception if argument is non-numeric.
This method determines the cut on the reverse strand of the sequence.
For most enzymes this will be within the sequence, and will be set
automatically based on the forward strand cut, but it need not be.
Note that the returned location indicates the location AFTER the first
non-N site nucleotide in the FORWARD strand.
Title : type
Usage : $re->type();
Function : Get/set the restriction system type
Returns :
Argument : optional type: ('I'|II|III)
Restriction enzymes have been catezorized into three types. Some REBASE
formats give the type, but the following rules can be used to classify
the known enzymes:
1. Bipartite site (with 6-8 Ns in the middle and the cut site is > 50
nt away) => type I
2. Site length < 3 => type I
3. 5-6 asymmetric site and cuts >20 nt away => type III
4. All other => type II
There are some enzymes in REBASE which have bipartite recognition site
and cat far from the site but are still classified as type I. I've no
idea if this is really so.
Title : seq
Usage : $re->seq();
Function : Get the Bio::PrimarySeq.pm object representing
: the recognition sequence
Returns : A Bio::PrimarySeq object representing the
enzyme recognition site
Argument : n/a
Throws : n/a
Title : string
Usage : $re->string();
Function : Get a string representing the recognition sequence.
Returns : String. Does NOT contain a '^' representing the cut location
as returned by the site() method.
Argument : n/a
Throws : n/a
Title : recog
Usage : $enz->recog($recognition_sequence)
Function: Gets/sets the pure recognition site. Sets as
regexp if appropriate.
As for string(), the cut indicating carets (^)
are expunged.
Example :
Returns : value of recog (a scalar)
Args : on set, new value (a scalar or undef, optional)
Title : revcom_recog
Usage : $enz->revcom_recog($recognition_sequence)
Function: Gets/sets the pure reverse-complemented recognition site.
Sets as regexp if appropriate.
As for string(), the cut indicating carets (^) are expunged.
Example :
Returns : value of recog (a scalar)
Args : on set, new value (a scalar or undef, optional)
Title : revcom
Usage : $re->revcom();
Function : Get a string representing the reverse complement of
: the recognition sequence.
Returns : String
Argument : n/a
Throws : n/a
Title : recognition_length
Usage : $re->recognition_length();
Function : Get the length of the RECOGNITION sequence.
This is the total recognition sequence,
inluding the ambiguous codes.
Returns : An integer
Argument : Nothing
See also: non_ambiguous_length
Title : cutter
Usage : $re->cutter
Function : Returns the "cutter" value of the recognition site.
This is a value relative to site length and lack of
ambiguity codes. Hence: 'RCATGY' is a five (5) cutter site
and 'CCTNAGG' a six cutter
This measure correlates to the frequency of the enzyme
cuts much better than plain recognition site length.
Example : $re->cutter
Returns : integer or float number
Args : none
Why is this better than just stripping the ambiguos codes? Think about
it like this: You have a random sequence; all nucleotides are equally
probable. You have a four nucleotide re site. The probability of that
site finding a match is one out of 4^4 or 256, meaning that on average
a four cutter finds a match every 256 nucleotides. For a six cutter,
the average fragment length is 4^6 or 4096. In the case of ambiguity
codes the chances are finding the match are better: an R (A|T) has 1/2
chance of finding a match in a random sequence. Therefore, for RGCGCY
the probability is one out of (2*4*4*4*4*2) which exactly the same as
for a five cutter! Cutter, although it can have non-integer values
turns out to be a useful and simple measure.
From bug 2178: VHDB are ambiguity symbols that match three different
nucleotides, so they contribute less to the effective recognition
sequence length than e.g. Y which matches only two nucleotides. A
symbol which matches n of the 4 nucleotides has an effective length of
1 - log(n) / log(4).
Title : is_palindromic
Alias : palindromic
Usage : $re->is_palindromic();
Function : Determines if the recognition sequence is palindromic
: for the current restriction enzyme.
Returns : Boolean
Argument : n/a
Throws : n/a
A palindromic site (EcoRI):
Title : is_symmetric
Alias : symmetric
Usage : $re->is_symmetric();
Function : Determines if the enzyme is a symmetric cutter
Returns : Boolean
Argument : none
A symmetric but non-palindromic site (HindI):
Title : overhang
Usage : $re->overhang();
Function : Determines the overhang of the restriction enzyme
Returns : "5'", "3'", "blunt" of undef
Argument : n/a
Throws : n/a
A blunt site in SmaI returns "blunt"
A 5' overhang in EcoRI returns "5'"
A 3' overhang in KpnI returns "3'"
Title : overhang_seq
Usage : $re->overhang_seq();
Function : Determines the overhang sequence of the restriction enzyme
Returns : a Bio::LocatableSeq
Argument : n/a
Throws : n/a
I do not think it is necessary to create a seq object of these.
Note: returns empty string for blunt sequences and undef for ones that
we don't know. Compare these:
A blunt site in SmaI returns empty string
A 5' overhang in EcoRI returns "AATT"
A 3' overhang in KpnI returns "GTAC"
Note that you need to use method overhang to decide whether it is a 5'
or 3' overhang!!!
Note: The overhang stuff does not work if the site is asymmetric!
Title : compatible_ends
Usage : $re->compatible_ends($re2);
Function : Determines if the two restriction enzyme cut sites
have compatible ends.
Returns : 0 if not, 1 if only one pair ends match, 2 if both ends.
Argument : a Bio::Restriction::Enzyme
Throws : unless the argument is a Bio::Resriction::Enzyme and
if there are Ns in the ovarhangs
In case of type II enzymes which which cut symmetrically, this function
can be considered to return a boolean value.
Title : is_ambiguous
Usage : $re->is_ambiguous();
Function : Determines if the restriction enzyme contains ambiguous sequences
Returns : Boolean
Argument : n/a
Throws : n/a
Additional methods from Rebase
Title : is_prototype
Usage : $re->is_prototype
Function : Get/Set method for finding out if this enzyme is a prototype
Example : $re->is_prototype(1)
Returns : Boolean
Args : none
Prototype enzymes are the most commonly available and usually first
enzymes discoverd that have the same recognition site. Using only
prototype enzymes in restriction analysis avoids redundancy and speeds
things up.
Title : is_neoschizomer
Usage : $re->is_neoschizomer
Function : Get/Set method for finding out if this enzyme is a neoschizomer
Example : $re->is_neoschizomer(1)
Returns : Boolean
Args : none
Neoschizomers are distinguishable from the prototype enzyme by having a
different cleavage pattern. Note that not all formats report this
Title : prototype_name
Alias : prototype
Usage : $re->prototype_name
Function : Get/Set method for the name of prototype for
this enzyme's recognition site
Example : $re->prototype_name(1)
Returns : prototype enzyme name string or an empty string
Args : optional prototype enzyme name string
If the enzyme itself is the prototype, its own name is returned. Not
to confuse the negative result with an unset value, use method
This method is called prototype_name rather than prototype, because it
returns a string rather than on object.
Title : isoschizomers
Alias : isos
Usage : $re->isoschizomers(@list);
Function : Gets/Sets a list of known isoschizomers (enzymes that
recognize the same site, but don't necessarily cut at
the same position).
Arguments : A reference to an array that contains the isoschizomers
Returns : A reference to an array of the known isoschizomers or 0
if not defined.
This has to be the hardest name to spell, so now you can use the alias
'isos'. Added for compatibility to REBASE
Title : purge_isoschizomers
Alias : purge_isos
Usage : $re->purge_isoschizomers();
Function : Purges the set of isoschizomers for this enzyme
Arguments :
Returns : 1
Title : methylation_sites
Usage : $re->methylation_sites(\%sites);
Function : Gets/Sets known methylation sites (positions on the sequence
that get modified to promote or prevent cleavage).
Arguments : A reference to a hash that contains the methylation sites
Returns : A reference to a hash of the methylation sites or
an empty string if not defined.
There are three types of methylation sites:
· (6) = N6-methyladenosine
· (5) = 5-methylcytosine
· (4) = N4-methylcytosine
These are stored as 6, 5, and 4 respectively. The hash has the
sequence position as the key and the type of methylation as the value.
A negative number in the sequence position indicates that the DNA is
methylated on the complementary strand.
Note that in REBASE, the methylation positions are given Added for
compatibility to REBASE.
Title : purge_methylation_sites
Usage : $re->purge_methylation_sites();
Function : Purges the set of methylation_sites for this enzyme
Arguments :
Returns :
Title : microbe
Usage : $re->microbe($microbe);
Function : Gets/Sets microorganism where the restriction enzyme was found
Arguments : A scalar containing the microbes name
Returns : A scalar containing the microbes name or 0 if not defined
Added for compatibility to REBASE
Title : source
Usage : $re->source('Rob Edwards');
Function : Gets/Sets the person who provided the enzyme
Arguments : A scalar containing the persons name
Returns : A scalar containing the persons name or 0 if not defined
Added for compatibility to REBASE
Title : vendors
Usage : $re->vendor(@list_of_companies);
Function : Gets/Sets the a list of companies that you can get the enzyme from.
Also sets the commercially_available boolean
Arguments : A reference to an array containing the names of companies
that you can get the enzyme from
Returns : A reference to an array containing the names of companies
that you can get the enzyme from
Added for compatibility to REBASE
Title : purge_vendors
Usage : $re->purge_references();
Function : Purges the set of references for this enzyme
Arguments :
Returns :
Title : vendor
Usage : $re->vendor(@list_of_companies);
Function : Gets/Sets the a list of companies that you can get the enzyme from.
Also sets the commercially_available boolean
Arguments : A reference to an array containing the names of companies
that you can get the enzyme from
Returns : A reference to an array containing the names of companies
that you can get the enzyme from
Added for compatibility to REBASE
Title : references
Usage : $re->references(string);
Function : Gets/Sets the references for this enzyme
Arguments : an array of string reference(s) (optional)
Returns : an array of references
Use purge_references to reset the list of references
This should be a Bio::Biblio object, but its not (yet)
Title : purge_references
Usage : $re->purge_references();
Function : Purges the set of references for this enzyme
Arguments :
Returns : 1
Title : clone
Usage : $re->clone
Function : Deep copy of the object
Arguments : -
Returns : new Bio::Restriction::EnzymeI object
This works as long as the object is a clean in-memory object using
scalars, arrays and hashes. You have been warned.
If you have module Storable, it is used, otherwise local code is used.
Todo: local code cuts circular references.
Title : _expand
Function : Expand nucleotide ambiguity codes to their representative letters
Returns : The full length string
Arguments : The string to be expanded.
Stolen from the original RestrictionEnzyme.pm
All copyrights belong to their respective owners. Other content (c) 2014-2018, GNU.WIKI. Please report site errors to firstname.lastname@example.com load time: 0.090 seconds. Last modified: November 04 2018 12:49:43.


text:
I apologize for posting so late today! I just got back last night from three days at Girl Scout camp with my daughter and once I rinsed off 36 hours worth of bug spray, sunscreen and dirt and had a cold bottle of beer, I crashed until 1:30 this afternoon.
Somehow, I survived - mainly because of the amazing staff and the other wonderful moms and girls I bunked with. We built fires, cooked outdoors, went on a two-hour trailride (my horse was Zeke, Margaret had Flame - which was a much cooler name, I thought), swam (right after breakfast both days - and that's when you get your shower in too only to load up on bugspray right afterwards), ate s'mores (you know, I don't think it's possible to have too many s'mores - do you?), hiked for - oh - about 10,000 miles, participated in the ropes course and archery, sang silly songs and played even sillier games, scratched mosquito bites, fought off gnat swarms (after swallowing enough to actually benefit from the protein), received the 5-Year Award at the final campfire ceremony and enjoyed the gorgeous weather.
I'm sunburned, tired, Diet Coke deprived, covered in bug bites, my butt hurts (2 hours in the saddle is A LOT) and couldn't be happier.
Weird isn't it?
One of the many great things that happened was meeting emerging, young writers - not just among the kids, but also among the counselors. Shutter and Weaver (counselors go incognito with aliases, an idea that has probably saved their sanity more than once) were awesome young women with real futures in writing. I had donated my books to the camp at the beginning of the season for the staff to read in their downtime and they really enjoyed that. I felt like somewhat a rockstar the way they said, "I've never met a real author before!" Of course, I didn't want to break the mood by telling them that I'm really just a robot held together with rocks and chewing gum.
The camp staff are amazing. They never complain, are always upbeat (especially when they wake you up at 6:30am). We had this counselor named Oatmeal who was hilarious and went waaaaay above and beyond for her campers on several occaisions. It was Weaver's first time as a counselor - but you'd never know it from her knowledge and enthusiasm. Many of the counselors are from other countries - I met young women from the Netherlands, Ireland, Great Britain, Australia and Hungary. THAT IS SOOOO COOL!!!
But the real heroes are the moms who take time off from jobs, their families and other responsibilities to spend time with their daughters and impacting other girls. It really makes a difference. I've made so many lifelong friends it's unreal. We stay in touch and see each other every year. It's a major bonding experience when you are all on the back steps of your cabin using your water bottle to brush your teeth twice a day. After all these years, I can spit pretty far - a skill I never imagined I'd have.
It's also the one time a year Margaret allows us to dress alike. Well, it's more forced on her than anything. But after 5 years of camp together, we have quite a wardrobe of Camp Conestoga t-shirts. It's pretty dorky, I know, but that's kind of our trademark and the staff remembers that, "Hey! Aren't you the guys who always dress alike?" I like to think the laughter is complimentary.
Now I'm back to working on Coney's book, which I've tentatively titled (nice alliteration, eh?) I KILLED HIM MY WAY. So it's back to the real world. Sigh. I miss it a little. Maybe tonight I'll sit on my deck and let the mosquitos turn me into a blood buffet - just for old times.
The Assassin