WOAPA's students and Adult Singing Group are delighted to have been invited to perform at this year's Carol Concert hosted by Witney Town's Mayor: Peter Dorward.
The concert is one of the highlights of the Mayor's yearly calendar and not one to miss!
This year, the concert will be followed by a Lantern Parade through Church Green to The Market Square, where there will be some community carol singing and entertainment.


text:
/* global toastr:false, moment:false */
(function() {
    'use strict';

    angular
        .module('app.core')
        .constant('toastr', toastr)
        .constant('moment', moment)
        .constant('API', {
            events: '/api/events',
            models: '/api/models',
            modelImport: '/api/models/import',
            model: function(modelID) { return '/api/models/' + modelID; },
            modelExport: function(modelID) { return '/api/models/' + modelID + '/export'; },
            items: function(modelID) { return '/api/models/' + modelID + '/items'; },
            item: function(modelID, itemID) { return '/api/models/' + modelID + '/items/' + itemID; },
            modelDiff: function(modelID, version) { return '/api/models/' + modelID + '/history/diff?version='+version },
            revertModel: function(modelID, version) { return '/api/models/' + modelID + '/history/revert?version=' + version },
            runtimeKinds: '/api/runtimes/kinds',
            runtimeHandler: '/api/runtimes',
            runtimeInstance: function(runtimeID) { return '/api/runtimes/' + runtimeID; },
            stopRuntimeInstance: function(runtimeID) { return '/api/runtimes/' + runtimeID + '/stop'; },
            serviceHandler: '/api/services',
            serviceInstance: function(serviceInstanceID) { return '/api/services/' + serviceInstanceID; },
            newID: '/api/services/newid'
        });
})();

redpajama_set_name: RedPajamaGithub


text:
This article includes a list of references, but its sources remain unclear because it has insufficient inline citations. Please help to improve this article by introducing more precise citations. (March 2009) (Learn how and when to remove this template message)
KL-7 Cipher Machine [1]
Date invented
NSA, NATO
Cipher Machine[2]
Italian, English
The TSEC/KL-7 (also known as high-level NSA secret military codename Adonis)[1] was an off-line non-reciprocal rotor encryption machine.[3]:p.33ff[4] The KL-7 had rotors to encrypt the text, most of which moved in a complex pattern, controlled by notched rings. The non-moving rotor was in fourth from the left of the stack. The KL-7 with 12 rotors also encrypted the message indicator and was code named ADONIS.
1 History and development
3 Product details
History and development[edit]
In 1952, the machine was introduced by AFSA's successor, the U.S. National Security Agency, in the US Army, Navy and Air Force. In the early 1960s, the AFSAM-7 was renamed TSEC/KL-7, following the new standard crypto nomenclature. It was the most widely used crypto machine in the US armed forces until the mid-1960s and was the first machine capable of supporting large networks that was considered secure against known plaintext attack. Some 25,000 machines were in use in the mid-1960s.[3]:p.37 The KL-7 was also used by several NATO countries until 1983.
An 8-rotor version sent indicators in the clear and was code named POLLUX. The encrypted or decrypted output of the machine was printed on a small paper ribbon. It was the first cipher machine to use the re-entry (re-flexing) principle, discovered by Albert W. Small,[5] which re-introduces the encryption output back into the encryption process to re-encipher it again. The research for the new cipher machine, designated MX-507, was initiated in 1945 by the Army Security Agency (ASA) as a successor for the SIGABA and the less secure Hagelin M-209. Its development was turned over to the newly formed Armed Forces Security Agency (AFSA) in 1949. The machine was renamed AFSAM-7, which stands for Armed Forces Security Agency Machine No 7. It was the first crypto machine, developed under one centralized cryptologic organisation as a standard machine for all parts of the armed forces, and it was the first cipher machine to use electronics (vacuum tubes), apart from the British ROCKEX, which was developed during World War 2.
The KL-7 was designed for off-line operation. It was about the size of a Teletype machine and had a similar three-row keyboard, with shift keys for letters and figures. The KL-7 produced printed output on narrow paper strips that were then glued to message pads. When encrypting, it automatically inserted a space between five-letter code groups. One of the reasons for the five letter groups was messages might be given to a morse code operator. The number of five letter groups was easily verified when transmitted. There was an adaptor available, the HL-1/X22, that allowed 5-level Baudot punched paper tape from Teletype equipment to be read for decryption. The standard KL-7 had no ability to punch tapes. A variant of the KL-7, the KL-47, could also punch paper tape for direct input to teleprinters.
Both sides of a KL-7 rotor
Product details[edit]
Each rotor had 36 contacts. To establish a new encryption setting, operators would select a rotor and place it in a plastic outer ring at a certain offset. The ring and the offset to use for each position were specified in a printed key list. This process would be repeated eight times until all rotor positions were filled. Key settings were usually changed every day at midnight, GMT. The basket containing the rotors was removable, and it was common to have a second basket and set of rotors, allowing the rotors to be set up prior to key change. The old basket could then be kept intact for most of the day to decode messages sent the previous day, but received after midnight. Rotor wiring was changed every 1 to 3 years.[3]:p.36
The keyboard itself was a large sliding switch, also called permutor board. A signal, coming from a letter key, went through the rotors, back to the permutor board to continue to the printer. The KL-7 was non-reciprocal. Therefore, depending on the Encipher or Decipher position of the permutor board, the direction of the signal through the rotors was changed.
The rotor basket had two sets of connectors, two with 26 pins and two with 10 pins, at each end that mated with the main assembly. Both 26 pin connectors were connected to the keyboard to enable the switching of the signal direction through the rotors. Both 10 pin connectors on each side were hard-wired with each other. If a signal that entered on one of the 26 pins left the rotor pack on one of these 10 pins, that signal was redirected back into the rotors on the entry side to perform a new pass through the rotors. This loop-back, the so-called re-entry, created complex scrambling of the signal and could result in multiple passes through the rotor pack, depending on the current state of the rotor wiring.
There was also a switch pile-up under each movable rotor that was operated by cams on its plastic outer ring. Different outer rings had different arrangements of cams. The circuitry of the switches controlled solenoids which in turn enabled the movement of the rotors. The combination of cam rings and the controlling of a rotor by several switches created a most complex and irregular stepping. The exact wiring between switches and solenoids is still classified.
KL-7 on display at USAF Communications Agency museum. Rotors have been removed.
The KL-7 was largely replaced by electronic systems such as the KW-26 ROMULUS and the KW-37 JASON in the 1970s, but KL-7s were kept in service as backups and for special uses. In 1967, when John Anthony Walker (a sailor in the U.S. Navy) walked into the embassy of the Soviet Union in Washington, DC seeking employment as a spy, he carried with him a copy of a key list for the KL-47. KL-7s were compromised at other times as well. A unit captured by North Vietnam is on display at NSA's National Cryptologic Museum. The KL-7 was withdrawn from service in June 1983[1], and Canada's last KL-7-encrypted message was sent on June 30, 1983, "after 27 years of service."
The successor to the KL-7 was the KL-51, an off-line, paper tape encryption system that used digital electronics instead of rotors.
A set of KL-7 rotors
NSA encryption systems
Typex
^ Britannica (2005). Proc (2005) differs, saying that, "after the Walker family spy ring was exposed in the mid-1980s (1985)...immediately, all KL-7's were withdrawn from service"[6]
^ a b "KL-7". Cryptomuseum.com.
^ Proc, Jerry. "KL-7". Jproc.ca. Retrieved 25 July 2018.
^ a b c A History of U.S. Communications Security; the David G. Boak Lectures, National Security Agency (NSA), Volume I, 1973, partially released 2008, additional portions declassified October 14, 2015
^ Proc, Jerry. "KL-7". Jproc.ca.
^ Method and apparatus for cryptography
Jerry Proc's page on the KL-7, retrieved 2012-08-28.
NSA Crypto Almanac 50th Anniversary - The development of the AFSAM-7, retrieved 27 February 2011.
Technical details and history of the TSEC/KL-7, from Dirk Rijmenants' Cipher Machines & Cryptology, retrieved 27 February 2011.
Patent for Rotor Re-entry by Albert W Small, filed 1944 from Free Patents On-line, retrieved 27 February 2011.
"Cryptology", Encyclopædia Britannica. Retrieved 22 June 2005 from Encyclopædia Britannica Online.
Card attached to KL-51 on display at the National Cryptologic Museum, 2005.
TSEC/KL-7 with detailed information and many images on the Crypto Museum website
Accurate TSEC/KL-7 Simulator (Windows), on Dirk Rijmenants' Cipher Machines & Cryptology
Cipher machines
Rotor machines
M-125 Fialka
Hebern
HX-63
Lacida
Portex
SIGABA
SIGCUM
Bazeries cylinder
Cipher disk
Kryha
Jefferson disk
Reihenschieber
Scytale
5-UCO
BID 770
KW-26
Lorenz SZ 40/42
Siemens and Halske T52
SIGTOT
Secure voice
KY-3
KY-57
SCIP
Sectéra Secure Module
SIGSALY
STU-II
STU-III
KG-84
KL-43
Rockex
In Computer Hardware
AES instruction set
Intel SHA extensions
History of cryptography
Outline of cryptography
Symmetric-key algorithm
Public-key cryptography
Cryptographic hash function
Retrieved from "https://en.wikipedia.org/w/index.php?title=KL-7&oldid=921666097"
National Security Agency encryption devices
Products introduced in 1949
Articles lacking in-text citations from March 2009

redpajama_set_name: RedPajamaCommonCrawl


This beautiful pendant has a handcarved howlite horse surrounded by ornate silver beads as well as deep turquoise blue wood beads. The background is polymer clay. I made the 20 inch necklace (with 3 inch extender) with chunky turquoise and white howlite nuggets, Czech glass beads, silver metal beads, and wood beads that match the beads on the pendant.rnrnPlease check out my store for more cell phone cases, belt buckles, and jewelry and mosaic art.


