Returning after nearly four decades away with the critically acclaimed Lodestar, Getintothis' Paul Fitzgerald was at the Philharmonic Hall to witness a performance of the whole album.
After a 38 year hiatus, English Folk legend Shirley Collins finally stepped back into the limelight last year, with the release of her Domino Records album, Lodestar. Gathering a coterie of traditional music players around her, they set about selecting a collection of gathered songs together and began recording in her cottage. Years away from the microphone, caused by an attack of dysphonia, in turn brought on by her split in 1978 from her husband, had left her yearning to tell these enigmatic bygone tales again.
At the forefront of the English early folk revival of the 1950s and 60s, Shirley Collins has worked with everyone from Ewan Macoll to Bert Jansch, and for those nearly four decades, she was sorely missed by folk lovers. Aged 81, she has taken Lodestar on the road, and brought it to a devoted audience at The Philharmonic Hall. The evening felt like a reunion of old friends, happy to be reunited, and keen to catch up from where we left off.
To open the show, after an introduction from Collins' old friend and our narrator for the night, Pip Barnes, Dave Arthur and Pete Cooper took the stage with a short set on guitar, banjo and fiddle. Beginning with an old Dillard Chandler Appalachian piece, and rounding off with a Georgia blues folk instrumental it set the stall out for the rest of the night. Arthur and Cooper would go on to join Collins and the band later on in the show.
Following an extended period of PA trials and jiggery pokery with various leads and monitors, the incredible voice and talent that is Olivia Chaney was able to take centre stage. And were we glad for that. Until now, we'd not been familiar with her work, but certainly we weren't the only ones frantically searching online during the interval.
Chaney started on keys, before moving to a resonator guitar for a version of the folk classic The Blacksmith, and finally held the audience in reverent silence with her version of Monteverdi's Oblivion Soave, her voice, clear and clean, soaring over our heads and around the space, it highlighted the link between Baroque and early Folk, by carrying elements of both.
The second half of the evening saw Collins and the band performing the whole Lodestar album, accompanied with video to emphasise the otherworldly weirdness of these dark traditional songs. Songs of love and death. Mainly death actually, the body count on this album being so high.
Deaths at sea, infanticide, murderous plots, all gin soaked and haunted, there are few survivors on this album. Washed Ashore, inspired by a simple carved cross in a Sussex graveyard with that plain, anonymous epitaph etched into the wood, imagines the tale of the song's victims, and evokes their demise. It's a stark and bleak tale, and Collins delivers it as dry and plaintive as her familiar austere vocal style demands.
With scenes of dancing horses skulls, and burning crosses of the village processions of the home counties forming the projected backdrop, the slide guitar and harmonic intro of Death and The Lady led us on another dark journey out down a country lane for a meeting with death, and the conversation that takes place before Death takes her down that final path. She pleads, desperately begging him for more time, offering her jewels and robes as an exchange, but to no avail. Her time is come and she must go.
For all the death, drones and pagan weirdness, for all the fire, woe and destruction, there's no shortage of beauty in the balance too, such as in Collins' fluent and evocative version of the Cajun French song Sur le Borde de l'Eau, which captivates and beguiles us at every turn. Its a simple arrangement, perfectly poised, and a true standout moment in a night of such moments.
Pip Barnes, who talked us through the songs, explaining their provenance and history, brings the evening to the close, by gathering the musicians and Morris dancers together for an extended version of the album's final song, The Silver Swan, after which he congratulates the Philharmonic audience on their singalong prowess. And after a well deserved standing ovation, the grand lady of English folk music takes her leave.
Having Shirley Collins back is a wonderful thing, she too seems happy to be back, and we hope soon to hear another collection of this intriguing music from this accomplished artist.


