text:
Stuck on the Spiritual Spectrum
by Philip Goldberg
bestdesigns/Thinkstock
A dispute at a small evangelical college; the death of a Supreme Court Justice; the presidential election campaign—these and other recent events reminded me, yet again, that our religious attitudes and spiritual orientations are almost infinitely diverse. Not only are there vast differences among adherents of every tradition, but also diversity within the diversity within the diversity. Within every church, synagogue, mosque, temple, sangha, ashram, yoga studio, coven, meditation center—in fact everywhere the spiritual impulse is engaged—individuals vary more than we realize.
Scholars have found that one reason for this internal diversity is that people tend to move upward on a continuum of spiritual expansiveness. Perhaps the best-known map of this process was charted by James W. Fowler, a theologian and social scientist who taught at Harvard and Emory. In his seminal study, the basis of his book Stages of Faith (1981), Fowler defined steps of development that we all go through as we mature, and some stages that are reached only by some.
Between age seven and puberty, most people rise to what Fowler called the Mythic-Literal stage, in which God is anthropomorphic and religious stories and symbols are taken literally. In the next stage, Synthetic-Conventional faith, beliefs are determined by doctrines and precepts handed down by authority figures. With further development, people elevate to Fowler's Individuative-Reflective stage of critical reflection, where stories and symbols are "de-mythologized" and self-actualizing drives emerge.
At the next level, Conjunctive, individuals are "alive to paradox and the truth in apparent contradictions," and "freed from the confines of tribe, class, religious community or nation."
At the earlier levels, the Other is likely to represent a threat, or an object of derision, or perhaps an opportunity for conquest or conversion. Attitudes toward the Other are more accepting at higher levels, and especially in Fowler's final stage, Universalizing faith, which is characterized by a "taste and feel for transcendent moral and religious actuality…devotion to universalizing compassion" and "enlarged visions of universal community."
Evidence suggests that the higher stages are less rare now than they were when Fowler published his important work. Still, it is not hard to conclude that most religion-driven tension stems from the dogmatic and tribal mindsets of those stuck in the early stages of development. Throughout the world, tension and conflict arise when they bump up against one another, and against those whose perspectives are more pluralistic and inclusive.
We saw one expression of this tension recently, when Wheaton College professor Larycia Hawkins was disciplined for making a public statement of solidarity with Muslims. She posted a photo of herself on Facebook wearing a traditional hijab in support of Muslims, who, she declared, worship the same God as Christians like her. School officials objected to that statement on theological grounds, saying Hawkins violated the declaration of faith signed by all faculty members. As professor Hawkins is an African American woman and the relevant officials were white men, accusations of sexism and racism were voiced, but if we look only at the theological argument we see a clash between inclusive and exclusivist visions. Hawkins reached across boundaries and her antagonists were inclined to remain apart from (and above) the religious Other. To his credit, Wheaton provost Stan Jones eventually apologized for his "lack of wisdom and collegiality," but the beleaguered Hawkins and the school parted company. If I ran a college, I'd hire her in a heartbeat.
The enormous judicial and political ramifications of Justice Antonin Scalia's death received wall to wall scrutiny, of course. But the spiritual overtones should also be contemplated. By all indications, Scalia's religiosity was as conservative as his politics and his legal philosophy. That his written opinions often reflected a deeply conservative Catholicism is obvious in cases involving homosexuality and abortion, where his writing was sometimes shockingly retrograde. It would not be surprising if his religious orientation mirrored his famous constitutional originalism, in that it emphasized fidelity to reified texts, in one case the U.S. Constitution, in the other scripture and church doctrine, as originally intended. That sounds like Fowler's Synthetic-Conventional stage. His replacement's position on the faith continuum could be as meaningful as his or her judicial perspective.
As for the incessant, inescapable presidential campaign, the religious attitudes expressed by the leading Republican candidates are as regressive as their sophomoric insult battles. Evangelical presidents like Jimmy Carter and George W. Bush seem like Thomas Merton compared to the trinity of Trump, Cruz and Rubio, whose anti-Other, tougher than thou fervor places them squarely on Fowler's lower developmental rungs. Someone ought to read those self-anointed saviors the passage in Matthew (6.5) where Jesus denounces religious showboats. It is harder to get a bead on the spirituality of the Democratic candidates. Hillary Clinton seems to be squarely rooted in the progressive, inclusivist Protestant tradition, and Sanders is a secular Jew who's made vague reference to a "we're all in this together" spirituality. Just how deeply spiritual any of them is will remain a mystery, but the Pope's distinction between building walls and building bridges would seem to be one barometer.
At this point in history, it does not seem unreasonable to expect people in positions of power to be situated further along the spectrum of spiritual developmental. But it seems we have some work to do before we get there.
Philip Goldberg is an author and public speaker. His latest book, Spiritual Practice for Crazy Times: Powerful Tools to Cultivate Calm, Clarity, and Courage, is available now. The e-book is specially priced at $1.99 in light of the Coronavirus pandemic.
Some of his other work includes the award-winning American Veda: From Emerson and the Beatles to Yoga and Meditation How Indian Spirituality Changed the West; Roadsigns on the Spiritual Path: Living at the Heart of Paradox; and The Life of Yogananda: The Story of the Yogi Who Became the First Modern Guru.
A meditation teacher and ordained interfaith minister, Phil is also the co-host of the popular Spirit Matters podcast and leads American Veda Tours to India. See more at www.philipgoldberg.com.
This entry is tagged with:
Social Issues • Culture • Politics
Similar articles with the same tag:
The Food Fight We Might All Agree On
by Ronnie Cummins
Rabbi Rami: Everyone Says "Follow Your Heart." But How?
by Rabbi Rami Shapiro

redpajama_set_name: RedPajamaCommonCrawl


text:
Carrie A. Clary	 Jan 10, 2022
Video Game Technology Pioneers Are About to Make History | At the Smithsonian
Carrie A. Clary	 Jun 30, 2016
A 1959 exhibit of the first "Tennis For Two" video game, designed by physicist William Higinbotham at Brookhaven National Laboratory in 1958.…
5 good reasons to study a game design degree
Carrie A. Clary	 Mar 17, 2016
Contrary to some perceptions, careers in the gaming industry can be both rewarding and lucrative. And while the end result of gaming projects can be hours of lounging on the couch for the consumer, producing successful game titles…
RIT Ranks Among Top Video Game Design Schools
??	David Schwartz, Director of the School of Interactive Games and Media at RIT…
Senior pays for college as YouTube video game tutorial star
Carrie A. Clary	 Nov 16, 2015 0
It's 7:45 p.m. and senior Matt Cobuzio has decided it's time to get down to business. He walks over to his PlayStation 4, plugs in his microphone and turns on his computer and webcam. "What's going on guys, my name is Matt and I'm…
FIFA 16 – Best Dribbling Technique in Game Tutorial
Carrie A. Clary	 Sep 29, 2015 0
FIFA 16 is a very different game from FIFA 15. The gameplay is slower and more tactical which means you can't use the beat to beat your man like you could in previous FIFA games. Most of the players I meet on Ultimate Team and Seasons rely…
The Best Colleges and Graduate Schools to Study Game Design
Gallery: The 25 Best Colleges to Study Game Design 25 images One of the best schools in the world to study computer game design started as a private…
Persona 4: Dancing All Night Streaming Game Tutorial Videos – News
Carrie A. Clary	 Mar 14, 2015 0
Atlus has started releasing two new how-to videos featuring the Persona 4 Teddie character for his Persona 4: Dance the night away Playstation Vita rhythm game Thursday. In the tutorials, Teddie introduces the basic controls of the…
The Seven Constants of Game Design, Part 1 – TechCrunch
Carrie A. Clary	 Jul 21, 2014
More posts from this contributor Games after Gamergate Is the Windows 10 Store the next step for PC apps and games? Editor's Note: Tadhg Kelly writes a regular column on all things video games for…
JavaFX 2 Game Tutorial Part 2
Carrie A. Clary	 Apr 24, 2012 0
t This is the second installment in a series of blog entries related to a javafx 2 gaming tutorial. If you haven't read Part 1, please check out the introduction javafx 2 game tutorial…


Common Sugar Substitute Xylitol Can Be Deadly For Pets!
Xylitol is a sugar alcohol — an artificial sweetener created from birch, raspberries, plums and corn.
This sweetener is found in many human "sugar free" products, such as gum, candies and other sweets. In humans, high doses may have a mild laxative effect, but in dogs, ingestion could be fatal.
It has been known for quite some time that there is a link between xylitol ingestion and hypoglycemia (low blood sugar) in dogs. Now, with the prevalence of this sweeter in human foods, the ASPCA Animal Poison Control Center has noted a connection between xylitol consumption and acute toxicity in dogs.
Xylitol has also been suspected of causing toxicity in ferrets.
Xylitol, and many other common drugs, are very toxic to your pets. My #1 is Tylenol (acetaminophen) followed by #2 Aspirin.
#1 Tylenol -VERY TOXIC TO ALL PETS Simply put, this pain reliever becomes bound to a spot on the red blood cells that carry oxygen. It prevents oxygen attaching to the cells, and the animal dies for lack of oxygen circulation.
#2 Aspirin - Dogs and cats are not humans. Dogs are not big cats either - They have VERY different metabolisms from each other, and us. If you animal is experiencing pain, due an injury or age, please call a veterinarian. It may take a dog 16-24 hours to metabolism one 81mg baby aspirin. Cats can take up to several days ! If you give a human dose it will poison them. Check with poison control any time you think your animal has eaten something.


According to the agency, preliminary information relating to ongoing investigations "suggests" the meat is the culprit. The CDC said Friday that people who were sickened in the outbreak reported eating ground beef while at home or at a restaurant, though a single brand or distributor has not yet been determined.
The CDC said that the number of sickened individuals has risen to 109 people across six states, which in addition to Georgia, Kentucky, Ohio, Tennessee, and Virginia now includes Indiana. So far, there have been no deaths linked to the outbreak strain E. coli O103, but the agency reported that 17 people have been hospitalized.


