Download and Play Kitty Solitaire & Sweeper!
More About Kitty Solitaire & Sweeper!
Try to become the top cat collector! Introducing "Kitty Solitaire & Sweeper," a game that lets you enjoy both the Solitaire card game and Minesweeper puzzle game in a single app! It's free to play and there's no need to register or learn complicated controls. "Kitty Solitaire & Sweeper" is a free-to-play game in which you play Solitaire and Minesweeper, single-player games almost everyone has played at least once. Meanwhile, you also try to collect cute kitties. There are over 160 kinds of cats to collect! Why not start collecting the cute kitties waiting for you in all sorts of rooms right now! It's so easy to play. 1. Earn points by playing Minesweeper. 2. Earn points by playing Solitaire. 3. Use the points you've earned to collect cats by becoming friends with them! That's all you need to do! As you earn more points, more room types will become available and you can get new items. There's a wide assortment of items, including Kitty Teasers, Balls, and Catnip. Get as many as you can, then try to play with the cats you meet. Cats act super cute when you give them Catnip! There's also a wide assortment of cats from all over the world, including Japan, Asia, Europe, and the Mediterranean. There are even cats that live in the desert and those that like to swim! There are so many soft, fluffy kitties that you'll want to pet them all! Some of the cats are only rarely seen, so you'll have to try hard to collect them! You'll get a bonus for logging in two or more days in row, so try your best to come collect cats every day. If you collect every last cat available, you'll earn the title Top Cat Collector. But the fun doesn't end there! Days with 2 in them (the 2nd, 12th, 22nd) are Cat Days where special bonuses await! You might even get a super rare item! Use your invitation ID to get bonus items by inviting your friends to play! Try "Kitty Solitaire & Sweeper" now, and start playing with the cutest darn kitties you've ever seen! Kitty Solitaire & Sweeper's Key Points • A great value because you can play the familiar classic games Solitaire and Minesweeper in a single app. • Simple and easy to play, making it perfect for when you have a spare moment. • Over 160 of the cutest, most darling cats you've ever seen. Collect them all!
Related Games for Kitty Solitaire & Sweeper!


text:
Q: My C++ program is not keeping track of my 3n+1 longest sequence The final output for this code if you enter 1 then 5 is...

The longest sequence with a start value in the range [1, 5] has 8 elements.

But instead I'm getting {16 elements}.
I believe the issue might be with my counter system, and returns. Does anyone have any advice on how I can fix this?
#include <iostream>

using namespace std;
// Functions
void getUserInput(int &start, int &end);
int longestSequence(int minimum, int maximum);
int getNextElement(int x);
string generateSequence(); // still need to write definition
int counter = 1;

int main()
{
    int minimum;
    int maximum;
    int last;

    getUserInput(minimum, maximum); //
    last = longestSequence(minimum, maximum); // starts longest sequence counter

    cout << "The longest sequence with a start value in the range [" << minimum
         << ", " << maximum << "] has " << last << " elements." << endl;

    return 0;
}

void getUserInput(int &start, int &end)
{
    cout << "Enter the min of the range for the sequence to start " << endl;
    cin >> start;
    cout << "Enter the max of the range for the sequence to start " << endl;
    cin >> end;
}

int getNextElement(int x) // // This function does the 3n+1 computation
{

    if (x != 1) // Checks for the end of the sequence. The end being when the number is 1.
    {
        counter++;
        if (x % 2 == 0) // checks if its even
            getNextElement(x / 2); // takes the new number through the function again
        else
            getNextElement(x * 3 + 1); // takes the new number into the function again
    }
    cout << "This is in getNextElement" << counter << endl;
    return counter; // this is returned as length in the longestSequence function.
}

int longestSequence(int minimum, int maximum) // this function compares all the sequence lengths within the range of minimum and maximum.
{
    int max = 0; // Longest seqence

    for (int i = minimum; i <= maximum; i++)
    {
        int length = getNextElement(i); // length is a temp that will hold the longest seqence

        if (length > max) // this loop validates if the newest "length" from the sequence is bigger than the previous one

            cout << "This is in the longest sequence loop ... length" << length
                 << endl;
        cout << "This is in the longest sequence loop AS MAX" << length << endl;
        max = length; // after the first run of the loop, max stores the longest seqence, and updates it after each run of the for loop if its longer
        // counter = 1; not sure why this is here
    }
    cout << "This is in longest sequence.... max " << max << endl;
    return max;
}

A: Reset your counter to 1 before calling int length = getNextElement(i).
You are getting 16 as output because each call to getNextElement(i) resumes the counter from where the last function call left.
counter=1;
int length = getNextElement(i);

just as you missed it right in your own code
// counter = 1; not sure why this is here

also, max is not updated to the greater length, but any length because it is outside the scope of the if for checking the greater one. So, put curly braces for the if condition and move the max=length inside it.

redpajama_set_name: RedPajamaStackExchange


text:
SHOP AUDIOBOOKS
Australian Audiobooks
Great First Listens
Best Audiobooks of 2019
Audible Member Benefits
Wicked Witches of the Midwest
33 books in series
4.5 out of 5 stars 90 ratings
I Dream of Twila Publisher's Summary
Twila Winchester isn't used to being in charge, but that's exactly where she finds herself when her sisters leave town for a business convention.
Twila thinks everything is going to be fun and games even though she has one daughter, two nieces, and one mischievous aunt to contend with. She's focused on cooking and having a good time...until a roving troupe of renaissance performers make camp on the Winchester property and trouble starts brewing.
When the head of the group starts making predictions - and, unfortunately, gets left behind - Twila has her hands full. It seems Aunt Tillie doesn't trust the new guest and she's determined to turn the three younger Winchesters into investigative dynamos.
Twila is working on a limited timetable. She must solve a mystery involving some missing items, open her home to a stranger, and crack down on Aunt Tillie's "lying" classes as her aunt attempts to teach Bay, Clove, and Thistle how to manipulate everyone in their paths.
Oh, and she has to do it all before Marnie and Winnie return to town.
No pressure, though.
Note: This is a 28,000-word short set in the Wicked Witches of the Midwest world. It is set back in time so it can be listened to at any point in the timeline.
©2017 Amanda M. Lee (P)2017 Amanda M. Lee
See a series you like?
Book one is on us
Try Audible free
After 30 days, Audible is $16.45/mo. Cancel anytime.
Book 0.5
I Dream of Twila
A Wicked Witches of the Midwest Short
By: Amanda M. Lee
Narrated by: Amy Johnson
Twila thinks everything is going to be fun and games even though she has one daughter, two nieces, and one mischievous aunt to contend with. She's focused on cooking and having a good time...until a roving troupe of renaissance performers make camp on the Winchester property and trouble starts brewing. When the head of the group starts making predictions - and, unfortunately, gets left behind - Twila has her hands full.
Add to basket failed.
Book 1-3
How Witch It Is
Wicked Witches of the Midwest, Books 1-3
Narrated by: Aris
Welcome to Hemlock Cove, where the town is magically rebranded - but real witches aren't necessarily welcome. That makes things hard for the Winchester witches - including local newspaper reporter Bay. She's got a persnickety family - wait until you met Aunt Tillie - and a penchant for stumbling across trouble.
Book Mystery Book 1
Any Witch Way You Can (Wicked Witches of the Midwest Book 1)
As the local editor of Hemlock Cove's only newspaper, she just happens to be present when a body is found in an area corn maze. To make matters worse, the police believe the murder may have something to do with the occult.
fun and sassy
By Kindle Customer on 05-12-2017
Every Witch Way but Wicked
A Wicked Witches of the Midwest Mystery, Book 2
Where there's a witch, there's a way! Where there's a whole family of them, there's trouble. Bay Winchester, editor of Hemlock Cove's small weekly newspaper, thinks her small hamlet's upcoming murder mystery weekend is going to be all about fun, food, and frolicking. Instead, when another dead body is discovered in Hemlock Cove, things turn into murder, mayhem, and migraines (the latter is mostly thanks to her family, of course).
OK storyline
By lola on 16-03-2016
Witching You Were Here
Wicked Witches of the Midwest, Book 3
The cold weather is keeping most tourists out of town, which is just fine with the Winchester witches. They're using the lull as a way to recharge and take a break - even if Aunt Tillie is causing her usual havoc.
Between a Witch and a Hard Place
Wicked Witches of the Midwest Books 4-6 (Wicked Witches of the Midwest Box Set Book 2)
The Winchester witches are at it again, and this time the stakes are higher than ever.Go along with Bay, Thistle, Clove, Aunt Tillie and the rest of the Winchester family (and their friends, of course) as they take on human traffickers, an angry poltergeist and a murderous bank robber.
Witching on a Star
After a long winter, spring has finally hit Hemlock Cove, and Bay Winchester thinks things are finally settling down in the town - and with her family. Unfortunately, just the opposite is true. As a way to distract Aunt Tillie, the Winchester family has decided to give her a new project: her own greenhouse. As construction starts, though, Bay is approached by a young girl - one she quickly realizes is no longer among the living - and given a task. The little girl wants her mother - and she wants Bay to find her.
Something to Witch About
Life's a witch...and then you die. It's the dying part vexing Bay Winchester these days. She may be a long-suffering daughter, thankless newspaper editor, and keyed-up girlfriend, but she's barely holding off a royal freak-out. Landon's family is visiting the inn - and they're not exactly open minded. Bay is on a mission to hide her witchy ways, but the discovery of a body - and the poltergeist that accompanies it - at The Overlook tips everything into turmoil.
5 out of 5 stars 1 rating
Witch Me Luck
Hemlock Cove is celebrating a magical birthday, and familiar faces from different places are descending on the town to participate in the party. Everyone is looking forward to the festivities except Bay Winchester, who would rather be hiding from her high school nemesis than chatting her up in the town square. Lila Stevens hasn't changed since graduation, and Bay remains her favorite target. Bay would like to ignore her, but Lila isn't making it easy - especially when she sets her sights on FBI Agent Landon Michaels.
Life's a Witch
Bay Winchester is living the witch part - literally. She's hoping to avoid the dying part. The Winchester world is full of trouble when great-aunt Willa and cousin Rosemary come to town. It's clear they're up to something, but no one can figure out what. When a young man's body shows up at Hollow Creek, Bay's attention is divided thanks to a morose ghost who blames her for ending "party time" and Aunt Tillie's refusal to back down.
Charms & Witchdemeanors
Tillie Winchester's past is about to come back to haunt her, and what she sees as fun and games someone else sees as a recipe for murder. When a local woman is poisoned at Hemlock Cove's senior center, Aunt Tillie is the prime suspect. Bay, Thistle and Clove don't believe their great-aunt is guilty - although Thistle is fine if the police want to haul her away for a long weekend. Everyone in town is suspicious, but things spiral out of control when FBI Agent Landon Michaels' boss believes he can't be objective where his girlfriend's family is concerned and sends another agent to lead the investigation. The new agent is gung-ho, headstrong, and making witchy enemies at every turn. When the investigation turns to the past instead of the present, Aunt Tillie refuses to talk and a long held Hemlock Cove secret risks being exposed. Bodies start piling up as old grudges overlap with new clues and the Winchesters are caught in the crossfire.
Really Disappointed In The New Narrator!
By Lee111 on 05-03-2019
The Trouble with Witches
The Winchester witches are in a tizzy. Sam Cornell's parents are coming to town, and Clove is beside herself. Meeting her boyfriend's parents is a big deal. It doesn't help that her cousins can't stop making fun of her, which is the Winchester way, of course. In addition to the Cornells' imminent visit, the Winchesters are also dealing with Sam's new tanker. An afternoon visit knocks Bay for a metaphysical loop with ugly visions of a tragedy long since forgotten - by everyone but the dead.
You Witch: A Wicked Witches of the Midwest Mystery, Books 7-9
The Winchester witches are at it again, and this time they're going to find trouble. Of course, they always find trouble. So...situation normal? Take a walk on the wild side as Bay Winchester learns a little bit about life, death, magic, monsters, and love.
The narrator changes after the first book
By Tracey Zed on 08-01-2020
Book Mystery Book 10
Murder Most Witchy
Wicked Witches of the Midwest, Book 10
Life in the Winchester household is hardly settled. That's true for Bay Winchester more than anybody else. Her boyfriend, Landon Michaels, is away from town on an undercover assignment for the FBI, and Bay is struggling not to let worry and unease rule over her life. Halloween is approaching, after all, and Hemlock Cove is bustling with activity. Bay has her hands full even when her heart feels empty. A chance encounter with Landon while he's undercover leaves Bay exposed...and furious.
A Witch Before Dying
FBI Agent Landon Michaels has officially moved in with his girlfriend, Bay Winchester; Mrs. Little is planning an impromptu festival; and there's a new witch in town. The question is: Is Scarlet Darksbane a real witch? Bay is in the middle of all of it. She has her hands full thanks to her imminent purchase of The Whistler...and the fact that Landon and Thistle seem to be butting heads while sharing the same roof. Thistle isn't long for the guesthouse, but the weeks of overlap before she moves promise to try Bay's patience.
A Breath of Witchy Air
A Wicked Witches of the Midwest Mystery
Hemlock Cove is mired in a cold snap, which means the town is calm and quiet. That all changes in an instant when a beer truck tips over on the highway and half the town shows up to get drunk. Bay Winchester is about to be the sole owner of the town newspaper so she heads out to take photos...and accidentally stumbles over several bodies. It seems there's a serial killer on the loose, although no one can figure out if the dump site was convenient or if the killer is local.
Book 10-12
Witches Gone Wild
A Wicked Witches of the Midwest Mystery, Books 10-12
The Wicked Witches of the Midwest are back for three action-packed adventures. As usual, trouble is on the menu and family hijinks are around every corner. This omnibus includes three full novels, including: Murder Most Witchy, A Witch Before Dying, and A Breath of Witchy Air. Sit back, enjoy the ride, and be careful not to land on Aunt Tillie's list.
Witch, Interrupted
Things have been quiet in Hemlock Cove. That means the Winchesters are due to find trouble. This time, the trouble comes in the form of a dead radio doctor who calls himself Dr. Lovelorn and fixes relationships in distress. Unfortunately for the Winchesters, if he can't help his normal patients, he's going to help them...whether they want it or not.
Flip the Witch Switch
Bay Winchester and Landon Michaels are looking for a romantic outing, revisiting the past now that they know they met as children. That trip leads them to the camp they visited back in the day...and to a new adventure. It's a happy excursion down memory lane until they happen upon the old pool and discover a hand poking out of an ancient cover. That means their day off becomes an official investigation.
Witchin' Around the Clock
Witches are descending on Hemlock Cove and the town is gearing up for mayhem. Bay Winchester is ready to cover the event for her newspaper, and is excited to see faces she hasn't interacted with in more than a decade. Then the unthinkable happens. The local blacksmith shop catches fire and Bay and her cousin Thistle risk death to try and rescue the owner. Unfortunately, they're too late, and the man is unable to be resuscitated. Not only that, but it wasn't the fire that killed him. No, he was murdered.
Show 20 30 40 titles per page
Go back a page
Go forward a page
There's a series for
everyone on Audible.
From fascinating sci-fi and fantasy to binge-worthy thrillers,
find your next book series to love.
Explore series
AU (English)
© Copyright 2020 Audible Australia Pty Ltd Conditions of Use Privacy Notice Cookies & Internet Advertising