I'm saying it now to hold myself accountable: this Summer will be the Summer I lighten up with the early bedtime thing. I mean it. I'll let my kids stay up later. I know it will be hard for me because early bedtime is my jam — yes, even in the Summer. I love reading in my quiet nook with the outside Summer light shining in or enjoying a cocktail with my husband on the patio; so yes, I will put my kids to bed so I can enjoy my favorite Summer activities. It might sound selfish, but early bedtimes have just always worked for our family; the kids wake up well-rested, and my husband and I get to spend some time taking care of ourselves. But now that the kids are older (almost 5 and 7) I think it's time I loosen the leash a little.
They're no longer in the baby and toddler years, so a little less sleep won't completely wreck the days that follow. They can either make up that lost sleep with a nap or even by sleeping in if they want to. (Fingers crossed, right?) But one thing I can't make up to them are those lost Summer memories that take place at dusk or even after the sun goes down.
This Summer, I'm going to give in to the late-night Summer activities that I remember loving as a kid. I remember gallivanting through the grass with my brothers, glass jars in hand, trying to catch fireflies. We'd follow the glow of the little bugs and swing our jars into the air trying to grab them. I never caught a single one, but the joy of trying to still stays with me. Next on my list will be a late-night bonfire to roast marshmallows. My kids have roasted several marshmallows in their day, but it was usually a hurried fiasco because I was so damn stressed about getting them to bed on time. But this Summer, I want to watch my kids lounge in camping chairs circling our hodge-podge bonfire pit, staring into the fire on a Wednesday night — just because.
This is a little embarrassing, and I can't believe I'm about to say this, but my kids have yet to watch fireworks. I know. I'm lame. But my kids used to snooze right through them. I didn't see the purpose in torturing them (and let's be honest, myself) by forcing them to stay awake with all that noise. But this year, they're old enough to truly enjoy them — and remember them for that matter. So, I'm so excited to head to a local spot near a lake on the Fourth of July, throw down a couple of blankets, and sprawl out. We'll munch on snacks and I'll enjoy my kids' "oohs and ahhs" over the fireworks display. I'm excited to share this first-time magic with my kids, despite whatever crankiness follows the next morning.
And finally, I just want to relax on the whole bedtime thing for my kids because, well, they only get one childhood. If they're still running through the sprinkler or bobbing in the neighbor's pool past bedtime, I'll let it slide. Because it's those simple memories that they'll hold onto forever. And who I am to take that away from them? This vow isn't going to be an easy one for good ol' mom to keep. I know that. But I owe it to my growing children to try. I want them to have those magical childhood memories that take place after the sun goes down.


FSSA Secretary Jennifer Walthall says Open Beds has cut down the time to connect addiction disorder patients to treatment.
Indiana Family and Social Services Administration Secretary Jennifer Walthall says the state's new Open Beds program has exceeded all expectations in its first six weeks. Open Beds is a partnership between FSSA and Indiana 2-1-1 to connect those in need of addiction treatment with local resources.
The program has served more than 100 people in its first six weeks. And Walthall says it's significantly cut down the time it takes to connect them to the help they need, as in the case of a 23-year-old with a heroin addiction.
"Within four hours of his call and referral via Open Beds, he was scheduled for treatment assessment and now is successfully in outpatient treatment," Walthall says.
Walthall says the program has already expanded its 24-hour services and plans to add nearly two dozen more treatment systems it can refer patients to.


text:
Az alkalmazkodás mértéke a tűrőképesség.
A tűrőképesség az élőlények alkalmazkodóképességét jelenti a különféle időben és térben változó környezeti tényezőkkel szemben.
A különböző fajok populációi azonos tényezőkre más és más tűrőképességet mutatnak. Az egyes környezeti tényezőket-például a hőmérsékletet vagy a nedvességet- csak bizonyos értékhatárokon belül képesek elviselni. A környezeti tényező még éppen elviselhető felső, illetve alsó értékhatára a maximum, illetve a minimum; ezek környékén az élőlény még túlél, de nem tud szaporodni. Ezek az értékek egyre csökkenve, illetve emelkedve elhagyják a kedvezőtlen tartományt, és elérik a populáció számára a legkedvezőbb értékeket, az optimum tartományt. Ezt jelzi a egyedek leggyakoribb előfordulása. Ha a tűrőképesség egy szűk tartományra korlátozódik, akkor az élőlény szűk tűrőképességű; ha tág, akkor a tűrőképesség tág. A tűrőképesség eltérhet a különféle tényezőkkel szemben: vannak élőlények, melyek tűrőképessége az egyik tényezővel szemben szűk, míg egy másikkal szemben tág.

Természetesen a környezeti tényezők nemcsak a növény- hanem az állatfajok elterjedését is befolyásolják. Az egyes fajok, azonban nem azonos mértékben érzékenyek a környezeti tényezőkre. A fenyőfajok többsége kiválóan bírja a nedves és a száraz talajt is, míg a vízinövények egyes fajai alig egy órát bírnak ki víz nélkül. Valamennyi faj, valamennyi környezeti tényezővel szemben különböző toleranciát mutat. Egy adott környezeti tényezővel szembeni elviselőképességet tűrőképességnek nevezzük, amelyet az ábrán látható haranggörbével szokás szemléltetni.

A tűrőképességet így ábrázolják grafikonon: A vízszintes tengelyen a vizsgált környezeti tényező értékét, a függőlegesen az életműködések mértéke van feltüntetve. Mindig van egy optimális érték (legkedvezőbb), amelyet az adott faj a legjobban kedvel, mindig van egy minimum és egy maximum érték, amelyet még ép elviselnek, ez alatt és e felett az adott faj nem képes megélni. Egy-egy faj az adott környezeti tényezővel szemben lehet szűktűrésű (sztenök/sztenoöckus), azaz csak kismértékű változását bírja elviselni (pl.: vízinövények), lehet átlagos tűrésű és lehet tágtűrésű(euriök/euriöcikus). Utóbbi esetben az adott környezeti tényező nagymértékű ingadozását is elviseli (például: mérsékelt övi fajok).

Jegyzetek

Források
Dr. Lénárd Ulaki Judit: Biológia, http://termtud.akg.hu/okt/9/valtozof/1elokoz.htm

Biológia

redpajama_set_name: RedPajamaWikipedia


886 available EMT jobs found on Careerbuilder.com. View and apply to these listings, or browse for similar jobs in your area.
About Career Pathways The EMT provides basic life support and assists the paramedic. Acting upon orders from a phy-sician, the paramedic provides advanced life support and is able to ADVICE FROM YOUR ADVISOR IS EXTREMELY IMPORTANT.
Find paramedic emt jobs articles from the career experts at Monster.
Latest news and developments on Emt B Training Advice. If you are looking for Emt B Training Advice, please visit our website.


The New Carlisle Police Department has a new prescription drug drop box in the hallway leading to the police department (the lower level of the Town Hall). You may dispose of unused or unwanted prescription pills. Below is a list of accepted and not accepted items.


Join Long Trail Sustainability (LTS) and PRé for our annual SimaPro User Group Meeting on September 24th, the evening before the LCA XVIII Conference. This is an opportunity to network with fellow SimaPro users, get answers from SimaPro experts, and learn about the exciting new SimaPro options.
Life cycle assessment is expanding beyond the LCA expert, and an increasing number of companies are looking for custom tools that can help them easily construct and share LCA models across departments. New SimaPro tools and options deliver more value not only for LCA experts, but also for business users. Now you can communicate LCA results to other departments and collect survey data with Share, Collect and Report Maker, as well as scale up the value of your existing tools (for example, calculate GHG emissions) or easily create new tools with SimaPro API.
The session will include live demos of these new tools and options available for SimaPro customers, followed by questions, discussion, and feedback by meeting attendees. This is a unique opportunity to learn about the future plans for the SimaPro software directly from Jori Coustillas, SimaPro Product Owner from PRé Consultants, network with other SimaPro users, and share your ideas and suggestions.
Monday, September 24th, from 5pm to 7pm (local time), before the ACLCA LCAXVIII Conference.
Cocktail hour and light hors d'oeuvres will be provided.
Fort Collins Marriott, Fort Collins, CO, the USA.
The room name and location will be given to registered attendees, by e-mail.
Free event, but registration is required. RSVP only by email, contact Shelly Severinghaus.
Can't make it to the SimaPro User Meeting?
Do you have a question about SimaPro?
Need help with your LCA model or study?
Let's discuss how to leverage your LCAs.
New to LCA and need training?
Have data you want to submit to DATASMART?
We are available for meetings throughout the conference. Email Jori Coustillas from PRé or Shelly Severinghaus from LTS to set up a time.


Earlier this month I wrote about a new cat that showed up here and was intimidating all the other animals. She was also on a major campaign to be let inside. Well, yesterday she won.
Yesterday was our first really cold day with some snow. This cat has apparently been a house cat all her life because she has no outdoor-cat-coping skills. My real feral cats have grown thick coats. They go and huddle in the hay when it gets really cold. The rest of the time they go about their business like they haven't noticed that it is cold. This cat's way of dealing with a cold spell was to repeatedly throw herself against the door of the house. When I would open it to go outside she would try to dash in between my feet. Stupid cat almost killed me a few times by tripping me down the stairs.
I finally decided that she could stay in the basement. She can't be on the main floor because my other cat is there. I haven't tested the new cat for viruses yet and she scares my other cat. The other cat is also the only cat around here who was actually invited to live here by me so she gets priority.
I grabbed the cat and put her in the basement. She was so happy. But she's decided that she really should be able to come upstairs. I told her not to push her luck. It is only because the rabbit that lived downstairs recently died that there is even a niche in our ecosystem for her.


There is tons of room. Why doesn't he go around?
Doesn't he realize the headlights from his lifted truck are shining right in my eyes?
Tailgaters. Everyone hates them, including the offenders themselves if they happen to end up on the frontend rather than the backend of the exchange. What do you do? Speed up? Change lanes? Slam on your brakes? Give them a one finger salute?
Or just don't get mad and get them to go around you?
First, let's dispense with the fiction that speeding helps you get to your destination faster. If you drive on America's freeways, it doesn't. Not unless you want to get totally crazy.
At 70 mph, it takes me 30 minutes to cover that 35 miles of freeway driving. But, who goes the speed limit? Not a lot of people in Utah. Like most people, I'll tack on that extra 5 mph. How much sooner does that faster speed get me to my office? Two minutes. That's it. If I drive 5 miles over the speed limit, I save a whopping 2 minutes off my commute time. No one is going to notice that extra 2 minutes in my day. And I have a long commute. If yours is shorter, it's going to save you even less time.
So, speeding doesn't really save you much time.
Now, let's talk about tailgating. I'm driving along at 75 mph and that guy behind me wants to go 80. I know it isn't really saving him any time, but I have no way of telling him that. And even if I did, he wouldn't want to listen or believe me.
Those crazy people who try to whip through traffic by cutting back and forth across multiple lanes, speeding and tailgating? They are gaining MAYBE 5-10 seconds on you. Try this experiment the next time you are driving on the freeway. Watch for one of those speed demons. When he (and it's almost always a he, sorry guys) goes past you, keep an eye on his car. After 5 or 10 minutes look for a road sign or an exit sign. When Speedy Gonzalez goes past it start counting. When you reach the sign, stop counting. Chances are you counted less than 10 seconds.
I mentioned that my commute is 35 miles of freeway driving. However, it's not all 70 mph. I commute past a landmark known as Point Of The Mountain. It's a section of the mountains that sticks out and forces the freeway to veer to the west and go up and over it. Utah Department of Transportation is widening the freeway at Point of the Mountain. They are half way through a 2 year construction project. Part of the reason I leave for work so early, is that traffic at the Point is pretty bad. They take away the carpool lane, and drop the speed limit from 70 mph to 55 mph. I'm willing to drive 75 in a 70 mph zone, but 75 in a 55 is a little too much for me. Besides, there are construction workers all over the sides of the road. I slow down to, you guessed it, 60 mph. And that's when the tailgaters start.
Not everyone wants to drive 60 through the construction zone. In fact, lots of people want to continue driving 75 or 80. The lanes are narrow and the shoulders non-existent. I think that's why the Highway Patrol doesn't give a lot of tickets through there. But, there are lots of people who think I'm going too slow at 60. Of course, I stay out of the left lane. That's just rude to drive slow in the inside lane. But, parked in the lane second from the left, every day I tool along for the 10 miles of construction at my safe(r) 60. And every day I get tailgaters. The ones that want to go 70, just whip around me and keep going. It's the ones that want to go 63 that end up behind me; as if they can push me with their headlights to bump it up a few miles per hour.
Here's the secret to getting them to stop tailgating you: slow down. Not aggressively. Not by slamming on your brakes and making them fear for their safety. That's not only dangerous driving, it's going to make the other driver angry. While that might be momentarily satisfying, it's potentially dangerous. And it's just not a nice thing to do. No, instead, just take your foot off the accelerator and decrease your speed by a couple of miles per hour. The guy behind you won't even notice that you are consciously doing it. All he knows is that it's now worth it for him to go around. People who will tailgate you when you are going 60 mph will go around you when you are going 55 mph. And we've already established that you really don't lose any commute time by dropping your speed slightly. If you try to outrun the tailgater by speeding up? They'll match pace with you. If you change lanes, you'll pick up a tailgater in the other lanes as well. Instead, just take a slight break and you'll be amazed at how quickly the tailgaters go around AND as an added bonus, your own stress level will decrease.
EXACTLY the method I employ on the DC/MD/VA freeways and major grid streets. Doesn't ALWAYS work, but maybe 75% – I'm often pointing out to my son the useless jackrabbit drivers darting all over the place and ending up almost even with me miles later. Sometimes BEHIND me, if I made good lane choices to stick with!


In the world of social media, news, opinions, stories and gossip spread a mile a minute. Many feel entitled to comment and often times, the comments generate further comments which can be misinterpreted or taken out of context. Readers may be aware of a recent video that has gone viral in relation to a passenger on car service app Gojek. In that video, which was posted by the driver, a passenger is seen to accuse the driver of all manner of abuse ranging from kidnap to racism to cheating.
My personal view is that the passenger behaved unreasonably and escalated a situation which could have been calmly resolved. The driver probably videoed the saga because he wanted evidence to prove that there was no wrongdoing on his part. I suppose that is fair enough. We have car cameras installed as objective evidence in case of accidents or the like and having a video prevents a "he says she says" scenario. What the driver erred on is posting the video publicly on social media. This is an intrusion of the passenger's privacy and clearly posted without her permission. While the driver may not have been aware of it, this could potentially have breached data protection laws if she can be clearly identified and the video was posted against her will. In other words, while filming her was not illegal, uploading the video without consent could potentially be.
I would therefore have to disagree with the view that the driver in question may be have exposed himself to criminal charges such as false imprisonment, wrongful arrest or unlawful restraint. Taking someone to the police station is not tantamount to an arrest. It must also be made clear that the driver did not "lock" the passenger in the car. It is a safety feature that the car locked automatically. In accordance with the video, the driver was behaving rationally while the passenger was getting worked up. How someone can come to the conclusion that this is false imprisonment is beyond me. If that were the case, I can argue that if I were brought to the wrong place that the journey was part of an "unlawful restraint" instead of just a mistake that can happen to anyone with no real harm done? The writer in question does not in my view hold "an unpopular opinion". Rather, he holds a misguided understanding of what constitutes false imprisonment.
If we were to use offences such as "false imprisonment, wrongful arrest or unlawful restraint" so flagrantly, it trivialises the seriousness of the crimes altogether and makes a mockery of the penal code. The only thing the driver should perhaps not have done is to have published the video he had taken. This however boils down to education and how aware people are of the impact and consequences of their actions online.


National Institute for Occupational Safety and Health: Known for short as NIOSH, a US Federal agency responsible for conducting research and making recommendations for the prevention of work-related disease and injury.
Despite its name (which would suggest that it is part of the National Institutes of Health (NIH), the Institute is part of the Centers for Disease Control and Prevention (the CDC).
provides training to occupational safety and health professionals.
NIOSH is a diverse organization. Its employees represent a wide range of disciplines including industrial hygiene, nursing, epidemiology, engineering, medicine, and statistics. Headquartered in Washington DC, NIOSH has offices in Atlanta, Georgia and research divisions in Cincinnati, Ohio; Morgantown, West Virginia; Bruceton, Pennsylvania; and Spokane, Washington.
The enormous toll from work-related injuries and diseases can, it is felt, be reduced. Progress has been made to date, largely based on the science and knowledge generated from occupational safety and health research. Most of this research is conducted or funded by NIOSH.


text:
The Oklahoman & NewsOK
--°Log inLog out13
NewsOK: Oklahoma City News, Sports, Weather & Entertainment
Cop killer faces family during penalty phase
by Tim Willert
Published: Wed, November 20, 2019 1:04 AM Updated: Wed, November 20, 2019 1:24 AM
Jury convicts man of murder in officer's death Prosecutors: Man accused of killing officer didn't want to go to jail Testimony to begin in trial of man accused of fatally shooting officer Prosecutors seeking death penalty for murder defendant accused of fatally shooting Tecumseh police officer Jury convicts woman in Tecumseh police officer's death
SHAWNEE — Siblings of slain Tecumseh police officer Justin Terney confronted the man who killed their brother Tuesday, telling Byron Shepard he broke their hearts and changed their lives forever.
"I still don't know why people choose to take a life. I don't know if we ever will," a tearful Corey Terney told jurors who will decide whether Shepard lives or dies. "I do know that I cannot forgive the person who took my brother's life."
Tonisha Rapp cried while she recalled standing by her brother's hospital bed and hearing the words "there's nothing more that we can do."
"I watched the life drain out of him while we all stood there, talking, crying, begging him not to go," she testified. "I watched his body turn ashy as he died."
Rapp said her brother "took the burden of interacting with dangerous people" and was executed "for no real reason."
"Justin did not die in vain, he died a hero," she said. "And a hero that this heinous criminal will never take away from him."
Nicole Marks said her baby brother dreamed of becoming a police officer.
"Byron Shepard ended Justin's life, ended Justin's dream," Marks told jurors.
Article: Jury convicts man of murder in officer's death
Article: Defense witnesses: Convicted cop killer abused as a child
Article: Mother says her son doesn't deserve to die for killing officer
Article: Jury chooses death for convicted killer of Tecumseh police officer
Article: Shepard receives death penalty
Video: Jury convicts man of murder in officer's death
The victim impact statements were entered into evidence during the penalty phase of Shepard's trial, which continues Wednesday in the courtroom of Pottawatomie County District Judge John G. Canavan Jr.
Prosecutors are seeking the death penalty as punishment for Shepard, 38, of Okemah. He was convicted Monday of killing Terney, 22, on March 26, 2017, following a traffic stop and chase on foot.
They allege Shepard is a "continuing threat to society."
"Doing what's right isn't always easy, but it's always right," prosecutor Pattye High told jurors. "At the conclusion of this case, I submit to you there will be one sentence that represents justice. And jail isn't an option for Byron Shepard."
In her opening statement, public defender Rayven Sealy told jurors they deserve to know more about Shepard before making such a "heavy decision."
"There are things that you will hear in mitigation. They are not offered as an excuse for what happened," Sealy said. "It's an explanation. An explanation of what happened and an explanation of who that person is sitting in front of you."
Also Tuesday, a convicted felon and two former love interests testified about physical abuse they suffered at the hands of Shepard.
The felon, Christopher Buxton, said Shepard beat him with a pipe or an aluminum bat in 2011. Prosecutors alleged Shepard lured Buxton to a woman's house by sending him a text message from her phone.
"His exact words were 'the only way you are leaving here is in a body bag,'" said Buxton, who is serving a prison sentence for manslaughter in Missouri.
Two women, including an ex-wife, told jurors Shepard routinely beat them when he used methamphetamine.
One of the witnesses recalled Shepard choking her until she "passed out" and said he once kicked her so hard "I went down the stairs" while holding the couple's baby.
A third woman testified about Shepard pointing a rifle at her during a dispute in 2007 when the woman was pregnant.
(Story continued below...)
Byron James Shepard is taken from the Pottawatomie County Courthouse on Nov. 9, 2017. [Oklahoman archive photo]
Tim Willert
Tim Willert is a native Californian with Oklahoma ties who covers K-12 education, including Oklahoma City Public Schools and the state Education Department. Before that he covered district, federal and appellate courts in Oklahoma County. Prior... Read more ›
CommentsCop killer faces family during penalty phase
Commenting on NewsOK requires a NewsOK Pro or Oklahoman subscription.
Log in or subscribe to read and leave comments.
© 2006-2022 GateHouse Media, LLC. All rights reserved

redpajama_set_name: RedPajamaCommonCrawl


Even if you consider yourself a stylish woman, we're all prone to making some wardrobe mistakes every now and then. If you have some issues about overspending, wearing ill-fitting clothes, or overstuffed wardrobe, you're not alone. So, keep on reading for the wardrobe mistakes you're probably making and how to fix them so you'll be more confident in your clothing choices.
Not taking your store-bought clothes to a tailor.
Even though you fall for a piece of clothing, but the sleeves or the hem is a little long or there's some gaping at the waist, you won't look great in it. If you already paid so much for it, don't think that you'll just spend more on tailoring. When you are tempted to skip the alterations, remind yourself that fit is a key component of style. By taking your store bought clothes to a tailor, you'll look more put together and confident.
You have a lot of bargain clothes you never wear.
Before going shopping, remember that sales and special offers can cause you to lose your mind. In fact, bargains are the first reason why women end up with useless pieces. Before you buy, think first if it was full price, would you still want it, need it, or even wear it. Also, think about how many hours you work to earn the money that you are about to blow on this item. By being not carried away by sales, you won't end up with clothes that you don't need, would never wear, and don't even look good in.
Desperation shopping for every impromptu occasion.
Whether it's a big event, wedding, or dinner date looms on your calendar, try to shop your closet first before heading to the mall. Maybe there's something in your closet you can wear. The key is to figure out what to wear as soon as you get an invitation. If you panic and race to make a purchase, you may end up with something pricey that you don't love and may never wear again. Also, think of some reasons that have nothing to do with clothes. Are you scared to encounter someone you haven't seen in a long time so you wish to look your best? This way, you'll put the task of getting dressed into perspective.
Not taking a good care of your footwear.
Failure to engage in preventive maintenance on your footwear will result to beyond repair shoes, trashed soles, and premature shoe replacement. So, spare yourself by treat new shoes with preventive care. When leather soled shoes and boots are young, have a skilled cobbler add thin protective rubber soles. A great thing, the look won't be compromised, and they will last much longer.
Disorganized closet that ends up to wearing the same things over and over again.
If you're piling multiple tops onto a single hanger, overstuffing drawers, and cramming hanging rods, it would be challenging for you to formulate fresh outfits. During this transition time, get rid of what no longer fits, suits your life, or makes you happy. Then, organize them by type and then by color to make them look more attractive.
Failing to change your bag regardless of season or occasion.
Carrying your everyday bag for every season or occasion may sound like getting the most out of your investment. Keep in mind that the bag's weight and material, like your clothes, should reflect the season's temperature. So think of darker and heavier bags for fall and winter, and lighter all around for spring and summer. This way, you'll be prepared for any occasion and switching bags won't feel like a big deal.
Emotional attachment to items that need to be tossed.
Take a good, hard look at old ensemble, and consider if it's still earning its keep. If you have even once said to yourself, that no one will notice its stain, rip, or frays, then it's time for a second opinion. Remember, there is a difference between a classic and something that's just old. If an item has deep sentimental value, you can treat it like a work of art, but if it's not worth that treatment, toss it. By heeding these tricks, you'll be able to get a fashion-forward style and a functional wardrobe that serves you well.


text:
<!DOCTYPE html>

  <title>Set a warning message</title>

Set a warning message

Set Message

Perf bots having an extended outage?
  Known issues causing incorrect or missing data?
  Use this form to warn users about the problem.

  <form method="POST" action="/set_warning_message">

        Warning message:

          <input name="warning_message" size=100 value="{{warning_message}}">

        Catapult Issue Tracker Bug ID:

          <input name="warning_bug" size="7" value="{{warning_bug}}">

    <input type="submit" value="Update Warning Message">
  </form>

Clear Message

Outage over? Clear the warning message.

  <form method="POST" action="/set_warning_message">
    <input name="warning_message" type="hidden" value="">
    <input name="warning_bug" type="hidden" value="">
    <input type="submit" value="Delete Warning Message">
  </form>

redpajama_set_name: RedPajamaGithub


I create photographs of people, couples, families, pets, fashion brands, bands, atmosphere, events, public figures, and my travels.
Please click contact if you would like to book me for a photoshoot or desire graphic design / branding and I will send you a quote.
Remote design is available and travel for photoshoots is possible.
I have experience in branding and graphic design as I used to work in formal Photographer & Designer positions for about 7 years during and after college.
I ran a Milwaukee Street Style blog for one year but now I enjoy photographing inspiring people across the globe, as well as writing about them on my Rae Bu Photo & Design facebook page and soon on my upcoming blog.
I create Visual & Wearable Art in varying mediums.
My current visual art endeavor is called Bissa Zolta and I am creating a collection of new paintings available as prints and also as samples for my small-mid size mural designs in a style I call "Spiritual Vaporwave." These artworks can be added to virtually and product, wall, or space.
I love the endeavor of beautifying a space and creating an atmosphere by simply installing a work of art. From the world to the mind and back into the world. I truly enjoy experiencing an image be evoked from raw materials; especially those that were found or previously used or are of a sustainable nature in general.
I beautify wardrobes with my art sustainably by modernizing vintage fashion into new forms as well as making hand-painted fashion on used clothing for all ages and genders. If you feel good in something I have made, then you should wear it. Period. I host pop-up shops from time to time and recently opened up my pop up shop on DePop. I also have some experience with costume design for short films. I have a BFA in Visual Art & Design from UWM.
Contact me for commission quotes for custom garments or small - midsize wall murals in indoor or outdoor spaces, and other fashion or visual collaborations. Available worldwide.


text:
51st Annual CMA Awards: Complete Winners List
The 51st Annual CMA Awards took place November 8 live from Nashville at the Bridgestone Arena. Brad Paisley and Carrie Underwood hosted the show for the tenth consecutive year bringing all of your favorite stars together Country Music's biggest night.
Garth Brooks took home the top honor of the night making this his sixth win for Entertainer of the Year. It was a big night for Chris Stapleton as well. The "Broken Halos" singer won both Male Vocalist of the Year and Album of the Year.
Check out the 2017 WINNERS list below and click here for exclusive CMA Awards coverage.
Entertainer of the Year: Garth Brooks
Male Vocalist of the Year: Chris Stapleton
Female Vocalist of the Year: Miranda Lambert
Vocal Duo of the Year: Brothers Osborne
New Artist of the Year: Jon Pardi
Vocal Group of the Year: Little Big Town
Single of the Year: "Blue Ain't Your Color" by Keith Urban
Song of the Year: "Better Man" by Little Big Town (Taylor Swift)
Album of the Year: From A Room: Volume 1-- Chris Stapleton
Musical Event of the Year: "Funny How Time Slips Away" (Glen Campbell with Willie Nelson)
Music Video of the Year: "It Ain't My Fault" by Brothers Osborne


The general public's affection toward birds translates into a serious underestimation of the health risks associated with pest birds. People who would never tolerate a colony of rats living in their attic will turn a blind eye towards pigeons entrenched in the rafters of their roof. Yet, in terms of disease and damage, the two pests are quite similar. In order to better understand how nuisance birds spread disease we need to understand the basics of disease and transmission.
When normal body functions become disrupted due to a foreign invader or an internal malfunction, we call the disruption a disease. Diseases caused by foreign invaders are called infectious diseases. The invading agents that account for the majority of infectious diseases are grouped in the following five categories; viruses, bacteria, mycotic (fungal), protozoal and rickettsial. From a layman's standpoint, the classification and definitions of disease are less important than how these diseases spread and how can we protect ourselves from them. Diseases need to be transported from place to place in order to spread. Birds are a perfect mechanism for spreading disease because they travel great distances, harbor over forty types of parasites and can host internally over sixty types of infectious diseases.
Using our understanding of how nuisance birds play a role in disease transmission, we can develop a few guidelines when dealing with bird infestations.
First and foremost, bird infestations are to be taken seriously but not irrationally. When evaluating a health risk potential look for the following: droppings or nesting materials inside air vents, birds around food or beverage production facilities, or large amounts of droppings in enclosed areas. These are the types of situations where disease can be spread. Remember, pigeons walking around your park bench is not cause for panic, while twenty birds living in the roof-top air ducts of a restaurant is a serious health concern requiring action.
Second, pest control professionals and do-it yourselfers must take the proper precautions when tackling bird control projects. Respirators, goggles and protective clothing must be used when cleaning up bird sites, particularly enclosed areas out of the sun with large amounts of droppings and nesting material (please see our separate information sheet on protective safety equipment).
Finally, it is not enough to remove the birds, it is crucial to exterminate all the ectoparasites and thoroughly disinfect the site. Please refer to our page on bird waste cleanup for more information.


As the Hamster Wheel Turns…..
Thoughts churned up in the wee hours.
A friend of mine from high-school just shared this http://themattwalshblog.com/2013/10/09/youre-a-stay-at-home-mom-what-do-you-do-all-day/ on Facebook. I've seen it pop up over the last few days but for whatever reason, didn't read it.
First, I'd like to say to @MattWalshRadio: Congrats, dude – you've nailed it smack on the head, and I appreciate the fact that you appreciate what is really important. Ferris Beuler said "If you don't stop and look around once in a while, you might miss it." And personally, I think we all miss it, most of the time.
I was born in 1973. My parents divorced when I was around 5 years old (which was better for all of us, trust me), and in the 1970s that meant I lived full time with Mom. Now, she wasn't a bad woman, but she wasn't right, in the head, and as an adult I can now say that she truly did the best she could.
I remember watching "Leave it to Beaver" when I was a kid, and I remember that she would either recoil at it, or make snide comments, but I really respected June Cleaver. She had it going on. That household ran like a clock, and the whole family knew that they needed her to do what she did so that they could do what they did.
Mom went back to college maybe a year after the divorce. As a result, I basically grew up on university campuses and spent more time around her professors and classmates than my own peers, but that suited me better anyway. I grew up with all the opportunities ahead of me that she felt were important, opportunities that she had to fight for. A totally different world from the Cleaver family.
Mom was born in 1952. The expectation from her parents was that she should meet a nice guy, get married, raise children and take care of a household. Well, from first-hand experience, let me tell you, this was really not her thing. I never met her mom, my grandmother, but from what I know, she would have been super proud of her. My grandfather, well, let's just say it took a bit longer for him to really understand WHY she would even think about something like archaeology and anthropology, but he did get there. Because he loved her.
So, there I was, along for the ride if you asked me, but she needed me to be a part of everything. I remember her asking me to quiz her before her undergrad and graduate exams. I remember going to her classes when I needed a break from my own school (because I was socially awkward and couldn't relate to my own peer group, so trust me, I needed a break). I remember emulating her with my very own legal pad and flair tip pen. I remember her linguistics professor asking for me to come to class with her because I was young enough to be able to pronounce Tagrinian words that had a glottal stop because I was young enough, basically, that I didn't realize "I Shouldn't Be Able To." As a result, now, I am a polyglot, speaking over five languages, and that is a skill I cherish about myself. And I am grateful to her for.
What didn't I learn from her? How to cook, how to sew, how to balance a checkbook, how to clean, all of the "normal" things that her parents, my grandparents, felt it was most important to know. For a girl. All of the things that I knew June Cleaver knocked out of the park every day. All of the things I'm figuring out now, at 40.
Over the course of my 40 years walking this earth so far I have been blessed to be able to: design lighting for the stage (and an Irish pub in NYC, who knew); work as a corporate and IP paralegal; be part of a founding team for a children's theatre that continues to rock the house to this day (long past my involvement); care for and handle alligators and snakes and vicious snapping turtles. I have been a development editor for "The Complete Idiot's Guides," and I have been a Production Manager for one of the biggest touring entertainment companies until the end of last year.
Glass ceilings, responsibility to my fellow women-folk, yada yada yada.
I was merely following the path ahead of me by doing what I loved to do.
In the process of doing that, I met the man that I love to love.
A few years ago, while we were both working on tour together, he needed to go home to take care of his Dad. He was conflicted at first about telling me, because he knew he needed to go home and do this, but he had this crazy thought that he would lose me if he did. I did my best to disavow him of that notion, and it must have worked, because here we are, a few years later, and we are together and figuring out how to do this whole thing, together. I don't really know why he ever thought he would lose me, not for certain, but I guess it might be because I was my job. And I don't regret that. He knew that for me, I am what I can do, and maybe he thought that I would choose what I was doing over him. Fair enough, because at that point, what I did consumed me.
I am what I can do. A powerful thought, but it can't be everything.
A few months in to my still being away on tour, and his being at home, in Australia (which isn't near to ANYTHING, by the way)…I really didn't think I could make it. I hated being away from him. I hated knowing he was slowly saying goodbye to his only remaining parent, and I WASN'T THERE. I did my best to be there whenever possible, and that huge company we worked for supported us in ways I never would have imagined, but I really wanted to BE THERE. I wanted to do the simple things, like make soup, take out the garbage, get groceries, give a hug. Anything, any little thing. I wanted to be his June Cleaver.
But we had agreed that I would stick it out, because at one point he thought he might come back to work for a while, so we were very pragmatic about it. When his father, who was a beautiful man, did pass, I knew he was home for good. And I knew, I wanted to be there. So we talked about it, and we agreed on a timeline. The show I was managing had some complicated markets that required a lot of pre-planning that I was already in the midst of. I knew I wanted to deliver the show to those markets. Yes, in my role, I wanted those marks on my belt. I wanted those achievements. But he also didn't want me to regret leaving. He knew I had to finish this too. It was tough, and again there were several times where I was so torn — I was committed to my team, but I wanted to be Home. And he wanted me home too, but he knew this was important to me. Home is where we are together, but that can only happen when we support eachother.
So we stayed the course, we stuck to the plan (with several pep talks from him to me), and we are now well on the other side.
I announced my departure almost a year prior to my actual resignation date to give my bosses and my team time to adjust, but also to give myself the time to leave things the best I could. I was leaving one family to create another, and I wanted to make sure I did it honourably.
Maybe because of my mother's unique qualities, in the past, no one had ever asked me when I would get married or have kids. But when I announced to my friends and family that I was resigning from this position to move to Australia to be with my Love, well….
Suddenly, it all came out.
Ok, let's all have a group reality check. First, I'm not too worried about the marriage thing, my Love just imported me to his home. Literally. He vouched for me and made declarations of his feelings to his own government and everything to make sure I could be here. I don't know about you, but that's pretty huge to me. And as far as my position before? I earned everything I achieved, through blood, sweat and tears….NOT GENDER. So it really shouldn't matter whether or not I decide to make a change. I do not believe that I am being arrogant when I say that I believe I was the right person for that position for the time I held it. And I am proud of what I achieved with my team. But I did NOT give anything up when I decided to resign. I listened to what my parents taught me in their various ways, and I knew that the core message was to follow my heart. And that's what I have always done. And that's what I am doing now.
So, now? I work from home. Oooooh. Bet that got a few people there. Let me tell you, even I thought I'd have a few luxurious mornings when I was counting the days until I would be Home. But the reality is, I didn't just come home, to Australia, to the other side of the world from everything, to be self employed. I didn't come here with the primary purpose of work at all (I just know I get bored easy and people seem to insist on exchanging money for goods so it's kind of necessary) but no…I came home to be with my Love and to take care of US to the best of my ability. And I don't sleep in, I'm up earlier than I was when I was on tour with a "Job" and I constantly feel like there are just not enough hours in the day.
I wake up in the morning and sure, I'm thinking about contracts and schedules and things for the work I'm currently doing now, but bigger than that is what do I need to do today for us? What am I making for dinner? What do our furry babies need to continue to grow into healthy, happy cats? What do I need to do to take care of our house, the house my Love grew up in?
So you see, the "work" that generates an income hits the bottom of the list as it comes to mind. That doesn't mean I don't do it, but to me the balance of this list is just fine.
I LOVE planning a meal for when my Love comes home from work and seeing him go for seconds.
I LOVE being able to be here to do silly things like get more of the muesli bars he likes to have for snacks at work.
I LOVE being here when he comes home.
I LOVE taking care of our home, together.
I LOVE the fact that we have regular TV shows that we watch together.
I still work for that huge company, as a sub-contractor. I've also re-started a prior endeavour of providing genealogy research. These are things I love doing. But I love being where I am more than that, and I love finding the best way I can to take care of US everyday more than anything else. My Love? He supports me, he knows I need to work, but he also says thank you for everything I do for US all the time. He seems to constantly find things for us to do together that I will love, he enjoys surprising me, he keeps me laughing, and nurtures my soul in ways that I would never have thought possible. He even puts up with me being a bit of a "Monica" and is adapting. With humour.
So did I give up something for this?
Not at all. I hit the benchmarks I needed to hit for my own professional development. Honestly, I got what I needed from the corporate entertainment world (now there's an oxymoron) that I was a rare component of (apparently, being a woman, whatever). And I bring all of that to where I am now.
Which, I have to say, blows my mind every day.
June Cleaver, in a different generation, put in the Production Management position I recently resigned from, would have blown everyone away.
Go ahead, think about what it takes to run a household. What it takes to make sure everyone is eating healthy, and that the cupboards are stocked, and the house is clean. Really think about that. And go on, tell me it's not work. I dare ya.
To everyone out there that works from home – in any capacity – I salute you. I'm just figuring it out now, and the learning curve is steep!
My photographs Follow this to see some of my photographs taken as I trek around the world.
I am home for good!


Evernote, a poster child for the freemium model, is showing signs of struggle, but associations may be better equipped to make the buzzy business model work.
Six years later, Evernote is still at it, having graduated from startup darling to the sprawling incumbent atop the note-keeping app market, passing 100 million users in 2014 (not a billion, but not bad). Freemium, however, is perhaps proving to be less of a snap than Libin made it sound.
Freemium demands a delicate balance between paid customers and a free user base.
These changes have all the earmarks of desperate cost-cutting. The burden of so many free users is weighing down the Evernote business and it has probably figured out that most won't convert. In these situations, it's easy to think of free users as freeloaders who the company is better off without.
Freemium has gotten plenty of attention since the term was coined in 2006, and Chris Anderson's analysis in Free: The Future of a Radical Price put it on the business-trend map. Associations have been paying heed just as long; "freemium" was included as a trend to watch in ASAE's 2008 environmental scanning guide Designing Your Future.
So, what does the recent move by Evernote—something of a poster child for the freemium model—say about freemium, particularly for associations? Is it as flawed as Petrocelli says it is?
First, let's acknowledge that freemium is but one variation on the basic "get them in the door" tactic, which has been used everywhere from baseball games (cheap tickets, expensive beer) to shopping malls (cheap picture with Santa, expensive gifts in the stores). It may be best viewed as one portion of a spectrum of business models, rather than an island to itself. For instance, the tiered membership models we've highlighted here in the past sometimes qualify as freemium if the bottom level is free.
Petrocelli at CMS Wire makes some valid points that freemium demands a delicate balance between paid customers and a free user base, particularly when the upsell is limited to a few options. As recently as 2014, Evernote's primary revenue source (70 percent) was indeed reported to be its Plus and Premium subscriptions, while 15 percent came from its enterprise product and 15 percent came from the branded accessories in the Evernote Market—the latter of which was shut down earlier this year, presumably leaving paid individual subscriptions as an even larger share of revenue.
This is where associations may have an advantage in putting freemium into action, because they have a far more diverse platter of revenue-driving products to serve up to their base of members and prospects. In comparison, the average association's membership dues make up 38 percent of its revenue, according to past ASAE research. Free membership and paid membership aren't the only options at an association's disposal. It can enroll free members and then sell them books, training courses, conferences, tradeshows, research, awards programs, and so on and so on (and, sure, even branded accessories).
Viewed this way, one could argue that associations have more or less always been doing this, in the form of selling to nonmembers. Freemium, then, for associations is less about adopting a new business model than it is about conferring "member" status on prospects for free and granting a few low-cost (and perhaps already free) benefits to them. Member is an important word to associations, though, so this move comes with decisions to make about who qualifies as a part of an association's community and how near or far the association wants to reach.
For associations that have adopted a freemium option, getting people in the door is surely a motivating factor, but almost all of the ones Associations Now has covered also cite a mission-based desire to broaden their reach and become more inclusive. For examples, see CompTIA, the American Society of Plant Biologists, the American Alliance of Museums, the Alliance for Women in Media, the Northwest Food Processors Association, and the American Dental Education Association.
And so the changes at Evernote provide, if not a red flag, then a yellow flag for associations, cautioning them to pay careful attention to the exact balance they strike between building a customer base through free offers and earning their dollars with premium ones. But associations may be better equipped to dodge the potential pitfalls of the freemium business model because, despite the buzzy moniker, freemium isn't all that different from the traditional model associations know and love.
Are you an Evernote user? How will the changes influence your relationship with the company? And how does the freemium model relate to your association's membership methods? Have you tried offering a free option? Share your thoughts in the comments.


text:
//
//  PopoverView.m
//  Embark
//
//  Created by Oliver Rickard on 20/08/2012.
//
//

#import "PopoverView.h"
#import "PopoverView_Configuration.h"
#import <QuartzCore/QuartzCore.h>

#pragma mark - Implementation

@implementation PopoverView

@synthesize subviewsArray;
@synthesize contentView;
@synthesize titleView;
@synthesize delegate;

#pragma mark - Static Methods

+ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withText:(NSString *)text delegate:(id<PopoverViewDelegate>)delegate {
    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
    [popoverView showAtPoint:point inView:view withText:text];
    popoverView.delegate = delegate;
    [popoverView RELEASE];
    return popoverView;
}

+ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withText:(NSString *)text delegate:(id<PopoverViewDelegate>)delegate {
    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
    [popoverView showAtPoint:point inView:view withTitle:title withText:text];
    popoverView.delegate = delegate;
    [popoverView RELEASE];
    return popoverView;
}

+ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withViewArray:(NSArray *)viewArray delegate:(id<PopoverViewDelegate>)delegate {
    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
    [popoverView showAtPoint:point inView:view withViewArray:viewArray];
    popoverView.delegate = delegate;
    [popoverView RELEASE];
    return popoverView;
}

+ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withViewArray:(NSArray *)viewArray delegate:(id<PopoverViewDelegate>)delegate {
    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
    [popoverView showAtPoint:point inView:view withTitle:title withViewArray:viewArray];
    popoverView.delegate = delegate;
    [popoverView RELEASE];
    return popoverView;
}

+ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withStringArray:(NSArray *)stringArray delegate:(id<PopoverViewDelegate>)delegate {
    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
    [popoverView showAtPoint:point inView:view withStringArray:stringArray];
    popoverView.delegate = delegate;
    [popoverView RELEASE];
    return popoverView;
}

+ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withStringArray:(NSArray *)stringArray delegate:(id<PopoverViewDelegate>)delegate {
    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
    [popoverView showAtPoint:point inView:view withTitle:title withStringArray:stringArray];
    popoverView.delegate = delegate;
    [popoverView RELEASE];
    return popoverView;
}

+ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withStringArray:(NSArray *)stringArray withImageArray:(NSArray *)imageArray delegate:(id<PopoverViewDelegate>)delegate {
    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
    [popoverView showAtPoint:point inView:view withStringArray:stringArray withImageArray:imageArray];
    popoverView.delegate = delegate;
    [popoverView RELEASE];
    return popoverView;
}

+ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withStringArray:(NSArray *)stringArray withImageArray:(NSArray *)imageArray delegate:(id<PopoverViewDelegate>)delegate {
    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
    [popoverView showAtPoint:point inView:view withTitle:title withStringArray:stringArray withImageArray:imageArray];
    popoverView.delegate = delegate;
    [popoverView RELEASE];
    return popoverView;
}

+ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withContentView:(UIView *)cView delegate:(id<PopoverViewDelegate>)delegate {
    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
    [popoverView showAtPoint:point inView:view withTitle:title withContentView:cView];
    popoverView.delegate = delegate;
    [popoverView RELEASE];
    return popoverView;
}

+ (PopoverView *)showPopoverAtPoint:(CGPoint)point inView:(UIView *)view withContentView:(UIView *)cView delegate:(id<PopoverViewDelegate>)delegate {
    PopoverView *popoverView = [[PopoverView alloc] initWithFrame:CGRectZero];
    [popoverView showAtPoint:point inView:view withContentView:cView];
    popoverView.delegate = delegate;
    [popoverView RELEASE];
    return popoverView;
}

#pragma mark - View Lifecycle

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code

        self.backgroundColor = [[UIColor darkGrayColor] colorWithAlphaComponent:0.0];

        self.titleView = nil;
        self.contentView = nil;

        showDividerRects = kShowDividersBetweenViews;
    }
    return self;
}

- (void)dealloc
{
    self.subviewsArray = nil;

    if (dividerRects) {
        [dividerRects RELEASE];
        dividerRects = nil;
    }

    self.contentView = nil;
    self.titleView = nil;

    [super DEALLOC];
}

#pragma mark - Display methods

// get the screen size, adjusted for orientation and status bar display
// see http://stackoverflow.com/questions/7905432/how-to-get-orientation-dependent-height-and-width-of-the-screen/7905540#7905540
- (CGSize) screenSize
{
    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
    CGSize size = [UIScreen mainScreen].bounds.size;
    UIApplication *application = [UIApplication sharedApplication];
    if (UIInterfaceOrientationIsLandscape(orientation))
    {
        size = CGSizeMake(size.height, size.width);
    }
    if (application.statusBarHidden == NO)
    {
        size.height -= MIN(application.statusBarFrame.size.width, application.statusBarFrame.size.height);
    }
    return size;
}

- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withText:(NSString *)text
{
    UIFont *font = kTextFont;

    CGSize screenSize = [self screenSize];
    CGSize textSize = [text sizeWithFont:font constrainedToSize:CGSizeMake(screenSize.width - kHorizontalMargin*4.f, 1000.f) lineBreakMode:0];

    UILabel *textView = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, textSize.width, textSize.height)];
    textView.backgroundColor = [UIColor clearColor];
    textView.userInteractionEnabled = NO;
    [textView setNumberOfLines:0]; //This is so the label word wraps instead of cutting off the text
    textView.font = font;
    textView.textAlignment = kTextAlignment;
    textView.textColor = kTextColor;
    textView.text = text;

    [self showAtPoint:point inView:view withViewArray:[NSArray arrayWithObject:[textView AUTORELEASE]]];
}

- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withText:(NSString *)text
{
    UIFont *font = kTextFont;

    CGSize screenSize = [self screenSize];
    CGSize textSize = [text sizeWithFont:font constrainedToSize:CGSizeMake(screenSize.width - kHorizontalMargin*4.f, 1000.f) lineBreakMode:0];

    UILabel *textView = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, textSize.width, textSize.height)];
    textView.backgroundColor = [UIColor clearColor];
    textView.userInteractionEnabled = NO;
    [textView setNumberOfLines:0]; //This is so the label word wraps instead of cutting off the text
    textView.font = font;
    textView.textAlignment = kTextAlignment;
    textView.textColor = kTextColor;
    textView.text = text;

    [self showAtPoint:point inView:view withTitle:title withViewArray:[NSArray arrayWithObject:[textView AUTORELEASE]]];
}

- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withViewArray:(NSArray *)viewArray
{
    UIView *container = [[UIView alloc] initWithFrame:CGRectZero];

    float totalHeight = 0.f;
    float totalWidth = 0.f;

    int i = 0;

    //Position each view the first time, and identify which view has the largest width that controls
    //the sizing of the popover.
    for (UIView *view in viewArray) {

        view.frame = CGRectMake(0, totalHeight, view.frame.size.width, view.frame.size.height);
        //Only add padding below the view if it's not the last item
        float padding = (i == viewArray.count-1) ? 0 : kBoxPadding;

        totalHeight += view.frame.size.height + padding;

        if (view.frame.size.width > totalWidth) {
            totalWidth = view.frame.size.width;
        }

        [container addSubview:view];

        i++;
    }

    //If dividers are enabled, then we allocate the divider rect array.  This will hold NSValues
    if (kShowDividersBetweenViews) {
        dividerRects = [[NSMutableArray alloc] initWithCapacity:viewArray.count-1];
    }

    container.frame = CGRectMake(0, 0, totalWidth, totalHeight);

    i = 0;

    totalHeight = 0;

    //Now we actually change the frame element for each subview, and center the views horizontally.
    for (UIView *view in viewArray) {
        if ([view autoresizingMask] == UIViewAutoresizingFlexibleWidth) {
            //Now make sure all flexible views are the full width
            view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y, totalWidth, view.frame.size.height);
        } else {
            //If the view is not flexible width, then we position it centered in the view
            //without stretching it.
            view.frame = CGRectMake(floorf(CGRectGetMinX(boxFrame) + totalWidth*0.5f - view.frame.size.width*0.5f), view.frame.origin.y, view.frame.size.width, view.frame.size.height);
        }

        //and if dividers are enabled, we record their position for the drawing methods
        if (kShowDividersBetweenViews && i != viewArray.count-1) {
            CGRect dividerRect = CGRectMake(view.frame.origin.x, floorf(view.frame.origin.y + view.frame.size.height + kBoxPadding*0.5f), view.frame.size.width, 0.5f);

            [((NSMutableArray *)dividerRects) addObject:[NSValue valueWithCGRect:dividerRect]];
        }

        //Only add padding below the view if it's not the last item
        float padding = (i == viewArray.count-1) ? 0.f : kBoxPadding;

        totalHeight += view.frame.size.height + padding;

        i++;
    }

    self.subviewsArray = viewArray;

    [self showAtPoint:point inView:view withContentView:[container AUTORELEASE]];
}

- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withViewArray:(NSArray *)viewArray
{
    UIView *container = [[UIView alloc] initWithFrame:CGRectZero];

    //Create a label for the title text.
//    CGSize titleSize = [title sizeWithFont:kTitleFont];
    CGSize titleSize = [title sizeWithFont:[UIFont fontWithName:@"HelveticaNeue-Bold" size:16.f]];
    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(0.f, 0.f, titleSize.width, titleSize.height)];
    titleLabel.backgroundColor = [UIColor clearColor];
    titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:16.f];
    titleLabel.textAlignment = UITextAlignmentCenter;
    titleLabel.textColor = kTitleColor;
    titleLabel.text = title;

    //Make sure that the title's label will have non-zero height.  If it has zero height, then we don't allocate any space
    //for it in the positioning of the views.
    float titleHeightOffset = (titleSize.height > 0.f ? kBoxPadding : 0.f);

    float totalHeight = titleSize.height + titleHeightOffset + kBoxPadding;
    float totalWidth = titleSize.width;

    int i = 0;

    //Position each view the first time, and identify which view has the largest width that controls
    //the sizing of the popover.
    for (UIView *view in viewArray) {

        view.frame = CGRectMake(0, totalHeight, view.frame.size.width, view.frame.size.height);

        //Only add padding below the view if it's not the last item.
        float padding = (i == viewArray.count-1) ? 0.f : kBoxPadding;

        totalHeight += view.frame.size.height + padding;

        if (view.frame.size.width > totalWidth) {
            totalWidth = view.frame.size.width;
        }

        [container addSubview:view];

        i++;
    }

    //If dividers are enabled, then we allocate the divider rect array.  This will hold NSValues
    if (kShowDividersBetweenViews) {
        dividerRects = [[NSMutableArray alloc] initWithCapacity:viewArray.count-1];
    }

    i = 0;

    for (UIView *view in viewArray) {
        if ([view autoresizingMask] == UIViewAutoresizingFlexibleWidth) {
            //Now make sure all flexible views are the full width
            view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y, totalWidth, view.frame.size.height);
        } else {
            //If the view is not flexible width, then we position it centered in the view
            //without stretching it.
            view.frame = CGRectMake(floorf(CGRectGetMinX(boxFrame) + totalWidth*0.5f - view.frame.size.width*0.5f), view.frame.origin.y, view.frame.size.width, view.frame.size.height);
        }

        //and if dividers are enabled, we record their position for the drawing methods
        if (kShowDividersBetweenViews && i != viewArray.count-1) {
            CGRect dividerRect = CGRectMake(view.frame.origin.x, floorf(view.frame.origin.y + view.frame.size.height + kBoxPadding*0.5f), view.frame.size.width, 0.5f);

            [((NSMutableArray *)dividerRects) addObject:[NSValue valueWithCGRect:dividerRect]];
        }

        i++;
    }

    titleLabel.frame = CGRectMake(floorf(totalWidth*0.5f - titleSize.width*0.5f), 0, titleSize.width, titleSize.height);

    //Store the titleView as an instance variable if it is larger than 0 height (not an empty string)
    if (titleSize.height > 0) {
        self.titleView = titleLabel;
    }

    [container addSubview:[titleLabel AUTORELEASE]];

    container.frame = CGRectMake(0, 0, totalWidth, totalHeight);

    self.subviewsArray = viewArray;

    [self showAtPoint:point inView:view withContentView:[container AUTORELEASE]];
}

- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withStringArray:(NSArray *)stringArray
{
    NSMutableArray *labelArray = [[NSMutableArray alloc] initWithCapacity:stringArray.count];

    UIFont *font = kTextFont;

    for (NSString *string in stringArray) {
        CGSize textSize = [string sizeWithFont:font];
        UIButton *textButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, textSize.width, textSize.height)];
        textButton.backgroundColor = [UIColor clearColor];
        textButton.titleLabel.font = font;
        textButton.titleLabel.textAlignment = kTextAlignment;
        textButton.titleLabel.textColor = kTextColor;
        [textButton setTitle:string forState:UIControlStateNormal];
        textButton.layer.cornerRadius = 4.f;
        [textButton setTitleColor:kTextColor forState:UIControlStateNormal];
        [textButton setTitleColor:kTextHighlightColor forState:UIControlStateHighlighted];
        [textButton addTarget:self action:@selector(didTapButton:) forControlEvents:UIControlEventTouchUpInside];

        [labelArray addObject:[textButton AUTORELEASE]];
    }

    [self showAtPoint:point inView:view withViewArray:[labelArray AUTORELEASE]];
}

- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withStringArray:(NSArray *)stringArray
 {
    NSMutableArray *labelArray = [[NSMutableArray alloc] initWithCapacity:stringArray.count];

    UIFont *font = kTextFont;

    for (NSString *string in stringArray) {
        CGSize textSize = [string sizeWithFont:font];
        UIButton *textButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, textSize.width, textSize.height)];
        textButton.backgroundColor = [UIColor clearColor];
        textButton.titleLabel.font = font;
        textButton.titleLabel.textAlignment = kTextAlignment;
        textButton.titleLabel.textColor = kTextColor;
        [textButton setTitle:string forState:UIControlStateNormal];
        textButton.layer.cornerRadius = 4.f;
        [textButton setTitleColor:kTextColor forState:UIControlStateNormal];
        [textButton setTitleColor:kTextHighlightColor forState:UIControlStateHighlighted];
        [textButton addTarget:self action:@selector(didTapButton:) forControlEvents:UIControlEventTouchUpInside];

        [labelArray addObject:[textButton AUTORELEASE]];
    }

    [self showAtPoint:point inView:view withTitle:title withViewArray:[labelArray AUTORELEASE]];
}

- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withStringArray:(NSArray *)stringArray withImageArray:(NSArray *)imageArray
{
    //Here we do something pretty similar to the stringArray method above.
    //We create an array of subviews that contains the strings and images centered above a label.

    NSAssert((stringArray.count == imageArray.count), @"stringArray.count should equal imageArray.count");
    NSMutableArray* tempViewArray = [self makeTempViewsWithStrings:stringArray andImages:imageArray];

    [self showAtPoint:point inView:view withViewArray:tempViewArray];
}

- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withStringArray:(NSArray *)stringArray withImageArray:(NSArray *)imageArray
{
    NSAssert((stringArray.count == imageArray.count), @"stringArray.count should equal imageArray.count");
    NSMutableArray* tempViewArray = [self makeTempViewsWithStrings:stringArray andImages:imageArray];

    [self showAtPoint:point inView:view withTitle:title withViewArray:tempViewArray];
}

- (NSMutableArray*) makeTempViewsWithStrings:(NSArray *)stringArray andImages:(NSArray *)imageArray
{
    NSMutableArray *tempViewArray = [[NSMutableArray alloc] initWithCapacity:stringArray.count];

    UIFont *font = kTextFont;

    for (int i = 0; i < stringArray.count; i++) {
        NSString *string = [stringArray objectAtIndex:i];

        //First we build a label for the text to set in.
        CGSize textSize = [string sizeWithFont:font];
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, textSize.width, textSize.height)];
        label.backgroundColor = [UIColor clearColor];
        label.font = font;
        label.textAlignment = kTextAlignment;
        label.textColor = kTextColor;
        label.text = string;
        label.layer.cornerRadius = 4.f;

        //Now we grab the image at the same index in the imageArray, and create
        //a UIImageView for it.
        UIImage *image = [imageArray objectAtIndex:i];
        UIImageView *imageView = [[UIImageView alloc] initWithImage:image];

        //Take the larger of the two widths as the width for the container
        float containerWidth = MAX(imageView.frame.size.width, label.frame.size.width);
        float containerHeight = label.frame.size.height + kImageTopPadding + kImageBottomPadding + imageView.frame.size.height;

        //This container will hold both the image and the label
        UIView *containerView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, containerWidth, containerHeight)];

        //Now we do the frame manipulations to put the imageView on top of the label, both centered
        imageView.frame = CGRectMake(floorf(containerWidth*0.5f - imageView.frame.size.width*0.5f), kImageTopPadding, imageView.frame.size.width, imageView.frame.size.height);
        label.frame = CGRectMake(floorf(containerWidth*0.5f - label.frame.size.width*0.5f), imageView.frame.size.height + kImageBottomPadding + kImageTopPadding, label.frame.size.width, label.frame.size.height);

        [containerView addSubview:imageView];
        [containerView addSubview:label];

        [label RELEASE];
        [imageView RELEASE];

        [tempViewArray addObject:containerView];
        [containerView RELEASE];
    }

    return [tempViewArray AUTORELEASE];
}

- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withTitle:(NSString *)title withContentView:(UIView *)cView
{
    [self showAtPoint:point inView:view withTitle:title withViewArray:[NSArray arrayWithObject:cView]];
}

- (void)showAtPoint:(CGPoint)point inView:(UIView *)view withContentView:(UIView *)cView {

    //NSLog(@"point:%f,%f", point.x, point.y);

    self.contentView = cView;
    parentView = view;

    // get the top view
    // http://stackoverflow.com/questions/3843411/getting-reference-to-the-top-most-view-window-in-ios-application/8045804#8045804
//    topView = [[[[UIApplication sharedApplication] keyWindow] subviews] lastObject];
    topView = [[[UIApplication sharedApplication] windows] lastObject];

    [self setupLayout:point inView:view];

    // Make the view small and transparent before animation
    self.alpha = 0.f;
    self.transform = CGAffineTransformMakeScale(0.1f, 0.1f);

    // animate into full size
    // First stage animates to 1.05x normal size, then second stage animates back down to 1x size.
    // This two-stage animation creates a little "pop" on open.
    [UIView animateWithDuration:0.2f delay:0.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
        self.alpha = 1.f;
        self.transform = CGAffineTransformMakeScale(1.05f, 1.05f);
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:0.08f delay:0.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
            self.transform = CGAffineTransformIdentity;
        } completion:nil];
    }];
}

- (void)layoutAtPoint:(CGPoint)point inView:(UIView *)view
{
    // make transparent
    self.alpha = 0.f;

    [self setupLayout:point inView:view];

    // animate back to full opacity
    [UIView animateWithDuration:0.2f delay:0.f options:UIViewAnimationOptionCurveEaseInOut animations:^{
        self.alpha = 1.f;
    } completion:nil];
}