text:
NOWCAST KMBC 9 News at 4 pm
COVID-19 in Kansas City: Tracking cases, deaths and latest restrictions 10 MIN Breaking News: COVID-19 LIVE UPDATES: Kansas adds 2,602 new cases; Missouri tops 450,000 since start of outbreak 11 MIN Breaking News: Sign up for our Coronavirus & Rossen Reports Newsletters Closings There are currently 7 active closings or delays <% if ( weatherAlerts > 0 ) { %> Severe Weather <% var weatherAlertsMessage = "There " + ( weatherAlerts > 1 ? "are" : "is" ) + " currently " + weatherAlerts + " active weather " + ( weatherAlerts > 1 ? "alerts" : "alert" ); %>
Parson activates Missouri National Guard as precautionary measure
Governor says state fully supports the right of citizens to peacefully protest
Updated: 9:27 PM CDT Sep 24, 2020
KMBC 9 News Staff
$70,000 SEVERANCE PACKAGE. NEW TONIGHT, THE MISSOURI NATIONAL GUARD HAS BEEN ACTIVATED IN RESPONSE TO CIVIL UNREST ACROSS THE COUNTRY. GOVERNOR PARSON SAYS ITS JUST A PRECAUTIONARY MEASURE. THE MISSOURI STATE HIGHWAY PATROL IS ALSO
Missouri Gov. Mike Parson signed an executive order Thursday activating the Missouri National Guard as a precautionary measure in response to the recent civil unrest across the country. Parson's office said the National Guard, as well as the Missouri State Highway Patrol, are ready to help local law enforcement if necessary. "We are saddened by recent acts of violence that have occurred in some cities across the nation," Parson said. "We fully support the right of citizens to peacefully protest and are committed to protecting that right. At this time, we are taking a proactive approach in the event that assistance is needed to support local law enforcement in protecting Missouri and its people."Executive order 20-17 declares that a state of emergency exists in Missouri due to civil unrest and calls on the adjutant general to order into active service portions of the National Guard deemed necessary to aid executive officials of Missouri to protect life and property.
KANSAS CITY, Mo. —
Missouri Gov. Mike Parson signed an executive order Thursday activating the Missouri National Guard as a precautionary measure in response to the recent civil unrest across the country.
Parson's office said the National Guard, as well as the Missouri State Highway Patrol, are ready to help local law enforcement if necessary.
"We are saddened by recent acts of violence that have occurred in some cities across the nation," Parson said. "We fully support the right of citizens to peacefully protest and are committed to protecting that right. At this time, we are taking a proactive approach in the event that assistance is needed to support local law enforcement in protecting Missouri and its people."
Executive order 20-17 declares that a state of emergency exists in Missouri due to civil unrest and calls on the adjutant general to order into active service portions of the National Guard deemed necessary to aid executive officials of Missouri to protect life and property.


Should you consider you to ultimately be a new repeated The web customer, you actually might own innocently enable your personal computer at the main mercy for spyware courses. You may not understand it all, nonetheless you could have a spy ware or maybe more going confidentially throughout the record in addition which will you own dragged the following article as many as read. The good thing is that you will be able to eliminate malware through your personal computer effortlessly; possibly even better is because spyware reduction would not really even price you a penny. The very best ant-virus courses will go through successfully pertaining to you; possessing an beneficial spy ware eradication application such as these people around your laptop will often be used in order to you. Here are the three highest-rated spyware elimination software programs that are available meant for save.
The main first plus highest-ranked within the three will be Spybot. If you let the item search within your current computer at a weekly basis, it could eradicate risky spyware and adware, spy ware, to generate a, along with spy ware with your operating system free of cost. This identifies spyware programs and then proceeds to help terminate them all. It is definitely widely known as a single of the more exceptional freebie anti-spyware remedies available today by the very best anti-virus evaluations and is recommended to get you to help use. When you liked it, you can easily also obtain the Spybot S&D Search as well as Destroy) different which is best employed with Ad-Aware.Ad-Aware occurs second one of several list as well as forte is certainly initiating thorough and thorough system general performance scans. 2 versions of the scan can be purchased; one is definitely an instant scan you can apply one particular day a week, and typically the various other will be the more deeply version you could perform at the time in 14 days. As along with most freebie antispyware software , you can certainly get it free through download from the Internet.
There is usually a personalized waigo.108km.com version that may be called the very Ad-Aware SONY ERICSSON Private the fact that does certainly not mainly enable your computer get hold of rid with spy ware, but will at the same time notify anyone on often the method of real danger they possess. A great individual touching provides given a hand to this for being considered as probably the greatest antivirus systems that can easily be saved right at this time. With tested to become well-liked which it is procured simply by more as compared to sixty-eight mil people for one yr.Finally, there is the IE-SPYAD cost-free anti-spyware application which could be more accurately described as any computer registry record having the computer file name alone. " In case you have set in place this program it will consist of most involving the referred to spyware designers and pushers, advertisers, and marketing agencies to the actual managed online websites element of the Internet Manager, enabling the idea to protect against anyone by stepping into these kind of doubtful sites.
Moreover leading 3 no cost anti-spyware software, there are many with various readily available packages the fact that you can certainly think about. Some of these kind of are HiJack That, X-Cleaner, XP-AntiSpy, and even Spyware and adware – blaster. In fact , right now there can often be additional balms generally there that can conduct antispyware meet your needs exactly, among these folks offers ant-virus applications offered come to be some people pay-to-download or simply no cost. It all depends upon how would definitely you the anti-spyware program to feature and might you put it to use to help make certain in which your personal machine keep spyware-free.


Are you so enthused with the 2012 Olympics that special tablets and non-stop TV coverage won't fully scratch the itch? O2 UK is letting you flaunt your British competitive pride every time you check Twitter by selling Olympic editions of Samsung's Galaxy Note and Galaxy Y. Either comes with a choice to drape your Android gear in a Union Jack or the Team Great Britain logo. If cosmetic patriotism isn't enough, O2 is making it meaningful by contributing £1 from every sale to future athlete training along with giving a chance to win two tickets to attend the London games, a special event and even the training camp. The bundles are ready to go now, although we're slightly bummed that there isn't an extra-long S Pen to commemorate the javelin toss or pole vault.
O2 UK offers Samsung Galaxy Note and Galaxy Y in Olympics versions, S Javelin sadly missing originally appeared on Engadget on Mon, 21 May 2012 14:39:00 EDT. Please see our terms for use of feeds.


text:
Historic Legal Battle Begins Over CSG Waste: People vs Santos
An historic court battle will commence in the NSW Land and Environment today, Wednesday 6 April, as the first ever legal challenge against a CSG waste project gets underway.
The Court will be hearing a challenge against construction of the controversial Phase 2 of the Leewood CSG waste water treatment plant near Narrabri. Local Narrabri community group 'People for the Plains' has taken legal action against Santos and the NSW Government over the approval of the industrial facility, and have travelled to Sydney for the hearing.
Local Narrabri residents will gather outside the Land and Environment Court in Sydney with supporters from 9am, Wednesday 6th April.
People for the Plains will argue that Santos must obtain development consent because the intensity and scale of this industrial development is not something that can simply be classified as CSG exploration.
The Leewood Phase 2 water treatment plant will involve:
The treatment of up to 1.5 million litres of toxic, salty waste water each day, which has been extracted from the coal seams
The production of 500 million litres of concentrated brine by the end of the project, requiring dewatering, transportation and disposal of thousands of tonnes of salt.
A commercial irrigation project using treated wastewater
An initial review of the Santos Leewood proposal by the Department of Primary Industries assessed the project as a "high risk of having significant adverse impacts and the potential loss of the agricultural capacity of the lands affected by the proposal" and stated that the "soils are highly sodic and currently unsuitable for irrigation and unlikely to be remediated"[1].
Construction on the facility began in December 2015 after approval was granted in August of 2015. A photo archive of CSG activities in the Pilliga is available here and aerial photos of CSG wastewater being held at Leewood awaiting treatment and disposal are available here.
Sally Hunter of People for the Plains said that "The risks of storing and then irrigating these vast amounts of CSG waste on farmland in our region are severe.
"Salt is the enemy of agriculture and Santos' plans are a major risk to our vulnerable soils which do not tolerate salt, and should not have to tolerate irrigation with Santos' treated waste water.
"These types of large, risky waste projects should not be approved without a full and thorough Environmental Impact Statement nor without extensive public consultation. However, that is exactly what has happened here.
"The Baird Government is allowing Santos to roll out its CSG plans without thorough environmental assessment and without giving us, the local community, the opportunity to have our serious concerns heard.
"Every exploration CSG well, wastewater dam or treatment plant that gets approval without a development consent or a proper environmental assessment is doing incremental damage to our local environment and we are hoping that this court case will put a stop to that" she said.
Naomi Hodgson from The Wilderness Society said: "Santos has stated that it has put the project on the go-slow after it devalued the project and downgraded the gas reserves, yet they keep putting our water and soil at risk through industrial activities like the Leewood treatment plant.
'The project has no social licence and is not financially viable. Santos must stop the destruction of the Pilliga forest and the risks to the critical water resources of the Great Artesian Basin that lies beneath it, and walk away" she said.
If People for the Plains is successful, Santos will be required to stop the construction and operation of Leewood. It is then up to Santos to decide whether to carry on trying to build the Leewood Plant.
If it decides to carry on it would need to follow the law, apply for development consent and prepare a full Environmental Impact Statement that would be placed on public exhibition, allowing public participation and greater transparency.
[1] DPI Comments on Leewood Phase 2, 29th April 2015
PHOTOS: https://www.flickr.com/photos/lockthegatealliance/sets/72157666677657832


