I played the game, "Sorry," quite a bit this past summer because my six-year old daughter enjoys it, in part due to her uncanny run of luck the first 10 or 15 contests (I have since caught up, usually crushing her and sending her into a rage beyond anything any of us have felt after the worst bad beats of our lives.) One thing I learned about the game is going around the board the traditional way is far less effective than waiting for a lucky card that advances (or reverses) you right to the end. The variance is what makes the game go, and there's so much of it that if everyone's playing it right, there's no skill involved whatsoever.
The NFL has always been a nice mix of skill and variance. There's the down-in and down-out play-success rate, the performance in the trenches and the keeping off balance of the defense by the offense and vice-versa. But the funny-shaped ball also has its odd bounces, and the fumbles, pick-sixes and cornerbacks slipping for long TDs has a huge effect. Some people don't like this because the outcomes seem too random, but without the noise, everyone could see the signal, and there would be no edge. The key to a good game is a delicate balance - enough luck to make it challenging, enough skill for there to be a challenge at all.
In the past couple years, we've seen more variance pumped into the game via rule changes. First was the catch rule which heightened the requirements for a catch and put into play an arbitrary process on which games could turn. This year, the ticky-tack personal foul rules designed to protect quarterbacks are opening the variance latch wider. (This is of course, on top of the massively inconsistent and discretion-based PI and holding calls which already turned games.) Players are being flagged for hitting the QB just as he releases the ball, they're flagged for taking down a moving target who's trying to spin away and gash them downfield for a big gain. They're being flagged whether or not the hit is on-time and whether or not the QB is harmed. The enforcement is, of course, inconsistent, and the rule itself is contrary to the spirit of NFL defense which is to hit the player with all you have, so long as the hit is on time and not with or to the head.
The result is an entire new class of arbitrary first downs, extended drives and potential for altered outcomes. We're not at the Sorry state yet, but every time the NFL puts more responsibility for the results in the hands of the refs at the expense of the players, it's playing with fire.
Last week, I looked at the schedule and made my own lines, before comparing them to the actual ones, and I think I'll make it a habit - for now.
I reserve the right to change my mind for Beating the Book and the Supercontest, but I think it's helpful to give it an early look.
Right now, it seems like I'm on the Jaguars, Bengals, Jets.
• The Sunday night game was frustrating. I had the Packers against the spread, and that was easy to let go of because it wasn't a Supercontest pick and they were down 20-0 in the second half. But my lone Ravens survivor entry would have benefited had Green Bay lost, and I also have a Rams/Packers side-bet with Dalton Del Don. But it wasn't simply that Chicago lost, but how they lost. Up three with two-minutes left and facing Aaron Rodgers, Matt Nagy settled for a short field goal on 4th-and-1 rather than going for the win, then and there? How dumb to be up six – sure, a FG doesn't tie the game anymore, but now instead of going for the tie, the Packers are forced to go for the win – and rely on your defense against Rodgers who had solved it all quarter.
The Bears were lucky the Packers scored so quickly and left them plenty of time to get a game-winning field goal. But instead of running their offense with short dump-offs and screens to their backs, they abandoned it and had Mitchell Trubisky – who did not look sharp – drop back and fire the ball 15-20 yards down the field on four straight throws.
• Rodgers left early in the game, but played at his usual level after he returned, with 9.5 YPA and three TDs. His back up DeShone Kizer was unsurprisingly terrible, something that could matter as Rodgers is getting more tests on his knee this week.
•Khalil Mack wasted no time getting going for his new team with a pick, a sack and a touchdown.
•Jordan Howard and Tarik Cohen both ran effectively, but Howard out-carried him 15:5 and actually saw five targets to Cohen's four. But Cohen was on the field during the final, failed drive.
•Allen Robinson led the Bears with seven targets – he's the clear No. 1, while Trey Burton had six, but caught only one.
•Randall Cobb had a huge game, thanks to the game-winning 75-yard TD catch, but he caught eight other mostly short passes too. Davante Adams was quiet most of the game, but had a 50-yard catch and a TD on the penultimate drive. Geronimo Allison looks like the clear No. 3 with eight targets. Jimmy Graham (four targets, eight yards) was an afterthought.
•Jamaal Williams had 15 carries for 47 yards. He runs hard, but he hardly cemented his case to keep the job once Aaron Jones returns in Week 3.
• A road matchup against the Panthers isn't easy, but the Cowboys offense is toothless. No downfield throws, six sacks taken. Dak Prescott and Jason Garrett are way too conservative. This might give Cole Beasley some PPR value, but his ceiling is five or six TDs.
• Zeke Elliott will get his, but he's probably not going to catch more than 50 passes, and the offense is a drag.
•Christian McCaffrey had 10 carries to C.J. Anderson's seven. Both got touches inside the five, but Cam Newton and the fullback scored the TDs. McCaffrey did have six catches for 45 yards, but if you were expecting a workhorse, you've probably been had.
• Newton salvaged his day on the ground as he often does, and no receiver did anything of note. Greg Olsen is likely out for a while if not the entire season.
• While McCaffrey's not a workhorse, Adrian Peterson surely is – 26 carries for 96 yards and a touchdown and two catches for 70 more (though in garbage time.) He's the lead back on a competent offensive team, and his light workload the last two years probably buys him a final solid season if he stays healthy.
•Jordan Reed caught four of five targets for 48 yards and a score. If he's healthy, he's a top-seven TE, especially with Walker and Olsen going down. Between Reed and Thompson, and slot man Jamison Crowder, there might not be much left for the outside receivers.
•David Johnson broke through late with a score, but the Arizona offense looked terrible with Sam Bradford. Can't imagine it'll be long before Josh Rosen takes over, barring a significant turnaround next week. Larry Fitzgerald, 10 targets, nine catches, 76 yards, got his at least.
• If Doug Baldwin (both knees) misses significant time, it's a free-for-all among the Seattle pass catchers. Will Dissly, a fourth-round rookie, led the team in receiving this week, but it could be Tyler Lockett (who did nothing until one blown coverage for a 51-yard TD), Brandon Marshall (TD, second TD called back for OPI), or anyone else. One silver lining for Baldwin is the new (right) knee injury - if it's only a couple weeks - might buy him enough time for the original (left) one to heal.
•Russell Wilson (3 TD, 9.0 YPA) did just fine against a tough Denver pass defense without Baldwin, so he might be okay while we figure it who he's throwing to.
•Chris Carson and Rashaad Penny split carries, with the former getting 51 yards and the latter eight, though both were roughly equal in the passing game.
•Case Keenum threw three picks, but had 329 yards and three TDs, targeting both Emmanuel Sanders (11-10-135-1) and Demaryius Thomas (10-6-63-1) heavily. The narrow tree is still in effect.
•Royce Freeman was okay – 15 carries for 71 yards – but so was Phillip Lindsay who had the exact same ground-stat line. The difference was Lindsay also caught two passes for 31 yards and scored, while Freeman did not receive a single target. Devontae Booker had two targets for 11 yards.
• Every year the stat guys love the Chargers, and every year they disappoint. Joey Bosa is out for several weeks, the special teams gave up a TD on its first punt and they dropped a "home" game to their key rival despite being favored by 3.5 points. No one ever went broke betting against the Chargers.
•Philip Rivers got 8.3 YPA, three TDs and 424 yards, though, bolstering further his untouchable stats-to-wins ratio.
• Say what you want about Melvin Gordon, but if you took McCaffrey over him, you might want to re-check the definition of "workhorse". Gordon had 15 carries and 13 targets, nine catches and 166 YFS, and that was despite Austin Ekeler getting 87 receiving yards and a TD.
•Keenan Allen did his usual 11-8-108-1 (unremarkable given the team's 424 pass yards) and Mike Williams looks like the No. 2 with 6-5-81 over Tyrell Williams' 5-2-8-1.
• As a Kareem Hunt backer, I'm concerned. He had 16 carries, which is fine, but I don't like the trick dump-offs to Tyreek Hill and De'Anthony Thomas at the goal line. It certainly helped Pat Mahomes (four TD passes), but those should be Hunt's TDs. Hunt also got only one target and no catches. It's not panic time by any means, but those little vultures here and there chip away at his status as a first-round pick.
•Tyreek Hill is a monster. He had only eight targets, but he converted them to seven catches for 169 yards and three TDs (including a return.) The Chiefs defense isn't good, so they'll be in their share of shootouts, and the real test for Hill will be whether he ever gets 12 or 15 targets. As it stands he could get 120 targets for 1,300 yards and 11 TD, but the real Antonio-Brown-esque upside will only kick in (especially in PPR) if he gets to 150 targets.
•Sammy Watkins seems like the guy he was on the Rams – a decoy more than a primary look, but it's only been one game, albeit disturbingly one where neither Travis Kelce nor Hunt were involved as receivers, and Watkins still didn't see much work.
• There's not much you can take away from the Ravens-Bills except that Kelvin Benjamin and LeSean McCoy are hard to trust in the near term. This game was garbage time from the beginning.
•Saquon Barkley got most of his production on one play, but he broke tackles and showed off his 4.4 speed on it. He caught only two passes, but had six targets, so he's likely game-flow proof.
•Odell Beckham went 15-11-111, and should have had a long TD but Eli Manning overthrew him. This was against the league's best pass defense. He's all the way back.
•Leonard Fournette went down early with a hamstring injury, but looked sharp and caught three passes. To the extent he's healthy, he'll still have a major workload as a runner and receiver, and the Jaguars seem optimistic he could be back for Week 2.
• The Giants pass defense played well – Janoris Jenkins is a former Pro Bowler, and Eli Apple had one of the better games of his disappointing career. Accordingly, Blake Bortles and the receivers didn't do much, but it looks like Keelan Cole and Dede Westbrook are Nos. 1 and 1A.
• It was bad timing for DeSean Jackson, Mike Evans and the Saints defense to revert to 2016 form all at once. The result was 293 yards, three TDs and one concussion (Jackson) between them. Ryan Fitzpatrick had 417 yards, 14.9! YPA, four TDs and a rushing TD. It was one of the bigger fantasy QB games of all time, and one has to wonder if Jameis Winston will get the job immediately upon his return from suspension. Either way, as bad as the Saints defense looked, the Bucs passing offense is loaded.
•O.J. Howard had only two targets but 54 yards receiving, i.e., he picked up where he left off last year. Chris Godwin also went 4-3-41-1. Cameron Brate didn't catch either of his two targets. Keep in mind Winston is the one who typically targets Brate.
•Peyton Barber was merely passable, didn't have any catches. Ronald Jones was a healthy scratch.
• If the Saints defense is half as bad as it looked, Drew Brees will go down as one of the steals of the draft. He had 439 yards, 9.8 YPA and three TDs. Michael Thomas had a monster 17-16-180-1 line, and Alvin Kamara went 12-9-112-1 as a receiver and scored twice on eight carries for 39 yards. Whether Kamara sees a full workload as a runner won't be clear until the Saints are actually leading for a decent stretch of game.
• With so many receivers banged up, Rob Gronkowski had a big day, but his target share (eight of 39) was nothing unusual. He just does a lot with the work he gets. Philip Dorsett and James White (seven and nine targets, respectively) were the only other relevant factors in the passing game. Dorsett who went 7-66-1 might be entering the circle of trust. Chris Hogan had five targets, but caught only one pass for 11 yards.
•Rex Burkhead led the team with 18 carries, but caught only one of three targets, and that was with Sony Michel out and Jeremy Hill tearing his ACL. The medium- and long-term distribution in the Patriots backfield is still murky, but count on White to get the targets.
•Tom Brady had an unremarkable 277 yards, 7.1 YPA, three TDs and a pick during a relatively easy win. He didn't seem especially bothered by the absence of Danny Amendola, Dion Lewis and Julian Edelman.
•Deshaun Watson had a poor game – just 5.2 YPA, a pick and a lost fumble. He did have 40 rushing yards and moved well.
•DeAndre Hopkins had a pedestrian 11-8-78 line, but he almost never gets entirely shut down. Bruce Ellington caught a short TD.
•Lamar Miller went 20-for-98 and caught one pass for 11 yards, but yielded the TD to Alfred Blue.
•Jimmy Garoppolo had his chances, but threw three picks in his first loss as a starter. He still managed 7.9 YPA and threw for 261 yards and a TD against a tough defense on the road. Don't be concerned.
•George Kittle's stock went way up. He's healthy and looks like Garoppolo's first read, going 9-5-90. Dante Pettis made a great catch on a long TD and had five targets. He could fill in for Marquise Goodwin, if Goodwin misses time. Pierre Garcon didn't do much with six targets, and neither did Trent Taylor.
•Matt Breida outrushed Alfred Morris (who lost a fumble), but neither did much against a stout Vikings front. Reserve judgment for one more game.
• The Vikings ran the same offense as last year – with Kirk Cousins doing what he had to, Adam Thielen out-producing Stefon Diggs, though Diggs scored, Kyle Rudolph catching a TD and the backs splitting the ground work, though Dalvin Cook saw seven targets for 55 yards. Latavius Murray will be involved for now, though.
• The Titans season went downhill in a hurry. Marcus Mariota is already banged up, and Delanie Walker is out for the year. Jonnu Smith is interesting at TE, but only in deep leagues. Dion Lewis outsnapped and outproduced Derrick Henry by a wide margin, scoring the TD and getting involved as a pass catcher. Corey Davis is the No. 1 WR, and it's unclear how the rest of the pecking order will play out, or how much it will matter.
•Kenny Stills is still the Dolphins best receiver, though targets were roughly an even split between him, Jakeem Grant (return TD), Albert Wilson and Danny Amendola. And that's with DeVante Parker still out.
• Adam Gase wasn't joking apparently when he said Frank Gore would split carries. Gore actually ran better than Kenyan Drake, though Drake saw four targets. But this was an odd game with multiple lightning delays.
•Joe Mixon had a big day – 149 YFS and a score. Keep in mind it was against a soft Colts defense, but the good news for Mixon is Gio Bernard had only one carry and one catch.
•A.J. Green is a fumbling machine, but he went 8-6-92-1. Tyler Eifert caught all three of his targets for 44 yards, a good sign for a player working his way back to health.
•T.Y. Hilton had 11 targets, and Jack Doyle 10, but Doyle fumbled on the final drive, and it was returned for a TD, sealing the game. Eric Ebron 5-4-51-1 was also involved as was Ryan Grant, 9-8-59.
• If it were possible to award both the Browns and Steelers losses, the league should. Ben Roethlisberger threw three picks and lost two fumbles, continuing his subpar road play, and the Browns couldn't cash in, thanks to a blocked field goal in overtime. The Steelers also missed a 42-yard field goal in overtime in part because they saw no particular need to advance the ball any closer, despite rain and wind.
•Le'Veon Bell lost some leverage in his holdout as his replacement James Conner went 31-135-2 on the ground and 6-5-57 through the air, typical Bell numbers, though Conner lost a key fumble. Whoever starts for the Steelers is a workhorse, though I wonder if Bell reported for Week 2, whether they saw enough from Conner to split things up as Bell apparently seems to want.
•Antonio Brown saw a whopping 16 targets, but had a relatively modest 9-93-1 line. Ever-efficient Juju Smith Schuster went 8-5-119 but didn't score. Jesse James went 5-3-60, serving as the offense's No 4 option.
•Tyrod Taylor had a nice game on the ground – 77 yards and a TD, but managed only 4.9 YPA through the air.
•Jarvis Landry is clearly the team's top wideout with a 15-7-106 line, but Josh Gordon scored a big TD late and should have a bigger load next week.
•Carlos Hyde had 22 ineffective carries, but only two targets to Duke Johnson's six. Nick Chubb had three effective carries and could obviously cut into Hyde's role at some point.
• How very Jets it was for Sam Darnold to throw a pick six on his first NFL pass. But how very Lions it was to get outscored 48-10 from that point on. Darnold looked a bit herky-jerky to me, but that's to be expected in his first-ever pro game. He moved well, and his arm looked strong. I'd bet against him being anything special, but that's always the safe bet with young QBs, irrespective of pedigree.
•Quincy Enunwa looks like the team's top target with a 10-6-63-1 line. It was all short stuff, but Enunwa is 6-2, 225 and runs a 4.45, so he's capable of big plays. Anderson caught his only target, a 41-yard TD, and he'll be integrated further when the game-flow warrants. Terrelle Pryor caught all three of his targets for 49 yards too.
•Bilal Powell actually saw more carries than Crowell, 12 to 10 and ran well (60 yards), but Crowell got 102 and scored twice. This looks like a 50/50 time share, and Powell could get more catches when game flow warrants.
•Matthew Stafford had one of his worst games as a pro – four picks, including one returned for a TD, 6.2 YPA in a home game against the Jets. The lone bright spot was Golladay – 12-7-114. He looks like a star in the making and even chipped in with a tackle and forced fumble after a Stafford pick.
•Golden Tate went 15-7-79-1 and given the state of the running game and defense is a lock to get his 90-ish catches should he stay healthy all year. Marvin Jones had a few near-misses on big plays, finishing at 8-4-54. With no TE of which to speak, all three should be playable most weeks.
•Theo Riddick went 7-5-15 through the air and led the team with 20 yards rushing, but it was ugly on the ground. Kerryon Johnson looked quick, but had nowhere to go, and LeGarrette Blount was stuffed whenever he touched the ball.
• People were mocking Jon Gruden on Twitter, but I thought his game plan was fine. He just got poor QB play from Derek Carr and was outgunned everywhere else. With Amari Cooper (3-1-9) locked down by the Rams secondary, the Raiders don't have anyone else who can make a big play.
• Except apparently TE Jared Cook who went 12-9-180, tying him for the fourth most receiving yards for a TE in a single game in NFL history. Interestingly he also has the ninth most, making him the only TE to have two games in the top 10 (though Rob Gronkowski has three in the top-16.) Needless to say, Cook warrants a pick-up, despite his history of sporadic big games and long-term disappearances.
• Carr threw for 303 yards, but was otherwise awful with egregious picks that gave away the game.
•Marshawn Lynch looked strong, bulldozing (with help)for a TD, but game-flow won't be his friend this year. He caught two passes, but Jalen Richard – 11-9-55 – was the prime back in garbage time.
•Jordy Nelson's 4-3-23 is more or less what I expected of him. I still like Cooper a little, but he struggles against top corners and has a tough CB schedule.
•Jared Goff wasn't great, but I like that he took plenty of shots downfield, and the stats don't show the two big PI penalties on Brandin Cooks. You have to love the cheap forward-hand-off passing TD he got to Todd Gurley too. Goff will have a big year, and Sean McVay was still running play-action passes late rather than predictably handing it to Gurley to chew clock.
• Cooks went 8-5-87 plus two massive PI penalties. The Rams traded a first-rounder for him, then paid him, and it looks like they intend to use him plenty.
•Cooper Kupp and Robert Woods each saw nine targets, with Kupp getting the TD. All three wideouts will be involved, but Cooks in the field stretcher.
•Todd Gurley had a ho-hum 20-100 and 3-39-1 day, just business as usual.
•Greg Zuerlein missed one kick from the infield dirt, but drilled four others including a 55-yarder than might have been good from 70. He looks like he should have another monster season.


text:
Survey Shows Politics Driving Greece's Rabid Anti-Vaxxers
By The National Herald
FILE- Anti-vaccine protesters hold a banner during a rally at Syntagma square, central Athens, on Wednesday, July 21, 2021. (AP Photo/Yorgos Karahalis)
ATHENS – While 83 percent of people living in Greece have been either vaccinated against COVID-19 or made an appointment to get one, resisters and skeptics said political stances made them disbelief the shots were safe or effective or part of a conspiracy against them.
That was the finding of a survey by the firm Focus Bari for YouGov.gr that got responses from 1002 people aged 18-74, as the New Democracy government has been unable to convince anti-vaxxers to be inoculated.
Of the doubters, only 8 percent said they might get vaccinated and 9 percent said they won't be persuaded, the resistance highest among those under 44 although the government will begin fining those over 60 at the rate of 100 euros ($114) a month if they aren't vaccinated.
The poll, said Kathimerini, showed that 65 percent of vaccine deniers said they refuse to get the shot because they feel that they are being forced to do so, with 57 percent said it's because the vaccines are experimental, 43 percent worried about long-term side effects and 21 percent said the pandemic isn't real and is a fabricated hoax, even disbelieving that people are dying from it.

redpajama_set_name: RedPajamaCommonCrawl


No Googles or errors on a Thursday! Did not know CHAR, GAINER, ORBITZ, EOS.
9:50, but left a square blank, d'oh!
Forgot to point out yesterday that my "to a degree" pretty much fits with what you said. I'd say "a couple of them" were harder than anything in the LAT, barring the "tricks" that don't show up there. But overall for the puzzles we've posted, the ACPT puzzles aren't all that different in difficulty.
Thanks, Glenn … I think we're on the same page.
For a little over a year, I've been recording my results for all of the crossword puzzles I do and I've idly thought of doing some statistical analysis of them (once I get my Fortran environment working again!). An odd thing I've noticed is that my times for early-week Newsday puzzles are essentially always smaller than my times for early-week LAT puzzles, even though, subjectively, they often "feel" pretty much the same as I do them. I have speculated that the clues for the LAT puzzles simply take longer to read, but I'm not at all sure of that.
I also note that I seldom finish a David Steinberg Universal puzzle in less than nine minutes. That's partly due to the way they're printed in my paper (too small and slightly blurry), but there's something else going on with them.
Lots of factors influence one's performance on crossword puzzles. But I digress … and, dang it, I'm still working on getting ready for my upcoming trip. Hopefully, I'll be ready the morning we leave … 😜.
There's lots of statements I could make like that of my own observations in doing these things. Like with the early-week Newsday, I would say Mon-Tue are easier than the Monday LAT. Odd thing for me is the late week Newsday seems tougher (witness the roughly 4 minute difference). My guess is the language that gets used more than any of the answers being strange, which is a universal problem for me. I could say the language is probably what threw me off on the two ACPT grids I didn't finish.
FWIW, I finished out the other two grids, unaided. One I finished out within 2 minutes (highlighting my other big "problem" solving these, given the amount of time I took within "regulation" trying to figure that corner out), the other I had so messed up in the process of double-checking things I took a more sizable amount of time. So I'd say I really only got beat by one puzzle out of the whole set. Still not respectable, but I'm okay with it.
All that said, really the only statistic I want to see is one that indicates that I'm improving. Hopefully that will continue to be the case.
Fairly easy Thursday but some inky crossouts before completion. Initially spelled Adrien with an "a" and Macau with a final "o" Not sure how "revealed the function of" is "moused over" you have to then "point and click".
I use Kayak for travel plans and still got fooled trying to think of an alternative water craft.
A "seer" is a person not an object. It's the Lady reading the crystal ball or the cards who is the seer not the objects. At least IMHO.
Peonies are also our city flower. Utica NY. They are everywhere in season. Ants and all..
Geese honking their way back to Central New York. A few crocuses (croci?) opening.
On my iMac, in many apps, moving the cursor over a button causes an explanatory box to pop up, telling me what that button is for. Maybe it's an Apple thing?
Also, I've recently had some cause to be a bit peeved with Travelocity. In your opinion, is Kayak (which I had never heard of) a better tool?
Unfortunately Orbitz,Travelocity, Expedia, etc offer almost identical deals. Kayak is a kind of clearing House that lets you look over these and other sites at once in case there happens to be a a variation and possible attractive deal.
fun to try, I keep telling myself. Seriously, it is our daily most fun activity.
Kudos to all you guys and gals.
8:56. I got the theme, but I didn't GO FISHing for them after the fact. I just looked at Bill's bold faced letters and saw them.
I've used both Orbitz and Kayak. You'll generally get about the same pricing on both of them. I still prefer to make reservations with the hotels directly. If you do that, you can call the hotel and negotiate date changes, plan cancellations etc. If you go through an Orbitz or Kayak or Hotels dot com , you pretty much pay at the time you reserve and are stuck with your reservation. My plans change too often to do that.
Dave – the same thing happens on Windows based systems. When you MOUSE over an icon, it usually says what it does or is. Where are you vacationing this time? I hope it's another area where you "accidentally" buy an expensive bottle of tequila….
I've always had a yen to see Quasimodo's bell tower and maybe some of Victor Hugo's favorite hangouts … and I thought I might buy a bottle of 200-year-old cognac, but then I discovered that they don't sell it in 1ml sizes (let alone the fraction thereof that my budget might allow … 😜).
12 mins 42 sec, and 6 errors. What a mess.
Pretty trick Thursday for me; took about an 45 minutes with no errors. Did this while recovering from dental work and having gotten up way too early. Also, didn't know or never heard of TVMA, AMY, ADRIEN, SNICKERS ALMOND or Kayak. And, PCTS, SEER and MOUSED seemed pretty suspect.
That "revealed the function of" clue was gnarly! Makes sense once I got it — as is usually the case.


text:
Kilburn Times > News > Housing
Willesden landlord fined more than £700,000 for 'poor quality housing'
Mohammed Mehdi Ali, of High Road, has been fined for earning illegal earnings from undersized flats - Credit: Brent Council
A rogue landlord has been ordered to pay back nearly three quarters of a million pounds for illicit earnings from overcrowded properties in Willesden.
Mohammed Mehdi Ali, of High Road, has been ordered to pay back £739,263.58 plus costs at Harrow Crown Court on February 19 after being found guilty of planning breaches.
A buggy in a narrow corridor of one of Mohammed Mehdi Ali's Willesden properties - Credit: Brent Council
It is believed to be the largest such order for a planning breach made anywhere in the country so far this year, according to Brent Council.
The court heard Mr Ali would face a prison term of five years and nine months if he did not pay the order in full within three months.
The order was made against Mr Ali following a prosecution brought by Brent Council's legal team.
Mr Ali was found guilty of failing to comply with planning enforcement notices in April 2018 at Willesden Magistrates Court, after investigations by Brent's planning enforcement team.
The case was then referred to Harrow Crown Court for confiscation proceedings under the Proceeds of Crime Act 2002.
One of Mohammed Mehdi Ali's rented properties. - Credit: Brent Council
Brent was represented in the crown court by Edmund Robb of Prospect Law.
Detailed investigations carried out by Brent's financial investigators and Brent's planning enforcement officers revealed illicit earnings made by renting out a high number of illegal dwellings owned by Mr Ali and his father.
The properties were used as houses of multiple occupation and as undersized flats.
Mr Ali was also ordered to pay Brent Council £30,000 to cover its legal costs.
Landlord Mohammed Mehdi Ali, of High Road, breached planning regulations - Credit: Brent Council
Cllr Shama Tatler, Brent Council's lead member for regeneration, property and planning, said it was "another huge win for Brent".
"The council will take robust action to prevent the creation of poor quality housing," she added.
"This penalty sends a clear message that rogue landlords will not be allowed to get away with ignoring planning laws.
"The accommodation provided was some of the worst residential accommodation that officers have ever come across.
"Brent will not tolerate this type of behaviour, landlords providing such horrible conditions. Brent residents deserve better."
Sentencing for the enforcement notice breaches is adjourned until March 1.


If you haven't seen CD-ROM director Theresa Duncan's earlier work, you'll think that her new release, "Smartypants," is far and away the best disk ever for young girls.
It is, except for her earlier CD-ROM "Chop Suey," which is even better.
Either one would make a great gift for girls in the 7 to 12 age group, and no doubt a lot of computer-savvy boys would like them too. Outside of some of the more technically spectacular fighting games, there are few CD-ROMs for the younger set that are as cool as Duncan's. Actually, there are few CD-ROMs this cool, period.
The wildly heralded "Chop Suey," released in 1995 and still available, was a wonderful alternative to the usual storybook CD-ROMs that tried their darndest to imitate print books.
"Chop Suey" went beyond the linear format to allow a child to wander freely through its small town setting, clicking on objects and buildings to create a digital journey. The stars were two girls, and "Chop Suey" was a welcome alternative to the silly, even patronizing CD-ROMs then targeted toward girls.
"Smartypants" is similar in that it is also centered around the adventures of a young girl, it also takes place in a small-town type of setting and the competition is still lame. Duncan's hero this time is Mimi Smartypants, a 9-year-old who loves to read, as we find out in a beautiful opening sequence that depicts Mimi in the fall and winter seasons (the spectacular art direction is by Jeremy Blake).
Come summer, Mimi is off to visit Aunt Olive and Olive's roommate, Rose, in the burbs. From an overhead view, you can choose to go to any of several places--the school, the Pancake Hut, the Dollar Dream discount emporium, the Pix movie theater, etc. As in "Chop Suey," there is nary a chain store nor mall in sight.
Click on the house and you can enter the root cellar, where semi-animated vegetables can be found around a card table playing poker. Up above the garage, where Olive makes jewelry from found objects, you can try your hand at making a necklace (you can print out the results). In the theater you can watch authentic clips from 1930s cartoons and at summer school (taught by nuns from Our Lady of Impossible Sorrow), Mimi takes part in an avant-garde production.
Duncan's writing--there is narration throughout the CD-ROM--is sharp and funny, and Blake's illustrations are great fun. Together, they create a perfect, summer vacation spot.
Perfect to a fault. What "Chop Suey" had over this new CD-ROM was that it depicted a place with a bit of an edge to it. Not really menacing, but deeper in character and more redolent of small-town life.
The people of "Chop Suey" had a sense of melancholy mixed with private joys--a teenage boy who sat alone in his room playing the guitar, a middle-aged singer reduced to gigs in motel lounges, a woman dancing romantically with a gas station attendant in her Chinese lantern-lit backyard.
And although the narrator of "Smartypants" does a nice job, there is probably no one as good a match for Duncan's writing as David Sedaris, the writer and radio essayist whose readings were one of the highlights of "Chop Suey."
You can't go far wrong with either of Duncan's CD-ROMs, but "Chop Suey" is the one that resonates in your memory long after the computer is turned off.
"Smartypants" is available by mail order only (call toll free,  476-2789). Macintosh and Windows versions are both priced at $34.95.
* Cyburbia's e-mail address is david.colker@latimes.com.


text:
Forecasting & Future PlanningRemove
Forecasting & Future Planning (2)Remove
Opportunity & Initiative (1)
Product Development (3)
Professionalism & Work Ethic (1)
Flash Foresight
How to See the Invisible and Do the Impossible
by John David Mann, Daniel Burrus
From small businesses to multinationals, individual careers to entire industries, Flash Foresight looks at how Daniel Burrus's seven radical flash foresight "triggers" have transformed dozens of careers, fortunes, and lives. Flash Foresight provides an easy-to-implement blueprint for applying the same strategies to your own business, enabling you to see the invisible and do the impossible. Today, as the pace of technological change accelerates almost beyond...
The Services Shift
Seizing the Ultimate Offshore Opportunity
By now, most business people, pundits, and politicians in the United States and other developed nations have come to grips with the phenomenon of manufacturing jobs moving offshore: The process is variously referred to as "outsourcing" or "offshoring. " But a far bigger wave of change is approaching the shores of those same developed nations: the globalization of services. Where are the jobs going? Which companies benefit –– or could benefit? How exactly does services offshoring work?


text:
schedule do
  send_event('dependencies', value: Dependencies.pie, colours: ['#0DBC37','#F9BC26','#D60303'], width:200, height:200, radius:100 )
end

schedule do
  send_event('dependency-alerts', current: Dependencies.alerts )
end

redpajama_set_name: RedPajamaGithub


text:
Was Danny Devito On Cheers?
While he was often on-set during the filming of the first season, Danny DeVito never appeared on the television series Cheers.
In John Watson's experiment on classical conditioning, a white rat was used as a(n) _______ to condition Albert.
asked Dec 1, 2022 in General Knowledge by iskralawrence (773k points)
i. How did Peggy justify her cruel behavior towards Wanda? ii. Describe how Custard's reaction was different from that of others, on seeing the pirate?
asked Nov 13, 2022 in General Knowledge by monikakim (557k points)
Who was moral treatment first used on?
for centuries, the primary avenue of trade for west Africans passed through the ghana, mali, and songhai empires, whose power was based on the ______ they enjoyed over the trans saharan trade
What is the Montreal Protocol (1), when was it agreed on (2), when did it enter force (3) and how many revisions has it undergone (4)?


Please come help weed Bed 2 at CUH (3501 NE 41st St., Seattle, 98105) at our new time, Saturday August 3rd, from 10am-1pm instead of 8:00 in the morning. We will be weeding and sheet-mulching it, so bring your shovels and hand-tools.
Also, we'll weed Equisetum out of Bed#1. Bring lots of water and a sun-hat!.
ALL HANDS ON DECK! – Mulch and edge the Bressingham beds on Saturday the 13th. So bring sharp shovels especially straight bladed ones, and edging clippers that day. Assuming we have enough workers, put down cardboard and mulch bed #2 under the large Magnolia. Also remove the rest of the paving tiles from bed #2 and move to bed #1.
ALL HANDS ON DECK! – Assuming it has rained, and we have approval of our bed design from CUH – COME HELP US PLANT BULBS. We bought hundreds of Narcissus bulbs for bed #2 to plant in large drifts. We will also have to finish any prep-work like final weeding.
Bring your own tools. Shovels for the mulching day, or whatever you use to spread mulch. Trowels, hori-horis or whatever you use to plant bulbs for the bulb planting day.
There will be a design meeting on Monday August 27 6-8pm in the CUH Miller Library conference room, where there is a whiteboard where the design ideas can be drawn and photographed or sketched. All with design ideas are welcome at this meeting. We now have a list of acceptable plants from CUH, so we can design the first bed. We need to submit a design to CUH before we plant. We'll plant in the fall, after we've planted lots of bulbs. Below is a quick sketch of the dimensions of the first two beds, and an overall schematic of the site [Download the PDF]. The Bulb PDF and Master Planting Plan PDF documents are also now available. A Google Maps map of the site is also viewable.
Helenium 'Mardi Gras' and Geranium 'Rozanne' — at UW Center For Urban Horticulture.
We've been working hard in the Blooms of Bressingham Plant Evaluation beds and have several useful documents available to manage our observations.
Firstly, print this PDF to record field notes. We'll transcribe your field notes onto the master list. There are four tabs/sections on the Blooms Trial Data Master List, which collates all of our maintenance and observation data.
We decided at our board meeting last night to alternate weeks for our work parties. We'll decide whether the Bressingham beds or Entrance Bed 1 is where we'll work, once we are there and see what needs to be done. Bring a hat, water and sunscreen and bring whatever you like to weed with – a hori-hori, or trowel, etc. Also bring a garden fork, a rake, and maybe a shovel and broom.
If it's a morning work party, we'll head to Burgermaster afterward for lunch.
The Bressingham beds are near the CUH building, so the nearest parking is near the CUH buildings. Entrance Bed #1 is near the road, so the nearest parking is on 35th NE before the turn into CUH.
If you're concerned, please read this fact sheet about Heat Stress [PDF], or read more online.


Kwok Pui-lan is Professor of Christian Theology and Spirituality at the Episcopal Divinity School in Cambridge, MA.
She is an Asian feminist theologian that I've always been very impressed with. Her writing on the role of the Bible in a non-Bible culture was eye-opening–as well as all of her scripture interpretation from the perspective of the colonialized.
The tears of Tiananmen mothers have not dried.
The curse of the wrongful deaths has not been lifted.
And not allow distorted history have the last word . . .
The light of our hope will be as long. . .
Kwok Pui-lan's the author of Postcolonial Imagination and Feminist Theology, and editor of the major 4-volume reference work Women and Christianity (coming out in October 2009 from Routledge).


text:
Nikon D3400 DSLR unveiled with SnapBridge technology
camera, D3400, dslr, lens, nikon, Photokina 2016, telephoto lens, zoom lens
August 17, 2016/MCPActions
Blog / News and Reviews / Nikon D3400 DSLR unveiled with SnapBridge technology
Makeup Toolkit Premium Photoshop Action
Inspire™ Photoshop Actions
Portrait Suite Frequency Separation Photoshop Action
Nikon has just revealed the D3400 DSLR, like the rumor mill expected. The new entry-level camera comes alongside four lenses, two of which were confirmed earlier this year.
At the beginning of 2016 it became clear that Nikon was going to launch a new D3000-series camera this year. After being mentioned within the gossip mill a few times, the so-called Nikon D3400 is finally official.
The shooter is joined by four optics, as follows: AF-P DX Nikkor 18-55mm f/3.5-5.6G VR, AF-P DX Nikkor 18-55mm f/3.5-5.6G, AF-P DX Nikkor 70-300mm f/4.5-6.3G ED VR, and AF-P DX Nikkor 70-300mm f/4.5-6.3G ED.
The former pair was introduced in early 2016, but its price and release date were not confirmed. Now, everything is official and here is what you can expect from all these new products!
Nikon D3400 DSLR camera becomes official
From the get go, we have to say that the company's new entry-level DSLR is not a major improvement over its predecessor. However, there are some notable changes compared to the D3300. According to Nikon, the D3400 has a new 24.2-megapixel APS-C CMOS image sensor without an anti-aliasing filter. Still, the megapixel count is identical to the one of it sheir.
Nikon D3400 comes packed with a 24.2MP sensor.
A battery life of 1,200 shots on a single charge is now available, compared to the previous version's 700 shots on a single charge. The SnapBridge technology has also been added to the D3400, allowing the camera to connect to a smartphone or tablet via Bluetooth.
Nikon D3400 features a 1.200-shot per charge battery life.
The new unit is lighter than the old one, while the Guide Mode has been revamped in order to be better and easier to use. Unfortunately, the Japanese manufacturer has decided to remove the ultrasonic sensor cleaning system as well as the external microphone port.
Other than that, the device has a maximum ISO of 25,600, 12-bit RAW support, 11 autofocus points, 3-inch LCD, 1/4000th of a second maximum shutter speed, built-in flash, and a continuous mode of 5 fps.
Nikon D3400 can be linked with a mobile device via Bluetooth connectivity.
Nikon D3400 records up to full HD videos at 60fps and will be released alongside the AF-P DX 18-55mm f/3.5-5.6G VR lens this September for a price of $649.99.
AF-P DX Nikkor 18-55mm and 70-300mm f/4.5-6.3G revealed alongside their non-VR versions
As stated above, Nikon has confirmed the price and release date details of four new lenses. The AF-P DX Nikkor 18-55mm f/3.5-5.6G VR and the non-stabilized version were unveiled in January 2016.
Now we know that they will be available for purchase as standalone products as of September 2016 for $249.95 for the stabilized unit and, respectively $199.95 for the non-VR version. Both have stepping motors, a first for a Nikon DSLR lens, while the VR model will provide up to 4-stop stabilization.
The four new Nikon AF-P DX zoom lenses will be released on the market in September 2016.
The AF-P DX Nikkor 70-300mm f/4.5-6.3G ED VR and non-VR version lenses also come packed with stepper motors. The VR model will also be $50 more expensive than the non-VR one, whose Vibration Reduction technology will offer 4-stop stabilization when active.
Users will have to pay $399.95 for the VR version when it becomes available in September. All of them, including the Nikon D3400 DSLR, will be on display at Photokina 2016, but we are expecting to see many more at the event, so stay tuned!
Posted in News and Reviews
← Fujifilm X-A3 launch event to take place later this August
GoPro Hero 5 specs to include larger touchscreen and GPS →


text:
"""Hold the functions that do the real work generating payloads."""

from __future__ import print_function

import base64
import datetime
import filecmp
import json
import os
import shutil
import sys
import tempfile

from chromite.cbuildbot import constants
from chromite.lib import cros_build_lib
from chromite.lib import cros_logging as logging
from chromite.lib import osutils
from chromite.lib.paygen import dryrun_lib
from chromite.lib.paygen import filelib
from chromite.lib.paygen import gspaths
from chromite.lib.paygen import signer_payloads_client
from chromite.lib.paygen import urilib
from chromite.lib.paygen import utils

# Needed for the dev.host.lib import below.
sys.path.insert(0, os.path.join(constants.SOURCE_ROOT, 'src', 'platform'))

DESCRIPTION_FILE_VERSION = 1

class Error(Exception):
  """Base class for payload generation errors."""

class UnexpectedSignerResultsError(Error):
  """This is raised when signer results don't match our expectations."""

class PayloadVerificationError(Error):
  """Raised when the generated payload fails to verify."""

class _PaygenPayload(object):
  """Class to manage the process of generating and signing a payload."""

  # What keys do we sign payloads with, and what size are they?
  PAYLOAD_SIGNATURE_KEYSETS = ('update_signer',)
  PAYLOAD_SIGNATURE_SIZES_BYTES = (2048 / 8,)  # aka 2048 bits in bytes.

  TEST_IMAGE_NAME = 'chromiumos_test_image.bin'
  RECOVERY_IMAGE_NAME = 'chromiumos_recovery_image.bin'

  # Default names used by cros_generate_update_payload for extracting old/new
  # kernel/rootfs partitions.
  _DEFAULT_OLD_KERN_PART = 'old_kern.dat'
  _DEFAULT_OLD_ROOT_PART = 'old_root.dat'
  _DEFAULT_NEW_KERN_PART = 'new_kern.dat'
  _DEFAULT_NEW_ROOT_PART = 'new_root.dat'

  # TODO(garnold)(chromium:243559) stop using these constants once we start
  # embedding partition sizes in payloads.
  _DEFAULT_ROOTFS_PART_SIZE = 2 * 1024 * 1024 * 1024
  _DEFAULT_KERNEL_PART_SIZE = 16 * 1024 * 1024

  def __init__(self, payload, cache, work_dir, sign, verify,
               au_generator_uri_override, dry_run=False):
    """Init for _PaygenPayload.

    Args:
      payload: An instance of gspaths.Payload describing the payload to
               generate.
      cache: An instance of DownloadCache for retrieving files.
      work_dir: A working directory for output files. Can NOT be shared.
      sign: Boolean saying if the payload should be signed (normally, you do).
      verify: whether the payload should be verified after being generated
      au_generator_uri_override: URI to override standard au_generator.zip
          rules.
      dry_run: do not do any actual work
    """
    self.payload = payload
    self.cache = cache
    self.work_dir = work_dir
    self._verify = verify
    self._au_generator_uri_override = au_generator_uri_override
    self._drm = dryrun_lib.DryRunMgr(dry_run)

    self.generator_dir = os.path.join(work_dir, 'au-generator')
    self.src_image_file = os.path.join(work_dir, 'src_image.bin')
    self.tgt_image_file = os.path.join(work_dir, 'tgt_image.bin')

    self.payload_file = os.path.join(work_dir, 'delta.bin')
    self.delta_log_file = os.path.join(work_dir, 'delta.log')
    self.description_file = os.path.join(work_dir, 'delta.json')

    self.signer = None

    # If we are a bootstrap environment, this import will fail, so don't
    # perform it until we need it.
    from dev.host.lib import update_payload

    self._update_payload = update_payload

    if sign:
      self.signed_payload_file = self.payload_file + '.signed'
      self.metadata_signature_file = self._MetadataUri(self.signed_payload_file)

      self.signer = signer_payloads_client.SignerPayloadsClientGoogleStorage(
          payload.tgt_image.channel,
          payload.tgt_image.board,
          payload.tgt_image.version,
          payload.tgt_image.bucket)

  def _MetadataUri(self, uri):
    """Given a payload uri, find the uri for the metadata signature."""
    return uri + '.metadata-signature'

  def _DeltaLogsUri(self, uri):
    """Given a payload uri, find the uri for the delta generator logs."""
    return uri + '.log'

  def _JsonUri(self, uri):
    """Given a payload uri, find the uri for the json payload description."""
    return uri + '.json'

  def _PrepareGenerator(self):
    """Download, and extract au-generate.zip into self.generator_dir."""
    if self._au_generator_uri_override:
      generator_uri = self._au_generator_uri_override
    else:
      generator_uri = gspaths.ChromeosReleases.GeneratorUri(
          self.payload.tgt_image.channel,
          self.payload.tgt_image.board,
          self.payload.tgt_image.version)

    logging.info('Preparing au-generate.zip from %s.', generator_uri)

    # Extract zipped delta generator files to the expected directory.
    tmp_zip = self.cache.GetFileInTempFile(generator_uri)
    utils.RunCommand(['unzip', '-o', '-d', self.generator_dir, tmp_zip.name],
                     redirect_stdout=True, redirect_stderr=True)
    tmp_zip.close()

  def _RunGeneratorCmd(self, cmd):
    """Wrapper for RunCommand for programs in self.generator_dir.

    Adjusts the program name for the current self.au_generator directory, and
    sets up the special requirements needed for these 'out of chroot'
    programs. Will automatically log the command output if execution resulted
    in a nonzero exit code. Note that the command's stdout and stderr are
    combined into a single string. This also sets the TMPDIR variable
    accordingly in the spawned process' environment.

    Args:
      cmd: Program and argument list in a list. ['delta_generator', '--help']

    Returns:
      The output of the executed command.

    Raises:
      cros_build_lib.RunCommandError if the command exited with a nonzero code.
    """
    # Adjust the command name to match the directory it's in.
    cmd[0] = os.path.join(self.generator_dir, cmd[0])

    # Modify the PATH and TMPDIR when running the script.
    extra_env = {
        'PATH': utils.PathPrepend(self.generator_dir),
        'TMPDIR': self.work_dir}

    # Run the command.
    result = cros_build_lib.RunCommand(
        cmd,
        cwd=self.generator_dir,
        redirect_stdout=True,
        combine_stdout_stderr=True,
        error_code_ok=True,
        extra_env=extra_env)

    # Dump error output and raise an exception if things went awry.
    if result.returncode:
      logging.error('Nonzero exit code (%d), dumping command output:\n%s',
                    result.returncode, result.output)
      raise cros_build_lib.RunCommandError(
          'Command failed: %s (cwd=%s)' % (' '.join(cmd), self.generator_dir),
          result)

    return result.output

  @staticmethod
  def _BuildArg(flag, dict_obj, key, default=None):
    """Returns a command-line argument iff its value is present in a dictionary.

    Args:
      flag: the flag name to use with the argument value, e.g. --foo; if None
            or an empty string, no flag will be used
      dict_obj: a dictionary mapping possible keys to values
      key: the key of interest; e.g. 'foo'
      default: a default value to use if key is not in dict_obj (optional)

    Returns:
      If dict_obj[key] contains a non-False value or default is non-False,
      returns a list containing the flag and value arguments (e.g. ['--foo',
      'bar']), unless flag is empty/None, in which case returns a list
      containing only the value argument (e.g.  ['bar']). Otherwise, returns an
      empty list.
    """
    arg_list = []
    val = dict_obj.get(key) or default
    if val:
      arg_list = [str(val)]
      if flag:
        arg_list.insert(0, flag)

    return arg_list

  def _PrepareImage(self, image, image_file):
    """Download an prepare an image for delta generation.

    Preparation includes downloading, extracting and converting the image into
    an on-disk format, as necessary.

    Args:
      image: an object representing the image we're processing
      image_file: file into which the prepared image should be copied.
    """

    logging.info('Preparing image from %s as %s', image.uri, image_file)

    # Figure out what we're downloading and how to handle it.
    image_handling_by_type = {
        'signed': (None, True),
        'test': (self.TEST_IMAGE_NAME, False),
        'recovery': (self.RECOVERY_IMAGE_NAME, True),
    }
    extract_file, _ = image_handling_by_type[image.get('image_type', 'signed')]

    # Are we donwloading an archive that contains the image?
    if extract_file:
      # Archive will be downloaded to a temporary location.
      with tempfile.NamedTemporaryFile(
          prefix='image-archive-', suffix='.tar.xz', dir=self.work_dir,
          delete=False) as temp_file:
        download_file = temp_file.name
    else:
      download_file = image_file

    # Download the image file or archive.
    self.cache.GetFileCopy(image.uri, download_file)

    # If we downloaded an archive, extract the image file from it.
    if extract_file:
      cmd = ['tar', '-xJf', download_file, extract_file]
      cros_build_lib.RunCommand(cmd, cwd=self.work_dir)

      # Rename it into the desired image name.
      shutil.move(os.path.join(self.work_dir, extract_file), image_file)

      # It's safe to delete the archive at this point.
      os.remove(download_file)

  def _GenerateUnsignedPayload(self):
    """Generate the unsigned delta into self.payload_file."""
    # Note that the command run here requires sudo access.

    logging.info('Generating unsigned payload as %s', self.payload_file)

    tgt_image = self.payload.tgt_image
    cmd = ['cros_generate_update_payload',
           '--outside_chroot',
           '--output', self.payload_file,
           '--image', self.tgt_image_file,
           '--channel', tgt_image.channel,
           '--board', tgt_image.board,
           '--version', tgt_image.version]
    cmd += self._BuildArg('--key', tgt_image, 'key', default='test')
    cmd += self._BuildArg('--build_channel', tgt_image, 'image_channel',
                          default=tgt_image.channel)
    cmd += self._BuildArg('--build_version', tgt_image, 'image_version',
                          default=tgt_image.version)

    if self.payload.src_image:
      src_image = self.payload.src_image
      cmd += ['--src_image', self.src_image_file,
              '--src_channel', src_image.channel,
              '--src_board', src_image.board,
              '--src_version', src_image.version]
      cmd += self._BuildArg('--src_key', src_image, 'key', default='test')
      cmd += self._BuildArg('--src_build_channel', src_image, 'image_channel',
                            default=src_image.channel)
      cmd += self._BuildArg('--src_build_version', src_image, 'image_version',
                            default=src_image.version)

    delta_log = self._RunGeneratorCmd(cmd)
    self._StoreDeltaLog(delta_log)

  def _GenPayloadHash(self):
    """Generate a hash of payload and metadata.

    Works from an unsigned update payload.

    Returns:
      payload_hash as a string.
    """
    logging.info('Calculating payload hashes on %s.', self.payload_file)

    # How big will the signatures be.
    signature_sizes = [str(size) for size in self.PAYLOAD_SIGNATURE_SIZES_BYTES]

    with tempfile.NamedTemporaryFile('rb') as payload_hash_file:
      cmd = ['delta_generator',
             '-in_file=' + self.payload_file,
             '-out_hash_file=' + payload_hash_file.name,
             '-signature_size=' + ':'.join(signature_sizes)]

      self._RunGeneratorCmd(cmd)
      return payload_hash_file.read()

  def _MetadataSize(self):
    """Discover the metadata size.

    The payload generator should return this information when calculating the
    metadata hash, but would require a lot of new plumbing. Instead we just
    look it up ourselves.

    Returns:
      int value of the metadata size.
    """
    with open(self.payload_file) as payload_file:
      payload = self._update_payload.Payload(payload_file)
      payload.Init()
      return payload.data_offset

  def _GenMetadataHash(self):
    """Generate a hash of payload and metadata.

    Works from an unsigned update payload.

    Returns:
      metadata_hash as a string.
    """
    logging.info('Calculating payload hashes on %s.', self.payload_file)

    # How big will the signatures be.
    signature_sizes = [str(size) for size in self.PAYLOAD_SIGNATURE_SIZES_BYTES]

    with tempfile.NamedTemporaryFile('rb') as metadata_hash_file:
      cmd = ['delta_generator',
             '-in_file=' + self.payload_file,
             '-out_metadata_hash_file=' + metadata_hash_file.name,
             '-signature_size=' + ':'.join(signature_sizes)]

      self._RunGeneratorCmd(cmd)
      return metadata_hash_file.read()

  def _GenerateSignerResultsError(self, format_str, *args):
    """Helper for reporting errors with signer results."""
    msg = format_str % args
    logging.error(msg)
    raise UnexpectedSignerResultsError(msg)

  def _SignHashes(self, hashes):
    """Get the signer to sign the hashes with the update payload key via GS.

    May sign each hash with more than one key, based on how many keysets are
    required.

    Args:
      hashes: List of hashes to be signed.

    Returns:
      List of lists which contain each signed hash.
      [[hash_1_sig_1, hash_1_sig_2], [hash_2_sig_1, hash_2_sig_2]]
    """
    logging.info('Signing payload hashes with %s.',
                 ', '.join(self.PAYLOAD_SIGNATURE_KEYSETS))

    # Results look like:
    #  [[hash_1_sig_1, hash_1_sig_2], [hash_2_sig_1, hash_2_sig_2]]
    hashes_sigs = self.signer.GetHashSignatures(
        hashes,
        keysets=self.PAYLOAD_SIGNATURE_KEYSETS)

    if hashes_sigs is None:
      self._GenerateSignerResultsError('Signing of hashes failed')
    if len(hashes_sigs) != len(hashes):
      self._GenerateSignerResultsError(
          'Count of hashes signed (%d) != Count of hashes (%d).',
          len(hashes_sigs),
          len(hashes))

    # Make sure that the results we get back the expected number of signatures.
    for hash_sigs in hashes_sigs:
      # Make sure each hash has the right number of signatures.
      if len(hash_sigs) != len(self.PAYLOAD_SIGNATURE_SIZES_BYTES):
        self._GenerateSignerResultsError(
            'Signature count (%d) != Expected signature count (%d)',
            len(hash_sigs),
            len(self.PAYLOAD_SIGNATURE_SIZES_BYTES))

      # Make sure each hash signature is the expected size.
      for sig, sig_size in zip(hash_sigs, self.PAYLOAD_SIGNATURE_SIZES_BYTES):
        if len(sig) != sig_size:
          self._GenerateSignerResultsError(
              'Signature size (%d) != expected size(%d)',
              len(sig),
              sig_size)

    return hashes_sigs

  def _InsertPayloadSignatures(self, signatures):
    """Put payload signatures into the payload they sign.

    Args:
      signatures: List of signatures for the payload.
    """
    logging.info('Inserting payload signatures into %s.',
                 self.signed_payload_file)

    signature_files = [utils.CreateTempFileWithContents(s) for s in signatures]
    signature_file_names = [f.name for f in signature_files]

    cmd = ['delta_generator',
           '-in_file=' + self.payload_file,
           '-signature_file=' + ':'.join(signature_file_names),
           '-out_file=' + self.signed_payload_file]

    self._RunGeneratorCmd(cmd)

    for f in signature_files:
      f.close()

  def _StoreMetadataSignatures(self, signatures):
    """Store metadata signatures related to the payload.

    Our current format for saving metadata signatures only supports a single
    signature at this time.

    Args:
      signatures: A list of metadata signatures in binary string format.
    """
    if len(signatures) != 1:
      self._GenerateSignerResultsError(
          'Received %d metadata signatures, only a single signature supported.',
          len(signatures))

    logging.info('Saving metadata signatures in %s.',
                 self.metadata_signature_file)

    encoded_signature = base64.b64encode(signatures[0])

    with open(self.metadata_signature_file, 'w+') as f:
      f.write(encoded_signature)

  def _StorePayloadJson(self, metadata_signatures):
    """Generate the payload description json file.

    The payload description contains a dictionary with the following
    fields populated.

    {
      "version": 1,
      "sha1_hex": <payload sha1 hash as a hex encoded string>,
      "sha256_hex": <payload sha256 hash as a hex encoded string>,
      "md5_hex": <payload md5 hash as a hex encoded string>,
      "metadata_size": <integer of payload metadata covered by signature>,
      "metadata_signature": <metadata signature as base64 encoded string or nil>
    }

    Args:
      metadata_signatures: A list of signatures in binary string format.
    """
    # Locate everything we put in the json.
    sha1_hex, sha256_hex = filelib.ShaSums(self.payload_file)
    md5_hex = filelib.MD5Sum(self.payload_file)

    metadata_signature = None
    if metadata_signatures:
      if len(metadata_signatures) != 1:
        self._GenerateSignerResultsError(
            'Received %d metadata signatures, only one supported.',
            len(metadata_signatures))
      metadata_signature = base64.b64encode(metadata_signatures[0])

    # Bundle it up in a map matching the Json format.
    # Increment DESCRIPTION_FILE_VERSION, if changing this map.
    payload_map = {
        'version': DESCRIPTION_FILE_VERSION,
        'sha1_hex': sha1_hex,
        'sha256_hex': sha256_hex,
        'md5_hex': md5_hex,
        'metadata_size': self._MetadataSize(),
        'metadata_signature': metadata_signature,
    }

    # Convert to Json.
    payload_json = json.dumps(payload_map, sort_keys=True)

    # Write out the results.
    osutils.WriteFile(self.description_file, payload_json)

  def _StoreDeltaLog(self, delta_log):
    """Store delta log related to the payload.

    Write out the delta log to a known file name. Mostly in it's own function
    to simplify unittest mocks.

    Args:
      delta_log: The delta logs as a single string.
    """
    with open(self.delta_log_file, 'w+') as f:
      f.write(delta_log)

  def _SignPayload(self):
    """Wrap all the steps for signing an existing payload.

    Returns:
      List of payload signatures, List of metadata signatures.
    """
    # Create hashes to sign.
    payload_hash = self._GenPayloadHash()
    metadata_hash = self._GenMetadataHash()

    # Sign them.
    # pylint: disable=unpacking-non-sequence
    payload_signatures, metadata_signatures = self._SignHashes(
        [payload_hash, metadata_hash])
    # pylint: enable=unpacking-non-sequence

    # Insert payload signature(s).
    self._InsertPayloadSignatures(payload_signatures)

    # Store Metadata signature(s).
    self._StoreMetadataSignatures(metadata_signatures)

    return (payload_signatures, metadata_signatures)

  def _Create(self):
    """Create a given payload, if it doesn't already exist."""

    logging.info('Generating %s payload %s',
                 'delta' if self.payload.src_image else 'full', self.payload)

    # Fetch and extract the delta generator.
    self._PrepareGenerator()

    # Fetch and prepare the tgt image.
    self._PrepareImage(self.payload.tgt_image, self.tgt_image_file)

    # Fetch and prepare the src image.
    if self.payload.src_image:
      self._PrepareImage(self.payload.src_image, self.src_image_file)

    # Generate the unsigned payload.
    self._GenerateUnsignedPayload()

    # Sign the payload, if needed.
    metadata_signatures = None
    if self.signer:
      _, metadata_signatures = self._SignPayload()

    # Store hash and signatures json.
    self._StorePayloadJson(metadata_signatures)

  def _CheckPayloadIntegrity(self, payload, is_delta, metadata_sig_file_name):
    """Checks the integrity of a generated payload.

    Args:
      payload: an pre-initialized update_payload.Payload object.
      is_delta: whether or not this is a delta payload (Boolean).
      metadata_sig_file_name: metadata signature file.

    Raises:
      PayloadVerificationError: when an error is encountered.
    """
    logging.info('Checking payload integrity')
    with utils.CheckedOpen(metadata_sig_file_name) as metadata_sig_file:
      try:
        # TODO(garnold)(chromium:243559) partition sizes should be embedded in
        # the payload; ditch the default values once it's done.
        # TODO(garnold)(chromium:261417) this disables the check for unmoved
        # blocks in MOVE sequences, which is an inefficiency but not
        # necessarily a problem.  It should be re-enabled once the delta
        # generator can optimize away such cases.
        payload.Check(metadata_sig_file=metadata_sig_file,
                      assert_type=('delta' if is_delta else 'full'),
                      rootfs_part_size=self._DEFAULT_ROOTFS_PART_SIZE,
                      kernel_part_size=self._DEFAULT_KERNEL_PART_SIZE,
                      disabled_tests=['move-same-src-dst-block'])
      except self._update_payload.PayloadError as e:
        raise PayloadVerificationError(
            'Payload integrity check failed: %s' % e)

  def _ApplyPayload(self, payload, is_delta):
    """Applies a generated payload and verifies the result.

    Args:
      payload: an pre-initialized update_payload.Payload object.
      is_delta: whether or not this is a delta payload (Boolean).

    Raises:
      PayloadVerificationError: when an error occurs.
    """
    # Extract the source/target kernel/rootfs partitions.
    # TODO(garnold)(chromium:243561) this is a redundant operation as the
    # partitions are already extracted (in some form) for the purpose of
    # payload generation. We should only do this once.
    cmd = ['cros_generate_update_payload',
           '--outside_chroot',
           '--extract',
           '--image', self.tgt_image_file]
    part_files = {}
    part_files['new_kernel_part'] = self._DEFAULT_NEW_KERN_PART
    part_files['new_rootfs_part'] = self._DEFAULT_NEW_ROOT_PART
    if is_delta:
      cmd += ['--src_image', self.src_image_file]
      part_files['old_kernel_part'] = self._DEFAULT_OLD_KERN_PART
      part_files['old_rootfs_part'] = self._DEFAULT_OLD_ROOT_PART

    self._RunGeneratorCmd(cmd)

    for part_name, part_file in part_files.items():
      part_file = os.path.join(self.generator_dir, part_file)
      if not os.path.isfile(part_file):
        raise PayloadVerificationError('Failed to extract partition (%s)' %
                                       part_file)
      part_files[part_name] = part_file

    # Apply the payload and verify the result; make sure to pass in the
    # explicit path to the bspatch binary in the au-generator directory (the
    # one we need to be using), and not to depend on PATH resolution etc. Also
    # note that we instruct the call to generate files with a .test suffix,
    # which we can later compare to the actual target partition (as it was
    # extracted from the target image above).
    logging.info('Applying %s payload and verifying result',
                 'delta' if is_delta else 'full')
    ref_new_kern_part = part_files['new_kernel_part']
    part_files['new_kernel_part'] += '.test'
    ref_new_root_part = part_files['new_rootfs_part']
    part_files['new_rootfs_part'] += '.test'
    bspatch_path = os.path.join(self.generator_dir, 'bspatch')
    try:
      payload.Apply(bspatch_path=bspatch_path, **part_files)
    except self._update_payload.PayloadError as e:
      raise PayloadVerificationError('Payload failed to apply: %s' % e)

    # Prior to comparing, remove unused space past the filesystem boundary
    # in the extracted target partitions.
    filelib.TruncateToSize(ref_new_kern_part,
                           os.path.getsize(part_files['new_kernel_part']))
    filelib.TruncateToSize(ref_new_root_part,
                           os.path.getsize(part_files['new_rootfs_part']))

    # Compare resulting partitions with the ones from the target image.
    if not filecmp.cmp(ref_new_kern_part, part_files['new_kernel_part']):
      raise PayloadVerificationError('Resulting kernel partition corrupted')
    if not filecmp.cmp(ref_new_root_part, part_files['new_rootfs_part']):
      raise PayloadVerificationError('Resulting rootfs partition corrupted')

  def _VerifyPayload(self):
    """Checks the integrity of the generated payload.

    Raises:
      PayloadVerificationError when the payload fails to verify.
    """
    if self.signer:
      payload_file_name = self.signed_payload_file
      metadata_sig_file_name = self.metadata_signature_file
    else:
      payload_file_name = self.payload_file
      metadata_sig_file_name = None

    with open(payload_file_name) as payload_file:
      payload = self._update_payload.Payload(payload_file)
      is_delta = bool(self.payload.src_image)
      try:
        payload.Init()

        # First, verify the payload's integrity.
        self._CheckPayloadIntegrity(payload, is_delta, metadata_sig_file_name)

        # Second, try to apply the payload and check the result.
        self._ApplyPayload(payload, is_delta)

      except self._update_payload.PayloadError as e:
        raise PayloadVerificationError('Payload failed to verify: %s' % e)

  def _UploadResults(self):
    """Copy the payload generation results to the specified destination."""

    logging.info('Uploading payload to %s.', self.payload.uri)

    # Deliver the payload to the final location.
    if self.signer:
      urilib.Copy(self.signed_payload_file, self.payload.uri)
      urilib.Copy(self.metadata_signature_file,
                  self._MetadataUri(self.payload.uri))
    else:
      urilib.Copy(self.payload_file, self.payload.uri)

    # Upload payload related artifacts.
    urilib.Copy(self.delta_log_file, self._DeltaLogsUri(self.payload.uri))
    urilib.Copy(self.description_file, self._JsonUri(self.payload.uri))

  def Run(self):
    """Create, verify and upload the results."""
    self._drm(self._Create)
    if self._verify:
      self._drm(self._VerifyPayload)
    self._drm(self._UploadResults)

def DefaultPayloadUri(payload, random_str=None):
  """Compute the default output URI for a payload.

  For a glob that matches all potential URIs for this
  payload, pass in a random_str of '*'.

  Args:
    payload: gspaths.Payload instance.
    random_str: A hook to force a specific random_str. None means generate it.

  Returns:
    Default URI for the payload.
  """
  src_version = None
  if payload.src_image:
    src_version = payload.src_image['version']

  if payload.tgt_image.get('image_type', 'signed') == 'signed':
    # Signed payload.
    return gspaths.ChromeosReleases.PayloadUri(
        channel=payload.tgt_image.channel,
        board=payload.tgt_image.board,
        version=payload.tgt_image.version,
        random_str=random_str,
        key=payload.tgt_image.key,
        image_channel=payload.tgt_image.image_channel,
        image_version=payload.tgt_image.image_version,
        src_version=src_version,
        bucket=payload.tgt_image.bucket)
  else:
    # Unsigned test payload.
    return gspaths.ChromeosReleases.PayloadUri(
        channel=payload.tgt_image.channel,
        board=payload.tgt_image.board,
        version=payload.tgt_image.version,
        random_str=random_str,
        src_version=src_version,
        bucket=payload.tgt_image.bucket)

def SetPayloadUri(payload, uri):
  """Sets (overrides) the URI in a payload object.

  Args:
    payload: gspaths.Payload instance.
    uri: A URI (string) to the payload file.
  """
  payload.uri = uri

def FillInPayloadUri(payload, random_str=None):
  """Fill in default output URI for a payload if missing.

  Args:
    payload: gspaths.Payload instance.
    random_str: A hook to force a specific random_str. None means generate it.
  """
  if not payload.uri:
    SetPayloadUri(payload, DefaultPayloadUri(payload, random_str))

def _FilterNonPayloadUris(payload_uris):
  """Filters out non-payloads from a list of GS URIs.

  This essentially filters out known auxiliary artifacts whose names resemble /
  derive from a respective payload name, such as files with .log and
  .metadata-signature extensions.

  Args:
    payload_uris: a list of GS URIs (potentially) corresopnding to payloads

  Returns:
    A filtered list of URIs.
  """
  return [uri for uri in payload_uris
          if not (uri.endswith('.log') or uri.endswith('.metadata-signature'))]

def FindExistingPayloads(payload):
  """Look to see if any matching payloads already exist.

  Since payload names contain a random component, there can be multiple
  names for a given payload. This function lists all existing payloads
  that match the default URI for the given payload.

  Args:
    payload: gspaths.Payload instance.

  Returns:
    List of URIs for existing payloads that match the default payload pattern.
  """
  search_uri = DefaultPayloadUri(payload, random_str='*')
  return _FilterNonPayloadUris(urilib.ListFiles(search_uri))

def FindCacheDir(work_dir=None):
  """Helper for deciding what cache directory to use.

  Args:
    work_dir: Directory that contains ALL work files, cache will
              be created inside it, if present.

  Returns:
    Returns a directory suitable for use with a DownloadCache. Will
    always be consistent if a consistent work_dir is passed in.
  """
  # Discover which directory to use for caching
  if work_dir:
    return os.path.join(work_dir, 'cache')
  else:
    return '/usr/local/google/payloads'

def CreateAndUploadPayload(payload, cache, work_dir, sign=True, verify=True,
                           dry_run=False, au_generator_uri=None):
  """Helper to create a PaygenPayloadLib instance and use it.

  Args:
    payload: An instance of utils.Payload describing the payload to generate.
    cache: An instance of DownloadCache for retrieving files.
    work_dir: A working directory that can hold scratch files. Will be cleaned
              up when done, and won't interfere with other users. None for /tmp.
    sign: Boolean saying if the payload should be signed (normally, you do).
    verify: whether the payload should be verified (default: True)
    dry_run: don't perform actual work
    au_generator_uri: URI to override standard au_generator.zip rules.
  """
  with osutils.TempDir(prefix='paygen_payload.', base_dir=work_dir) as gen_dir:
    logging.info('* Starting payload generation')
    start_time = datetime.datetime.now()

    _PaygenPayload(payload, cache, gen_dir, sign, verify, au_generator_uri,
                   dry_run=dry_run).Run()

    end_time = datetime.datetime.now()
    logging.info('* Finished payload generation in %s', end_time - start_time)


This 4K camcorder is designed for amateurs, not for Professional!
1. Please read the user manual carefully before use this digital camcorder.
2. Please format SD card before use camcorder,SD card is not include.
3. Please charging it up to 8 hours for first time, then 3 hours is enough.
4. Please pay attention to fixed focus range: Normal 1.5m to infinity.
5. Support Wireless App, Remote controlled, night vision,anti-shake, unique face detection, self-time.
7. Before using Wifi funtion,Please download "LzxViewer" APP in your mobile phone first!!!
8. In order to protect your battery, please remove the battery when finish your record.【Ansteker 4K Camcorders】- High quality 24MP video revolution , 30X digital zoom video camera Supports 270 degree rotation with 3.0 inches TFT-LCD, Supports standard tripod and SD/SDHC/TF card(128GB max).for actual 4K visual effect, please play picture or video on your computer or TV.
【Camcorder Feature】- Sony COMS Sensor 13 MP,IR Night Vision, IR cut filter, With LED light, remote controll, face capture, anti-shake, auto power-off, USB2.0, HDMI and TV output.
【Wide Angle Lens&External Microphone&Lens hood】Equipped with 2 in 1 HD 72mm professional 0.39x super wide angle lens and professional shotgun microphone, Pick up sound more clearly with a high-quality, low noise, thus enhance sound effect. and Lens hood is helpful for shooting in backlight.
【What You Get】- Ansteker 4K digital camcorder with microphone, wide angle lens, lens hood, Camcorder pouch, AV/USB cable, Lens cover Remote Control ,HDMI cable, Charger, 2*Rechargeable lithium battery, User manual and friendly after-sales services.


Daniel, a beagle mix dog, emerged scared but unharmed from a gas chamber on October 3rd, after trying to be euthanized by Animal Control in Alabama. He is now considered "Miracle Dog" because he survived.
Daniel was eventually flown to Eleventh Hour Rescue in New Jersey, a volunteer based organization which saves dogs from being put down. Now, two weeks later and he has found a home. Joe Dwyer and his family, along with four other dogs – a two dachshunds, a beagle mix, and a pit bull mix – have given Daniel a comfortable and permanent home.
This article really touched me in different ways. First, I was so glad to hear that the "Miracle Dog" Daniel was able to become adopted after surviving such a horrible death attempt. And while that is all good and dandy, it irks me to no end that nowhere in the article (the article above is my "summarized-in-my-own-words" version) does it mention the horrors of gas chambers and how to stop shelters and animal control facilities from using them.
So, because it was not mentioned anywhere in the article, I will take it into my own hands and cover how truly inhumane a gas chamber is and how we can try to stop them.
– It takes up to 25 to 30 minutes for an animal's life to end in the gas chamber and during that long half hour, the animal does not lose consciousness and brain function until after their organs shut down, which causes a prolonged suffering.
– It takes 3 to 5 seconds for the animal to lose consciousness and brain function with EBI and death happens within 2-5 minutes. The fact that they lose conciousness before they die means they have less suffering and pain.
– Euthanasia by Injection is done one animal at a time with a worker who comforts and and holds the frightened animal when it is injected; maybe the only kindness that animal has known.
– In gas chambers many animals, of the same species, are put there in at once. The noise, heat, and smell of the gas coming into the chamber frightens the animal and causes them to fight and attack one another, making it an even more inhumane way to die.
– It has obviously been reported, as seeing from "Miracle Dog" above, that not all animals die from gas chambers, making their experience that much more horrifying.
– All animals humanely and peacefully die with EBI.
The above was summarized from the Humane Euthanasia of Shelter Animals Fact Sheet from the American Humane Association. Click on the fact sheet's link to read detailed reasons why gas chambers are chambers of horror.
Now, how to stop shelters from using gas chambers. It is reported that only nine states have laws that ban all forms of gassing on every animal in shelters. To see that list, visit the fact sheet link above.
How can you get your voice heard against the use of gas chambers as a method of euthanasia? Well, for starters, visit the American Human Association's Stop Gassing page and see what you can do to speak out and help.
Remember, we are a voice for animals.
Posted in Animals, News & Opinion and tagged American Humane Association, animal care, animal control, animal cruelty, animal news, animal photos, animal rights, animal safety, animal shelters, animal stories, animals, animals in the news, article, articles, Daniel the miracle dog, EBI, euthanasia, Euthanasia by Injection, fact sheet, facts, gas chambers, helping out, how you can help, humane, Humane Euthanasia, inhumane, life, links, miracle dog, news, news and opinion, opinion, photo, photos, picture, pictures, shelter animals, stop animal gassing, stop gas chambers, The Huffington Post, the world, thought provoking. Bookmark the permalink.
Thanks for pointing this out, Kali. I live in Alabama and did not know the difference in killing methods. I long for the day when we do not have to put one animal down, but until that day comes, the most humane method is certainly the way to go. I will tell others, too. Thanks again.
Thank You, Harper. Yes, please let others know and bring it to the public's attention. The more support we can generate against the gas chambers, the more force we have to try and ban them in all States.


text:
Tag: Acomys cahirinus
On April 21, 2022 April 21, 2022 By Bernadette SimpsonIn PlantsLeave a comment
The distinctive yellow flower stalks and the pearl-like fruit of this desert shrub make it easy to recognize and remember. The pearl plant (Ochradenus baccatus) is quite common in the region and are spotted often on my wanders in the wadis near Dahab. In the springtime, they are buzzing with flying insects – bees, wasps, flies, hover flies, beetles, and more I'm sure. This shrub has been reported as one of the most important food sources for many animal species.
There's one species in particular that the plant has a special relationship with – the Egyptian spiny mouse (Acomys cahirinus). The fruit – a fleshy, juicy berry – is attractive to desert animals. But when an enzyme in the flesh of the berries combines with what's inside the seed, it creates a toxic "mustard oil bomb", deterring most animals from munching on this fruit (and destroying the seeds in the process). The spiny mouse has adapted to this, however. They will collect fruits and bring them to a different, rocky area, one that is safer for them. There, the mice chew and eat the flesh, careful not to bite the seed which they then spit out, avoiding any nastiness and helping to disperse the plant's seeds. One study suggests these safer places the mice choose are actually "the best places for young O. baccatus plants to germinate, grow and survive." How's that for some symbiotic behavior!
The Bedouin of Sinai have also found benefits of the pearl plant, using it in traditional medicine to cure joint pain. A bowl of water in which the leaves have been boiled is placed in a hole in the ground above which a makeshift tent is constructed. The patient then lies beneath its cover for 24 hours. Pearl plant is also used to cure aches and pains in a camel's body except instead of boiling the leaves, the plant is placed on embers in a hole. In Saudi Arabia, the plant is used to lower blood cholesterol and to counteract malaria.
Recently, a friend and fellow plant-lover asked me if this species had separate male and female plants as she had noticed that some plants were full of berries, while others only had a few. In dioecious plants, only the plants that grow female flowers produce fruit. Date palms are a good example. It turns out, though, that the pearl plant is gynodioecious, meaning that some plants have only female flowers and some plants are bisexual, having both male and female flowers. This explains the phenomenon my friend noticed – two plants, side by side, both in full bloom but only one seeming to fruit fully.
I've always liked this plant's Latin name, Ochradenus baccatus. Ochradenus comes from the Greek for "pale yellow" or "yellow ochre", and baccatus means "adorned with berries". It is also known as taily weed and shrubby or sweet mignonette in English and is called gurdhi by the Bedouin in South Sinai.
Bailey, C., & Danin, A. (1981). Bedouin plant utilization in the Sinai and the Negev. Economic Botany, 35(2), 145–162.
K.C. Burns. Seed Dispersal: The Blind Bomb Maker. Current Biology, Volume 22 (Issue 13), 2012, Pages R535-R537. https://doi.org/10.1016/j.cub.2012.05.014.


text:
VA to Adopt CDC Opioid Guidelines
December 21, 2015 / Pat Anson
The massive $1.1 trillion spending bill passed by Congress and signed into law by President Obama last week contains an early Christmas present for the nation's veterans.
Or it could be a lump of coal -- depending on your view about opioid pain medication.
Buried in the 2,009 page document is a provision requiring the Veteran's Administration to implement a number of measures to stop the "overdose epidemic" among veterans, including adoption of the controversial opioid prescribing guidelines being developed by the Centers for Disease Control and Prevention (CDC).
Those guidelines, which discourage primary care physicians from prescribing opioids for chronic pain, have now become official government policy at a federal agency before they're even finalized.
"To address mounting concerns about prescription drug abuse and an overdose epidemic among veterans, the bill directs VA to adopt the opioid prescribing guidelines developed by the Centers of Disease Control; to develop IT systems to track and monitor opioid prescriptions; to ensure all VA medical facilities are equipped with opioid receptor antagonists to treat drug overdoses; and to provide additional training to medical personnel who prescribe controlled substances," Sen. Barbara Mikulski (D-Maryland), Vice Chairwoman of the Senate Appropriations Committee, said in a summary of the omnibus bill sent to colleagues.
The VA was also instructed to report to Congress within 90 days on alternative treatments to opioids, as well as "how VA can better facilitate the use of safe and effective complementary and integrative health therapies for pain management."
The CDC, which recently delayed implementation of the opioid guidelines after widespread criticism from patients and advocacy groups, has repeatedly said the guidelines are "voluntary" and not intended for anyone other than primary care physicians.
But adoption of the guidelines by a federal agency that provides health care services to over 6 million patients is an early sign they will have a much broader impact, voluntary or not. Critics have warned that state regulators, licensing boards and professional medical societies could also adopt the CDC's guidelines, which would likely have a chilling effect on all doctors who prescribe opioids.
"This is disturbing. It doesn't help solve the opioid problem by codifying low evidence or no evidence recommendations," said Lynn Webster, MD, past president of the American Academy of Pain Medicine.
"The opioid crisis is serious, requiring thoughtful interventions that are evidence based. There are many evidence based recommendations that could be promulgated but have been ignored. I am very concerned that the soldiers who have sacrificed so much are not going to receive the treatment they deserve."
According to an Inspector General's study, more than half of the veterans being treated at the VA experience chronic pain, as well as other conditions that contribute to it, such as post-traumatic stress disorder. Because veterans are at high risk of opioid abuse and overdose, the VA implemented the Opioid Safety Initiative in 2013 to discourage its doctors from prescribing the drugs. The number of veterans prescribed opioids fell by 110,000, but alarms were raised when some vets turned to street drugs or suicide to stop their pain.
"Veterans are now required to see a prescriber every 30 days, but at the El Paso VA, they are unable to get an appointment, so they go without, or they do something they shouldn't — they buy them on the street," Rep. Beto O'Rourke, (D-Texas), told Military Times. "At a minimum, these veterans are suffering and in some cases, I would connect that suffering to suicide."
Several veterans have written to Pain News Network recently about their difficulty obtaining opioids from the VA for their chronic pain.
"The VA will only prescribe 10 mg oxycodone 3 times a day. This gives me no relief at all and now I'm very worried about what may come next," wrote an Army veteran with diabetic nerve pain who had a toe amputated. "When I asked to have this increased my VA PC (primary care) doc raised my gabapentin script and says if that doesn't work for my increased pain levels we may try Lyrica next . He ignores my statement that 15 mg of Oxy works in reducing my pain by 30%"
"After taking opiate pain meds for nearly 15 years, the VA has now decided to take them away. I had a decent life while on these, and now they have cut them in half, I am in constant pain. I wish some of these people that make these stupid decisions had to live like I do," a Vietnam veteran who had a leg amputated above the knee wrote to PNN.
"The pain meds allowed me to have some semblance of a normal life. Now that is gone. I don't know what I am going to do. I can understand now why vets turn to alcohol and other street drugs, because you have to do something to take the edge off this constant pain. But do they care? Not one whit. They practically throw this stuff at you when I first started going, now it is up to me to figure out how I am going to make it without any of it."
The federal spending bill provides $7.2 billion in funding for the CDC, which is $278 million more than last year. That includes $70 million to support state efforts to address prescription opioid abuse – more than triple the amount included in last year's bill.
The bill also provides $3.8 billion to the Substance Abuse and Mental Health Services Administration (SAMHSA), which is $160 million more than last year. Nearly $50 million is directed to address the "epidemic" of prescription drug and heroin overdose, $25 million is for addiction treatment in high-risk states, $12 million for naloxone distribution in 10 states; and $10 million for drug abuse prevention efforts in up to 20 states.
December 21, 2015 / Pat Anson/ 72 Comments
Addiction & Dependence, Pain Medication
Veterans Administration, VA, opioids, opioid guidelines, CDC, CDC guidelines
Congress Investigating CDC's Opioid ...
A Pained Life: Time for a New ...


text:
Podcasts & audiobooks to listen on your road trip home for the holidays
by Jessica Arnold
Dec 20, 2016 at 1:00 pm EDT
Image: Apple
These addicting audiobooks and podcasts will make you wish your road trip home would never end.
'A Man Called Ove'
Image: Audible
Meet Ove. He's a curmudgeon — the kind of man who points at people he dislikes as if they were burglars caught outside his bedroom window. He has staunch principles, strict routines and a short fuse. People call him "the bitter neighbor from hell." But behind his cranky exterior, there is a story and a sadness.
When to tune in: Scrooge has a new name this season. It's Ove, and he's got a new story to match.
'Secrets of Uncle Bertie's Botanarium'
Image: Howl
This is the story of an idle aristocratic plant enthusiast who sets out on an ambitious voyage to the Boiling Ocean — and beyond — to restore the good name of his long-lost Uncle Bertie, the disgraced botanist, and destroy pleasure once and for all!
When to tune in: If you want to make that car ride seems like some kind of Odyssey-worthy adventure, this is the podcast to listen to.
'Nerdist'
Image: Nerdist
"I am Chris Hardwick. I am on TV a lot and have a blog at nerdist.com. This podcast is basically just me talking about stuff and things with my two nerdy friends Jonah Ray and Matt Mira and usually someone more famous than all of us. Occasionally we swear because that is fun. I hope you like it, but if you don't, I'm sure you will not hesitate to unfurl your rage in the Reviews section because that's how the Internet works."
When to tune in: If you need a little Chris Hardwick in your life (which we all should), then listen away — not to mention his celeb guests like Anna Kendrick and John Stamos.
'The Chemist'
In this gripping thriller, an ex-agent on the run from her former employers must take one more case to clear her name and save her life.
When to tune in: Twilight creator Stephenie Meyer's latest book is a new story that still holds true to Meyer's ability to capture romantic suspense.
'My Favorite Murderer'
Image: Feral Audio
Ready yourself for a murder adventure hosted by Karen Kilgariff and Georgia Hardstark, two lifelong fans of true-crime stories. Each episode, the girls tell each other their favorite tales of murder and hear hometown crime stories from friends and fans. Check your anxiety at the door, 'cause Karen and Georgia are dying to discuss death.
When to tune in: If you're dying to discuss something other than mistletoe and Santa Claus, Kilgariff and Hardstark are your girls.
'Serial'
Image: Serial
"Serial tells one story — a true story — over the course of a season. Each season, we follow a plot and characters wherever they take us. We won't know what happens at the end until we get there, not long before you get there with us."
When to tune in: If you're sick of election talk, Serial will give the adults in your family something to really debate.
'Travels'
Fueled by a powerful curiosity — and by a need to see, feel and hear, firsthand and close-up — Michael Crichton's journeys have carried him into worlds diverse and compelling — swimming with mud sharks in Tahiti, tracking wild animals through the jungle of Rwanda. This is a record of those travels — an exhilarating quest across the familiar and exotic frontiers of the outer world, a determined odyssey into the unfathomable, spiritual depths of the inner world.
When to tune in: If you're a fan of Michael Crichton, this audiobook will give you a whole new perspective on his writing.
'Radiolab'
Image: Radiolab
Radiolab, with Jad Abumrad and Robert Krulwich, is a radio show and podcast weaving stories and science into sound and music-rich documentaries.
When to tune in: If you're looking to catch up on all those topics you never knew you wanted to know about, Radiolab has got you covered.
'The Subtle Art of Not Giving a F*ck'
In this generation-defining self-help guide, a superstar blogger cuts through the crap to show us how to stop trying to be positive all the time so that we can truly become better, happier people.
When to tune in: We all get tired of the holiday cheer. Embrace it for a bit.
'Citizen Radio'
Image: Citizen Radio
Jamie Kilstein and Allison Kilkenny have created an important political radio show that balances humor and unreported news. At a time when media conglomerates dominate the airwaves, independent media like Citizen Radio is vital to national discourse.
When to tune in: If you need news updates from someone other than your nasally Uncle Jerry, who loves the good old days.
'Alice Isn't Dead'
Image: Night Vale Presents
A truck driver searches across America for the wife she had long assumed was dead. In the course of her search, she will encounter not-quite-human serial murderers, towns literally lost in time and a conspiracy that goes way beyond one missing woman.
When to tune in: If you've had enough of Christmas carols, this fiction podcast is for you.
'Christmas Eve, 1914'
In 1914, the war which was to have been wrapped up by Christmas had — in reality — only just begun, as all sides entrenched themselves deeper into the Great War. Christmas Eve, 1914 follows one company of British officers as they rotate forward to spend their Christmas on the front lines, a mere 80 yards from the German guns.
When to tune in: Find your Christmas gratitude with this stunning audiobook.
'My Dad Wrote a Porno'
Image: Acast
Imagine if your dad wrote a dirty book. Most people would try to ignore it and pretend it had never happened — but not Jamie Morton. Instead, he's decided to read it to the world in this brand-new comedy podcast. With the help of his friends, James Cooper and BBC Radio 1's Alice Levine, Jamie will be reading a chapter a week and discovering more about his father than he ever bargained for.
When to tune in: Families are weird. Don't worry, it's not just yours. This podcast is sure to make you feel better.
'The Moth'
Image: The Moth
The premise is simple: True stories told live.
When to tune in: When your dad starts in on his infamous tales of youth that you've heard a hundred times, catch a break with these new tales.
'The Sleeper and the Spindle'
You may think you know this story. There's a young queen about to be married. There are some good, brave, hardy dwarfs; a castle shrouded in thorns; and a princess cursed by a witch, so rumor has it, to sleep forever.
But no one is waiting for a noble prince to appear on his trusty steed here. This fairy tale is spun with a thread of dark magic, which twists and turns and glints and shines. A queen might just prove herself a hero if a princess needs rescuing.
When to tune in: If you're ready for some holiday girl power, this is your read.
'Welcome to Night Vale'
Image: Welcome to Night Vale
Welcome to Night Vale is a twice-monthly podcast in the style of community updates for the small desert town of Night Vale, featuring local weather, news, announcements from the sheriff's secret police, mysterious lights in the night sky, dark hooded figures with unknowable powers and cultural events.
When to tune in: That isn't Santa on your roof… These stories will have you itching to leave the lights on.
'Romeo and Juliet: A Novel'
It's a story you think you know: the age-old tale of "star-cross'd lovers"; two families at war; a romance, so pure and absolute, fated for a tragic end. It's a story so thoroughly embedded in our culture and so frequently retold. Yet nothing captures the spark, the possibility and the surprise of Shakespeare's work quite like this….
When to tune in: You aren't in middle school anymore, which mean you will probably, actually, really like and appreciate this novel.
'The Dead Authors Podcast'
Image: The Dead Authors Podcast
Legendary time-traveling writer H.G. Wells (Paul F. Tompkins) welcomes literary giants to The Upright Citizens Brigade Theatre in Los Angeles for a lively discussion in front of a live audience. Unscripted, barely researched, all fun!
When to tune in: If you need a good laugh and an insightful listen.
'This American Life'
Image: This American Life
There's a theme to each episode of This American Life and a variety of stories on that theme. Most of the stories are journalism, with an occasional comedy routine or essay.
When to tune in: Arguably one of the best podcasts ever made, there's really no time not worth listening to this one.
audiobooks road trip
All the Celebrity Couples Who Said I Do in 2019
Rip Torn & All the Celebrities We've Lost in 2019
The Best Beach Reads for Summer, According to Pinterest
Mario Lopez & All the Celebrities Who Have Had Babies in 2019 So Far
Danielle Brooks & All the Other Celebs Who Are Pregnant Right Now
All the Celebrity Breakups of 2019 — So Far


With Soup At Hand, Creamy Tomato enjoy the taste of tomato soup in a creamy and instant way. This easy to prepare soup can be prepared without any utensils. It only requires a microwave for heating and enjoying this delicious soup.
Soup At Hand, Creamy Tomato is a great way of enjoying your favorite creamy tomato soup on the go or even at home.