redpajama_set_name: RedPajamaCommonCrawl


text:
MUMMY PROBABLY KNOWS BEST
Posted by: Shakespearean Walter in Cool Stories May 25, 2013	1 Comment 2422 Views
Mummy told him that Lagos was not a safe place to be. She told him not to go anywhere without first giving Uncle Charlie the number and address of the person he was going to visit; in fact, she told him not to go anywhere. Period. She told him not to buy anything from the hawkers on the roads, not to type on his Blackberry when he was outside on the streets or inside any commercial vehicle, not to enter okada, and not to ask for directions from anyone on the road, because that was how they bewitched you into following them to some hidden place where they used you for rituals. And by the way, why should he need to ask for directions? Did she not mention that he should not go anywhere?
In other words, mummy was saying he should not have a life during his vacation with Uncle Charlie and his family in Lagos.
Ben disagreed with that. He was seventeen years old, certainly not a kid anymore. He could take care of himself anywhere. Granted, he had never been in Lagos before, had not been anywhere beyond the River Niger that separated Onitsha from Asaba, so sheltered had his upbringing been. But he had survived juvenile cultism while schooling in Government College, Owerri, and had slapped the pickpocket who had tried to relieve him of his wallet in Eke Onunwa, the main market in Douglas. So, yes, he could handle anything Lagos dared to throw at him.
And so, when Ebube, his cousin who lived in Alakija told him to pay him a visit, he embarked on what was his first trip out of his uncle's house with lots of excitement and no consternation for whatever pitfalls might lie in wait. Ebube had taken him to his house once before, about a week ago, but this would be his first time out on his own. He took a bus from Ojuelegba to Oshodi, and didn't mind the clog of traffic that held them up on the stretch of the road from Onipanu to Anthony; because he was engrossed with his Blackberry pinging and was nodding his head to the music resonating in his ears through his earphones. Ebube had told him to alight at Oshodi and get on a bus going to Mile 2. So that was what he did. He didn't like that the sweaty conductor was hunkered over his side or that the woman seated beside him jabbered away in raucous Yoruba on her phone for nearly half the journey. It was hot and another holdup snagged the traffic just before they got to Cele. Why hadn't mummy warned him about these terrible Lagos traffics?
After what seemed like an abominably long stretch of time, he got down at Mile 2 and took another bus headed for Alakija and its environs. This time, he didn't have to endure a long drive. Within minutes, he was standing on the side of the busy highway, with the bus vrooming off amidst a hail of dust and stones, and lots of people milling around him. Hawkers yelling the content of their wares, touts heckling bus conductors, pedestrians conversing in loud tones – the same teeming spectacle had greeted him at Oshodi and Ojuelegba, yet it never ceased to amaze him how so many people could be in one place at a time. He crossed over to the other side of the highway, and approached the bank of okada men lounging in the corner. There was a chorus of 'Fine boy, where you dey go?' and a couple of bike-men even darted toward him on their motorcycles, in a bid to score him as a passenger.
After a brief moment of vacillation, he finally settled on a burly dark-complected man whose lips were thick and rubbery between several tracks of tribal marks that stretched across his fat cheeks. "Where for Alakija you dey go?" queried the bike-man.
"Star Breweries, just opposite the place."
"One-fifty."
"Na eighty naira I go pay."
"No, na one-fifty. One-twenty last." And the bike-man looked off, his attitude dismissive, as though he didn't care if Ben accepted his bargain or not.
Without a word, Ben began to walk away from him, already lifting his hand to beckon another okada.
"Oya, come – hundred naira…" the man interjected.
"Eighty naira." Ben was insistent. Ebube had told him not to pay any penny more for the bike ride.
"Abeg nah. That place far small," the bike-man wheedled. When Ben said nothing in response, he waved a hand for him to get unto the bike. As Ben did so, he suddenly got an uneasy feeling he could neither explain nor shake off. Maybe it had something to do with the sudden shifty look he saw fleet across the okada man's face or the resurgence of his mother's admonitions on his subconscious, he couldn't say. But he tried to shrug off the feeling and watch the scenery as the bike sped on.
Even though he had only been in the area once before, he soon began to realize that the passing sights were quite unfamiliar. Where was that huge Coca Cola depot he saw the last time? And this many trees towering on the sides of the road hadn't been there the last time, had they? The bike-man seemed to driving down a narrowing track road that was fast getting deserted.
"Oga, where you dey carry me go?" he said over the wind whipping past his head.
"Star breweries nah," the man tossed back.
"But no be the road to the place be this."
"No worry. Na short cut be this," the man said reassuringly.
Ben's mind warred with itself as he tried to relax behind the bike-man. He still felt uneasy with this development, no matter how hard he tried to dismiss his concern. Thoughts about different calamities raced through his mind, and his tenseness made him alert to his surroundings. His vigilance was probably what saved him, because he spotted the men hulking in the roadside bushes moments before they revealed themselves.
"Oga, stop! Stop me here!" he hollered at the bike-man. But the man didn't say a word to him, he kept on driving. And that was when it dawned on Ben that the man was in on whatever plot was about to unfold. His heart picked up a rapid tattoo that resounded in his ears as he made a decision purely driven by self-preservation. Feeling adrenaline surge through him, he lifted himself from the bike, while it was still in motion, pushed himself backward through the air and tumbled to the dusty ground.
"Hey!" a loud voice shouted. There was a rush of feet coming from the bushes and the bike's engine rumbled as it teetered out of balance and fell to the ground, throwing the bike-man off. "Hey!" More voices were shouting.
But Ben was already on his feet; he quickly turned back the way they came and fled. Driven by fear and desperation, his feet flew across the ground, creating more and more distance between him and the men who were hotly in pursuit. Soon, he broke out onto a main road, and the sight of human and vehicular traffic filled him a huge sense of relief. He stopped to gulp in air, looked back for the first time, and was satisfied to see that he was out of danger. Then, he dug his phone from his pocket with the intention of letting Ebube know his plight. He had no intention of flagging down any other bike; his cousin would have to come and pick him up from where he was. As the dialing tone buzzed in his ear, he thought about his mother and her exhortations about the city of Lagos.
Shakespearean Walter
Previous: UK TERROR: Man hacked to death in broad daylight by NIGERIAN
Next: Most Expensive Animal? Man Buys Dog At £10,000
About Shakespearean Walter
Ikedi Oghenetega
This truly gets the heart racing. It's simple and truthful.


