text:
The Epitaph Riders are no more
At one time the Epitaph Riders were perhaps the staunchest and most respected outlaw club in New Zealand, but they are no more. Last week their colours were burned and the club closed down. Here is the story of their early history. I wrote it for PATCHED as part of their remarkable war with the Devils Henchmen. RIFP.
The Epitaph Riders was formed in 1969 by a bunch of friends in a large house on Geraldine Street in Christchurch. Although there was a nominal president, Ross Jennings, initially there were few, if any, rules and no club structure. Like other outlaw motorcycle clubs in the South Island around this time (such as the Antarctic Angels of Invercargill and the Highwaymen of Timaru), and before they had significant contact with the more mature scene in the North Island, the Epitaph Riders took their cues largely from popular media. A member of the Riders recalled:
That book Hell's Angels that Hunter Thompson I think wrote – that was out and we just – it all just sort of happened and we were all running around with this stuff [patches] on our back and um that's how it started . . . We didn't [know what we were doing] we were just a bunch of young guys, mate, that just hung around. We're all fuckin' 17, 18, the oldest would have been 21 probably. And it's just the way it happened. We all used to meet on Friday nights and just go drink piss – it just started from there . . . Drink piss and fuck women. There was nothing else in life – riding bikes.
By 1973, however, the Epitaph Riders had matured significantly. The group was now comprised of young men from working-class backgrounds aged in their late teens to mid-twenties, and boasted some 22 patched members, including an executive consisting of a president, two vice presidents and a sergeant at arms. By this time, rules were also in place to ensure the club was a significant part of its members' lives.
The increasing commitment to the club is reflected in a decision made in August 1973 making it compulsory for members to attend weekly meetings and a Sunday run as well as any parties the group decided to have. A rented flat was used as a clubhouse and weekly fees of two dollars were collected along with an additional one-dollar levy for beer on the Sunday rides. Fees were used for club expenses including subsidising major runs, helping members in trouble, and paying fines incurred during group activities. The communal behaviours of the group are, in substantial measure, a reflection of the wider social environment of the time. The club's colours were also held in significant esteem. While colours were only compulsorily worn on runs, it was against club rules to deny being a member of the club. In the mid-1970s, one member even rode to teachers' training college on his bike wearing his patch. It would be impossible to conceive of this occurring now without a public uproar, reflecting a dramatic change in attitudes toward such groups.
Although the Epitaph Riders' motorcycles were kept meticulously clean, members had adopted the 'ridgies' style, that was by this time standard within the gang scene. 'Ridgies' (derived from 'originals') is the set of original clothing a member was wearing when he was initiated into the gang and given his colours. These clothes were regarded as sacred and never washed so they soon became dirty and tatty. The custom may have come about initially as an inevitable outcome of members working on their machines and travelling and sleeping rough while on runs. It soon, however, became the desired look – a form of gang uniform. Yet ridgies were also more than a uniform. Grease from vehicle breakdowns, dirt from motorcycle trips around New Zealand, blood from fights and fluids from sexual encounters all mixed together to become part of a subcultural, or countercultural, style imbibed with symbolic meaning. As one Mongrel Mob member put it: 'To wash them would be to wipe away the memory of our conquests and history.' When ridgies fell apart, they were either patched up or a similar item of clothing was sewn underneath.
As they were for all gangs, the clothes undoubtedly represented a visible expression of the Epitaph Riders' antisocial stance, and many of the members had convictions for petty offences. In what is now a common – and important – refrain, the police were perceived as an enemy and many of the club's members believed they were unfairly targeted and victimised. Fighting was a significant activity that demonstrated machismo as well as instilling group loyalty that the club actively fostered. With an 'all for one, and one for all' philosophy, if any member got into a fight, regardless of fault, other members were required to back him up. This fighting ethos was central to enhancing the group's reputation and ensuring that people thought twice about confronting its members. In Christchurch, the Riders engaged in many conflicts with other fledgling gangs, and particularly budding outlaw clubs. Like other Biker Federation clubs, the Epitaph Riders had determined that they would be the only outlaw club in their city. In the early 1970s, at least three other groups – the Apostles, the Heaven's Outcasts, and the Highwaymen – were beaten or intimidated by the Riders and had their colours taken. Vanquished, these groups disappeared and the Riders maintained a firm grip on Christchurch. By 1973, the Epitaph Riders were a well-established outlaw motorcycle club, and with their frequent travels around the country it is widely acknowledged by those in the scene at the time that they held a reputation as among the country's staunchest, and consequently one of the most respected, groups within the biker – and indeed the entire gang – community. In biker parlance, they were class.
[References for the above can be found in PATCHED - likewise the story of their dramatic war with the Devils Henchmen].
Phyl
sweet as I was riding then too . few times went on runs ...... good times ..
Ian Dalziel
The intro needs a wee fix:
"At one time the Epitaph Riders were perhaps the stanchest..."
'staunchest' surely...
send in the epitaph writers or will it just be 'epithets' from here on in...
:- )
Ha! Thanks for that. Fixed!
grant philpot
i agree ,pullcrap commentation epitaph are not staunch they are what is known to be how it is a tough life , hard life shichs now dont even get near what things did used to be and im proud to know that
some one who once knew epitaph a long time ago
Chch born
Have been told my father who passed away was a member. Is there any members reading this that may know...
What was his name,it won't be hard to find out
missbehaviour
tell me his name and i will ask my partner who waz a long time member and friend formost of the last 40 yrs
Linda voc
Who was u dad I tell you
I was looking forward to an article re why they closed. But to my disappointment here was only something from your book.
I'm sure you'll find the story on here sooner rather than later. But that's the story for now. Thanks for your interest. Best regards, Jarrod.
Yep Jarrod, you were correct. And a sad story it is, but very familiar.
Gutter link
Hi there were can I purchase a copy? keen to read it
Books store either have it on the shelf or will order it in for you. Online, this is a pretty good option
http://www.amazon.com/Patched-The-History-Gangs-Zealand/dp/1869407296
Thanks for your interest and I hope you enjoy it.
Best regards, Jarrod
Brian Longley
Good bunch of blokes back in the early 80's. A few of the boys use to work for me. I was always made welcome at the club house in Lincoln Road. Long live the good memories. Cheers
all hail lincoln green
I was the girlfriend, and then wife of an Epitaph Rider in the seventies. They were exciting times. The mass arrest for unlawful assembly at Kerrs Road. The Sunday runs were the highlight of the week. Drinking at the Ferrymead tavern.
THEY NEVER FORGOT KERRS ROAD I FEEL I ONLY HEARD ABOUT IT BUT THEY ARE WHY BANDIDOS FOUGHT THE PIGS IN OZZIE
Did you live in Hoon Hay, I use to babysit for someone that was a Epitaph Raider, her name was Linda, can't remember her husband's name?
charlies ghost
fortifications going up at the clubhouse ??
I was out with them one Friday night in 1977 or 1978 and called in to the Loin Tavern in Addington after a few drinks in the ground floor bar at Noah's. When Bubbles started a full on brawl in the public bar with some guy over a hat. lol Totalled the public and lounge bars moved into the car park then onto the road, everyone was going for it. Mike Mc had a full leg in plaster but it didn't stop him, and I got to mind is bike lol. Yes I agree Linda it was a very exciting time.
Big G link
another great read, well done. As a Jap bike rider in the day "we" all knew we could be in the shit if "we" had a slow bike or were just out numbered.
Dan T
Patched over to the Head Hunters?
So, there was no White Power influence. Teachers in training and future TV producers? Different times. 'Satan's Slaves' did not have bikes in sight, but would buy takeaways near The Press in the Square. I once raced a Kawasaki on my Solex along Colombo.
WHAT THERE WAS IS JUST ROCK MACHINE TRYING TO BUILD IN A HOLE OF THEIR OWN AND WONT SURVIVE
Another correction required. Highwaymen should read Hiwaymen.
Hudson Easton link
Very joyful post. I just stumble upon your blog and wanted to say that I have really enjoyed browsing your blog posts. Thanks for such post and please keep it up.
Troy Cruz link
I just like the valuable information you provide to your articles. I will bookmark your blog and take a look at again right here frequently.
linda cox link
the riders were names the bears before they re named them selves,, john ward was a founder ,, of then lol shit thats a few years ago to,, rip to charlie , mike , bear,,, and many more ,,,
IT WAS THE GOOD OLD DAYS
john kish link
yeah, remember.they good old days
back in the late 70s a phalanx of eps on the way to the british in lyttelton escoted me on my crashed and bent ajs from the city to almost home. anybody out there remember that? i'd still like to say thanks
michael francis edens
the heavens outcasts never had a patch taken the patch in the book patched is neil b's who became a ep . i was in the heavens outcasts
I remember getting a letter from one of my mates who had moved to CHCH for a year from Canada, and he said he had met some epis and been on a run with them and had a great time. Could someone tell me what the RIFP on the patch means?
Roni Rider(2003-05-06
I was a prospect when the members at the time trumped up bullshit lies and made "in my eyes the last true old school member " not to mention LIFE member hang in his colours ... y cause this member did not want p in the club in its purest form .. And I wonder y ?? 2nd longest standing club in New Zealand to full to meth nice job -G,B,L,A .,si u had no choice,, The club was my life I put the club b4 everything when I became a member A good man once told me if uve got enuff money in ur pocket for a pie and a drink ur winning... I will always remember that ,,Much love for u D.A. When he left the club died my heart was broken and I felt as tho we the "club" Had signed our own closure..yer I helped riddle it with p I thort I was doing Wht was needed aye "body" brothers till death . Yer rite brothers till meth .. I've got so much I want to tell as so much lies have been told and believed yet where the fuck is our Club ?? ERMC RIFP
In the 1970's i rode to ChCh a lot from Blenheim on a jap bike you'll be pleased to know HaHa. About a dozen of us stayed some where in ChCh with a mate. As we were getting on our bikes the next morning a car pulls up and two guys get out. One was saying something too us. i couldn't quiet hear. So innocent jap riding 17yr old walks toward them. Whoo!!!!! shot gun gets pulled up from beside his leg, gets cocked and pointed at me. Question time, who are you what are you doing blah,blah,blah. They left happy. It was weird because it never fazzed me.
Hi, I worked with Alan Fagan, Ron Grossi and Glen Roebottom, years ago, awesome guys and a privilege to know. Cheers
i new them from 75 till the end.Who started them up from LYTTELTON were they'd drink at the Brit there Bonnies to Harleys. Sum of them ended up been barman there. It was a tight knit with them & the Seaman Union over there but thats a story of its own


Quote: "Flames broke out around 9 p.m. We're told there was an explosion at the home, but there's no word what caused it."
Quote: "...luckily they were able to pump water from a nearby pond."
Quote: "It was the second major fire overnight. Earlier firefighters tackled a blaze that torched a May Street upholstery business."
Quote: "A NOAA Fisheries spokeswoman said sperm whales are a deep water species and should not be here. She said the fact that it beached itself is a sign that something was seriously wrong. The whale was described as being in very bad shape, basically skin and bones."
Quote: "A FOX 4 viewer who works in area said the sinkhole was first spotted Monday or Tuesday. She said prior to the cones being placed in the road, someone drove into it. Now, people who work in the area are growing more concerned as the hole appears to be getting bigger."
Quote: "One person died and five people are missing after a tunnel operated by Eskom Holdings SOC Ltd. collapsed near Ladysmith, South Africa, the state-owned utility said in an e-mailed statement. A rescue operation is underway at the site in the coastal KwaZulu-Natal province, Eskom said in the statement."
Quote: "In interviews with Thanh Nien, many residents believed that it was an aircraft explosion. However, the Ham Thuan Nam military headquarters said that no aircraft was present in the Binh Thuan sky areas when the incident happened."
Quote: "The blaze broke out about 1:15 a.m. at the Conroe Independent School District bus barn at 108 Gladstell, according to the Conroe Fire Department. It appears that three buses were destroyed and two others were damaged, said Lisa Meeks a CISD spokeswoman. No injuries were reported. Meeks said it appears the fire started in one of the buses and spread to others nearby."
Note: People still park vehicles next to other vehicles?!
Quote: "The homeowner, who did not want to give his name, said he heard a loud 'boom' and went outside to see his uncle's Ford F-150 on fire. Clemens said the cause of the fire is not known."
Quote: "A fire has destroyed a pickup which started inside the engine, even though the engine was not running..."
Note: People still park vehicles next to homes?!
Quote: "Vacant homes, garages, trash cans and wood poles have been burned."
Quote: "The lorry, a Mazda T3500, was carrying about 30 people headed towards Rimai in Chipinge where they were going to bury a relative. The mourners, who were coming from Chegutu, had travelled all night. The coffin that was carrying the corpse was also burnt in the inferno."
Quote: "21 people were burnt to death on the accident spot and two more died on the way to the hospital."


This original software is protected by copyright and trademark law.
It may only be sold by authorized dealers and only be used for private purposes.
By installing or using this software product you agree to be bound by the provisions of this EULA.
as a legal person ) and JoWooD Productions Software AG.
license does not represent  a "sale" of the software.
single portable PC, a single pager, etc.).
Every other use, especially the unauthorized leasing, public display or other demonstration (e.g.
Internet or other online systems) without prior written consent is prohibited.
abide by all copyright instructions contained in the pictures generated by the software.
One single copy of the software product may be stored for safety or archiving purposes only.
that the software will essentially work in accordance with the accompanying printed materials.
bought your version of the software product are neither replaced nor limited by this warranty.
JoWooD Productions Software AG has previously pointed out the possiblity of such damages.
obligated to destroy all copies of the software product.
this agreement will remain unaffected.


