After 13 years and umpteen miles under her keel Feel Free has tied the knot on the circumnavigation. As the ship's chief engineer and bottle washer I thought it might be interesting to reflect on the hardware side of the trip. How did all the stuff we packed on Feel Free perform, and would we recommend it to other cruisers? If, heaven forbid, we were to contemplate a second circumnavigation, how would things be different? What gear would we simply have to have and what would we leave behind?
This discussion will also include the boat itself, how did she perform, how well suited was she and is she suited to this kind of long distance sailing endeavour? Would we entrust our lives with her to do another circumnavigation? What would we look for in our next cruising boat?
Feel Free is a Canadian built Spencer 51. She's of 70s vintage which explains her very thick fiberglass layup. The hull above the waterline as well as the deck, are cored with airex foam. She has a long fin keel and a skeg hung rudder. Her beam is 13 feet and her draft 7 ½ feet.
Her long, narrow wineglass shaped hull with the deep fin keel means she can go to weather better than her crew. We have paid the price though, for her deep draft. We've been kept out of plenty of anchorages and harbors. Shallow cruising areas like the Bahamas and the south coast of Cuba while not out of the question for us, would be challenging.
Spencer 51s were built with aft or center cockpits, ours is the latter. The center cockpit design has several advantages: it's a more comfortable liveaboard while at anchor; there's more privacy when guests are aboard; and the engine access under the cockpit is much better than under the floor. The disadvantages: foredeck is much smaller and less user-friendly; there's not as much space for stowing dinghies; accessing the wind vane is more difficult and requires leaving the safety of the cockpit. Although my personal preference is the center cockpit, it isn't a strong preference.
Feel Free is a cutter rigged sloop. I wouldn't want it any other way. We carry a full battened main with three reef points, the inner forestay is on hanks and the head sail is controlled with a Harken roller furler.
In heavy weather we tend to completely furl the head sail and carry on with stay sail and reefed main. After 20 years of service we retired the North Sail main and replaced it with a Lee Sail mainsail which we ordered direct from Hong Kong and had shipped to Panama six months ago- no dramas at all and much cheaper than buying from sail makers in North America. So far, so good.
Our sail inventory includes two furling jibs, a 120 and a 140, the larger of the two has been virtually unused during the circumnavigation. This can also be said of our asymmetric cruising spinnaker and our storm trysail. I can say that we really needed only three sails, the main, staysail and 120 furling headsail.
Although we often put a single reef in the main, and occasionally a double reef, we have never had occasion to triple reef the main. That said, I would insist on having three reef points for the main.
Occasionally people ask if it would be easier handling a smaller boat given the relatively large sails on Feel Free. Not at all, thanks to the efforts of the previous owners who put a lot of thought, money and work into arranging that all sheets and halyards be led to the cockpit.
No fewer than 10 winches surround the cockpit complete with six jammers. Although I must leave the cockpit to reef the main, only at the mast, it takes only seconds to lower the sail and hook the tack cringle to the goose neck.
We use lazy jacks (lines that run from either side of the boom to the first set of spreaders at the mast) to catch the mainsail when it is lowered.
We put steps on the mast which lead to the mast head. I couldn't live without mast steps. They are invaluable when conning through reef strewn channels in the tropics or going aloft to check standing and running rigging as well as replacing light bulbs or wind instruments.
Protection from the sun, wind, rain, salt water spray and the cold while in the cockpit cannot be taken too lightly considering the vast amount of time one spends in the cockpit.
Over the years, we added a hard, fiberglass over plywood bimini to the original fiberglass dodger that came with the boat from the factory. During our two winters in the Mediterranean, one in Turkey and one in Malta, Liz made a complete cockpit enclosure. This 'bubble' gave us another room aboard and meant we could keep the forward and aft companionway hatches open without freezing to death. In the heat of the tropics, the bubble gives way to sunbrella side curtains and overhead canopy that runs aft from the bimini to almost the end of the boom.
A 70 hp, 4 cylinder marinized diesel engine turns the 20 inch fixed 3 bladed propellor. Named "Yosh", it's the original power plant on Feel Free. It has about 6,400 hours on the tack. Of those hours, about 2,000 of them were since leaving Cabo San Lucas in 1999, when we began the circumnavigation with Feel Free.
Although it performed flawlessly since new, it did have an appetite for motor oil and drooled a bit around some oil seals.
Nothing major but while in Malaysia, contemplating the importance of the motor in transiting the Red Sea and Mediterranean, we considered re-powering. Our mechanic quickly talked us out of that insisting it was a great engine and would be a shame to replace it with a newer higher revving type. "Let's pull it out and rebuild it" he said and so we did. Yosh has lost his appetite for oil and has stopped drooling. After 1,080 hours on the rebuild, it looks like it was a good decision.
There are a number of ways to steer without steering. We always had two autopilots and one wind vane.
Both autopilots are antiques (Cetec Benmar Course Keeper and CPT 2000), in fact, so is our Sayes Rig wind vane. If we were to go again, I'd get a light duty autopilot that would steer the boat via the wind vane, since the power required to turn the wind vane is only a fraction of the power required to turn the boat's rudder.
Self steering is not a luxury, it's a safety item. It eliminates the need for a helmsperson and frees that person up to navigate, handle sails, keep a lookout, or make tea. It reduces fatigue and stress.
We carry solar panels and a wind generator. We have 4 60 watt panels mounted on a stainless steel stern arch we had built in Malaysia. While in Curacao where the trade winds blow virtually nonstop we bought an Air Breeze wind generator. It was fantastic, doubling our electrical output while we were in the Caribbean. Now that we're back on the Pacific coast the wind generator's contribution is drastically reduced.
If you have the resources and space to have both, have both. If we had to choose between one or the other we'd definitely go with the panels as they generate no noise and are virtually maintenance free.
We're on our 4th inflatable dinghy in the 18 years of owning Feel Free. So many, because with the exception of our present dink the other 3 were second hand. They were all either 9 or 10 feet in length and all made from hypalon.
In that time we've bought 4 two stroke outboards, 2 were 8 hp and one, 2.5 hp, and one 9.8hp. We still have the 9.8 and the 2.5. The 2.5 stays in the bilge and is for emergencies only. One of the 8's was stolen and the other we just sold recently.
Most boats carry their dinghies on davits, however with our wind vane on the stern we required a different solution. We simply raise the dinghy and outboard with the spinnaker halyard every night while at anchor and put it on deck while underway.
That's a brief look at Feel Free and some of her gear. By today's standards she's a pretty simple boat. We certainly haven't been quick to adopt all the new innovative technologies. We still have no water maker or AIS, we're still without email while offshore, have no fancy wind instruments or furling mainsail. Our limited resources are directed toward ensuring the boat's rigging is strong, ground tackle well galvanized, through hulls and seacocks sound, bilge pumps working well, life raft serviced, ditch kit up to date; in short the systems are kept simple which make them simple to keep safe. It's definitely a K.I.S.S. (keep it simple stupid) boat. Certainly she's a safer boat today than she was 18 years ago when we bought her. Although she's definitely in need of a paint job and some minor cosmetic work she's certainly no worse for wear after all those years and miles and I, with mixed emotions can say she'll no doubt be cruising long after Liz and I.


How do you deal with design disagreements?
In work we're designing a landing page that acts as a springboard to different areas of advice our company provides. We came to a point where we disagreed on the best way to lay out the links to specific advice within each section.
How do you resolve a disagreement between two design decisions that both have valid arguments for and against them?
When disagreeing on programming, the answer can be relatively easy. The "winner" supports any bugfixes and customer service issues that arise due to the decision.
But how do you decide between two different designs? Answering my own question, A/B testing is probably the best way, as you can usually derive a clear winner from the figures it returns.
How do you resolve internal design disagreements? Tweet me @_gareth if you have any tips and tricks.


Tan body, navy contrast with back side vents in black mesh. Deep front re-enforced pockets, zipper front, and designed with a back cinch to snug the garment to the body.
Colors Available: please type in body and contrast colors above. Colors could be Black, Red, Forest Green Navy, Tan, Maroon and Royal Blue. Mesh will be Black.


MARKUSEN, Eric. American, b. 1946. Genres: Bibliography, Military/ Defense/Arms control, Sociology. Career: Neighborhood House, St. Paul, MN, youth worker, 1967-72, program director at Camp Owendigo, 1972; Macalester College, St. Paul, visiting instructor in sociology and anthropology, 1972; State of Idaho, Department of Environmental and Community Services, Kellogg, youth service worker, 1973-74; Wolf Lake Refuge Residential Treatment Center, McGregor, MN, intake director and court services liaison, 1977-79; University of Minnesota-Twin Cities, Minneapolis, instructor in sociology, 1980-82; Southwest State University, Marshall, MN, assistant professor of sociology, 1983-85; Old Dominion University, Norfolk, VA, assistant professor of sociology, 1985-88; Carthage College, Kenosha, WI, associate professor of sociology and social work, 1988-90; Southwest State University, associate professor, 1990-92, professor of sociology and social work, 1992-, director of Social Work Program, 1990-. University of Manitoba, research assistant at Centre for Settlement Studies, 1972; University of California, San Diego, research associate, 1978; Princeton University, research assistant at Center for Energy and Environmental Studies, 1980; Yale Unviersity, research associate in psychiatry, 1981; University of Wisconsin-River Falls, visiting instructor, 1981; speaker at colleges and universities worldwide. Publications: (with R. Fulton, G. Owen, K. Krohn, and J. Carlson) Death, Grief, and Bereavement: A Bibliography, 1945-75, 1976; (with R.J. Lifton) The Genocidal Mentality: Nazi Holocaust and Nuclear Threat, 1990; (with D. Kopf) The Holocaust and Strategic Bombing: Genocide and Total War in the Twentieth Century, 1995. EDITOR: (with Fulton, Owen, and J. Scheiber) Death and Dying: Challenge and Change, 1978; (with S. Lakoff, J. Leifer, and R. Bee) Science and Ethical Responsibility, 1980; (with J. Harris) Nuclear Weapons and the Threat of Nuclear War, 1986. Contributor to books and periodicals. Address: Social Work Program, Southwest State University, Marshall, MN 56258, U.S.A.
"Markusen, Eric." Writers Directory 2005. . Encyclopedia.com. 17 Apr. 2019 <https://www.encyclopedia.com>.