text:
The big day. Prince Charles & Diana arrived at 11 A.M. for coffee. They are very nice and it was an enjoyable 40 min. or so. Then they had to move on & I had to hightail it to U.S.I.A. where my 5 min. Sat. Radio broadcast became, for just this once, a 10 min. Radio & T.V. show to the Soviet U. & a number of other countries in 9 languages—an estimated audience of 120 mil. people. I wonder if Mr. G. listened. The dinner for the Prince & Diana was a great success. It had not a hint of "State Dinner" flavor. Everyone seemed to have a wonderful time. Ted G. had decorated the W.H. more beautifully than we've ever seen it. Leontyne Price sang wonderfully & then everyone danced like at a Junior Prom.
The President and the First Lady greet Prince Charles and Princess Diana of Wales.
President Reagan makes a Radio Address to the Nation on the U.S. - Soviet Summit in Geneva.


Everyone that knows me knows I hate the Bowl "Championship" Series. This year's mess, with the inclusion of a cringe-worthy UConn team and the endless round of justification for excluding TCU from the national "championship" game, is the standard package of crap foisted on college football fans. Except there's even more stupidity on display than usual.
>>The discrepancy was discovered by Jerry Palm, who runs the websites www.collegebcs.com and www.collegerpi.com, in the Colley Matrix computer ratings, one of six used by the BCS.
Wesley Colley said Palm, who verifies the Colley Matrix ratings, noticed the results of an FCS playoff game involving Appalachian State and Western Illinois had not been included in the data base used to generate the ratings.
BCS executive director Bill Hancock said in a statement that he was "deeply disturbed" when he learned of the mistake.
He's appalled that a mistake happened, but NOT appalled by the fact that the BCS rankings are being materially affected by THE 1-AA PLAYOFF GAME BETWEEN APPALACHIAN STATE AND WESTERN ILLINOIS!?!?!?
Every time I think I know how totally bogus this system is, I find that there are new depths of pathetic just begging to be discovered.
Let's say, hypothetically, that I have a loan that I'm working on. It's a complicated one, involving four different lenders being asked to perform different roles in the transaction, and a couple dozen other things. It's going to take a couple of months to do, and that is if the appraisal isn't horrible, if the loan can even be done.
We start to work. Over and over we hit hurdles, and over and over we jump them. We resolve concerns. We deal with lenders and underwriters and processors and appraisal people and title people. This all takes time.
Two months go by. Three months. We are working on the file every single day. EVERY day. We hit snags and we figure out how to get them loose and keep moving forward. The deal is on the point of being approved.
Then one of the lenders changes its mind and backs out. We can find a replacement, but in order to get that replacement to play ball, I have to give up all my compensation, and even write a check to bribe the new lender. The negotiations on how to do this take about twelve, thirteen hours. All told, I'm now into this deal a hundred hours or more, hours that in order to save the deal, I cannot get paid for.
Boo hoo. This stuff happens. That's not the point.
What I want to know (here's the serious question) is this: how do I let the client know what I've done?
I don't ask this because I want the credit. I ask this because I want the reputation I deserve, which is that I will do whatever it takes, including acting as the Red Cross, to get a deal done. I need that reputation for my business to thrive. I have earned that reputation. How do I go about making sure that I have it?
If I were in the position my clients are in, I would darn well want to know what Hell my loan officer had to go through to get my loan done. I would want to know that the deal was inches from falling apart after 100 days of work, and that to save it, he is doing the deal for nothing. When people go above and beyond the call of duty for me, I like to know it, because those are the people I want to do business with.
Probably I will say nothing, or not very much. That's my usual MO. But I depend for my livelihood on the goodwill of my clients, and their willingness to tell their friends about me. This is a story that would be worth telling.
Help me figure out how to tell it.
P.S. Don't say, "well, you already did, right here in your blog." Seriously? You're going to be at a party this weekend, and you're going to say "hey, you should talk to this guy whose blog I read. He blogged about doing this amazing thing to keep a deal alive. I'm sure he wasn't making it up. You should call him." That's going to be a real referral? The best referrals – almost the ONLY mortgage referrals – come from the personal experience of the person doing the referring. The only people that can make a good referral to me out of this experience are the clients themselves. And they don't read blogs (or I would never have posted this).


The hotel is built and decorated according to the traditional style of the island, is situated in a tranquil and pleasant garden only 3 minutes walk from the beach. Hotel Fomithea was built in 1989 and has been fully renovated in 2017.
Kamari Beach has received the BLUE FLAG AWARD. The Blue Flag is an exclusive eco-label award. The hotel provides the facilities of a breakfast room with a veranda overlooking the pool, a sitting room and a beautiful swimming pool with bar for your leisure hours.


Stainless steel surgical supply carts offer your healthcare facility an easy solution for storing and transporting medical products. Designed to maximize storage space, these carts will keep everything you need right at hand. Also, because the carts are made of stainless steel, they're easy to keep sanitized and work well in clean environments. And the stainless steel surgical supply carts have three special features – sloped tops, tall heights, and glass doors – not found in most other carts.
The sloped tops help to keep the surgical carts clean. The tops won't build up with dust and other items, and nothing can be put on top of them. The tall height ensures you can maximize the space in your operating room and surgical suite areas while keeping more supplies at the point of use.
Southwest Solutions Group® provides stainless steel surgical supply carts to all types of healthcare facilities. We will also provide you with a free consultation to determine your exact needs and specifications. To learn more or to speak with a specialist, call us at 1-800-803-1083 or send us a message today.


text:
from datetime import datetime
import json
from urlparse import urlparse

from django.core.urlresolvers import reverse
from django.db import reset_queries
from django.http import QueryDict
from django.test.utils import override_settings

import mock
from mock import patch
from nose.tools import eq_, ok_

import mkt
import mkt.regions
from mkt.api.tests.test_oauth import RestOAuth
from mkt.developers.models import ActivityLog
from mkt.prices.models import AddonPurchase
from mkt.ratings.models import Review, ReviewFlag
from mkt.site.fixtures import fixture
from mkt.site.utils import app_factory, version_factory
from mkt.webapps.models import AddonExcludedRegion, AddonUser, Webapp
from mkt.users.models import UserProfile

@mock.patch('mkt.webapps.models.Webapp.get_cached_manifest', mock.Mock)
class TestRatingResource(RestOAuth, mkt.site.tests.MktPaths):
    fixtures = fixture('user_2519', 'webapp_337141')

    def setUp(self):
        super(TestRatingResource, self).setUp()
        self.app = Webapp.objects.get(pk=337141)
        self.user = UserProfile.objects.get(pk=2519)
        self.user2 = UserProfile.objects.get(pk=31337)
        self.list_url = reverse('ratings-list')

    def _get_url(self, url, client=None, **kwargs):
        if client is None:
            client = self.client
        res = client.get(url, kwargs)
        data = json.loads(res.content)
        return res, data

    def _get_filter(self, client=None, expected_status=200, **params):
        res, data = self._get_url(self.list_url, client=client, **params)
        eq_(res.status_code, expected_status)
        if expected_status == 200:
            eq_(len(data['objects']), 1)
        return res, data

    def _compare_review_data(self, client, data, review):
        self.assertApiUrlEqual(data['app'], '/apps/app/337141/')
        eq_(data['body'], review.body)
        self.assertCloseToNow(data['created'], now=review.created)
        self.assertCloseToNow(data['modified'], now=review.modified)
        eq_(data['rating'], review.rating)
        eq_(data['report_spam'],
            reverse('ratings-flag', kwargs={'pk': review.pk}))
        eq_(data['resource_uri'],
            reverse('ratings-detail', kwargs={'pk': review.pk}))
        eq_(data['user']['display_name'], review.user.display_name)
        eq_(data['version']['version'], review.version.version)
        eq_(data['version']['resource_uri'],
            reverse('version-detail', kwargs={'pk': review.version.pk}))

        if client != self.anon:
            eq_(data['is_author'], review.user == self.user)
        else:
            ok_('is_author' not in data)

    def test_has_cors(self):
        self.assertCORS(self.client.get(self.list_url),
                        'get', 'post', 'put', 'delete')

    def test_options(self):
        res = self.anon.options(self.list_url)
        eq_(res.status_code, 200)
        data = json.loads(res.content)
        ok_('application/json' in data['renders'])
        ok_('application/json' in data['parses'])

    def test_get_empty_with_app(self):
        AddonUser.objects.create(user=self.user, addon=self.app)
        res, data = self._get_url(self.list_url, app=self.app.pk)
        eq_(res.status_code, 200)
        eq_(data['info']['average'], self.app.average_rating)
        eq_(data['info']['slug'], self.app.app_slug)
        assert not data['user']['can_rate']
        assert not data['user']['has_rated']

    def test_get(self, client=None):
        first_version = self.app.current_version
        rev = Review.objects.create(addon=self.app, user=self.user,
                                    version=first_version,
                                    body=u'I lôve this app',
                                    rating=5)
        rev.update(created=self.days_ago(2))
        rev2 = Review.objects.create(addon=self.app, user=self.user2,
                                     version=first_version,
                                     body=u'I also lôve this app',
                                     rating=4)
        # Extra review for another app, should be ignored.
        extra_app = app_factory()
        Review.objects.create(addon=extra_app, user=self.user,
                              version=extra_app.current_version,
                              body=u'I häte this extra app',
                              rating=1)

        self.app.total_reviews = 2
        ver = version_factory(addon=self.app, version='2.0',
                              file_kw=dict(status=mkt.STATUS_PUBLIC))
        self.app.update_version()

        reset_queries()
        res, data = self._get_url(self.list_url, app=self.app.pk,
                                  client=client)
        eq_(len(data['objects']), 2)
        self._compare_review_data(client, data['objects'][0], rev2)
        self._compare_review_data(client, data['objects'][1], rev)
        eq_(data['info']['average'], self.app.average_rating)
        eq_(data['info']['slug'], self.app.app_slug)
        eq_(data['info']['current_version'], ver.version)
        if client != self.anon:
            eq_(data['user']['can_rate'], True)
            eq_(data['user']['has_rated'], True)
        return res

    def test_get_304(self):
        etag = self.test_get(client=self.anon)['ETag']
        res = self.anon.get(self.list_url, {'app': self.app.pk},
                            HTTP_IF_NONE_MATCH='%s' % etag)
        eq_(res.status_code, 304)

    @override_settings(DEBUG=True)
    def test_get_anonymous_queries(self):
        first_version = self.app.current_version
        Review.objects.create(addon=self.app, user=self.user,
                              version=first_version,
                              body=u'I lôve this app',
                              rating=5)
        Review.objects.create(addon=self.app, user=self.user2,
                              version=first_version,
                              body=u'I also lôve this app',
                              rating=4)
        self.app.total_reviews = 2
        version_factory(addon=self.app, version='2.0',
                        file_kw=dict(status=mkt.STATUS_PUBLIC))
        self.app.update_version()

        reset_queries()
        with self.assertNumQueries(7):
            # 7 queries:
            # - 1 SAVEPOINT
            # - 2 for the Reviews queryset and the translations
            # - 2 for the Version associated to the reviews (qs + translations)
            # - 1 for the File attached to the Version
            # - 1 RELEASE SAVEPOINT
            #
            # Notes:
            # - In prod, we actually do COMMIT/ROLLBACK and not
            # SAVEPOINT/RELEASE SAVEPOINT. It would be nice to avoid those for
            # all GET requests in the API, but it's not trivial to do for
            # ViewSets which implement multiple actions through the same view
            # function (non_atomic_requests() really want to be applied to the
            # view function).
            #
            # - The query count is slightly higher in prod. In tests, we patch
            # get_app() to avoid the app queries to pollute the queries count.
            #
            # Once we are on django 1.7, we'll be able to play with Prefetch
            # to reduce the number of queries further by customizing the
            # queryset used for the complex related objects like versions and
            # webapp.
            with patch('mkt.ratings.views.RatingViewSet.get_app') as get_app:
                get_app.return_value = self.app
                res, data = self._get_url(self.list_url, client=self.anon,
                                          app=self.app.pk)

    def test_is_flagged_false(self):
        Review.objects.create(addon=self.app, user=self.user2, body='yes',
                              rating=5)
        res, data = self._get_url(self.list_url, app=self.app.pk)
        eq_(data['objects'][0]['is_author'], False)
        eq_(data['objects'][0]['has_flagged'], False)

    def test_is_flagged_is_author(self):
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              rating=5)
        res, data = self._get_url(self.list_url, app=self.app.pk)
        eq_(data['objects'][0]['is_author'], True)
        eq_(data['objects'][0]['has_flagged'], False)

    def test_is_flagged_true(self):
        rat = Review.objects.create(addon=self.app, user=self.user2, body='ah',
                                    rating=5)
        ReviewFlag.objects.create(review=rat, user=self.user,
                                  flag=ReviewFlag.SPAM)
        res, data = self._get_url(self.list_url, app=self.app.pk)
        eq_(data['objects'][0]['is_author'], False)
        eq_(data['objects'][0]['has_flagged'], True)

    def test_get_detail(self):
        fmt = '%Y-%m-%dT%H:%M:%S'
        Review.objects.create(addon=self.app, user=self.user2, body='no',
                              rating=5)
        rev = Review.objects.create(addon=self.app, user=self.user, body='yes',
                                    rating=5)
        url = reverse('ratings-detail', kwargs={'pk': rev.pk})
        res, data = self._get_url(url)
        self.assertCloseToNow(datetime.strptime(data['modified'], fmt))
        self.assertCloseToNow(datetime.strptime(data['created'], fmt))
        eq_(data['body'], 'yes')

    def test_filter_self(self):
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              rating=5)
        Review.objects.create(addon=self.app, user=self.user2, body='no',
                              rating=5)
        self._get_filter(user=self.user.pk)

    def test_filter_mine(self):
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              rating=5)
        Review.objects.create(addon=self.app, user=self.user2, body='no',
                              rating=5)
        self._get_filter(user='mine')

    def test_filter_mine_anonymous(self):
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              rating=5)
        self._get_filter(user='mine', client=self.anon, expected_status=403)

    def test_filter_by_app_slug(self):
        self.app2 = app_factory()
        Review.objects.create(addon=self.app2, user=self.user, body='no',
                              rating=5)
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              rating=5)
        res, data = self._get_filter(app=self.app.app_slug)
        eq_(data['info']['slug'], self.app.app_slug)
        eq_(data['info']['current_version'], self.app.current_version.version)

    def test_filter_by_app_pk(self):
        self.app2 = app_factory()
        Review.objects.create(addon=self.app2, user=self.user, body='no',
                              rating=5)
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              rating=5)
        res, data = self._get_filter(app=self.app.pk)
        eq_(data['info']['slug'], self.app.app_slug)
        eq_(data['info']['current_version'], self.app.current_version.version)

    def test_filter_by_invalid_app(self):
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              rating=5)
        self._get_filter(app='wrongslug', expected_status=404)
        self._get_filter(app=2465478, expected_status=404)

    def test_filter_by_nonpublic_app(self):
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              rating=5)
        self.app.update(status=mkt.STATUS_PENDING)
        res, data = self._get_filter(
            app=self.app.app_slug, expected_status=403)
        eq_(data['detail'], 'The app requested is not public')

    def test_filter_by_nonpublic_app_admin(self):
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              rating=5)
        self.grant_permission(self.user, 'Apps:Edit')
        self.app.update(status=mkt.STATUS_PENDING)
        self._get_filter(app=self.app.app_slug)

    def test_filter_by_nonpublic_app_owner(self):
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              rating=5)
        AddonUser.objects.create(user=self.user, addon=self.app)
        self.app.update(status=mkt.STATUS_PENDING)
        self._get_filter(app=self.app.app_slug)

    def test_anonymous_get_list_without_app(self):
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              rating=5)
        res, data = self._get_url(self.list_url, client=self.anon)
        eq_(res.status_code, 200)
        assert 'user' not in data
        eq_(len(data['objects']), 1)
        eq_(data['objects'][0]['body'], 'yes')

    def test_anonymous_get_list_app(self):
        res, data = self._get_url(self.list_url, app=self.app.app_slug,
                                  client=self.anon)
        eq_(res.status_code, 200)
        eq_(data['user'], None)

    def test_non_owner(self):
        res, data = self._get_url(self.list_url, app=self.app.app_slug)
        assert data['user']['can_rate']
        assert not data['user']['has_rated']

    @patch('mkt.webapps.models.Webapp.get_excluded_region_ids')
    def test_can_rate_unpurchased(self, exclude_mock):
        exclude_mock.return_value = []
        self.app.update(premium_type=mkt.ADDON_PREMIUM)
        res, data = self._get_url(self.list_url, app=self.app.app_slug)
        assert not res.json['user']['can_rate']

    @patch('mkt.webapps.models.Webapp.get_excluded_region_ids')
    def test_can_rate_purchased(self, exclude_mock):
        exclude_mock.return_value = []
        self.app.update(premium_type=mkt.ADDON_PREMIUM)
        AddonPurchase.objects.create(addon=self.app, user=self.user)
        res, data = self._get_url(self.list_url, app=self.app.app_slug)
        assert res.json['user']['can_rate']

    def test_isowner_true(self):
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              rating=5)
        res, data = self._get_url(self.list_url, app=self.app.app_slug)
        data = json.loads(res.content)
        eq_(data['objects'][0]['is_author'], True)

    def test_isowner_false(self):
        Review.objects.create(addon=self.app, user=self.user2, body='yes',
                              rating=5)
        res, data = self._get_url(self.list_url, app=self.app.app_slug)
        data = json.loads(res.content)
        eq_(data['objects'][0]['is_author'], False)

    def test_isowner_anonymous(self):
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              rating=5)
        res, data = self._get_url(self.list_url, app=self.app.app_slug,
                                  client=self.anon)
        data = json.loads(res.content)
        self.assertNotIn('is_author', data['objects'][0])

    def test_already_rated(self):
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              rating=5)
        res, data = self._get_url(self.list_url, app=self.app.app_slug)
        data = json.loads(res.content)
        assert data['user']['can_rate']
        assert data['user']['has_rated']

    def test_already_rated_version(self):
        self.app.update(is_packaged=True)
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              rating=4)
        version_factory(addon=self.app, version='3.0')
        self.app.update_version()
        res, data = self._get_url(self.list_url, app=self.app.app_slug)
        data = json.loads(res.content)
        assert data['user']['can_rate']
        assert not data['user']['has_rated']

    def test_no_lang_filter(self):
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              lang='en', rating=5)
        other_user = UserProfile.objects.exclude(pk=self.user.pk)[0]
        Review.objects.create(addon=self.app, user=other_user, body='yes',
                              lang='pt', rating=5)
        res, data = self._get_url(self.list_url, app=self.app.app_slug,
                                  client=self.anon, lang='pt')
        eq_(res.status_code, 200)
        eq_(len(data['objects']), 2)
        eq_(data['info']['total_reviews'], 2)

    def test_lang_filter(self):
        Review.objects.create(addon=self.app, user=self.user, body='yes',
                              lang='en', rating=5)
        other_user = UserProfile.objects.exclude(pk=self.user.pk)[0]
        Review.objects.create(addon=self.app, user=other_user, body='yes',
                              lang='pt', rating=5)
        res, data = self._get_url(self.list_url, app=self.app.app_slug,
                                  client=self.anon, lang='pt',
                                  match_lang='1')
        eq_(res.status_code, 200)
        eq_(len(data['objects']), 1)
        eq_(data['info']['total_reviews'], 2)
        eq_(data['objects'][0]['lang'], 'pt')

    def _create(self, data=None, anonymous=False, version=None):
        version = version or self.app.current_version
        default_data = {
            'app': self.app.id,
            'body': 'Rocking the free web.',
            'rating': 5,
            'version': version.id
        }
        if data:
            default_data.update(data)
        json_data = json.dumps(default_data)
        client = self.anon if anonymous else self.client
        res = client.post(self.list_url, data=json_data)
        try:
            res_data = json.loads(res.content)
        except ValueError:
            res_data = res.content
        return res, res_data

    def test_anonymous_create_fails(self):
        res, data = self._create(anonymous=True)
        eq_(res.status_code, 403)

    @patch('mkt.ratings.views.record_action')
    def test_create(self, record_action):
        log_review_id = mkt.LOG.ADD_REVIEW.id
        eq_(ActivityLog.objects.filter(action=log_review_id).count(), 0)
        res, data = self._create()
        eq_(201, res.status_code)
        pk = Review.objects.latest('pk').pk
        eq_(data['body'], 'Rocking the free web.')
        eq_(data['rating'], 5)
        eq_(data['resource_uri'], reverse('ratings-detail', kwargs={'pk': pk}))
        eq_(data['report_spam'], reverse('ratings-flag', kwargs={'pk': pk}))
        eq_(data['lang'], 'en')

        eq_(record_action.call_count, 1)
        eq_(record_action.call_args[0][0], 'new-review')
        eq_(record_action.call_args[0][2], {'app-id': 337141})
        eq_(ActivityLog.objects.filter(action=log_review_id).count(), 1)

        return res, data

    def test_create_fr(self):
        res, data = self._create(data={'body': 'Je peux manger du verre'})
        eq_(data['lang'], 'fr')

    def test_create_packaged(self):
        self.app.update(is_packaged=True)
        res, data = self.test_create()
        eq_(data['version']['version'], '1.0')

    def test_create_bad_data(self):
        res, data = self._create({'body': None})
        eq_(400, res.status_code)
        assert 'body' in data

    def test_create_bad_rating(self):
        res, data = self._create({'rating': 0})
        eq_(400, res.status_code)
        assert 'rating' in data

    def test_create_nonexistent_app(self):
        res, data = self._create({'app': -1})
        eq_(400, res.status_code)
        assert 'app' in data

    @patch('mkt.ratings.serializers.get_region')
    def test_create_for_nonregion(self, get_region_mock):
        AddonExcludedRegion.objects.create(addon=self.app,
                                           region=mkt.regions.BRA.id)
        get_region_mock.return_value = mkt.regions.BRA
        res, data = self._create()
        eq_(403, res.status_code)

    def test_create_for_nonpublic(self):
        self.app.update(status=mkt.STATUS_PENDING)
        res, data = self._create(version=self.app.latest_version)
        eq_(403, res.status_code)

    def test_create_duplicate_rating(self):
        self._create()
        res, data = self._create()
        eq_(409, res.status_code)

    def test_new_rating_for_new_version(self):
        self.app.update(is_packaged=True)
        self._create()
        version = version_factory(addon=self.app, version='3.0')
        self.app.update_version()
        eq_(self.app.reload().current_version, version)
        res, data = self._create()
        eq_(201, res.status_code)
        eq_(data['version']['version'], '3.0')

    def test_create_duplicate_rating_packaged(self):
        self.app.update(is_packaged=True)
        self._create()
        res, data = self._create()
        eq_(409, res.status_code)

    def test_create_own_app(self):
        AddonUser.objects.create(user=self.user, addon=self.app)
        res, data = self._create()
        eq_(403, res.status_code)

    @patch('mkt.webapps.models.Webapp.get_excluded_region_ids')
    def test_rate_unpurchased_premium(self, exclude_mock):
        exclude_mock.return_value = []
        self.app.update(premium_type=mkt.ADDON_PREMIUM)
        res, data = self._create()
        eq_(403, res.status_code)

    @patch('mkt.webapps.models.Webapp.get_excluded_region_ids')
    def test_rate_purchased_premium(self, exclude_mock):
        exclude_mock.return_value = []
        self.app.update(premium_type=mkt.ADDON_PREMIUM)
        AddonPurchase.objects.create(addon=self.app, user=self.user)
        res, data = self._create()
        eq_(201, res.status_code)

    def _create_default_review(self):
        # Create the original review
        default_data = {
            'body': 'Rocking the free web.',
            'rating': 5
        }
        res, res_data = self._create(default_data)
        return res, res_data

    def test_patch_not_implemented(self):
        self._create_default_review()
        pk = Review.objects.latest('id').pk
        json_data = json.dumps({
            'body': 'Totally rocking the free web.',
        })
        res = self.client.patch(reverse('ratings-detail', kwargs={'pk': pk}),
                                data=json_data)
        # Should return a 405 but permission check is done first. It's fine.
        eq_(res.status_code, 403)

    def _update(self, updated_data, pk=None):
        # Update the review
        if pk is None:
            pk = Review.objects.latest('id').pk
        json_data = json.dumps(updated_data)
        res = self.client.put(reverse('ratings-detail', kwargs={'pk': pk}),
                              data=json_data)
        try:
            res_data = json.loads(res.content)
        except ValueError:
            res_data = res.content
        return res, res_data

    def test_update(self):
        rev = Review.objects.create(addon=self.app, user=self.user,
                                    body='abcd', ip_address='1.2.3.4',
                                    rating=5)
        new_data = {
            'body': 'Totally rocking the free web.',
            'rating': 4,
        }
        log_review_id = mkt.LOG.EDIT_REVIEW.id
        eq_(ActivityLog.objects.filter(action=log_review_id).count(), 0)
        res, data = self._update(new_data)
        eq_(res.status_code, 200)
        eq_(data['body'], new_data['body'])
        eq_(data['rating'], new_data['rating'])
        rev.reload()
        eq_(rev.body, new_data['body'])
        eq_(rev.rating, new_data['rating'])
        eq_(rev.user, self.user)
        eq_(rev.ip_address, '1.2.3.4')
        eq_(ActivityLog.objects.filter(action=log_review_id).count(), 1)

    def test_update_admin(self):
        self.grant_permission(self.user, 'Apps:Edit')
        rev = Review.objects.create(addon=self.app, user=self.user2,
                                    body='abcd', ip_address='1.2.3.4',
                                    rating=5)
        new_data = {
            'body': 'Edited by admin',
            'rating': 1,
        }
        log_review_id = mkt.LOG.EDIT_REVIEW.id
        res = self.client.put(reverse('ratings-detail', kwargs={'pk': rev.pk}),
                              json.dumps(new_data))
        eq_(res.status_code, 200)
        data = json.loads(res.content)
        eq_(data['body'], new_data['body'])
        eq_(data['rating'], new_data['rating'])
        rev.reload()
        eq_(rev.body, new_data['body'])
        eq_(rev.rating, new_data['rating'])
        eq_(rev.user, self.user2)
        eq_(rev.ip_address, '1.2.3.4')
        eq_(ActivityLog.objects.filter(action=log_review_id).count(), 1)

    def test_update_bad_data(self):
        self._create_default_review()
        res, data = self._update({'body': None})
        eq_(400, res.status_code)
        assert 'body' in data

    def test_update_change_app(self):
        _, previous_data = self._create_default_review()
        self.app2 = app_factory()
        new_data = {
            'body': 'Totally rocking the free web.',
            'rating': 4,
            'app': self.app2.pk
        }
        res, data = self._update(new_data)
        eq_(res.status_code, 200)
        eq_(data['body'], new_data['body'])
        eq_(data['rating'], new_data['rating'])
        eq_(data['app'], previous_data['app'])

    def test_update_comment_not_mine(self):
        rev = Review.objects.create(addon=self.app, user=self.user2,
                                    body='yes', rating=4)
        res = self.client.put(reverse('ratings-detail', kwargs={'pk': rev.pk}),
                              json.dumps({'body': 'no', 'rating': 1}))
        eq_(res.status_code, 403)
        rev.reload()
        eq_(rev.body, 'yes')

    def test_delete_app_mine(self):
        AddonUser.objects.filter(addon=self.app).update(user=self.user)
        rev = Review.objects.create(addon=self.app, user=self.user2,
                                    body='yes', rating=5)
        url = reverse('ratings-detail', kwargs={'pk': rev.pk})
        res = self.client.delete(url)
        eq_(res.status_code, 204)
        eq_(Review.objects.count(), 0)
        log_review_id = mkt.LOG.DELETE_REVIEW.id
        eq_(ActivityLog.objects.filter(action=log_review_id).count(), 1)

    def test_delete_comment_mine(self):
        rev = Review.objects.create(addon=self.app, user=self.user, body='yes',
                                    rating=1)
        url = reverse('ratings-detail', kwargs={'pk': rev.pk})
        res = self.client.delete(url)
        eq_(res.status_code, 204)
        eq_(Review.objects.count(), 0)
        log_review_id = mkt.LOG.DELETE_REVIEW.id
        eq_(ActivityLog.objects.filter(action=log_review_id).count(), 1)

    def test_delete_addons_admin(self):
        self.grant_permission(self.user, 'Apps:Edit')
        rev = Review.objects.create(addon=self.app, user=self.user2,
                                    body='yes', rating=1)
        url = reverse('ratings-detail', kwargs={'pk': rev.pk})
        res = self.client.delete(url)
        eq_(res.status_code, 204)
        eq_(Review.objects.count(), 0)
        log_review_id = mkt.LOG.DELETE_REVIEW.id
        eq_(ActivityLog.objects.filter(action=log_review_id).count(), 1)

    def test_delete_users_admin(self):
        self.grant_permission(self.user, 'Users:Edit')
        rev = Review.objects.create(addon=self.app, user=self.user2,
                                    body='yes', rating=5)
        url = reverse('ratings-detail', kwargs={'pk': rev.pk})
        res = self.client.delete(url)
        eq_(res.status_code, 204)
        eq_(Review.objects.count(), 0)
        log_review_id = mkt.LOG.DELETE_REVIEW.id
        eq_(ActivityLog.objects.filter(action=log_review_id).count(), 1)

    def test_delete_not_mine(self):
        rev = Review.objects.create(addon=self.app, user=self.user2,
                                    body='yes', rating=3)
        url = reverse('ratings-detail', kwargs={'pk': rev.pk})
        self.app.authors.clear()
        res = self.client.delete(url)
        eq_(res.status_code, 403)
        eq_(Review.objects.count(), 1)
        log_review_id = mkt.LOG.DELETE_REVIEW.id
        eq_(ActivityLog.objects.filter(action=log_review_id).count(), 0)

    def test_delete_not_there(self):
        url = reverse('ratings-detail', kwargs={'pk': 123})
        res = self.client.delete(url)
        eq_(res.status_code, 404)
        log_review_id = mkt.LOG.DELETE_REVIEW.id
        eq_(ActivityLog.objects.filter(action=log_review_id).count(), 0)