text:
Q: Free space on brand new asus zenbook 64 SSD is only 15 Gb
Possible Duplicate:
How can I visualize the file system usage on Windows?

I just bought a Zenbook with a 64GB SSD. But free space on the disk is only 15GB (I have only installed Google Chrome)?
Is this normal? I've checked the Windows folder and that's only 10GB. The rest of the folders is no more than a few GB's, so how can I have only 15GB available?
Update:
There is 8GB for Microsoft Office so I uninstalled that.
Now, why does Windows 7 take up so much space (21GB)?

redpajama_set_name: RedPajamaStackExchange


Approx Number of Lines: 3000 millon.
Notes: Total Wireless is a TracFone brand.
Cost: 25.00 per 30 days. Auto Pay Discount: 1.30.
Notes: Data addon required to use MMS.
Cost: 35.00 per 30 days. Auto Pay Discount: 1.80.
Cost: 50.00 per 30 days. Auto Pay Discount: 2.50.
Minutes: Unlimited, Texts: Unlimited, Data: 25 GB Hard capped.
Minutes: Unlimited, Texts: Unlimited, Data: 15 GB Hard capped.
Cost: 85.00 per 30 days. Auto Pay Discount: 4.30.
Cost: 90.00 per 90 days.
Cost: 100.00 per 30 days. Auto Pay Discount: 5.00.


Mediterranean country inside interir ring miami rack hooks painting little mirror spaces countertops organizer over projects. Architecturaldesign top toiletries wall company bronze magzine teak home desingning stores smallest towel saving. Mission painted drawer evolo ring idea chest affordable pedestal hidden desk iron bin closet behind ladder resources.


Please note that information on this website is provided as a convenience. There may have been recent changes which have not yet been updated on this site. Please contact the Town Office for specific requirements.
Access various permits needed for developing buildings in Vineyard.
View impact fee summaries, the consolidated fee schedule and the building permit fees for the Town of Vineyard.
Discover several outside websites that may be helpful in the development process.
Check out applications needed for community development.
Discover several maps that display the features of Vineyard.
Access the town ordinances and town code established for the Town of Vineyard.
View the standard specifications that apply to development in Vineyard.
Visit our Streetlight Map to report outages and request repairs.


text:
Cheap flight offers from Singapore to Cebu
from Singapore to Cebu
from Thursday, April 15, 2021 to Monday, April 19, 2021
Philippines flights
Flights Singapore - Cebu
Cheap flights to Cebu in February
Singapore - Cebu
Airline tickets to Cebu for next weekend
Cost of living in Singapore compared with Cebu
Milk coffee 3.46 € 1.96 € -43%
Monthly pass 71.47 € 10.86 € -85%
Average monthly disposable salary (net) 2,649.31 € 265.44 € -90%
Cheap flights from outside of United Kingdom to Cebu
Cheap flights Bacolod - Cebu
Departing on Saturday, April 3, 2021 and returning on Tuesday, April 6, 2021
Cheap flights Bangkok - Cebu
Departing on Monday, April 19, 2021 and returning on Tuesday, April 20, 2021
Cheap flights Butuan - Cebu
Departing on Saturday, February 13, 2021 and returning on Tuesday, February 16, 2021
Cheap flights Cagayan De Oro - Cebu
Departing on Monday, February 22, 2021 and returning on Friday, February 26, 2021
Cheap flights Davao - Cebu
Departing on Thursday, April 1, 2021 and returning on Sunday, April 4, 2021
Cheap flights Denpasar Bali - Cebu
Departing on Tuesday, April 13, 2021 and returning on Tuesday, April 20, 2021
Cheap flights Dumaguete - Cebu
Departing on Saturday, April 3, 2021 and returning on Saturday, April 10, 2021
Cheap flights Hong Kong - Cebu
Departing on Wednesday, April 14, 2021 and returning on Tuesday, April 20, 2021
Cheap flights Kalibo - Cebu
Departing on Thursday, February 25, 2021 and returning on Tuesday, March 2, 2021
Cheap flights Kuala Lumpur - Cebu
Departing on Wednesday, March 3, 2021 and returning on Wednesday, March 10, 2021
Cheap flights Luzon Island - Cebu
Cheap flights Manila - Cebu
Departing on Thursday, February 18, 2021 and returning on Tuesday, February 23, 2021
Cheap flights Orlando - Cebu
Departing on Tuesday, April 13, 2021 and returning on Wednesday, April 21, 2021
Cheap flights Puerto Princesa - Cebu
Departing on Friday, January 29, 2021 and returning on Friday, February 5, 2021
Cheap flights Seoul - Cebu
Departing on Wednesday, March 10, 2021 and returning on Wednesday, March 17, 2021
Cheap flights Shanghai - Cebu
Departing on Thursday, April 1, 2021 and returning on Tuesday, April 6, 2021
Cheap flights Sydney - Cebu
Departing on Tuesday, April 6, 2021 and returning on Wednesday, April 14, 2021
Cheap flights Tacloban - Cebu
Cheap flights Tokyo - Cebu
Departing on Monday, February 22, 2021 and returning on Sunday, February 28, 2021
Singapore - Cebu CEBU Pacific Air
Singapore - Cebu Tiger Airways
Singapore - Cebu Silkair
Cebu CEBU Pacific Air
Cebu Philippine Airlines
Cebu Cathay Pacific Airways
Cebu Silkair
Cebu Tiger Airways
Cebu Korean Air Lines
Top flights in Singapore
Singapore - Shanghai
Singapore - Bangkok
Singapore - Denpasar Bali
Singapore - Medan
Singapore - London
Singapore - Hong Kong
Cebu airports map
Weather forecast for Cebu
Flights from Singapore to Philippines
Singapore - Manila
Singapore - Luzon Island
Singapore - Davao
Singapore - Iloilo
Singapore - Caticlan
Singapore - General Santos
Main flight connections from Singapore to Philippines
Singapore - Puerto Princesa
Singapore - Bacolod
Singapore - Kalibo
Singapore - Laoag
Singapore - Cagayan De Oro
Singapore - Butuan
Singapore - Chiang Rai
España - Vuelos Singapur (SIN) Cebu
Italia - Voli Singapore Cebu
Norge - Flyvninger Singapore Cebu
Magyarország - Repülőjegy Szingapúr Cebu
Sverige - Flyg Singapore Cebu
France - Vol Singapour Cebu

redpajama_set_name: RedPajamaCommonCrawl


text:
Friday, July 22 • 7:30pm - 10:00pm
Rock band Three Days Grace performs live in the M&T Bank Grandstand.
Three Days Grace is comprised of guitarist and lead vocalist Adam Gontier, Neil Sanderson on drums, piano, and vocals, bassist Brad Walst, and Barry Stock on guitar. Their latest album, Life Starts Now, was released in September of 2009 following their platinum certified album, One-X. Tracks on the album include "Break", "The Good Life", and "World So Cold". In preparation for their latest album Adam Gonteir said, "Before we went into the studio, we'd listen to classic rock records by Led Zepplin and Black Sabbath, just to remember the sounds that we loved while we were growing up." Tickets are $48 for track and stadium seating and $43 for grandstand and clubhouse seating (ticket price includes the online ticket handling fee).
>> Buy Tickets
Friday July 22, 2011 7:30pm - 10:00pm


text:
package nam.model.listener;

import java.io.Serializable;

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;

import org.apache.commons.lang.StringUtils;
import org.aries.ui.AbstractWizardPage;

import nam.model.Listener;
import nam.model.util.ListenerUtil;

@SessionScoped
@Named("listenerIdentificationSection")
public class ListenerRecord_IdentificationSection extends AbstractWizardPage<Listener> implements Serializable {

	private Listener listener;

	public ListenerRecord_IdentificationSection() {
		setName("Identification");
		setUrl("identification");
	}

	public Listener getListener() {
		return listener;
	}

	public void setListener(Listener listener) {
		this.listener = listener;
	}

	@Override
	public void initialize(Listener listener) {
		setEnabled(true);
		setBackEnabled(false);
		setNextEnabled(true);
		setFinishEnabled(false);
		setPopulateVisible(true);
		setPopulateEnabled(true);
		setListener(listener);
	}

	@Override
	public void validate() {
		if (listener == null) {
			validator.missing("Listener");
		} else {
			if (StringUtils.isEmpty(listener.getName()))
				validator.missing("Name");
		}
	}

}

redpajama_set_name: RedPajamaGithub


Haven't found the right listing? There are 1 other Computer Servers in Menomonee Falls. Click here!
OfficeMax - Tech Services can be found at N93W17700 Appleton Ave . The following is offered: Computer Servers . In Menomonee Falls there are 1 other Computer Servers. An overview can be found here.


Newton Prep is a leading co-educational day school for pupils aged 3-13 years, situated close to Battersea Park and Queenstown Road BR stations. We offer a challenging education for inquisitive children who are eager to engage fully in the world they are growing up in.
We are seeking to appoint experienced and qualified NVQ Level 3 (or equivalent) practitioner to provide maternity cover in one of our Reception classes with effect from November 2014. The successful candidate whilst working under the supervision of a qualified teacher must be able to work independently and be capable of working with small groups of Reception aged children in order to be able to assess their progress and development. Applicants must be able to demonstrate a strong knowledge and understanding of the Early Years Foundation Stage, strong communication skills combined with the ability to work as part of a cohesive team and a strong work ethic.
Hours of work are Monday to Friday 8.15-4.45pm term time only (35 weeks per year). Other benefits include contributory staff pension scheme and free school meals.
Newton Prep is committed to safeguarding and promoting the welfare of children and young people and expects all staff to share this commitment. The successful candidates will be subject to child protection screening, including an Enhanced CRB check.