Who wants a warm, cheesy, melty, slightly spicy, buttery, and perfectly binge-able loaf of the most delicious bread? A loaf loaded with plenty of melted cheddar cheese and piquant, peppery, pickled jalapeños? A loaf that's actually so simple to whip up and throw in the oven? Well, you've come to the right place!
Ok, I have to be honest with you guys… I've actually never, ever made anything with this type of jarred jalapeño before. And yet, I have this weird fascination with them. Maybe it's because the taste – with the sharp combination of hot pepper and tangy vinegar – is kind of addicting. Or maybe it's because I have a soft spot in my heart for Mexican-style nachos, with crunchy corn chips and plenty of spicy salsa and sour cream. Whatever it is, I'll admit: I'm on a jalapeño kick lately.
And so I'm rolling with it. I decided to offset the hot, tangy, and spicy rounds with plenty of soft, creamy, melty cheese. Throw in some high-quality carbs – in the form of easy, peasy, premade pizza dough – and you've got yourself a meal (or a snack, if you're not looking to indulge in the entire loaf). Call it an updated take on the classic nachos, if you'd like, but trust me – you're gonna want to try this one!
This Cheddar Jalapeño Pull Apart Bread is warm, cheesy, and slightly spicy! I love the contrast of piquant, peppery jalapeños and creamy, melty cheese - all loaded on buttery pizza dough.
I suggest serving this bread with either warm marinara sauce or ranch dressing.
Preheat oven to 400°. Butter a loaf pan, then place a piece of parchment paper in the pan so that it covers the bottom and sides.
Place the pizza dough on a floured board. Roll the dough out into a large rectangle about ten by twenty inches.
Brush the melted butter over the dough. Sprinkle mozzarella and cheddar cheese over dough, then top with the jalapeños, distributing evenly.
Using a sharp knife, cut the dough lengthwise into three long strips. Cut each strip into six squares.
Working four or six at a time, stack the squares, being careful not to lose too much of the cheese.
Place the layers of squares vertically in the prepared pan.
Bake bread until puffed and golden brown, about twenty five minutes.


This is a second's trailer ON SALE for $4995, SAVE $3065.00. Price includes Jockey wheel, 3 months rego. Tandem trailer 2000KG, 4ft High Zinc Sides, Barns Doors, Enclosed Lawn Box, Top ToolBox with Lid, 3 Roof Rack H-Frames.
Checker Plate Ramps, set into Back of Trailer.
Rolled C/Plate Runners Front Wheel Stops.
Mudguards checker plate 230mm high Allowing for car doors to open. Mudflaps to comply with Australian standards.
DRAW BAR 125x75x4mm RHS RHS V-type, with spare wheel holder and Plug Holder.
NEW RIMS 14'' AND NEW TYRES (NOT SECONDHAND WHEELS or NOT REFURBISHED TYRES).


2 x 2 Personalized wedding favor candy boxes measure 2 1/2 inches wide, 2 1/2 inches long and 1 1/8 inch high with attached folding lid for presenting candy favors to your wedding guests. These adorable miniature favor boxes are large enough to hold approximately 70 small jelly beans.
These boxes looked classy and elegant! They were perfect for men's gifts in black and gold lettering for a large chorus of men. I especially liked getting to talk to a real person before completing my online order!


Information technology firm Hexagon AB has acquired Aicon 3D Systems, a provider of optical and portable noncontact 3D measuring systems for industrial manufacturing.
Founded in 1990 and based in Braunschweig, Germany, Aicon serves automotive manufacturers and companies in the aerospace, shipbuilding, renewable energy and mechanical engineering markets. Its technology portfolio includes portable coordinate measuring machines for universal applications and specialized optical 3D measuring systems that enable efficient, high-precision monitoring, quality assurance and control in manufacturing production.
With over 140 employees, Aicon has a direct presence in Germany, subsidiaries in China, Korea, Japan, and the U.S. and a network of resellers worldwide supported by its field support resources.
Hexagon reported that Aicon will be fully consolidated as of April, and that company's sales for 2015 amounted to approximately €19 million.


Home / Cross body bags / Rini Foldover cross body purse.
Rini Foldover cross body purse.
Handcrafted by talented Enfair artisan partners in India.
When the flap folds over : 16 Height X 25 width.
This fold over cross body purse is perfect when you need to carry a few essential items. This is a dual purpose purse as it can also be used as a clutch when the strap is removed.The main body of the bag has a zipped compartment, and the fold over flap conceals another zipped compartment.Made from a durable printed dark blue denim cotton canvas.The purse features a buffalo leather handle in the front.Fully lined with a beautiful printed cotton ,the strap is made of cotton webbing which can be adjusted.
Lali Cross body bag in woven cotton and cotton canvas	 Mali evening/day purse in multi colour.


Dawid Gmitruk. Pledges: 14. Small. Richard garrett. Pledges: 3. Small. Derek Bower. Pledges: 18. Small · Picture?width=100&height=100 · Small. John Griffiths.
Watch Derek Bower's videos and check out their recent activity on Hudl.
View Derek Bower's career, season and game-by-game football stats while attending Berwick High School.
View Derek Bower's business profile as Senior Mine Planner - SXO at Minjar Gold Pty Ltd and see work history, affiliations and more.
Get Derek Bower's email address, .
District · Superintendent · Mission & Vision · Board of Education · Minutes · District Policy · District Calendar · Location & Maps · Google Map · Employment.
LVS AUTOMOTIVE GROUP. Derek Bower. Service Advisor. I have been involved with the motor trade in one way or another pretty much since I left school.
View The Obituary For Mildred L. Bower. Please join us in Loving, Sharing and Memorializing Mildred L. Bower on this permanent online memorial.
Guest Editorial: Viega. Paige Riddle And Derek Bower. Visit Article: http://digital.bnpmedia.com/article/Guest+Editorial%3A+Viega article.html.
Derek Bower's Library. 12 photos.
I know Derek Bower and several other meteorite hunters will be hunting the area for the next few weeks. There is a very good chance more stones will be found soon. Personally I think I'm going to sit the rest of this one out.
Next Post - burn out bright.
Cacklefest Crash at Winter nationals | The H.A.M.B.
... Annual Conference, Nov Venue: San Francisco Marriott Marquis, San Francisco, California, United States. Speakers: Derek Bower, John Bejjani.
Renee Bower and Derek Bower from Berwick, PA have registered at for their wedding on June 01, Browse all their registries in one list.
Derek Bower is located at 31 E Noble St Marengo, Ohio and is affiliated undeclared. He is male registered to vote in Morrow County, OH.
Find Derek Bower of Flow Control's articles, email address, contact information, Twitter and more.
Erin Bower & Derek Bower from registered at for their baby shower registry with a due date of . Browse their baby registries.
Vice President at RREEF, Real Estate Securities View Derek Bower's full profile Derek Bower's Activity.


Check availability, view our offers and book your favourite holiday home in Sicily.
At Tenuta Madonnina we apply flexible arrival and departure days. These vary by period and by type of houses. We try to be able to respond to the flight offer and your wishes as much as possible.
All different days or periods can be consulted if possible.
During the high season (13.07.2019-24.08.2019) you can rent a holiday home mostly exclusively on a weekly basis from Saturday to Saturday. In the other periods, a minimum length of stay of 7 nights, but exceptions are possible.
Would you like to request a reservation for your stay in one of our holiday homes on the estate of Tenuta Madonnina? This can be without obligation via the online form at the bottom of every page, by mail or by telephone.
Upon receipt we will contact you A.S.A.P. to continue your request. We do our best to meet your personal requirements.
Check out the current availability of our holiday homes.
Check out our current/ongoing offers.
It is now possible to book an early booking discount for 2019.
All bookings with a minimum stay of 7 nights receive a 10% discount. This applies to reservations in the period from 6 April to 30 August 2019.
Period: from 6 April to 30 August 2019.
Arrival and departure: Based on mentioned days per period and per house type.
Discounted price: 10% on the rental price per week excl. Extra persons.
Valid on bookings made before: 31 December 2018.


text:
Kahr Arms introduces the S-Series semi-automatic pistols
Jun 13, 2017 - 6:14am By GUNSweek
New for 2017 from the Kahr Firearms Group are the S9 and ST9 semi-automatic pistols, two new models in 9mm caliber
CarryNow: Firearms United tackles personal defense!
Jun 8, 2017 - 2:30pm By GUNSweek
CarryNow, a new awareness initiative by Firearms United, tackles both the uselessness of gun control laws and regulations in the wake of the recent...
Czech Republic's complaint against EU gun ban is ready
Jun 5, 2017 - 6:15pm By Pierangelo Tendas
Czech Interior Minister Milan Chovanec has already completed the text of his Country's complaint against the recently amended European firearms...
In-security: terrorist attacks on a disarmed Europe
Jun 5, 2017 - 11:48am By GUNSweek
Terror strikes again spreading death and destruction in the European Country that has long established itself as a champion of gun control. Because...
Olympic Arms K23B Stubby: an obscure object of desire
Jun 4, 2017 - 12:35pm By Pierangelo Tendas
Now out of production, and exported in very limited quantities outside of the United States in the past years, the Olympic Arms K23B "Stubby" is one...
Radar 1957 5115-2801, a very tactical shoulder bag
In the Radar 1957 holsters catalog we have found the model 5115-2801 shoulder bag – a tactical bag conceived for everyday or professional uses, and...
The EU gun ban has been officially published
May 25, 2017 - 9:30am By Pierangelo Tendas
With the final text of the revised EU firearms directive published on the Official Journal of the European Union, the fight goes on at a national...
Colt announces the new Cobra double-action revolver
May 9, 2017 - 11:50am By GUNSweek
First showcased at the 2017 SHOT Show in Las Vegas, the new Colt Cobra double-action compact revolver is finally available for commercial sales

redpajama_set_name: RedPajamaCommonCrawl


text:
Updated: Fayette man reportedly kills nephew at family junkyard
Crime, Fayette County, News, Top Stories
Graves Used Cars & Parts on Graves Road in northern Fayette County remained closed Tuesday after a fatal family dispute took place there Saturday evening. (Staff photo by Danny Harrison)
Updated 2016-02-23 at 2:59 p.m.
An apparent family dispute in northern Fayette County turned deadly Saturday evening, with the Fayette County Sheriff's Office reporting that Michael Lamar Graves, 68, shot and killed his nephew Jason Brett Graves, 42, at a junkyard that has been in the family for decades.
Both men are Fayette County residents, and both were associated with with Graves Used Cars & Parts, a junkyard located on Graves Road. It was at that business before 6:30 p.m. Saturday that the conflict and shooting reportedly took place.
As of Tuesday afternoon, charges had not been filed in the case.
"It's a complicated case involving two armed family members," said Fayette County Sheriff Barry Babb. "We are investigating to determine if [Michael Graves] acted in self defense."
Babb did not identify the sort of weapon Brett Graves was allegedly carrying.
A source close to the deceased says Brett Graves was not armed with a gun or a knife.
Babb said District Attorney Scott Ballard and his investigators are involved helping to determine if charges will be filed in the case.
Brett Graves was a member of the Fayette County High School Class of 1993. Larry Graves, who is a co-owner of the junkyard, was the auto mechanics teacher at Fayette County High School for many years and is now the proprietor of Old Courthouse Tavern in Fayetteville. Michael Graves, who goes by "Mickey", operates the junkyard of which he is also co-owner, and he is Larry Graves' brother.
It was Michael Graves who reportedly called 911 after the shooting incident.
About Danny Harrison
Danny Harrison, a 1992 Fayette High School graduate, began his journalism career with Fayette County News in 1995. After taking several leaves of absence to pursue journalism and Christian ministry opportunities, including a few out of state and overseas, he returned full-time to Fayette County News in August 2014. Harrison earned a bachelor's degree in pastoral ministry in 2009 while serving as a missionary journalist in England and Western Europe.
January auto accident leads to fatality charges
Tyrone entering auto suspect arrested in Moreland
Gas station robbers on the loose


Narrowly survived tigers have left Christchurch, New Zealand, for Bangladesh on Saturday morning.
'The Bangladesh players have boarded the flight from Christchurch. I am also in the same aircraft. They look in good spirits,' according to the tweet of Mohammad Isam, ESPNCricinfo correspondent.
The third and final Test between Bangladesh and New Zealand in Christchurch was cancelled after gunman stormed into two Christchurch mosques, killing at least 49 people.
Bangladesh cricket team narrowly escaped the attack as gunman attacked Al Noor Mosque where players were going to offer their jumma prayers.
'We were very close, we could see the mosque. We were maximum 50 yards away... had we reached even three or four minutes earlier, we probably would have been inside the mosque. This could then have been a massive incident,' manager Khaled Mashud told reporters in Christchurch.
The team and is expected to reach Dhaka at 10:40pm (Bangladesh time), informed Mashud.
New Zealand Cricket said they had chosen to cancel the third Test, which was scheduled to start at Hagley Oval from today, after discussions with their Bangladeshi counterparts.
BCB president Nazmul Hasan said they had asked the players to return home at the earlier possible time.
'This is basically simple. With the current condition in New Zealand, there is no way to conduct the match. There was a discussion between two cricket boards and we cancelled or called off the match,' he added.
This was first time Bangladesh had to abandon a tour without completing the fixtures, though there are several other instances from the other teams of doing the same.
Pakistan still hosts nearly all of its international matches in the United Arab Emirates due to ongoing security concerns.


text:
Volleyball teams hope masks, modifications, will green-light season
GMR rowers excel at national championships
Two head coaches hired at South Kent
NMHS grad Olson looks forward to June MLB draft
Coronavirus pauses Roxbury Olympic hopeful's training
Icehawks partner with South Kent
Three wrestlers win state titles for New Milford
Canterbury girls' varsity soccer takes home Class C Title
UConn's Nahom advances to NCAA Championship
Daniels places 6th at State Open
Murray looks to rejuvenate New Milford
Sep. 4, 2020 Updated: Sep. 5, 2020 4:52 p.m.
The Connecticut high school girls volleyball preseason has resembled a game of musical chairs, with many stops and starts.
While the CIAC's announcement Friday that the sport could continue moving forward, that beat goes on without a clear answer.
In August, the state's Department of Health gave its approval for many fall sports to move forward but excluded indoor volleyball and football. The National Federation of High School Sports (NFHS) designates football as "high risk" and volleyball as "moderate risk." Volleyball includes an asterisk, which designates a sport that "could potentially be considered 'lower risk' with appropriate cleaning of equipment and use of masks by participants."
Coaches said they are making efforts to adapt, including having players wear masks during competition, and conducting some parts of practices outdoors, as well as making suggestions including placing a clear vinyl cover over nets to reduce the spread of respiratory droplets which could carry the COVID virus, and even modifying the structure of matches.
"My girls are happy-spirited, they're believing that there might be a season, and so they're buying in," said Brien McMahon coach Peter Georgiou, who is on the CIAC's volleyball committee. "They're wearing masks and doing all the right things, which I'm grateful for. I'm in touch with other coaches and kids who I've coached at other schools and they're all positive, thinking if we do everything right and we do what we're asked, we'll have a season."
Georgiou also said club programs have been running since mid-June and the metrics were good even with players not wearing masks.
"We're just hopeful that the DPH will look at some of the suggestions and some of the metrics we've gotten from clubs, and at least let us have the opportunity to play," Georgiou said.
The Stamford girls volleyball team practices outdoors on the school's varsity softball field during the first week of conditioning and practices for 2020. Three nets were set up on the field and keeping with COVID protocols, players were grouped in small cohorts of fewer than 10, and maintained social distancing with six feet between players.
Dave Stewart / Hearst Connecticut MediaShow MoreShow Less
In its announcement Friday, the CIAC canceled the 11-on-11 football season but allowed volleyball to continue moving forward, saying it believes that by having players wear masks, the season could take place in gyms.
"The CIAC has aligned volleyball with DPH's previous support of full team practice and game schedules for soccer, field hockey, cross country and swimming," the statement reads, adding that "The CIAC believes that wearing masks while playing volleyball mitigates DPH's concern of indoor moderate risk sports and aligns with NFHS guidance."
The statement also pointed to Connecticut Department of Education guidance which "identifies the use of a gym in consideration for general music, choral and instrumental instruction" with risk being mitigated by masks. The CIAC said it believes the DPH's concerns around the spreading of respiratory droplets via forceful communication in volleyball would apply to singing as well, and the use of masks would allay those concerns.
"I was definitely expecting that to happen (with masks) and I told my kids about a week and a half ago, when we readjusted the cohorts (from 15 to 10), to start doing all their conditioning in masks, just to get used to wearing them," Cheshire coach Sue Bavone said. "My only concern with masks is that we have some long, intense rallies, so I'm hoping the referees will be lenient or that we'll have a few built-in breaks.
"Maybe after a really long point, they'll allow the kids to take a break, separate and have a mask break."
While the CIAC's latest statement points forward to the start of full team practices Sept. 21, as well as the start of matches Oct. 1, it is not the definitive answer some coaches would have liked.
"I think we need an answer from the Department of Health if we can play with masks indoors," Stamford coach Mike Smeriglio said. "I don't think we've gotten that answer yet and that's the key point. If they say yes, we're on; if they say no, we're off. I don't know why it's taking months."
Practicing and playing outdoors has been a struggle for schools, with many quickly shifting to a hybrid model: conditioning outside and running drills inside.
Stamford has been totally outdoors this preseason, with nets set up on the school's varsity softball field, and Smeriglio said he's tried to keep the mood light with different kinds of music piped onto the field. Thursday was Beach Boys Day and Friday was Beatles Day.
The coach said the idea is to do everything possible to give the players a chance to compete.
"It's not my job to make the final decision, but it is my job to give the girls a voice," Smeriglio said. "We should do everything we can to see if we can play. Because in the end, I have to look them in the face and say 'I did everything I could for you.'"
Cheshire has also been outside and will return to the gym before the move to full team practices on Sept. 21. Bavone said the kids have been running conditioning workouts and the coaches recently gave them some ball-control and passing drills to work on.
One of the chief concerns about playing outside is equipment.
"We don't have the proper equipment for kids to be outside," Norwalk Athletic Director Doug Marchetti said. "If you were to tell me to roll out physical education game standards for a varsity volleyball program, the net is going to potentially sag, and who knows what quality of the standards they're going to use? It makes it very difficult for a volleyball coach to put together a roster playing on substandard equipment on potentially a substandard surface.
'I could not have asked for a better partner': New Milford police say good-bye to retiring K-9
Dear Abby: Mom makes case for including longtime girlfriend in family
Police: Disturbance leads to slashed tire, arrest in Waterbury
Bridget Fonda and Danny Elfman's Terrific Time Capsule Awaits a Buyer
Feds seize nearly 300 bricks of cocaine at Florida airport
"When my team was outside, they were on the turf, so we've been working hard to get them inside, simply so we can see the skills on a volleyball court. It's a more realistic assessment," Marchetti said.
"Grass or turf is OK, but the changes to make it work outside and keep it similar to inside would cost way too much money for school districts," Georgiou said. "Every district is struggling because they lost funds with COVID, so to ask for between $5,000-$10,000 to buy equipment for outdoors for one year without guaranteeing it would even happen puts too much stress on the program."
Georgiou pointed out that teams would need new uniforms, as the short-sleeved shirts and spandex shorts players use would be inadequate when outside temperatures drop in October.
Modifications indoors are more realistic, coaches said.
In addition to masks, a clear vinyl cover could be placed over the net, keeping the line of sight for opposing teams open while also stopping the spread of droplets.
Other possibilities include changes to match length and substitution rules and more frequent replacement of balls following rallies.
Bavone said she was surprised when volleyball was grouped in with football as a higher-risk sport.
"All teams in all sports are yelling and screaming at each other," Bavone said. "But I guess we're in such a small area and in the gym, so they were worried about that. Other than the ball, there's nothing we share with the other team. We could go a whole game and never come in contact with anybody on the other team."
For coaches, the important thing is that the effort to adapt has been embraced by players.
"We're five days into tryouts and every day, the kids are finding it easier and easier to adapt to wearing the mask and follow guidelines," Georgiou said. "It's working, and these three weeks that they're having us condition with masks on will get them ready for the season.
"Any coach who cares about their program and their kids just wants the kids to have an experience."
david.stewart@hearstmediact.com; @dstewartsports


text:
Strategies & Market Trends : The Economy Made Me Do It.
From: Smiling Bob 11/1/2009 12:52:41 PM
Laura Rowley Money & Happiness
Laura Rowley, Money & Happiness
The Rage of Anxiety
by Laura Rowley
Email this Page IM this StoryBookmark this StoryAdd to your Del.icio.us accountDigg this StoryPrint this Story
Posted on Thursday, October 29, 2009, 12:00AM
The town of Chatham, New Jersey, a few towns away from where I live, is a bucolic suburb of historic homes and refined new mansions, with a population of 10,000.
The median family income is $132,000. Just 45 minutes from New York City, it's the kind of place where it helps to know somebody if you want to buy a home, because properties often change hands without ever making it to the real estate listings.
On the evening of Oct. 22, Father Edward Hinds, 61, pastor of St. Patrick's Roman Catholic Church in Chatham, was stabbed to death in the rectory. He was found when he failed to show up to celebrate morning Mass at the parish school, which some of our friends' children attend. The level of shock is difficult to express.
The police subsequently arrested Jose Feliciano, 64, the janitor at the church, a 17-year employee whose son graduated from the school and whose daughter is enrolled there. In press reports, both the priest and the janitor have been described as quiet, kind, amiable, caring and hardworking. Both were known to chat with neighbors while walking their dogs.
The previous pastor of St. Patrick's, Monsignor Ronald Amandolare, said he never saw Feliciano angry or violent. "He was loved by the kids, loved by the parents," Amandolare told the Star-Ledger of Newark. "He was a great, hard worker and very kind. You could call him in the morning, noon and night if anything broke … . You say, 'Jose, can you help me?' 'Sure, I'll be right over.'"
An attorney for the Archdiocese of Paterson told reporters that Hinds intended to lay off Feliciano because of financial problems at the parish. Feliciano had reportedly been beset with money and health issues -- "in and out of the hospital," by one account. The janitor had worked a second job in an electronics store, and lost that position earlier this year.
In 2004, the Felicianos moved from an apartment adjacent to the church to a home they purchased for $145,000 in a working-class city in Pennsylvania, 45 miles away. A neighbor said both Jose Feliciano and his wife, who also worked two jobs, typically left for work at 5:30 a.m. and returned home at 7:30 or 8:30 in the evening.
Obviously there is no excuse for the brutal and horrific attack on Rev. Hines. But I can't help thinking that both the victim and the alleged killer are casualties of a treacherous economy, which continues to batter the ordinary American while the experts proclaim recovery is upon us.
A recent study by researchers in California and London found the stress of recessions, particularly of unemployment, markedly increases rates of death from intentional violence. Looking at joblessness in the European Union between 1970 and 2007, researchers found each percent increase in unemployment raised homicide and suicide rates by 0.8 percent, respectively. An increase of 3 percent in unemployment, for example, is associated with a 4.5 percent increase in suicides, said the study, published in the journal Lancet in July.
"Suicides are just the tip of the iceberg," said lead author David Stuckler, Ph.D., of the University of Oxford and London School of Hygiene and Tropical Medicine, in a statement. "Rising suicide rates are a sign of many failed suicide attempts and high levels of mental distress among workers and families."
The murder in Chatham makes me think about the millions of Americans who live in a state of perpetual anxiety, an illness or a layoff away from disaster. U.S. personal bankruptcy filings topped 1 million in the first nine months of this year, up 35 percent from the year-ago period, according to the American Bankruptcy Institute. It's the highest nine-month figure since 2005, when consumers rushed to file for bankruptcy before stricter laws went into effect. The figures also saw a growth in middle-class filers -- those with associate and bachelor's degrees, and earnings of $40,000 or more a year.
Meanwhile, foreclosure-related filings are on pace to hit about 3.5 million this year, up from 2.3 million last year, according to a report this month by RealtyTrac. New defaults are surpassing the number of people helped by the federal mortgage relief program, which earlier this month reported that 500,000 homeowners had received assistance.
In addition, Moody's says that 2010 loan charge-offs by banks, on an annualized rate, are exceeding the levels of the Great Depression, and will increase in the coming year. In a related twist, analysts described why household balance sheets may recover faster than predicted: People are defaulting on their debts like crazy.
That means, in official economic terms, those obligations don't actually count as "debts" anymore. Apparently this is upbeat news for the larger economy -- a shiny veneer on a national edifice of crushed aspirations and heartache.
Heartache that now includes the tragic story of the priest and the janitor in Chatham.
(For an update on this story, see my blog.)
Report TOU Violation The Economy Made Me Do It. Message Board - Msg: 26063304Share This Post


text:
Vibrometers
Hand-Held Sound Level Meter supports product noise evaluation.
Larson Davis, Inc., A PCB Group Co. May 02, 2013
SoundExpert™ LxT Sound Level Meter is rugged device that measures noise for pass/fail assessments and gathers data for up to 2 wk using battery power. Graphic display and firmware are included, while in kit form, product also includes protective case, D-cell battery pack, microphone protection shroud, and cable options from 6–200 ft. Free field or random incidence microphones are also available. Product suits construction, mining, wind farm, and public venue applications.
New Sound Level Meter from Larson Davis
SoundExpert™ LxT for General Product Evaluation and Noise Monitoring Applications
Farmington Hills, MI – Larson Davis - a division of PCB Piezotronics, Inc., announces their new SoundExpert™ LxT Sound Level Meter, a full-featured meter designed for general product evaluation and noise monitoring applications. This rugged, hand-held meter comes equipped with a graphic display and a fixed set of firmware options and is backed by a 2-year factory warranty, 24-hour application support, and an accredited factory service/calibration. The SoundExpert LxT can also be purchased as a kit that includes a small protective case, a D-cell battery pack, a microphone protection shroud, and a 10 ft. cable. This kit makes noise monitoring easy and convenient to transport, deploy, and utilize.
The SoundExpert LxT was specifically designed to provide a simple, easy-to-use meter to provide professional measurements to support product engineering or basic noise monitoring applications.
For product noise evaluation, the SoundExpert LxT provides a necessary tool for noise and vibrations labs with the functions, metrics, and accessories needed to help develop quieter products. This instrument is well suited for acoustic development in the automotive, motorcycle, appliance, turbine, and speaker industries. This meter is also the perfect tool to use for production line acoustic testing to qualify and inspect a wide range of products and sub-assemblies. The SoundExpert LxT meter provides an affordable method to measure noise for pass/fail assessments and for archiving future traceability. Available with free field or random incidence microphones and with a detachable preamplifier and microphone and comes with extension cable options from 6 to 200 feet, this device makes noise measurement and recording simple and portable.
The SoundExpert LxT Noise Monitoring kit was designed as a lightweight, affordable system that is easily transported and quickly deployed. It will gather data for up to two weeks using battery power and can then be retrieved for data download and report generation. This system provides an effective solution for the monitoring of construction sites, mining operations, wind farms, public venues, and more.
Ken Cox at 888-258-3222or via email at kcox@pcb.com
About Larson Davis
Larson Davis offers a full line of Noise and Vibration measurement instrumentation; including Type 1 sound level meters, personal noise dosimeters, octave band, audiometric calibration systems, microphones and preamplifiers, hearing conservation software, and Human Vibration Exposure Monitors. Products are used for measurement of building acoustics, community & environmental noise monitoring, as well as supporting various automotive, aerospace and industrial applications. As a division of PCB Piezotronics, Inc., Larson Davis guarantees Total Customer Satisfaction through our outstanding limited warranty; no charge, 24-hour toll-free technical support; global distribution; and worldwide customer service. For more information, please visit www.LarsonDavis.com.
PCBPiezotronics Acoustics
For over 30 years PCB has provided precision microphones and accessories for use in a wide range of acoustic test and measurement applications. Leveraging state-of-the-art equipment and facilities, a dedicated team of Acoustic, Mechanical, Electrical Engineers and PhDs have built an extensive portfolio of products including modern prepolarized and traditional externally polarized condenser, array, probe, low-profile surface, and special purpose microphones. PCB's Acoustic Team participates in both the Acoustical Society of America (ASA) and IEC Standards Board and is a Vendor Liaison to Penn State's Center for Acoustics and Vibration. PCB is accredited by the American Association for Laboratory Accreditation (A2LA) and a signatory to the International Laboratory Accreditation Cooperation (ILAC) Mutual Recognition Arrangement (MRA).
PCB and ICP are registered trademarks of PCB Group, Inc.
3425 Walden Ave
Depew, NY 14043
Felicia Anderson
Larson Davis - Marketing
media@pcb.com
Card-Type Vibration Meter performs analyses using PDAs.


text:
fitbit charge 2 charger
the best essential oil company in australia
Category Vandenburg72770
Archive by category "Vandenburg72770"
Vandenburg72770
What is a bilateral contract in legal terms
Of legal capacity, meaning both parties are free from mental illness or addiction and; Lawful terms. Let's focus on the unilateral contract for the moment. A unilateral A bilateral contract refers to contracts that require agreement and performance from both parties to the contract. Most contracts are bilateral, in the sense that one Definition of BILATERAL CONTRACT: A term, used originally in the civil law, but now generally adopted, denoting a contract in which both the contracting parties
Bilateral Contract. An agreement formed by an exchange of a promise in which the promise of one party is consideration supporting the promise of the other party. A bilateral contract is distinguishable from a unilateral contract, a promise made by one party in exchange for the performance of some act by the other party. Bilateral Contract. An agreement formed by an exchange of a promise in which the promise of one party is consideration supporting the promise of the other party. A bilateral contract is distinguishable from a unilateral contract, a promise made by one party in exchange for the performance of some act by the other party. While bilateral contracts are the most commonly used in the United States, unilateral contracts are found in certain cases which involve one party making a promise to another party, or to the public in general, to do or provide something. Definition from Nolo's Plain-English Law Dictionary. A contract in which both parties exchange promises to perform. Definition provided by Nolo's Plain-English Law Dictionary.
11 Oct 2007 In a bilateral contract, should a breaching party be allowed to force the University of Minnesota - Law School; University of Bologna
Contract law offer and acceptance. Also it is important to know the difference between bilateral and unilateral contracts. The case of Carlill v Carbolic Smoke text writers.5 A definition of a contract in terms of an agree- ment is inaccurate promises given for promises-that is, bilateral agreements. Hence, to meet the 27 Aug 2019 The offeror is obligated by law to carry out the final action that was mentioned in the These are the terms of the unilateral contract. In the case of an express term, the fact that the contract labels it a condition or a economic duress - Historically within contract law, a claim that a contract was unilateral contract - A contract in which one party (the promisor) undertakes to Sometimes it isn't clear what the contract means, and a court has to figure that out . These problems are taken up Figure 8.2 Bilateral and Unilateral Contracts
Of legal capacity, meaning both parties are free from mental illness or addiction and; Lawful terms. Let's focus on the unilateral contract for the moment. A unilateral
20 Feb 2019 Learn about the nature of bilateral contracts and how they can assist to Create Legal Relations – Intention for contract to be legally binding analysis is a traditional approach in contract law. The offer and acceptance formula, developed An offer can only be the basis of a binding contract if it contains the key terms of the contract. A unilateral contract can be contrasted with a bilateral contract, where there is an exchange of promises between two parties. South African contract law is 'essentially a modernised version of the Roman- Dutch law of contract', which is itself rooted in canon and Roman laws. In the broadest definition, a contract is an agreement two or more parties If bilateral, it is usually synallagmatic (or reciprocal), meaning that one party's performance is
accepted an offer and created a contract, a court will look for evidence of three To accept an offer for a bilateral contract, the offeree must make the promise
Bilateral Contracts A bilateral contract is a legally binding contract formed by the exchange of mutual promises. An offer in the form of a promise is accepted by a counter-promise. In contrast to unilateral contracts where only one party needs to fulfil their promise, bilateral contracts ensure that both parties do so. What is a bilateral contract? When most people think of contracts, bilateral agreements come to mind. In its most basic form, a bilateral contract is an agreement between at least two people or groups. Most business and personal contracts fall into this category. Examples of bilateral contracts are present in everyday life. Contracts can be unilateral or bilateral. In a unilateral contract, only the offeror has an obligation. In a bilateral contract, both parties agree to an obligation. Typically, bilateral contracts involve equal obligation from the offeror and the offeree. Every sale is a bilateral contract. The business agrees to provide a service or item to a customer in exchange for an agreed-upon price. The buyer agrees to pay the amount in exchange for the good or service. Every sale is a textbook example of a bilateral contract with a mutual exchange of promises. However, each bilateral contract is different.
Both unilateral and bilateral contracts are enforceable in court. For example, a unilateral contract is enforceable when someone chooses to begin fulfilling the act
Enforcing a Contract in Court. Whether a contract is bilateral or unilateral in nature, the same criteria are bilateral contract. Primary tabs. Definition from Nolo's Plain-English Law Dictionary. A contract in which both parties exchange promises to perform. Compare: Of legal capacity, meaning both parties are free from mental illness or addiction and; Lawful terms. Let's focus on the unilateral contract for the moment. A unilateral A bilateral contract refers to contracts that require agreement and performance from both parties to the contract. Most contracts are bilateral, in the sense that one Definition of BILATERAL CONTRACT: A term, used originally in the civil law, but now generally adopted, denoting a contract in which both the contracting parties
text writers.5 A definition of a contract in terms of an agree- ment is inaccurate promises given for promises-that is, bilateral agreements. Hence, to meet the 27 Aug 2019 The offeror is obligated by law to carry out the final action that was mentioned in the These are the terms of the unilateral contract. In the case of an express term, the fact that the contract labels it a condition or a economic duress - Historically within contract law, a claim that a contract was unilateral contract - A contract in which one party (the promisor) undertakes to Sometimes it isn't clear what the contract means, and a court has to figure that out . These problems are taken up Figure 8.2 Bilateral and Unilateral Contracts objective; in other words, no contract can violate any law. Canadian Law 40S. R. Schroeder. 4 A unilateral mistake is when one party to the contract made a Thus a party can hardly accept an offer of which he / she did not know or had forgotten. R v Clarke - rewards. (1927) 40 CLR 227 Australian High Court. A reward
coinbase trading taxes
labour participation rate singapore
conversion rate history usd to inr
hierarchical organisation chart powerpoint
annual rate of population change formula
organization chart matrix management
different types of trading in stock market in india
Pay online paypal pick up store
Cap rate and discount rate relationship
Indian rupee to us dollar conversion rate today
Dollar to rand live bloomberg
1 year bonds best
Bitcoin charts today
How are unemployment benefits calculated maryland
What is the standard mileage rate for 2020
Best app for tracking my stocks
Barrick gold stock
Canadian online brokerage accounts
Gamestop trade value ps4 pro
Form 990 ez online
What does high volume in stocks mean
Nd spot oil price
Zero coupon interest rate curve
Precio del dolar en tiempo real peru sunat
Flash trade reviews
Canada file income tax online free
Costo petrolio venezuela


trying to dictate how liberal we can be in our literals.
if we want freedom for artists to express.
a cultural dialogue that would otherwise be suppressed.
for those with an open mind to visit.
what the state has instructed them to regurgitate.
to come crawling from their rock.
the biography of an artist responding to their geography.
but an artist will always work unlicensed.


Google Search Bot v4.1 Rank your site to first page of Google fully automatic. Best SEO software.
This is a Collection of Best AddMeFast Automated Bots available on the Planet. This Collection contains all the Latest AddMeFast Bots for Generating Unlimited Points/Clicker/Exchange on AddMeFast.com Just got through the Collection and choose the Bot which is Cheap and Best for you. Order your Brand New AddMeFast Bots Now and start Generating Unlimited Points/Clicks/Exchanges in your Account. You can use these Points to Promote your Website and Increase Social Signals of your Website as well as Generate Unlimited Traffic to your Website. You can also sell your Points to Others and Earn lot of Money ! So, What are you waiting for ? Start your own AddMeFast Business Now !
Please go through this Collection, It contains the top rated YouTube SEO services from top sellers and choose one of them, hire the freelancer and they will definitely boost the SEO ranking of your YouTube Channel.


Note: Order Malibu High School merchandise in Bulk!
Malibu HS Coaches, Teams and Administrators can place group orders and receive bulk discounts! Get bulk quotes for Malibu High merchandise when customizing your order.


Michael Slevnik is a Certified Illinois Concealed Carry Instructor, NRA Certified Pistol Instructor, NRA Certified Rifle Instructor, NRA Certified Shotgun Instructor, NRA Personal Protection Inside the Home Instructor, NRA Personal Protection Outside the Home Instructor, Chief Range Safety Officer, Range Safety Officer, Home Firearm Safety Instructor, Defensive Pistol Instructor and a Utah Concealed Carry Instructor. Michael is a member of ILEETA (International Law Enforcement Educators and Trainers Association). Michael has been a Private Detective for the past 25 years.
Michael is a member of the National Rifle Association Illinois State Rifle Association,ILEETA and Guns Saves Lives.


Welcome to UkrainArt.com.ua - an online store featuring unique works by Ukrainian artists, designers and crafters.
We are based in Ukraine, have an office in the US, accept PayPal and ship internationally.
Smaller items purchased on our site are shipped via registered air mail (delivery time is about two weeks); larger items, such as paintings, we ship via Meest, an established Ukraine-based international carrier with branches throughout Europe and North America (delivery time is about two-three weeks). On request, we can also ship via Federal Express. Shipping rates as set by Federal Express will apply, as will a small handling fee.
Іf you live outside of Ukraine but would like to acquire an item from our site for someone living in Ukraine (for instance, for a birthday, a holiday, an anniversary or for no particular reason at all), we'd be happy to assist you with that. If you speak/understand Ukrainian, you can place such an order on the Ukrainian version on our site. To do so, simply follow the instructions written in blue that you will see during the check-out process. If you don't speak/understand Ukrainian, simply send us the code of the item you're interested in through our "Contact" page and we will work with you from there. You may render payment for such orders via PayPal.
All European countries, except Belarus and Russia; North and South America, Australia and New Zealand.


Black Cobra Women's Rhinestone Shirt. High quality black fitted woman's t-shirt with Genuine Swarovski Rhinestone Crystals - Made in Austria since 1895, Swarovski crystals shine like diamonds and are the best rhinestones money can buy. The shirt is fitted. Adult Small only.


With its own swimming-pool, this is a sunny, contemporary 1-bedroom villa on two floors with views towards the Greek mainland and the small islands of Skorpios and Meganissi. Peaceful and stocked with modern conveniences, the villa is ideal for couples seeking comfortable relaxation.
The villa shares a drive-way with Villa Ambelina (approx.70 metres away) on a quiet but steep lane that leads to the mountains. It is close to the small village of Periyali and its pebble beach and minimarket, and a 5 minute drive from Nidri and 25 minutes from Lefkas Town.
Ground floor: one open-plan room consisting of a compact fully-fitted kitchen, lounge/diner; cloakroom.
Sea-facing terrace and pool terrace with swim-up bar.
Spiral stairs lead to a double bedroom (4-poster bed) with en suite bathroom (shower). Sea-facing balcony.


text:
    // Class under test
#import "XBAMP.h"
#import "GCDAsyncSocket.h"

#import <GHUnitIOS/GHUnit.h>

#define HC_SHORTHAND
#import <OCHamcrestIOS/OCHamcrestIOS.h>

#define MOCKITO_SHORTHAND
#import <OCMockitoIOS/OCMockitoIOS.h>

@interface XBAMP (Test)

- (GCDAsyncSocket *)socket;
- (NSData *)dataToCallCommand:(XBAMPCommand *)command withParameters:(NSDictionary *)parameters askTag:(NSUInteger)askTag;
- (NSData *)dataForResponse:(NSDictionary *)response toCommand:(XBAMPCommand *)command answerTag:(NSUInteger)answerTag;
- (NSData *)dataForError:(XBAMPError *)ampError withTag:(NSUInteger)tag;

@end

@interface XBAMPTests : GHAsyncTestCase
@end

@implementation XBAMPTests
{
    XBAMP *amp;
    GCDAsyncSocket *mockSocket;
}

- (void)setUp
{
    [super setUp];
    mockSocket = mock([GCDAsyncSocket class]);
    amp = [[XBAMP alloc] initWithSocket:mockSocket];
}

- (void)testConnect
{
    [given([mockSocket isConnected]) willReturnBool:YES];

    GHAssertTrue([amp isConnected], nil);
}

- (void)testDisconnect
{
    [given([mockSocket isConnected]) willReturnBool:NO];

    [amp closeConnection];

    GHAssertFalse([amp isConnected], nil);
}

- (void)testDataToCallCommand
{
    XBAMPError *ampError = [[XBAMPError alloc] initWithCode:0xff codeString:@"ZERO_DIVISION" description:@"Zero float division"];
    XBAMPCommand *command = [[XBAMPCommand alloc] initWithName:@"someCommand" parameterTypes:@{@"intParam": [[XBAMPInteger alloc] init], @"stringParam": [[XBAMPString alloc] init]} responseTypes:@{@"arrayResult": [[XBAMPArray alloc] init]} errors:@[ampError]];
    NSData *data = [amp dataToCallCommand:command withParameters:@{@"intParam": @26, @"stringParam": @"xissburg"} askTag:23];

    ushort length = 0;
    NSUInteger i = 0;

    [data getBytes:&length length:sizeof(ushort)];
    length = ntohs(length);
    GHAssertEquals(length, (ushort)4, nil);

    i += sizeof(ushort);
    NSData *subdata = [data subdataWithRange:NSMakeRange(i, length)];
    GHAssertEqualStrings(@"_ask", [[NSString alloc] initWithData:subdata encoding:NSUTF8StringEncoding], nil);

    i += length;
    [data getBytes:&length range:NSMakeRange(i, sizeof(ushort))];
    length = ntohs(length);
    GHAssertEquals(length, (ushort)2, nil);

    i += sizeof(ushort);
    subdata = [data subdataWithRange:NSMakeRange(i, length)];
    GHAssertEqualStrings(@"23", [[NSString alloc] initWithData:subdata encoding:NSUTF8StringEncoding], nil);

    i += length;
    [data getBytes:&length range:NSMakeRange(i, sizeof(ushort))];
    length = ntohs(length);
    GHAssertEquals(length, (ushort)8, nil);

    i += sizeof(ushort);
    subdata = [data subdataWithRange:NSMakeRange(i, length)];
    GHAssertEqualStrings(@"_command", [[NSString alloc] initWithData:subdata encoding:NSUTF8StringEncoding], nil);

    i += length;
    [data getBytes:&length range:NSMakeRange(i, sizeof(ushort))];
    length = ntohs(length);
    GHAssertEquals(length, (ushort)11, nil);

    i += sizeof(ushort);
    subdata = [data subdataWithRange:NSMakeRange(i, length)];
    GHAssertEqualStrings(@"someCommand", [[NSString alloc] initWithData:subdata encoding:NSUTF8StringEncoding], nil);

    i += length;
    [data getBytes:&length range:NSMakeRange(i, sizeof(ushort))];
    length = ntohs(length);
    GHAssertEquals(length, (ushort)11, nil);

    i += sizeof(ushort);
    subdata = [data subdataWithRange:NSMakeRange(i, length)];
    GHAssertEqualStrings(@"stringParam", [[NSString alloc] initWithData:subdata encoding:NSUTF8StringEncoding], nil);

    i += length;
    [data getBytes:&length range:NSMakeRange(i, sizeof(ushort))];
    length = ntohs(length);
    GHAssertEquals(length, (ushort)8, nil);

    i += sizeof(ushort);
    subdata = [data subdataWithRange:NSMakeRange(i, length)];
    GHAssertEqualStrings(@"xissburg", [[NSString alloc] initWithData:subdata encoding:NSUTF8StringEncoding], nil);

    i += length;
    [data getBytes:&length range:NSMakeRange(i, sizeof(ushort))];
    length = ntohs(length);
    GHAssertEquals(length, (ushort)8, nil);

    i += sizeof(ushort);
    subdata = [data subdataWithRange:NSMakeRange(i, length)];
    GHAssertEqualStrings(@"intParam", [[NSString alloc] initWithData:subdata encoding:NSUTF8StringEncoding], nil);

    i += length;
    [data getBytes:&length range:NSMakeRange(i, sizeof(ushort))];
    length = ntohs(length);
    GHAssertEquals(length, (ushort)2, nil);

    i += sizeof(ushort);
    subdata = [data subdataWithRange:NSMakeRange(i, length)];
    GHAssertEqualStrings(@"26", [[NSString alloc] initWithData:subdata encoding:NSUTF8StringEncoding], nil);

    i += length;
    [data getBytes:&length range:NSMakeRange(i, sizeof(ushort))];
    length = ntohs(length);
    GHAssertEquals(length, (ushort)0, nil);

    i += sizeof(ushort);
    GHAssertEquals(i, data.length, nil);
}

- (void)testCallCommand
{
    [self prepare];

    XBAMPError *ampError = [[XBAMPError alloc] initWithCode:0xff codeString:@"ZERO_DIVISION" description:@"Zero float division"];
    XBAMPCommand *command = [[XBAMPCommand alloc] initWithName:@"someCommand" parameterTypes:@{@"intParam": [[XBAMPInteger alloc] init], @"stringParam": [[XBAMPString alloc] init]} responseTypes:@{@"arrayResult": [[XBAMPArray alloc] initWithElementType:[[XBAMPString alloc] init]]} errors:@[ampError]];
    NSArray *responseArray = @[@"xiss", @"burg"];

    [amp callCommand:command withParameters:@{@"intParam": @1, @"stringParam": @"xissburg"} success:^(NSDictionary *response) {
        GHAssertEqualObjects(response[@"arrayResult"], responseArray, nil);
        [self notify:kGHUnitWaitStatusSuccess forSelector:@selector(testCallCommand)];
    } failure:nil];

    // manually provide the answer data to force it to process each chunk of bytes
    NSData *data = [amp dataForResponse:@{@"arrayResult": responseArray} toCommand:command answerTag:0];

    int i = 0; // _answer
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 7)] withTag:4];

    i += 7; // 0
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 1)] withTag:5];

    i += 1; // arrayResult
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 11)] withTag:4];

    i += 11; // the array itself
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 12)] withTag:5];

    i += 12; // zero, EOF, should invoke the callCommand's success block above with the proper response
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    [self waitForStatus:kGHUnitWaitStatusSuccess timeout:10];
}