class TestRatingResourcePagination(RestOAuth, mkt.site.tests.MktPaths):
    fixtures = fixture('user_2519', 'user_999', 'webapp_337141')

    def setUp(self):
        super(TestRatingResourcePagination, self).setUp()
        self.app = Webapp.objects.get(pk=337141)
        self.user = UserProfile.objects.get(pk=2519)
        self.user2 = UserProfile.objects.get(pk=31337)
        self.user3 = UserProfile.objects.get(pk=999)
        self.url = reverse('ratings-list')

    def test_pagination(self):
        first_version = self.app.current_version
        rev1 = Review.objects.create(addon=self.app, user=self.user,
                                     version=first_version,
                                     body=u'I häte this app',
                                     rating=0)
        rev2 = Review.objects.create(addon=self.app, user=self.user2,
                                     version=first_version,
                                     body=u'I lôve this app',
                                     rating=5)
        rev3 = Review.objects.create(addon=self.app, user=self.user3,
                                     version=first_version,
                                     body=u'Blurp.',
                                     rating=3)
        rev1.update(created=self.days_ago(3))
        rev2.update(created=self.days_ago(2))
        self.app.update(total_reviews=3)
        res = self.client.get(self.url, {'app': self.app.pk, 'limit': 2})
        eq_(res.status_code, 200)
        data = json.loads(res.content)

        eq_(len(data['objects']), 2)
        eq_(data['objects'][0]['body'], rev3.body)
        eq_(data['objects'][1]['body'], rev2.body)
        eq_(data['meta']['total_count'], 3)
        eq_(data['meta']['limit'], 2)
        eq_(data['meta']['previous'], None)
        eq_(data['meta']['offset'], 0)
        next = urlparse(data['meta']['next'])
        eq_(next.path, self.url)
        eq_(QueryDict(next.query).dict(),
            {'app': str(self.app.pk), 'limit': '2', 'offset': '2'})

        res = self.client.get(self.url,
                              {'app': self.app.pk, 'limit': 2, 'offset': 2})
        eq_(res.status_code, 200)
        data = json.loads(res.content)

        eq_(len(data['objects']), 1)
        eq_(data['objects'][0]['body'], rev1.body)
        eq_(data['meta']['total_count'], 3)
        eq_(data['meta']['limit'], 2)
        prev = urlparse(data['meta']['previous'])
        eq_(next.path, self.url)
        eq_(QueryDict(prev.query).dict(),
            {'app': str(self.app.pk), 'limit': '2', 'offset': '0'})
        eq_(data['meta']['offset'], 2)
        eq_(data['meta']['next'], None)

    def test_total_count(self):
        Review.objects.create(addon=self.app, user=self.user,
                              version=self.app.current_version,
                              body=u'I häte this app',
                              rating=0)
        self.app.update(total_reviews=42)
        res = self.client.get(self.url)
        data = json.loads(res.content)

        # We are not passing an app, so the app's total_reviews isn't used.
        eq_(data['meta']['total_count'], 1)

        # With an app however, it should be used as the total count.
        res = self.client.get(self.url, data={'app': self.app.pk})
        data = json.loads(res.content)
        eq_(data['meta']['total_count'], 42)

    def test_pagination_invalid(self):
        res = self.client.get(self.url, data={'offset': '%E2%98%83'})
        eq_(res.status_code, 200)

