text:
Displaying results 91-120 of 1112 matches for query Cyprus problem.
91. Cyprus scrambles to legislate whistleblower law
https://knews.kathimerini.com.cy/en/news/cyprus-scrambles-to-legislate-whistleblower-law
Members of parliament in the Republic of Cyprus are urgently making their way to the justice ministry to compare notes on whistleblowing protections legislation, as the country scrambles to meet an EU deadline next month...
92. Some 66,000 plastic bottles, bags, straws and wrappers contaminate our beaches in Cyprus
https://knews.kathimerini.com.cy/en/news/some-66-000-plastic-bottles-bags-straws-and-wrappers-contaminate-our-beaches-in-cyprus
Cyprus has 69 Blue Flag beaches and this makes the need to protect our coastline even more urgent....
93. Government subsidies for electric vehicles
https://knews.kathimerini.com.cy/en/business/government-subsidies-for-electric-vehicles
The car market is going through a difficult period, as evidenced by the statistics of new motor vehicle registrations....
94. Woman's own immune system cured itself of HIV
https://knews.kathimerini.com.cy/en/news/woman-s-own-immune-system-cured-itself-of-hiv
A woman from Argentina appears to have rid herself of HIV without drugs or treatment - the second documented case of its kind in the world....
95. The sins of the EU and Nouris' obligation
https://knews.kathimerini.com.cy/en/comment/opinion/the-sins-of-the-eu-and-nouris-obligation
The numbers are buzzing about the huge problem Cyprus faces with irregular immigration and asylum seekers....
96. Turkish Vice President: Insists on a two-state solution and threatens the EEZ
https://knews.kathimerini.com.cy/en/news/turkish-vice-president-insists-on-a-two-state-solution-and-threatens-the-eez
97. Tatar: The opening of Varos gave a new dimension to the Cyprus issue
https://knews.kathimerini.com.cy/en/news/tatar-the-opening-of-varos-gave-a-new-dimension-to-the-cyprus-issue
The decision to open Varosi gave the Cyprus issue another dimension, said Ersin Tatar, while claiming that Varosi is the territory of the pseudo-state and part of the sovereignty of the "trnc"....
98. The association of retail companies requests exemptions to CovScan
https://knews.kathimerini.com.cy/en/business/the-association-of-retail-companies-is-requesting-exemptions-to-covscan
Following the ruckus in retail businesses during the first days of the CovScan check, companies continue to document problematic issues arising from the verification requirement. ...
99. Locals up in arms over mosque plans
https://knews.kathimerini.com.cy/en/news/locals-up-in-arms-over-mosque-plans
Local residents in a village in Paphos are up in arms over hearsay that Syrian inhabitants in the community want to have a mosque in the small rural town, with the debate on migration getting more intense and political...
100. Supermarkets disagree with CovScan and ask for instructions
https://knews.kathimerini.com.cy/en/business/supermarkets-disagree-with-covscan-and-ask-for-instructions
Supermarket owners are asking the Minister of Health for instructions on how to implement CovScan, but they are underlining their opposition to this measure and the adoption of any additional measures to support its implementation....
101. Anastasiadis intervenes in the conference on Libya with messages to Turkey
https://knews.kathimerini.com.cy/en/news/anastasiadis-intervenes-in-the-conference-on-libya-with-messages-to-turkey
The President of the Republic, Mr. Nikos Anastasiadis participated today in the Paris International Conference on Libya, following an invitation from the President of the French Republic, Mr. Emanuel Macron....
102. Minutes shed light on Turkish intransigence at Crans-Montana Cyprus talks
https://knews.kathimerini.com.cy/en/news/minutes-shed-light-on-turkish-intransigence-at-crans-montana-cyprus-talks
The official minutes of a meeting between UN Secretary-General Antonio Guterres and Turkish Foreign Minister Mevlut Cavusoglu on July 6, 2017,...
103. Averoff: 'We will give what we can to the vulnerable child - We are not racists'
https://knews.kathimerini.com.cy/en/news/averoff-we-will-give-what-we-can-to-the-vulnerable-child-we-are-not-racists
No one else wants a solution to the Cyprus problem more than we do, according to DISY President Averof Neophytou,...
104. Bilateral agreements needed for the repatriation of migrants
https://knews.kathimerini.com.cy/en/news/bilateral-agreements-needed-for-the-repatriation-of-migrants
DISY President Averof Neophytou said on Wednesday that Cyprus should speed up bilateral repatriation agreements with countries in order to ensure public safety....
105. Retailers furious over CovScan's glitchy start
https://knews.kathimerini.com.cy/en/news/retailers-furious-over-covscan-s-glitchy-start
A controversial android app pushed by the government to help businesses authenticate Safe Pass holders had a rough first day on Monday, with retailers upset over reported failures ranging from vaccinated documents being flagged as invalid to two different devices scanning the same QR code but giving different results...
106. CovScan Cyprus mandatory but questions remain
https://knews.kathimerini.com.cy/en/news/cabinet-makes-covscan-mandatory-but-questions-remain
Door greeters at supermarkets and other businesses will have to use an android app when checking Safe Pass, according to a Cabinet decision, but the policy going into effect on Monday has left many questions unanswered with citizens calling even pharmacies to get the latest scoop...
107. Erdogan's annoyance and his wrong strategy towards Greece
https://knews.kathimerini.com.cy/en/comment/opinion/erdogan-s-annoyance-and-his-wrong-strategy-towards-greece
A country's strength is the sum, not only of its military capabilities, but also of its collaborations and alliances. Greece, whether Turkey likes it or not, is a full member of the European Union and has close ties, also due to the Greek diaspora, with the United States....
108. Britain: 'Difficult months are coming, the pandemic is not over'
https://knews.kathimerini.com.cy/en/news/britain-difficult-months-are-coming-the-pandemic-is-not-over
Christmas can be difficult as the Covid-19 pandemic is not over, England's Deputy Chief Medical Officer Jonathan Van-Tam warned today, urging people to be careful and get vaccinated with booster doses....
109. Pregnant woman dies from COVID-19
https://knews.kathimerini.com.cy/en/news/pregnant-woman-dies-from-covid-19
A 38-year-old pregnant woman from the northern city of Katerini died of Covid-19 last week. According to a local broadcaster, she had not been vaccinated....
110. Tatar puts up new fight for squeaky cheese
https://knews.kathimerini.com.cy/en/news/tatar-puts-up-new-fight-for-squeaky-cheese
Turkish Cypriot leader Ersin Tatar is taking to task European Union decisions on halloumi/hellim, the island's famous cheese, saying they favor Greek Cypriots and leave their counterparts in the north at the mercy of inspectors approved by the south...
111. COVID death toll surpasses 5 million worldwide
https://knews.kathimerini.com.cy/en/news/covid-death-toll-surpasses-5-million-worldwide
The coronavirus is responsible for more than five million confirmed deaths around the world as of Monday,...
112. Greece becoming a hotspot for Hollywood films
https://knews.kathimerini.com.cy/en/life/greece-becoming-a-hotspot-for-hollywood-films
01/11/2021 | LIFE
Philip Fertis is involved in puppetry, but due to the pandemic, the demand for performances in schools and municipalities is low. ...
113. President Anastasiades attends COP26
https://knews.kathimerini.com.cy/en/news/president-anastasiades-attends-cop26
The President of the Republic, Mr. Nicos Anastasiades, along with 130 world leaders, is attending the COP26 climate conference being held in Glasgow, Scotland....
114. Bicycle subsidy website suspended indefinitely
https://knews.kathimerini.com.cy/en/news/bicycle-subsidy-website-suspended-indefinitely
The government portal for bike subsidy applications was temporarily shut down due to "excessive interest" in the scheme....
115. Bad weather still looms after wet weekend
https://knews.kathimerini.com.cy/en/news/bad-weather-still-looms-after-wet-weekend
An unstable weather pattern producing heavy winds and thunderstorms is still affecting parts of the island, following reports of flooding incidents in Larnaca over the weekend that also caused flight diversions and delays at the airport...
116. Cypriot banks to reduce costs
https://knews.kathimerini.com.cy/en/news/cypriot-banks-to-reduce-costs
The President of the European Banking Authority speaks to "K"...
117. Cypriot 'superminister' accused of obstructing sea rescues
https://knews.kathimerini.com.cy/en/news/cypriot-'superminister-accused-of-obstructing-sea-rescues
Cypriot Interior Minister Nicos Nouris has slammed a report about him calling the shots to hinder sea rescues of refugees, accusing a journalist of pushing an 'extremely dangerous' open doors agenda while the local newspaper is hitting back with a little-known 'embarrassing' incident...
118. Council of Europe: Government in Cyprus 'too centralized'
https://knews.kathimerini.com.cy/en/news/cyprus-too-centralized
Cyprus remains a "very centralized country", according to a report from the Associated Press. ...
119. United States issues its 1st passport with 'X' gender marker
https://knews.kathimerini.com.cy/en/news/united-states-issues-its-1st-passport-with-'x-gender-marker
The United States has issued its first gender neutral passport with an 'X' designated under the gender category, making it one of just over a dozen countries to identify intersex individuals....
120. Cabinet ends citizenship ordeal for mixed couple's kids
https://knews.kathimerini.com.cy/en/news/cabinet-ends-citizenship-ordeal-for-mixed-couple-s-kids
The President's Cabinet has granted citizenship to two siblings from a bicommunal mixed family, following criticism that their applications for identification cards were caught in a political stalemate for having a Turkish grandfather...