- (void)testHandleCommand
{
    [self prepare];

    XBAMPFloat *ampFloat = [[XBAMPFloat alloc] init];
    XBAMPError *ampError = [[XBAMPError alloc] initWithCode:0xff codeString:@"INVALID_PARAMETERS" description:@"Invalid parameters. Expected x1, y1, z1, x2, y2, z2, all of type float."];

    XBAMPCommand *command = [[XBAMPCommand alloc] initWithName:@"cross" parameterTypes:@{@"x1": ampFloat, @"y1": ampFloat, @"z1": ampFloat, @"x2": ampFloat, @"y2": ampFloat, @"z2": ampFloat} responseTypes:@{@"x": ampFloat, @"y": ampFloat, @"z": ampFloat} errors:@[ampError]];

    [amp handleCommand:command withBlock:^NSDictionary *(NSDictionary *parameters, NSString *socketId, XBAMPError **ampError) {
        float x1 = [parameters[@"x1"] floatValue];
        float y1 = [parameters[@"y1"] floatValue];
        float z1 = [parameters[@"z1"] floatValue];
        float x2 = [parameters[@"x2"] floatValue];
        float y2 = [parameters[@"y2"] floatValue];
        float z2 = [parameters[@"z2"] floatValue];
        float x = y1*z2 - z1*y2;
        float y = z1*x2 - x1*z2;
        float z = x1*y2 - y1*x2;

        GHAssertEqualsWithAccuracy(x, 0.f, 0.0001f, nil);
        GHAssertEqualsWithAccuracy(y, 0.f, 0.0001f, nil);
        GHAssertEqualsWithAccuracy(z, 1.f, 0.0001f, nil);
        [self notify:kGHUnitWaitStatusSuccess forSelector:@selector(testHandleCommand)];

        return @{@"x": @(x), @"y": @(y), @"z": @(z)};
    }];

    NSData *data = [amp dataToCallCommand:command withParameters:@{@"x1": @1, @"y1": @0, @"z1": @0, @"x2": @0, @"y2": @1, @"z2": @0} askTag:1];

    int i = 0; // _ask
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 4)] withTag:4];

    i += 4; // 1
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 1)] withTag:5];

    i += 1; // _command
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 8)] withTag:4];

    i += 8; // cross
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 5)] withTag:5];

    i += 5; // x1
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:4];

    i += 2; // 1
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 1)] withTag:5];

    i += 1; // y1
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:4];

    i += 2; // 0
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 1)] withTag:5];

    i += 1; // z1
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:4];

    i += 2; // 0
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 1)] withTag:5];

    i += 1; // x2
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:4];

    i += 2; // 0
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 1)] withTag:5];

    i += 1; // y2
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:4];

    i += 2; // 1
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 1)] withTag:5];

    i += 1; // z2
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:4];

    i += 2; // 0
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 1)] withTag:5];

    i += 1; // zero, EOF, should invoke the handler
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    [self waitForStatus:kGHUnitWaitStatusSuccess timeout:10];
}