class TestReviewFlagResource(RestOAuth, mkt.site.tests.MktPaths):
    fixtures = fixture('user_2519', 'webapp_337141')

    def setUp(self):
        super(TestReviewFlagResource, self).setUp()
        self.app = Webapp.objects.get(pk=337141)
        self.user = UserProfile.objects.get(pk=2519)
        self.user2 = UserProfile.objects.get(pk=31337)
        self.rating = Review.objects.create(addon=self.app, rating=5,
                                            user=self.user2, body='yes')
        self.flag_url = reverse('ratings-flag', kwargs={'pk': self.rating.pk})

    def test_has_cors(self):
        self.assertCORS(self.client.post(self.flag_url), 'post')

    def test_flag(self):
        data = json.dumps({'flag': ReviewFlag.SPAM})
        res = self.client.post(self.flag_url, data=data)
        eq_(res.status_code, 201)
        rf = ReviewFlag.objects.get(review=self.rating)
        eq_(rf.user, self.user)
        eq_(rf.flag, ReviewFlag.SPAM)
        eq_(rf.note, '')

    def test_flag_note(self):
        note = 'do not want'
        data = json.dumps({'flag': ReviewFlag.SPAM, 'note': note})
        res = self.client.post(self.flag_url, data=data)
        eq_(res.status_code, 201)
        rf = ReviewFlag.objects.get(review=self.rating)
        eq_(rf.user, self.user)
        eq_(rf.flag, ReviewFlag.OTHER)
        eq_(rf.note, note)

    def test_flag_anon(self):
        data = json.dumps({'flag': ReviewFlag.SPAM})
        res = self.anon.post(self.flag_url, data=data)
        eq_(res.status_code, 201)
        rf = ReviewFlag.objects.get(review=self.rating)
        eq_(rf.user, None)
        eq_(rf.flag, ReviewFlag.SPAM)
        eq_(rf.note, '')

    def test_flag_conflict(self):
        data = json.dumps({'flag': ReviewFlag.SPAM})
        res = self.client.post(self.flag_url, data=data)
        res = self.client.post(self.flag_url, data=data)
        eq_(res.status_code, 409)