-(void)setupLayout:(CGPoint)point inView:(UIView*)view
{
    CGPoint topPoint = [topView convertPoint:point fromView:view];

    arrowPoint = topPoint;

    //NSLog(@"arrowPoint:%f,%f", arrowPoint.x, arrowPoint.y);

    CGRect topViewBounds = topView.bounds;
    //NSLog(@"topViewBounds %@", NSStringFromCGRect(topViewBounds));

    float contentHeight = contentView.frame.size.height;
    float contentWidth = contentView.frame.size.width;

    float padding = kBoxPadding;

    float boxHeight = contentHeight + 2.f*padding;
    float boxWidth = contentWidth + 2.f*padding;

    float xOrigin = 0.f;

    //Make sure the arrow point is within the drawable bounds for the popover.
    if (arrowPoint.x + kArrowHeight > topViewBounds.size.width - kHorizontalMargin - kBoxRadius - kArrowHorizontalPadding) {//Too far to the right
        arrowPoint.x = topViewBounds.size.width - kHorizontalMargin - kBoxRadius - kArrowHorizontalPadding - kArrowHeight;
        //NSLog(@"Correcting Arrow Point because it's too far to the right");
    } else if (arrowPoint.x - kArrowHeight < kHorizontalMargin + kBoxRadius + kArrowHorizontalPadding) {//Too far to the left
        arrowPoint.x = kHorizontalMargin + kArrowHeight + kBoxRadius + kArrowHorizontalPadding;
        //NSLog(@"Correcting Arrow Point because it's too far to the left");
    }

    //NSLog(@"arrowPoint:%f,%f", arrowPoint.x, arrowPoint.y);

    xOrigin = floorf(arrowPoint.x - boxWidth*0.5f);

    //Check to see if the centered xOrigin value puts the box outside of the normal range.
    if (xOrigin < CGRectGetMinX(topViewBounds) + kHorizontalMargin) {
        xOrigin = CGRectGetMinX(topViewBounds) + kHorizontalMargin;
    } else if (xOrigin + boxWidth > CGRectGetMaxX(topViewBounds) - kHorizontalMargin) {
        //Check to see if the positioning puts the box out of the window towards the left
        xOrigin = CGRectGetMaxX(topViewBounds) - kHorizontalMargin - boxWidth;
    }

    float arrowHeight = kArrowHeight;

    float topPadding = kTopMargin;

    above = YES;

    if (topPoint.y - contentHeight - arrowHeight - topPadding < CGRectGetMinY(topViewBounds)) {
        //Position below because it won't fit above.
        above = NO;

        boxFrame = CGRectMake(xOrigin, arrowPoint.y + arrowHeight, boxWidth, boxHeight);
    } else {
        //Position above.
        above = YES;

        boxFrame = CGRectMake(xOrigin, arrowPoint.y - arrowHeight - boxHeight, boxWidth, boxHeight);
    }

    //NSLog(@"boxFrame:(%f,%f,%f,%f)", boxFrame.origin.x, boxFrame.origin.y, boxFrame.size.width, boxFrame.size.height);

    CGRect contentFrame = CGRectMake(boxFrame.origin.x + padding, boxFrame.origin.y + padding, contentWidth, contentHeight);
    contentView.frame = contentFrame;

    //We set the anchorPoint here so the popover will "grow" out of the arrowPoint specified by the user.
    //You have to set the anchorPoint before setting the frame, because the anchorPoint property will
    //implicitly set the frame for the view, which we do not want.
    self.layer.anchorPoint = CGPointMake(arrowPoint.x / topViewBounds.size.width, arrowPoint.y / topViewBounds.size.height);
    self.frame = topViewBounds;
    [self setNeedsDisplay];

    [self addSubview:contentView];
    [topView addSubview:self];

    //Add a tap gesture recognizer to the large invisible view (self), which will detect taps anywhere on the screen.
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
    tap.cancelsTouchesInView = NO; // Allow touches through to a UITableView or other touchable view, as suggested by Dimajp.
    [self addGestureRecognizer:tap];
    [tap RELEASE];

    self.userInteractionEnabled = YES;
}

#pragma mark - Activity Indicator

//Animates in a progress indicator, and removes
- (void)showActivityIndicatorWithMessage:(NSString *)msg
{
    if ([titleView isKindOfClass:[UILabel class]]) {
        ((UILabel *)titleView).text = msg;
    }

    if (subviewsArray && (subviewsArray.count > 0)) {
        [UIView animateWithDuration:0.2f animations:^{
            for (UIView *view in subviewsArray) {
                view.alpha = 0.f;
            }
        }];

        if (showDividerRects) {
            showDividerRects = NO;
            [self setNeedsDisplay];
        }
    }

    if (activityIndicator) {
        [activityIndicator RELEASE];
        [activityIndicator removeFromSuperview];
        activityIndicator = nil;
    }

    activityIndicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
    activityIndicator.frame = CGRectMake(CGRectGetMidX(contentView.bounds) - 10.f, CGRectGetMidY(contentView.bounds) - 10.f + 20.f, 20.f, 20.f);
    [contentView addSubview:activityIndicator];

    [activityIndicator startAnimating];
}

- (void)hideActivityIndicatorWithMessage:(NSString *)msg
{
    if ([titleView isKindOfClass:[UILabel class]]) {
        ((UILabel *)titleView).text = msg;
    }

    [activityIndicator stopAnimating];
    [UIView animateWithDuration:0.1f animations:^{
        activityIndicator.alpha = 0.f;
    } completion:^(BOOL finished) {
        [activityIndicator RELEASE];
        [activityIndicator removeFromSuperview];
        activityIndicator = nil;
    }];
}

- (void)showImage:(UIImage *)image withMessage:(NSString *)msg
{
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    imageView.alpha = 0.f;
    imageView.frame = CGRectMake(floorf(CGRectGetMidX(contentView.bounds) - image.size.width*0.5f), floorf(CGRectGetMidY(contentView.bounds) - image.size.height*0.5f + ((self.titleView) ? 20 : 0.f)), image.size.width, image.size.height);
    imageView.transform = CGAffineTransformMakeScale(0.1f, 0.1f);

    [contentView addSubview:[imageView AUTORELEASE]];

    if (subviewsArray && (subviewsArray.count > 0)) {
        [UIView animateWithDuration:0.2f animations:^{
            for (UIView *view in subviewsArray) {
                view.alpha = 0.f;
            }
        }];

        if (showDividerRects) {
            showDividerRects = NO;
            [self setNeedsDisplay];
        }
    }

    if (msg) {
        if ([titleView isKindOfClass:[UILabel class]]) {
            ((UILabel *)titleView).text = msg;
        }
    }

    [UIView animateWithDuration:0.2f delay:0.2f options:UIViewAnimationOptionCurveEaseOut animations:^{
        imageView.alpha = 1.f;
        imageView.transform = CGAffineTransformIdentity;
    } completion:^(BOOL finished) {
        //[imageView removeFromSuperview];
    }];
}

- (void)showError
{
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"error"]];
    imageView.alpha = 0.f;
    imageView.frame = CGRectMake(CGRectGetMidX(contentView.bounds) - 20.f, CGRectGetMidY(contentView.bounds) - 20.f + ((self.titleView) ? 20 : 0.f), 40.f, 40.f);
    imageView.transform = CGAffineTransformMakeScale(0.1f, 0.1f);

    [contentView addSubview:[imageView AUTORELEASE]];

    if (subviewsArray && (subviewsArray.count > 0)) {
        [UIView animateWithDuration:0.1f animations:^{
            for (UIView *view in subviewsArray) {
                view.alpha = 0.f;
            }
        }];

        if (showDividerRects) {
            showDividerRects = NO;
            [self setNeedsDisplay];
        }
    }

    [UIView animateWithDuration:0.1f delay:0.1f options:UIViewAnimationOptionCurveEaseOut animations:^{
        imageView.alpha = 1.f;
        imageView.transform = CGAffineTransformIdentity;
    } completion:^(BOOL finished) {
        //[imageView removeFromSuperview];
    }];

}

- (void)showSuccess
{
    UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"success"]];
    imageView.alpha = 0.f;
    imageView.frame = CGRectMake(CGRectGetMidX(contentView.bounds) - 20.f, CGRectGetMidY(contentView.bounds) - 20.f + ((self.titleView) ? 20 : 0.f), 40.f, 40.f);
    imageView.transform = CGAffineTransformMakeScale(0.1f, 0.1f);

    [contentView addSubview:[imageView AUTORELEASE]];

    if (subviewsArray && (subviewsArray.count > 0)) {
        [UIView animateWithDuration:0.1f animations:^{
            for (UIView *view in subviewsArray) {
                view.alpha = 0.f;
            }
        }];

        if (showDividerRects) {
            showDividerRects = NO;
            [self setNeedsDisplay];
        }
    }

    [UIView animateWithDuration:0.1f delay:0.1f options:UIViewAnimationOptionCurveEaseOut animations:^{
        imageView.alpha = 1.f;
        imageView.transform = CGAffineTransformIdentity;
    } completion:^(BOOL finished) {
        //[imageView removeFromSuperview];
    }];

}

#pragma mark - User Interaction

- (void)tapped:(UITapGestureRecognizer *)tap
{
    CGPoint point = [tap locationInView:contentView];

    //NSLog(@"point:(%f,%f)", point.x, point.y);

    BOOL found = NO;

    //NSLog(@"subviewsArray:%@", subviewsArray);

    for (int i = 0; i < subviewsArray.count && !found; i++) {
        UIView *view = [subviewsArray objectAtIndex:i];

        //NSLog(@"Rect:(%f,%f,%f,%f)", view.frame.origin.x, view.frame.origin.y, view.frame.size.width, view.frame.size.height);

        if (CGRectContainsPoint(view.frame, point)) {
            //The tap was within this view, so we notify the delegate, and break the loop.

            found = YES;

            //NSLog(@"Tapped subview:%d", i);

            if ([view isKindOfClass:[UIButton class]]) {
                return;
            }

            if (delegate && [delegate respondsToSelector:@selector(popoverView:didSelectItemAtIndex:)]) {
                [delegate popoverView:self didSelectItemAtIndex:i];
            }

            break;
        }
    }

    if (!found && CGRectContainsPoint(contentView.bounds, point)) {
        found = YES;
        //NSLog(@"popover box contains point, ignoring user input");
    }

    if (!found) {
        [self dismiss:YES];
    }

}

- (void)didTapButton:(UIButton *)sender
{
    int index = [subviewsArray indexOfObject:sender];

    if (index == NSNotFound) {
        return;
    }

    if (delegate && [delegate respondsToSelector:@selector(popoverView:didSelectItemAtIndex:)]) {
        [delegate popoverView:self didSelectItemAtIndex:index];
    }
}

- (void)dismiss
{
    [self dismiss:YES];
}

- (void)dismiss:(BOOL)animated
{
    if (!animated)
    {
        [self dismissComplete];
    }
    else
    {
        [UIView animateWithDuration:0.3f animations:^{
            self.alpha = 0.1f;
            self.transform = CGAffineTransformMakeScale(0.1f, 0.1f);
        } completion:^(BOOL finished) {
            [self dismissComplete];
        }];
    }
}

- (void)dismissComplete
{
    [self removeFromSuperview];

    if (self.delegate && [self.delegate respondsToSelector:@selector(popoverViewDidDismiss:)]) {
        [delegate popoverViewDidDismiss:self];
    }
}

- (void)animateRotationToNewPoint:(CGPoint)point inView:(UIView *)view withDuration:(NSTimeInterval)duration
{
    [self layoutAtPoint:point inView:view];
}

#pragma mark - Drawing Routines

// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code

    // Build the popover path
    CGRect frame = boxFrame;

    float xMin = CGRectGetMinX(frame);
    float yMin = CGRectGetMinY(frame);

    float xMax = CGRectGetMaxX(frame);
    float yMax = CGRectGetMaxY(frame);

    float radius = kBoxRadius; //Radius of the curvature.

    float cpOffset = kCPOffset; //Control Point Offset.  Modifies how "curved" the corners are.

    /*
     LT2            RT1
     LT1⌜⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⎺⌝RT2
     |               |
     |    popover    |
     |               |
     LB2⌞_______________⌟RB1
     LB1           RB2

     Traverse rectangle in clockwise order, starting at LT1
     L = Left
     R = Right
     T = Top
     B = Bottom
     1,2 = order of traversal for any given corner

     */

    UIBezierPath *popoverPath = [UIBezierPath bezierPath];
    [popoverPath moveToPoint:CGPointMake(CGRectGetMinX(frame), CGRectGetMinY(frame) + radius)];//LT1
    [popoverPath addCurveToPoint:CGPointMake(xMin + radius, yMin) controlPoint1:CGPointMake(xMin, yMin + radius - cpOffset) controlPoint2:CGPointMake(xMin + radius - cpOffset, yMin)];//LT2

    //If the popover is positioned below (!above) the arrowPoint, then we know that the arrow must be on the top of the popover.
    //In this case, the arrow is located between LT2 and RT1
    if (!above) {
        [popoverPath addLineToPoint:CGPointMake(arrowPoint.x - kArrowHeight, yMin)];//left side
        [popoverPath addCurveToPoint:arrowPoint controlPoint1:CGPointMake(arrowPoint.x - kArrowHeight + kArrowCurvature, yMin) controlPoint2:arrowPoint];//actual arrow point
        [popoverPath addCurveToPoint:CGPointMake(arrowPoint.x + kArrowHeight, yMin) controlPoint1:arrowPoint controlPoint2:CGPointMake(arrowPoint.x + kArrowHeight - kArrowCurvature, yMin)];//right side
    }

    [popoverPath addLineToPoint:CGPointMake(xMax - radius, yMin)];//RT1
    [popoverPath addCurveToPoint:CGPointMake(xMax, yMin + radius) controlPoint1:CGPointMake(xMax - radius + cpOffset, yMin) controlPoint2:CGPointMake(xMax, yMin + radius - cpOffset)];//RT2
    [popoverPath addLineToPoint:CGPointMake(xMax, yMax - radius)];//RB1
    [popoverPath addCurveToPoint:CGPointMake(xMax - radius, yMax) controlPoint1:CGPointMake(xMax, yMax - radius + cpOffset) controlPoint2:CGPointMake(xMax - radius + cpOffset, yMax)];//RB2

    //If the popover is positioned above the arrowPoint, then we know that the arrow must be on the bottom of the popover.
    //In this case, the arrow is located somewhere between LB1 and RB2
    if (above) {
        [popoverPath addLineToPoint:CGPointMake(arrowPoint.x + kArrowHeight, yMax)];//right side
        [popoverPath addCurveToPoint:arrowPoint controlPoint1:CGPointMake(arrowPoint.x + kArrowHeight - kArrowCurvature, yMax) controlPoint2:arrowPoint];//arrow point
        [popoverPath addCurveToPoint:CGPointMake(arrowPoint.x - kArrowHeight, yMax) controlPoint1:arrowPoint controlPoint2:CGPointMake(arrowPoint.x - kArrowHeight + kArrowCurvature, yMax)];
    }

    [popoverPath addLineToPoint:CGPointMake(xMin + radius, yMax)];//LB1
    [popoverPath addCurveToPoint:CGPointMake(xMin, yMax - radius) controlPoint1:CGPointMake(xMin + radius - cpOffset, yMax) controlPoint2:CGPointMake(xMin, yMax - radius + cpOffset)];//LB2
    [popoverPath closePath];

    //// General Declarations
    CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
    CGContextRef context = UIGraphicsGetCurrentContext();

    //// Shadow Declarations
    UIColor* shadow = [UIColor colorWithWhite:0.0f alpha:kShadowAlpha];
    CGSize shadowOffset = CGSizeMake(0, 1);
    CGFloat shadowBlurRadius = kShadowBlur;

    //// Gradient Declarations
    NSArray* gradientColors = [NSArray arrayWithObjects:
                               (id)kGradientTopColor.CGColor,
                               (id)kGradientBottomColor.CGColor, nil];
    CGFloat gradientLocations[] = {0, 1};
    CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFTYPECAST(CFArrayRef)gradientColors), gradientLocations);

    //These floats are the top and bottom offsets for the gradient drawing so the drawing includes the arrows.
    float bottomOffset = (above ? kArrowHeight : 0.f);
    float topOffset = (!above ? kArrowHeight : 0.f);

    //Draw the actual gradient and shadow.
    CGContextSaveGState(context);
    CGContextSetShadowWithColor(context, shadowOffset, shadowBlurRadius, shadow.CGColor);
    CGContextBeginTransparencyLayer(context, NULL);
    [popoverPath addClip];
    CGContextDrawLinearGradient(context, gradient, CGPointMake(CGRectGetMidX(frame), CGRectGetMinY(frame) - topOffset), CGPointMake(CGRectGetMidX(frame), CGRectGetMaxY(frame) + bottomOffset), 0);
    CGContextEndTransparencyLayer(context);
    CGContextRestoreGState(context);

    //// Cleanup
    CGGradientRelease(gradient);
    CGColorSpaceRelease(colorSpace);

    //Draw the title background
    if (kDrawTitleGradient) {
        //Calculate the height of the title bg
        float titleBGHeight = -1;

        //NSLog(@"titleView:%@", titleView);

        if (titleView != nil) {
            titleBGHeight = kBoxPadding*2.f + titleView.frame.size.height;
        }

        //Draw the title bg height, but only if we need to.
        if (titleBGHeight > 0.f) {
            CGPoint startingPoint = CGPointMake(xMin, yMin + titleBGHeight);
            CGPoint endingPoint = CGPointMake(xMax, yMin + titleBGHeight);

            UIBezierPath *titleBGPath = [UIBezierPath bezierPath];
            [titleBGPath moveToPoint:startingPoint];
            [titleBGPath addLineToPoint:CGPointMake(CGRectGetMinX(frame), CGRectGetMinY(frame) + radius)];//LT1
            [titleBGPath addCurveToPoint:CGPointMake(xMin + radius, yMin) controlPoint1:CGPointMake(xMin, yMin + radius - cpOffset) controlPoint2:CGPointMake(xMin + radius - cpOffset, yMin)];//LT2

            //If the popover is positioned below (!above) the arrowPoint, then we know that the arrow must be on the top of the popover.
            //In this case, the arrow is located between LT2 and RT1
            if (!above) {
                [titleBGPath addLineToPoint:CGPointMake(arrowPoint.x - kArrowHeight, yMin)];//left side
                [titleBGPath addCurveToPoint:arrowPoint controlPoint1:CGPointMake(arrowPoint.x - kArrowHeight + kArrowCurvature, yMin) controlPoint2:arrowPoint];//actual arrow point
                [titleBGPath addCurveToPoint:CGPointMake(arrowPoint.x + kArrowHeight, yMin) controlPoint1:arrowPoint controlPoint2:CGPointMake(arrowPoint.x + kArrowHeight - kArrowCurvature, yMin)];//right side
            }

            [titleBGPath addLineToPoint:CGPointMake(xMax - radius, yMin)];//RT1
            [titleBGPath addCurveToPoint:CGPointMake(xMax, yMin + radius) controlPoint1:CGPointMake(xMax - radius + cpOffset, yMin) controlPoint2:CGPointMake(xMax, yMin + radius - cpOffset)];//RT2
            [titleBGPath addLineToPoint:endingPoint];
            [titleBGPath addLineToPoint:startingPoint];
            [titleBGPath closePath];

            //// General Declarations
            CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
            CGContextRef context = UIGraphicsGetCurrentContext();

            //// Gradient Declarations
            NSArray* gradientColors = [NSArray arrayWithObjects:
                                       (id)kGradientTitleTopColor.CGColor,
                                       (id)kGradientTitleBottomColor.CGColor, nil];
            CGFloat gradientLocations[] = {0, 1};
            CGGradientRef gradient = CGGradientCreateWithColors(colorSpace, (CFTYPECAST(CFArrayRef)gradientColors), gradientLocations);

            //These floats are the top and bottom offsets for the gradient drawing so the drawing includes the arrows.
            float topOffset = (!above ? kArrowHeight : 0.f);

            //Draw the actual gradient and shadow.
            CGContextSaveGState(context);
            CGContextBeginTransparencyLayer(context, NULL);
            [titleBGPath addClip];
            CGContextDrawLinearGradient(context, gradient, CGPointMake(CGRectGetMidX(frame), CGRectGetMinY(frame) - topOffset), CGPointMake(CGRectGetMidX(frame), CGRectGetMinY(frame) + titleBGHeight), 0);
            CGContextEndTransparencyLayer(context);
            CGContextRestoreGState(context);

            UIBezierPath *dividerLine = [UIBezierPath bezierPathWithRect:CGRectMake(startingPoint.x, startingPoint.y, (endingPoint.x - startingPoint.x), 0.5f)];
            [[UIColor colorWithRed:0.741 green:0.741 blue:0.741 alpha:0.5f] setFill];
            [dividerLine fill];

            //// Cleanup
            CGGradientRelease(gradient);
            CGColorSpaceRelease(colorSpace);
        }
    }

    //Draw the divider rects if we need to
    {
        if (kShowDividersBetweenViews && showDividerRects) {
            if (dividerRects && dividerRects.count > 0) {
                for (NSValue *value in dividerRects) {
                    CGRect rect = value.CGRectValue;
                    rect.origin.x += contentView.frame.origin.x;
                    rect.origin.y += contentView.frame.origin.y;

                    UIBezierPath *dividerPath = [UIBezierPath bezierPathWithRect:rect];
                    [kDividerColor setFill];
                    [dividerPath fill];
                }
            }
        }
    }

    //Draw border if we need to
    //The border is done last because it needs to be drawn on top of everything else
    if (kDrawBorder)
    {
        [kBorderColor setStroke];
        popoverPath.lineWidth = kBorderWidth;
        [popoverPath stroke];
    }

}

@end


Combine rice flour, tapioca flour and cornflour in a mixing bowl. Add oil to mix, then pour in just enough water gradually, and mix into a smooth batter.
Place a rectangular tray in a big steamer and steam over high heat for 3-4 minutes. When the tray is heated up, place a piece of damp fine muslin cloth over it.
Pour in a ladlefull or approximately 200 ml batter.
Sprinkle some finely chopped char siu or shelled prawns along one side of the batter, if you like.
Steam for 3 minutes over high heat.
Lightly grease a marble top with corn oil. When the rice rolls are ready, flip over the piece of muslin cloth with the cooked rice roll.
Lightly scrape off the rice roll and roll up.
Serve with fragrant soy sauce and chilli sauce.