text:
Accountancy firm Hurst looking for school leavers
Sara White,
Editor, Accountancy Daily
Accounting and business advisory firm Hurst is offering school leavers the chance to join its trainee accountant scheme for the first time in its 40-year history
The firm is opening the programme to applicants with three A-levels or equivalent.
It will also offer places to graduates with lower second-class honours degrees for the first time. Until now, there has been a requirement for trainees to have at least an upper second-class honours degree.
In another move to broaden the appeal of its trainee programme, the firm will not offer training for qualifications from the Association of Chartered Certified Accountants (ACCA) rather than solely offering ICAEW training.
Hurst partner and director of practice development Simon Brownbill (pictured) said: 'We have seen placement and work experience students make a fantastic impression with us over the years, demonstrating that there are quality people out there without university degrees who would be great additions to our team.
'Our rapid growth means we need more applicants, and we also want to improve diversity and reduce barriers to entry. As we look to build our business at an even faster rate while continuing to develop our own talent, the time is right to offer careers to school leavers.
'We welcome applications from a range of backgrounds, and will be using the same recruitment process for school leavers as we have in place for graduates. The standard to get a place will remain the same. The process is under way, as we are seeking trainees for our 2022/23 intake.'
School leavers joining the firm will receive paid leave for study and examinations, leading to the same qualifications they would get had they graduated from university.
Each newcomer will be assigned a mentor and will have a tailored career plan, which will see them working with partners and managers on a range of assignments with clients, including possible secondments overseas.
Meanwhile, Hurst has also launched a development programme for accountants seeking to progress through the ranks all the way to manager and partner level.
Brownbill added: 'Our retention levels have been phenomenal, and this has been down to a focus on working with the very best clients, a supportive culture, and providing career development. As the firm grows, we want to give more people these opportunities.'
Sara White |Editor, Accountancy Daily
Sara White is editor of Accountancy Daily...
InsightPractice & IndustryCareers
Accountancy profession targets A level school leavers
EY voted best company for school leavers
Grant Thornton recruits over 190 school leavers
Deloitte to attract school leavers with social mobility push
EY rated best accountancy firm for student leavers


It's been a good week for Sioux Falls food.
Just a few days ago, Wine Enthusiast highlighted several eating and drinking establishments in South Dakota's largest city, hailing us as a top foodie town.
Now, Marriott Traveler has gotten in on the act. The latest edition of the hotel chain magazine features a story entitled 'It Came From Sioux Falls: How to Eat Like a Local'.
If they had just stopped there it would have been perfect. But the folks at Marriott decided to go one step further and include a 'More Things to Do' section at the bottom of the page, where no doubt they'd encourage us to check out Falls Park, the Washington Pavilion, or the Denny Sanford PREMIER Center, right?
Instead, the three places highlighted in 'More To Do' aren't even in the same time zone. All three just happen to be in the Black Hills.
Thanks for the love Marriott, but for a company that's in the travel business you need a good map reading lesson!


text:
Paul Du Bois
1859 Aywaille
Paul Du Bois (1859–1938) was a Belgian sculptor and medalist, born in Aywaille, and died in Uccle.Du Bois was a student of Eugène Simonis and Charles van der Stappen. He studied from 1877 to 1883 at the Académie Royale des Beaux-Arts in Brussels and earned the distinguished Prix Godecharle in 1884.Du Bois contributed to the renewal of artistic expression in Belgium at the end of the 20th Century, and was one of the founders of the art group Les XX. His own eclectic work consists of small sculptures, medals, jewelry, fine art sculpture, public monuments, and tombs.Among his most famous monumental works, located in Brussels, are the monument to Frederic de Merode, and the tribute to Edith Cavell and fellow nurse Marie Depage (of the RMS Lusitania), the Four Elements group in the Botanical Garden of Brussels, and several sculptures in the City of Saint-Gilles. He was also responsible for the design of the Victory Medal of World War I, of which 350,000 copies were issued. Many other monuments are erected on his hand and places in the cemeteries of Ixelles, from Uccle, Tournai, Mons, Frameries, Huy, and Liège. His works are also exhibited in the museums of different cities.
Items by Paul Du Bois
eremedailles (1918) | Paul Du Bois
Medaille uit Wereld Oorlog 1: Brons, een lintje met alle kleuren van de regenboog ...; Deze medaille is in een zeer goede staat, alleen een kleine bluts rechts van de godin van de overwinning (Niké)
View at Dienst Cultuur Dilsen-Stokkem
Reverie | Paul Dubois (sculptor); Paul Du Bois
Paul Dubois (sculptor); Paul Du Bois
View at Koninklijk Museum voor Schone Kunsten Antwerpen
Denkmal des Frédéric de Mérode (1792-1830) (1898) | Paul Dubois (sculptor); Paul Du Bois
stone (worked rock)
memorials (monuments)
bronze (metal)
commemorative sculpture
Le souvenir (Alsace-Lorraine) (1902) | Paul Dubois (sculptor); Paul Du Bois
sculpture groups
Gedenkplaat Charles Lejeune (1909) | Paul Dubois (sculptor); Paul Du Bois


text:
Watch Search Online
Click On The Play Button To Start Watching!
Search is a military suspense drama that takes place in the demilitarized zone (DMZ) and tells the story of a specialist search team that uncovers the facts behind unexplained disappearances and murder cases.
Creator: Lim Dae-woong, Myung Hyun-woo
Stars: Jang Dong-yoon, Krystal Jung Moon, Jeong-hee Yoon, Park Lee Hyun-wook
Copyright © 2021 Putlocker


Rent to Own in Pacific Junction! Find your dream home in Pacific Junction, IA at RentOwn.net. View the best Pacific Junction rent to own properties and set in motion your plans to realize your ideal home. We trust you liked RentOwn.net, the leading site for Pacific Junction property.
Pacific Junction, IA 51561 Single Family Home built in N/A 3 beds 3 baths sqft. Accepting Offers.
Pacific Junction, IA 51561 Single Family Home built in N/A 3 beds 1 baths sqft. Accepting Offers.
Pacific Junction, IA 51561 Single Family Home built in N/A 3 beds 2 baths sqft. Accepting Offers.
Pacific Junction, IA 51561 Raw Land built in N/A 0 beds 0 baths sqft. Accepting Offers.
View the best Pacific Junction rent to own properties and become another satisfied user of RentOwn.net. The rent-to-own method is the savvy way to build equity while improving your credit rating with years of saving history. Renting to own in Pacific Junction is a great way to grow a lump sum and escape the rent trap. Our database of Pacific Junction rent to own properties is yours for $1 by way of our bargain 7 day trial. We're grateful you stopped by RentOwn.net, the best rent to own website for all Pacific Junction properties.


Banshee is maintained by Aaron Bockover, Andres G. Aragoneses, Alexander Kojevnikov, Bertrand Lorentz, and Gabriel Burt. Over 155 developers, 130 translators, 6 artists, and countless users and volunteers have contributed to Banshee.
The project was started by Aaron in early 2005. It is strongly affiliated with GNOME, using its infrastructure for Git hosting, issue tracking, mailing lists, and IRC.
Many journals and magazines have reviewed Banshee, and its developers have spoken at several conferences. View the full list of reviews and talks.
Banshee is written in C# (using the Mono platform on Linux and OS X), using GNOME technologies (Gtk#, GStreamer, etc), and SQLite. It is free/open source software, released under the MIT/X11 license.


text:
Q: SecurityContext authorities does not equal ServletRequest roles? I was trying to replace some manual authority checking with annotations (@Secured and @PreAuthorize). While debugging why it doesn't work I was surprised to find that the second of these two assertions failed at the top of a @RequestMapping controller method.
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
assert(auth.getAuthorities().contains(new SimpleGrantedAuthority("ROLE_READER"))); // passes
assert(request.isUserInRole("ROLE_READER")); // fails

I assume (as I can't get them to authorise anything) @Secured and hasRole() make use of the latter lookup?
Are the roles not supposed to be automatically populated from the SecurityContext authorities?
Was the filter that set the Authentication supposed to add the roles separately?

Edit:
Cut down the spring security config to spring boot's (1.3.0) default, plus the filter that sets the authentication.
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.addFilterBefore(new JwtAuthenticationFilter(), FilterSecurityInterceptor.class);
    }
}