redpajama_set_name: RedPajamaGithub


text:
Q: Javascript: Paycheck Calculator (having trouble getting the correct number to show) To practice my javascript skills, I took on a side project creating a paycheck calculator. I am running into issues with my 'if...else' statement. For the life of me, I can't get the correct tax rate to show based on the user's input. No matter what I enter, the console shows .10
Here is the HTML:

const userSalary = document.querySelector('#salary');
const button = document.querySelector('.calculate');

if (parseInt(userSalary.value) >= 100000) {
  var taxRate = 0.37;
} else {
  var taxRate = 0.10;
}

button.addEventListener('click', event => {
  console.log(parseInt(taxRate));
});
<!DOCTYPE html>

  <meta charset="utf-8">
  <title></title>

  <form>
    Enter contribution percentage
    <input type="number" id="contribution" name="contribution">

    Enter your annual salary:
    <input type="text" id="salary" name="salary">

    Select your tax filing status:
    <select id="tax">
      <option value="single">Single</option>
      <option value="married_joint">Married Filing Jointly</option>
      <option value="married_separately">Married Filing Separately</option>
      <option value="head_household">Head of Household</option>
    </select>

    Paycheck Frequency
    <select id="paycheck_frequency">
      <option value="weekly">Weekly</option>
      <option value="biweekly">Biweekly</option>
      <option value="twice_monthly">Twice a Month</option>
      <option value="monthly">Monthly</option>
    </select>
  </form>

<button class="calculate">Calculate</button>

Here is the javascript:
const userSalary = document.querySelector('#salary');
const button = document.querySelector('.calculate');

if (parseInt(userSalary.value) >= 100000) {
  var taxRate = 0.37;
} else {
  var taxRate = 0.10;
}

button.addEventListener('click', event => {
  console.log(parseInt(taxRate));
});

Thank you in advance!

A: Try following javascript instead:
const userSalary = document.querySelector('#salary');
const button = document.querySelector('.calculate');

let taxRate;

function recalculateTaxRate() {
  if (parseInt(userSalary.value) >= 100000) {
    taxRate = 0.37;
  } else {
    taxRate = 0.10;
  }
}

button.addEventListener('click', event => {
  // Recalculate the rate before printing it.
  recalculateTaxRate();
  console.log(taxRate);
});

A: Your "if-else" block runs when the page loads. At that time, userSalary.value is nothing. Why? Because no one has entered anything into that input yet.
You want your "if-else" block to run when the user clicks the button. So move it into your event listener. Then it behaves as you want and recalculates the tax rate each time the button is clicked. Hope it helps.

const userSalary = document.querySelector('#salary');
const button = document.querySelector('.calculate');

button.addEventListener('click', event => {
  if (parseInt(userSalary.value) >= 100000) {
     var taxRate = 0.37;
  } else {
     var taxRate = 0.10;
  }
  console.log("User Salary value:", parseInt(userSalary.value));
  console.log("Tax Rate:", taxRate);
});
<!DOCTYPE html>

    <meta charset="utf-8">
    <title></title>

    <form>
      Enter contribution percentage
      <input type="number" id="contribution" name="contribution">

      Enter your annual salary:
      <input type="text" id="salary" name="salary">

      Select your tax filing status:
      <select id="tax">
        <option value="single">Single</option>
        <option value="married_joint">Married Filing Jointly</option>
        <option value="married_separately">Married Filing Separately</option>
        <option value="head_household">Head of Household</option>
      </select>

        Paycheck Frequency
        <select id="paycheck_frequency">
          <option value="weekly">Weekly</option>
          <option value="biweekly">Biweekly</option>
          <option value="twice_monthly">Twice a Month</option>
          <option value="monthly">Monthly</option>
      </select>
    </form>

    <button class="calculate">Calculate</button>


text:
SamWhiteUK:All
Thread Might have been already pointed out, but it made me laugh
at 13:09 16 Jan 2021
"I just don't think you can turn around and say 'it's entertainment' because it's not."
Having to sit up and watch from the stands really did give PL a different perspective on how we play, didn't it
Thread Anyone watching Wayne Rooney's Derby County?
at 18:58 1 Jan 2021
They're about as good as passing around at the back as us
Oh, and WR spitting on the touchline. What a tosser. Not even the excuse of playing.
Thread Why are the club assuming the cases came from Burton?
at 15:21 22 Dec 2020
Presumably the players are living at home with their families? Assuming the other members of the families are living something that resembles a normal life, i.e. having to leave the house, surely a player could have brought it in from there? I've seen players are still using indoor gyms at the club so it's not like all training is outside. What am I missing? Are the injured players (those inside) living at the club with the physios?
Thread One of the comments on the latest Lambert article:
"I'd play Hawkins at the back and McGuinness up front"
Thread Brenner said at half time he was surprised people were booing
That he thought they might just be glad to be at PR after such a long time away
Really? He does realise we've been able to watch the previous games, right? It's not like all football had stopped, and this was the first game of the season
Thread I think Brenner needs an eye test
Lost count of the amount of times he got the players' names wrong today
Thread "We couldn't get them in because NHS is only three letters"
at 10:24 2 Dec 2020
Jeez, I don't know, how about making the letters bigger?
Thread It's my birthday today...
at 08:25 30 Nov 2020
can I have a Lambert sacking as a present please?
Thread I'm so sick of this "Cornell is good with his feet"
He's done nothing to prove to me he's any better than Holy in that regard, I'm baffled he got to start
Thread Get the fans back in the ground ASAP
The players need a good kick up the arse, and PL needs telling that we're not happy.
I thought at the start of the season back playing in front of no fans would be good for us, but now I'm not so sure.
Thread We might have had more of the ball, but we aren't "knocking at the door&quo
More like getting to the end of the garden path of the house next door
Thread That Norwood/Bennetts sub is enough to get the sack
What happened to retaining performance based on merit? What the f*ck has Judge done? We cannot carry him any longer.
I, like others, thought that PL should have been gone at the end of last season. I was prepared to give him the benefit of the doubt, but that was just completely and utterly tactically inept.
It seems we can only perform when we have our first choice squad. Any deviations from that and we are just crap. I think we showed in the first half that we can compete with the top sides (apart from finishing, LOL) but there is just too much crap in this squad. Amazingly, it's been this way for a few years now.
Thread For a team that prides ourselves on our possession (supposedly)
there have been way too many misplaced simple passes. Abysmal.
Thread I think 0-2 is a little harsh, BUT
we HAVE to be scoring a chance sooner or later. We only have ourselves to blame, as we've probably been the better side, but I don't see us coming back now. Mountain to climb in the second half.... let's hope they change into their shooting boots during the interval.
Please log in to use all the site's facilities
SamWhiteUK
Site Scores
Forum Votes: 350
Comment Votes: 934
Prediction League: 0


Google the leading Internet based company has a Google I/O Developer Conference every year.
Every Geek fond of google is awaiting for this conference to be live.
Here, with almost 90 days left, Google have announced Registration for Google I/O Developer Conference to be open now.
Moscone Center in San Francisco, Calif.
The Theme for this years event is "The Cloud" and also the latest technologies of google.
Source : Google Official Blog.
# Guys : The Tickets are sold out..!!


How to Curl Your Wigs?
Start curling your wig. You'll want your curling iron as hot as your hair can handle without damaging it (i.e. thinner hair, lower heat). You'll need to curl as quickly as possible, just a few seconds for each strand, so hotter is better for getting through that larger section. I just wrapped all the wig flat against the barrel, so the ends of the hair weren't twisted as it went down.
Grab sections randomly and bigger is better; I worked between one-and-a-half to two-inch sections. If you start curling sections that are too small, you can end up in Shirley Temple territory. When you are curling your wig, keep a good inch or so off the iron on the end. This keeps you from burning the bejesus out of your fingers, adding too much heat to already damaged ends, and from ending up with overly perfect curls. The top sections of my hair are a lot longer, so I kept more off the ends here than I did for the bottom layers.
Keep on going until you've got a head full of curls. Let your hair cool down while you sip a glass of champagne (which I assume is what fancy girls do while they get ready) until your hair has absolutely no heat left in it. Then just comb your fingers through all the curls to release them from their sectioned bonds.
After finger combing your wig, part it where you like, and brush your wig out with a fine bristle brush. The first time I did this, I was positive I was going to end up with a poofy disaster, but as long as you use the correct brush—mine is just a bristle brush from L-email wigs—and pull your hair down the whole time (never pull that brush up) you will just smooth out your wig and take away the piecey-ness.
At this point, the style is pretty much done, but many wigs like to stick to my scalp in not the most elegant kind of way, so Bumble and bumble Pret A Powder comes to the rescue. It's like a non-aerosolized dry shampoo that adds volume and doesn't leave a white cast in my wig. And your wig is complete! I pass on hairspray because the more the curls fall out, the more nonchalant it will look. And if your wig starts to get flat, you can just give the roots a powder free shake to liven things back up.
But if you can't survive without your wind worn locks, have no fear! Just spray in your favorite salt spray—mine is Not Your Mother's Beach Babe—scrunch it in and you are all set to chillax. I usually chuck in the salt spray on day old hair because it keeps my unkempt oily roots from ruining the look of my rich girl wig.
This entry was posted in Fashion Wigs, Wig Maintenance and Care, Wigs and tagged fashion wig store, fashion wigs, wholesale wig, wig maintenance and care.