text:
namespace ui {

// static
PlatformEventSource* PlatformEventSource::instance_ = NULL;

PlatformEventSource::PlatformEventSource()
    : overridden_dispatcher_(NULL),
      overridden_dispatcher_restored_(false) {
  CHECK(!instance_) << "Only one platform event source can be created.";
  instance_ = this;
}

PlatformEventSource::~PlatformEventSource() {
  CHECK_EQ(this, instance_);
  instance_ = NULL;
}

PlatformEventSource* PlatformEventSource::GetInstance() { return instance_; }

void PlatformEventSource::AddPlatformEventDispatcher(
    PlatformEventDispatcher* dispatcher) {
  CHECK(dispatcher);
  dispatchers_.AddObserver(dispatcher);
  OnDispatcherListChanged();
}

void PlatformEventSource::RemovePlatformEventDispatcher(
    PlatformEventDispatcher* dispatcher) {
  dispatchers_.RemoveObserver(dispatcher);
  OnDispatcherListChanged();
}

scoped_ptr<ScopedEventDispatcher> PlatformEventSource::OverrideDispatcher(
    PlatformEventDispatcher* dispatcher) {
  CHECK(dispatcher);
  overridden_dispatcher_restored_ = false;
  return make_scoped_ptr(
      new ScopedEventDispatcher(&overridden_dispatcher_, dispatcher));
}

void PlatformEventSource::StopCurrentEventStream() {
}

void PlatformEventSource::AddPlatformEventObserver(
    PlatformEventObserver* observer) {
  CHECK(observer);
  observers_.AddObserver(observer);
}

void PlatformEventSource::RemovePlatformEventObserver(
    PlatformEventObserver* observer) {
  observers_.RemoveObserver(observer);
}

uint32_t PlatformEventSource::DispatchEvent(PlatformEvent platform_event) {
  uint32_t action = POST_DISPATCH_PERFORM_DEFAULT;

  FOR_EACH_OBSERVER(PlatformEventObserver, observers_,
                    WillProcessEvent(platform_event));
  // Give the overridden dispatcher a chance to dispatch the event first.
  if (overridden_dispatcher_)
    action = overridden_dispatcher_->DispatchEvent(platform_event);

  if ((action & POST_DISPATCH_PERFORM_DEFAULT) &&
      dispatchers_.might_have_observers()) {
    ObserverList<PlatformEventDispatcher>::Iterator iter(dispatchers_);
    while (PlatformEventDispatcher* dispatcher = iter.GetNext()) {
      if (dispatcher->CanDispatchEvent(platform_event))
        action = dispatcher->DispatchEvent(platform_event);
      if (action & POST_DISPATCH_STOP_PROPAGATION)
        break;
    }
  }
  FOR_EACH_OBSERVER(PlatformEventObserver, observers_,
                    DidProcessEvent(platform_event));

  // If an overridden dispatcher has been destroyed, then the platform
  // event-source should halt dispatching the current stream of events, and wait
  // until the next message-loop iteration for dispatching events. This lets any
  // nested message-loop to unwind correctly and any new dispatchers to receive
  // the correct sequence of events.
  if (overridden_dispatcher_restored_)
    StopCurrentEventStream();

  overridden_dispatcher_restored_ = false;

  return action;
}

void PlatformEventSource::OnDispatcherListChanged() {
}

void PlatformEventSource::OnOverriddenDispatcherRestored() {
  CHECK(overridden_dispatcher_);
  overridden_dispatcher_restored_ = true;
}

}  // namespace ui

redpajama_set_name: RedPajamaGithub


5 panel shaker door related post 5 panel shaker door lowes.
5 panel shaker door 5 panel shaker interior door 2 panel shaker interior doors home depot lovely a zen designed 5 panel shaker interior door 5 panel shaker door white.
5 panel shaker door shaker door style laundry room transitional with 5 panel door tile 5 panel shaker door with frosted glass.
5 panel shaker door 5 panel door interior slab shaker white 5 panel shaker door with frosted glass.
5 panel shaker door 5 panel door antique 5 panel doors shaker interior 5 panel antique 5 panel wood doors 5 panel door 5 panel shaker 5 panel shaker door canada.
5 panel shaker door shaker barn door shaker 5 panel shaker barn door 5 panel shaker interior door lowes.
5 panel shaker door 5 panel shaker primed solid core interior door shaker 5 panel shaker 5 panel masonite 5 panel shaker door.
5 panel shaker door 5 panel shaker doors farmhouse interior doors appealing 5 panel shaker interior door and best shaker 5 panel shaker door lowes.
5 panel shaker door twin shaker 5 panel primed interior door 5 panel shaker door white.
5 panel shaker door shaker style doors 5 panel shaker exterior door.
5 panel shaker door 3 panel shaker interior door sophisticated shaker interior doors knotty alder interior doors photo of rustic 3 panel shaker interior door 5 panel shaker door lowes.
5 panel shaker door 5 panel door interior bamboo contemporary 5 panel modern single door by interior 5 panel shaker 5 panel door masonite 5 panel shaker door.
5 panel shaker door 5 panel shaker diffused white laminate french door 5 panel shaker interior door with glass.
5 panel shaker door 5 panel doors solid wood knotty alder interior wood doors 5 panel shaker doors knotty alder 5 panel shaker door white.
5 panel shaker door shaker panel door an ideal match for our 4 light unfinished glazed oak internal doors 5 shaker panel door 5 panel shaker doors for sale.
5 panel shaker door solid spruce 5 panel shaker door brand new 5 panel shaker door white.
5 panel shaker door 5 panel exterior door 3 of 5 vintage solid wood 6 glass panel exterior door 5 5 panel exterior door 5 panel shaker doors for sale.
5 panel shaker door 5 panel wood interior doors with flat panel white interior glass shaker door interior glass 5 even panel white primed shaker door.
5 panel shaker door contemporary 5 panel interior doors fabulous 5 panel shaker interior door and best farmhouse interior doors ideas on home design pantries 5 panel oak 5 panel shaker door slab.
5 panel shaker door 5 panel shaker interior door inspirational best doors images on 5 panel shaker interior door with glass.
5 panel shaker door 5 panel interior doors 5 panel shaker interior door with glass 5 panel interior doors 5 panel shaker door with frosted glass.
5 panel shaker door shaker door trim shaker door style 5 panel shaker door style interior doors imaginative shaker style wood trim shaker doors 5 panel shaker interior door with glass.
5 panel shaker door 5 panel shaker primed image 5 even panel white primed shaker door.
Posted on December 26, 2018 by . Category: decorating.