A:
I assume (as I can't get them to authorise anything) @Secured and hasRole() make use of the latter lookup?

My assumption was wrong. Both use the granted authorities, but in different ways.

*

*@Secured requires the prefix, so @Secured("ROLE_READER") works.

*hasRole does not use the prefix, so @PreAuthorize("hasRole('READER')") works.

*Both require the granted authority to be prefixed, so @Secured("READER") will never work, even if there is an authority named READER.

The prefix can be configured with RoleVoter's rolePrefix property.
HttpServletRequest.isUserInRole uses a completely separate system, unrelated to Spring security. It is not populated by default, and does not need to be. I believe adding a SecurityContextHolderAwareRequestFilter to the chain will populate it


text:
from __future__ import with_statement, division
from datetime import datetime, date, timedelta
from json import dumps as toJS
from collections import OrderedDict
from itertools import product

from rorn.Session import delay, undelay
from rorn.ResponseWriter import ResponseWriter
from rorn.Box import CollapsibleBox, ErrorBox, InfoBox, SuccessBox, WarningBox

from Privilege import requirePriv
from Project import Project
from Sprint import Sprint
from Button import Button
from Table import Table
from Task import Task, statuses, statusMenu
from User import User
from Group import Group
from Tabs import Tabs, parseName as parseTabName
from Goal import Goal
from Availability import Availability
from Chart import Chart
from SprintCharts import *
from History import showHistory
from Export import exports
from LoadValues import isDevMode
from Search import Search
from Event import Event
from Retrospective import Retrospective, Category as RetroCategory, Entry as RetroEntry
from Markdown import Markdown
from TaskTable import TaskTable
from utils import *

def tabs(sprint = None, where = None):
	base, name = parseTabName(where) if where is not None else (None, None)

	tabs = Tabs()
	tabs['info'] = '/sprints/%d/info'
	tabs['backlog'] = '/sprints/%d'
	tabs['metrics'] = '/sprints/%d/metrics'
	if sprint is not None and (sprint.isPlanning() or base == 'planning'):
		tabs['planning', 'history'] = '/sprints/%d/history'
		tabs.add(('planning', 'checklist'), path = '/sprints/%d/checklist', num = len(sprint.getWarnings()) or None)
		tabs['planning', 'distribute'] = '/tasks/distribute?sprint=%d'
	elif sprint is not None and (sprint.isReview() or sprint.isOver() or base == 'wrapup'):
		tabs['wrapup', 'history'] = '/sprints/%d/history'
		tabs['wrapup', 'results'] = '/sprints/%d/results'
		tabs['wrapup', 'retrospective'] = '/sprints/%d/retrospective'
	else:
		tabs['history'] = '/sprints/%d/history'
	tabs['availability'] = '/sprints/%d/availability'

	if sprint is not None:
		tabs = tabs.format(sprint.id)

	# Special case tabs that move around based on sprint status
	if name == 'history' and sprint is not None:
		if sprint.isPlanning():
			tabs = tabs.where(('planning', 'history'))
		elif sprint.isReview() or sprint.isOver():
			tabs = tabs.where(('wrapup', 'history'))
		else:
			tabs = tabs.where('history')
	elif name == 'distribute' and sprint is not None and sprint.isPlanning():
		tabs = tabs.where(('planning', 'distribute'))
	elif where is not None:
		tabs = tabs.where(where)

	return tabs

def drawNavArrows(sprint, user, tab):
	print "

"
	sprints = filter(lambda sprint: not sprint.isHidden(user), sprint.project.getSprints())
	thisIdx = sprints.index(sprint)
	if thisIdx > 0:
		print "" % (sprints[thisIdx - 1].id, tab, sprints[thisIdx - 1].safe.name.replace('"', '"'))
	if thisIdx < len(sprints) - 1:
		print "" % (sprints[thisIdx + 1].id, tab, sprints[thisIdx + 1].safe.name.replace('"', '"'))
	print "

"

@get('sprints')
def sprint(handler):
	redirect('/projects')

@get('sprints/(?P<id>[0-9]+)', statics = ['tasktable', 'sprints-backlog'])
def showBacklog(handler, id, search = None, devEdit = False):
	requirePriv(handler, 'User')
	id = int(id)
	sprint = Sprint.load(id)
	if not sprint or sprint.isHidden(handler.session['user']):
		ErrorBox.die('Sprints', "No sprint with ID %d" % id)
	elif not sprint.canView(handler.session['user']):
		ErrorBox.die('Private', "You must be a sprint member to view this sprint")

	# Redirect to search help page if searched for empty string
	if search == '':
		redirect('/help/search')

	handler.title(sprint.safe.name)
	drawNavArrows(sprint, handler.session['user'], '')

	tasks = sprint.getTasks()
	editable = sprint.canEdit(handler.session['user']) or (devEdit and isDevMode(handler))
	search = Search(sprint, search)

	print ""

	print ""

	print "
"
	print ""
	print Button('history', id = 'selected-history').positive()
	print Button('highlight', id = 'selected-highlight').positive()
	print Button('mass edit', id = 'selected-edit').positive()
	print Button('cancel', id = 'selected-cancel') #.negative()
	print "
"

	print "
"
	print tabs(sprint, 'backlog')
	print "<input type=\"text\" id=\"search\" value=\"%s\">" % search.getFullString().replace('"', '"')
	print "
"

	undelay(handler)

	print InfoBox('Loading...', id = 'post-status', close = True)

	avail = Availability(sprint) if sprint.isActive() else None
	dayStart = Weekday.today().date()
	print "
"
	print " None"
	for member in sorted(sprint.members):
		cls = ['fancy']
		if not sprint.isPlanning() and avail and avail.get(member, dayStart) == 0:
			cls.append('away')
		print " %s" % (' '.join(cls), member.username, id, member.username, member.getAvatar(16), member.username)
	print "

"

	print "
"
	print " None"
	for status in sorted(statuses.values()):
		print "%s" % (status.name, id, status.name.replace(' ', '-'), status.getIcon(), status.text)
	print "

"

	if handler.session['user'].hasPrivilege('Admin') and 'deleted' in sprint.flags:
		print "<form method=\"post\" action=\"/admin/projects/%d/cancel-deletion/%d\">" % (sprint.project.id, sprint.id)
		print WarningBox("This sprint is flagged for deletion during nightly cleanup. %s" % Button('Cancel').mini().post())
		print "</form>"
	if sprint.isPlanning():
		if sprint.isActive():
			print InfoBox("Today is sprint planning — tasks aren't finalized until the end of the day")
		else:
			daysTillPlanning = (tsToDate(sprint.start) - getNow()).days + 1
			print InfoBox("The sprint has not begun — planning is %s. All changes are considered to have been made midnight of plan day" % ('tomorrow' if daysTillPlanning == 1 else "in %d days" % daysTillPlanning))
	elif sprint.isReview():
		print InfoBox("Today is sprint review — this is the last day to make changes to the backlog. All open tasks will be deferred at the end of the day")
	elif not sprint.isOver():
		noHours = filter(lambda task: task.stillOpen() and task.hours == 0, tasks)
		if noHours != []:
			print WarningBox("There are open tasks with no hour estimate" % sprint.id)

	tasks = search.filter(tasks)

	if isDevMode(handler):
		print Button('#all-tasks borders', "javascript:$('#all-tasks, #all-tasks tr td').css('border', '1px solid #f00').css('border-collapse', 'collapse');").negative()
		if not editable:
			print Button('make editable', "/sprints/%d?devEdit" % id).negative()
		elif devEdit:
			print Button('make uneditable', "/sprints/%d" % id).negative()

		print "
"
		print "start: %d (%s)
" % (sprint.start, tsToDate(sprint.start))
		print "end: %d (%s)
" % (sprint.end, tsToDate(sprint.end))
		print "
"

	showing = ResponseWriter()
	print ""
	# save-search href set by update_task_count()
	print ""
	print "" % id
	showing = showing.done()

	print TaskTable(sprint, editable = editable, tasks = tasks, tableID = 'all-tasks', dateline = showing, taskClasses = {task: ['highlight'] for task in (search.get('highlight').tasks if search.has('highlight') else [])}, debug = isDevMode(handler), groupActions = True, taskModActions = True, index = True, goal = True, status = True, name = True, assigned = True, historicalHours = True, hours = True, devEdit = devEdit)

@post('sprints/(?P<sprintid>[0-9]+)')
def sprintPost(handler, sprintid, p_id, p_rev_id, p_field, p_value):
	def die(msg):
		print msg
		done()

	handler.wrappers = False
	sprintid = to_int(sprintid, 'sprintid', die)
	p_id = to_int(p_id, 'id', die)
	p_rev_id = to_int(p_rev_id, 'rev_id', die)

	if not handler.session['user']:
		die("You must be logged in to modify tasks")

	sprint = Sprint.load(sprintid)
	if not sprint or sprint.isHidden(handler.session['user']):
		die("There is no sprint with ID %d" % sprintid)
	elif not (sprint.isActive() or sprint.isPlanning()):
		die("Unable to modify inactive sprint")
	elif not sprint.canEdit(handler.session['user']):
		die("You don't have permission to modify this sprint")

	# Special case group moves; p_id is the group ID, not task
	task = None
	if p_field != 'groupmove':
		task = Task.load(p_id)
		if not task:
			die("Task %d does not exist" % p_id)
		if task.sprint != sprint:
			die("Attempting to modify task outside the specified sprint")
		if task.revision != p_rev_id: #TODO Implement collision support
			die("Collision with %s detected. Changes not saved" % task.creator)

	if p_value.strip() == '':
		die("Value cannot be empty")

	if p_field in ['status', 'name', 'goal', 'assigned', 'hours', 'deleted']:
		for case in switch(p_field):
			if case('status') or case('name'):
				parsedValue = p_value
				break
			elif case('goal'):
				parsedValue = None
				if p_value != '0':
					parsedValue = Goal.load(to_int(p_value, 'goal', die))
					if not parsedValue:
						die("Unknown goal: %s" % stripTags(p_value))
					if parsedValue.sprint != sprint:
						die("Attempting to use goal outside the specified sprint")
				break
			elif case('assigned'):
				parsedValue = set(User.load(username = username) for username in p_value.split(' '))
				if not all(parsedValue):
					die("Unknown user(s): %s" % stripTags(p_value))
				break
			elif case('hours'):
				parsedValue = int(p_value)
				break
			elif case('deleted'):
				parsedValue = True if p_value == 'true' else False if p_value == 'false' else die("Bad value for field 'deleted'")
				break

		if task.__getattribute__(p_field) != parsedValue: # Only save if the field has changed
			task.__setattr__(p_field, parsedValue)

			# Is this within the 5-minute window, by the same user?
			# If we're in pre-planning, the task's timestamp will be in the future, so (ts - task.timestamp) will be negative, which satisfies the check
			if task.creator == handler.session['user'] and (dateToTs(getNow()) - task.timestamp) < 5*60:
				task.save()
			else:
				task.saveRevision(handler.session['user'])

			Event.taskUpdate(handler, task, p_field, parsedValue)

	elif p_field == 'taskmove':
		if ':' not in p_value:
			die("Malformed value")
		newGroupID, newSeq = map(lambda i: to_int(i, 'value', die), p_value.split(':', 1))
		newGroup = Group.load(newGroupID)
		if not newGroup:
			die("No group with ID %d" % newGroupID)
		maxSeq = len(Task.loadAll(groupid = newGroup.id))
		if task.group != newGroup:
			maxSeq += 1
		if not 1 <= newSeq <= maxSeq:
			die("Bad sequence number")

		task.move(newSeq, newGroup)

	elif p_field == 'groupmove':
		group = Group.load(p_id)
		if not group:
			die("Group %d does not exist" % p_id)
		if group.sprint != sprint:
			die("Attempting to modify group outside the specified sprint")

		newSeq = to_int(p_value, 'value', die)
		if not 1 <= newSeq <= len(sprint.getGroups()):
			die("Bad sequence number")

		group.move(newSeq)

	else:
		die("Unexpected field name: %s" % stripTags(p_field))

	handler.responseCode = 299
	if task is not None:
		print task.revision

@get('sprints/active')
def findActiveSprint(handler, project = None, search = None):
	handler.title('Active Sprint')
	requirePriv(handler, 'User')
	if project:
		projectid = int(project)
		project = Project.load(projectid)
		if not project:
			ErrorBox.die('Load project', "No project with ID %d" % projectid)

	url = "/sprints/%d"
	if search:
		url += "?search=%s" % search

	sprints = Sprint.loadAllActive(handler.session['user'], project)
	sprints = filter(lambda sprint: sprint.canView(handler.session['user']), sprints)
	for case in switch(len(sprints)):
		if case(0):
			ErrorBox.die('Active sprint', 'No active sprints found')
			break
		if case(1):
			redirect(url % sprints[0].id)
			break
		if case():
			print "You are active in multiple sprints%s:

" % (" in the %s project" % project.safe.name if project else '')
			for sprint in sprints:
				print "%s
" % (url % sprint.id, sprint.safe.name)
			break

@get('sprints/(?P<id>[0-9]+)/info', statics = 'sprints-info')
def showInfo(handler, id):
	requirePriv(handler, 'User')
	id = int(id)
	sprint = Sprint.load(id)
	if not sprint or sprint.isHidden(handler.session['user']):
		ErrorBox.die('Sprints', "No sprint with ID %d" % id)
	elif not sprint.canView(handler.session['user']):
		ErrorBox.die('Private', "You must be a sprint member to view this sprint")
	tasks = sprint.getTasks()
	editable = sprint.owner == handler.session['user'] # Info can be edited even after the sprint closes

	handler.title(sprint.safe.name)
	drawNavArrows(sprint, handler.session['user'], 'info')

	print ""

	print InfoBox('Loading...', id = 'post-status', close = True)

	print tabs(sprint, 'info')

	print "<form method=\"post\" action=\"/sprints/info?id=%d\">" % sprint.id
	print "Name
"
	if editable:
		print "<input type=\"text\" name=\"name\" class=\"name\" value=\"%s\">

" % sprint.safe.name
	else:
		print "%s

" % sprint.safe.name
	print "Duration
"
	if editable:
		print "<input type=\"text\" name=\"start\" class=\"date\" value=\"%s\">" % (tsToDate(sprint.start).strftime('%m/%d/%Y')),
	else:
		print tsToDate(sprint.start).strftime('%m/%d/%Y'),
	print '-',
	if editable:
		print "<input type=\"text\" name=\"end\" class=\"date\" value=\"%s\">" % (tsToDate(sprint.end).strftime('%m/%d/%Y')),
	else:
		print tsToDate(sprint.end).strftime('%m/%d/%Y'),
	print "

"
	print "Sprint goals
"
	for goal in sprint.getGoals():
		if editable:
			print "<input type=\"text\" class=\"goal\" style=\"background-image: url(/static/images/tag-%s.png)\" name=\"goals[%d]\" goalid=\"%d\" value=\"%s\">
" % (goal.color, goal.id, goal.id, goal.safe.name)
			numTasks = len(filter(lambda task: task.goal == goal, tasks))
			if numTasks > 0:
				print "
<input type=\"checkbox\" id=\"clear-tasks-check-%d\" name=\"clear[]\" value=\"%d\">Clear the %s currently assigned to this goal (%s will no longer contribute to a sprint goal)
" % (goal.id, goal.id, goal.id, goal.id, pluralize(numTasks, 'task', 'tasks'), 'it' if numTasks == 1 else 'they')
		elif goal.name:
			print " %s
" % (goal.color, goal.safe.name)
	print "
"
	print "
"
	print "Members
"
	if editable:
		print "<select name=\"members[]\" id=\"select-members\" multiple>"
		for user in sorted(User.loadAll()):
			if user.hasPrivilege('User') or user in sprint.members:
				print "<option value=\"%d\"%s>%s</option>" % (user.id, ' selected' if user in sprint.members else '', user.safe.username)
		print "</select>"
	else:
		print ', '.join(member.str('scrummaster' if member == sprint.owner else 'member') for member in sorted(sprint.members))
	print "

"
	print "Options
"
	if editable:
		print "
<input type=\"checkbox\" name=\"private\" id=\"flag-private\"%s%s>Private – Only sprint members can view tasks
" % (' checked' if 'private' in sprint.flags else '', ' disabled' if 'hidden' in sprint.flags else '')
		print "
<input type=\"checkbox\" name=\"hidden\" id=\"flag-hidden\"%s>Hidden – Only sprint members can see the sprint
" % (' checked' if 'hidden' in sprint.flags else '')
	else:
		if 'hidden' in sprint.flags:
			print " Hidden"
		elif 'private' in sprint.flags:
			print " Private"
	print "
"

	if editable:
		print Button('Save', id = 'save-button', type = 'button').positive()
	print "</form>"

@post('sprints/info')
def sprintInfoPost(handler, id, p_name, p_start, p_end, p_goals, p_members = None, p_clear = [], p_private = False, p_hidden = False):
	def die(msg):
		print msg
		done()

	handler.wrappers = False

	if not handler.session['user']:
		die("You must be logged in to modify sprint info")

	id = to_int(id, 'id', die)
	p_members = to_int(p_members, 'members', die)
	sprint = Sprint.load(id)
	if not sprint or sprint.isHidden(handler.session['user']):
		die("There is no sprint with ID %d" % id)
	if sprint.owner != handler.session['user']:
		die("You must be the scrummaster to modify sprint information")

	try:
		start = re.match("^(\d{1,2})/(\d{1,2})/(\d{4})$", p_start)
		if not start:
			raise ValueError
		month, day, year = map(int, start.groups())
		start = datetime(year, month, day, 0, 0, 0)
	except ValueError:
		die("Malformed start date: %s" % stripTags(p_start))

	try:
		end = re.match("^(\d{1,2})/(\d{1,2})/(\d{4})$", p_end)
		if not end:
			raise ValueError
		month, day, year = map(int, end.groups())
		end = datetime(year, month, day, 23, 59, 59)
	except ValueError:
		die("Malformed end date: %s" % stripTags(p_end))

	msg = Sprint.validateDates(start, end, tsToDate(sprint.start), tsToDate(sprint.end))
	if msg:
		die(msg)

	goals = map(Goal.load, to_int(p_goals.keys(), 'goals', die))
	if not all(goals):
		die("One or more goals do not exist")

	members = set(map(User.load, p_members)) if p_members else set()
	if not all(members):
		die("One or more members do not exist")
	if sprint.owner not in members:
		die("The scrummaster (%s) must be a sprint member" % sprint.owner)

	tasks = sprint.getTasks()
	changedTasks = set()
	avail = Availability(sprint)
	addMembers = set(members) - set(sprint.members)
	delMembers = set(sprint.members) - set(members)
	for user in delMembers:
		for task in filter(lambda task: user in task.assigned, tasks):
			print "Removing %s from %d
" % (user, task.id)
			task.assigned -= {user}
			if len(task.assigned) == 0:
				print "Adding %s to %d
" % (sprint.owner, task.id)
				task.assigned = {sprint.owner}
			changedTasks.add(task)
		avail.delete(user)
		sprint.members -= {user}

	# For event dispatching
	changes = OrderedDict([
		('name', None if sprint.name == p_name else p_name),
		('start', None if tsToDate(sprint.start) == start else start),
		('end', None if tsToDate(sprint.end) == end else end),
		('addMembers', addMembers),
		('delMembers', delMembers),

		# Updated later
		('addGoals', []),
		('removeGoals', []),
		('addFlags', []),
		('removeFlags', []),
	])

	sprint.members |= addMembers
	sprint.name = p_name
	p_private = (p_private or p_hidden) # Hidden implies Private
	for flagName, flagValue in (('private', p_private), ('hidden', p_hidden)):
		if flagValue and flagName not in sprint.flags:
			sprint.flags.add(flagName)
			changes['addFlags'].append(flagName)
		elif not flagValue and flagName in sprint.flags:
			sprint.flags.remove(flagName)
			changes['removeFlags'].append(flagName)

	if dateToTs(start) != sprint.start or dateToTs(end) != sprint.end:
		sprint.start = dateToTs(start)
		sprint.end = dateToTs(end)
		avail.trim()

	sprint.save()

	for id in p_goals:
		goal = Goal.load(int(id))
		if goal.name != p_goals[id]:
			if goal.name:
				changes['removeGoals'].append(goal.name)
			if p_goals[id]:
				changes['addGoals'].append(p_goals[id])

		goal.name = p_goals[id]
		goal.save()

	if start:
		for task in sprint.getTasks(includeDeleted = True):
			for rev in task.getRevisions():
				if rev.timestamp < sprint.start:
					rev.timestamp = sprint.start
					rev.save()
				else:
					break
		for task in changedTasks:
			if task.timestamp < sprint.start:
				task.timestamp = sprint.start

	if p_clear:
		ids = [to_int(goalid, 'p_clear', die) for goalid in p_clear]
		for task in tasks:
			if task.goal and task.goal.id in ids:
				task.goal = None
				changedTasks.add(task)

	for task in changedTasks:
		print "Saving new revision for %d
" % task.id
		task.saveRevision(handler.session['user'])

	handler.responseCode = 299
	delay(handler, SuccessBox("Updated info", close = 3, fixed = True))
	Event.sprintInfoUpdate(handler, sprint, changes)

@get('sprints/(?P<id>[0-9]+)/metrics', statics = 'sprints')
def showMetrics(handler, id):
	requirePriv(handler, 'User')
	id = int(id)
	sprint = Sprint.load(id)
	if not sprint or sprint.isHidden(handler.session['user']):
		ErrorBox.die('Sprints', "No sprint with ID %d" % id)
	elif not sprint.canView(handler.session['user']):
		ErrorBox.die('Private', "You must be a sprint member to view this sprint")

	context = {}
	context['sprint'] = sprint
	context['allTasks'] = sprint.getTasks(includeDeleted = True)
	context['tasks'] = tasks = filter(lambda task: not task.deleted, context['allTasks'])
	context['revisions'] = {(task.id, day): task.getRevisionAt(day) for task, day in product(context['allTasks'], sprint.getDays())}

	handler.title(sprint.safe.name)
	drawNavArrows(sprint, handler.session['user'], 'metrics')

	print ""

	charts = [
		('general', 'Hours (general)', HoursChart('chart-general', **context)),
		('commitment-by-user', 'Commitment (by user)', CommitmentByUserChart(**context)),
		('earned-value', 'Earned Value', EarnedValueChart('chart-earned-value', **context)),
		('by-user', 'Hours (by user)', HoursByUserChart('chart-by-user', **context)),
		('status', 'Task status', StatusChart('chart-status', **context)),
		('commitment', 'Total commitment', CommitmentChart('chart-commitment', **context)),
		('goals', 'Sprint goals', GoalsChart(**context)),
	]

	Chart.include()
	map(lambda (anchor, title, chart): chart.js(), charts)
	print tabs(sprint, 'metrics')

	if not sprint.isOver():
		noHours = filter(lambda task: task.stillOpen() and task.hours == 0, tasks)
		if noHours != []:
			print WarningBox("There are open tasks with no hour estimate. These unestimated tasks can artifically lower the tasking lines in the following charts" % sprint.id)

	for anchor, title, chart in charts:
		print "" % anchor
		print "
%s
" % (anchor, title)
		chart.placeholder()

	print "

"

@get('sprints/(?P<id>[0-9]+)/history', statics = 'sprints-history')
def showSprintHistory(handler, id, assigned = None):
	requirePriv(handler, 'User')
	id = int(id)
	sprint = Sprint.load(id)
	if not sprint or sprint.isHidden(handler.session['user']):
		ErrorBox.die('Sprints', "No sprint with ID %d" % id)
	elif not sprint.canView(handler.session['user']):
		ErrorBox.die('Private', "You must be a sprint member to view this sprint")
	tasks = sprint.getTasks(includeDeleted = True)

	handler.title(sprint.safe.name)
	drawNavArrows(sprint, handler.session['user'], 'history')

	Chart.include()
	chart = TaskChart('chart', sprint.getTasks())
	chart.js()
	print ""

	print tabs(sprint, 'history')
	if len(tasks) == 0:
		print ErrorBox("This sprint has no tasks")
		print "
"
		return

	print "
"
	print " None"
	for member in sorted(sprint.members):
		print " %s" % (member.username, id, member.username, member.getAvatar(16), member.username)
	print "

"

	chart.placeholder()
	showHistory(tasks, True)
	print "
"

@get('sprints/(?P<id>[0-9]+)/availability', statics = 'sprints-availability')
def showAvailability(handler, id):
	requirePriv(handler, 'User')
	id = int(id)
	sprint = Sprint.load(id)
	if not sprint or sprint.isHidden(handler.session['user']):
		ErrorBox.die('Sprints', "No sprint with ID %d" % id)
	elif not sprint.canView(handler.session['user']):
		ErrorBox.die('Private', "You must be a sprint member to view this sprint")
	tasks = sprint.getTasks()

	handler.title(sprint.safe.name)
	drawNavArrows(sprint, handler.session['user'], 'availability')
	print tabs(sprint, 'availability')

	print ""

	print InfoBox('Loading...', id = 'post-status', close = True)

	avail = Availability(sprint)
	oneday = timedelta(1)
	start, end = tsToDate(sprint.start), tsToDate(sprint.end)
	editable = sprint.canEdit(handler.session['user'])

	print "<form method=\"post\" action=\"/sprints/%d/availability\">" % sprint.id

	# This is in case the user presses enter
	print Button('', id = 'save-button2', type = 'button')

	print "
"
	print "
"
	print " 	"
	for day in sprint.getDays():
		print "%s
%s	" % (day.strftime('%d'), day.strftime('%a'))
		if day.weekday() == 4:
			print " 	"
	print "	" # The stylesheet counts cells from the right, so it's important that this be here to match the other rows
	print "
"
	if editable:
		print "
"
		print ""
		if editable:
			print Button('set all 8', id = 'set-all-8', type = 'button').info()
		print "	"
		for day in sprint.getDays():
			print "	"
			if day.weekday() == 4:
				print " 	"
		print "	"
		print "
"

	for user in sorted(sprint.members):
		print "
"
		print "%s 	" % (user.safe.username, user.getAvatar(16))
		for day in sprint.getDays():
			if editable:
				print "<input type=\"text\" name=\"hours[%d,%d]\" value=\"%d\">	" % (user.id, dateToTs(day), avail.get(user, day))
			else:
				print "%d	" % avail.get(user, day)

			if day.weekday() == 4:
				print " 	"
		print ""
		if editable:
			print ""
		print "	"
		print "
"

	if editable:
		print "
%s
" % Button('Save', id = 'save-button', type = 'button').positive()
	print "
"
	print "</form>"

@post('sprints/(?P<id>[0-9]+)/availability')
def sprintAvailabilityPost(handler, id, p_hours):
	def die(msg):
		print msg
		done()

	handler.wrappers = False
	id = int(id)

	if not handler.session['user']:
		die("You must be logged in to modify sprint info")

	sprint = Sprint.load(id)
	if not sprint or sprint.isHidden(handler.session['user']):
		die("There is no sprint with ID %d" % id)

	if not (sprint.isActive() or sprint.isPlanning()):
		die("Unable to modify inactive sprint")
	elif not sprint.canEdit(handler.session['user']):
		die("You don't have permission to modify this sprint")

	avail = Availability(sprint)
	for k, hours in p_hours.items():
		userid, timestamp = map(int, k.split(',', 1))
		hours = int(hours)

		user = User.load(userid)
		if not user in sprint.members:
			die("Trying to set availability of non-member %s" % user.safe.username)
		time = tsToDate(timestamp)
		if not sprint.start <= timestamp <= sprint.end:
			die("Trying to set availability outside of sprint window")

		avail.set(user, time, hours)

	handler.responseCode = 299
	delay(handler, SuccessBox("Updated availability", close = 3, fixed = True))
	Event.sprintAvailUpdate(handler, sprint)

@get('sprints/(?P<id>[0-9]+)/checklist', statics = 'sprints-checklist')
def showSprintChecklist(handler, id):
	requirePriv(handler, 'User')
	id = int(id)
	sprint = Sprint.load(id)
	if not sprint or sprint.isHidden(handler.session['user']):
		ErrorBox.die('Sprints', "No sprint with ID %d" % id)
	elif not sprint.canView(handler.session['user']):
		ErrorBox.die('Private', "You must be a sprint member to view this sprint")
	tasks = sprint.getTasks()

	handler.title(sprint.safe.name)
	drawNavArrows(sprint, handler.session['user'], 'checklist')
	print tabs(sprint, ('planning', 'checklist'))

	warnings = sprint.getWarnings()

	def good(text): print "
%s
" % text
	def warn(text): print "
%s
" % text
	def bad(text): print "
%s
" % text
	def userStr(l):
		l = map(str, sorted(l))
		for case in switch(len(l)):
			if case(0):
				return ''
			if case(1):
				return l[0]
			if case(2):
				return "%s and %s" % tuple(l)
			if case():
				front, last = l[:-1], l[-1]
				return "%s, and %s" % (', '.join(front), last)

	print "
"
	print "
Members
"

	if 'no-availability' in warnings:
		bad("%s %s no availability" % (userStr(warnings['no-availability']), 'has' if len(warnings['no-availability']) == 1 else 'have', sprint.id))
	else:
		good("All members have some availability during the sprint")

	if 'overcommitted' in warnings:
		bad("%s %s overcommitted" % (userStr(warnings['overcommitted']), 'is' if len(warnings['overcommitted']) == 1 else 'are', sprint.id))
	else:
		good("All members have enough availability for their tasks")

	if 'users-no-tasks' in warnings:
		bad("%s %s no tasks" % (userStr(warnings['users-no-tasks']), 'has' if len(warnings['users-no-tasks']) == 1 else 'have', sprint.id))
	else:
		good("All members have tasks assigned")

	print "

Goals
"

	if 'no-sprint-goals' in warnings:
		bad("There are no sprint goals" % sprint.id)
	else:
		goals = filter(lambda goal: goal.name != '', sprint.getGoals())
		good(pluralize(len(goals), 'sprint goal is defined', 'sprint goals are defined'))

	if 'tasks-without-goals' in warnings:
		bad("There are many tasks unrelated to the sprint goals" % sprint.id)
	elif 'no-sprint-goals' in warnings and tasks != []:
		warn("There are %s waiting for goals" % pluralize(len(tasks), 'task', 'tasks'))
	else:
		unaffiliated = filter(lambda task: not task.goal, tasks)
		if unaffiliated == []:
			good("All tasks contribute to the sprint goals")
		else:
			good("Most tasks contribute to the sprint goals (%d left)" % (sprint.id, len(unaffiliated)))

	if 'goals-no-tasks' in warnings:
		bad("There are goals with no tasks assigned (%s)" % (sprint.id, ' '.join("" % goal.color for goal in warnings['goals-no-tasks'])))

	print "

Tasks
"

	if 'open-without-hours' in warnings:
		bad("There are open tasks with no hour estimate" % sprint.id)
	else:
		good("All open tasks have hours estimated")

	if 'closed-with-hours' in warnings:
		bad("There are 0\">closed tasks with hours. These hours are counted as part of the sprint commitment" % sprint.id)
	else:
		good("All closed tasks have 0 hours")

	if 'too-many-hours' in warnings:
		bad("There are 24\">tasks with too many hours" % sprint.id)
	else:
		good("All tasks have at most 24 hours estimated")

	print "
"

@get('sprints/(?P<id>[0-9]+)/results', statics = 'sprints')
def showSprintResults(handler, id):
	requirePriv(handler, 'User')
	id = int(id)
	sprint = Sprint.load(id)
	if not sprint or sprint.isHidden(handler.session['user']):
		ErrorBox.die('Sprints', "No sprint with ID %d" % id)
	elif not sprint.canView(handler.session['user']):
		ErrorBox.die('Private', "You must be a sprint member to view this sprint")

	tasksNow = sprint.getTasks()
	tasksStart = filter(None, (task.getRevisionAt(tsToDate(sprint.start)) for task in tasksNow))
	tasksNow = {task.id: task for task in tasksNow}
	tasksStart = {task.id: task for task in tasksStart}

	handler.title(sprint.safe.name)
	drawNavArrows(sprint, handler.session['user'], 'results')
	print tabs(sprint, ('wrapup', 'results'))

	if not sprint.isOver():
		ErrorBox.die('Sprint Open', "Results aren't available until the sprint has closed")

	from rorn.Box import WarningBox
	print WarningBox("This feature is still under development")

	print "
"

	completed = filter(lambda task: task.status == 'complete', tasksNow.values())
	print "
%s completed (%d%% of the original hourly commitment)
" % (sprint.id, pluralize(len(completed), 'task', 'tasks'), sum(tasksStart[task.id].hours if task.id in tasksStart else 0 for task in completed) * 100 / sum(task.hours for task in tasksStart.values()))

	planned = filter(lambda task: task.id in tasksStart, tasksNow.values())
	print "
%d%% of tasks were planned from the start
" % (len(planned) * 100 / len(tasksNow))

	print "
"

@get('sprints/(?P<id>[0-9]+)/retrospective', statics = 'sprints-retrospective')
def showSprintRetrospective(handler, id):
	requirePriv(handler, 'User')
	id = int(id)
	sprint = Sprint.load(id)
	if not sprint or sprint.isHidden(handler.session['user']):
		ErrorBox.die('Sprints', "No sprint with ID %d" % id)
	elif not sprint.canView(handler.session['user']):
		ErrorBox.die('Private', "You must be a sprint member to view this sprint")
	editing = (sprint.owner == handler.session['user'])

	handler.title(sprint.safe.name)
	drawNavArrows(sprint, handler.session['user'], 'retrospective')
	print tabs(sprint, ('wrapup', 'retrospective'))

	Markdown.head()
	print ""

	if not (sprint.isReview() or sprint.isOver()):
		ErrorBox.die('Sprint Open', "The retrospective isn't available until the sprint is in review")

	retro = Retrospective.load(sprint)
	if retro is None:
		if editing:
			print "<form method=\"post\" action=\"/sprints/%d/retrospective/start\">" % sprint.id
			print Button("Start Retrospective").post().positive()
			print "</form>"
		else:
			print ErrorBox("This sprint has no retrospective")
		done()

	print "The sprint retrospective asks two main questions:
"
	print "
"
	print "
What went well during the sprint?
"
	print "
What could be improved in the next sprint?
"
	print "
"
	if editing:
		print "For now the list of categories is fixed; eventually you'll be able to modify them per-sprint. Click an existing item to edit it, or the margin icon to toggle it. Fill in the text area at the end of the category to add a new item; clear a text area to delete it. Markdown is available if necessary"

	print "
"
	for category, entries in retro.iteritems():
		print "
" % category.id
		print "
%s
" % stripTags(category.name)
		for entry in sorted(entries, key = lambda entry: 0 if entry.good else 1):
			print "
<textarea>%s</textarea>
" % ('good' if entry.good else 'bad', entry.id, stripTags(entry.body))
		if not editing and len(entries) == 0:
			print "
No entries
"
		print "
"
	print "
"

@post('sprints/(?P<id>[0-9]+)/retrospective/start')
def sprintRetrospectiveStart(handler, id):
	if not handler.session['user']:
		ErrorBox.die('Forbidden', "You must be logged in to modify sprint info")

	id = int(id)
	sprint = Sprint.load(id)
	if not sprint or sprint.isHidden(handler.session['user']):
		ErrorBox.die('Sprints', "There is no sprint with ID %d" % id)
	elif sprint.owner != handler.session['user']:
		ErrorBox.die('Forbidden', "Only the scrummaster can edit the retrospective")
	elif not (sprint.isReview() or sprint.isOver()):
		ErrorBox.die('Sprint Open', "The retrospective isn't available until the sprint is in review")

	Retrospective.init(sprint)
	redirect("/sprints/%d/retrospective" % sprint.id)

@post('sprints/(?P<sprintid>[0-9]+)/retrospective/render')
def sprintRetrospectiveRender(handler, sprintid, p_id, p_catid, p_body = None, p_good = None):
	def die(msg):
		print msg
		done()

	handler.wrappers = False
	if p_id != 'new':
		p_id = to_int(p_id, 'id', die)
	p_catid = to_int(p_catid, 'catid', die)
	if p_good is not None:
		p_good = to_bool(p_good)
	if not handler.session['user']:
		die("You must be logged in to modify sprint info")

	sprintid = int(sprintid)
	sprint = Sprint.load(sprintid)
	if not sprint or sprint.isHidden(handler.session['user']):
		die("There is no sprint with ID %d" % sprintid)
	elif sprint.owner != handler.session['user'] and (p_body is not None or p_good is not None):
		die("Only the scrummaster can edit the retrospective")
	elif not (sprint.isReview() or sprint.isOver()):
		die("The retrospective isn't available until the sprint is in review")

	if p_id == 'new':
		if p_body is None or p_good is None:
			die("Missing body/good")
		entry = RetroEntry(p_catid, p_body, p_good)
	else:
		entry = RetroEntry.load(p_id)
		if p_body is not None:
			entry.body = p_body
		if p_good is not None:
			entry.good = p_good

		if entry.body == '':
			entry.delete()
			handler.responseCode = 299
			print toJS({'id': entry.id, 'deleted': True});
			return

	entry.save()
	handler.responseCode = 299
	print toJS({'id': entry.id, 'body': Markdown.render(entry.body), 'good': entry.good})

@get('sprints/new')
def newSprint(handler, project):
	id = int(project)
	handler.title('New Sprint')
	requirePriv(handler, 'User')
	project = Project.load(id)
	if not project:
		ErrorBox.die('Invalid project', "No project with ID %d" % id)
	sprints = project.getSprints()

	print ""
	print ""

	print InfoBox('', id = 'post-status')

	print "<form method=\"post\" action=\"/sprints/new\">"
	print "
"
	print "
Project:	"
	print "<select id=\"select-project\" name=\"project\">"
	for thisProject in Project.loadAll():
		print "<option value=\"%d\"%s>%s</option>" % (thisProject.id, ' selected' if thisProject == project else '', thisProject.safe.name)
	print "</select>"
	print "
"
	print "
Name:	<input type=\"text\" name=\"name\" class=\"defaultfocus\">
"
	print "
Planning:	<input type=\"text\" name=\"start\" class=\"date\" value=\"%s\">
" % Weekday.today().strftime('%m/%d/%Y')
	print "
Wrapup:	<input type=\"text\" name=\"end\" class=\"date\">
"
	print "
Members:	"
	print "<select name=\"members[]\" id=\"select-members\" multiple>"
	# Default to last sprint's members
	members = {handler.session['user']}
	if sprints:
		members |= sprints[-1].members
	for user in sorted(User.loadAll()):
		if user.hasPrivilege('User'):
			print "<option value=\"%d\"%s>%s</option>" % (user.id, ' selected' if user in members else '', user.safe.username)
	print "</select>"
	print "
"
	print "
Options:	"
	print "
<input type=\"checkbox\" name=\"private\" id=\"flag-private\">Private – Only sprint members can view tasks
"
	print "
<input type=\"checkbox\" name=\"hidden\" id=\"flag-hidden\">Hidden – Only sprint members can see the sprint
"
	print "
"
	print "
 	"
	print Button('Save', id = 'save-button', type = 'button').positive()
	print Button('Cancel', id = 'cancel-button', type = 'button').negative()
	print "
"
	print "
"
	print "</form>"

@post('sprints/new')
def newSprintPost(handler, p_project, p_name, p_start, p_end, p_members = None, p_private = False, p_hidden = False):
	def die(msg):
		print msg
		done()

	handler.wrappers = False
	p_project = int(p_project)
	if not handler.session['user']:
		die("You must be logged in to create a new sprint")

	project = Project.load(p_project)
	if not project:
		die("Unknown project ID: %d" % p_project)

	if p_name == '':
		die("The sprint name cannot be empty")

	try:
		start = re.match("^(\d{1,2})/(\d{1,2})/(\d{4})$", p_start)
		if not start:
			raise ValueError
		month, day, year = map(int, start.groups())
		start = datetime(year, month, day)
	except ValueError:
		die("Malformed start date: %s" % stripTags(p_start))

	try:
		end = re.match("^(\d{1,2})/(\d{1,2})/(\d{4})$", p_end)
		if not end:
			raise ValueError
		month, day, year = map(int, end.groups())
		end = datetime(year, month, day, 23, 59, 59)
	except ValueError:
		die("Malformed end date: %s" % stripTags(p_end))

	msg = Sprint.validateDates(start, end)
	if msg:
		die(msg)

	members = set(User.load(int(memberid)) for memberid in p_members)
	if None in members:
		die("Unknown username")
	if handler.session['user'] not in members:
		die("The scrummaster (%s) must be a sprint member" % handler.session['user'])

	sprint = Sprint(project.id, p_name, handler.session['user'].id, dateToTs(start), dateToTs(end))
	sprint.members |= members
	if p_private or p_hidden:
		sprint.flags.add('private')
	if p_hidden:
		sprint.flags.add('hidden')
	sprint.save()
	# Make a default 'Miscellaneous' group so there's something to add tasks to
	Group(sprint.id, 'Miscellaneous', 1, False).save()
	# Make the standard set of sprint goals
	Goal.newSet(sprint)

	handler.responseCode = 299
	print "/sprints/%d" % sprint.id
	Event.newSprint(handler, sprint)

@get('sprints/export')
def exportSprints(handler, project):
	id = int(project)
	handler.title('Export Sprint')
	requirePriv(handler, 'User')
	project = Project.load(id)
	if not project:
		ErrorBox.die('Invalid project', "No project with ID %d" % id)

	print "<link href=\"/static/jquery.multiselect.css\" rel=\"stylesheet\" type=\"text/css\" />"
	print ""
	print ""
	print ""

	print "
Sprints
"
	print "<select name=\"sprints\" multiple>"
	for sprint in project.getSprints():
		if sprint.canView(handler.session['user']):
			print "<option value=\"%d\"%s>%s</option>" % (sprint.id, ' selected' if sprint.isActive() else '', sprint.safe.name)
	print "</select>"

	print "
Format
"
	for export in exports.values():
		print "" % (export.getIcon(), export.getFriendlyName(), export.getName())

	print "

"
	print Button('Export', id = 'export-button').positive()

@get('sprints/export/render')
def exportRender(handler, sprints, format):
	if not handler.session['user']:
		ErrorBox.die('Forbidden', "You must be logged in to create a new sprint")
	ids = map(int, sprints.split(','))
	sprints = map(Sprint.load, ids)

	try:
		export = exports[format]
	except KeyError:
		ErrorBox.die('Export format', "No format named %s" % stripTags(format))

	for sprint in sprints:
		if sprint and sprint.canView(handler.session['user']):
			export.process(sprint)

	handler.wrappers = False
	handler.forceDownload = "%s.%s" % (sprints[0].name if len(sprints) == 1 else 'sprints', export.getExtension())


This lesson will cover the hard sound for letter G. For the soft sound of letter G, please refer to the CH and J lesson.
Instruction: The rear portion of your tongue should move up towards the rear part of the mouth, slightly touching it when the sound is made.
"The big goose flew off with my golf ball"
"The guests won't mind if we pay together"
"The constant tug of the little girl finally woke up the father"
"My friend Kelly said she will come by soon"
"I was making the ingredients for breakfast"
"I didn't need to bake anything for the potluck"


Kids love scary stories. It's a fact of life. Ghosts, darkness, and the unknown are just too intriguing. With Halloween around the corner, it's the perfect time to indulge their curiosity with a G or PG rated film. While we can't promise every title scored the best ratings on IMDB, we can tell you your kids won't care. Check out these great Halloween movies for a little extra fun.


text:
Q: Opentracing proper way to inject/extract span context I have 2 applications communicating via grps.
When I try to send a span context, I always get null in extracted.
Map<String, String> tracingMetadata = new HashMap<>();
        tracingMetadata.put("trace-id", traceId);
        tracingMetadata.put("span-id", spanId);
SpanContext extracted = tracer.extract(Format.Builtin.TEXT_MAP, new TextMapAdapter(tracingMetadata));

Therefore, I send it via metadata in ClientIntercaptor like that.
    return new ForwardingClientCall.SimpleForwardingClientCall<ReqT, RespT>(
        next.newCall(method, callOptions)) {
      @Override
      public void start(Listener<RespT> responseListener, Metadata headers) {
        headers.put(Metadata.Key.of("trace-id", Metadata.ASCII_STRING_MARSHALLER), traceId);
        headers.put(Metadata.Key.of("span-id", Metadata.ASCII_STRING_MARSHALLER), spanId);
...

When I try to create a context span from this data, it either talks about incompatible types, or context doesn't change. In pre and after equal context.
private void injectParentContext(Span span) {
    final String traceId = HeadersServerInterceptor.getTraceIdHeader();
    final String spanId = HeadersServerInterceptor.getSpanIdHeader();

    final Map<String, String> contextValues = new HashMap<>();
    contextValues.put("x-b3-trace-id", traceId);
    contextValues.put("x-b3-spanid", spanId);

    final SpanContext pre=span.context();

    tracer.inject(span.context(), Format.Builtin.TEXT_MAP, new TextMapAdapter(contextValues));

    final SpanContext after=  span.context();
  }

I tried different Format.Builtin and Adapter, nothing works.
What am I doing wrong?


text:
Food Ordering & Delivery App
Feed Me is a Food Ordering App that allows its users to browse the app for restaurant information, coupons and food ordering facilities.
Food Delivery Application That Food Lovers Will Love!
Delivery Scheduling
Although there are many Food Ordering and Delivery Apps available now, there was a time when the concept was alien and there were very few applications where the users could browse and order Food Online from Restaurants who were nearby their place. Client came to us with the requirement of a Mobile Application that covers all the aspects of a Food Ordering Application with some unique features.
Feed Me is one such application that allows its users to review and order from restaurants of their choice and their budget!
Purpose Behind the App
At the time when client came to us with the requirement of a Mobile App that has Food Reviewing, an Ordering and Delivery feature, the concept was fresh in the market. Also, client had some unique ideas that allowed users to search for restaurants based on unique filters like budget per person, distance, cuisine, delivery and takeout options and many other such cool filters.
The App also had some amazing features where their users could check the photos of the restaurant from the gallery and can also mark any coupon or restaurant their favourites. Apart from that, the app offered all the basic information like opening and closing hours, location, user reviews and many other such features.
The purpose of the App was to become a one stop solution for all the foodies who were looking for new restaurants, their reviews and also wished to order from the application.
Snapshot of Food Ordering App
View Our next PORTFOLIO
Ex-Comm
Android iOS Communication
iOS Android Social


If at first you don't succeed, try try again!
oh boy! I guess I didn't exacty know what I wanted to cook today. I wanted something with tofu… but that's not how it ended up. I messed up twice today- two different dishes- actually THREE TIMES!
(1) I set out to make baked tofu with some veggies that I had in the refrigerator. I don't know what came over me and made me take the spinach out of the freezer- but I did. I guess I was looking to do a baked tofu, a few fresh veggies and some sautéed (frozen spinach). Mark my words- I will not use frozen spinach again unless it's in a smoothie or a baked vegan pasta free lasagna and EVEN then- I may just go with fresh. Frozen spinach just doesn't taste good to me. I have tried a few difference brands but to no prevail. At one point, I just kept adding whatever it took to make it taste good- persistent I can be! I added salt, garlic powder, salt, vegan butter spread (against my better judgement) and then even more salt. ugh- I have salty, fattening spinach now- ohh with frozen peas and carrots too. Great! Back to the drawing board to see yet what I could accompany this dish with.
(2) Now I blot and dry out some tofu- not as well as previous days I think. I bake away- while sautéing the fresh vegetables from my refrigerator. The veggies came out nice although I didn't have much of them. Waiting for my tofu to toughen up a bit, I dive into the quinoa to hopefully add flavor and substance and save the day. Wrong.
(3) While leaving the kitchen for what only felt like moments, I came back to burnt quinoa and rubbery tofu. I threw out the quinoa (and the pot fyi)- it was that bad! lol I refused to quit though. I am super stubborn sometimes.
Quinoa with pepitas and dried cranberries!


text:
Lundbeck Foundation's general criterion for allocating research funds is that the scientific content of the application, the applicant's qualifications and the scientific environment at the host institution are of a high international standard and that the research makes a difference to people's health and lives. We aim to ensure that all applications are evaluated on an equal basis.
Basically, the foundation endeavours to ensure that all applications are subjected to peer review by a majority of impartial experts. The foundation has established two permanent evaluation panels with a majority of external and foreign experts to evaluate project applications on a regular basis. Evaluation panels of international experts are convened on an ad hoc basis to evaluate major personal and strategic applications. All members of the evaluation panels must comply with the foundation's rules on impartiality.
All evaluations result in a recommendation to Lundbeckfonden's board of trustees, which then decides on allocation of funds in accordance with legislation. Evaluation procedures for applications and recommendations are regularly adjusted to keep pace with developments and implementation of new measures.
In 2014, our board of trustees adopted "Lundbeckfonden's Code of Best Research Practice", which is now incorporated into the foundation's General Terms and Conditions for Research Grants. Our codes support basic principles for best research practice, such as research integrity, transparency and accountability. All grant recipients must sign this document before they can receive the grant.
Lundbeckfonden's terms and conditions for research grants refer, for example, to the Danish Ministry of Higher Education and Science's Code of Conduct for Research Integrity from 2014.
We also expect grant holders to conduct their research in accordance with Responsible Research and Innovation, cf. the EU's HORIZON 2020.


Join Lloyd and the Troma Team November 1st-3rd at the Comickaze Expo in Los Angeles, CA!
496 year-old cult icon/recording artist/actor, Count Smokula, will be joining the Troma Team with his thundering squeezebox at Stan Lee's Comikaze Expo 2013, taking place from November 1st to 3rd at the Los Angeles Convention Center, to celebrate and serenade the guest of honor, Lloyd Kaufman, and the accomplishments of Troma Entertainment. He will appear at the Troma panel on November 2nd and will be performing at the Troma booth.
A long time friend of Troma, The Count has appeared in and composed music for multiple Troma films including 'Father's Day', 'Poultrygeist', 'Tales from the Crapper', and 'All the Love You Cannes'. He also wrote and performed The Tromadance Theme Song. Count Smokula has performed and emceed with Troma at The Cannes Film Festival, The San Diego Comic-Con, and numerous Tromadances, AFMs, and book-signings. He hosts 'The Count Smokula Show' on cable television and the web, and has two albums on iTunes, 'Authentic Sounds of Smokesylvania' and 'Smokesylvania in My Mind'.
Guest of Honor, Lloyd Kaufman, (President of Troma Entertainment and Creator of 'The Toxic Avenger'), will also be joined at the Troma booth by the Toxic Avenger, Mark Torgl, (star of 'The Toxic Avenger' and 'The First Turn On'), and Ron Jeremy (Entertainment Industry Legend), for a weekend of truly Tromatic excitement! More Troma celebrities to be announced. Throughout the convention, Comikaze will be presenting a number of exclusive Troma screenings, informative and entertaining panel discussions, and special, intimate, autograph sessions and photo ops with Lloyd Kaufman for no charge at the Troma booth, where there will be all the latest and greatest Troma merchandise available!
This entry was posted on Thursday, November 1st, 2012 at 11:41 am	and is filed under Events. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
You are here : Home » events » 2012 » 11 » 01 » MEET LLOYD! – Comikaze Expo in Los Angeles!


text:
Unplugged: Argent: The Consortium's political Indines
Features / Unplugged / by Chris Ingersoll /
I really appreciate good world-building. For me, the sign of a solid, well-crafted setting is the ability to re-use it in other creations beyond the original and its sequels or expansions. This isn't something that happens in the board game world very often without a licensed property being involved. A good recent example is Fantasy Flight Games's Android universe, which spun off into Infiltration and served as a natural fit for the revival of Netrunner.
Level 99 Games has now done something similar, taking its World of Indines, most notably seen in its BattleCON Street Fighter-style fighting games, and exploring one of its key locations: Argent University. Argent is a school for mages, sort of a post-graduate Hogwarts, and for the purpose of this game its Chancellor has just announced his retirement. The players represent high-ranking members of the school's various departments, each vying for the vacant post. In order to achieve this, they must win the favor of the secret consortium (thus Argent: The Consortium) who will cast their votes to determine the new Chancellor.
Each player has a number of student mages at their disposal, and the bulk of the game is worker-placement with a twist: each department's students have their own unique abilities that makes them more than mere workers. For example, Divinity mages can not be affected by the spells of opponents, while Mysticism mages are able to be placed for free every time you cast a spell on your turn. Your specific configuration of powers will depend on which mages you draft from the available pool at the beginning of the game, but you can never have more than two from the same department.
On a player's turn, they may first execute a fast action. These are specially-indicated skills that can only be used at this time. Then they take one regular action: placing a mage, casting a spell, using a Supporter or Treasure card they have acquired or claiming a Bell Tower card and its effects. Players take turns executing actions until the final Bell Tower card is claimed, which ends the round whether other players have potential actions left or not! After this Errand Phase, placed mages collect their rewards and then a new round begins. After five rounds (normally), the game ends and votes are tallied. Whoever has the most votes wins.
Voters each have specific and unique criteria for who earns their vote. The catch is that ten of the 12 voters are secret! Players can use some actions or rewards to earn marks, which allow them to look at one voter and learn their requirement. Knowing how to earn some votes is handy, but if you're too obvious in going after the votes you know are available, your opponents might pick up on it and deduce relevant knowledge for free. Unless you're bluffing, of course…
At its core, this is all there is to Argent: The Consortium. But the details are so much deeper. The board where mages are placed consists of a player-dependent number of different rooms in the University drawn at random during set up, and each with two versions. Every space in every room has a different reward for having a mage there during the Resolution Phase. Some of those rewards involve gaining one of three different types of available card (Supporter, Vault or Spell) from a constantly-changing tableau of each, and of course every card has its own unique effect. Spells have as many as three if you invest research into developing them! And of course all of these various objects are potentially valuable if the right voters are in the consortium.
Argent also has options for further variety beyond that inherent in every game. There are alternate mage powers, a possible additional round, scenarios that change the rules each round and an expansion, Mancers of the University, that contains even more possibilities — including an additional department of magic that allows the game to support up to six players instead of the base game's five.
As you can see, Argent offers almost-limitless replayability without ever being exactly the same game twice. This complexity comes at a price, however. While the basic game mechanics are simple, the complicating factors of each permutation add up quickly, especially in later rounds when players might have picked up additional mages or a large library of spells at their disposal. As a result, a game session averages at thirty minutes per player but the wealth of options can potentially overwhelm even the best to drag that out, especially in early games where everyone is still getting a grip on things.
Fortunately, the game itself is fairly easy, and makes liberal use of icons to represent actions for quick reference. The only real flaw that I could find is with the mage pawns themselves, or rather the badges that each player uses to mark the ones belonging to them. Many of these badges are dark and hard to identify from across the table, which can be a nightmare. My friends and I have taken to making sure that we place mages with their badges facing their owner to help keep track of who is where and that helps. Speaking of the table, I hope you have a big one because Argent is going to demand a lot of space, especially with a large player count (which also means a larger University set-up).
As worker-placement games go, Argent stands up against the best thanks to its unique features. More importantly for me, it gives me an opportunity to visit a world that I enjoy without having to resort to what is normally a game for only two players, which makes a huge difference when you have a regular gaming group. (Argent can also support two, but that is recommended for experienced players only.) Devastation of Indines was my favorite game of last year, and I have to imagine that Argent: The Consortium will finish highly at the end of this year as well.
Argent: The Consortium retails for $60; Mancers of the University for $40.


ROI Coding Solutions will provide your company with application specific labels, tags and ribbons. Our large inventory of take-from-stock labels have virtually no lead-time and offer a cost effective solution for secondary label applications.
ROI can also provide your company with a high quality custom label solution.
Our custom labels can be designed with, but not limited to: pre-printed logos, cold temp adhesives, various degrees of removability, moisture proof face-stocks and high-gloss finishes.


text:
Home > Find a Physician > Eugene Shostak, M.D.
Eugene Shostak, M.D.
Locations and Appointments
Language: Russian, English
Insurance: 40 accepted View
Interventional Bronchcoscopy
Endobronchial Ultrasound With Biopsy of Lymph Node of Mediastinum
Endobronchial Valve Placement
Bronchial Thermoplasty
Bronchoscopy With Biopsy
Tumor Ablation
Tracheoesophageal Fistula
Pulmonary Nodules
Interventional Pulmonology
Medical Thoracoscopy
Rigid Bronchoscopy
Percutaneous Tracheostomy
Clinical & Academic Positions
Assistant Attending Physician - NewYork-Presbyterian Hospital
Assistant Professor of Medicine in Clinical Cardiothoracic Surgery - Weill Cornell Medical College, Cornell University
M.D., State University of New York Health Science Center at Brooklyn, 2007
B.A., New York University, 2003
View Research
"My life passion has been to establish a state of the art complex airway, lung and pleural center that would serve as a regional and national referral center for patients with a wide range of advanced thoracic and pleural disorders. I am fortunate to join the Thoracic Surgery division at New York Presbyterian Hospital in the development of an interventional pulmonology program and join the team of thoracic surgeons, interventional radiologists, pulmonologists, oncologists and radiation oncologists in delivering high quality patient care through multidisciplinary approach. In interventional pulmonology we utilize the latest advances in technology to offer our patients minimally invasive options for the diagnosis and treatment of their disease. Since interventional pulmonology is a relatively new but rapidly growing field, many physicians may not be fully aware of all the available treatment options that exist for their patients. My goal is to advance the knowledge of interventional pulmonology in the community through educational seminars and procedure workshops. I also closely collaborate with device industries in advancing medical technology through clinical trials. By incorporating my prior training in pulmonary and critical care medicine together with my procedural skills in interventional pulmonology, I aim to provide patients with maximum options for diagnosis and treatment of their disease and deliver best quality care."
Please visit our website for additional information.
Dr Eugene Shostak is an Assistant Professor of Medicine and an Assistant Attending Physician in Cardiothoracic Surgery who specializes in Interventional Pulmonology. After finishing State University of New York (SUNY) Downstate Medical School in Brooklyn NY, and completing his General Internal Medicine residency training at Lahey Clinic Medical Center in Burlington MA, Dr Shostak returned to NYC to complete his general pulmonary and critical care fellowship at New York Presbyterian Hospital Weill Cornell Medical Center. Following his fellowship training, Dr Shostak pursued a one year advanced fellowship training in Interventional Pulmonology at the combined Harvard Interventional Pulmonology program in Boston MA. Upon his return to NYC, Dr Shostak joined staff as an Interventional Pulmonologist at the Cardiothoracic Surgery Department at Weill Cornell Medical Center. His interests include advanced bronchoscopy for diagnosis of lung nodules utilizing a GPS-like guidance system termed electromagnetic navigation, evaluation of thoracic lymph nodes with assistance of endobronchial ultrasound, and endoscopic treatment of early lung cancer. Dr Shostak is one of few pulmonologists nationwide who is formally trained in rigid bronchoscopy and treats complex airway disorders such as tracheal stenosis, tracheobronchomalacia, and airway obstruction. Dr Shostak also offers a variety of treatment options for patients with pleural disorders such as ultrasound-guided thoracentesis with pleural manometry, placement of percutaneous chest tubes and tunneled pleural catheters, and medical thoracoscopy (pleuroscopy). Dr Shostak is involved in lung cancer screening program offered at New York Presbyterian Hospital. He also attends in the Intensive Care Unit and is trained in critical care ultrasonography.
The following represents most of the managed care plans accepted by this physician. If your insurance carrier does not appear here please contact the physician's office as they may have individual contracts not included on this site.
* indicates this physician is no longer accepting new patients with this insurance plan.
AETNA - PPO
AETNA - Medicare
Aetna - Weill Cornell - POS
Aetna-NYP - EPO/POS
Affinity Access
Affinity Health Plan
Amida Care
Blue Priority Network
Emblem Select Care
Empire Blue Cross/Blue Shield - PPO
Empire Blue Cross/Blue Shield - Pathway X
Empire Blue Cross/Blue Shield - Pathway X Enhanced
Empire Blue Cross/Blue Shield - Mediblue (Senior)
Empire Blue Cross/Blue Shield - HMO
Empire Blue Cross/Blue Shield - EPO
Empire Empire Blue Cross/Blue Shield HealthPlus
Empire Empire Blue Cross/Blue Shield HealthPlus - CHP
GHI - CBP
Health Insurance Plan of NY (HIP) - Medicare
Health Insurance Plan of NY (HIP) - Medicaid
Health Insurance Plan of NY (HIP)
Oxford Health Plans - Metro/Core/Charter
Oxford Health Plans - Medicare Advantage
Oxford Health Plans - Freedom
Oxford Health Plans - Liberty
Rockefeller University - Trustmark
UHC Compass
United Empire
United Health Care - Medicare
United Health Care - Community Plan
VNSNY CHOICE - Medicare
VNSNY CHOICE - HMO
Post-Graduate Recognition Day Award for Clinical Case Presentation. Lahey Clinic Medical Center. Burlington, MA 2009
Resident Travel Award. American Thoracic Society International Conference. San Diego, CA. 2009
Best Resident Teacher Award. Lahey Clinic Medical Center. Burlington, MA. 2008
Peter C Rizzo Bioengineering Research Fellowship Award. Bioengineering Fellowship. SUNY Downstate Medical Center. Brooklyn, NY. 2002, 2004, 2006
Scholarship for Academic Excellence. New York University. 1999, 2000
Eugene Shostak, M.D. has been named one of America's Top Doctors by Castle Connolly. We have 384 of America's Top Doctors in 57 medical specialties.