text:
Eneya Jenkins Bio, Age, Job, Sanela Diana Jenkins Daughter
ByCharles MatthewsMay 26, 2022
Eneya Jenkins is the middle child of Sanela Diana Jenkins, the official new star of Real Housewives of Beverly Hills. We know plenty about Sanela's dating life, but this article is focused on her daughter Eneya. Learn about her age, job, birthday, and her dating life.
Keep scrolling down this Eneya Jenkins Bio to learn more about her.
Meet Eneya Jenkins, Sanela Diana Jenkins Daughter
Eneya Jenkins is the youngest of two children Sanela Diana Jenkins shared with her London-based Barclays banker husband Roger Jenkins. Her parents married in 1999. The marriage ran its course and ended in divorce in 2011.
Sanela is a cast member of The Real Housewives of Beverley Hills' season 12 cast. She is the founder and CEO of Neuro, a beverage startup. She also bought Melissa Odabash, a swimwear line, and D Empire Entertainment, a "full-service music label," according to their website.
Sanela had highlighted her daughter two days before the publication of this piece. She captioned, "happy girls 🌸".
Sanela, on the other hand, had a long journey from poverty to riches. She was a Bosnian refugee who had devoted the last 20 years of her life to activism. She founded various advocacy organizations, including the Sanela Diana Jenkins Human Rights Project at UCLA and the Jenkins-Penn Haitian Relief Organization with actor Sean Penn.
According to her foundation's website, Sanela was also recognized as one of the World's Top Three Justice Innovations by The Hague Institute. Diana is worth $300 million, according to Celebrity Net Worth.
Sanela is currently in a relationship with her R&B singer baby-father Asher Monroe. 'After my divorce, I was single for about five minutes,' Diana said. 'I met Asher at a Victoria Secret's party. It was never meant to be anything else, and just kept having fun, and here we are.'
They welcomed a child named Eliyanah on 25 November 2020. Now, she is the mother of three children. Eneya has an older brother named Innis Jenkins. He is currently dating Ava Dash, daughter of Damon Dash and Rachel Roy.
Innis's father dated a few women after his divorce from Sanela. Some of the notable names were Elle Macpherson and former Miss Venezuela Aida Yespica. Then, he met and married Larissa Andrade in August 2018.
Eneya Jenkins Age
At the time of this article in May 2022, Eneya Jenkins is 19 years old.
Eneya Jenkins Job
Eneya Jenkins is an aspiring equestrian. She has been professionally competing at the events since 2019. According to British Eventing, in 2019, she competed in five events namely Woodside CA, Paso Robles, River RD, and Temecula CA. She won two out of five events and placed fifth in one event.
In 2020, she competed in Bicton Arena International riding her horse Gideon. She placed 7th in October 2020 event.
Moreover, in 2021, Eneya competed in 22 events. Some of the events she competed in were Bicton Arena International (2 events), Bovington (2), Pontispool (2), SAPEY, Aston-Le-Walls, Nunney International (2), and several other events.
As of May 2022, Eneya has already competed in seven events. She participated in two events of Bicton Arena, Aston-E-Walls, and Moreton Morrell. In October 2021, she was featured on Horse & Hound.
The pandemic scuppered Eneya Jenkins' plans to return to her home in America, where she has lived since the age of three, last year and so she rerouted to the UK and based herself at Chedington Equestrian. She then capitalized on a season of competitive outings to finish at the head of the 80-strong WH Bond CCI2*-L.
Recording her first international win aboard Sankro, Eneya, said: "I was in Croatia at the beginning of 2020 with my family and while Covid meant that we couldn't get back to the US, I'd also lost a horse [Lawtown Boy] while I was away and, not wanting to return to an empty stall, I thought I'd give eventing a go in the UK. I wanted a new beginning."
Eneya's skills lie in showjumping and eventing. She has been featured on the IG page of (@_eeventing_).
Is Eneya Jenkins Dating Anyone?
According to Facebook's relationship status, Eneya Jenkins is single. Also, she hasn't shared anything related to her dating life in on her Instagram. So, either she doesn't entertain sharing information regarding her dating life publicly or she is actually single.
Eneya had once posted a Miami-based model named River Viiperi. When a fan inquired if he was Eneya'sboyfriend, she replied "maybe". Her mother Diana also left a heart emoji in the comment section. The post was from April 2021 so maybe they were an item at the time.
But neither of them has featured each other ever since then. Either way, we don't have much to go on but to claim that Eneya Jenkins is currently enjoying her life as a single young lady.
Eneya Jenkins Height
Eneya Jenkins's height is around 5 feet 8 inches.
Has Eneya Jenkins Made Her TV Debut Yet?
Diana Jenkins's daughter Eneya is yet to TV debut on TV yet.
When Is Eneya Jenkin's Birthday?
Eneya Jenkins's birthday is on 24 September.
Is Eneya Jenkins On Instagram?
Eneya Jenkins is on Instagram (@eneyajenkins). She is also on Facebook (@eneya.jenkins).
Sanela Diana Jenkins Son: Who Is Innis Jenkins? His Age, Job
Are Maika Monroe And Stranger Things Joe Keery Still Dating?
Charles Matthews
Charles Matthews is a senior editor at Gossip Next Door. Besides a good Netflix binge, he enjoys the outdoor, rap music, and dystopian novels.
View all posts by Charles Matthews

redpajama_set_name: RedPajamaCommonCrawl


Help us turn your unwanted clothes into money to buy much needed play resources for our school.
The weather is finally getting a little warmer and it's time to clear out the winter clothes!
Get ready for summer and help our school by bringing in your unwanted clothes. It's the hassle free way of clearing out your wardrobe - just drop in the clothes to the GP space in the new wing when you bring your child to school or pick them up.
Collection runs until Wednesday 25th May, don't delay!


text:
"Cannabidiol looks to be a promising drug treatment for people wanting to stop smoking cannabis" says co-author Professor Celia Morgan
Trial tests whether cannabidiol could help treat cannabis use disorder
Prescription medication of cannabis extract cannabidiol (CBD) is safe for daily use in treating cannabis use disorder, and could help people to cut down on cannabis use, according to an initial randomised controlled trial published in The Lancet Psychiatry journal.
The study is the first to report that daily prescribed medical-use CBD use can cause reduction in cannabis use among people with cannabis use disorder, but the four-week study was not designed to provide robust estimates of the magnitude or duration of efficacy and further studies are needed.
Researchers found an optimal daily dose of between 400mg and 800mg of CBD, which is considerably higher than concentrations found in CBD products that are available without prescription (which typically contain around 25mg CBD). They warn that such products should not be used for medicinal purposes.
The authors say that these findings are important in light of major policy changes surrounding the production and sale of cannabis products, increases in the number of people entering treatment for cannabis use disorders worldwide, and the current absence of recommended treatments for cannabis use disorder.
Co-author Professor Celia Morgan, of the University of Exeter, said: "This is an exciting finding given increasing numbers of people in treatment with cannabis use problems, and recent changes in legislation for cannabis use worldwide. Cannabidiol looks to be a promising drug treatment for people wanting to stop smoking cannabis.
"Cannabidiol has become increasingly widely used, but there is very little scientific evidence of its therapeutic effects. High dose daily cannabidiol use for a month in this study was associated with a reduction cannabis use "
Lead author Dr Tom Freeman, of the University of Bath, said: "Our study provides the first causal evidence to support cannabidiol, or CBD, as a treatment for cannabis use disorders. This is encouraging, as there are currently no drug treatments for cannabis addiction.
"CBD products are widely available in many countries but we would not advise people to self-medicate with these products. People with concerns about their cannabis use should always speak to a healthcare professional in the first instance."
Cannabis addiction affects an estimated 22 million people worldwide – similar to the prevalence of opioid use disorders – and the proportion of people seeking help for cannabis use disorders has risen in all world regions apart from Africa.
Cannabidiol, also known as CBD, is one of more than 80 chemicals present in cannabis. By itself, CBD has been reported to induce feelings of relaxation and calm, but it does not cause the "high" associated with cannabis use, which is caused by a different chemical called tetrahydrocannabinol, or THC. As a result, CBD is sold legally in many countries in oils, capsules, creams, tea and other products.
Previous studies have suggested that taking CBD products could help to reduce withdrawal symptoms in people who are actively trying to quit cannabis use. However, it hasn't been possible to determine whether these effects were due to CBD, because the studies either used an open-label design (where the participants knew what medications they were taking and so the results could have been biased), or CBD was given together with THC so it wasn't possible to say to which chemical the effects were attributable.
In this latest study, researchers carried out the first randomised clinical trial of CBD for the treatment of cannabis addiction. All 82 people who took part in the study had been diagnosed with a cannabis use disorder of at least moderate severity, which means they experienced at least four out of 11 possible symptoms of addiction. They had all expressed a desire to quit within the next month, and had tried to quit on at least one occasion before.
Participants were randomly assigned to treatment groups and asked to take two capsules of CBD twice daily for four weeks. The placebo group were given sham capsules containing no CBD, while the others received a daily dose of either 200mg, 400mg or 800mg CBD. All of the participants received six counselling sessions designed to help them quit using cannabis, which took place before and during the study period.
Weekly urine samples were tested for levels of THC to assess how much cannabis had been consumed in the past week. Participants were also asked to report how many days they had abstained from using cannabis that week.
The trial used an adaptive design to identify which doses of CBD were effective or ineffective compared to placebo. In the first stage of the trial, 12 people per group were assigned to either placebo, 200mg, 400mg or 800mg CBD (48 total). After the first phase of the study, the 200mg dose was found to be ineffective and these participants were removed from the trial. A further 34 people were recruited to the second stage of the study and randomly assigned to receive daily doses of either the placebo (11 people), 400mg CBD (12 people) or 800mg CBD (11 people).
Daily CBD doses of 400mg and 800mg were both found to reduce participants' cannabis intake (reducing THC levels in the urine by -94.21ng/mL and -72.02ng/mL, respectively). In addition, abstinence from cannabis use increased by an average of 0.5 days per week in the group who received the 400mg daily dose of CBD and 0.3 days per week in the group who received 800mg CBD daily.
The researchers observed no difference in side effects experienced by the placebo group and those receiving any dose of CBD. 77 of 82 participants completed the treatment and those who dropped out did so because of missing study visits, being lost to follow up, not taking the study medication, or taking additional medications, and not because of the CBD treatment. There were no serious adverse events during the study, suggesting that CBD is safe and well tolerated at the doses tested.
Professor Valerie Curran, senior author and Director of the Clinical Psychopharmacology Unit at University College London, said: "Our findings indicate that CBD doses ranging from 400mg to 800mg daily have the potential to reduce cannabis use in clinical settings, but higher doses are unlikely to bring any additional benefit. Larger studies are needed to determine the magnitude of the benefits of daily CBD for reducing cannabis use."
The study was carried out over a four-week treatment period with follow up extending to six months. The researchers say additional research is needed to investigate the extent to which their findings translate to different durations of treatment. Studies are also needed to investigate whether CBD directly reduces cannabis use or if it reduces other mental health symptoms which might indirectly affect cannabis use, such as anxiety.


text:
Q: How can i get the image to 100% of screen without resizing or scaling Here i have the .png image in img, when i reduce the window size of browser, the image is still appearing in original style and scroller is appearing at the bottom of the page. but i want the original image with no scroller on bottom. and i don't want to scale or resize the image.
HTML:
<!DOCTYPE html>
<html>
<head>
    <link rel="stylesheet" href="assets/css/bootstrap.min.css" type="text/css" />
    <link rel="stylesheet" href="assets/css/custom.css" type="text/css" />
<title>Welcome</title>
</head>
<body>
        <img src="assets/images/background.png" class="headerimg">\
</body>
</html>

CSS:
.headerimg{
    position:absolute;
    z-index:-1;
}

This is how its appearing now. you can see the scroller at the bottom, and when i scroll, the image appears with actual width.but when i resize the window the original size of the image should remain same but it should appear fit in the screen without scroller.max-width:100%; scales up the image, but it should not scale up the image instead the image height and width should remain as it is and scroller should not appear at bottom.
How can i do this with css?