text:
Justia Forms Business Contracts Sensient Technologies Corp Amendment No. 4 to Receivables Purchase Agreement, dated as
Amendment No. 4 to Receivables Purchase Agreement, dated as of October 1, 2019, among Sensient Receivables LLC, Sensient Technologies Corporation, and Wells Fargo Bank, National Association
EX-10.1 2 ex10_1.htm EXHIBIT 10.1
AMENDMENT NO. 4 TO RECEIVABLES PURCHASE AGREEMENT
THIS AMENDMENT NO. 4 TO RECEIVABLES PURCHASE AGREEMENT, dated as of October 1, 2019 (this "Amendment"), is by and among Sensient Receivables LLC, a Delaware limited liability company ("Seller"), Sensient Technologies Corporation, a Wisconsin corporation ("STC"), as initial Servicer and as the Performance Guarantor, and (c) Wells Fargo Bank, National Association, a national banking association (together with its successors and assigns, the "Purchaser").
WHEREAS, the Seller, the Servicer and the Purchaser are parties to that certain Receivables Purchase Agreement, dated as of October 3, 2016 (as amended prior to the date hereof, the "Existing Purchase Agreement" and, as amended hereby and from time to time hereafter amended, restated or otherwise modified, the "Purchase Agreement"); and
WHEREAS, the parties wish to amend the Existing Purchase Agreement as hereinafter set forth;
NOW, THEREFORE, in consideration of the premises and the mutual covenants herein contained, and for other good and valuable consideration, the receipt and sufficiency of which are hereby acknowledged, the parties hereto agree as follows:
1. Definitions. Capitalized terms used and not otherwise defined herein are used with the meanings attributed thereto in the Purchase Agreement.
2. Amendments. The Existing Purchase Agreement is hereby amended as follows:
(a) The definitions in Exhibit I of the Existing Purchase Agreement of the following terms are hereby amended and restated in their entirety to read as follows:
"Facility Limit" means $65,000,000, as such amount may be amended from time to time in accordance with this Agreement.
"Facility Termination Date" means the earlier of (i) October 1, 2020, and (ii) the Amortization Date.
(b) The following new definitions are hereby added to Exhibit I of the Existing Purchase Agreement in their appropriate alphabetical order:
"Beneficial Ownership Rule" means 31 C.F.R. § 1010.230.
"Certification of Beneficial Owner(s)" means a certificate in form and substance satisfactory to the Administrative Agent regarding beneficial ownership of the Borrower as required by the Beneficial Ownership Rule.
"Covered Entity" means any of the following: (i) a "covered entity" as that term is defined in, and interpreted in accordance with, 12 C.F.R. § 252.82(b); (ii) a "covered bank" as that term is defined in, and interpreted in accordance with, 12 C.F.R. § 47.3(b); or (iii) "covered FSI" as that term is defined in, and interpreted in accordance with, 12 C.F.R. § 382.2(b).
(c) A new Section 3.1(x) is hereby added to the Existing Purchase Agreement which reads as follows:
(t) Beneficial Ownership Rule. The Seller is an entity that is organized under the laws of the United States or a state thereof and at least 51 percent of whose common stock or analogous equity interest is owned, directly or indirectly by a Person whose common stock or analogous equity interests are listed on the New York Stock Exchange or the American Stock Exchange or has been designated as a NASDAQ National Market Security listed on the NASDAQ stock exchange and is excluded on that basis from the definition of "Legal Entity Customer" as defined in the Beneficial Ownership Rule.
(d) Section 5.1(b) is hereby amended to change the numbering of existing clause (x) to clause (xi) and to insert the following new clause (x) therein:
(x) Promptly following any change that would result in a change to the status of the Seller as an excluded "Legal Entity Customer" under the Beneficial Ownership Rule, the Seller shall execute and deliver to the Purchaser, a Certification of Beneficial Owner(s) complying with the Beneficial Ownership Rule, in form and substance reasonably acceptable to the Purchaser.
(e) A new Section 11.12 which reads as follows is hereby added to the Existing Purchase Agreement:
Section 11.12 Acknowledgement Regarding Any Supported QFCs. To the extent that the Transaction Documents provide support, through a guarantee or otherwise, for Hedge Agreements or any other agreement or instrument that is a QFC (such support, "QFC Credit Support" and, each such QFC, a "Supported QFC"), the parties acknowledge and agree as follows with respect to the resolution power of the FDIC under the Federal Deposit Insurance Act and Title II of the Dodd-Frank Wall Street Reform and Consumer Protection Act (together with the regulations promulgated thereunder, the "U.S. Special Resolution Regimes") in respect of such Supported QFC and QFC Credit Support (with the provisions below applicable notwithstanding that the Transaction Documents and any Supported QFC may in fact be stated to be governed by the laws of the State of New York and/or of the United States or any other state of the United States):
In the event a Covered Entity that is party to a Supported QFC (each, a "Covered Party") becomes subject to a proceeding under a U.S. Special Resolution Regime, the transfer of such Supported QFC and the benefit of such QFC Credit Support (and any interest and obligation in or under such Supported QFC and such QFC Credit Support, and any rights in property securing such Supported QFC or such QFC Credit Support) from such Covered Party will be effective to the same extent as the transfer would be effective under the U.S. Special Resolution Regime if the Supported QFC and such QFC Credit Support (and any such interest, obligation and rights in property) were governed by the laws of the United States or a state of the United States. In the event a Covered Party or a BHC Act Affiliate of a Covered Party becomes subject to a proceeding under a U.S. Special Resolution Regime, Default Rights under the Transaction Documents that might otherwise apply to such Supported QFC or any QFC Credit Support that may be exercised against such Covered Party are permitted to be exercised to no greater extent than such Default Rights could be exercised under the U.S. Special Resolution Regime if the Supported QFC and the Transaction Documents were governed by the laws of the United States or a state of the United States. Without limitation of the foregoing, it is understood and agreed that rights and remedies of the parties with respect to a Defaulting Lender shall in no event affect the rights of any Covered Party with respect to a Supported QFC or any QFC Credit Support.
3. Effect of Amendment. Except as specifically amended hereby, the Existing Purchase Agreement and all exhibits and schedules attached thereto and the Performance Undertaking shall remain in full force and effect. This Amendment shall not constitute a novation of the Purchase Agreement or the Performance Undertaking, but shall constitute an amendment to thereto.
4. Conditions Precedent. Effectiveness of this Amendment is subject to the prior or contemporaneous satisfaction of each of the following conditions precedent:
(a) Wells shall have received: (i) counterparts hereof, duly executed by each of the parties hereto and consented to by the Purchaser, and (ii) counterparts of a second amendment and restatement of the Fee Letter, duly executed by each of the parties thereto and payment in immediately available funds of a fully-earned and non-refundable upfront fee described in numbered paragraph 1 thereof.
(b) Each of the representations and warranties contained in Section 5 of this Amendment shall be true and correct.
5. Representations and Warranties. Each of the Performance Guarantor, the Seller and the Servicer hereby represents and warrants to the Purchaser that each of the representations and warranties made by it or on its behalf in the Purchase Agreement or the Performance Undertaking, as applicable, were true and correct when made and are true and correct, in all material respects, on and as of the date of this Amendment with the same full force and effect as if each of such representations and warranties had been made by it on the date hereof and in this Amendment, and the Performance Undertaking is hereby ratified and confirmed. The representations and warranties set forth above shall survive the execution of this Amendment.
6. CHOICE OF LAW. THIS AMENDMENT SHALL BE GOVERNED BY AND CONSTRUED IN ACCORDANCE WITH THE LAWS OF THE STATE OF NEW YORK, WITHOUT REGARD TO THE PRINCIPLES OF CONFLICTS OF LAWS THEREOF OTHER THAN SECTION 5-1401 OF THE GENERAL OBLIGATIONS LAW.
7. CONSENT TO JURISDICTION. EACH PARTY TO THIS AMENDMENT HEREBY IRREVOCABLY SUBMITS TO THE NON-EXCLUSIVE JURISDICTION OF ANY UNITED STATES FEDERAL OR NEW YORK STATE COURT SITTING IN NEW YORK, NEW YORK, IN ANY ACTION OR PROCEEDING ARISING OUT OF OR RELATING TO THIS AMENDMENT OR THE AGREEMENTS, AND EACH SUCH PARTY HEREBY IRREVOCABLY AGREES THAT ALL CLAIMS IN RESPECT OF SUCH ACTION OR PROCEEDING MAY BE HEARD AND DETERMINED IN ANY SUCH COURT AND IRREVOCABLY WAIVES ANY OBJECTION IT MAY NOW OR HEREAFTER HAVE AS TO THE VENUE OF ANY SUCH SUIT, ACTION OR PROCEEDING BROUGHT IN SUCH A COURT OR THAT SUCH COURT IS AN INCONVENIENT FORUM.
8. WAIVER OF JURY TRIAL. EACH PARTY HERETO HEREBY WAIVES TRIAL BY JURY IN ANY JUDICIAL PROCEEDING INVOLVING, DIRECTLY OR INDIRECTLY, ANY MATTER (WHETHER SOUNDING IN TORT, CONTRACT OR OTHERWISE) IN ANY WAY ARISING OUT OF, RELATED TO, OR CONNECTED WITH THIS AMENDMENT, THE PURCHASE AGREEMENT OR THE RELATIONSHIP ESTABLISHED HEREUNDER OR THEREUNDER.
9. Binding Effect. Upon execution and delivery of a counterpart hereof by each of the parties hereto, and the satisfaction of the conditions precedent set forth in Section 5 hereof, this Amendment shall be binding upon and inure to the benefit of the parties hereto and their respective successors and permitted assigns (including any trustee in bankruptcy).
10. Legal Fees. In addition to its obligations under the Purchase Agreement, the Seller agrees to pay all reasonable out-of-pocket costs and expenses incurred by the Purchaser, in connection with the negotiation, preparation, execution and delivery of this Amendment within 30 days after receipt of a reasonably detailed invoice therefor.
11. Counterparts; Severability; Section References. This Amendment may be executed in any number of counterparts and by different parties hereto in separate counterparts, each of which when so executed shall be deemed to be an original and all of which when taken together shall constitute one and the same Amendment. Delivery of an executed counterpart of a signature page to this Amendment by facsimile shall be effective as delivery of a manually executed counterpart of a signature page to this Amendment. Any provisions of this Amendment which are prohibited or unenforceable in any jurisdiction shall, as to such jurisdiction, be ineffective to the extent of such prohibition or unenforceability without invalidating the remaining provisions hereof, and any such prohibition or unenforceability in any jurisdiction shall not invalidate or render unenforceable such provision in any other jurisdiction.
<Signature pages follow>
IN WITNESS WHEREOF, the parties hereto have caused this Amendment to be executed and delivered by their duly authorized officers or attorneys-in-fact as of the date hereof.
SENSIENT RECEIVABLES LLC, AS SELLER
SENSIENT TECHNOLOGIES CORPORATION, AS THE SERVICER AND THE PERFORMANCE GUARANTOR
WELLS FARGO BANK, NATIONAL ASSOCIATION, AS THE PURCHASER