- (void)testHandleCommandWithSelector
{
    [self prepare];

    XBAMPFloat *ampFloat = [[XBAMPFloat alloc] init];

    XBAMPCommand *command = [[XBAMPCommand alloc] initWithName:@"sub" parameterTypes:@{@"a": ampFloat, @"b": ampFloat} responseTypes:@{@"x": ampFloat} errors:nil];

    [amp handleCommand:command withTarget:self selector:@selector(subtractWithParameters:error:)];

    NSData *data = [amp dataToCallCommand:command withParameters:@{@"a": @3, @"b": @4} askTag:1];

    int i = 0; // _ask
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 4)] withTag:4];

    i += 4; // 1
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 1)] withTag:5];

    i += 1; // _command
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 8)] withTag:4];

    i += 8; // add
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 3)] withTag:5];

    i += 3; // a
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 1)] withTag:4];

    i += 1; // 3
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 1)] withTag:5];

    i += 1; // b
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 1)] withTag:4];

    i += 1; // 4
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 1)] withTag:5];

    i += 1; // zero, EOF, should invoke the handler
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    [self waitForStatus:kGHUnitWaitStatusSuccess timeout:10];
}

- (NSDictionary *)subtractWithParameters:(NSDictionary *)parameters error:(XBAMPError **)error
{
    CGFloat a = [parameters[@"a"] floatValue];
    CGFloat b = [parameters[@"b"] floatValue];
    CGFloat result = a - b;

    GHAssertEqualsWithAccuracy(result, -1.f, 0.0001f, nil);
    [self notify:kGHUnitWaitStatusSuccess forSelector:@selector(testHandleCommandWithSelector)];

    return @{@"x": @(a - b)};
}