text:
Jimmy Kimmel Hosts White House Dinner
30 for 30 Shorts: 'Arnold's Blueprint'
I Survived a Raiders Game
Among the lugs in Oakland
by Katie Baker on September 26, 2012
I didn't think there'd be much math at an Oakland Raiders tailgate, but there I was on Sunday, staring at a hulking dude with a silver-painted face, faded army fatigues, and a no. 95 SKULLMAN jersey, trying to mentally extrapolate how many chest bumps he's been a part of in his Mohawked life.
I had just watched him engage in at least three such collisions in the span of 30 seconds, though obviously that wouldn't be the constant rate. But even if you assumed a less frenetic pace, you could see how the chest bumps would add up. Under the right conditions — crisp Bay Area weather, an exciting Raiders team, easy traffic, the health of various underground markets — it seemed reasonable that SKULLMAN could hit four figures in a day.
He had the body for it, certainly: big and mean, looking a little bit like Spike Hammersmith from Little Giants if he grew up and decided to get back at his dad. He had football pads on his upper body, which would help take the blows. But SKULLMAN is a guy who, according to one article, "hasn't missed a game for a decade" — and that article itself was written over a decade ago. SKULLMAN, it seemed to me, was the exact type of Raiders fan I'd always heard about: intense, pretty badass, and more than a little unhinged. It was all making sense.
But then a friend of mine broke the spell. "I didn't peg SKULLMAN for a Blue Moon guy," he said, pointing out the telltale bottle that SKULLMAN was holding in his spiked-leather-gloved hand. "That doesn't seem very hard-core."
Raider Nation, as it turns out, might just be like us.
It's always fun to get a glimpse of other cultures, to learn their special customs or watch people interact in their natural habitats. You know: like going home with your college roommate for Thanksgiving dinner, or watching anything on Bravo. When it comes to the NFL, mingling with foreign fans is a similarly valuable learning experience, the lesson being this: No matter who, where, or what we are, we're all willing to make asses of ourselves for some football. It's just that some of us go to greater lengths than others.
Like all good dark kingdoms, the Oakland Coliseum (Just like the Oakland A's, I refuse to call it O.co) has an imposing façade; it looks more like a Cold War–era concrete bunker than a house of athletics and entertainment and, theoretically, joy. (Actually, what it most reminded me of was the Cliff Lodge at Snowbird in Utah; I'd love to see a meet-up between the two buildings' typical inhabitants.)
Arrive at the game via train and you're funneled through a long cage that forms a metal rainbow between the station and the Coliseum. As you near the end of the overpass, it's hard to know which detail to first behold. The curlicues of barbed wire forming a found-object Arc de Triomphe? The iconic Raiders logo that looks like it would turn into a hologram overlay of a skull and crossbones if you tilted it ever so slightly? The solemn, proto-fascist promise of a COMMITMENT TO EXCELLENCE?
No, what captures your eye (and holds it against its will) is the red O.co sign, tacky as a price tag left on a gift. With its strange mélange of fonts, it's hard to know whether the sign was the bland result of too many focus groups, or whether the whole thing was slapped together at the last minute by a harried marketing intern. I was mildly surprised to learn that "O.co" was neither a type of female condom nor the name of an oxygen bar (do those things still exist?) but rather last year's hip new rebrand of Overstock.com — so hip, in fact, that the world was never ready for it.
Befitting its Bay Area location, the Coliseum has seen its share of odd corporate naming-rights deals from tech and dot-com companies through the years. (I'm kind of sad "the Net" didn't last.) And this is no exception. After rolling out O.co last summer in conjunction with purchasing the naming rights to the Coliseum, Overstock.com quietly backed away from the rebranding effort by last fall; AdAge called the whole thing one of "The Biggest Follies of 2011." (One big problem: Everyone was typing in "O.com.") The arena is nevertheless still supposed to be called O.co, even though it never is. The team's lease is up in 2013; it's unclear what will happen then.
Before we parted ways to go to our seats, I asked a friend of mine who has season tickets if there were any concessions food he'd recommend. He was silent for a minute.
"Honestly, I can't think of any," he said.
Raider Nation," Hunter S. Thompson wrote before the Raiders-Buccaneers Super Bowl in January 2003, "is beyond doubt the sleaziest and rudest and most sinister mob of thugs and whackos ever assembled in such numbers under a single 'roof,' so to speak, anywhere in the English-speaking world."1 I guess he had a point: For a group of people mostly shrouded in black, their personalities are certainly colorful.
What I enjoyed most about being surrounded by the Raiders aesthetic is how inclusive it actually is. Really, one way to describe it would be to quote Principal Rooney's assistant in Ferris Bueller's Day Off: "The sportos, the motorheads, geeks, sluts, bloods, wastoids, dweebies, dickheads — they all adore him. They think he's a righteous dude."
In this case, though, she'd be referring to Al Davis, the fiercely love-hated godfather of the franchise2 who died last year and is remembered with an eternal flame at the Coliseum. ("Don't laugh," my Raiders season-ticket-holder friend reprimanded me when he told me about it.) This weekend, Marcus Allen helped light the torch, a classy move that ended a long-running feud between one of the franchise's greatest players and Davis, who once called him "cancer." In the season home opener, Ice Cube — whose "Raider Nation" song remains the team's fan anthem and who directed a 30 for 30 about the Raiders — did the torch-lighting honors.
Raiders fans are an eclectic bunch: You've got your garden-variety eye-patched pirates, and your little kids in jerseys. (I saw more than one young boy with his hair gelled by his parents into spikes.) You've got your cholas y sus novios, the eyebrows of one competing with the chin straps of the other for the title of Most Carefully Manicured. There are guys playing loud, table-slapping games of dominoes in the parking lot. There are families — families with matriarchs who post comments like these on the website CafeMom:
We're Raiders fans and go to games often and yeah this type of crap happens all the time. Last season I saw a two family fight. Dad vs Dad, Mom vs Mom and Teen boy vs Teen Boy, it was crazy, and one of the cops tackled one of the mom's to the ground, and I heard her skull crack … games are still fun though, even if we lose … :(
Then there are the sort of people who, with their snapback hats and snap-up Eazy-E jackets, look like they've been airlifted Straight Outta L.A., where the Raiders played (and fully developed their outlaw/gangsta image) from 1982 to 1994. There are the fanatics who, with their face paint and their snarls, remind me of the "Metallica Rules!" guys in the Any Given Sunday locker room3 (I'd put SKULLMAN in this group, actually). And then there are those whose relation to a pirate (or even a more loosely defined "raider") is tenuous at best but whose body armor and all-spiked-everythings make them look, satisfyingly, like a more monochromatic Bowser.
Oh, let's not forget the token primate: Gorilla Rilla, the "official mascot" of the south end zone section of the Coliseum that's known as the Black Hole. Gorilla Rilla is a man-beast so popular that his recent marriage warranted an article on the official Raiders team website, although I guess that shouldn't be too surprising: Not only did he wed a fellow member of Raider Nation known as Jungle Jane, he did so in front of "over 1,000 people" gathered at the 10th annual Rally in the Valley, a Raiders fan fest in Fresno put on by the "Knights of the Shield Raider Booster Club."
One of the most amazing things about Raider Nation is how well it has sustained itself through some very dark days. (The Wikipedia entry deadpans, hilariously: "Why the Oakland Raiders would have such a dedicated fan base is not clear.") The Raiders made the playoffs in 2000, 2001, and 2002 — in '02, they got spanked by the Buccaneers in the Super Bowl, 48-21 — but otherwise they've missed the postseason every year since 1993.
Given the team's sad recent history, there was an air of preemptive resignation inside the Coliseum for much of the game — reasonable, given how Carson Palmer's very first pass was intercepted, or how the Steelers straddled halftime with a field goal and a touchdown to build a 10-point lead in the third quarter, or how the Raiders just couldn't seem to get through to Ben Roethlisberger. Still, a series of four straight first-down conversions by Palmer ended the third quarter with the Raiders on the march and none of the fans in any particular rush to try to beat traffic.
Facing third-and-nine on Pittsburgh's 33-yard line at the start of the fourth quarter, Palmer threw to Darrius Heyward-Bey, who was sandwich-smashed between two Pittsburgh players and crumpled to the ground. On TV, the injury was replayed in slow-motion and clucked over and broken down while medics attended to Heyward-Bey.
Inside the Coliseum, though, from my seats on the far side from that end zone, it was almost impossible to know what was going on; the two ancient replay screens on the scoreboard failed to show what had happened (understandable but still aggravating) and cell reception was spotty.4 Competing theories floated around as to who was actually down, but everyone agreed that it was bad. When Heyward-Bey was finally carted off, strapped to a stretcher, he gave a thumbs-up as he went. The crowd roared.
The Raiders would score a touchdown on that drive, recover a Steelers fumble a few minutes later, and come back to tie the game with a field goal. They would finally sack Roethlisberger, and force Pittsburgh to punt with less than two minutes to play. They would take over possession, drive everyone bonkers with a couple dud plays (Raiders fans are good at always expecting the worst), and ultimately get into a decent enough position, 43 yards away, to give Sebastian Janikowski a shot to win the game with a kick.
When he did exactly that, the Coliseum went nuts; it was a reaction that sounded more like something out of Week 13, not Week 3. But it was an undeniably huge win for the Raiders, who know that you don't get to those important late-season situations without toughing out wins early on. It was, at the very least, a good start. And why not celebrate that?
Because no one had left the game early, it took forever for everyone to get out. I shuffled through the concourse alongside fearsome ax-wielding ghoul-men whose painted-on scowls were contorted by blissed-out, dopey grins. I could hear one jersey-popping sore winner berating a Steelers fan: "You just came to Oaktown!" he shouted, three times for good measure. "And you just got mugged!" In front of me, a woman wearing black-and-silver Mardi Gras beads was somehow holding a tiny baby without having a meltdown at all the people around us.
A guy in a "Just win, baby!" shirt staggered through, high-fiving everyone and everything in his path and nearly elbowing the kid in the head. When he realized that (a) he had just missed, and (b) I had seen the whole thing, he winked at me then whispered loudly and passionately at the child: "You're a good baby. You're a RAIDER BABY" with such beatific certainty that I expected it to be followed up with an "everything the light touches … is our kingdom." (The Coliseum, unfortunately, more closely resembles the Elephant Graveyard than Pride Rock.)
A few minutes later, as we waited to squeeze onto the barbed-wire bridge that would lead us back to the train station, a Beatles sing-along broke out with the word "Raiders" in place of where "Hey Jude" should be in the chorus. It was odd, but it was also oddly touching. We might as well have linked arms and done the can-can to "Sweet Caroline."
Raider Nation may be the strangest and snarliest and scariest group of fans in the league, but really, they're no different from anyone else. They just want their team to do well. They want to go home and wipe off the makeup and actually be able to stomach watching SportsCenter for once. They want to be happy. Is that too much to ask? Even Dobermans ask for a belly rub once in a while. I assume a SKULLMAN is no different. He just wants the Raiders to win once in a blue moon. Barring that, I guess, he'll just have to stick to drinking it.
It's actually a wonder that Matt Taibbi hasn't already found some way to repurpose this same line about Goldman Sachs.
Parts of Any Given Sunday were based on a book called You're Okay, It's Just a Bruise, written by former L.A. Raiders intern doctor Robert Huizenga. (He was loosely portrayed by Matthew Modine.)
This has happened to me before — I went to the Eagles-Redskins game in which Vick practically punctured a lung, and no one in the crowd had a clue what was going on.
Even George Carlin was into him: "In football, I root for the Oakland Raiders because they hire castoffs, outlaws, malcontents, and fuckups, they have lots of penalties, fights, and paybacks, and because Al Davis told the rest of the pig NFL owners to go get fucked."
Katie Baker is a staff writer at Grantland.
Archive @ katiebakes
More From Katie Baker
The Sun Is Rising in Buffalo October 14, 2015
Odell Beckham Jr., Ryan Tannehill, and What Happens When NFL Players Get a Little Weird October 9, 2015
The Patrick Kane Situation Takes a Dark Turn in Buffalo September 24, 2015
Bragging Rights: 'Dazed and Confused' September 22, 2015
We Went There: The Pats-Bills Hatefest in Buffalo September 21, 2015
See all from Katie Baker
Blades of Glory October 28, 2015
Russell, the Creator October 28, 2015
30 for 30 Shorts: Every Day October 28, 2015
The 15 Biggest Plays in Baseball History October 27, 2015
The Laughs, Pathos, and Overwhelming Talent of Jan Hooks October 20, 2015


iGo is the UK's largest network of taxi and private hire operators! When you join the iGo network, you can send and receive jobs across the UK, helping you compete with national apps such as Uber, MyTaxi and Addison Lee. Why join the network?
Want to find out more about iGo?
Want to know more about Driver Companion?
Remove the time and hassle of spending days collecting driver payments and allow ScanCoin to automate rent collection.
Remove the pain of rent day and eliminate discussions with drivers over what's due or been missed, ensuring your paid on time and in full.


Harvey Opens on Friday, June 13, at Cottage Theatre in Cottage Grove.
If you've never seen Harvey (the play or the 1950 Jimmy Stewart movie), you might see the publicity and imagine a sort of post-WWII Donnie Darko. After all, there are big ol' rabbit ears, or actually, a big ol' rabbit. And it's full of crazy relatives, crazy doctors and, well, a six-and-a-half foot tall lapin. Laughter and hijinks ensue, or so we hear. We haven't seen it yet either. But we'll have many chances; show dates are June 13-15, 20-22 and 27-29. Tix at www.cottagetheatre.org or 942-8001.


text:
Fatima Visionary, Lucia, Predicted Satan's Intention to Destroy Humanity With 'Virus' and 'Chemicals'
In the archdiocesan shrine of St Therese of the Child Jesus, in Lahug, Philippines, a Catholic priest shares his private knowledge of people who had been vaccinated. He also remembers what Sister Lucia, a visionary from Fatima, said in an audience in 1994: 'On the second quarter of the new millennium, Satan will destroy the
London 24 April 2021
Imagine being brainwashed like that.
Chart of Coercion Compared with Covid-19
Hypocritical Orders


Phone booths: These four spaces are designed for brief phone calls only. Once you have completed your call, please feel free to work at the shared desks, on the couch, or anywhere else in the space.
Greenhouses: These spaces are designed for small groups or individuals on a first come, first served basis. If you are an individual working, but there is a group that needs a semi-private workspace, we ask that you make the space available to the group if they need it.
Large and small conference rooms in the Library: These spaces are designed for group meetings and not as individual workstations. Please book these spaces with the space manager and clear the rooms once your allotted meeting time is complete.
Open desks and standing desks: All seats at the open desks are first, come first served. Prosper does not have designated desks. Sit wherever you are most comfortable!
"Prosper Greenhouse" Level: While all of Prosper is designed for productive and professional work, the Greenhouse level is conducive to quiet conversation and collaboration.
"Prosper Library" Level: The Library is for quiet work and conferences. Shhh…come down here and knock out those deadlines.
"Prosper Garden": Relax in our garden to get some work done in the fresh air. Open whenever the weather permits!
Kitchen: Feel free to use the fridge, microwave and coffee station as needed. The kitchen table is for eating and mingling with other members. Members should clear their own trash and wash coffee mugs after use. Please be respectful of noise levels when chatting with other members.
Lockers: Like desks, lockers are first come, first served. You're free to stash your stuff while working here or while running out for other meetings, but don't forget to clear your locker when you leave for the day, as Prosper staff will empty them at night.


While Donegal is likely to experience a drought in the coming week, there are no worries about the Dubai Duty Free Irish Open in Ballyliffin as they have their own irrigation system in place.
Months of planning and preparation have gone into the staging of the event and it has been led locally in Donegal by Ballyliffin Golf Club general manager, John Farren.
"It has been a hectic few months but everything is in place and we are good to go and looking forward to next week," John Farren told the Democrat.
"The course is in great shape and Ballyliffin has doubled in size with the building of the tented village which has been erected to cater for the staging of the event and to cater for the large numbers that are expected to come to watch the golf.
"We have been blessed with the weather over the last five weeks and it has made preparation a little easier and we had no stoppages because of the weather.
The current heatwave is not posing any problems for the course as the Glashedy course, which is staging the open has its own sprinkler system throughout the course.


Event Marketing Consultation & Services.
Big Life Creative provides full event talent staffing.
Our network is strong & and we only book top professionals. Take the guess work out of finding talent for your next event.
Need a promo flyer designed today?
Big Life Creative has a team of professional graphic designers ready to create your vision today. Have your proof in 24hrs or it's free!
Need a promotional video fast?
Our network of professional video editors and template based workflow guarantee a pro quality promo video fast! Contact us for availabiltiy.
Make your event or service STAND OUT with a professional voiceover.
Big Life Creative has a roster of pro voiceover talent to match any vibe you need. Contact us today for availability.


text:
Tag Archives: Pakistan
PAKISTAN, LATEST, WORLD
January 31, 2023 TAUQEER RIAZ Leave a comment
LONDON: Russia told the United States on Monday that the last remaining pillar of bilateral nuclear arms control could expire in 2026 without a replacement due to what it said were US efforts to inflict "strategic defeat" on Moscow in Ukraine.
Both Russia and the United States still have vast arsenals of nuclear weapons which are currently partially limited by the 2011 New START Treaty, which in 2021 was extended until 2026.
What comes after Feb 4, 2026, however, is unclear, though Washington has indicated it wants to reach a follow-on agreement with Russia.
Possible scenario
Asked if Moscow could envisage there being no nuclear arms control treaty after 2026, Deputy Foreign Minister Sergei Ryabkov told the RIA state new agency: "This is quite a possible scenario."
Ryabkov, Russia's top arms control diplomat, said the United States had in recent years ignored Russia's interests and dismantled most of the architecture of arms control.
The two countries, which account for 90pc of the world's nuclear warheads, called off talks on the START treaty last year
"New START may well fall victim to this," Ryabkov told RIA. "We are ready for such a scenario."
His remarks constitute a warning to Washington that its continued military support for Ukraine could scupper the final major post-Cold War bilateral arms control treaty with Russia.
The United States has supplied more than $27 billion in security assistance to Ukraine since Russia invaded the country on Feb 24, including over 1,600 Stinger anti-aircraft rocket systems, 8,500 Javelin anti-tank missile systems and over one million 155mm artillery rounds.
PakistanWORLD
KPK, LATEST, Peshawar
The death toll from the attack on a mosque in Peshawar's Police Lines area a day earlier rose to 92 on Tuesday after more bodies were recovered from the attack site, a spokesperson for the Lady Reading Hospital (LRH) confirmed.
On Friday, 59 people, mostly police officials, were martyred and over 150 were injured after an explosion ripped through a mosque in Peshawar's Red Zone area.
The outlawed Tehreek-i-Taliban Pakistan (TTP) claimed responsibility for the attack. It later distanced itself from it.
In a statement issued today, LRH spokesperson Muhammad Asim said that all the deceased persons have been identified, while 57 of those injured are receiving treatment at the facility.
He added that a total of 158 injured people were brought to the hospital on Monday and most of them had been sent back home after medical aid.
Meanwhile, Rescue 1122 spokesperson Bilal Faizi said that a rescue operation at the blast site was underway for the past 18 hours.
"This morning we are going to remove the last part of the collapsed roof so we can recover more bodies, but we are not hopeful of reaching any survivors," he said.
On the other hand, Peshawar police chief Muhammad Ijaz Khan said that more than 90 percent of the victims were policemen, between 300 and 400 of whom had gathered in the compound's mosque for prayers.
Wajahat Ali, a 23-year-old police constable who survived, said that he had lost all hopes for survival. "I remained trapped under the rubble with a dead body over me for seven hours," he told AFP from the LRH on Tuesday.
The nature of the blast yet to be determined
A police report issued after the attack, a copy of which is available with Dawn.com, said the explosion occurred inside the main hall of a mosque — which has a capacity of 300 to 350 men — located in the Police Lines area.
The locality comprises headquarters of the Capital City Police, Frontier Reserve Police, Elite Police Force, Counter Terrorism Department, Tele Communication Branch, RRF and SCU, etc, it stated.
The statement said that the blast caused the roof of the mosque to collapse and a rescue operation was underway by the Pakistan Army and Rescue 1122, for retrieval of casualties.
"A severed head has been recovered from inside the debris. The use of explosives in the incident has been confirmed, while other factors are being evaluated to confirm the nature of the blast," it said.
The report added that suicide bombing could not be "ruled out" and investigation by various teams was underway.
Funeral prayers for police martyrs offered
Separately, funeral prayers for six policemen, including deputy superintendent of police Arab Nawaz and Ismatullah, were offered earlier today at the Police Lines area.
On Monday night, collective funeral prayers for 27 police martyrs were offered in Peshawar's Police Lines area with Khyber Pakhtunkhwa Police Chief Mauzzam Jah Ansari, army officers, and officials of civil administration in attendance.
After the prayers, the coffins of the martyrs — lined in a row and draped with the national flag — were sent to their hometowns for burial with official protocol.
Speaking on the occasion, KP IGP Mauzzam Jah Ansari said that the KP police were always ready to sacrifice their lives for the protection of people's lives and property.
"As the head of this force, I salute the police officials who lost their lives in the deadly blast. These martyrs are our real heroes and their sacrifices will not be in vain," he said, adding that the bereaved families would not be abandoned and their welfare would be the "prime responsibility" of the KP police.
Day of mourning in KP
On Monday evening, Mohammad Azam Khan, Caretaker Chief Minister of KP, declared a day of grieving throughout the province to honour the victims of the most severe attack of the year.
Remarking on the mourning, Khan stated the nation's flag will be at half-mast in unison everywhere in the province. Moreover, he assured the bereaved families that the government will not abandon them during these trying times resulting from the awful incident.
Rabbani demands a parliamentary inquiry into TTP's 'rehabilitation' policy
PPP Senator Raza Rabbani on Tuesday demanded a parliamentary inquiry into the previous government's "rehabilitation policy" of the proscribed TTP.
Condemning the Peshawar bombing in a Senate session, he stressed that Pakistan needed to review the causes of the rise in terrorism. "The TTP's rehabilitation policy, which was initiated by the [previous] government, is the foundation of this."
After the fall of the US-supported Ashraf Ghani government in Afghanistan in 2021, the Afghan Taliban facilitated peace talks between the government and the TTP.
https://www.dawn.com/news/card/1660188
While negotiations with the banned group reportedly began in October 2021 under the PTI government's watch, the process continued in fits and starts when the Shehbaz Sharif government took over.
In response, the banned outfit declared a ceasefire and stopped its attacks on security forces, extending the truce in May. The government had also sent delegations of tribal elders and ulema to Kabul in order to persuade the TTP to end its activities and surrender its weapons.
The months-long negotiations, however, remained inconclusive and ultimately ended in November last year. Major sticking points included the TTP's demands to roll back the merger of the erstwhile tribal areas with KP, release hardened terrorists, as well as the group's refusal to lay down their arms. These were obvious red lines the state could not let the militants cross.
Addressing the upper house of Parliament today, Rabbani recalled that when the Taliban returned to Afghanistan, some thousands of people with weapons were allowed to enter Pakistan.
"It was said that they are good Taliban and they will work according to the law and Constitution […] it was said they will be rehabilitated," he said.
The senator pointed out that neither the public nor Parliament was taken into confidence over the matter. "Even at that time, Parliament had said that a joint session should be called and all these things should be presented before it so that the public's opinion could be brought forward."
Rabbani went on to say that permission was also not taken from the National Security Committee, instead, it was just told that negotiations with the TTP were underway.
"The negotiations were outsourced to a jirga. PPP and ANP had strong reservations about them," he said, demanding that a parliamentary inquiry should be conducted into the matter.
The senator also said that the terrorism policy should be discussed in the joint sitting of the Parliament on Feb 8.
"All the stakeholders and political parties should be called to the Parliament for a dialogue. This is the question of life and death but parties are busy in doing politics," he added.
Sherry calls for the implementation of NAP
In a series of tweets on Tuesday morning, Climate Change Minister and PPP leader Sherry Rehman called for the swift implementation of the National Action Plan (NAP) and national unity.
"The nation, all political parties, and every partner should stand united in the fight against terrorism. The country cannot afford further division and terrorism," she said.
Rehman said that terrorists got a chance to reorganize due to the "unclear policy of the previous government".
"Now Imran Khan is saying that his government wanted to resettle the Taliban in KP. Such irresponsible statements are an attempt to create a soft corner in terrorist organizations," she said, adding that the PPP had serious concerns over the new wave of terrorism before the elections.
Earlier this month, the PTI chief had said that his government had planned to resettle banned TTP fighters in Pakistan's tribal districts with the help of the Afghan Taliban, but the plan hit a snag owing to the non-cooperation of provinces.
"The government had planned to relocate at least 5,000 TTP fighters and their family members which amount to about 35,000," he had revealed in a virtual seminar, adding that the plan did not materialize as provinces refused to foot the bill.
Surge in terrorism
Over the past few months, the law and order situation in the country has worsened, with terrorist groups executing attacks with near impunity across the country.
Since the talks with the TTP broke down in November, the militant group has intensified its attacks, particularly targeting the police in KP and areas bordering Afghanistan. Insurgents in Balochistan have also stepped up their violent activities and formalised a nexus with the outlawed TTP.
On January 22, a police vehicle narrowly escaped a bomb blast in Peshawar's Badaber area. A day earlier, a policeman was martyred and two others were injured when unidentified assailants attacked a police post in Dheri Zardad locality of Charsadda.
On January 14, a deputy superintendent and two constables were martyred when militants, armed with automatic assault weapons, targeted the Sarband police station on the outskirts of the province's capital, Peshawar late at night.
With additional input from APP, AFP
attackpeshawarISLAMABADPakistanpeshawarattack
ISLAMABAD, LATEST, WORLD
The latest incident has sent a wave in the region and people believe that such incidents would increase where trigger happy novices would indiscriminately use fire arms against innocent people.
Over 5,000 members of the VDGs, majority of them Hindus have been given rifles and more queuing up to get arms in various districts of Jammu region in the last few days. It is pertinent to mention that the past record of VDC guards (approx. x 28000 strength) also augment the worries of masses, still a huge number of cases (200 FIRs related to the cases of murder, rape, rioting and drugs registered against the VDC guards) are pending.
indiaISLAMABADPakistanWORLD
LATEST, BLOGS
On 26 January 2023, the Lieutenant Governor's administration demolished an opposition Muslim leader's house in Indian-administered Kashmir, branding it as an illegal construction. On the instructions of the Indian govt, the Revenue department razed down a portion of a house belonging to the wife of NC leader and ex-minister Ali Muhammad Sagar in Srinagar. According to officials, Mr. Sagar's wife Saleema owns three Kanals (0.375 acres) and 16 Marlas (0.1 acres) under Khasra No. 1015 near the Srinagar airport located in Budgam district. It is not a new thing in IIOJK, as earlier Indian Police demolished the homes of several Muslims. It is pertinent to mention that India is using new tactics to grab the properties of Muslim leaders to stifle the voices of Muslims.
As part of a political vendetta, Indian law enforcement agencies have started a crackdown against the Muslim leaders and pro-freedom people of IIOJK. Since 5th August 2019, the IIOJK authorities have seized a number of assets belonging to pro-freedom Kashmiris to break their resolve, but such moves have failed to deter the Kashmiris from pursuing their internationally recognized right to self-determination. India is using the Israeli model of illegal occupation in IIOJK.
Despite being condemned and criticized for grave violations of human rights by UNHRC, Amnesty International, and other HR organizations, India has displayed utter disregard for its obligation to international norms and binding
Amid the Republic Day celebrations, Indian occupational forces reinforced security across Jammu and Kashmir. Sanitization and area domination exercises were carried out by police, CRPF staff, and other security personnel as random vehicle checks were conducted at various places. In IlOJK, innocent civilians and educated youth are being violently murdered by Indian forces during fake encounters, and cordon-and-search operations. Targeted killings of Kashmiri youth can be categorized as genocide. The liberation struggle by Kashmiris will never be forgotten, especially with Burhan Wani as its shining star. India's inhumane tactics used to dominate the Kashmiri people, such as murdering, torturing, forced disappearances, and detentions, have historically been unsuccessful and will not succeed in the future.
More than 609 innocent Kashmiris have so far been martyred by the Indian occupation forces in staged encounters, since India's illegal and unilateral actions of 05 August 2019. The intensified killing spree in IIOJK is a clear manifestation of India using state terrorism as a policy tool against the Kashmiris. Indian Occupation Forces have stepped up extra-judicial killings of Kashmiris, particularly targeting Kashmiri youth, following the malafide conviction and sentencing of Hurriyat leader Mr. Yasin Malik in a grossly suspicious and contrived case.
Indian Occupation Forces continue to operate with complete impunity under draconian laws such as Public Safety Act (PSA), Armed Forces Special Powers Act (AFSPA), and Unlawful Activities Prevention Act (UAPA). APHC leader Molvi Bashir Irfani in a statement in Srinagar said that the word "democracy" is a mask on the true face of India behind which it is hiding its cruel imperialist face to deceive the world. Extra-judicial killings of young men, including teenage boys, and refusal to return the human remains of those martyred are completely unlawful and reflect the moral bankruptcy of the Indian Occupation Forces. The gross and systematic HRVs perpetrated by the Indian Occupation Forces in IIOJK warrant investigation by the UN Commission of inquiry as recommended by the OHCHR in its reports for 2018 and 2019.
ISLAMABADPakistanWORLD
450,000 Diaspora Sikhs Vote for Self-Determination: Is India Ready to Accept Referendum Results?


text:
WAIS
News & Partners
WYCOMBE ABBEY
Founded more than 120 years ago, Wycombe Abbey UK is a leading independent British boarding school that has a reputation for its academic rigour and outstanding A Level results. BE Education has been working with Wycombe Abbey since 2015 to establish Wycombe Abbey Schools (WAS) in Greater China. The first one opened in Changzhou in September 2016 and the second is opening in Hongkong in September 2019. We are planning more schools in Hangzhou, Nanjing and Zhuhai in the near future.
WAS offers the best of British and Chinese education in an English speaking environment, preparing pupils to enter leading universities around the world, particularly UK and US universities. WAS teaches pupils in an entirely Western style. Pupils experience dynamic, academic and creative learning in small classes, combined with extra-curricular enrichment classes such as drama, music, art and a wide range of sports and opportunities for international expeditions and travel.
London Boston Shanghai Beijing ShenZhen Chengdu Hangzhou Tianjin
32 Grosvenor Gardens, London, SW1W 0DH, United Kingdom
uk@be.co
9/F, Yueda 889 Center, 1111 ChangshouRd, Shanghai, 200042, China
go@be.co
© 2015 BE Education All Rights Reserved.


Bar/Bat mitzvahs are celebrations that provide a lifetime of memories for you, your child, your family and guests. Because of the significance of this type of event, you do not want to book just any disc jockey entertainment service.
Starting with the optional family introductions to the Motzi over the Challah, as well as the Candle Lighting, know that we will work closely with you to meet your individual needs. We know you invest so much of yourself into planning this once in a lifetime celebration as it is such a special milestone in your child's life, after all he or she is emerging as a young adult. We at Sounds of Success DJ's recognize the enormity and grace of their achievement… we will celebrate their coming of age, making it all it should be!
We are portable…take us anywhere!
Should your event be held at a grand banquet facility or local Jewish community center, Sounds of Success DJ's has the suitable sound equipment to meet your specific needs. Large or small all venues can equally accommodated.


text:
Nureyev était un cheval de course pur-sang anglais né aux États-Unis en 1977 de l'union de Northern Dancer et de Special, par Forli. Il est le 3/4 frère de Sadler's Wells et de Fairy King.

Carrière de courses
Nureyev fut acquis par Stavros Niarchos pour  dollars yearling, ce qui fit de lui le deuxième yearling à passer la barre du million de dollars, après le fiasco Canadian Bound (un fils de Secretariat payé 1,5 million de dollars deux ans plus tôt et qui allait cumuler un peu plus de 1000 dollars de gains en courses, avant de s'avérer un étalon tout aussi désastreux). Envoyé en France et placé sous la responsabilité de François Boutin, Nureyev suscita les plus grands espoirs à 2 ans. Pour preuve, il fit ses débuts directement dans un groupe 3, le Prix Thomas Bryon, qu'il survola de 6 longueurs. Ce sera sa seule sortie en 1979. L'année suivante, il effectua une rentrée victorieuse et impressionnante dans le Prix Djebel avant de se présenter au départ des 2000 guinées à Newmarket, qu'il remporta de haute lutte, non sans gêner ses adversaires Known Fact et Posse. Une longue enquête s'ensuivit et les commissaires finirent par disqualifier le poulain sur tapis vert, et le reléguer à la dernière place. Ce sera la dernière sortie de son éphémère carrière : programmé pour le Derby d'Epsom, il contracta un virus et fut envoyé au haras.

Résumé de carrière

Au haras
Après une année de monte en France, Nureyev fut syndiqué pour 14 millions de dollars et partit aux États-Unis. Il s'avéra aussitôt être un étalon exceptionnel, l'un des meilleurs fils de Northern Dancer au stud, avec Sadler's Wells, Danzig, Lyphard, Nijinsky II et Storm Bird. 580 de ses produits connurent la compétition, 135 d'entre eux furent "stakes winners" (vainqueurs d'une course importante), dont une trentaine de lauréats de Groupe 1. Son prix de saillie grimpa jusqu'à  dollars. Nureyev fut tête de liste des étalons en France en 1987 et 1997.

Parmi les champions dont il est l'auteur, citons :

 Miesque : l'une des plus grandes championnes de l'histoire des courses, et poulinière exceptionnelle, gagnante de deux Breeders' Cup Mile, de la Poule d'Essai des Pouliches, des 1000 guinées, des prix de la Salamandre, Marcel Boussac, Jacques Le Marois, du Moulin de Longchamp et d'Ispahan.
 Peintre Célèbre : Prix de l'Arc de Triomphe, du Jockey-Club, Grand Prix de Paris, cheval de l'année en Europe (1997)
 Zilzal - Sussex Stakes, Queen Elizabeth II Stakes, Cheval de l'année en Angleterre (1989)
Sonic Lady : 1000 Guinées irlandaises, Coronation Stakes, Sussex Stakes, Prix du Moulin de Longchamp, meilleure 3 ans de l'année en Europe.
Spinning World : 2000 Guinées irlandaises, Prix Jacques Le Marois, Breeders' Cup Mile
 Theatrical : Breeders' Cup Turf, cheval de l'année aux États-Unis sur le gazon (1987)
 Reams of Verse : Fillies' Mile, Oaks, meilleure 2 ans de l'année en Angleterre (1996)
Stravinsky : July Cup, Nunthorpe Stakes, Sprinter européen de l'année (1999)
 Fasliyev : Phoenix Stakes, Prix Morny, Meilleur 2 ans de l'année en Europe (1999)

Les fils et les filles de Nureyev sont eux-mêmes d'excellents reproducteurs. Comme père de mère, il revendique ainsi Bago (Prix de l'Arc de Triomphe, Grand Prix de Paris, Prix Ganay, etc.) ou Desert King (National Stakes, Irish Derby, 2000 Guinées Irlandaises,  père de la championne australienne Makybe Diva). Il fut d'ailleurs classé tête de liste des pères de mères en Angleterre et en Irlande en 1997.

Nureyev est mort en 2001. Il est enterré dans son haras, Walmac Farm, à Lexington, Kentucky.

Pedigree

Références

Cheval de course
Cheval de course français
Cheval de course né en 1977
Étalon pur-sang anglais
Animal né en 1977
Animal mort en 2001
Animal né aux États-Unis

redpajama_set_name: RedPajamaWikipedia


The dentists and their caring team at Tietan Dental in Walla Walla Washington provide excellent family and cosmetic dental care in a comfortable and friendly environment.
Walla Walla Washington cosmetic dentist offers your family teeth restoration services.
Whether its Walla Walla dentist teeth whitening, Walla Walla dentist tooth bonding, Walla Walla dentist veneers or Walla Walla dentist tooth crowns, Walla Walla dentists, Drs. Kellog, Kellog, Kellog and Ordelheide of Tietan Dental, can help you achieve the smile of your dreams.
Our commitment at Tietan Dental is to provide the highest quality, solution-oriented dentistry available to Walla Walla, Washington in a relaxed and comfortable environment.
If you are looking for a dentist in Walla Walla, WA, click on the menu selections to the top of this page or go to the Tietan Dental home page to learn more about the dental services provided by Tietan Dental in Walla Walla, WA.


Celebrate spring with the Easter Bunny and the various animal at the zoo! There will be photo opportunities, activity stations, inflatables, and more!
When: April 1, 2017 10am-4pm at the Zoo, 4001 E Paisano Dr.


Although Canadian whisky by volume is the best-selling whisky in the USA, the perception of this class of whisky (amongst spirits writers and whisky critics) is that the Canadian spirit is perhaps thin and uninteresting, (fortunately the millions of people who buy whisky appear to be much more impressed than the critics and writers). The landscape however, appear to be changing, especially at the premium end of the whisky market, where the Canadian spirit has seen strong growth in market share. Recognizing this trend, the Sazerac Company has recently made a push towards the premium end of the Canadian Whisky market with two new releases, Caribou Crossing and Royal Canadian Small Batch Canadian Whiskies.
Caribou Crossing is what is known as a Single Barrel Whisky. From the company's inventory of over 200,000 barrels of Canadian whisky, Sazerac's whisky making team selects what they deem to be some of the very finest barrels. Each of these chosen barrels is bottled individually capturing its unique flavour. This means that each individual barrel offers a unique taste experience for the Canadian whisky connoisseur. I was fortunate enough to have been sent a sample bottle from the good folks at Charton Hobbs who are marketing this unique whisky for Sazerac, here in Alberta.
Please enjoy my review, and my cocktail suggestion, the Canadian Rye Sazerac.
According to the information sent to me by Sazerac, Canadian whisky is a very big deal in the USA, accounting for sales of roughly 100 million liters of spirits. In fact, Canadian Whisky is responsible for a whopping 11.6 % of the overall spirits market in the USA. Although it has been popular for spirits writer's and whisky critics to disregard the Canadian Whisky category, the truth is that North America has seen growth in sales of the premium and super-premium categories of Canadian Whisky over the last several years. Sazerac has been a participant in this growth with the launch of their new Single Barrel Canadian Whisky, Caribou Crossing, and their new Small Batch Canadian Whisky, Royal Canadian Small Batch.
The Royal Canadian Small Batch whisky has been constructed from a very small selection (50 barrels) of carefully chosen Canadian whisky barrels. Bottled at 40 % alcohol by volume, this is a 4 grain whisky which was blended from those selected barrels to not only have the smoothness traditionally associated with Canadian whisky; but to also carry robust taste profile forward for the whisky connoisseur.
I was fortunate enough to have been sent a sample bottle from the good folks at Charton Hobbs who are marketing this unique whisky for Sazerac, in Alberta.
As part of the review I designed a nice cocktail for this whisky called the Sazerac Splash. I hope you enjoy the cocktail and of course. I hope you enjoy my review!


text:
#include "uri.h"
#include "ccv.h"
#include <string.h>
#include <ctype.h>
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>

void form_data_parser_init(form_data_parser_t* parser, void* context)
{
	parser->state = s_form_data_start;
	parser->cursor = 0;
	parser->disposition_index = -1;
	parser->context = context;
	parser->on_name = 0;
}

void form_data_parser_execute(form_data_parser_t* parser, const char* buf, size_t len, int header_index)
{
	static const char content_disposition[] = "content-disposition";
	static const char form_data[] = "form-data;";
	static const char name[] = "name=\"";

	int i, cl;
	size_t name_len = 0;
	const char* name_mark = buf;
	for (i = 0; i < len; i++)
	{
		cl = tolower(buf[i]);
		switch (parser->state)
		{
			default:
				// illegal state, just reset and return
				parser->state = s_form_data_start;
				/* fall-through */
			case s_form_data_start:
				parser->state = s_form_data_header_field;
				parser->cursor = 0;
				/* fall-through */
			case s_form_data_header_field:
				// only care about Content-Disposition
				if (cl != content_disposition[parser->cursor])
				{
					parser->state = s_form_data_start; // reset the state
					return;
				}
				++parser->cursor;
				if (parser->cursor == sizeof(content_disposition) - 1)
				{
					parser->disposition_index = header_index;
					parser->state = s_form_data_header_value_start;
					parser->cursor = 0;
				}
				break;
			case s_form_data_header_value_start:
				if (cl == ' ' || cl == '\t') // ignore space or tab
					continue;
				if (cl != form_data[parser->cursor])
				{
					parser->state = s_form_data_start; // we don't accept other disposition other than form-data
					return;
				}
				++parser->cursor;
				if (parser->cursor == sizeof(form_data) - 1)
				{
					// verified form-data, now get the name parameter
					parser->state = s_form_data_header_value_name_start;
					parser->cursor = 0;
				}
				break;
			case s_form_data_header_value_name_start:
				if (cl == ' ' || cl == '\t') // ignore space or tab
					continue;
				if (cl != name[parser->cursor])
				{
					parser->state = s_form_data_start; // we only accepts name parameter for form-data here
					return;
				}
				++parser->cursor;
				if (parser->cursor == sizeof(name) - 1)
				{
					parser->state = s_form_data_header_value_name_done;
					parser->lookbehind = '\0';
					parser->cursor = 0;
					name_mark = buf + i + 1;
					name_len = 0;
				}
				break;
			case s_form_data_header_value_name_done:
				if (parser->lookbehind != '\\' && buf[i] == '"')
				{
					parser->state = s_form_data_done; // the end of quote, return
					if (name_len > 0 && parser->on_name)
						parser->on_name(parser->context, name_mark, name_len);
					return;
				}
				name_len = buf + i + 1 - name_mark;
				// the lookbehind is only used for escape \, and if it is \ already
				// we will skip the current one, otherwise, we don't
				parser->lookbehind = (parser->lookbehind != '\\') ? buf[i] : '\0';
				break;
		}
	}
	if (name_len > 0 && parser->state == s_form_data_header_value_name_done && parser->on_name)
		parser->on_name(parser->context, name_mark, name_len);
}

void query_string_parser_init(query_string_parser_t* parser, void* context)
{
	parser->state = s_query_string_start;
	parser->context = context;
	parser->header_index = -1;
	parser->on_field = 0;
	parser->on_value = 0;
}

void query_string_parser_execute(query_string_parser_t* parser, const char* buf, size_t len)
{
	int i;
	size_t field_len = 0;
	const char* field_mark = buf;
	size_t value_len = 0;
	const char* value_mark = buf;
	for (i = 0; i < len; i++)
		switch (parser->state)
		{
			case s_query_string_start:
				parser->state = s_query_string_field_start;
				++parser->header_index;
				field_mark = buf + i;
				field_len = 0;
				/* fall-through */
			case s_query_string_field_start:
				if (buf[i] != '&')
				{
					if (buf[i] == '=')
					{
						parser->state = s_query_string_value_start;
						// setup value_len
						value_mark = buf + i + 1;
						value_len = 0;
					}
					if (parser->state == s_query_string_field_start)
						field_len = buf + i + 1 - field_mark;
					break;
				} else
					// it is marked as the start state, then quickly turns to done state
					parser->state = s_query_string_value_start;
					/* fall-through */
			case s_query_string_value_start:
				if (field_len > 0 && parser->on_field)
				{
					parser->on_field(parser->context, field_mark, field_len, parser->header_index);
					field_len = 0;
				}
				if (buf[i] != '&')
				{
					value_len = buf + i + 1 - value_mark;
					break;
				} else
					parser->state = s_query_string_value_done;
					/* fall-through */
			case s_query_string_value_done:
				// reset field_len
				field_mark = buf + i + 1;
				field_len = 0;
				if (value_len > 0 && parser->on_value)
				{
					parser->on_value(parser->context, value_mark, value_len, parser->header_index);
					// reset value_len
					value_len = 0;
				}
				++parser->header_index;
				parser->state = s_query_string_field_start;
				break;
		}
	if (field_len > 0 && parser->state == s_query_string_field_start && parser->on_field)
		parser->on_field(parser->context, field_mark, field_len, parser->header_index);
	else if (value_len > 0 && parser->state == s_query_string_value_start && parser->on_value)
		parser->on_value(parser->context, value_mark, value_len, parser->header_index);
}

void numeric_parser_init(numeric_parser_t* parser)
{
	parser->state = s_numeric_start;
	parser->result = 0;
	parser->division = 0.1;
}

void numeric_parser_execute(numeric_parser_t* parser, const char* buf, size_t len)
{
	int i;
	for (i = 0; i < len; i++)
	{
		int digit = buf[i] - '0';
		if ((digit < 0 || digit >= 10) && buf[i] != '.')
			parser->state = s_numeric_illegal;
		switch (parser->state)
		{
			case s_numeric_start:
				parser->result = 0;
				parser->state = s_numeric_before_decimal;
				/* fall-through */
			case s_numeric_before_decimal:
				if (buf[i] != '.')
					parser->result = parser->result * 10 + digit;
				else
					parser->state = s_numeric_after_decimal;
				break;
			case s_numeric_after_decimal:
				if (buf[i] == '.') // we cannot bear another .
					parser->state = s_numeric_illegal;
				else {
					parser->result += digit * parser->division;
					parser->division *= 0.1;
				}
				break;
			case s_numeric_illegal:
				break;
		}
		if (parser->state == s_numeric_illegal)
			break;
	}
}

void bool_parser_init(bool_parser_t* parser)
{
	parser->state = s_bool_start;
	parser->cursor = 0;
}

void bool_parser_execute(bool_parser_t* parser, const char* buf, size_t len)
{
	int i;
	static const char bool_true[] = "true";
	static const char bool_false[] = "false";
	for (i = 0; i < len; i++)
	{
		if (parser->state == s_bool_illegal)
			break;
		int cl = tolower(buf[i]);
		switch (parser->state)
		{
			default:
				break;
			case s_bool_start:
				switch (cl)
				{
					default:
						parser->state = s_bool_illegal;
						break;
					case '0':
						parser->state = s_bool_0;
						parser->result = 0;
						break;
					case '1':
						parser->state = s_bool_1;
						parser->result = 1;
						break;
					case 'f':
						parser->state = s_bool_false;
						parser->result = 0;
						parser->cursor = 1;
						break;
					case 't':
						parser->state = s_bool_true;
						parser->result = 1;
						parser->cursor = 1;
						break;
				}
				break;
			case s_bool_1: // it should be already 1-len, so this should be illegal
			case s_bool_0:
				parser->state = s_bool_illegal;
				break;
			case s_bool_true:
				if (parser->cursor > sizeof(bool_true) - 1 || cl != bool_true[parser->cursor])
					parser->state = s_bool_illegal;
				else
					++parser->cursor;
				break;
			case s_bool_false:
				if (parser->cursor > sizeof(bool_false) - 1 || cl != bool_false[parser->cursor])
					parser->state = s_bool_illegal;
				else
					++parser->cursor;
				break;
		}
	}
}

void coord_parser_init(coord_parser_t* parser)
{
	parser->state = s_coord_start;
	parser->x = parser->y = 0;
	parser->division = 0.1;
}

void coord_parser_execute(coord_parser_t* parser, const char* buf, size_t len)
{
	int i;
	for (i = 0; i < len; i++)
	{
		int digit = buf[i] - '0';
		if ((digit < 0 || digit >= 10) && buf[i] != '.' && buf[i] != 'x' && buf[i] != 'X')
			parser->state = s_coord_illegal;
		switch (parser->state)
		{
			case s_coord_start:
				parser->x = parser->y = 0;
				parser->state = s_coord_x_before_decimal;
				/* fall-through */
			case s_coord_x_before_decimal:
				if (buf[i] != 'x' && buf[i] != 'X')
				{
					if (buf[i] != '.')
						parser->x = parser->x * 10 + digit;
					else
						parser->state = s_coord_x_after_decimal;
				} else
					parser->state = s_coord_y_before_decimal;
				break;
			case s_coord_x_after_decimal:
				if (buf[i] != 'x' && buf[i] != 'X')
				{
					if (buf[i] == '.')
					{
						parser->state = s_coord_illegal;
						break;
					}
					parser->x += digit * parser->division;
					parser->division *= 0.1;
				} else {
					parser->division = 0.1;
					parser->state = s_coord_y_before_decimal;
				}
				break;
			case s_coord_y_before_decimal:
				if (buf[i] == 'x' || buf[i] == 'X')
				{
					parser->state = s_coord_illegal;
					break;
				}
				if (buf[i] != '.')
					parser->y = parser->y * 10 + digit;
				else
					parser->state = s_coord_y_after_decimal;
				break;
			case s_coord_y_after_decimal:
				if (buf[i] == 'x' || buf[i] == 'X' || buf[i] == '.')
				{
					parser->state = s_coord_illegal;
					break;
				}
				parser->y += digit * parser->division;
				parser->division *= 0.1;
				break;
			case s_coord_illegal:
				break;
		}
		if (parser->state == s_coord_illegal)
			break;
	}
}

void string_parser_init(string_parser_t* parser)
{
	memset(parser->string, 0, sizeof(parser->string));
	parser->state = s_string_start;
	parser->cursor = 0;
}

void string_parser_execute(string_parser_t* parser, const char* buf, size_t len)
{
	if (parser->cursor + len > sizeof(parser->string) - 1)
		parser->state = s_string_overflow;
	else if (parser->state == s_string_start) {
		memcpy(parser->string + parser->cursor, buf, len);
		parser->cursor += len;
	}
}

void blob_parser_init(blob_parser_t* parser)
{
	parser->data.len = 0;
	parser->data.written = 0;
	parser->data.data = 0;
}

void blob_parser_execute(blob_parser_t* parser, const char* buf, size_t len)
{
	if (parser->data.len == 0)
	{
		parser->data.len = (len * 3 + 1) / 2;
		parser->data.data = (unsigned char*)malloc(parser->data.len);
	} else if (parser->data.written + len > parser->data.len) {
		parser->data.len = ((parser->data.len + len) * 3 + 1) / 2;
		parser->data.data = (unsigned char*)realloc(parser->data.data, parser->data.len);
	}
	memcpy(parser->data.data + parser->data.written, buf, len);
	parser->data.written += len;
}

int param_parser_map_alphabet(const param_dispatch_t* param_map, size_t len)
{
	int i;
	for (i = 1; i < len; i++)
		if (strcmp(param_map[i - 1].property, param_map[i].property) >= 0)
			return -1;
	return 0;
}

static int find_param_dispatch_state(param_parser_t* parser, const char* name)
{
	const param_dispatch_t* low = parser->param_map;
	const param_dispatch_t* high = parser->param_map + parser->len - 1;
	while (low <= high)
	{
		const param_dispatch_t* middle = low + (high - low) / 2;
		int flag = strcmp(middle->property, name);
		if (flag == 0)
			return middle - parser->param_map;
		else if (flag < 0)
			low = middle + 1;
		else
			high = middle - 1;
	}
	return s_param_skip;
}

void param_parser_terminate(param_parser_t* parser)
{
	if (parser->state >= 0)
	{
		const param_dispatch_t* dispatch = parser->param_map + parser->state;
		switch (dispatch->type)
		{
			case PARAM_TYPE_INT:
				*(int*)(parser->parsed + dispatch->offset) = (int)(parser->numeric_parser.result + 0.5);
				break;
			case PARAM_TYPE_ID:
				if (*(int*)(parser->parsed + dispatch->offset) < 0) // original is illegal resource id
					*(int*)(parser->parsed + dispatch->offset) = (int)(parser->numeric_parser.result + 0.5);
				break;
			case PARAM_TYPE_FLOAT:
				*(float*)(parser->parsed + dispatch->offset) = (float)parser->numeric_parser.result;
				break;
			case PARAM_TYPE_DOUBLE:
				*(double*)(parser->parsed + dispatch->offset) = parser->numeric_parser.result;
				break;
			case PARAM_TYPE_BOOL:
				*(int*)(parser->parsed + dispatch->offset) = parser->bool_parser.result;
				break;
			case PARAM_TYPE_SIZE:
				*(ccv_size_t*)(parser->parsed + dispatch->offset) = ccv_size((int)(parser->coord_parser.x + 0.5), (int)(parser->coord_parser.y + 0.5));
				break;
			case PARAM_TYPE_POINT:
				*(ccv_point_t*)(parser->parsed + dispatch->offset) = ccv_point((int)(parser->coord_parser.x + 0.5), (int)(parser->coord_parser.y + 0.5));
				break;
			case PARAM_TYPE_STRING:
				if (dispatch->on_string)
					dispatch->on_string(parser->context, parser->string_parser.string);
				break;
			case PARAM_TYPE_BLOB:
			case PARAM_TYPE_BODY:
				if (dispatch->on_blob)
					dispatch->on_blob(parser->context, parser->blob_parser.data);
				break;
		}
	}
	if (parser->state != s_param_start)
	{
		parser->state = s_param_start;
		memset(parser->name, 0, sizeof(parser->name));
		parser->cursor = 0;
	}
}

static void param_type_parser_init(param_parser_t* parser)
{
	assert(parser->state >= 0);
	switch (parser->param_map[parser->state].type)
	{
		case PARAM_TYPE_INT:
		case PARAM_TYPE_ID:
		case PARAM_TYPE_FLOAT:
		case PARAM_TYPE_DOUBLE:
			numeric_parser_init(&parser->numeric_parser);
			break;
		case PARAM_TYPE_BOOL:
			bool_parser_init(&parser->bool_parser);
			break;
		case PARAM_TYPE_SIZE:
		case PARAM_TYPE_POINT:
			coord_parser_init(&parser->coord_parser);
			break;
		case PARAM_TYPE_STRING:
			string_parser_init(&parser->string_parser);
			break;
		case PARAM_TYPE_BLOB:
		case PARAM_TYPE_BODY:
			blob_parser_init(&parser->blob_parser);
			break;
	}
}

static void param_type_parser_execute(param_parser_t* parser, const char* buf, size_t len)
{
	assert(parser->state >= 0);
	switch (parser->param_map[parser->state].type)
	{
		case PARAM_TYPE_INT:
		case PARAM_TYPE_ID:
		case PARAM_TYPE_FLOAT:
		case PARAM_TYPE_DOUBLE:
			numeric_parser_execute(&parser->numeric_parser, buf, len);
			if (parser->numeric_parser.state == s_numeric_illegal)
				parser->state = s_param_skip;
			break;
		case PARAM_TYPE_BOOL:
			bool_parser_execute(&parser->bool_parser, buf, len);
			if (parser->bool_parser.state == s_bool_illegal)
				parser->state = s_param_skip;
			break;
		case PARAM_TYPE_SIZE:
		case PARAM_TYPE_POINT:
			coord_parser_execute(&parser->coord_parser, buf, len);
			if (parser->coord_parser.state == s_coord_illegal)
				parser->state = s_param_skip;
			break;
		case PARAM_TYPE_STRING:
			string_parser_execute(&parser->string_parser, buf, len);
			if (parser->string_parser.state == s_string_overflow)
				parser->state = s_param_skip;
			break;
		case PARAM_TYPE_BLOB:
		case PARAM_TYPE_BODY:
			blob_parser_execute(&parser->blob_parser, buf, len);
			break;
	}
}

static void on_form_data_name(void* context, const char* buf, size_t len)
{
	param_parser_t* parser = (param_parser_t*)context;
	if (len + parser->cursor > 31)
		return;
	memcpy(parser->name + parser->cursor, buf, len);
	parser->cursor += len;
}

static void on_query_string_field(void* context, const char* buf, size_t len, int header_index)
{
	param_parser_t* parser = (param_parser_t*)context;
	if (parser->header_index != header_index)
	{
		parser->header_index = header_index;
		// if header index doesn't match, reset the name copy
		parser->cursor = 0;
		memset(parser->name, 0, sizeof(parser->name));
		// terminate last query string
		param_parser_terminate(parser);
	}
	on_form_data_name(context, buf, len);
}

static void on_query_string_value(void* context, const char* buf, size_t len, int header_index)
{
	param_parser_t* parser = (param_parser_t*)context;
	if (parser->header_index == header_index)
	{
		if (parser->state == s_param_start)
		{
			parser->state = find_param_dispatch_state(parser, parser->name);
			if (parser->state >= 0)
				param_type_parser_init(parser);
		}
		if (parser->state >= 0)
			param_type_parser_execute(parser, buf, len);
	}
}

void param_parser_init(param_parser_t* parser, const param_dispatch_t* param_map, size_t len, void* parsed, void* context)
{
	form_data_parser_init(&parser->form_data_parser, parser);
	query_string_parser_init(&parser->query_string_parser, parser);
	parser->form_data_parser.on_name = on_form_data_name;
	parser->query_string_parser.on_field = on_query_string_field;
	parser->query_string_parser.on_value = on_query_string_value;
	parser->state = s_param_start;
	parser->param_map = param_map;
	parser->len = len;
	parser->parsed = (char*)parsed;
	parser->context = context;
	parser->cursor = 0;
	memset(parser->name, 0, sizeof(parser->name));
	// find out the special bodies that we cared about (PARAM_TYPE_BODY and PARAM_TYPE_ID)
	parser->body = parser->resource = s_param_start;
	int i;
	for (i = 0; i < len; i++)
		switch (param_map[i].type)
		{
			default:
				break;
			case PARAM_TYPE_ID:
				assert(parser->resource == s_param_start);
				*(int*)(parser->parsed + param_map[i].offset) = -1; // set id == -1 first.
				parser->resource = i;
				break;
			case PARAM_TYPE_BODY:
				assert(parser->body == s_param_start);
				parser->body = i;
				break;
		}
}

void param_parser_execute(param_parser_t* parser, int resource_id, const char* buf, size_t len, uri_parse_state_t state, int header_index)
{
	switch (state)
	{
		default:
			break;
		case URI_QUERY_STRING:
			query_string_parser_execute(&parser->query_string_parser, buf, len);
			break;
		case URI_CONTENT_BODY:
			if (parser->body == s_param_skip)
				break;
			if (parser->state != s_param_start && parser->state != parser->body)
				param_parser_terminate(parser);
			if (parser->state == s_param_start)
			{
				parser->state = parser->body;
				param_type_parser_init(parser);
			}
			param_type_parser_execute(parser, buf, len);
			break;
		case URI_PARSE_TERMINATE:
			if (parser->state != s_param_start)
				param_parser_terminate(parser); // collect result
			break;
		case URI_MULTIPART_HEADER_FIELD:
		case URI_MULTIPART_HEADER_VALUE:
			if (parser->state != s_param_start)
				param_parser_terminate(parser);
			assert(header_index >= 0);
			form_data_parser_execute(&parser->form_data_parser, buf, len, header_index);
			break;
		case URI_MULTIPART_DATA:
			if (parser->state == s_param_start)
			{
				parser->state = find_param_dispatch_state(parser, parser->name);
				if (parser->state >= 0)
					param_type_parser_init(parser);
			}
			if (parser->state >= 0)
				param_type_parser_execute(parser, buf, len);
			break;
	}
	if (resource_id >= 0 && parser->resource != s_param_start)
		*(int*)(parser->parsed + parser->param_map[parser->resource].offset) = resource_id;
}

ebb_buf param_parser_map_http_body(const param_dispatch_t* param_map, size_t len, const char* response_format)
{
	ebb_buf body;
	int i;
	static const char int_type[] = "integer";
	static const char bool_type[] = "boolean";
	static const char number_type[] = "number";
	static const char size_type[] = "size";
	static const char point_type[] = "point";
	static const char string_type[] = "string";
	static const char blob_type[] = "blob";
	size_t body_len = 12;
	for (i = 0; i < len; i++)
	{
		body_len += strlen(param_map[i].property) + 6;
		switch (param_map[i].type)
		{
			case PARAM_TYPE_INT:
			case PARAM_TYPE_ID:
				body_len += sizeof(int_type) - 1;
				break;
			case PARAM_TYPE_FLOAT:
			case PARAM_TYPE_DOUBLE:
				body_len += sizeof(number_type) - 1;
				break;
			case PARAM_TYPE_BOOL:
				body_len += sizeof(bool_type) - 1;
				break;
			case PARAM_TYPE_POINT:
				body_len += sizeof(point_type) - 1;
				break;
			case PARAM_TYPE_SIZE:
				body_len += sizeof(size_type) - 1;
				break;
			case PARAM_TYPE_STRING:
				body_len += sizeof(string_type) - 1;
				break;
			case PARAM_TYPE_BLOB:
			case PARAM_TYPE_BODY:
				body_len += sizeof(blob_type) - 1;
				break;
		}
	}
	if (response_format)
		body_len += 12 + strlen(response_format);
	body_len += 1;
	char* data = (char*)malloc(192 /* the head start for http header */ + body_len);
	snprintf(data, 192, ebb_http_header, body_len);
	body.written = strlen(data);
	memcpy(data + body.written, "{\"request\":{", 12);
	body.written += 12 + 1;
	for (i = 0; i < len; i++)
	{
		data[body.written - 1] = '"';
		size_t property_len = strlen(param_map[i].property);
		memcpy(data + body.written, param_map[i].property, property_len);
		body.written += property_len + 3;
		data[body.written - 3] = '"';
		data[body.written - 2] = ':';
		data[body.written - 1] = '"';
		switch (param_map[i].type)
		{
			case PARAM_TYPE_INT:
			case PARAM_TYPE_ID:
				memcpy(data + body.written, int_type, sizeof(int_type) - 1);
				body.written += sizeof(int_type) + 2;
				break;
			case PARAM_TYPE_FLOAT:
			case PARAM_TYPE_DOUBLE:
				memcpy(data + body.written, number_type, sizeof(number_type) - 1);
				body.written += sizeof(number_type) + 2;
				break;
			case PARAM_TYPE_BOOL:
				memcpy(data + body.written, bool_type, sizeof(bool_type) - 1);
				body.written += sizeof(bool_type) + 2;
				break;
			case PARAM_TYPE_POINT:
				memcpy(data + body.written, point_type, sizeof(point_type) - 1);
				body.written += sizeof(point_type) + 2;
				break;
			case PARAM_TYPE_SIZE:
				memcpy(data + body.written, size_type, sizeof(size_type) - 1);
				body.written += sizeof(size_type) + 2;
				break;
			case PARAM_TYPE_STRING:
				memcpy(data + body.written, string_type, sizeof(string_type) - 1);
				body.written += sizeof(string_type) + 2;
				break;
			case PARAM_TYPE_BLOB:
			case PARAM_TYPE_BODY:
				memcpy(data + body.written, blob_type, sizeof(blob_type) - 1);
				body.written += sizeof(blob_type) + 2;
				break;
		}
		data[body.written - 3] = '"';
		data[body.written - 2] = (i == len - 1) ? '}' : ',';
	}
	if (response_format)
	{
		memcpy(data + body.written - 1, ",\"response\":", 12);
		body.written += 11;
		size_t response_len = strlen(response_format);
		memcpy(data + body.written, response_format, response_len);
		body.written += response_len + 1;
	}
	data[body.written - 1] = '}';
	data[body.written] = '\n';
	body.len = body.written + 1;
	body.data = data;
	body.on_release = 0;
	return body;
}


text:
Home What's On Article
Cambridge writer Beth Lynch reveals how a garden saved her sanity when she moved abroad in Where the Hornbeam Grows
By Alex Spencer
alex.spencer@iliffemedia.co.uk
When Beth Lynch's husband Shaun got a well paid job in Switzerland, the couple saw it as an opportunity to start an exciting life in a new country.
They both already spoke French and German and thought it would be easy to find work and friends in their adopted home.
Author Beth Lynch with her book, Where the hornbeam grows, seen here in her garden in Cambridge. Picture: Keith Heppell. (12241411)
But as a garden designer, Beth discovered her skills did not translate to the job market in Switzerland, and it was harder than expected to fit in.
What's more, there were bizarre laws that meant you could be arrested for mowing the lawn on a Sunday, anti-noise rules so strict men weren't allowed to use the toilet standing up after 10pm and - finally - neighbours who accused them of poisoning their cat.
Beth sought solace in gardening and has written a memoir - Where the Hornbeam Grows - about how she created a natural hideaway in the Jura to escape to.
"Despite having jumped in with both feet learning the languages, avoiding the whole expat scene and trying to integrate, I just became lonelier and lonelier and realised the people thing was not working out very well," says Beth.
"At that point, having sold our house in the UK we decided to buy a cottage in the French speaking part of Switzerland, the Jura, which is very green and a bit overlooked by international travellers. We bought a little house with a huge garden and I threw myself into making a garden as a way of trying to put down roots and find a way of belonging.
The village in the Jura (12241798)
"I found myself starting to write things down and that coincided with this journey to making the garden. That got me writing about the story of coming to the garden, feeling rootless and nurturing the relationship with the natural world."
In this remote and unfamiliar place of glow worms and dormice and singing toads, Beth learnt to garden in a new way, taking her cue from the natural world.
As she planted her paradise with hellebores and aquilegias, cornflowers and Japanese anemones, these cherished species forged green and deepening connections: to her new soil, to her old life in England, and to her deceased parents, whose Sussex garden continues to flourish in her heart.
"I have always found gardening gave me a sense of connection and absorption," says Beth.
"It did help immensely - it was amazing. I learnt so much about myself and the natural world. It as a very wild-edged garden in a beautiful part of the countryside and was a complete immersion for me.
"For quite a long time I believed it had sorted everything. But of course it did not because you can't just be on your own in the garden. I realised I still needed people. I realised for the very long term even the garden couldn't solve everything. That was a very tough lesson."
Arriving in Switzerland came as a huge culture shock to the couple, who had underestimated the differences in the way of life there compared with the UK.
"The thing that I found most surprising was the ban on activities on Sundays," says Beth.
"You were not allowed to operate a washing machine or mow the grass on a Sunday and we always assumed that was about noise but you also weren't allowed to hang laundry out, so it was about signs of work, like a religious throwback.
"If you started a lawn mower on a Sunday in the Zurich area a neighbour would call the police and they would come out. A Swiss friend said he has known that happen on several occasions. That is quite a marker of cultural difference - it was bewildering and I didn't get it
"You could very quickly feel that you were being monitored and your life was being regulated and scrutinised. It was made very clear to us that people are aware of what we were doing even though they didn't interact with us.
I found it very striking having moved back to the uk to a little place in Cambridge with a city garden overlooked by lord knows how many houses but i don't feel scrutinised there."
On the one hand the book is about the garden that Beth created in Switzerland, but it also about the garden of her childhood that she 'carries in her heart' which belonged to her parents in Sussex.
"It is always there and I find bits of it in new places. On top of that I have literally taken bits of my parents garden with me - plants and cuttings. It was opposite a bluebell wood filled with hornbeam trees and my parents garden even when i was really tiny i had a strong sense of my parents' commitment to the garden which was made from the corner of a field where they built a house and enclosed the garden with a beautiful hornbeam hedge."
The last straw for Beth was when her next door neighbour accused her of poisoning their cat. Beth says: "To be accused in your third language of poisoning someone's cat is quite complicated so I said come again? She said the cat is not very well and I was racking my brains about what it could be.
She said they had decided we had bought the hedging plants form a supplier who had treated the roots of the plants with rodenticide. I had never heard of that before - even though I was a trained garden designer - I thought it was quite an ingenious idea. She said a mouse must have eaten one of the roots and died and that their cat had then eaten the mouse. It was pretty surreal. It added insult to injury that I had sourced the trees from an organic supplier."
Fortunately the cat survived but after this incident the couple began to think about moving home. However Beth doesn't harbour any ill feelings about her time in Switzerland and feels that she just couldn't understand their culture.
"I would never want that to be construed as a criticism because the Swiss have their own culture and their own way of doing things," she says, "but it was a perpetual sense of incompatibility and that I wasn't ever going to fit in there."
Where the Hornbeam Grows is published by Weidenfeld & Nicolson, priced £16.99.


text:
Joining forces to further step up efforts to tackle knife crime
Cheshire Constabulary has numerous plans in place in support of a national campaign to take knives off the streets and educate people about the dangers of carrying weapons.
Held next week - from Monday 26 April to Sunday 2 May - Operation Sceptre aims to reduce the impact of knife crime in communities.
Cheshire has one of the lowest rates of knife crime in England, and statistics show that the number of knife-related offences committed in the county decreased by 24 per cent from the end of March 2020 to the end of March 2021.
The force is determined to further reduce the number of knives carried on Cheshire's streets.
Cheshire Constabulary has a multi-faceted approach to tackling knife crime as it endeavours to achieve weapons-free streets throughout the county.
The force's considerable ongoing efforts in this regard will be heightened by enforcement and engagement initiatives held in Cheshire during the national week of action.
Community weapons sweeps
Stop and search operations
Warrants being executed in related to knife crime
Intelligence-led action against habitual knife carriers
Test purchase operations
Engagement events working alongside partner agencies such as community groups, housing associations and Trading Standards to educate Cheshire residents about the laws surrounding buying and carrying knives
Visiting education establishments to talk to young people about the potentially fatal consequences of carrying weapons
Speaking to retailers that sell knives about security and the national Challenge 25 policy
Facilitating more bleeding control kits being in place at community venues across Cheshire (the kits contain equipment and instructions that enable members of the public to prevent knife crime victims from bleeding to death).
The operation will also see constabularies work alongside Border Force to identify people who import knives into the country from overseas, as well as those who buy weapons online, and take the appropriate action.
Chief Inspector Sarah Heath, who is Cheshire Constabulary's knife crime lead, said: "Nationally, knife crime is a growing problem, and the week-long Operation Sceptre campaign is an initiative that the force is always more than happy to support.
"We were severely restricted in terms of the work we could do during last year's two weeks of action for Operation Sceptre, with them having fallen when the country was in lockdown due to the Covid-19 pandemic.
"Now that we have come out of lockdown, there are more avenues open to us in terms of tackling knife crime across Cheshire over the seven days.
"However, knife crime is an issue that the force tackles throughout the year, with officers working day and night to protect communities.
"We take knife crime extremely seriously and are proud of the fact that Cheshire has a lower rate of knife crime than most other counties in England.
"When people carry knives, it is only a matter of time before someone suffers life-changing injuries or is killed, and if you carry a knife then you are much more likely to be involved in a knife crime.
"As all the statistics show, carrying a knife doesn't make you safer.
"At Cheshire Constabulary we have a structured prepare, protect, pursue and prevent approach to tackling knife crime that involves various partner agencies, including local authorities, education providers, health authorities, third sector organisations, youth representatives and community groups.
"We work together to achieve long-term change by educating young people about the dangers and futility of carrying weapons.
"We make sure they know that carrying a knife, even if they have no intention of using it, is a crime and can increase the likelihood of suffering an injury and having a criminal record.
"We also steer them away from criminality and offer them attractive alternative ways to spend their time.
"Our goal is to achieve weapons-free streets throughout the county and we endeavour – through education, awareness and action – to make Cheshire an area where no-one carries a knife, or feels that there is a reason to do so.
"However, the police cannot achieve this goal on our own. Knife crime is a societal problem that cannot be solved without the support of the whole society.
"If you have any information regarding knife crimes, or those who carry weapons, please let us know.
"If you know someone who carries a knife then reporting it to the police could be enough to save a life."
Retailers also have an important role to play, by helping to ensure that weapons are not falling into the wrong hands. They are urged to have robust controls on the sale of blades, such as kitchen knives.
It is illegal to sell a knife to anyone under the age of 18, and anyone found carrying a knife in public, without a reasonable excuse, faces a prison sentence.
To report any type of crime involving weapons, call Cheshire Constabulary on 101, or 999 in an emergency.
Information can also be passed to the force online via Report
Anyone who knows someone that carries a knife can report it to Crimestoppers anonymously on 0800 555 111 or via Crimestoppers


a fact known to many a good musician. Christmas albums - they've all done it. Facing this situation, you better bring a lot of sweet ingredients in order to create a completely new and completely different Christmas cake - especially one from Stockfisch.
Some stalwarts of Stockfisch records to this noble end have gathered around Eugene Ruffolo; white beards and scarlet coats they wear - but watch out for their guitars! And finally they achieved the impossible task of creating a Christmas CD sounding like no other.
Our time is one of many scary phenomena - like supermarkets sporting gingerbread in September. In the light of this, this Stockfisch production is an exception of the first degree as far as music goes - and as far as emotiononal wellness goes at this special time of the year.
Swingle Bells - there ain't no bells sounding sweeter. If you are a nonbeliever, then go and listen to Stille Nacht as guitar instrumental or a Christmas blues. And very well that Chris Jones is not forgotten, still playing on on these recordings, a plan which goes back for years in Stockfisch history. Tradition and the courage of creative innovators - that's Stockfisch's gift to music lovers - given as a trademark professionally and at this Christmas time given from the heart. Christmas may be Christmas every year, it comes alive forever new and warms the heart - this is what music does, and certainly music like this.


with mementos from her travels.
Clipping courtesy of Suzanne Olson Wieland.
A few years ago, my cousin, Suzanne Olson Wieland, sent me a newspaper clipping about her maternal grandmother (and my maternal great-aunt), Benita (McGinnis) McCormick.
The paper was most likely The San Mateo Times, a publication covering peninsula news of the San Francisco Bay Area. Based on the photograph, I would estimate the article was published in the mid-1970s.
Artist and businesswoman, Benita McCormick, zips through life with vim and vigor. The secret of her zest is to grab hold of an idea in the same way one would grab hold of the tail of a donkey – then hang on.
It was shortly after her marriage to Phillip McCormick, a railroad executive with the Baltimore-Ohio in Chicago, that Mrs. McCormick began putting her ideas to work. Prior to that she had been too busy studying art illustration and painting at the Art Institute in Chicago and the galleries in Paris and later, working on the Chicago movie censor board.
Mrs. McCormick's method is to take a creative idea, hammer and chisel it into the commercial world and produce a going concern.
Shortly after her marriage she got the idea of teaching children to paint to music after seeing the moods created by violinists during the rehearsal of love scenes in Hollywood.
She rented a studio in the Astor Hotel in Milwaukee, where she was then living, and began to teach the children painting to the tunes of the Teddy Bears' Picnic and the Clock Shop. Her idea was so successful that the Milwaukee Art Institute copied her idea and installed an electric organ in their institute.
Her painting classes brought an acquaintance with the youngsters' mothers and out of this grew her interior decorating business which was soon thriving.
The McCormicks returned to Chicago and became involved in raising their twins, Jane and George (sic). What then could be more natural than for a young mother busy at home to decide to redecorate her dining room?
So Benita set to work. She stripped the dining room of its five panels of wallpapered hunting dogs and began to paint. She painted the room in oils showing the different fairytales that would entertain the children.
Guests coming to the house were impressed and soon she was doing scenes for other people's homes. One painting she did for her father, of his favorite fishing haunt, added $500 to the sale of the house.
As the children grew older and became more independent Benita turned her interest towards advertising. She got the idea of making Christmas cards that showed the different models of cars. And she soon had more orders than she could handle. The result was a studio business that ran for three years.
A business enterprise that started during World War II and was to last for 16 years began when Benita dreamed up the idea of a job survey. Her idea was to call people in their homes and tell them of the job opportunities available to them. She would then send the prospective employe her card and have them present it to the personnel office that they applied to.
It was a workers market in those years; there were hundreds of jobs available that employers were desperate to fill. Benita took her idea to the most conservative firm in town and won them over with a contract.
At the end of 16 years of personnel work Benita decided to retire with her husband and "have some fun." They made their base in San Mateo and began to travel.
They went to Europe and fell in love with Spain where they stayed one year. After a year in California they returned to Spain and toured the Near East and the Holy Land as well.
It was during her stay in Barcelona that Benita became interested in applying gold leaf to statues. She found a man in Barcelona who worked in gold leaf and became his student for five hours a day for eight months.
Professor Antonio's studio was what had once been a stable and later the carriage house of a great mansion. It had walls one foot thick that were pocked with cannon balls, a false floor and cathedral-high ceiling.
Like all her ideas, this, too, has become an enterprising project with Benita making coats of arms for families and newly formed businesses.
Linda, it seems like every time you post another piece on your Aunt Detty, it reveals yet another interesting facet to her life. She must have been an amazing woman!
Indeed she was, Jacqi – I think you'd have liked her. As I near the end of her story, I'm constantly reminded of vignettes from her life that just beg to be told, like candles that must be lit in the night. Thanks for reading!