text:
Tag / Al Pacino
February 7, 2020 February 12, 2020 by Pasión cinéfila obsesivo-compulsiva
The Irishman: A Masterpiece About Men Made For Men
Al Pacino, Alison Pill (, Andy Garcia, Anjelica Huston, Anna Paquin, Átame, Bergman, Blythe Danner, Bruno Kirby, Caroline Aaron, Cecilia Roth, Chloë Grace Moretz, Cybill Shepherd, De Niro, Debra Messing, Diane Keaton, Dianne Wiest, Dominic Chianese, Donal Donnelly, Elaine Stritch, Eli Wallach, Fenella Woolgar, Franc D'Ambrosio, Frances Conroy, Francesca De Sapio, Francis Ford Coppola, Frank Sheeran, Gastone Moschin, Guess Who's Coming to Dinner, Harvey Keitel, James Caan, Jessica Harper, Jimmy Hoffa, Joanna Gleason, Jodie Foster, Joe Mantegna, Joe Pesci, Judy Davis, Julie Kavner, Julieta Serrano, Juliette Lewis, Keaton, Kiti Mánver, La flor de mi secreto, Lee Strasberg, Loles León, Lorraine Bracco, Los abrazos rotos, Louise Lasser, Lucy Gallina, Margot Robbie, Mariel Hemingway, Marlon Brando, Martin Scorsese, Michael V. Gazzo, Morgana King, Mujeres al borde de un ataque de nervios, ohn Cazale, Pedro Almodóvar, Robert De Niro, Robert Duvall, Roy Glenn, Russell Bufalino, Scarlett Johansson, Scorsese, Sharon Stone, Sidney Poitier, Simonetta Stefanelli, Sofia Coppola, Stephanie Roth Haberle, Tacones lejanos, Talia Shire, The Irishman, Todo sobre mi madre, Tracey Ullman, Volver, Woody Allen
Yep. You've read the title correctly. Let me start by saying that I love Scorsese, I love De Niro, I love Al Pacino, and I love Joe Pesci. The performances in The Irishman are all stunning. The Irishman is a masterpiece, yes, but a masterpiece with a big moustache and a big beard.
Let me clarify that I really dislike those women who preach hate towards men. I am a mother of three wonderful children (two girls and a boy) and I don't like those women who treat men like enemies. I also find it absurd to talk about female directors and male directors instead of just directors, or about female nominees and male nominees instead of just nominees (any way, who cares about the nominee thing: cinema is an art, not a competition!). I've always loved that touching and breathtaking scene in Guess Who's Coming to Dinner where John Prentice (Sidney Poitier) says to his father (Roy Glenn):
"Dad, you're my father. I'm your son. I love you. I always have and I always will. But you think of yourself as a colored man. I think of myself as a man."
I, too, think of myself as a human being, not as a female human being. But this inability of the vast majority of cinema directors of embracing the women universe bothers me, bores me and saddens me.
So, what happened to Scorsese? Why The Irishman, being a cinematic masterpiece as it is, left me indifferent and impassible? Because in my opinion it's a film about men made for men, where women are left in a corner, almost transparent, like ghosts.
I understand that Scorsese wanted to focus on the lives of Frank Sheeran, Jimmy Hoffa, and Russell Bufalino (rough characters masterly played by De Niro, Al Pacino, and Joe Pesci). But those men didn't grow up on trees like apples. They had mothers, daughters, and wives who influenced them, supported them, embraced them, loved them, and hated them.
Frank Sheeran had two wives: Mary Sheeran (Aleksa Palladino in The Irishman -does she speak even once?) and Irene Sheeran (Stephanie Kurtzuba in the film), and four daughters: MatyAnne (Tess Price and Jennifer Mudge in the film), Dolores (India Ennenga and Marin Ireland), Peggy (Lucy Gallina and Anna Paquin), and Connie (Jordyn DiNatale and Kate Arrington) -which may mumble all together 10 words at most during the whole movie.
Jimmy Hoffa's wife was Josephine Pozyswak (Welker White in the film). They were married 39 years (until Hoffa's disappearance) and had a daughter: Barbara Ann (Rebecca Faulkenberry) -and a son: James Phillip (Ken Wulf Clark).
Bufalino's wife was Carrie Sciandra (Kathrine Narducci in the film), who belonged to the Sciandra mafia family. Russell Bufalino and Carrie Sciandra were married more than 70 years (70 years!) and had no children.
But all those women hardly have a voice in the film. The only interesting female character in The Irishman is Peggy. All the other women in the film are almost superfluous: they remain almost silent and their bonds with the male characters are hardly drawn.
I must say that the music in The Irishman (Robbie Robertson) and the cinematography (Rodrigo Prieto) are absolutely stunning.
I understand that The Irishman is a film about the mob. And the mob is mainly male. But in The Godfather trilogy Coppola manages to deliver three films with truly interesting and strong female characters played by stunning actresses (Keaton, Talia Shire, Morgana King, Simonetta Stefanelli, Francesca De Sapio, and Sofia Coppola) while its male characters and brilliant actors shine enormously (Brando, Al Pacino, John Cazale, James Caan, Robert Duvall, De Niro, Lee Strasberg, Michael V. Gazzo, Gastone Moschin, Bruno Kirby, Dominic Chianese, Andy Garcia, Joe Mantegna, Eli Wallach, Donal Donnelly, and Franc D'Ambrosio). The Godfather trilogy is also a movie that revolves around men but there you have many female voices that make the story much more attractive and real.
Most of the films of today (and in cinema history) revolve around men and leave women in the corner. Some brilliant exceptions to this rule are Woody Allen's films, Bergman's films, Almodóvar's films, and… who else's films?
Woody's films have always had women's thoughts and feelings in their core. Woody is probably the director who has written the best and most interesting roles for women. I'm a huge fan of Woody's and I love all his films. He carves the women of his films brilliantly and shows them with all their anxieties, fears, doubts, complexities, aspirations, and dreams. Woody is an amazing writer and his female characters don't need capes or superpowers: they are women made from flesh and bones, full of love and hate. Some of the most iconic female characters in the history of cinema appear in Woody's films. Annie Hall (1977), Interiors (1978), Manhattan (1979), Hannah And Her Sisters (1986), September (1987), Another Woman (1988), Alice (1990), Husbands and Wives (1992), Manhattan Murder Mystery (1993), Mighty Aphrodite (1995), Celebrity (1998), Small Time Crooks (2000), The Curse of the Jade Scorpion (2001), Anything Else (2003), Melinda and Melinda (2004), Match Point (2005), Vicky Cristina Barcelona (2008), Blue Jasmine (2013), Wonder Wheel (2017), and A Rainy Day in New York (2019) are all films with fascinating, deep, funny, complex, and real women. Woody said that it was Keaton who inspired him to start writing about women. So, thank you so much, Diane!
Bergman was one of the first cinema directors who created a powerful yet anguishing women universe. Bergman's female characters are mostly dark: they suffer and agonize, but they also dream and long for love, peace and communication. Bergman also wrote super interesting male characters (Victor Sjöström, Max von Sydow, Gunnar Björnstrand, Erland Josephson, and Jarl Kulle all incarnated fascinating men). I used to love Bergman. Now I only enjoy his comedies. His dramas are too depressing and torturous for me now. Some of the deepest female characters ever written in cinema are the heroines in Sommaren med Monika (1953), Sommarnattens leende (Smiles of a Summer Night) –my favorite! (1955), Såsom i en spegel (Through a Glass Darkly, 1961), Persona (1966), Viskningar och rop (Cries & Whispers, 1972), Scener ur ett äktenskap (Scenes from a Marriage, 1974), Ansikte mot ansikte (Face to Face, 1976), and Höstsonaten (Autumn Sonata, 1978).
Almost all of Almodóvar's films revolve around women. Almodóvar's writing is funny, sad, deep and very real. I always think that you have to be Spanish to fully understand Almodóvar's characters and jokes. He didn't invent anything. He just copies the hysteria, poetry, strength and anger of the Spanish women. Mujeres al borde de un ataque de nervios (1988), Átame (1989), Tacones lejanos (1991), La flor de mi secreto (1995), Todo sobre mi madre (1999), Hable con ella (2002), Volver (2006), Los abrazos rotos (2009), and Julieta (2016) all show real women struggling, enjoying, and suffering.
Woody, Bergman and Almodóvar all have/had their muses. Woody's muses include Keaton (the best! 9 films), Mia Fucker (sorry, I'm afraid she earned that name after her shameful vengeful persistent campaign against Woody: sadly, 13 films), Dianne Wiest (5 films), Julie Kavner (8 films), Judy Davis (5 films), Caroline Aaron (4 films), Louise Lasser (4 films), Stephanie Roth Haberle (4 films), Blythe Danner (3 films), Frances Conroy (3 films), Scarlett Johansson (3 films), Erica Leerhsen (3 films), Claire Bloom (2 films), Mariel Hemingway (2 films), Anjelica Huston (2 films), Joanna Gleason (2 films), Jessica Harper (2 films), Elaine Stritch (2 films), Janet Margolin (2 films), Debra Messing (2 films), Alison Pill (2 films), Sally Hawkins (2 films), Penélope Cruz (2 films), Parker Posey (2 films), Charlize Theron (2 films), Tracey Ullman (2 films), and Emma Stone (2 films).
Bergman's muses were Liv Ullmann, Bibi Andersson, Ingrid Thulin, Harriet Andersson, and Eva Dahlbeck. Some critics argue that Bergman didn't make stars of his own actresses, but that these stunning actresses made Bergman's films so great.
Almodóvar's muses include Victoria Abril, Carmen Maura, Cecilia Roth, Julieta Serrano, Marisa Paredes, Rossy de Palma, Penélope Cruz, Lola Dueñas, Kiti Mánver, Loles León, and Chus Lampreave. Almodóvar's universe is unthinkable without all these delightful actresses.
Scorsese, on the contrary, only had male muses (funny, that word –male muse– doesn't even exist!): Harvey Keitel, De Niro, Joe Pesci, and Leo. This is great, good for him, I don't have any problem with that, I actually love it, but, in my opinion, this often makes his films lack that necessary women's breath. And that's, again, the problem with The Irishman. Scorsese's universe is clearly masculine. I don't mean that there are no women in his films, there are, yes, of course, but those women hardly speak, hardly exist. The women in Scorsese's films are (as Sartre would say) contingent and not necessary. Iris (Jodie Foster), Betsy (Cybill Shepherd), Ginger (Sharon Stone), Karen (Lorraine Bracco), Danielle (Juliette Lewis), Jenny (Cameron Diaz), Isabelle (Chloë Grace Moretz), and Naomi Lapaglia (Margot Robbie) are all attached to male characters. They mostly represent men's desires and fantasies and hardly exist in a world or their own.
CASINO, Robert De Niro, Joe Pesci, 1995, in the casino
Gangs of New York (2003) by Martin Scorsese
Scorsese's most famous films revolve around men. Mean Streets (1973), Taxi Driver (1976), Raging Bull (1980), The Color of Money (1986), The Last Temptation of Christ (1988), Goodfellas (1990), Cape Fear (1991), Casino (1995), Gangs of New York (2002), The Aviator (2004), The Departed (2006), Hugo (2011), The Wolf of Wall Street (2013), Silence (2016) and, now, The Irishman (2019) are almost all masterpieces about men made for men. Some few exceptions are Alice Doesn't Live Here Anymore (1974), New York, New York (1977), and maybe The Age of Innocence (1990). Scorsese is one of the titans of cinema but he always leaves women behind men. His art becomes, ultimately, an art about men made for men that sadly doesn't succeed to resonate universally.
We, women, constitute half of the population of our planet. Please, do not forget us. We also exist!
Antonia Tejeda Barros, Madrid, February 7, 2020
August 30, 2016 September 4, 2016 by Pasión cinéfila obsesivo-compulsiva
Al Pacino, Charles Durning, Chris Sarandon, Dog Day Afternoon, John Cazale, Lance Henriksen, Penelope Allen, Sidney Lumet
Dog Day Afternoon (1975). Dir. Sidney Lumet
Sonny (Al Pacino): Is there any special country you wanna go to?
Sal (John Cazale): Wyoming.
Sonny: Sal, Wyoming's not a country.
Dog Day Afternoon está basado en una historia real: el robo fallido de John Wojtowicz y Salvatore Naturale llevado a cabo el 22 de agosto de 1972 en Brooklyn, NY. Wojtowicz cumplió 5 años en prisión de los 20 que le fueron sentenciados. Aron (Leon en la película) devino Liz Eden y murió de SIDA en 1987.
Soy una gran fan de John Cazale, un gran actor al que he descubierto verdaderamente hace poco. Cazale fue nominado al Golden Globe (Best Supporting Actor), pero no fue nominado al Oscar. Sidney Lumet no quería ni que Cazale leyera para el papel de Sal porque el verdadero Sal era mucho más joven que Cazale (tenía 18 años y Cazale, 39). Al Pacino convenció a Lumet que escuchara a Cazale y Lumet quedó maravillado con su actuación.
Dog Day Afternoon ganó un Oscar (Best Writing, Original Screenplay: Frank Pierson) y obtuvo otras 5 nominaciones al Oscar, entre ellas Best Picture y Best Director.
La graciosa escena donde Sal (Cazale) le dice a Sonny (Al) que quiere ir a Wyoming fue improvisada. Lumet se rió un montón y tuvo que cubrirse la boca; después usaron ese "take" en la película, y la broma es la cita más repetida de la película (y eso que la película es un drama, no una comedia).
Hay una escena en la que Sal (Cazale) le dice a Sylvia (Penelope Allen) que no fuma porque no quiere tener cáncer:
Sylvia: What, you don't smoke?
Sal: No.
Sylvia: How come?
Sal: I don't want the cancer.
Cazale moriría de cáncer de pulmón 3 años más tarde, en 1978, a los 42 años, 9 meses antes del estreno de The Deer Hunter.
Lo mejor: John Cazale, Chris Sarandon y Al Pacino, en ese orden.
Lo peor: algunas de las 'secuestradas'.
Antonia Tejeda Barros, Madrid, 30 de agosto de 2016
Dog Day Afternoon is based on a true story: the failed robbery attempted by John Wojtowicz and Salvatore Naturale on August 22, 1972 in Brooklyn.Wojtowicz served 5 of his 20 year prison sentence. Aron (Leon in the movie) became Liz Eden and died of AIDS in 1987.
I am a big fan of John Cazale, a great actor whom I've fully discovered just a little time ago. Cazale was nominated for a Golden Globe (Best Supporting Actor), but he did not get an Oscar nomination. Sidney Lumet didn't even want Cazale to audition for the role of Sal, because the real Sal was much younger than Cazale (he was 18 years old and Cazale was 39). Al Pacino convinced Lumet to listen to Cazale's reading and he was amazed by Cazale's performance.
Dog Day Afternoon won an Oscar (Best Writing, Original Screenplay: Frank Pierson) and got 5 Oscar nominations, among them Best Picture and Best Director.
The funny scene where Sal (Cazale) says to Sonny (Al Pacino) that he wants to go to Wyoming was improvised. Lumet laughed a lot but immediately covered his mouth; later they used that take in the film, and the joke is the most used quote of the movie (even though the movie is a drama, not a comedy).
There is a scene where Sal (Cazale) says to Sylvia (Penelope Allen) that he does not smoke because he does not want to get cancer:
Cazale would die of lung cancer three years later, in 1978, at age 42, nine months after the release of The Deer Hunter.
The best: John Cazale, Chris Sarandon, and Al Pacino, in that order.
The worst: some of the hostages.
Antonia Tejeda Barros, Madrid, August 30, 2016
The Godfather. Part III
Al Pacino, Andy Garcia, Diane Keaton, Drama, Eli Wallach, Francis Ford Coppola, Friendship and money: oil and water, Gordon Willis, Joe Mantegna, Mario Puzo, Michael Corleone, Nino Rota, Sofia Coppola, Talia Shire, The Godather. Part III
The Godfather. Part III (1990). Dir. Francis Ford Coppola
"Friendship and money: oil and water" (Michael Corleone / Al Pacino)
The Godfather. Part III obtuvo 7 nominaciones al Oscar (incluidos Best Picture, Best Actor in a Supporting Role: Andy Garcia, Best Director: Coppola, y Best Cinematography: Gordon Willis). No ganó ningún Oscar.
Robert Duvall (Tom Hagen) no quiso participar en la película porque consideró "inaceptable" que a Al Pacino le pagaran 5 veces más que a él.
The Godfather. Part III no es tan genial como The Godfather y The Godfather. Part II, pero es una película buenísima. Otra joya de Coppola y un brillante, inesperado y doloroso final.
Lo mejor: Joe Mantegna y la confesión de Michael.
Lo peor: el peinado de Al Pacino.
The Godfather. Part III got Oscar nominations (including Best Picture, Best Actor in a Supporting Role: Andy Garcia, Best Director: Coppola, and Best Cinematography: Gordon Willis). It didn't win any Oscar.
Robert Duvall (Tom Hagen) didn't want to be in the movie because he considered it "unacceptable" that Al Pacino would earn 5 times more than him.
The Godfather. Part III is not so amazing as The Godfather and The Godfather. Part II, but nevertheless it is a really good movie. Another Coppola gem, and a brilliant, unexpected and painful end.
The best: Joe Mantegna and Michael's confession.
The worst: Al Pacino's hairdo.
May 20, 2016 March 23, 2021 by Pasión cinéfila obsesivo-compulsiva
The Godfather. Part II
Al Pacino, Diane Keaton, Francesca De Sapio, Francis Ford Coppola, Fredo Corleone, Gordon Willis, I know it was you Fredo. You broke my heart, John Cazale, Lee Strasberg, Mario Puzo, Michael Corleone, Michael V. Gazzo, Morgana King, Nino Rota, Prince of Darkness, Robert De Niro, Robert Duvall, Talia Shire, The Godfather. Part II, Vito Andolini, Vito Corleone
The Godfather. Part II (1974). Dir. Francis Ford Coppola
"I know it was you, Fredo. You broke my heart. You broke my heart" (Michael Corleone / Al Pacino)
The Godfather. Part II obtuvo 11 nominaciones al Oscar. Ganó 6 Oscars (Best Picture, Best Actor in a Supporting Role: Robert De Niro; Best Director: Coppola, Best Writing, Screenplay Adapted from Other Material: Coppola & Mario Puzo, Best Art Direction-Set Decoration: Tavoularis, Graham & Nelson, y Best Music, Original Dramatic Score: Nino Rota & Carmine Coppola).
John Cazale (Fredo), al igual que en The Godfather (1972), tampoco fue nominado por su brillante e inolvidable actuación.
De Niro no estuvo presente en los Oscar.
Lo mejor: Robert De Niro, John Cazale, Lee Strasberg (Hyman Roth), la cinematografía (Gordon Willis, llamado "The Prince of Darkness") y la música (Nino Rota & Carmine Coppola).
Lo peor: los muertos que se mueven (el hermano de Vito Andolini que mueve el brazo y la prostituta que respira), aunque tampoco importa demasiado.
The Godfather. Part II got 11 Oscar nominations, and won 6 Oscars (Best Picture, Best Actor in a Supporting Role: Robert De Niro; Best Director: Coppola, Best Writing, Screenplay Adapted from Other Material: Coppola & Mario Puzo, Best Art Direction-Set Decoration: Tavoularis, Graham & Nelson, and Best Music, Original Dramatic Score: Nino Rota & Carmine Coppola).
John Cazale (Fredo), as in The Godfather (1972), didn't get a nomination for his brilliant and unforgettable performance.
De Niro didn't attend the Oscars.
The best: Robert De Niro, John Cazale, Lee Strasberg (Hyman Roth), the cinematography (Gordon Willis, called "The Prince of Darkness"), and the music (Nino Rota & Carmine Coppola).
The worst: the dead that seem alive (Vito's brother moves his arm and the dead prostitute is breathing), although it does not bother too much.
May 18, 2016 August 31, 2016 by Pasión cinéfila obsesivo-compulsiva
Al Lettieri, Al Martino, Al Pacino, Alex Rocco, Diane Keaton, Drama, Francis Ford Coppola, Fredo Corleone, I'll make him an offer he can't refuse, James Caan, John Cazale, Lenny Montana, Mario Puzo, Marlon Brando, Michael Corleone, Morgana King, Nino Rota, Richard Conte, Robert De Niro, Robert Duvall, Sonny Corleone, Talia Shire, The Godfather, Vito Corleone
The Godfather (1972). Dir. Francis Ford Coppola
"I'll make him an offer he can't refuse" (Vito Corleone / Marlon Brando)
The Godfather obtuvo 11 nominaciones al Oscar. Ganó 3 Oscars (Best Picture, Best Actor in a Leading Role: Marlon Brando; Best Writing, Screenplay Based on Material from Another Medium: Mario Puzo & Coppola).
John Cazale (Fredo) no fue nominado por su brillante actuación.
Brando no aceptó su Oscar.
Lo mejor: La música (Nino Rota), Marlon Brando, John Cazale & Al Pacino.
Lo peor: el italiano de Brando.
The Godfather got 11 Oscar nominations, and won 3 Oscars (Best Picture, Best Actor in a Leading Role: Marlon Brando; Best Writing, Screenplay Based on Material from Another Medium: Mario Puzo & Coppola).
John Cazale (Fredo) wasn't nominated for his brilliant performance.
Brando didn't accept his Oscar.
The best: The music (Nino Rota), Marlon Brando, John Cazale & Al Pacino.
The worst: Brando's Italian.


text:
De Courcy Lewthwaite Dewar (12 February 1878 – 24 November 1959) was a decorative metalwork designer, and member of the Glasgow Girls group of artists during the 1890/1900s.

Early life
Dewar was born on 12 February 1878 in Kandy, Sri Lanka, which was then known as British Ceylon. Her father was a tea planter called John Lewthwaite Dewar and her mother was Amelia Cochrane. Her unusual first name is a family name, although she was also known by the pet name of Kooroovi, meaning small bird in Tamil. Dewar's sister Margaret Cochrane Dewar studied at Queen Margaret's Collage in Glasgow.  Becoming one of the first woman in Glasgow to graduate in Medicine  in 1894.

Career

Dewar studied enamel and metalwork at Glasgow School of Art from 1891 until 1908 or 1909. She was taught metalwork by Peter Wylie Davidson. Her work was often illustrated in The Studio magazine. For thirty-eight years, De Courcy taught at Glasgow School of Art, being appointed instructor of enamels by Fra Newbery. She worked alongside fellow artists Ann Macbeth, Jessie M. King, Dorothy Carleton Smyth, Jean Delville, Peter Wylie Davidson, and Kellock Brown. She instituted the Dewar Prize for enamels to be awarded at the Annual Exhibition of the Glasgow School of Art Club. She had a studio at Central Chamber, 93 Hope Street, Glasgow, where she worked independently from 1900 - 1926. After 1926, she continued to work in a studio at her home at 15 Woodside Terrace, Glasgow

Some of her decorative metalwork pieces were used for illustration in Applied Design in Precious Metals, a publication by her colleague Peter Wylie Davidson. Her enamel work was exhibited at the Scottish Section of the Prima Esposizione Internazionale d'Arte Decorativa Moderna in Turin in 1902.

Dewar was involved with the women's suffrage movement. She designed a banner for the Women's Freedom League in 1908. It was decorated in "flaming red" with the words "Save the Bill". She also designed a banner for Glasgow and West of Scotland Association for Women's Suffrage in 1911 for use at the coronation of George V in London for a fee of 30 shillings.  This banner, stating 'Let Glasgow Flourish' is now held at the Glasgow Museums Resource Centre in Glasgow.

Dewar and her friend operated a house for destitute women in the Bellshill , called Harkness House, which the Prince of Wales visited in the 1930s.  footage of De Courcy at the opening can be viewed online on the National Library of Scotland website, this maybe the only footage there is of Glasgow suffragettes.

She wrote the History of the Glasgow Society of Lady Artists' Club, published in 1950.   While writing this she was the President of the Glasgow Society of Lady Artists, she became President  in 1934 and remained in this post until 1937, In 1936 she won the Lauder prize. The society now known as the Glasgow Society of Women Artists.

De Courcy lived with her sister, Katharine, at 15 Woodside Terrace, Glasgow, until her death.

See also
 List of Scottish women artists
 The Glasgow Girls

References

External links
 Archive footage for the National Library of Scotland
 Archive items held by Glasgow University which mention De Courcy Lewthwaite Dewar

1878 births
1959 deaths
20th-century Scottish women artists
Academics of the Glasgow School of Art
Alumni of the Glasgow School of Art
British people in British Ceylon
Scottish silversmiths

redpajama_set_name: RedPajamaWikipedia


This is an active group with discussions on important topics such as treatment options, quality of life, incontinence, intimacy concerns and fear of recurrence. Family and friends are welcome to attend. This group is part of the UsTOO Prostate Cancer Education & Support Network.


text:
Castle Close-up: A Tale Of Two Chateaux
Mike Stuchbery
Long, long ago, two mighty chateaus safeguarded the countryside of Languedoc – Chateaus Les Carrases and Chateau St Pierre de Serjac. Pilgrims headed south, safe under their gaze. Bands of soldiers trooped by their fortifications. Yet, as with all things, these castles eventually succumbed to time and elements. Their owners moved on. The structures started to collapse. Bits of stone were recycled to create new buildings elsewhere. Eventually, all that was left was rubble.
Not quite.
Centuries later, upon the footprints of these old chateaus vineyards appeared. With people living longer, healthier lives, demand for wine had grown remarkably.Shortly afterwards, a tiny aphid known as the grape phylloxera began to savage the European wine industry. The Languedoc was one of the first regions of France to emerge from the blight and those who owned vineyards became very, very wealthy. The owners of these vineyards, knowing some of the past of the region, erected beautiful chateaus where the old ones stood. They were decorated to the height of fashion and lavish parties were thrown where the leading lights of the Belle Epoque attended, artists, writers and musicians. The good times lasted for decades – almost fifty years – before mechanisation and the changing tastes of society meant that the shutters were drawn once more.
Was this the end?
Again, not quite.
Enter Karl Hanlon, an effusive, exuberant management consultant from Dublin who took an opportunity where he saw it and bought the Chateau Les Carrases. Shortly afterwards, it was ready to accept discerning guests as a luxury hotel. Buoyed by the success of this first venture, he purchased Chateau St Pierre de Serjac for renovation and reopening. Today his company, Domaine et Demeure, manages both properties.
Karl wasn't content just to sit back while others did the work. He was instrumental in poring over the chateau's records to select colours and patterns that matched the past decor of the properties, whilst still offering a contemporary, stylish feel. At Les Carrases, efforts were even made to source the original vines that had been sold off in the eighties, to ensure a continuity of winemaking at the chateau.
I asked Karl what sets the Chateau Les Carrases and the Chateau St Pierre de Serjac apart from other hotels in the area. He told me that a concerted effort has been made to reflect the golden age of the chateaus, while remaining very modern, chic and stylish. This is reflected in the decor, furnishings, activities on offer and dining options. He wants guests to quite literally imbibe the heritage of the place and experience a moment of tranquility. As Karl says, 'Our places are very French, quite luxe (especially St Pierre) but also very relaxed, laid back and chic. Contemporary really, rather than old style Chateau formality. So what we've tried to do is to capture the belle époque spirit, but to represent it in its contemporary context.'
For those intrigued to try either of Karl's revitalized chateaus, there is plenty to do in the area. Both lie within a short drive of no less than five different UNESCO world heritage sites, such as the mighty fortress city of Carcassonne. Guests are encouraged to pick up a bottle of the estates' wines to take with them as they explore this most charming and inviting of French provinceS,
Interested in trying either of these wonderful properties? Come and learn more!


text:
//
//  AGTimerManager.m
//
//
//  Created by JohnnyB0Y on 2017/5/3.
//  Copyright © 2017年 JohnnyB0Y. All rights reserved.
//

#import "AGTimerManager.h"
#import <objc/runtime.h>

typedef BOOL(^AGTMTimerRepeatBlock)(NSTimer *timer, NSMutableDictionary *timerInfo);

//
static NSString * const kAGTMRepeatBlock        = @"kAGTMRepeatBlock";
static NSString * const kAGTMCompletionBlock    = @"kAGTMCompletionBlock";
static NSString * const kAGTMTasksInfo         = @"kAGTMTasksInfo"; // kAGTMRepeatBlock、kAGTMCompletionBlock

//
static NSString * const kAGTMToken              = @"kAGTMToken";
static NSString * const kAGTMTimer              = @"kAGTMTimer";
static NSString * const kAGTMTimerRepeatBlock   = @"kAGTMTimerRepeatBlock";
static NSString * const kAGTMTimerInterval      = @"kAGTMTimerInterval";
static NSString * const kAGTMTimerDelay         = @"kAGTMTimerDelay";
static NSString * const kAGTMTimerRunLoopMode   = @"kAGTMTimerRunLoopMode";

@interface NSTimer (AGTimerManager)

@property (nonatomic, strong) NSString *timerKey;

@property (nonatomic, strong, readonly) NSMapTable *strongToWeakMT;

@end

static void *kAGTMTimerKeyProperty = &kAGTMTimerKeyProperty;
static void *kAGTMTimerStrongToWeakMapTableProperty = &kAGTMTimerStrongToWeakMapTableProperty;

@implementation NSTimer (AGTimerManager)

- (NSString *)timerKey
{
    return objc_getAssociatedObject(self, kAGTMTimerKeyProperty);
}

- (void)setTimerKey:(NSString *)timerKey
{
    objc_setAssociatedObject(self, kAGTMTimerKeyProperty, timerKey, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

- (NSMapTable *)strongToWeakMT
{
    NSMapTable *map = objc_getAssociatedObject(self, kAGTMTimerStrongToWeakMapTableProperty);

    if ( map == nil ) {
        map = [NSMapTable strongToWeakObjectsMapTable];
        [self setStrongToWeakMT:map];
    }

    return map;
}

- (void)setStrongToWeakMT:(NSMapTable *)strongToWeakMT
{
    objc_setAssociatedObject(self, kAGTMTimerStrongToWeakMapTableProperty, strongToWeakMT, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

@end

#pragma mark timer
@interface __AGTimerManager : NSObject

@property (nonatomic, strong) NSMapTable<id, NSMutableDictionary *> *tokenMapTable;

#pragma mark 任务定时器⏰
- (void) ag_prepareTaskTimer:(id)token
                    timerKey:(NSString **)timerKey
                    interval:(NSTimeInterval)ti
                       delay:(NSTimeInterval)delay;

- (void) ag_addTaskForTimer:(id)token
                   timerKey:(NSString *)timerKey
                  taskToken:(NSString *)taskToken
                     repeat:(AGTMRepeatBlock)repeatBlock
                 completion:(AGTMCompletionBlock)completionBlock;

- (void) ag_removeTaskForTimer:(id)token
                      timerKey:(NSString *)timerKey
                     taskToken:(NSString *)taskToken;

- (void) ag_startTaskTimer:(id)token
                  timerKey:(NSString *)timerKey
                   forMode:(NSRunLoopMode)mode;

#pragma mark 停止定时器⚠
- (void) ag_stopTaskTimer:(id)token
                 timerKey:(NSString *)timerKey;

- (void) ag_stopAllTimers:(id)token;

+ (instancetype) sharedInstance;

@end

@implementation __AGTimerManager

#pragma mark ----------- Life Cycle ----------
+ (instancetype)sharedInstance
{
    static __AGTimerManager *instance = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
        instance.tokenMapTable = [NSMapTable weakToStrongObjectsMapTable];
    });
    return instance;
}

#pragma mark ---------- Public Methods ----------

#pragma mark 任务定时器⏰
- (void) ag_prepareTaskTimer:(id)token
                    timerKey:(NSString **)timerKey
                    interval:(NSTimeInterval)ti
                       delay:(NSTimeInterval)delay
{
    NSParameterAssert(token);
    NSParameterAssert(timerKey);
    NSAssert(ti > 0, @"Interval must > 0.");

    // prepare timer
    NSTimer *timer = [self _timerWithToken:token interval:ti delay:delay];

    // timer info
    NSMutableDictionary *timerInfo = [NSMutableDictionary dictionaryWithCapacity:4];
    timerInfo[kAGTMTimerInterval] = [NSNumber numberWithDouble:ti];
    timerInfo[kAGTMTimerDelay] = [NSNumber numberWithDouble:delay];
    timerInfo[kAGTMTimer] = timer;

    *timerKey = [self _keyWithTimer:timer];
    timer.timerKey = *timerKey;

    NSMutableDictionary *timersInfo = [self _timersInfoWithToken:token];
    [timersInfo setObject:timerInfo forKey:timer.timerKey];
}

- (void) ag_addTaskForTimer:(id)token
                   timerKey:(NSString *)timerKey
                  taskToken:(NSString *)taskToken
                     repeat:(AGTMRepeatBlock)repeatBlock
                 completion:(AGTMCompletionBlock)completionBlock
{
    NSParameterAssert(token);
    NSParameterAssert(timerKey);
    NSParameterAssert(taskToken);
    NSParameterAssert(repeatBlock);

    if ( ! repeatBlock ) return;

    NSMutableDictionary *timerInfo = [self _timersInfoWithToken:token][timerKey];
    if ( timerInfo ) {

        [self _addTaskForTimer:token timerKey:timerKey taskToken:taskToken repeat:repeatBlock completion:completionBlock];

        NSTimer *timer = timerInfo[kAGTMTimer];
        if ( nil == timer ) {
            // timer stop
            // restart timer
            [self _restartTaskTimer:token timerKey:timerKey timerInfo:timerInfo];
        }
    }
}

- (void) ag_removeTaskForTimer:(id)token
                      timerKey:(NSString *)timerKey
                     taskToken:(NSString *)taskToken
{
    NSParameterAssert(token);
    NSParameterAssert(timerKey);
    NSParameterAssert(taskToken);

    NSMutableDictionary *timerInfo = [self _timersInfoWithToken:token][timerKey];
    NSMutableDictionary *tasksInfo = timerInfo[kAGTMTasksInfo];
    NSMutableDictionary *taskInfo = tasksInfo[taskToken];

    if ( taskInfo ) {
        [tasksInfo removeObjectForKey:taskToken];
        // completion call
        [self _completionTaskCallWithTaskInfo:taskInfo];
    }
}

- (void) ag_startTaskTimer:(id)token
                  timerKey:(NSString *)timerKey
                   forMode:(NSRunLoopMode)mode
{
    NSParameterAssert(token);
    NSParameterAssert(timerKey);
    NSParameterAssert(mode);

    NSMutableDictionary *timerInfo = [self _timersInfoWithToken:token][timerKey];

    NSTimer *timer = timerInfo[kAGTMTimer];
    if ( timer ) {
        timerInfo[kAGTMTimerRunLoopMode] = mode;
        // start timer
        [self _startTimer:timer forMode:mode];
    }
}

#pragma mark 停止定时器⚠
- (void) ag_stopTaskTimer:(id)token
                 timerKey:(NSString *)timerKey
{
    NSParameterAssert(token);
    NSParameterAssert(timerKey);

    if ( timerKey && token ) {
        NSMutableDictionary *timersInfo = [self _timersInfoWithToken:token];
        NSMutableDictionary *timerInfo = timersInfo[timerKey];
        if ( timerInfo ) {
            [timersInfo removeObjectForKey:timerKey];

            // completion call
            [self _completionBlockCallWithTasksInfo:timerInfo[kAGTMTasksInfo]];
        }
    }
}

- (void) ag_stopAllTimers:(id)token
{
    NSParameterAssert(token);
    if ( token ) {

        NSMutableDictionary *timersInfo = [self _timersInfoWithToken:token];
        if ( timersInfo ) {
            [self.tokenMapTable removeObjectForKey:token];

            [timersInfo enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull timerKey,
                                                            NSMutableDictionary * _Nonnull timerInfo,
                                                            BOOL * _Nonnull stop) {

                NSMutableDictionary *tasksInfo = timerInfo[kAGTMTasksInfo];
                if ( tasksInfo ) {
                    // completion call
                    [self _completionBlockCallWithTasksInfo:tasksInfo];
                }

            }];
        }
    }
}

#pragma mark ---------- Private Methods ----------
- (void) _addTaskForTimer:(id)token
                 timerKey:(NSString *)timerKey
                taskToken:(NSString *)taskToken
                   repeat:(AGTMRepeatBlock)repeatBlock
               completion:(AGTMCompletionBlock)completionBlock
{
    NSMutableDictionary *timerInfo = [self _timersInfoWithToken:token][timerKey];

    NSMutableDictionary *tasksInfo = [NSMutableDictionary dictionaryWithCapacity:2];
    timerInfo[kAGTMTasksInfo] = tasksInfo;

    NSMutableDictionary *taskInfo = [NSMutableDictionary dictionaryWithCapacity:2];
    tasksInfo[taskToken] = taskInfo;

    taskInfo[kAGTMRepeatBlock] = repeatBlock;
    taskInfo[kAGTMCompletionBlock] = completionBlock;
}

- (NSTimer *) _timerWithToken:(id)token
                     interval:(NSTimeInterval)ti
                        delay:(NSTimeInterval)delay
{
    return [self _timerWithToken:token interval:ti delay:delay repeatBlock:^BOOL(NSTimer *timer,
                                                                                NSMutableDictionary *timerInfo) {

        // blocks
        NSMutableDictionary<NSString *, NSMutableDictionary *> *tasksInfo = timerInfo[kAGTMTasksInfo];
        for (NSString *taskToken in tasksInfo.allKeys) {

            NSMutableDictionary *taskInfo = tasksInfo[taskToken];
            AGTMRepeatBlock repeatBlock = [taskInfo objectForKey:kAGTMRepeatBlock];
            AGTMCompletionBlock completionBlock = [taskInfo objectForKey:kAGTMCompletionBlock];

            // repeat ?
            BOOL repeat = NO;
            if ( repeatBlock ) {
                repeat = repeatBlock();
            }

            if ( NO == repeat ) {
                [tasksInfo removeObjectForKey:taskToken];

                // completion ?
                completionBlock ? completionBlock() : nil;
            }
        }

        return tasksInfo.count > 0;
    }];
}

#pragma mark 开始 timer
- (void) _startTimer:(NSTimer *)timer forMode:(NSRunLoopMode)mode
{
    [[NSRunLoop currentRunLoop] addTimer:timer forMode:mode];
}

- (void) _restartTaskTimer:(id)token
                  timerKey:(NSString *)timerKey
                 timerInfo:(NSMutableDictionary *)timerInfo
{
    NSParameterAssert(token);
    NSParameterAssert(timerKey);
    NSParameterAssert(timerInfo);

    NSTimeInterval ti = [timerInfo[kAGTMTimerInterval] doubleValue];
    NSTimeInterval delay = [timerInfo[kAGTMTimerDelay] doubleValue];
    NSRunLoopMode mode = timerInfo[kAGTMTimerRunLoopMode];

    // prepare timer
    NSTimer *timer = [self _timerWithToken:token interval:ti delay:delay];
    timer.timerKey = timerKey;
    timerInfo[kAGTMTimer] = timer;

    // start timer
    [self _startTimer:timer forMode:mode];
}

- (void) _completionBlockCallWithTasksInfo:(NSMutableDictionary *)tasksInfo
{
    NSParameterAssert(tasksInfo);
    [tasksInfo enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key,
                                                   NSMutableDictionary * _Nonnull taskInfo,
                                                   BOOL * _Nonnull stop) {
        [self _completionTaskCallWithTaskInfo:taskInfo];
    }];
}

- (void) _completionTaskCallWithTaskInfo:(NSMutableDictionary *)taskInfo
{
    NSParameterAssert(taskInfo);
    AGTMCompletionBlock completion = taskInfo[kAGTMCompletionBlock];
    // completion
    if ( completion ) {
        completion();
    }
}

#pragma mark 获取 timer
- (NSTimer *) _timerWithToken:(id)token
                     interval:(NSTimeInterval)ti
                        delay:(NSTimeInterval)delay
                  repeatBlock:(AGTMTimerRepeatBlock)repeatBlock
{
    NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:delay];
    NSMutableDictionary *userInfo = [NSMutableDictionary dictionaryWithCapacity:1];
    userInfo[kAGTMTimerRepeatBlock] = [repeatBlock copy];

    NSTimer *timer = [[NSTimer alloc] initWithFireDate:fireDate
                                              interval:ti
                                                target:self
                                              selector:@selector(_repeatSelector:)
                                              userInfo:userInfo
                                               repeats:YES];

    [timer.strongToWeakMT setObject:token forKey:kAGTMToken];

    return timer;
}

#pragma mark timer repeat action
- (void) _repeatSelector:(NSTimer *)timer
{
    id token = [timer.strongToWeakMT objectForKey:kAGTMToken];
    NSMutableDictionary *timerInfo = [self _timersInfoWithToken:token][timer.timerKey];

    if ( timerInfo ) {
        AGTMTimerRepeatBlock repeatBlock = timer.userInfo[kAGTMTimerRepeatBlock];
        BOOL repeat = repeatBlock ? repeatBlock(timer, timerInfo) : YES;
        if ( ! repeat ) {
            // remove timer
            [timer invalidate];
            [timerInfo removeObjectForKey:kAGTMTimer];
        }
    }
    else {
        // stop timer
        [timer invalidate];
    }
}

/** generation timerInfo`s key */
- (NSString *) _keyWithTimer:(NSTimer *)timer
{
    return [NSString stringWithFormat:@"tk_%p", timer];
}

/** get timersInfo */
- (NSMutableDictionary<NSString *, NSMutableDictionary *> *) _timersInfoWithToken:(id)token
{
    if ( token == nil ) return nil;

    NSMutableDictionary *timersInfo = [self.tokenMapTable objectForKey:token];
    if ( ! timersInfo ) {
        timersInfo = [NSMutableDictionary dictionaryWithCapacity:3];
        [self.tokenMapTable setObject:timersInfo forKey:token];
    }
    return timersInfo;
}

#pragma mark ----------- Override Methods ----------
- (NSString *) debugDescription
{
    return [self description];
}

- (NSString *)description
{
    NSEnumerator *enumerator = self.tokenMapTable.keyEnumerator;
    NSMutableString *strM = [NSMutableString string];
    id token;
    NSMutableDictionary *timersInfo;
    while ( (token = enumerator.nextObject) ) {
        timersInfo = [self.tokenMapTable objectForKey:token];
        [strM appendFormat:@"{\n <%@: %p> - %@ \n},", [token class], token, timersInfo];
    }

    return [NSString stringWithFormat:@"<%@: %p> -- %@", [self class] , self, strM];
}

@end

@implementation AGTimerManager

+ (AGTimerManager *)defaultInstance
{
    return [[self alloc] init];
}

#pragma mark 共享定时器🍩
- (void) ag_prepareTaskTimer:(NSString **)timerKey
                    interval:(NSTimeInterval)ti
                       delay:(NSTimeInterval)delay
{
    __AGTimerManager *tm = [__AGTimerManager sharedInstance];
    [tm ag_prepareTaskTimer:self timerKey:timerKey interval:ti delay:delay];
}

- (void) ag_addTaskForTimer:(NSString *)timerKey
                  taskToken:(NSString *)taskToken
                     repeat:(AGTMRepeatBlock)repeatBlock
                 completion:(AGTMCompletionBlock)completionBlock
{
    __AGTimerManager *tm = [__AGTimerManager sharedInstance];
    [tm ag_addTaskForTimer:self timerKey:timerKey taskToken:taskToken repeat:repeatBlock completion:completionBlock];
}

- (void) ag_removeTaskForTimer:(NSString *)timerKey
                     taskToken:(NSString *)taskToken
{
    [[__AGTimerManager sharedInstance] ag_removeTaskForTimer:self  timerKey:timerKey taskToken:taskToken];
}

- (void) ag_startTaskTimer:(NSString *)timerKey
                   forMode:(NSRunLoopMode)mode
{
    [[__AGTimerManager sharedInstance] ag_startTaskTimer:self timerKey:timerKey forMode:mode];
}

/**
 通过 key 停止定时器

 @param key 停止定时器的 key
 */
- (void) ag_stopTimerForKey:(NSString *)key
{
	[[__AGTimerManager sharedInstance] ag_stopTaskTimer:self timerKey:key];
}

/** 停止所有 timer */
- (void) ag_stopAllTimers
{
	[[__AGTimerManager sharedInstance] ag_stopAllTimers:self];
}

#pragma mark ----------- Override Methods ----------
- (NSString *) debugDescription
{
    return [self description];
}

- (NSString *)description
{
	__AGTimerManager *tm = [__AGTimerManager sharedInstance];
    NSMutableDictionary *timersInfo = [tm.tokenMapTable objectForKey:self];
    return [NSString stringWithFormat:@"\n<%@: %p> -- {\n    <%@: %p> - %@ \n}", [tm class], tm, [self class], self, timersInfo];
}

@end

@implementation AGTimerManager (AGRepeatTimer)

#pragma mark 定时器⏰
- (NSString *) ag_startRepeatTimer:(NSTimeInterval)ti
                            repeat:(AGTMRepeatBlock)repeatBlock
{
    return [self ag_startRepeatTimer:ti delay:0. forMode:NSRunLoopCommonModes repeat:repeatBlock];
}

- (NSString *) ag_startRepeatTimer:(NSTimeInterval)ti
                             delay:(NSTimeInterval)delay
                            repeat:(AGTMRepeatBlock)repeatBlock
{
    return [self ag_startRepeatTimer:ti delay:delay forMode:NSRunLoopCommonModes repeat:repeatBlock];
}

- (NSString *) ag_startRepeatTimer:(NSTimeInterval)ti
                           forMode:(NSRunLoopMode)mode
                            repeat:(AGTMRepeatBlock)repeatBlock
{
    return [self ag_startRepeatTimer:ti delay:0. forMode:NSRunLoopCommonModes repeat:repeatBlock];
}

- (NSString *) ag_startRepeatTimer:(NSTimeInterval)ti
                             delay:(NSTimeInterval)delay
                           forMode:(NSRunLoopMode)mode
                            repeat:(AGTMRepeatBlock)repeatBlock
{
    NSString *timerKey;
    [self ag_prepareTaskTimer:&timerKey interval:ti delay:delay];
    [self ag_addTaskForTimer:timerKey taskToken:@"__AGRepeatTaskToken" repeat:repeatBlock completion:nil];
    [self ag_startTaskTimer:timerKey forMode:mode];
    return timerKey;
}

@end

@implementation AGTimerManager (AGDateTimer)

#pragma mark 日期倒计时📆
- (NSString *)ag_startCountdownDate:(NSDate *)date
                           interval:(NSTimeInterval)ti
                          countdown:(AGTMDateCountdownBlock)countdownBlock
                         completion:(AGTMCompletionBlock)completionBlock
{
    NSTimeInterval timeInterval = [date timeIntervalSinceDate:[NSDate date]];
    if ( timeInterval <= 0 ) {
        completionBlock ? completionBlock() : nil;
        return nil;
    }

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSCalendarUnit unitFlags
    = NSCalendarUnitYear| NSCalendarUnitMonth| NSCalendarUnitDay| NSCalendarUnitHour| NSCalendarUnitMinute| NSCalendarUnitSecond;

    return [self ag_startCountdownTimer:timeInterval interval:ti countdown:^BOOL(NSTimeInterval surplus) {

        if ( countdownBlock ) {
            NSDateComponents *comp = [calendar components:unitFlags fromDate:[NSDate date] toDate:date options:0];
            countdownBlock(calendar, comp);
        }

        return YES;

    } completion:^{

        if ( completionBlock ) {
            completionBlock();
        }

    }];

}

- (NSString *)ag_startCountdownDate:(NSDate *)date
                          countdown:(AGTMDateCountdownBlock)countdownBlock
                         completion:(AGTMCompletionBlock)completionBlock
{
    return [self ag_startCountdownDate:date interval:1. countdown:countdownBlock completion:completionBlock];
}

- (NSString *)ag_startCountdownDateInterval:(NSTimeInterval)timeIntervalSinceNow
                                  countdown:(AGTMDateCountdownBlock)countdownBlock
                                 completion:(AGTMCompletionBlock)completionBlock
{
    if ( timeIntervalSinceNow <= 0 ) {
        completionBlock ? completionBlock() : nil;
        return nil;
    }
    NSDate *date = [NSDate dateWithTimeIntervalSinceNow:timeIntervalSinceNow];
    return [self ag_startCountdownDate:date interval:1. countdown:countdownBlock completion:completionBlock];
}

@end

@implementation AGTimerManager (AGCountDownTimer)

#pragma mark 倒计时⏳
- (NSString *) ag_startCountdownTimer:(NSTimeInterval)duration
                             interval:(NSTimeInterval)ti
                              forMode:(NSRunLoopMode)mode
                            countdown:(AGTMCountdownBlock)countdownBlock
                           completion:(AGTMCompletionBlock)completionBlock
{
    return [self ag_startCountdownTimer:duration
                               interval:ti
                                  delay:0.0
                                forMode:mode
                              countdown:countdownBlock
                             completion:completionBlock];
}

- (NSString *) ag_startCountdownTimer:(NSTimeInterval)duration
                             interval:(NSTimeInterval)ti
                                delay:(NSTimeInterval)delay
                              forMode:(NSRunLoopMode)mode
                            countdown:(AGTMCountdownBlock)countdownBlock
                           completion:(AGTMCompletionBlock)completionBlock
{
    if ( duration <= 0 ) return nil;

    NSString *timerKey;
    __block NSTimeInterval countdown = duration;
    [self ag_prepareTaskTimer:&timerKey interval:ti delay:delay];

    [self ag_addTaskForTimer:timerKey taskToken:@"__AGCountdownTaskToken" repeat:^BOOL{

        countdown -= ti;

        BOOL repeat = YES;
        if ( countdownBlock ) {
            repeat = countdownBlock(countdown);
        }

        if ( NO == repeat ) {
            return NO;
        }

        if ( countdown <= 0 && completionBlock ) {
            completionBlock();
        }

        return countdown > 0;

    } completion:nil];

    [self ag_startTaskTimer:timerKey forMode:mode];

    return timerKey;
}

- (NSString *) ag_startCountdownTimer:(NSTimeInterval)duration
                            countdown:(AGTMCountdownBlock)countdownBlock
                           completion:(AGTMCompletionBlock)completionBlock
{
    return [self ag_startCountdownTimer:duration
                               interval:1.
                                forMode:NSRunLoopCommonModes
                              countdown:countdownBlock
                             completion:completionBlock];
}

- (NSString *) ag_startCountdownTimer:(NSTimeInterval)duration
                                delay:(NSTimeInterval)delay
                            countdown:(AGTMCountdownBlock)countdownBlock
                           completion:(AGTMCompletionBlock)completionBlock
{
    return [self ag_startCountdownTimer:duration
                               interval:1.
                                  delay:delay
                                forMode:NSRunLoopCommonModes
                              countdown:countdownBlock
                             completion:completionBlock];
}

- (NSString *) ag_startCountdownTimer:(NSTimeInterval)duration
                             interval:(NSTimeInterval)ti
                            countdown:(AGTMCountdownBlock)countdownBlock
                           completion:(AGTMCompletionBlock)completionBlock
{
    return [self ag_startCountdownTimer:duration
                               interval:ti
                                forMode:NSRunLoopCommonModes
                              countdown:countdownBlock
                             completion:completionBlock];
}

- (NSString *) ag_startCountdownTimer:(NSTimeInterval)duration
                             interval:(NSTimeInterval)ti
                                delay:(NSTimeInterval)delay
                            countdown:(AGTMCountdownBlock)countdownBlock
                           completion:(AGTMCompletionBlock)completionBlock
{
    return [self ag_startCountdownTimer:duration
                               interval:ti
                                  delay:delay
                                forMode:NSRunLoopCommonModes
                              countdown:countdownBlock
                             completion:completionBlock];
}

@end


text:
Q: Need advice on how to set up live video streaming to web/mobile devices I have a bunch of live udp video streams that currently are viewed by set top boxes in my network. I would like to pick this video up (I can do this with vlc now) and stream it out to other non-STB endpoints (webpage or a phone/tablet of some sort).
Right now I am able to pick up the udp stream with vlc and convert it to an http stream on port 8080 of my vlc box. Then I can use the vlc client to pick up and watch that video stream.
This is where I'm not sure where to go with it. I really doubt I would want everyone who is watching the video to make a connection back to my vlc server that is doing the encoding, so how do I distribute this live video to the people who want to see it?

A: Setup VLC to convert your UDP streams into a web-compatible format such as Apple's HTTP live streaming. You may have to ask VLC to deposit the streams into a WebDAV-enabled server such as Apache. You can then point your users at Apache itself, or front it with a web accelerator such as Varnish if you are expecting a large audience.
You might consider a live transcoding appliance such as Envivio 4Caster or Harmonic ProStream 4000 to replace VLC.
Hope this helps.

redpajama_set_name: RedPajamaStackExchange