- (void)testError
{
    [self prepare];

    XBAMPError *ampError = [[XBAMPError alloc] initWithCode:0xff codeString:@"SOME_ERROR" description:@"Just testing the error mechanism"];
    XBAMPCommand *command = [[XBAMPCommand alloc] initWithName:@"errorCommand" parameterTypes:nil responseTypes:nil errors:@[ampError]];

    [amp callCommand:command withParameters:@{@"intParam": @1, @"stringParam": @"xissburg"} success:nil failure:^(XBAMPError *ampErrorB) {
        GHAssertEquals(ampError.code, ampErrorB.code, nil);
        GHAssertEqualStrings(ampError.codeString, ampErrorB.codeString, nil);
        GHAssertEqualStrings(ampError.errorDescription, ampErrorB.errorDescription, nil);
        [self notify:kGHUnitWaitStatusSuccess forSelector:@selector(testError)];
    }];

    // manually provide the answer data to force it to process each chunk of bytes
    NSData *data = [amp dataForError:ampError withTag:0];

    int i = 0; // _error
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 6)] withTag:4];

    i += 6; // 0
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 1)] withTag:5];

    i += 1; // _error_code
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 11)] withTag:4];

    i += 11; // SOME_ERROR
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 10)] withTag:5];

    i += 10; // _error_description
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 18)] withTag:4];

    i += 18; // Just testing the error mechanism
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:3];

    i += 2;
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 32)] withTag:5];

    i += 32; // zero, EOF, should invoke the callCommand's success block above with the proper response
    [amp socket:amp.socket didReadData:[data subdataWithRange:NSMakeRange(i, 2)] withTag:2];

    [self waitForStatus:kGHUnitWaitStatusSuccess timeout:10];
}