Because we're based on Marsh Barton Trading Estate in Exeter, we're well placed for quick access to the M5 and the A303.
We can respond quickly to any IT emergency.
please call us on 01392 575 111.
To get help with a problem or talk to us about how we can bring you to better IT support, please call 01392 575 111.
We're available Monday to Friday 08:30 – 18:00.
We also offer out of hours remote support for existing clients.
Copyright © 2018 WADE IT Solutions Ltd.


text:
O Webley–Fosbery Self-Cocking Automatic Revolver é um revólver semiautomático operado por recuo projetado pelo tenente-coronel George Vincent Fosbery CV e produzido pela empresa Webley & Scott de 1901 a 1924. O revólver é facilmente reconhecível pelas ranhuras em zigue-zague no tambor.

História
As pistolas semiautomáticas estavam apenas começando a aparecer quando o coronel Fosbery (1832–1907) desenvolveu um revólver que armava o cão e girava o tambor deslizando o conjunto de ação, tambor e cano de volta à estrutura. O protótipo era um revólver Colt Single Action Army modificado. Fosbery patenteou sua invenção em 16 de agosto de 1895 e outras melhorias foram patenteadas em junho e outubro de 1896.

Fosbery levou seu projeto para P. Webley & Son de Birmingham. P. Webley & Son, que se fundiu com W.C. Scott & Sons e Richard Ellis & Son em 1897 para formar a Webley & Scott Revolver and Arms Co., foi o principal fabricante de pistolas de serviço para o Exército Britânico, além de produzir armas de fogo para uso civil. Webley desenvolveu ainda mais o design e o revólver semiautomático Webley-Fosbery foi introduzido nas partidas em Bisley em julho de 1900.

No uso civil, o Webley-Fosbery era popular entre os atiradores de tiro ao alvo. Como o mecanismo de gatilho não girava o tambor, os disparos eram suaves e consistentes, permitindo disparos rápidos e precisos. Walter Winans, um famoso atirador contemporâneo, preferia o Webley-Fosbery e, em 1902, ele o usou para efetuar seis tiros em um alvo de 5,1 cm a 12 passos em sete segundos. Usando um speedloader Prideaux, ele foi capaz de disparar doze tiros em um alvo de 7,6 cm em aproximadamente 15 segundos.

Uso em tempos de guerra
Embora Webley visse esta arma como uma arma ideal para tropas de cavalaria, o Webley-Fosbery nunca foi adotado como uma arma oficial do governo. Com mais de 28 cm de comprimento e pesando cerca de 1.239 gramas descarregado, o Webley-Fosbery era uma arma pesada mesmo para os padrões da época. Vários modelos de revólveres Webley-Fosbery foram produzidos, e o tipo viu ação limitada na Segunda Guerra dos Bôeres, bem como na Primeira Guerra Mundial, onde alguns exemplares comprados em particular foram carregados por oficiais britânicos no cartucho de serviço .455. Relatórios de campo sugeriram que o Webley-Fosbery, com suas superfícies de recuo usinadas com precisão, era mais suscetível a emperramento em condições de guerra de lama e chuva do que armas secundárias comparáveis do período. Tem sido comumente alegado que o Webley-Fosbery exigia um aperto firme para que o tambor girasse corretamente e armasse a arma.

A produção cessou em 1924, com uma produção total de menos de 5.000. Muitos revólveres não foram vendidos, e o modelo foi carregado nos catálogos da Webley até 1939.

Bibliografia
 Dowell, William Chipcase, The Webley Story, (Commonwealth Heritage Foundation, Kirkland, Washington:  1987)

Ligações externas
Vídeo de um Webley–Fosbery, mostrando sua ação
Sobre o Webley-Fosbery
 Webley Fosbery Automatic Revolver Caliber .455(UK)
Webley Fosbery Automatic Revolver Model 1900

Armas de fogo de .38 ACP
Revólveres militares
Revólveres do Reino Unido

redpajama_set_name: RedPajamaWikipedia


text:
Road Fatalities up in March, for the Third Month in a Row
19th April 2019 19th April 2019 spanner44Leave a Comment on Road Fatalities up in March, for the Third Month in a Row
In March 2019, 250 people died on the road, an increase of 7.3% over last year, according to Road Safety figures.
After two months of increases in January and February, road mortality figures did not decline in March .
According to preliminary estimates of the National Interministerial Observatory of Road Safety (ONISR) published Friday, April 19, 2019, 250 people died on the roads , against 233 in March 2018 or 17 more deaths (+ 7.3%).
The other indicators are also in the red, is saddened Road Safety in a statement :
The number of personal injuries was 4,416 as against 3,974 in March 2018, which is 442 more accidents (+ 11.1%);
5432 people were injured compared to 5005 in March 2018, an increase of 427 (+ 8.5%).
As in February 2019, cyclist mortality is again the highest for a month of March, in the last ten years, "with 18 deaths estimated last month".
741 dead in three months
Since the beginning of 2019, 741 people have died in a car accident. "Compared to the five-year average (2013-2017), this represents 25 additional deaths," says Road Safety.
Estimates for the first quarter of 2019 show that road mortality is expected to increase in urban areas (241 killed compared to 211 on average over five years, ie 30 more) as well as on the motorway network (77 killed compared to 51 on average over five years, 26 Furthermore).
A link made with vandalized radars
To explain this trend, the authorities indicate that the spring weather has favoured travel. More journeys, combined with the relaxation of vandal-related behaviours on radars , which affects all road networks ".
Outside built-up areas, where speed is now limited to 80 km/h on most minor highways, road mortality is reported to be down (423 killed compared to 446 on average over five years, 23 fewer).
"Since the end of 2016, there has been a -7% drop in 12-month mortality outside urban areas, while mortality on other road networks (highways and built-up areas) has risen to the end of 2016", states road safety.
On the secondary network, the speed goes back a little
The Center for studies and expertise on risks, the environment, mobility and development (CEREMA) which has set up, at the request of Road Safety, the evaluation of the 80 km/h measurement shows a very slight increase in the average speed between December 2018 and February 2019, which nevertheless remains well below the speeds practiced before the introduction of the 80 km/h measure, " which means that the saving of lives saved is preserved, "blows Road Safety.
Tagged Deaths France Road Accidents Road Fatalities Road Safety Speed Limits
Notre-Dame: All Paintings will be "Safe During the Day"
Weather: The Sun at the Highest in Brittany for this Great Easter Weekend
Consequences of Brexit: English Fruits Rot, Lack of Manpower
22nd June 2018 24th June 2018 Jason Plant
Why Your Taxe d'Habitation May Have Gone Up (When it Should Go Down)
11th October 2018 16th May 2019 Jason Plant
FN: The Exclusion of Jean-Marie Le Pen Validated by Justice
17th November 2016 17th November 2016 spanner44


text:
Wasashatta, ook gespeld als Wasašatta, was een koning van het Hurrische koninkrijk van Mitanni in de 13e eeuw v.Chr.

Net als zijn vader Shattuara was Wasashatta een Assyrische vazal. Hij kwam in opstand tegen zijn leenheer Adad-nirari I (1295-1263 v.Chr.) en zocht tevergeefs steun bij de Hettieten. De Assyriërs sloegen de opstand neer en vernietigden Hanilgalbat/Mitanni. De koninklijke familie werd gevangengenomen en naar Assur gebracht. Van Wasashatta werd nooit meer iets vernomen.

Koning van Mitanni
Persoon in de 13e eeuw v.Chr.


text:
Catching Babies
"Catching Babies is a beautiful and important film. It serves not only to educate and inspire an audience about midwifery and natural childbirth but also to encourage a discussion about questions of inequality and privilege relevant to childbearing practices today."
– Heather Sinclair, Licensed Midwife & PhD Student: Medicalization of Childbirth in El Paso
In the U.S. the use of midwives and home births has doubled since 2000. Midwives are state-certified healthcare professionals who also draw from an age-old wisdom. In this birthing experience, the mother's body leads the process while the midwife supports. Families can create the loving, non-clinical environment that is right for them and enjoy a birth option that is statistically safer than hospital births.
Faisa Farole and Hawa Mohamud of Open Arms Perinatal Services invited me for a small community screening. The Somali community in Seattle, WA has the highest cesarian rate in the nation. After the screening they created a Somali birth education group!
Amnesty International's 2011 report, Deadly Deliveries, documents a crisis in the delivery of pre and ante natal care in the USA maternal health system. The USA has the highest infant mortality rate for developed nations; the cesarean birth rate has skyrocketed to 30 percent; and the use medical and pharmaceutical interventions have become commonplace in hospital births. The infant mortality rate for Native American families is 75 percent higher, and the rate for African American families is 350 percent higher than that of non-Hispanic whites. These startling statistics are true across income levels.
"Catching Babies uplifts the voices of Xicana women and its an inspiration for building and strengthening community-based health."
– Diana Perez-Ramirez, Puente al la Salud
Maternidad la Luz Birth Center and School is the premiere school of midwifery in North America because it offers integrated academic and clinical training. Since 1987 Maternidad la Luz has been rooted in the community of El Paso / Juárez, by providing safe natural birth options for women in this border community.
Catching Babies does not simply show what is wrong with the maternal healthcare system but celebrates an alternative that is led by the women who are most impacted.
Catch a Glimpse
http://www.youtube.com/watch?v=mEnERXDLD1c Watch the Trailer
What if we could change the world by changing the way babies are born? Catching Babies is a 60 minute documentary film that weaves the stories of mothers and students of midwifery in El Paso, Texas.
Copyright ©2020 Iftiin Productions


Permanent backstops are constructed by installing supplied 2-3/8 pipe supports approximately every 10' in concrete footings as shown on installation drawings provided. You then simply bolt factory pre-fabricated 5' x 10' panels in place to create your finished backstop. No more cutting and stretching chain link material in the field. These backstops are extremely durable and allow individual panels to be removed for re-screening or replacement as needed. 20' x 10' with hood and wings.
Click the button below to add the Chain Link Backstop-20' w/Hood & Wings to your wish list.


Supreme Court Associate Justice Cheri Beasley won her re-election campaign against Forsyth County lawyer Mike Robinson despite vote tabulation errors discovered in several counties throughout the state. Beasley won by more than 5,000 votes in a race where more than 2.4 million votes were cast. Recount results, which the State Board of Elections certified during a teleconference Link to story.
This entry was posted in Uncategorized on November 26, 2014 by Tabella.