A: .headerimg{
    position:absolute;
    z-index:-1;
    width: [image's real width];
}

For scrollbar i need more code to see, but i can say you can use "overflow: hidden" in the outer div/body.

A: You could try applying a background image to the body element like so...
body {
  background-image: url('../images/background.png');
  background-size: cover;
}

If you need to attach it to an element you could create a section or div element with a class of headerimg and apply the following...
.headerimg {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  display: block;
  background-image: url('../images/background.png');
  background-size: cover;
}

I hope this helps.

redpajama_set_name: RedPajamaStackExchange


1. To pay your fees online, click the fees button in your My Borrowing section of the Library Dashboard.
2. Click the button which will connect you to SmartPay, our payment platform.
3. Enter the number from the back of your library card and your password.
5. Click Pay Now for charges you would like to pay via credit card. Enter your credit card information and click finish.
6. You will receive a confirmation page when your payment is complete.


text:
Lofton-less Dogs down Pilots
Four Louisiana Tech players scored in double figures, led by David Green who had a career-high 21 points, to help the Bulldogs win, 84-70, over NAIA foe LSU-Shreveport on Tuesday night inside the Thomas Assembly Center on Karl Malone Court.
Tech played without leading scorer and rebounder Kenneth Lofton, Jr., who sat in an effort to continue to heal up from early season wear and tear.
"I was hoping to have a much better defensive performance than we had today," said Tech head coach Eric Konkol. "There are a number of things I could point to. One was overall effort and energy. I knew we had a team coming in here that shoots a lot of threes.
"LSU-Shreveport hurt us in a number of areas. I thought we found a very energetic group [in the second half]. It was a group of guys that played with great juice and they helped us go on a run and win the game."
It was LA Tech's (8-2) fourth straight overall win and 14th straight home win, but it did not come easy. After getting back-to-back three-point plays by Cobe Williams and Keaston Willis to go up 45-32 early in the second half, LSU-Shreveport (6-5) went on a 13-0 run to tie things up at 45-all with 12:57 to play in the game.
After the two teams traded baskets, the Bulldogs found their offensive rhythm, going on a 16-1 run that was sparked by the three ball. Amorie Archibald, Kaleb Stewart and C. Williams combined for four straight three-pointers during the stretch (team was just 6-of-23 from beyond the arc up until then).
The 'Dogs ended up making 13 of their final 17 field goal attempts over the final 12+ minutes of the game to pull away from the Pilots.
Green scored 14 of his 21 points in the first half to help LA Tech hold a 37-27 halftime advantage. Archibald added a season-high 19 points while Stewart tacked on a career-high 12 and C. Williams scored 11.
LSUS had five players in double figures, led by Quentin Jones who finished with 18.
The Battle in Bossier City between Louisiana Tech and LSU takes place on Saturday, Dec. 18 inside Brookshire Arena. Tipoff is set for 6 p.m. CT and will be televised on the CBS Sports Network.
Photo: Sadie Patton
← Welfare inspection leads to fugitive arrest
Parish Police Jury Meeting: December 14, 2021 →


text:
Search on Tech and Facts
Coronavirus Season
The Whole Is Always Less Than the Sum
How to Teach a Robot How to Make a Bed
Comparing Smart Assistants: Google vs Alexa vs Siri [Infographics]
What's interesting?
The Fastest Network Cable Can Now Transfer 1 GB in 0.003 of a Second
Galaxy Turning Gas Into Stars
Interesting Facebook Tricks You Might Not Know
3D astronomy blood brain camera Canada car china city design dna dubai earth Electricity energy facebook facts google graphene heart human interesting Internet lighting material medicine moon mountain mystery nasa Nature New ocean phone piezoelectric robot science skyscraper smartphone solar space technology UFO universe water
Home » Technology » MIT Invents A Shapeshifting Display You Can Reach Through And Touch
MIT Invents A Shapeshifting Display You Can Reach Through And Touch
Andrew J. Blanche
inFORM, mit, pinscreen
The tangible media group at mit's media lab has unveiled a futuristic display made of atoms, not pixels.
We live in an age of touch-screen interfaces, but what will the UIs of the future look like? Will they continue to be made up of ghostly pixels, or will they be made of atoms that you can reach out and touch?
At the MIT Media Lab, the Tangible Media Group believes the future of computing is tactile. Unveiled today, the inFORM is MIT's new scrying pool for imagining the interfaces of tomorrow. Almost like a table of living clay, the inFORM is a surface that three-dimensionally changes shape, allowing users to not only interact with digital content in meatspace, but even hold hands with a person hundreds of miles away. And that's only the beginning.
Created by Daniel Leithinger and Sean Follmer and overseen by Professor Hiroshi Ishii, the technology behind the inFORM isn't that hard to understand. It's basically a fancy Pinscreen, one of those executive desk toys that allows you to create a rough 3-D model of an object by pressing it into a bed of flattened pins. With inFORM, each of those "pins" is connected to a motor controlled by a nearby laptop, which can not only move the pins to render digital content physically, but can also register real-life objects interacting with its surface thanks to the sensors of a hacked Microsoft Kinect.
To put it in the simplest terms, the inFORM is a self-aware computer monitor that doesn't just display light, but shape as well. Remotely, two people Skyping could physically interact by playing catch, for example, or manipulating an object together, or even slapping high five from across the planet. Another use is to physically manipulate purely digital objects. A 3-D model, for example, can be brought to life with the inFORM, and then manipulated with your hands to adjust, tweak, or even radically transform the digital blueprint.
But what really interests the Tangible Media Group is the transformable UIs of the future. As the world increasingly embraces touch screens, the pullable knobs, twisting dials, and pushable buttons that defined the interfaces of the past have become digital ghosts. The tactile is gone and the Tangible Media Group sees that as a huge problem.
"Right now, the things designers can create with graphics are more powerful and flexible than in hardware," Leithinger tells Co.Design. "The result is our gadgets have been consumed by the screen and become indistinguishable black rectangles with barely any physical controls. That's why BlackBerry is dying."
In other words, our devices have been designed to simulate affordances–the quality which allows an object to perform a function, such as a handle, a dial or a wheel–but not actually have them. Follmer says that's not the way it's supposed to be. "As humans, we have evolved to interact physically with our environments, but in the 21st century, we're missing out on all of this tactile sensation that is meant to guide us, limit us, and make us feel more connected," he says. "In the transition to purely digital interfaces, something profound has been lost."
The solution is programmable matter, and the inFORM is one possible interpretation of an interface that can transform itself to physically be whatever it needs to be. It's an interesting (and literal) analogue toskeuomorphism: while in the touch-screen age we have started rejecting interfaces that ape the look of real world affordances as "tacky" in favor of more pure digital UIs, the guys at the Tangible Media Group believe that interface of the future won't be skeuomorphic. They'll be supermorphic, growing the affordances they need on the fly.
Although the inFORM is primarily a sandbox for MIT to experiment with the tactile interfaces to come, it would be wrong to dismiss this project as mere spitballing. "We like to think of ourselves as imagining the futures, plural," Follmer says. "The inFORM is a look at one of them." But while the actual consumer implementation may very well differ, but both Follmer and Leithinger agree that tangible interfaces are coming.
"Ten years ago, we had people at Media Lab working on gestural interactions, and now they're everywhere, from the Microsoft Kinect to the Nintendo Wiimote," says Follmer. "Whatever it ends up looking like, the UI of the future won't be made of just pixels, but time and form as well. And that future is only five or ten years away. It's time for designers to start thinking about what that means now."
Source: http://www.fastcodesign.com/
Like this article? Just click the up-arrow:
Please let us know your thoughts and opinions regarding the "MIT Invents A Shapeshifting Display You Can Reach Through And Touch" article in the comment section below. We'll be reading and responding to your comments.
If you like our content and would like to read more, make sure you visit and follow Tech and Facts on Facebook, Google+, Twitter and Pinterest to be updated every time we post new articles on the site.
3D Printer Almost Entirely Made Out of Lego
The Future Of Flight: Swarms Will Dominate The Sky
Video: How to Download Any Wistia Video Under 1 Minute (Mar 2018)
Skully Helmet AR-1: World's Smartest Motorbike Helmet
Why We Haven't Built A Better Black Box
Vein Viewing Technology
Warning: count(): Parameter must be an array or an object that implements Countable in /home/techandfactscom/techandfacts.com/wp-includes/class-wp-comment-query.php on line 399
An Everlasting Storm – Catatumbo lightning
Computer Chip Can Test DNA in One Hour
Your Heart Has Own Brain!
South Korea's 5G – Download Full Movie In One Second
Why Deaf People Don't Achoo When They Sneeze
Where Did the Water Come From?
Copyright © 2023 TechandFacts.com


Image Title: Skull Bedding Duvet Comforter COVER Set Sugar Skulls Intended For King Decorations 13. Filename: skull-bedding-duvet-comforter-cover-set-sugar-skulls-intended-for-king-decorations-13.jpg. Image Dimension: 800 x 800 pixels. Images Format: jpg/jpeg. Publisher/Author: Camryn Padberg. Uploaded Date: Saturday - April 07th. 2018 18:54:33 PM. Category: Bedroom. Image Source: decoist.com.
Tap The Thumbnail Bellow to See Related Gallery of "Skull Bedding Duvet Comforter COVER Set Sugar Skulls Intended For King Decorations 13"


You might already be using the Oneflow Lifecycle feature which allows you to put a duration in your contracts. This in turn allows parties on both sides to cancel the contract, marking the contract as cancelled in your Archive- but lets it run the course of it's current contract period before it actually ends.
But in some cases, you may need to terminate the contract with immediate effect, or perhaps you didn't incorporate the lifecycle in your contract and it stays active in your Archive even though it may have ended in practice. What then?
Well, head down to the "More options" button at the bottom right of your contract, and you will find the option to terminate the contract immediately.
When you confirm the termination, a notification will be sent to all parties.


TAMZ has worked with Katana, a robata and sushi bar located in Chicago, West Hollywood, and Dubai for the previous eight years, as part of our partnership with the Innovative Dining Group. The partnership started with one project at sister restaurant Boa and resulted in a company-wide collaboration across the IDG empire. TAMZ has worked with Katana as well as IDG's other dining destinations, on multiple levels of creative design and marketing, from menu design, to websites and packaging.


Making great coffee is easy, as long as you follow a few basic rules. These rules apply to any method you use, but I prefer hand methods, such as a Chemex, Hario V60, etc because I have more control over the process. Which gadget you use is a personal preference and mostly boils down to your filter preference. Of all my gadgets, I currently like the Chemex the most because I like a clean, juicy coffee and I find the fuller-bodied coffees to be murky and heavy because of the extra sediment, which also adds a bitter flavor to the coffee.
Just following these six steps can drastically improve your coffee enjoyment!


text: Q: Compute the residue with the definition I want to calculate $\underset{z=0}{\text{Res }} e^{\cot(z)}$ with the definition. So I need to integrate my function over tall rectangular with vertical sides intersecting real axis at $\pm\frac{\pi}{2}$. But I can't calculate it


text:
Home Gear Electronics Reviews Sena SMH10R Bluetooth Headset Review
Sena SMH10R Bluetooth Headset Review
Mark Tuttle
Sena's SMH10 and SMH5 Bluetooth headsets are as easy to use as they come. The key to their success is the "Jog Dial," a big round knob that is both a button and a dial that lets you push-to-talk and enable and disable all of the other functions with a single control. The jog dial is mounted on the main unit, which clamps or adheres to the side of your helmet and contains the battery and indicator lights. Twist the dial to turn the volume up or down, push it to talk on the intercom, pair it with another headset or enter the function menu, where you twist the dial once again to make your selections from a spoken menu. The learning curve is short, volume plentiful and fidelity excellent, whether you use the headsets to intercom with a passenger and/or other riders, listen to spoken GPS instructions, the radio in the SMH5-FM or music and phone calls from a smartphone.
The only downside to the SMH10 and SMH5, in fact, is their size, since the tip of the jog dial sticks out about two inches from the side of your helmet. In reality its rounded shape is aerodynamic enough that it's unnoticeable to the wearer, even at highway speeds, but it can get in the way when the helmet is off your head—when you're packing two helmets into a top trunk, for example. I imagine some sportbike riders and land-speed record runners would appreciate something with a slimmer profile as well, even just for appearance's sake.
Sena SMH10R Bluetooth Headset installation.
Enter the new Sena SMH10R, which uses a two-part design to slim down the main unit to about a 3/8-inch thick. In this model, the small, flat battery pack is separate—it connects to the main unit with a wire and fastens to the outside rear of the helmet. The jog dial is replaced with a single button in the center that you use in combination with up/down volume buttons to enable or disable all of the functions. Everything else works virtually the same way. Some of the spoken menu options have been replaced with beeps, but the unit still talks to you in the main setup menu.
Installing the SMH10R was a snap in a Shoei GT-Air and should be fairly simple in most helmets. It comes with both a wired mic for full-face lids, and a boom mic for open-face or modular helmets, as well as all of the adhesive and hook-and-loop pads for securing the main unit, battery pack and speakers onto the helmet. Each speaker, the mic and battery connect to a short pigtail that is permanently attached to the main unit, and these connectors get tucked away somewhere between the comfort liner and the helmet shell, so you have to leave the control unit and battery on the helmet for charging. A USB cable is provided for this and firmware upgrades, but you'll need a USB/AC adapter for wall charging. The one for my iPhone worked just fine.
It takes a little practice to find the center button, but it lives between a pair of raised ribs that can be felt with gloves on. Once mastered, you're ready to use the Bluetooth 3.0 intercom with up to four other Sena headset users; control and listen to your MP3 player via Bluetooth stereo; make conference phone calls with an intercom participant; take spoken GPS directions; and make and receive phone calls. The volume for each audio source can be controlled separately, there's a cigarette charger for charging on the fly, and the unit is water resistant.
Charging time for the lithium polymer battery is 2.5 hours, and we got a little more than six hours of talk time and eight days of standby out of it. Sena claims the unit has a range in open terrain of 980 yards, but we were only able to understand one another on the intercom out to about 3/10ths of a mile. That's still good enough for a group ride, or talking to your passenger while he or she is over yonder somewhere and you're waiting by the bike.
A single SMH10R headset retails for $219; the Dual Pack goes for $399. By all means, if you don't care about their size, get the SMH10 or SMH5—they're easier to install and to use. But if you need a sleek, low-profile headset, this SMH10R is about the best thing going.
Sena Bluetooth, 866-8-US-SENA (866-887-7362), senabluetooth.com
Mark Tuttle - January 12, 2021
Mark Tuttle - January 6, 2021


text:
THE ART TRAVELLER
Gillian McIver writing about TRAVEL, ART & FILM
I'm reading
February 21, 2016 Gillian Mciver
Eugène Delacroix exhibition at The National Gallery – first thoughts
[Women of Algiers in their Apartment (French: Femmes d'Alger dans leur appartement) 1834 oil on canvas Eugène Delacroix; source Wikimedia Commons. Picture is in the Louvre]
The National Gallery's Delacroix exhibition is billed as 'Delacroix and the Rise of Modern Art' which means that there's not as much Delacroix as one might like. It's more focused on seeing the great "Romantic" painter as a profound influence on the 'Modern' artists, such as the Impressionists and post-Impressionists. There are some interesting relationships made, especially with Renoir, who seems to have learned a lot about colour from Delacroix but Renoir had more, new paints to have fun with, thanks to industrialization.
One thing s that is particularly intriguing is the linking of Delacroix to Kandinsky. The final picture in the show is Kandinsky's 'Study for Improvisation V', painted in 1910. The fascinating thing that links these two artists is their development of ideas about colour (expressed in Delacroix's Journals and in Kandinsky's Concerning the Spiritual in Art). This would be a great show in its own right, but it's not really discussed here. But I doubt that Delacroix specifically influenced Kandinsky at all. I mean, Kandinsky no doubt saw Delacroix's work in Paris and no doubt was impressed but – so what?
I do have a big problem with the way Art History is often done, as a linear progression of "influences." Influence happens all the time, and it's not linear. People see (and hear) stuff and this finds its way into their work. Of course it happens, but sometimes I wonder if the art history approach (at least as it is offered up in exhibits like this) is a bit too reductionist.
I found myself really impressed with Delacroix's paintings of North Africa. Painted (deliberately) long after he'd seen the places, these are vibrant with colour and movement. 'Women of Algiers in their Apartment' (above) is particularly glorious. Delacroix avoids the overt exoticisation seen in some of the works by his "Orientalist" followers, notably Theodor de Chasseriau, whose work is featured here.
This was just my first visit to the show, and I'll go again so maybe I'll have more thoughts. I want particularly to think about how Delacroix's imagery is repurposed in cinema.
Art-Related
Published by Gillian Mciver
Hi I'm The Art traveller. I'm a filmmaker, writer and art historian. The Art Traveller is my blog, where I write about travelling the world and looking at art. I'm interested in how the environment and history of a place affect how we see art. My work includes documentary film-making, short films and artists' video, often exploring historical events or places. My interest in art history and film led me, in 2016 to write "Art History for Filmmakers" published by Bloomsbury Press, a book exploring how filmmakers can and do use paintings from the past to inspire and create visual story telling.	View all posts by Gillian Mciver
Previous AHFM: Parajanov and "Shadows of Forgotten Ancestors"
Next what is 'Big Art History' and does it work?
waft on my cloud
art Art-Related art history cinema art travel cinema cinematography exhibition Film Making London photography rants + outrages the city thoughtful travel wildcards
Art travelling: Passive Constructions, Gallery Misr, Cairo
Art Travelling: Omar El Fayoumi at the Nile Gallery, Cairo
Art Travel in Zamalek, Cairo
Art Travelling in Alexandria, Egypt: exploring the Library
The Art Traveller at Alexandria Library


In partnership with local high schools, SRJC helps connect high school Career Pathways to college Career and Technical Education (CTE) programs to give students a head start on college and careers.
Career Pathways are coherent sequences of high school Career & Technical Education (CTE) courses that prepare students for careers and continued education. Many feature articulation with postsecondary institutions, like SRJC.
All students benefit from developing high-demand career skills that support their success in the workforce and give them a competitive edge. Rigorous Career Pathway programs also provide college prep students with opportunities to apply academic content in real-world applications.
Articulation is the alignment and comparability of coursework between two levels of education, such as high school and community college. It is established through discipline specific faculty-to-faculty collaboration. For example, SRJC Automotive Technology instructors meet with their high school counterparts to confirm that concepts and skills being taught in the high school Automotive Technology courses are comparable to those of the college. Once the determination is made that coursework is sufficiently similar, formal articulation agreements are established.
Students successfully completing the articulated high school courses may be eligible for advanced placement in the SRJC program, and, in most cases, opportunities to earn college credit.
Students earn a head start on college and their careers, saving time and money by skipping redundant coursework in which they've already demonstrated mastery.
CTE faculty collaborate, share resources, conduct joint industry advisories, and update and align curriculum, which provide students with relevant career skills and a smooth transition to postsecondary and career success.
High School Career Pathway and articulation activities are funded by the Tech Prep grant under the federal Carl Perkins Career and Technical Education Act, administered through SRJC.


What does Huddersfield Town's Michael Hefele eat for breakfast? These school kids found out!
it was a dream come true for dozens of children at Hightown Junior and Infant School, Liversedge,when Huddersfield Town's star signing Michael Hefele turned up this morning.
The school is the latest one to benefit from The Huddersfield Town Foundation's Early Morning Kick Off campaign, a charity which was set up to ensure students across the town get a healthy meal at the start of the day.
Huddersfield Towns new German signing Michael Hefele, joins Hightown J&I schools breakfast club. Town fans Ben Dacre and Lewis Summerscales join Michael for a round of toast.
Free breakfast clubs have been formed across Huddersfield and Kirklees, serving free breakfasts to youngsters before the school day begins.
Huddersfield Town stars have been known to drop in to share a healthy meal with school kids as part of the campaign.
Michael Hefele, a 25-year-old German centre-back, pledged 100% commitment to Huddersfield Town and his new life in England and he certainly showed he meant it by making the kids day.
He has just arrived, fresh from skippering Dynamo Dresden to that country's third-tier title.
Hefele has signed a three-year contract and intends to live in Huddersfield.


text:
Threepenny Theatricals
Creative Cast
Threepenny Thoughts Blog
threepenny thoughts
the 3-t blog is officially open!
My first ever blog! Bear with me folks! I was going to publish yesterday then realised it was Friday 13th! Although I'm not particularly superstitious it seemed silly to tempt fate.
So, a blog! I just thought it would be a good idea to try to give regular updates on our 3-T progress. We're a new company and setting up was a daunting process. As we work towards our first show we're just learning as we go along. Although we've all been involved in shows on stage and have helped out on company committees and with marketing, when you suddenly find that you're wearing all the hats at once it does take a bit of juggling and it's a new experience finding out that the buck always stops here!
Not that it's all bad of course by any means. Having the final say on pretty much everything from direction, to posters to set design and costumes is actually a great feeling.
I have to say that as a first time company founder and artistic director I was astounded at the level of support from friends I have made over the years who work in theatre, particularly backstage, and I received messages when we launched offering help on all fronts. I can't thank those people enough and hope that we can continue working together for many years to come.
I am very lucky to have a fantastic invited cast for my first play. I wanted to launch the company completely organised with a first production on the cards. Setting up my own company was something I'd talked about for years, become enthusiastic about on and off but never really had the courage to take that final step and just do it. Obviously finances were also an issue. Producing any kind of show is not a cheap business. This time I'd made up my mind to go ahead but I didn't want to announce it before it was certain, given I'd talked about it so many times before. The only way to make it certain was to pick the show, book the venue and find a cast before I launched the company and then there was no way I could change my mind. I was delighted that there were people out there who liked me and trusted me enough to want to work with me and I have ended up with an amazing bunch of people who are all working their socks off.
I know some people might think 'Elephants' is a strange choice for a first production but I wanted to choose something people could come to see without any preconceived ideas about how it should be done. I read lots of scripts before choosing but when I read this one I fell in love with it immediately.
The progress so far is really exciting. The contrast between the first readthrough where nobody really knew their characters at all and our last rehearsal on Thursday was massive. Everybody has found the basis of their character and they are now adding those little quirks and idiosyncrasies that give them depth and make them human. It's been a fascinating process to watch and guide and I really can't wait to introduce them to the public.
Now we just have to sell it and get ourselves an audience!
Although I've worked quite a lot on marketing and publicity for other companies, I'm finding that the hardest thing to keep up with. I think it's mainly because there are just so many social media platforms out there now and keeping them all regularly updated is almost a full time job in itself. I know there are automated apps that are supposed to update them all at once but since the format of one can be very different from all the others, I find it much easier to get the right message across by doing each one individually. Getting interesting content for posts is another issue and something you have to continually think about, particularly in the early stages of rehearsal when there's really not too much exciting stuff happening. There is nothing worse than spending ages creating posts and then getting nothing but tumbleweed blowing across your social media profile pages. I'm looking forward to the month before the show when everything will really start to move fast and there should be a constant stream of exciting material.
Having a large cast is obviously an advantage because they will all interact with your pages and posts. Unfortunately with a cast of just 7 in our first production (one of them being me) we don't have that luxury.
I would like to think that we will get support from other amateur theatre companies. As we all do this theatre thing for the love of it and sometimes breaking even on a production is exceedingly difficult if not impossible, then we should all support each other as best we can. The more companies that are out there producing a huge variety of material then the more choices we have as performers, directors, choreographers etc. Hopefully Threepenny Theatricals will grow in the Edinburgh Theatre community and be able to provide lots of opportunities both on stage and off.
So that's a little bit of the background about me and the company. I'm hoping to post regularly with all sorts of news and views, experiences and observations. I hope you'll join me on my new theatre journey. I'm always happy to receive comments and advice so feel free to add any thoughts below. Please keep it clean and polite! :)
If a blog isn't for you then maybe you'd be interested in signing up for our newsletter. We'll just send you an occasional email updating you with all the news and we'll have special offers and competitions listed in there too. We promise not to clog up your inbox. Just head to the 'Newsletter' page and fill in your details.
News and views from the director and founder of 3-T
Company Set Up
Company Set-up


My daughter's favourite school lunch box option is sandwich. She says it's very convenient to eat in school.
So, yesterday I made sandwich for breakfast.
Since I had yogurt in plenty, I had made hung curd the previous day. The plan was to make a no cook cheesecake, instead used it as a spread to make sandwich. Idea was sudden and so added all ingredients that came to my mind at that time. I was careful not to add too many ingredients. I wanted to keep it simple.
I toasted the bread slices that I used for making sandwiches for my daughter's lunch box so that it would not become soggy.
But if it is served at home immediately after making it, then no need to toast it.
Using hung curd as a spread was indeed as a good idea, very ideal for summer. It was cool, creamy and very soothing to bite into the sandwiches. And it was delicious too.
Take a clean muslin cloth and spread it over a colander. Keep a tall vessel under the colander to collect the dripping water.
Add yogurt to the cloth, collect the ends of the cloth, twist it gently to tighten it and put a knot and let it be on the colander.
The water from the yogurt will drip and get collected in the vessel.
Keep it in the refrigerator overnight or 5-6 hours to get thick yogurt.
This is called as hung curd.
To the hung curd, add grated cheese, pepper, sugar, basil leaves and salt to taste. Mix well and keep it in the refrigerator till required.
Wash, peel and cut cucumber into slices.
Wash and cut capsicum and tomatoes into slices.
Take one bread slice( toasting the bread slices is an option). spread yogurt mixture generously on it.
Arrange cucumber, tomato and capsicum slices on top of the yogurt, drizzle some ketchup and close it with another bread slice.


text:
namespace ash {
namespace {

// Primary display stored in global object as it can be
// accessed after Shell is deleted. A separate display instance is created
// during the shutdown instead of always keeping two display instances
// (one here and another one in display_manager) in sync, which is error prone.
int64 primary_display_id = gfx::Display::kInvalidDisplayID;
gfx::Display* primary_display_for_shutdown = NULL;
// Keeps the number of displays during the shutdown after
// ash::Shell:: is deleted.
int num_displays_for_shutdown = -1;

// The maximum value for 'offset' in DisplayLayout in case of outliers.  Need
// to change this value in case to support even larger displays.
const int kMaxValidOffset = 10000;

// The number of pixels to overlap between the primary and secondary displays,
// in case that the offset value is too large.
const int kMinimumOverlapForInvalidOffset = 100;

// Specifies how long the display change should have been disabled
// after each display change operations.
// |kCycleDisplayThrottleTimeoutMs| is set to be longer to avoid
// changing the settings while the system is still configurating
// displays. It will be overriden by |kAfterDisplayChangeThrottleTimeoutMs|
// when the display change happens, so the actual timeout is much shorter.
const int64 kAfterDisplayChangeThrottleTimeoutMs = 500;
const int64 kCycleDisplayThrottleTimeoutMs = 4000;
const int64 kSwapDisplayThrottleTimeoutMs = 500;

// Persistent key names
const char kPositionKey[] = "position";
const char kOffsetKey[] = "offset";
const char kMirroredKey[] = "mirrored";
const char kPrimaryIdKey[] = "primary-id";

typedef std::map<DisplayLayout::Position, std::string> PositionToStringMap;

const PositionToStringMap* GetPositionToStringMap() {
  static const PositionToStringMap* map = CreateToStringMap(
      DisplayLayout::TOP, "top",
      DisplayLayout::BOTTOM, "bottom",
      DisplayLayout::RIGHT, "right",
      DisplayLayout::LEFT, "left");
  return map;
}

bool GetPositionFromString(const base::StringPiece& position,
                           DisplayLayout::Position* field) {
  if (ReverseFind(GetPositionToStringMap(), position, field))
    return true;
  LOG(ERROR) << "Invalid position value:" << position;
  return false;
}

std::string GetStringFromPosition(DisplayLayout::Position position) {
  const PositionToStringMap* map = GetPositionToStringMap();
  PositionToStringMap::const_iterator iter = map->find(position);
  return iter != map->end() ? iter->second : std::string("unknown");
}

bool GetDisplayIdFromString(const base::StringPiece& position, int64* field) {
  return base::StringToInt64(position, field);
}

internal::DisplayManager* GetDisplayManager() {
  return Shell::GetInstance()->display_manager();
}

void SetDisplayPropertiesOnHostWindow(aura::RootWindow* root,
                                      const gfx::Display& display) {
  internal::DisplayInfo info =
      GetDisplayManager()->GetDisplayInfo(display.id());
#if defined(OS_CHROMEOS) && defined(USE_X11)
  // Native window property (Atom in X11) that specifies the display's
  // rotation, scale factor and if it's internal display.  They are
  // read and used by touchpad/mouse driver directly on X (contact
  // adlr@ for more details on touchpad/mouse driver side). The value
  // of the rotation is one of 0 (normal), 1 (90 degrees clockwise), 2
  // (180 degree) or 3 (270 degrees clockwise).  The value of the
  // scale factor is in percent (100, 140, 200 etc).
  const char kRotationProp[] = "_CHROME_DISPLAY_ROTATION";
  const char kScaleFactorProp[] = "_CHROME_DISPLAY_SCALE_FACTOR";
  const char kInternalProp[] = "_CHROME_DISPLAY_INTERNAL";
  const char kCARDINAL[] = "CARDINAL";
  int xrandr_rotation = RR_Rotate_0;
  switch (info.rotation()) {
    case gfx::Display::ROTATE_0:
      xrandr_rotation = RR_Rotate_0;
      break;
    case gfx::Display::ROTATE_90:
      xrandr_rotation = RR_Rotate_90;
      break;
    case gfx::Display::ROTATE_180:
      xrandr_rotation = RR_Rotate_180;
      break;
    case gfx::Display::ROTATE_270:
      xrandr_rotation = RR_Rotate_270;
      break;
  }

  int internal = display.IsInternal() ? 1 : 0;
  gfx::AcceleratedWidget xwindow = root->GetAcceleratedWidget();
  ui::SetIntProperty(xwindow, kInternalProp, kCARDINAL, internal);
  ui::SetIntProperty(xwindow, kRotationProp, kCARDINAL, xrandr_rotation);
  ui::SetIntProperty(xwindow,
                     kScaleFactorProp,
                     kCARDINAL,
                     100 * display.device_scale_factor());
#endif
  scoped_ptr<aura::RootWindowTransformer> transformer(
      internal::CreateRootWindowTransformerForDisplay(root, display));
  root->SetRootWindowTransformer(transformer.Pass());
}

}  // namespace

namespace internal {

// A utility class to store/restore focused/active window
// when the display configuration has changed.
class FocusActivationStore {
 public:
  FocusActivationStore()
      : activation_client_(NULL),
        capture_client_(NULL),
        focus_client_(NULL),
        focused_(NULL),
        active_(NULL) {
  }

  void Store() {
    if (!activation_client_) {
      aura::RootWindow* root = Shell::GetPrimaryRootWindow();
      activation_client_ = aura::client::GetActivationClient(root);
      capture_client_ = aura::client::GetCaptureClient(root);
      focus_client_ = aura::client::GetFocusClient(root);
    }
    focused_ = focus_client_->GetFocusedWindow();
    if (focused_)
      tracker_.Add(focused_);
    active_ = activation_client_->GetActiveWindow();
    if (active_ && focused_ != active_)
      tracker_.Add(active_);

    // Deactivate the window to close menu / bubble windows.
    activation_client_->DeactivateWindow(active_);
    // Release capture if any.
    capture_client_->SetCapture(NULL);
    // Clear the focused window if any. This is necessary because a
    // window may be deleted when losing focus (fullscreen flash for
    // example).  If the focused window is still alive after move, it'll
    // be re-focused below.
    focus_client_->FocusWindow(NULL);
  }

  void Restore() {
    // Restore focused or active window if it's still alive.
    if (focused_ && tracker_.Contains(focused_)) {
      focus_client_->FocusWindow(focused_);
    } else if (active_ && tracker_.Contains(active_)) {
      activation_client_->ActivateWindow(active_);
    }
    if (focused_)
      tracker_.Remove(focused_);
    if (active_)
      tracker_.Remove(active_);
    focused_ = NULL;
    active_ = NULL;
  }

 private:
  aura::client::ActivationClient* activation_client_;
  aura::client::CaptureClient* capture_client_;
  aura::client::FocusClient* focus_client_;
  aura::WindowTracker tracker_;
  aura::Window* focused_;
  aura::Window* active_;

  DISALLOW_COPY_AND_ASSIGN(FocusActivationStore);
};

}  // namespace internal

////////////////////////////////////////////////////////////////////////////////
// DisplayLayout

// static
DisplayLayout DisplayLayout::FromInts(int position, int offsets) {
  return DisplayLayout(static_cast<Position>(position), offsets);
}

DisplayLayout::DisplayLayout()
    : position(RIGHT),
      offset(0),
      mirrored(false),
      primary_id(gfx::Display::kInvalidDisplayID) {
}

DisplayLayout::DisplayLayout(DisplayLayout::Position position, int offset)
    : position(position),
      offset(offset),
      mirrored(false),
      primary_id(gfx::Display::kInvalidDisplayID) {
  DCHECK_LE(TOP, position);
  DCHECK_GE(LEFT, position);

  // Set the default value to |position| in case position is invalid.  DCHECKs
  // above doesn't stop in Release builds.
  if (TOP > position || LEFT < position)
    this->position = RIGHT;

  DCHECK_GE(kMaxValidOffset, abs(offset));
}

DisplayLayout DisplayLayout::Invert() const {
  Position inverted_position = RIGHT;
  switch (position) {
    case TOP:
      inverted_position = BOTTOM;
      break;
    case BOTTOM:
      inverted_position = TOP;
      break;
    case RIGHT:
      inverted_position = LEFT;
      break;
    case LEFT:
      inverted_position = RIGHT;
      break;
  }
  DisplayLayout ret = DisplayLayout(inverted_position, -offset);
  ret.primary_id = primary_id;
  return ret;
}

// static
bool DisplayLayout::ConvertFromValue(const base::Value& value,
                                     DisplayLayout* layout) {
  base::JSONValueConverter<DisplayLayout> converter;
  return converter.Convert(value, layout);
}

// static
bool DisplayLayout::ConvertToValue(const DisplayLayout& layout,
                                   base::Value* value) {
  base::DictionaryValue* dict_value = NULL;
  if (!value->GetAsDictionary(&dict_value) || dict_value == NULL)
    return false;

  const std::string position_str = GetStringFromPosition(layout.position);
  dict_value->SetString(kPositionKey, position_str);
  dict_value->SetInteger(kOffsetKey, layout.offset);
  dict_value->SetBoolean(kMirroredKey, layout.mirrored);
  dict_value->SetString(kPrimaryIdKey, base::Int64ToString(layout.primary_id));
  return true;
}

std::string DisplayLayout::ToString() const {
  const std::string position_str = GetStringFromPosition(position);
  return base::StringPrintf(
      "%s, %d%s",
      position_str.c_str(), offset, mirrored ? ", mirrored" : "");
}

// static
void DisplayLayout::RegisterJSONConverter(
    base::JSONValueConverter<DisplayLayout>* converter) {
  converter->RegisterCustomField<Position>(
      kPositionKey, &DisplayLayout::position, &GetPositionFromString);
  converter->RegisterIntField(kOffsetKey, &DisplayLayout::offset);
  converter->RegisterBoolField(kMirroredKey, &DisplayLayout::mirrored);
  converter->RegisterCustomField<int64>(
      kPrimaryIdKey, &DisplayLayout::primary_id, &GetDisplayIdFromString);
}

////////////////////////////////////////////////////////////////////////////////
// DisplayChangeLimiter

DisplayController::DisplayChangeLimiter::DisplayChangeLimiter()
    : throttle_timeout_(base::Time::Now()) {
}

void DisplayController::DisplayChangeLimiter::SetThrottleTimeout(
    int64 throttle_ms) {
  throttle_timeout_ =
      base::Time::Now() + base::TimeDelta::FromMilliseconds(throttle_ms);
}

bool DisplayController::DisplayChangeLimiter::IsThrottled() const {
  return base::Time::Now() < throttle_timeout_;
}

////////////////////////////////////////////////////////////////////////////////
// DisplayController

DisplayController::DisplayController()
    : primary_root_window_for_replace_(NULL),
      in_bootstrap_(true),
      focus_activation_store_(new internal::FocusActivationStore()) {
  CommandLine* command_line = CommandLine::ForCurrentProcess();
#if defined(OS_CHROMEOS)
  if (!command_line->HasSwitch(switches::kAshDisableDisplayChangeLimiter) &&
      base::chromeos::IsRunningOnChromeOS())
    limiter_.reset(new DisplayChangeLimiter);
#endif
  if (command_line->HasSwitch(switches::kAshSecondaryDisplayLayout)) {
    std::string value = command_line->GetSwitchValueASCII(
        switches::kAshSecondaryDisplayLayout);
    char layout;
    int offset = 0;
    if (sscanf(value.c_str(), "%c,%d", &layout, &offset) == 2) {
      if (layout == 't')
        default_display_layout_.position = DisplayLayout::TOP;
      else if (layout == 'b')
        default_display_layout_.position = DisplayLayout::BOTTOM;
      else if (layout == 'r')
        default_display_layout_.position = DisplayLayout::RIGHT;
      else if (layout == 'l')
        default_display_layout_.position = DisplayLayout::LEFT;
      default_display_layout_.offset = offset;
    }
  }
  // Reset primary display to make sure that tests don't use
  // stale display info from previous tests.
  primary_display_id = gfx::Display::kInvalidDisplayID;
  delete primary_display_for_shutdown;
  primary_display_for_shutdown = NULL;
  num_displays_for_shutdown = -1;
}

DisplayController::~DisplayController() {
  DCHECK(primary_display_for_shutdown);
}

void DisplayController::Start() {
  Shell::GetScreen()->AddObserver(this);
  in_bootstrap_ = false;
}

void DisplayController::Shutdown() {
  DCHECK(!primary_display_for_shutdown);
  primary_display_for_shutdown = new gfx::Display(
      GetDisplayManager()->GetDisplayForId(primary_display_id));
  num_displays_for_shutdown = GetDisplayManager()->GetNumDisplays();

  Shell::GetScreen()->RemoveObserver(this);
  // Delete all root window controllers, which deletes root window
  // from the last so that the primary root window gets deleted last.
  for (std::map<int64, aura::RootWindow*>::const_reverse_iterator it =
           root_windows_.rbegin(); it != root_windows_.rend(); ++it) {
    internal::RootWindowController* controller =
        GetRootWindowController(it->second);
    DCHECK(controller);
    delete controller;
  }
}

// static
const gfx::Display& DisplayController::GetPrimaryDisplay() {
  DCHECK_NE(primary_display_id, gfx::Display::kInvalidDisplayID);
  if (primary_display_for_shutdown)
    return *primary_display_for_shutdown;
  return GetDisplayManager()->GetDisplayForId(primary_display_id);
}

// static
int DisplayController::GetNumDisplays() {
  if (num_displays_for_shutdown >= 0)
    return num_displays_for_shutdown;
  return GetDisplayManager()->GetNumDisplays();
}

// static
bool DisplayController::HasPrimaryDisplay() {
  return primary_display_id != gfx::Display::kInvalidDisplayID;
}

void DisplayController::InitPrimaryDisplay() {
  const gfx::Display* primary_candidate =
      GetDisplayManager()->GetPrimaryDisplayCandidate();
  primary_display_id = primary_candidate->id();
  AddRootWindowForDisplay(*primary_candidate);
  UpdateDisplayBoundsForLayout();
}

void DisplayController::InitSecondaryDisplays() {
  internal::DisplayManager* display_manager = GetDisplayManager();
  for (size_t i = 0; i < display_manager->GetNumDisplays(); ++i) {
    const gfx::Display* display = display_manager->GetDisplayAt(i);
    if (primary_display_id != display->id()) {
      aura::RootWindow* root = AddRootWindowForDisplay(*display);
      Shell::GetInstance()->InitRootWindowForSecondaryDisplay(root);
    }
  }
  if (display_manager->GetNumDisplays() > 1) {
    UpdateDisplayBoundsForLayout();
    DisplayIdPair pair = GetCurrentDisplayIdPair();
    DisplayLayout layout = GetCurrentDisplayLayout();
    SetPrimaryDisplayId(
        layout.primary_id == gfx::Display::kInvalidDisplayID ?
        pair.first : layout.primary_id);
  }
}

void DisplayController::AddObserver(Observer* observer) {
  observers_.AddObserver(observer);
}

void DisplayController::RemoveObserver(Observer* observer) {
  observers_.RemoveObserver(observer);
}

aura::RootWindow* DisplayController::GetPrimaryRootWindow() {
  DCHECK(!root_windows_.empty());
  return root_windows_[primary_display_id];
}

aura::RootWindow* DisplayController::GetRootWindowForDisplayId(int64 id) {
  return root_windows_[id];
}

void DisplayController::CloseChildWindows() {
  for (std::map<int64, aura::RootWindow*>::const_iterator it =
           root_windows_.begin(); it != root_windows_.end(); ++it) {
    aura::RootWindow* root_window = it->second;
    internal::RootWindowController* controller =
        GetRootWindowController(root_window);
    if (controller) {
      controller->CloseChildWindows();
    } else {
      while (!root_window->children().empty()) {
        aura::Window* child = root_window->children()[0];
        delete child;
      }
    }
  }
}

std::vector<aura::RootWindow*> DisplayController::GetAllRootWindows() {
  std::vector<aura::RootWindow*> windows;
  for (std::map<int64, aura::RootWindow*>::const_iterator it =
           root_windows_.begin(); it != root_windows_.end(); ++it) {
    DCHECK(it->second);
    if (GetRootWindowController(it->second))
      windows.push_back(it->second);
  }
  return windows;
}

gfx::Insets DisplayController::GetOverscanInsets(int64 display_id) const {
  return GetDisplayManager()->GetOverscanInsets(display_id);
}

void DisplayController::SetOverscanInsets(int64 display_id,
                                          const gfx::Insets& insets_in_dip) {
  GetDisplayManager()->SetOverscanInsets(display_id, insets_in_dip);
}

void DisplayController::ClearCustomOverscanInsets(int64 display_id) {
  GetDisplayManager()->ClearCustomOverscanInsets(display_id);
}

std::vector<internal::RootWindowController*>
DisplayController::GetAllRootWindowControllers() {
  std::vector<internal::RootWindowController*> controllers;
  for (std::map<int64, aura::RootWindow*>::const_iterator it =
           root_windows_.begin(); it != root_windows_.end(); ++it) {
    internal::RootWindowController* controller =
        GetRootWindowController(it->second);
    if (controller)
      controllers.push_back(controller);
  }
  return controllers;
}

void DisplayController::SetDefaultDisplayLayout(const DisplayLayout& layout) {
  CommandLine* command_line = CommandLine::ForCurrentProcess();
  if (!command_line->HasSwitch(switches::kAshSecondaryDisplayLayout))
    default_display_layout_ = layout;
}

void DisplayController::RegisterLayoutForDisplayIdPair(
    int64 id1,
    int64 id2,
    const DisplayLayout& layout) {
  RegisterLayoutForDisplayIdPairInternal(id1, id2, layout, true);
}

void DisplayController::RegisterLayoutForDisplayId(
    int64 id,
    const DisplayLayout& layout) {
  int64 first_id = gfx::Display::InternalDisplayId();
  if (first_id == gfx::Display::kInvalidDisplayID)
    first_id = GetDisplayManager()->first_display_id();
  // Caveat: This doesn't work if the machine booted with
  // no display.
  // Ignore if the layout was registered for the internal or
  // 1st display.
  if (first_id != id)
    RegisterLayoutForDisplayIdPairInternal(first_id, id, layout, false);
}

void DisplayController::SetLayoutForCurrentDisplays(
    const DisplayLayout& layout_relative_to_primary) {
  DCHECK_EQ(2U, GetDisplayManager()->GetNumDisplays());
  if (GetDisplayManager()->GetNumDisplays() < 2)
    return;
  const gfx::Display& primary = GetPrimaryDisplay();
  const DisplayIdPair pair = GetCurrentDisplayIdPair();
  // Invert if the primary was swapped.
  DisplayLayout to_set = pair.first == primary.id() ?
      layout_relative_to_primary : layout_relative_to_primary.Invert();

  const DisplayLayout& current_layout = paired_layouts_[pair];
  if (to_set.position != current_layout.position ||
      to_set.offset != current_layout.offset) {
    to_set.primary_id = primary.id();
    paired_layouts_[pair] = to_set;
    NotifyDisplayConfigurationChanging();
    UpdateDisplayBoundsForLayout();
    NotifyDisplayConfigurationChanged();
  }
}

DisplayLayout DisplayController::GetCurrentDisplayLayout() const {
  DCHECK_EQ(2U, GetDisplayManager()->num_connected_displays());
  // Invert if the primary was swapped.
  if (GetDisplayManager()->num_connected_displays() > 1) {
    DisplayIdPair pair = GetCurrentDisplayIdPair();
    DisplayLayout layout = GetRegisteredDisplayLayout(pair);
    const gfx::Display& primary = GetPrimaryDisplay();
    // Invert if the primary was swapped. If mirrored, first is always
    // primary.
    return pair.first == primary.id() ? layout : layout.Invert();
  }
  // On release build, just fallback to default instead of blowing up.
  return default_display_layout_;
}

DisplayIdPair DisplayController::GetCurrentDisplayIdPair() const {
  internal::DisplayManager* display_manager = GetDisplayManager();
  const gfx::Display& primary = GetPrimaryDisplay();
  if (display_manager->IsMirrored()) {
    return std::make_pair(primary.id(),
                          display_manager->mirrored_display().id());
  }

  const gfx::Display& secondary = ScreenAsh::GetSecondaryDisplay();
  if (primary.IsInternal() ||
      GetDisplayManager()->first_display_id() == primary.id()) {
    return std::make_pair(primary.id(), secondary.id());
  } else {
    // Display has been Swapped.
    return std::make_pair(secondary.id(), primary.id());
  }
}

DisplayLayout DisplayController::GetRegisteredDisplayLayout(
    const DisplayIdPair& pair) const {
  std::map<DisplayIdPair, DisplayLayout>::const_iterator iter =
      paired_layouts_.find(pair);
  return iter != paired_layouts_.end() ? iter->second : default_display_layout_;
}

void DisplayController::ToggleMirrorMode() {
  internal::DisplayManager* display_manager = GetDisplayManager();
  if (display_manager->num_connected_displays() <= 1)
    return;

  if (limiter_) {
    if  (limiter_->IsThrottled())
      return;
    limiter_->SetThrottleTimeout(kCycleDisplayThrottleTimeoutMs);
  }
#if defined(OS_CHROMEOS) && defined(USE_X11)
  Shell* shell = Shell::GetInstance();
  internal::OutputConfiguratorAnimation* animation =
      shell->output_configurator_animation();
  animation->StartFadeOutAnimation(base::Bind(
      base::IgnoreResult(&internal::DisplayManager::SetMirrorMode),
      base::Unretained(display_manager),
      !display_manager->IsMirrored()));
#endif
}

void DisplayController::SwapPrimaryDisplay() {
  if (limiter_) {
    if  (limiter_->IsThrottled())
      return;
    limiter_->SetThrottleTimeout(kSwapDisplayThrottleTimeoutMs);
  }

  if (Shell::GetScreen()->GetNumDisplays() > 1) {
#if defined(OS_CHROMEOS) && defined(USE_X11)
    internal::OutputConfiguratorAnimation* animation =
        Shell::GetInstance()->output_configurator_animation();
    if (animation) {
      animation->StartFadeOutAnimation(base::Bind(
          &DisplayController::OnFadeOutForSwapDisplayFinished,
          base::Unretained(this)));
    } else {
      SetPrimaryDisplay(ScreenAsh::GetSecondaryDisplay());
    }
#else
    SetPrimaryDisplay(ScreenAsh::GetSecondaryDisplay());
#endif
  }
}

void DisplayController::SetPrimaryDisplayId(int64 id) {
  DCHECK_NE(gfx::Display::kInvalidDisplayID, id);
  if (id == gfx::Display::kInvalidDisplayID || primary_display_id == id)
    return;

  const gfx::Display& display = GetDisplayManager()->GetDisplayForId(id);
  if (display.is_valid())
    SetPrimaryDisplay(display);
}

void DisplayController::SetPrimaryDisplay(
    const gfx::Display& new_primary_display) {
  internal::DisplayManager* display_manager = GetDisplayManager();
  DCHECK(new_primary_display.is_valid());
  DCHECK(display_manager->IsActiveDisplay(new_primary_display));

  if (!new_primary_display.is_valid() ||
      !display_manager->IsActiveDisplay(new_primary_display)) {
    LOG(ERROR) << "Invalid or non-existent display is requested:"
               << new_primary_display.ToString();
    return;
  }

  if (primary_display_id == new_primary_display.id() ||
      root_windows_.size() < 2) {
    return;
  }

  aura::RootWindow* non_primary_root = root_windows_[new_primary_display.id()];
  LOG_IF(ERROR, !non_primary_root)
      << "Unknown display is requested in SetPrimaryDisplay: id="
      << new_primary_display.id();
  if (!non_primary_root)
    return;

  gfx::Display old_primary_display = GetPrimaryDisplay();

  // Swap root windows between current and new primary display.
  aura::RootWindow* primary_root = root_windows_[primary_display_id];
  DCHECK(primary_root);
  DCHECK_NE(primary_root, non_primary_root);

  root_windows_[new_primary_display.id()] = primary_root;
  primary_root->SetProperty(internal::kDisplayIdKey, new_primary_display.id());

  root_windows_[old_primary_display.id()] = non_primary_root;
  non_primary_root->SetProperty(internal::kDisplayIdKey,
                                old_primary_display.id());

  primary_display_id = new_primary_display.id();
  paired_layouts_[GetCurrentDisplayIdPair()].primary_id = primary_display_id;

  display_manager->UpdateWorkAreaOfDisplayNearestWindow(
      primary_root, old_primary_display.GetWorkAreaInsets());
  display_manager->UpdateWorkAreaOfDisplayNearestWindow(
      non_primary_root, new_primary_display.GetWorkAreaInsets());

  // Update the dispay manager with new display info.
  std::vector<internal::DisplayInfo> display_info_list;
  display_info_list.push_back(display_manager->GetDisplayInfo(
      primary_display_id));
  display_info_list.push_back(display_manager->GetDisplayInfo(
      GetSecondaryDisplay()->id()));
  GetDisplayManager()->set_force_bounds_changed(true);
  GetDisplayManager()->UpdateDisplays(display_info_list);
  GetDisplayManager()->set_force_bounds_changed(false);
}

gfx::Display* DisplayController::GetSecondaryDisplay() {
  internal::DisplayManager* display_manager = GetDisplayManager();
  CHECK_EQ(2U, display_manager->GetNumDisplays());
  return display_manager->GetDisplayAt(0)->id() == primary_display_id ?
      display_manager->GetDisplayAt(1) : display_manager->GetDisplayAt(0);
}

void DisplayController::EnsurePointerInDisplays() {
  // Don't try to move the pointer during the boot/startup.
  if (!HasPrimaryDisplay())
    return;
  gfx::Point location_in_screen = Shell::GetScreen()->GetCursorScreenPoint();
  gfx::Point target_location;
  int64 closest_distance_squared = -1;
  internal::DisplayManager* display_manager = GetDisplayManager();

  aura::RootWindow* dst_root_window = NULL;
  for (size_t i = 0; i < display_manager->GetNumDisplays(); ++i) {
    const gfx::Display* display = display_manager->GetDisplayAt(i);
    aura::RootWindow* root_window = GetRootWindowForDisplayId(display->id());
    if (display->bounds().Contains(location_in_screen)) {
      dst_root_window = root_window;
      target_location = location_in_screen;
      break;
    }
    gfx::Point center = display->bounds().CenterPoint();
    // Use the distance squared from the center of the dislay. This is not
    // exactly "closest" display, but good enough to pick one
    // appropriate (and there are at most two displays).
    // We don't care about actual distance, only relative to other displays, so
    // using the LengthSquared() is cheaper than Length().

    int64 distance_squared = (center - location_in_screen).LengthSquared();
    if (closest_distance_squared < 0 ||
        closest_distance_squared > distance_squared) {
      dst_root_window = root_window;
      target_location = center;
      closest_distance_squared = distance_squared;
    }
  }
  DCHECK(dst_root_window);
  aura::client::ScreenPositionClient* client =
      aura::client::GetScreenPositionClient(dst_root_window);
  client->ConvertPointFromScreen(dst_root_window, &target_location);
  dst_root_window->MoveCursorTo(target_location);
}

gfx::Point DisplayController::GetNativeMouseCursorLocation() const {
  if (in_bootstrap())
    return gfx::Point();

  gfx::Point location = Shell::GetScreen()->GetCursorScreenPoint();
  const gfx::Display& display =
      Shell::GetScreen()->GetDisplayNearestPoint(location);
  const aura::RootWindow* root_window =
      root_windows_.find(display.id())->second;
  aura::client::ScreenPositionClient* client =
      aura::client::GetScreenPositionClient(root_window);
  client->ConvertPointFromScreen(root_window, &location);
  root_window->ConvertPointToNativeScreen(&location);
  return location;
}

void DisplayController::UpdateMouseCursor(const gfx::Point& point_in_native) {
  if (in_bootstrap())
    return;

  std::vector<aura::RootWindow*> root_windows = GetAllRootWindows();
  for (std::vector<aura::RootWindow*>::iterator iter = root_windows.begin();
       iter != root_windows.end();
       ++iter) {
    aura::RootWindow* root_window = *iter;
    gfx::Rect bounds_in_native(root_window->GetHostOrigin(),
                               root_window->GetHostSize());
    if (bounds_in_native.Contains(point_in_native)) {
      gfx::Point point(point_in_native);
      root_window->ConvertPointFromNativeScreen(&point);
      root_window->MoveCursorTo(point);
      break;
    }
  }
}

void DisplayController::OnDisplayBoundsChanged(const gfx::Display& display) {
  if (limiter_)
    limiter_->SetThrottleTimeout(kAfterDisplayChangeThrottleTimeoutMs);
  const internal::DisplayInfo& display_info =
      GetDisplayManager()->GetDisplayInfo(display.id());
  DCHECK(!display_info.bounds_in_pixel().IsEmpty());

  UpdateDisplayBoundsForLayout();
  aura::RootWindow* root = root_windows_[display.id()];
  SetDisplayPropertiesOnHostWindow(root, display);
  root->SetHostBounds(display_info.bounds_in_pixel());
}

void DisplayController::OnDisplayAdded(const gfx::Display& display) {
  if (limiter_)
    limiter_->SetThrottleTimeout(kAfterDisplayChangeThrottleTimeoutMs);

  if (primary_root_window_for_replace_) {
    DCHECK(root_windows_.empty());
    primary_display_id = display.id();
    root_windows_[display.id()] = primary_root_window_for_replace_;
    primary_root_window_for_replace_->SetProperty(
        internal::kDisplayIdKey, display.id());
    primary_root_window_for_replace_ = NULL;
    UpdateDisplayBoundsForLayout();
    const internal::DisplayInfo& display_info =
        GetDisplayManager()->GetDisplayInfo(display.id());
    root_windows_[display.id()]->SetHostBounds(
        display_info.bounds_in_pixel());
  } else {
    if (primary_display_id == gfx::Display::kInvalidDisplayID)
      primary_display_id = display.id();
    DCHECK(!root_windows_.empty());
    aura::RootWindow* root = AddRootWindowForDisplay(display);
    UpdateDisplayBoundsForLayout();
    Shell::GetInstance()->InitRootWindowForSecondaryDisplay(root);
  }
}

void DisplayController::OnDisplayRemoved(const gfx::Display& display) {
  if (limiter_)
    limiter_->SetThrottleTimeout(kAfterDisplayChangeThrottleTimeoutMs);

  aura::RootWindow* root_to_delete = root_windows_[display.id()];
  DCHECK(root_to_delete) << display.ToString();

  // Display for root window will be deleted when the Primary RootWindow
  // is deleted by the Shell.
  root_windows_.erase(display.id());

  // When the primary root window's display is removed, move the primary
  // root to the other display.
  if (primary_display_id == display.id()) {
    // Temporarily store the primary root window in
    // |primary_root_window_for_replace_| when replacing the display.
    if (root_windows_.size() == 0) {
      primary_display_id = gfx::Display::kInvalidDisplayID;
      primary_root_window_for_replace_ = root_to_delete;
      return;
    }
    DCHECK_EQ(1U, root_windows_.size());
    primary_display_id = GetSecondaryDisplay()->id();
    aura::RootWindow* primary_root = root_to_delete;

    // Delete the other root instead.
    root_to_delete = root_windows_[primary_display_id];
    root_to_delete->SetProperty(internal::kDisplayIdKey, display.id());

    // Setup primary root.
    root_windows_[primary_display_id] = primary_root;
    primary_root->SetProperty(internal::kDisplayIdKey, primary_display_id);

    OnDisplayBoundsChanged(
        GetDisplayManager()->GetDisplayForId(primary_display_id));
  }
  internal::RootWindowController* controller =
      GetRootWindowController(root_to_delete);
  DCHECK(controller);
  controller->MoveWindowsTo(GetPrimaryRootWindow());
  // Delete most of root window related objects, but don't delete
  // root window itself yet because the stack may be using it.
  controller->Shutdown();
  base::MessageLoop::current()->DeleteSoon(FROM_HERE, controller);
}

aura::RootWindow* DisplayController::AddRootWindowForDisplay(
    const gfx::Display& display) {
  static int root_window_count = 0;
  const internal::DisplayInfo& display_info =
      GetDisplayManager()->GetDisplayInfo(display.id());
  const gfx::Rect& bounds_in_pixel = display_info.bounds_in_pixel();
  aura::RootWindow::CreateParams params(bounds_in_pixel);
  params.host = Shell::GetInstance()->root_window_host_factory()->
      CreateRootWindowHost(bounds_in_pixel);
  aura::RootWindow* root_window = new aura::RootWindow(params);
  root_window->SetName(
      base::StringPrintf("RootWindow-%d", root_window_count++));
  root_window->compositor()->SetBackgroundColor(SK_ColorBLACK);
  // No need to remove RootWindowObserver because
  // the DisplayManager object outlives RootWindow objects.
  root_window->AddRootWindowObserver(GetDisplayManager());
  root_window->SetProperty(internal::kDisplayIdKey, display.id());
  root_window->Init();

  root_windows_[display.id()] = root_window;
  SetDisplayPropertiesOnHostWindow(root_window, display);

#if defined(OS_CHROMEOS)
  static bool force_constrain_pointer_to_root =
      CommandLine::ForCurrentProcess()->HasSwitch(
          switches::kAshConstrainPointerToRoot);
  if (base::chromeos::IsRunningOnChromeOS() || force_constrain_pointer_to_root)
    root_window->ConfineCursorToWindow();
#endif
  return root_window;
}

void DisplayController::UpdateDisplayBoundsForLayout() {
  if (Shell::GetScreen()->GetNumDisplays() < 2 ||
      GetDisplayManager()->num_connected_displays() < 2) {
    return;
  }

  DCHECK_EQ(2, Shell::GetScreen()->GetNumDisplays());
  const gfx::Rect& primary_bounds = GetPrimaryDisplay().bounds();

  gfx::Display* secondary_display = GetSecondaryDisplay();
  const gfx::Rect& secondary_bounds = secondary_display->bounds();
  gfx::Point new_secondary_origin = primary_bounds.origin();

  const DisplayLayout layout = GetCurrentDisplayLayout();
  DisplayLayout::Position position = layout.position;

  // Ignore the offset in case the secondary display doesn't share edges with
  // the primary display.
  int offset = layout.offset;
  if (position == DisplayLayout::TOP || position == DisplayLayout::BOTTOM) {
    offset = std::min(
        offset, primary_bounds.width() - kMinimumOverlapForInvalidOffset);
    offset = std::max(
        offset, -secondary_bounds.width() + kMinimumOverlapForInvalidOffset);
  } else {
    offset = std::min(
        offset, primary_bounds.height() - kMinimumOverlapForInvalidOffset);
    offset = std::max(
        offset, -secondary_bounds.height() + kMinimumOverlapForInvalidOffset);
  }
  switch (position) {
    case DisplayLayout::TOP:
      new_secondary_origin.Offset(offset, -secondary_bounds.height());
      break;
    case DisplayLayout::RIGHT:
      new_secondary_origin.Offset(primary_bounds.width(), offset);
      break;
    case DisplayLayout::BOTTOM:
      new_secondary_origin.Offset(offset, primary_bounds.height());
      break;
    case DisplayLayout::LEFT:
      new_secondary_origin.Offset(-secondary_bounds.width(), offset);
      break;
  }
  gfx::Insets insets = secondary_display->GetWorkAreaInsets();
  secondary_display->set_bounds(
      gfx::Rect(new_secondary_origin, secondary_bounds.size()));
  secondary_display->UpdateWorkAreaFromInsets(insets);
}

void DisplayController::NotifyDisplayConfigurationChanging() {
  if (in_bootstrap())
    return;
  FOR_EACH_OBSERVER(Observer, observers_, OnDisplayConfigurationChanging());
  focus_activation_store_->Store();
}

void DisplayController::NotifyDisplayConfigurationChanged() {
  if (in_bootstrap())
    return;
  focus_activation_store_->Restore();

  internal::DisplayManager* display_manager = GetDisplayManager();
  if (display_manager->num_connected_displays() > 1) {
    DisplayIdPair pair = GetCurrentDisplayIdPair();
    if (paired_layouts_.find(pair) == paired_layouts_.end())
      paired_layouts_[pair] = default_display_layout_;
    paired_layouts_[pair].mirrored = display_manager->IsMirrored();
    if (Shell::GetScreen()->GetNumDisplays() > 1 ) {
      int64 primary_id = paired_layouts_[pair].primary_id;
      SetPrimaryDisplayId(
          primary_id == gfx::Display::kInvalidDisplayID ?
          pair.first : primary_id);
      // Update the primary_id in case the above call is
      // ignored. Happens when a) default layout's primary id
      // doesn't exist, or b) the primary_id has already been
      // set to the same and didn't update it.
      paired_layouts_[pair].primary_id = GetPrimaryDisplay().id();
    }
  }
  FOR_EACH_OBSERVER(Observer, observers_, OnDisplayConfigurationChanged());
}

void DisplayController::RegisterLayoutForDisplayIdPairInternal(
    int64 id1,
    int64 id2,
    const DisplayLayout& layout,
    bool override) {
  DisplayIdPair pair = std::make_pair(id1, id2);
  if (override || paired_layouts_.find(pair) == paired_layouts_.end())
    paired_layouts_[pair] = layout;
}

void DisplayController::OnFadeOutForSwapDisplayFinished() {
#if defined(OS_CHROMEOS) && defined(USE_X11)
  SetPrimaryDisplay(ScreenAsh::GetSecondaryDisplay());
  Shell::GetInstance()->output_configurator_animation()->StartFadeInAnimation();
#endif
}

}  // namespace ash

redpajama_set_name: RedPajamaGithub


text:
Q: When indexing documents in Solr 7, I am recieving an response that I don't understand I am indexing a series of documents and am occasionally receiving the following error. I have searched around and am not able to understand what the following error means:
<?xml version="1.0" encoding="UTF-8"?>
<response>

<lst name="responseHeader">
  <int name="status">400</int>
  <int name="QTime">0</int>
</lst>
<lst name="error">
  <lst name="metadata">
    <str name="error-class">org.apache.solr.common.SolrException</str>
    <str name="root-error-class">com.ctc.wstx.exc.WstxEOFException</str>
  </lst>
  <str name="msg">Unexpected EOF in CDATA section
 at [row,col {unknown-source}]: [2,8191]</str>
  <int name="code">400</int>
</lst>
</response>


TripBuzz discovered 40 different types of activities for couples in the Frisco area, including Mini Golf (like Frisco Mini Golf & Go Karts), Art Gallery (like Indian Town Gallery & Gifts), Specialty Museums (like Frisco Native American Museum) and Beaches (like Frisco Beach), and much more.
We discovered a total of 44 date ideas in or near Frisco, North Carolina, including 36 fun or romantic activities in nearby cities within 25 miles like Ocracoke, Buxton, Avon and Salvo.
Located on Cape Hatteras, Frisco Beach is one of the most popular beaches on the Outer Banks of North Carolina. This beach is great for swimming, water skiing, paddleboarding, surfing, kaying and snorkling.
Equine Adventures offers a two-hour beach ride. The ride consists of a 45 minute ride through the North Carolina Coastal Reserve and Maritime Forest, 30 minutes, along the beach, and then 45 minutes back through the woods to the starting point.
Featuring local artists, Indian Town Gallery & Gifts displays pottery, paintings, jewelry, and more in its gallery. It also hosts events where guests can meet the artists behind the artwork and take special crafting classes.
Golf and karting go hand in hand at Frisco Mini Golf & Go-Karts. This family-friendly establishment accepts new golfers until 10 PM and has clean, well maintained facilities. This destination is also an attractive choice for childrens' birthday parties.
Specializing in guided trips on their multiple boats, Big Eye Fisheries caters to sport fishermen of all experience levels. The company offers full day trips by reservation along the Cape Hatteras shoreline area.
Oriented primarily toward families, Frisco Woods Campground is a large campsite with a variety of different kinds of camping areas. It offers trailer hook-ups and two fully equipped bath houses for visitors' comfort.
The holdings of the Frisco Native American Museum in Frisco, North Carolina form one of the country's largest collections of Native American objects. The museum's exhibits focus on many different tribes, including those indigenous to the Carolinas.
HAVE SUGGESTIONS FOR COOL AND INTERESTING THINGS TO DO IN THE Frisco AREA?


(NewsTarget) Curcumin's anti-inflammatory properties have been known in Chinese and Ayurvedic Medicines for thousands of years. It is the active ingredient of turmeric, which is a component of the curry preparations used daily in Indian and other South Asian cuisines. Since those cuisines have infiltrated the west, modern science has also been investigating the health benefits of turmeric and curcumin.
Dr. Russell Blaylock included curcumin extract supplements in his post vaccination first aid kit to minimize the possibility of inflammation and cytokine storm from a vaccination. Curcumin has proven even better for relieving arthritis pains and stiffness than expensive pharmaceuticals, without side effects. It has also been proven to protect the liver and gallbladder.


In general works consists of preparing gully for overburden, vegetation clearing, strip topsoil, and excavate and haul overburden from quarry face to waste area.
High level of safety is maintained at the quarry. All quarry guidelines are adhered to.
In general works consists of preparation and management of waste areas, environmental controls, and excavate and haul overburden from quarry face to waste area.
In general work consists of varying earthworks roles in both the extension and maintenance of the quarry.
In general works consists of preparing area for overburden, vegetation clearing, strip topsoil, and excavate and haul overburden from quarry face to waste area.
High level of safety is maintained at the quarry.
All quarry guidelines are adhered to.
Works all completed according to contract requirements.