// The python server must be running for this test to pass. Go into the XBAMPObjCTests directory and run twistd -y server.tac
- (void)testPythonServer
{
    [self prepare];

    XBAMPString *ampString = [[XBAMPString alloc] init];
    XBAMPCommand *sendMessageCommand = [[XBAMPCommand alloc] initWithName:@"SendMessage" parameterTypes:@{@"message": ampString} responseTypes:nil errors:nil];
    XBAMP *ampClient = [[XBAMP alloc] init];
    [ampClient handleCommand:sendMessageCommand withBlock:^NSDictionary *(NSDictionary *parameters, NSString *socketId, XBAMPError **ampError) {
        NSLog(@"%@", parameters[@"message"]);
        return nil;
    }];

    [ampClient connectToHost:@"localhost" port:25683 success:^{
        [ampClient callCommand:sendMessageCommand withParameters:@{@"message": @"Hi there!"} success:^(NSDictionary *response) {
            [ampClient closeConnection];
            [self notify:kGHUnitWaitStatusSuccess forSelector:@selector(testPythonServer)];
        } failure:^(XBAMPError *ampError) {
            NSLog(@"%@", ampError);
        }];
    } failure:^(NSError *error) {
        NSLog(@"%@", error);
    }];

    [self waitForStatus:kGHUnitWaitStatusSuccess timeout:10];
}

- (void)testServer
{
    [self prepare];

    XBAMPString *ampString = [[XBAMPString alloc] init];
    NSMutableArray *socketIds = [[NSMutableArray alloc] init];

    XBAMPCommand *sendMessageCommand = [[XBAMPCommand alloc] initWithName:@"sendMessage" parameterTypes:@{@"message": ampString} responseTypes:nil errors:nil];

    // Setup server
    XBAMP *ampServer = [[XBAMP alloc] init];
    __weak XBAMP *weakAmpServer = ampServer;

    [ampServer setDidAcceptNewSocket:^(NSString *socketId) {
        [socketIds addObject:socketId];
        NSString *message = [NSString stringWithFormat:@"<User with id %@ has joined the chat>", socketId];
        for (NSString *sId in socketIds) {
            [weakAmpServer callCommand:sendMessageCommand withParameters:@{@"message": message} socketId:sId success:nil failure:^(XBAMPError *ampError) {
                NSLog(@"%@", ampError);
            }];
        }
    }];

    [ampServer setDidCloseConnection:^(NSString *socketId) {
        [socketIds removeObject:socketId];
        NSString *message = [NSString stringWithFormat:@"<User with id %@ left>", socketId];
        for (NSString *sId in socketIds) {
            [weakAmpServer callCommand:sendMessageCommand withParameters:@{@"message": message} socketId:sId success:nil failure:^(XBAMPError *ampError) {
                NSLog(@"%@", ampError);
            }];
        }
    }];

    [ampServer handleCommand:sendMessageCommand withBlock:^NSDictionary *(NSDictionary *parameters, NSString *socketId, XBAMPError **error) {
        NSString *message = [NSString stringWithFormat:@"%@: %@", socketIds, parameters[@"message"]];
        for (NSString *sId in socketIds) {
            [weakAmpServer callCommand:sendMessageCommand withParameters:@{@"message": message} socketId:sId success:nil failure:^(XBAMPError *ampError) {
                NSLog(@"%@", ampError);
            }];
        }
        return nil;
    }];

    // Setup client
    XBAMP *ampClient = [[XBAMP alloc] init];

    [ampClient handleCommand:sendMessageCommand withBlock:^NSDictionary *(NSDictionary *parameters, NSString *socketId, XBAMPError **ampError) {
        NSLog(@"%@", parameters[@"message"]);
        return nil;
    }];

    NSError *error = nil;
    if (![ampServer acceptOnPort:23564 error:&error]) {
        NSLog(@"%@", error);
    }

    [ampClient connectToHost:@"localhost" port:23564 success:^{
        double delayInSeconds = 2.0;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC));
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            [ampClient callCommand:sendMessageCommand withParameters:@{@"message": @"Hello"} success:^(NSDictionary *response) {
                [ampClient closeConnection];
                [self notify:kGHUnitWaitStatusSuccess forSelector:@selector(testServer)];
            } failure:^(XBAMPError *ampError) {
                NSLog(@"%@", error);
            }];
        });
    } failure:^(NSError *error) {
        NSLog(@"%@", error);
    }];

    [self waitForStatus:kGHUnitWaitStatusSuccess timeout:1000];
}

@end

redpajama_set_name: RedPajamaGithub


In my last article I discussed what myofascial trigger points are, how they form and the type of local and referred pain patterns that they can cause. In today's article I will take a look at the causes and pain patterns associated with trigger points in the Levator scapula muscle of the neck (a.k.a. the "stiff neck muscle").
The Levator scapula originates in the cervical spine (the neck) and inserts into the top inner corner of the shoulder blade. It functions to stabilize the neck, lift the shoulder blade and rotate the neck to the same side. The Levator scapula gets its nickname the "stiff neck muscle" from the fact that it can be stiff, rigid and unmovable upon waking, especially if one has spent the night sleeping on their stomach with their head turned.
Trigger point hindrance of the Levator scapula is common and easy to recognize. Levator scapula trigger points will restrict the movement of the neck forcing the individual to turn their entire body instead of their neck when shoulder checking, or turning to speak to others. Often individuals with trigger points in the Levator scapula will present with the affected shoulder blade raised slightly higher then that of the unaffected side.
The active trigger point pain pattern of the Levator scapula tends to be the base of the neck where the neck meets the shoulder and along the inner border of the shoulder blade as seen in the photo below.
What causes trigger points to develop in the Levator scapula?
The head forward neck posture that many individuals sustain during their workday (especially computer work) puts strain on the Levator scapula, causing it to contract to compensate for the forward neck posture.
The treatment of Levator scapula trigger points is relatively straightforward and typically offers quick relief of both pain and stiffness.
Release of both active and latent trigger points through a combination of Acupuncture and Massage therapy techniques.
Self care education that can include: postural exercises, stretches, heat and/or self -trigger point release techniques.
Please stay tuned for my next article (in two weeks) when I discuss what you can expect in your first Acupuncture visit.


text:
Q: How do I Stop a running runOnUiThread Runnable I want to be able to toggle a MyLocationNewOverlay on and off.  My current code is:-
    void btnTrack() {
        btnTrack = (Button) findViewById(R.id.btnStart);

        btnTrack.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            String btnText = btnTrack.getText().toString();
            GpsMyLocationProvider provider = new GpsMyLocationProvider(ctx);
            provider.addLocationSource(LocationManager.NETWORK_PROVIDER);
            // My Location Overlay
            MyLocationNewOverlay mysLocationoverlay = new MyLocationNewOverlay(provider, map);

            if (btnText.equalsIgnoreCase("Start")) {
                /**************************************************************************
                 *      Get and display the current location
                 **************************************************************************/

                getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

                mysLocationoverlay.enableMyLocation(); // not on by default
                mysLocationoverlay.setDirectionArrow(BitmapFactory.decodeResource(getResources(),
                        R.drawable.marker_node), BitmapFactory.decodeResource(getResources(), R.drawable.marker_poi_default));
                mysLocationoverlay.runOnFirstFix(new Runnable() {
                    public void run() {
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                btnTrack.setText("CANCEL");
                            }
                        });
                    }
                });

                map.getOverlays().add(mysLocationoverlay);
            }
            else {
                mysLocationoverlay.disableMyLocation();
                mysLocationoverlay.disableFollowLocation();
                map.getOverlays().remove(mysLocationoverlay);
                getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
                btnTrack.setText("START");
            }
        }
    });
}

I'm pretty sure that the problem is with the runnable but I can't see any way of terminating that when I toggle the button to 'Cancel'led.
I'm using osmdroid v6.1.0 and osmbonuspack v6.6.0
How can I stop the runnable?

A: You are creating a local instance of MyLocationNewOverlay every time the button is clicked.
When the button is clicked for the first time a MyLocationNewOverlay instance is created, activated and added to the map view.
When the button is clicked for the second time, another new instance of MyLocationOverlay is created. This new instance is deactivated and removed from map view - well, not really, since it was never activated nor added.
I would suggest to keep a reference to the MyLocationOverlay instance in your activity (or fragament, denpends on your situation) and create it only the first time the button is clicked (check for null).

redpajama_set_name: RedPajamaStackExchange


Some Zanu PF heavyweights left out of President Emmerson Mnangagwa's new Cabinet yesterday said they had accepted their fate and were not bitter.
Former Energy minister Simon Khaya Moyo said he accepted Mnangagwa's decision, adding the president did a "marvellous job".
"I have never heard of a permanent Cabinet in any part of the world," he said.
Khaya Moyo, who survived several ouster plots during former president Robert Mugabe's rule, said Mnangagwa's new ministers needed everyone's support.
A few days before Mugabe was toppled, Khaya Moyo had announced Mnangagwa's expulsion from government.
"I have done my best, the best of my passion, remember I am a trained medical doctor so for now, I will take a break and consider many options available," he said.
"I really support what the president has done and I look forward to support his team.
"I have trust in Dr [Obadiah] Moyo [his successor] and other ministers. But for me, I am happy and I did all I could do.
"Some of us have been in government for 23 years. It was high time for some of us to leave for young and energetic leaders," he said.
"I went to the Senate and I am the party's secretary for administration, what more do I want?
"I am appealing to all my comrades to support the president in his quest to renew the party and government.
"We all are all called to serve at different times and my time came. I am happy to say I gave the job my all. I served loyally and diligently," he said.
"Now that I am not in Cabinet, it is an opportunity to continue to serve from a different platform.
"On the Cabinet, I believe it's a very solid team that will deliver for the country," he said.
"It's got a lot of freshness and good flavour. Its optics is good for the country domestically and internationally.
"The Cabinet needs the support of every Zimbabwean in order for it to deliver the aspirations of the nation, which have been well articulated by the president on many occasions.
"I cannot comment on those issues, you know it. If I want to talk about it some other time, I will publish a book," he said.
I was in evitable that some former ministers will be dropped. It is in the interest of the country to do so. Those who did not must accept the development. They do have farms so it will be good for them to go fulltime farming.
Who are the 5 non-constituency MPs ?
Which other potential candidates exist from Parliament or outside, for which portfolios?
Questions such as these need to be answered in a piece like this!
Thanks Kaya Thanks David Thanks Obert Thanks Supa. You are honorable. You love your country and want to see it move forward. You are great people.
@Senior – great people do not destroy their country, and professionals always quit before they are fired. ZPF people always talk tongue in cheek. if they are recalled, you will hear 180 degree turn stories. I don't trust any of them…no thanks!


"In June 2017, I was due to perform in Moscow when I met Kirill Gilels, the grandson of the famous pianist Emil Gilels. He listened to what our Phoenix Mastering restoration process can achieve, and gave us a list of dates and places of the previously unreleased recordings of his grandfather.
In Berlin, Moscow and Saint Petersburg, we came across a treasure trove, stunning in terms of both the quality and consistency of Emil Gilels's playing. We were fully aware that he was one of the greatest musicians of the twentieth century.


text:
RTPI Response to EAC on Voluntary Naitonal Review of the SDGs
This is the evidence provided by the Royal Town Planning Institute to the Environmental Audit Committe on the Voluntary National Review (VNR) of the progress towards the Sustainable Development Goals (SDGs).
Our response focused primarily on the Government's preliminary Emerging Findings document, and in particular on the section regarding SDG11 'Sustainable Cities and Communities' and its achievement in the UK. The RTPI, as a founding member of the Global Planners' Network, was instrumental in lobbying for the creation of SDG11 and including planning as an instrument to achieve it in the UN-Habitat's New Urban Agenda.
How well does the Government's Emerging Findings document reflect the progress that the UK has made domestically on implementing the SDGs?
The Royal Town Planning Institute recognises that the Emerging Findings are a work in progress and that the VNR is meant to offer an opportunity to national stakeholders to engage in a conversation around the delivery of the SDGs.
In the Government's programmatic document 'Agenda 2030 - The UK Government's approach to delivering the Global Goals for Sustainable Development - at home and around the world', "driving up house supply" is described as "essential" for achieving SDG11. New homes delivery targets are actually featured as the main national policy for the achievement of SDG11 in the UK.
The Office for National Statistics (ONS) interprets the monitoring of the SDG housing indicator 11.1.1 ('Proportion of urban population living in slums, informal settlements or inadequate housing') as the percentage of dwellings failing minimum standard decent homes criteria, defined as dwellings posing a category 1 hazard under the Housing Health and Safety Rating System (HHSRS).
The monitoring approach uses dwellings failing the decent homes criteria as an approximation for 'slums, informal settlements or inadequate housing' - as defined in UN global metadata – in the UK context. Considering that 25% of English homes fail to meet that essential Health and Safety standard, the ONS is correct in pointing out this issue and bringing it to public attention in the Voluntary National Review. However, it may not necessarily be the most appropriate or only way of monitoring that indicator for two reasons:
1) The UN definition of inadequate housing is broader than just health and safety, and crucially encompasses affordability [1]. This is particularly relevant in a context such as the UK, where essential health and safety standards might be seen as a baseline, rather than a goal to achieve by 2030.
2) Building new homes is not guaranteed to substitute homes that fail decent home criteria, which may continue to exist next to the new-build stock. This is particularly true when the policy is designed to satisfy the projected demand for new homes, rather than to substitute an ageing or inadequate housing stock – as stated in the 2017 Government's Housing White Paper.
For this reason, the RTPI suggests that it may be worth considering adapting the monitoring of indicator 11.1.1 to the UK context by looking at data on the impact of housing unaffordability on the most deprived segments of the population. Furthermore, it would be useful to clarify in the VNR exactly how policy intended to drive up housing supply will address both the issues around adequateness and health and safety – as currently monitored – and those around affordability – which are identified as crucial by the UN and are relevant to the UK context.
The VNR might be an occasion to not just report to the UN on progress towards the achievement of the SDGs based on a set of globally agreed indicators, but also to discuss how these can be adequately transposed in the national context and how organisations can partner to achieve and monitor the SDGs.
The RTPI commends the ONS for partnering with the Ordnance Survey and coming up with a simple data set for monitoring the SDG indicator on land consumption 11.3.1 ('Ratio of land consumption rate to population growth rate'), which encompasses all man-made changes in land use patterns. However, considering that the Government aims to deliver 300,000 new homes a year from the mid-2020s, new housing might be a significant driver of changes in land use, and might require special consideration in both policy design and monitoring efforts.
According to Eurostat data, in 2017 approximately 86 percent of the UK population lived in either detached or semi-detached houses. The VNR monitoring approach may want to consider how policies intended to achieve SDG11 by driving up house supply might affect land consumption, particularly if new developments reflect current settlement patterns.
For example, if 86% of the 300,000 new homes to be delivered each year were built as detached or semi-detached homes on plots of 200 sqm, it would mean 51.6 sq km or 20 sq miles of land changing use each year to make space for new residential uses - excluding the amenities and infrastructure needed to service them.
In this respect, the VNR may want to highlight positive examples of planning policy aimed at optimising sites and achieving increased density, such as Croydon Council's Suburban Design Guide [2].
In line with the focus placed on sustainable transport for all in the government's Agenda 2030 programmatic document, the ONS reports on the success of the 'Access for All' programme to provide step-free rail station access. This programme is very effectively addressing aspects of SDG indicator 11.2.1 with regard to access for people with disabilities. However, in order to address this wider goal, it is important also to review levels of accessibility by sustainable modes of transport (rail, bus, cycling, walking) across the built environment, the sustainability of residential land allocations, and the degree to which new development is delivered alongside the necessary public and active transport infrastructure such as railway and bus stations.
In this respect, it might be interesting for the purposes of the VNR to look at the findings of the RTPI research 'The Location of Development'. The project mapped the planning permissions for over 226,000 new homes granted between 2012 and 2017 in 12 fast-growing English city-regions. It measured the number of new units granted on each site, analysed whether they fall outside, within or in contiguity with an existing built-up area, and analysed their proximity to a railway station (within 800m, 2km or above) and to major employment clusters (within 10km, between 10 and 20km, over 20km). In the sample studied, over 50% of new developments were more than 2 km away from a train station [3].
[1] UN-Habitat and UNHCR 2014, Human Rights to Adequate Housing - Fact Sheet https://bit.ly/2Z37dmD
[2] Croydon Council 2018, Suburban Design Guide https://www.croydon.gov.uk/planningandregeneration/framework/localplan/spdandoapf
[3] Royal Town Planning Institute 2018, Settlement Patterns, Urban Form & Sustainability https://www.rtpi.org.uk/locationofdevelopment


Payroll processing can be a labor-intensive chore, particularly for small businesses with limited staff. At LOUISE A. BRINDISI, CPA PC, we provide efficient, reliable payroll processing at a reasonable cost, including printing or direct-depositing paychecks, managing deductions, allowances, and withholding, filing quarterly and year-end state and federal payroll tax forms and making electronic tax payments, as well as comprehensive payroll reporting to help you manage your staff and run your business efficiently.
As a business owner, your focus is on your customers and your business, not on administration and paperwork…and that's as it should be. As payroll experts, we can help keep your focus where it belongs. At LOUISE A. BRINDISI, CPA PC, we may not be as big as the payroll processing giants, but to us, you are more than a number – we get to know you and your needs, and we provide you with personalized, custom-tailored professional service and advice. Our experienced staff can manage any and all aspects of your company payroll, from check printing and paycheck direct deposits to year-end payroll tax compliance… we take the hassle out of payroll processing for you.


The Little Blue Herons are working on their nests on the interiors of two little islands. They get into squabbles with their mates or their neighbors then take a spin around the island, sometimes taking a time out before getting back into the fray in the dense undergrowth.
Out in the open it is easier to see their beautiful blues. The intense blue on their beaks is a match for the blue sky on this April day.
An in-flight photo from underneath gives a perspective on their wing spans and shows off that their bodies aren't all blue.
The Little Blue Heron's various blues seem more purple than blue in the bright sun. This one is about to disappear into the greenery towards his nest.
Beautifully captured, especially like the in flight shot.
Thank you, Belinda! It's cool to be underneath and the bird from a different perspective.