text:
Scientology library: "Church of Scientology of California (CSC)"
auditing • church of scientology international (csi) • church of scientology of california (csc) • david miscavige • fair game • fort harrison hotel (also, flag land base) @ 210 south fort harrison avenue clearwater fl united states • fraud, lie, deceit, misrepresentation • gabriel "gabe" cazares • gerald "gerry" armstrong • heber c. jentzsch • internal revenue service (irs) • inurement • lawrence "larry" wollersheim • lawsuit • legal • mary sue (whipp) hubbard • michael j. flynn • office of special affairs (osa) (formerly, guardian's office) • operation snow white • real estate • religious technology center (rtc) • sea organization (sea org, so) • tax matter • united churches of florida • united kingdom (uk)
182 matching items found.
Page 1234567 of 7: ⇑ Latest ↑ Later Earlier ↓ Earliest ⇓
Church of Scientology of California v. Gerald Armstrong: Mutual release of all claims and settlement agreement
More: gerryarmstrong.org
Type: Legal
Tag(s): Affirmations (aka "Admissions") • Author Services, Inc. (ASI) (dba, Galaxy Press) (subsidiary of Church of Spiritual Technology) • Author's Family Trust B • Church of Scientology International (CSI) • Church of Scientology of California (CSC) • Gerald "Gerry" Armstrong • Heber C. Jentzsch • Jo-Ann A. Richardson • Mary Sue (Whipp) Hubbard • Michael "Mike" Sutter • Michael J. Flynn • Religious Technology Center (RTC) • Settlement
NAACP joins Scientology church in court battle — Jet (magazine)
Source: Jet (magazine)
Tag(s): Church of Scientology of California (CSC) • Jet (magazine) • Lawsuit • National Association for the Advancement of Colored People (NAACP)
Margery Wakefield vs. Church of Scientology of California, Inc.: Settlement agreement
Type: Document
Tag(s): Church of Scientology of California (CSC) • Lawsuit • Margery Wakefield • Nancy McLean • Settlement • [needtotag]
'Expert' turns bad trial into bad verdict — Journal-American
More: link
Author(s): Ron Arnold
Source: Journal-American
Why do I have to spend so much time defending religions I don't belong to? I didn't really want a scrapbook of columns sticking up for persecuted Jews, Evangelical Christians, Muslims, Taoists, Native American Shamanists, Moonies and Scientologists, among others. The question that troubles me most, though, is why do I have to defend them from our own government? The reason, of course, is that I don't want the First Amendment repealed. And a Los Angeles jury did just that July ...
Tag(s): Church of Scientology of California (CSC) • Cult Awareness Network (CAN) (earlier form, Citizen's Freedom Foundation) • Journal-American • Judge Ronald E. Swearinger • Lawrence "Larry" Wollersheim • Lawsuit • Margaret Thaler Singer • Ron Arnold • Ted Patrick • Thomas S. Szasz
Sect's purchase ousts tenants — Clearwater Sun (Florida)
Author(s): Lesley Collins
Source: Clearwater Sun (Florida)
CLEARWATER — The Church of Scientology paid $4.6 million Friday for a 200-unit Skycrest apartment complex to house its growing staff. The church now owns 11 pieces of property — five of which are used as dormitories. And while sect staff members are getting new lodgings, residents at Hacienda Gardens Apartments, 551 N. Saturn Ave., are being shown the door. They can stay at the complex until their current leases expire — but no longer. "We purchased it to provide additional ...
Tag(s): Church of Scientology Flag Service Organization (CSFSO) • Church of Scientology of California (CSC) • Clearwater Sun (Florida) • Cost • Fort Harrison Hotel (also, Flag Land Base) @ 210 South Fort Harrison Avenue Clearwater FL United States • Hacienda Gardens @ 551 North Saturn Avenue Clearwater FL United States • Lesley Collins • Ludwig Alpers • Real estate • Ronald J. Schultz • Tax matter
Ex-Scientologist wins $30 million in church suit — Los Angeles Herald Examiner (California)
Author(s): Liz Mullen
Source: Los Angeles Herald Examiner (California)
A Los Angeles Superior Court jury awarded $30 million to a former Scientologist, who claimed the church's religious practice of "auditing" caused him to suffer a nervous breakdown. Larry Wollersheim, 37, who was a member of the church for 11 years, was awarded $5 million in compensatory damages and $25 million in punitive damages by the 12-member jury. The trial started last February. "It's a tremendous verdict for human rights," said Leta Schlosser, Wollersheim's attorney. The Church of Scientology, she added, ...
Tag(s): Auditing • Church of Scientology of California (CSC) • Earle C. Cooley • Ken Hoden • Lawrence "Larry" Wollersheim • Lawsuit • Leta Schlosser • Liz Mullen • Los Angeles Herald Examiner (California) • Mental illness • Shirley Young
Man is awarded $30-million in lawsuit against Scientology — St. Petersburg Times (Florida)
More: news.google.com
Author(s): Catherine Gewertz
Tag(s): Catherine Gewertz • Church of Scientology of California (CSC) • Earle C. Cooley • Gabriel "Gabe" Cazares • Judge Ronald E. Swearinger • Julie Christofferson Titchbourne • Ken Hoden • Lawrence "Larry" Wollersheim • Lawsuit • Membership • Operation Snow White • St. Petersburg Times (Florida)
Inside Scientology — Finally [A history of controversy] — L.A. Weekly (California)
Author(s): Ron Curran, Jennifer Pratt
Source: L.A. Weekly (California)
A History of Controversy As anyone who follows the news knows, Scientology has been involved in a series of controversial cases, many of them involving vengeful church actions against its critics. (More on this below.) Although the church always paints itself as the victim, its critics suggest that Scientology hasn't been persecuted from the outside, but rather is the victim of warped and misplaced priorities inside the church. The critics — and there are more than the church is willing to ...
Tag(s): Anti-psychiatry • Apollo (formerly, "Royal Scot Man"; often misspelled "Royal Scotman", "Royal Scotsman") • Australia • Canada • Church of Scientology of California (CSC) • Conviction • Founding Church of Scientology, Washington D.C. • France • Fraud, lie, deceit, misrepresentation • Gary Hart • Hana Eltringham Whitfield • Hubbard Academy of Scientology • Hubbard Dianetics Research Foundation (HDRF) • Internal Revenue Service (IRS) • Inurement • Jennifer Pratt • Ken Hoden • L. Ron Hubbard's credentials • L.A. Weekly (California) • Lawsuit • Medical claims • Michael Dukakis • New Zealand • Peggy Stevenson • Ron Curran • Saint Hill Manor @ East Grinstead (UK) • Sequoia University of California • South Africa • Tax matter • United Kingdom (UK)
Scientology on trial — Willamette Week
Author(s): Bill Driver
Source: Willamette Week
Why a Portland jury awarded $39 million in damages against one of the world's most profitable cults. ONE SUNNY AFTERNOON last week, an elderly man, who looked as though he had probably spent the past few nights sleeping under the stars, stood in the southeast corner of Lownsdale Square in downtown Portland gazing in bewilderment at the scene before him. Several hundred people, many wearing T-shirts proclaiming something about a crusade for religious freedom, gathered around a large stage in the ...
Tag(s): Apollo (formerly, "Royal Scot Man"; often misspelled "Royal Scotman", "Royal Scotsman") • Assets • Bill Driver • Blackmail • Church of Scientology Mission of Davis • Church of Scientology of California (CSC) • Communications Course • Confidential preclear (PC) folder • Delphi Schools, Inc. • Disconnection • E-Meter • Earle C. Cooley • Edward "Eddie" Walters • Fair game • Fraud, lie, deceit, misrepresentation • Garry P. McMurry • Gerald "Gerry" Armstrong • Heber C. Jentzsch • Howard "Homer" D. Schomer • Income • Inurement • Judge Donald H. Londer • Judge Robert P. Jones • Julie Christofferson Titchbourne • L. Ron Hubbard's credentials • Laurel J. Sullivan (née Watson) • Lawsuit • Margaret Thaler Singer • Mark Segal • Martin L. Samuels • Medical claims • Mission Corporate Category Sort out (MCCS) • Office of Special Affairs (OSA) (formerly, Guardian's Office) • Pat Flanagan • Perjury • Protest, picket • Refunds • Rehabilitation Project Force (RPF) • Religious Research Foundation (RRF) • Ronald L. Wade • Royalties, license, trademark, management fees • Salary • Sea Organization (Sea Org, SO) • Security check ("sec check") • Sequoia University of California • SOR Services (UK) • Statistics (Stats) • Suppressive person (SP) • Timothy Bowles • Training Routines (TRs) • Willamette Week • William W. "Bill" Franks
Scientologists converge on Portland for protest: Thousands to assail award of $39 million to ex-member in suit — Los Angeles Times (California)
Author(s): Jan Klunder
Source: Los Angeles Times (California)
Several thousand members of the Church of Scientology are planning to converge on Portland, Ore., today and Monday to protest a jury's $39-million damage award to a former church member who claimed that she was defrauded out of $3,253 by the group. The Rev. Kathleen Gorgon, president of the Church of Scientology of California, said that several hundred members left Saturday from the church's Hollywood headquarters by car, bus, train and plane to join others from around the world in a ...
Tag(s): Church of Scientology of California (CSC) • Fraud, lie, deceit, misrepresentation • Garry P. McMurry • Heber C. Jentzsch • Internal Revenue Service (IRS) • Jan Klunder • Judge Donald H. Londer • Julie Christofferson Titchbourne • Kathleen "Kathy" Gorgon • L. Ron Hubbard's credentials • Lawsuit • Los Angeles Times (California) • Michael J. Flynn • Protest, picket • Religious cloaking • Tax matter
Scientology jury awards $39 million — The Oregonian (Portland)
Author(s): Fred Leeson
Source: The Oregonian (Portland)
A Multnomah County Circuit Court jury awarded $39 million in punitive damages Friday to a Portland woman after finding she was victimized by "wanton misconduct" by the Church of Scientology and its founder, L. Ron Hubbard. The verdict was returned in favor of Julie Christofferson Titchbourne, 27, after 2½ days of deliberation and a 10-week trial. One of her lawyers, Ronald L. Wade, said it was the biggest punitive damages verdict in Oregon history. John Carmichael, president of the Church of ...
Tag(s): Church of Scientology Mission of Davis • Church of Scientology of California (CSC) • Fraud, lie, deceit, misrepresentation • Fred Leeson • Hard sell • John Carmichael • Judge Donald H. Londer • Julie Christofferson Titchbourne • Lawsuit • Perjury • Protest, picket • Refunds • The Oregonian (Portland)
Titchbourne hopes $39 million award may help others — The Oregonian (Portland)
After winning a $39 million judgment against the Church of Scientology late Friday afternoon, Julie Christofferson Titchbourne said she hoped to establish a foundation to help other victims of thought-control organizations. Titchbourne, a soft-spoken civil engineer who hugged her mother, husband and lawyers after hearing the jury's decision, said she hoped her experience could be turned to an advantage for others whose lives need rebuilding. During a brief appearance before reporters outside the courtroom door, neither Titchbourne nor one of her ...
Tag(s): Church of Scientology Mission of Davis • Church of Scientology of California (CSC) • Earle C. Cooley • Fair game • Fred Leeson • Garry P. McMurry • Heber C. Jentzsch • Income • Inurement • Judge Donald H. Londer • Julie Christofferson Titchbourne • Lawsuit • The Oregonian (Portland)
Woman awarded $39 million in Scientology suit — The Oregonian (Portland)
A Multnomah County Circuit Court jury awarded $39 million in punitive damages Friday to a Portland woman after finding that she was victimized by "wanton misconduct" by the Church of Scientology and its founder, L. Ron Hubbard. The verdict was returned in favor of Julie Christofferson Titchbourne, 27, after 2½ days of deliberations and a 10-week trial. One of her lawyers, Ronald L. Wade, said it was the biggest punitive damages verdict in Oregon history. The jury also awarded fraud damages ...
Tag(s): Church of Scientology Mission of Davis • Church of Scientology of California (CSC) • Fraud, lie, deceit, misrepresentation • Fred Leeson • Garry P. McMurry • Hard sell • Judge Donald H. Londer • Julie Christofferson Titchbourne • Lawsuit • Perjury • Refunds • The Oregonian (Portland)
Woman awarded $39 million in Scientology trial — Clearwater Sun (Florida)
Author(s): Roch Thornton
PORTLAND, Ore.—A jury Friday awarded $39 million to a woman who says the Church of Scientology defrauded her with claims it would improve her eyesight and make her more intelligent. The Multnomah Circuit Court jury, after a 10-week trial and 2½ days of deliberations, found the church defrauded Julie Christofferson Titchbourne, a church member for nine months, in 1975 and 1976. "This is a ridiculous decision. The Constitution is in serious trouble in the state of Oregon and we will appeal," ...
Tag(s): Associated Press • Church of Scientology Mission of Davis • Church of Scientology of California (CSC) • Clearwater Sun (Florida) • Earle C. Cooley • Fraud, lie, deceit, misrepresentation • Garry P. McMurry • Heber C. Jentzsch • Judge Donald H. Londer • Julie Christofferson Titchbourne • Lawsuit • Medical claims • Roch Thornton
Ex-Scientologist testifies of 'insulation' effort — The Oregonian (Portland)
The Church of Scientology started making plans in 1980 to "insulate" church founder L. Ron Hubbard from legal attack and to protect his secret church-related income in advance of his disappearance from public view, a former Scientologist testified Friday. Laurel J. Sullivan, who used to work on Hubbard's personal staff, said she learned in February 1980 that Hubbard planned to go into hiding. She said she was assigned to a special mission "to insulate L. Ron Hubbard and his income lines ...
Tag(s): Church of Scientology of California (CSC) • David Miscavige • Fred Leeson • Income • Inurement • Julie Christofferson Titchbourne • Laurel J. Sullivan (née Watson) • Lawsuit • Mary Sue (Whipp) Hubbard • Mission Corporate Category Sort out (MCCS) • Religious Research Foundation (RRF) • The Oregonian (Portland)
Hubbard's absence leads to dismissal of Scientology suit — Los Angeles Times (California)
Author(s): William Overend
A Los Angeles federal judge dismissed Monday a $2-million libel suit by the Church of Scientology of California against a Boston lawyer because of the failure of Scientology founder L. Ron Hubbard to appear at a court-ordered deposition. Lawyers for the Church of Scientology had argued that they had no way of contacting Hubbard, who was last seen in public in 1980 while living in the Hemet area. Hubbard, 74, had been ordered to appear for a deposition in Los Angeles ...
Tag(s): Church of Scientology International (CSI) • Church of Scientology of California (CSC) • Heber C. Jentzsch • Lawsuit • Los Angeles Times (California) • Michael J. Flynn • William Overend
Hubbard's failure to appear leads to lawsuit's dismissal — Clearwater Sun (Florida)
Tag(s): Church of Scientology of California (CSC) • Clearwater Sun (Florida) • Ken Hoden • Lawsuit • Lesley Collins • Michael J. Flynn
Judge dismisses $2-million suit by Scientology — St. Petersburg Times (Florida)
Tag(s): Church of Scientology of California (CSC) • Jeffrey Tidus • John G. Peterson • Judge Manuel L. Real • Lawsuit • Michael J. Flynn • Raul L. Martinez • St. Petersburg Times (Florida) • William Overend
Scientology libel suit dismissed — The Oregonian (Portland)
LOS ANGELES — A U.S. District Court judge Monday dismissed a $2 million libel suit by the Church of Scientology, of California against a Boston lawyer because of the failure of Scientology founder L. Ron Hubbard to appear at a court-ordered deposition. Lawyers for the Church of Scientology had argued that they had no way of contacting Hubbard, who was last seen in public in 1980 while living near Hemet, 70 miles east of Los Angeles. Hubbard, 74, had been ordered ...
Tag(s): Author Services, Inc. (ASI) (dba, Galaxy Press) (subsidiary of Church of Spiritual Technology) • Church of Scientology of California (CSC) • John G. Peterson • Judge Manuel L. Real • Lawsuit • Michael J. Flynn • The Oregonian (Portland)
Ex-Scientology executive says church investigated plaintiff — The Oregonian (Portland)
Tag(s): Brainwashing • Church of Scientology Mission of Davis • Church of Scientology of California (CSC) • Cost • Earle C. Cooley • Fair game • Fraud, lie, deceit, misrepresentation • Fred Leeson • Julie Christofferson Titchbourne • Lawsuit • Office of Special Affairs (OSA) (formerly, Guardian's Office) • The Oregonian (Portland) • William W. "Bill" Franks
Former Scientology official tells of stress on money — The Oregonian (Portland)
Tag(s): Apollo (formerly, "Royal Scot Man"; often misspelled "Royal Scotman", "Royal Scotsman") • Assets • Church of Scientology Mission of Davis • Church of Scientology of California (CSC) • Deprogramming • Fred Leeson • Hard sell • Income • Inurement • Julie Christofferson Titchbourne • Lawsuit • Registrar (also, to "reg") • Religious cloaking • The Oregonian (Portland) • William W. "Bill" Franks
Scientology suit goes to trial for second time — The Oregonian (Portland)
A young woman who once won and then lost more than $2 million in damages against the Church of Scientology in Portland started a second legal attack Monday on grounds that Scientologists defrauded her during nine months in 1975 and 1976. Julie Christofferson Titchbourne, who began her involvement with the church when she was 17, is asking a Multnomah County Circuit Court jury to return $3,253 she paid for courses and books and to award punitive damages as high as $42 ...
Tag(s): Church of Scientology International (CSI) • Church of Scientology Mission of Davis • Church of Scientology of California (CSC) • Delphi Schools, Inc. • Deprogramming • Fraud, lie, deceit, misrepresentation • Fred Leeson • Garry P. McMurry • Julie Christofferson Titchbourne • Lawsuit • Medical claims • The Oregonian (Portland)
Julie Christofferson Titchbourne vs. Church of Scientology Mission of Davis; Church of Scientology of California; and L. Ron Hubbard: Eleventh amended and supplemental complaint for fraud
Tag(s): Blackmail • Church of Scientology Mission of Davis • Church of Scientology of California (CSC) • Cost • Dead agenting (Black PR, smear campaign) • Delphi Schools, Inc. • Diana Samuels • Fair game • Fraud, lie, deceit, misrepresentation • Income • Infiltration • Jim Brooks • Julie Christofferson Titchbourne • Keith Anderson • Kenneth J. Whitman • L. Ron Hubbard • L. Ron Hubbard's credentials • Laird D. Caruthers • Lawsuit • Martin L. Samuels • Medical claims • Office of Special Affairs (OSA) (formerly, Guardian's Office) • Oregon • Registrar (also, to "reg") • Steve Besio • Suppressive person (SP) • William Lee • William M. "Bill" Landers
Sect will ask court to quash warrant — Clearwater Sun (Florida)
Author(s): George-Wayne Shelor
The Church of Scientology of Toronto will petition the Supreme Court of Ontario Monday asking that a search warrant executed last year be quashed, although the Ontario Provincial Police have already used it to raid the sect's headquarters and seize 14 million documents. Investigators armed with the warrant raided the sect's Toronto headquarters in March 1983 and seized 904 boxes of papers and documents believed to substantiate suspected sect fraud, conspiracy, breaking and entering and theft, according to the warrant ...
Tag(s): Canada • Church of Scientology of California (CSC) • Church of Scientology of Toronto • Clearwater Sun (Florida) • Confidential preclear (PC) folder • Fraud, lie, deceit, misrepresentation • George-Wayne Shelor • Legal • Ontario • Ontario Provincial Police (OPP) • Tax matter • Theft • Wiretap
Reader disagrees with Scientology coverage — Clearwater Sun (Florida)
Editor: There was an editorial in the Saturday, Nov. 17 edition of the Sun entitled, "The right to be heard," which stated among other things that the Sun doesn't acknowledge the First Amendment rights of Scientology to be recognized as a religion even though several government bodies including the IRS have so ruled. The editorial then proceeded to assert that the Sun takes the Constitution very seriously. This presents a discrepancy which I don't think can be easily disregarded. Scientology is ...
Tag(s): Australia • Church of Scientology of California (CSC) • Clearwater Sun (Florida) • George-Wayne Shelor • Germany • Internal Revenue Service (IRS) • Justice Latey, Sir John • Letter • Michael O'Brien • Tax matter
Horror story told in sect suit — Clearwater Sun (Florida)
CLEARWATER—Possibly the highest-ranking, most influential Scientologist to defect from the Clearwater-based, international sect has sued Church of Scientology founder L. Ron Hubbard for more than $225 million. Citing physical abuse, the intentional infliction of emotional distress, false imprisonment and the violation of his civil rights, Howard D. "Homer" Schomer, the 49-year-old former treasury secretary of the sect's Author Services Inc. branch, is demanding a jury trial and damages of $226,528,200. Schomer's claims, if proved true, offer a dark view of the ...
Tag(s): Apollo (formerly, "Royal Scot Man"; often misspelled "Royal Scotman", "Royal Scotsman") • Assets • Author Services, Inc. (ASI) (dba, Galaxy Press) (subsidiary of Church of Spiritual Technology) • Church of Scientology of California (CSC) • Clearwater Sun (Florida) • Commodore's Messenger Organization (CMO) • David Miscavige • David Miscavige: physical violence • False imprisonment • Fraud, lie, deceit, misrepresentation • George-Wayne Shelor • Heber C. Jentzsch • Howard "Homer" D. Schomer • Income • Inurement • L. Ron Hubbard's credentials • Lawsuit • Michael J. Flynn • Money laundering • Patrick D. "Pat" Broeker (aka Mike Mitchell) • Royalties, license, trademark, management fees • Salary • Sea Organization (Sea Org, SO) • Security check ("sec check") • Threat of physical harm
Sect branches file $20 million-plus lawsuit — Clearwater Sun (Florida)
LOS ANGELES (AP) — A $20 million-plus lawsuit has been filed by two branches of the Church of Scientology accusing a Boston lawyer, his brother, his law partner and a former Scientologist of violating the civil rights of church members. The federal lawsuit claims attorneys Michael Flynn and Thomas Hoffman, Washington, D.C. restaurateur Kevin Flynn and former Scientologist Laurel Sullivan conspired to violate the church members civil rights by a campaign of lies that led to government investigations and adverse publicity. ...
Tag(s): California • Church of Scientology Flag Service Organization (CSFSO) • Church of Scientology International (CSI) • Church of Scientology of California (CSC) • Clearwater Sun (Florida) • Heber C. Jentzsch • Intercap Corp. • Laurel J. Sullivan (née Watson) • Lawsuit • Mary Sue (Whipp) Hubbard • Michael J. Flynn • Ronald "Nibs" Edward DeWolf (L. Ron Hubbard, Jr.)
Scientology church in California denied tax exemption as religious organization — Wall Street Journal
Author(s): James B. Stewart
Source: Wall Street Journal
Tag(s): Church of Scientology International (CSI) • Church of Scientology of California (CSC) • Heber C. Jentzsch • Internal Revenue Service (IRS) • James B. Stewart • Legal • Moonies • Tax matter • Wall Street Journal
U.S. Tax Court rules Scientology owes $1.4 million — Los Angeles Times (California)
Author(s): Russell Chandler
Tag(s): Church of Scientology International (CSI) • Church of Scientology of California (CSC) • Fraud, lie, deceit, misrepresentation • Heber C. Jentzsch • Internal Revenue Service (IRS) • Inurement • Lawsuit • Legal • Los Angeles Times (California) • Mary Sue (Whipp) Hubbard • Russell Chandler • Tax matter
Scientology heads to appeal tax ruling — Daily News
Tag(s): Church of Scientology of California (CSC) • Daily News • Heber C. Jentzsch • Internal Revenue Service (IRS) • Legal • Mary Sue (Whipp) Hubbard • Tax matter


text:
DisneyDining Disney Dining Plan and Reviews
Animal Kingdom Reviews
Disney Studios Reviews
Disney Springs Reviews
Epcot Reviews
Magic Kingdom Reviews
Resort Reviews
Dining Information
7 Things You'll Love About Discovery Island At Walt Disney World's Animal Kingdom
Posted by: Rebekah Tyndall Burkett
The youngest of the Disney World theme parks has been a hub for animal lovers, animal enthusiasts and conservationists for the last two decades. Using a mix of interactive attractions, exciting exhibits and fun animal encounters—all with a Disney twist—Animal Kingdom engages Guests in understanding the importance of conservation to our planet and gives Guests an intriguing view into the world of fish, mammals, birds and more. Don't mistake Animal Kingdom for Disney's version of a zoo. There's so much to see, do and experience in this park that it's hard to decide which area of the park to enjoy first. Next time you're at Animal Kingdom, start your exciting adventure at Discovery Island—here are 7 things you'll absolutely love about it!
7. Tree of Life
The Tree of Life stands as the familiar icon of Disney's Animal Kingdom. It took over 18 months to complete. And though there are over four million live trees, plants and flowers, the Tree of Life is not one of them. The 145-feet-tall tree was made from a refitted oil platform. Its design was inspired by the look of the baobab tree and has 8,000 branches that bare over 100,000 leaves made of kynar. And though the leaves are not living, they were created to look like the real thing. Five shades of green were used on the leaves and they blow in the wind, like actual foliage.
6. Tree of Life carvings
The most beautiful and intriguing part of the Tree of Life is the trunk and roots. There are 325 carvings of animals—living and extinct—all around the trunk and into the roots. The intricate carvings include those of an eagle, an owl, a ram, a tiger, an elephant and more. You can walk around the trunk and alongside the long roots of the Tree of Life and see the detail in the animal carvings. The carvings are probably some of the more overlooked but fascinating things in the entire park!
5. Animal-themed décor
All around Discovery Island, you will notice animal themes inside every shop and restaurant. Take a look inside the Island Mercantile and see migratory animals depicted on the walls in the décor. Notice the four corners of the Discovery Trading Co. shop—each is adorned with animals from the northern, southern, eastern and western parts of the world. When you stop for lunch at Pizzafari, you'll see brightly colored murals on the walls of each dining room that depict different animal themes—animals that carry their homes with them, nocturnal animals and animals that hang upside down! In addition to the murals, there are over 500 carved animals from Mexico hanging from the walls and ceilings inside this fun pizza and safari-inspired eatery. At the Flame Tree Barbecue quick-service counter, you'll notice a theme of predator and prey—eagles eating snakes, eels eating crabs and more. (I'm not sure the murals are too appetizing, but the barbecue is really good!)
For a no obligation, FREE Quote with new bookings contact our sponsor Magical Vacation Planner by calling: 1(407)442-0289 Or for a free no obligation quote with new bookings you can fill out the form by Clicking HERE!
4. It's Tough to Be a Bug!
This attraction is located at the base of the Tree of Life. It was inspired by Disney/PIXAR's A Bug's Life, and then again, the attraction somewhat inspired the film. That's because this 3D experience debuted at Animal Kingdom six months before the feature film hit theaters. At the time plans were being made for the attraction, not all the characters had been developed for the film yet, so Disney Imagineers called on entomologists to help develop the attraction, which consists of a live show and 3D imagery—both of which focus on the many survival techniques of different insects. The experience takes place in the Tree of Life Repertory Theatre, which seats over 400 Guests. You're invited to come inside and take a look at the world from a bug's perspective. After you experience the creative audio animatronics, 3D movie effects and immersive 4D surprises, you'll have a better understanding about how very tough it is to be a bug!
3. Anyone hungry for barbecue?
Some of the best barbecue at Walt Disney World is served up in a little eatery inside Discovery Island called Flame Tree Barbecue. In addition to wine and beers, this counter-service restaurant serves barbecued ribs and chicken, pulled pork sandwiches, baked mac'n'cheese with pulled pork and watermelon salad. If there's only one quick-service menu you sample at Animal Kingdom, let it be this one!
2. Hidden Mickeys
As with most places inside the Walt Disney World Resort, Discovery Island is home to several hidden Mickeys. We won't give away the exacts here, but keep your eyes open inside the Pizzafari quick-service restaurant and at the Adventurers' Outpost character greeting spot (look for the giant postcard)!
1. Adventurers' Outpost
Meet Mickey and Minnie in their safari best at the Adventurers' Outpost character greeting spot inside Discovery Island. PhotoPass Photographers are on hand to capture the moment as you meet Mickey and Minnie. You'll get to see mementos and souvenirs from all of their exciting travels all over the world. FastPass+ times are available for this character encounter. Don't miss it!
+Rebekah Tyndall Burkett
About Rebekah Tyndall Burkett
Rebekah grew up in Forney, Texas and lives just outside of Dallas. She's been a Disney superfan since childhood, experiencing the magic at Walt Disney World for the first time at the age of 11. Journeys to Neverland are at least a yearly occurrence for her, her husband and her four children (the Fab Four). When they go to the parks, they stay in Florida for three weeks at a time. Rebekah loves exploring the history of the parks, the genius behind the Magic in the person of Walt Disney, and she is intrigued by all things Disney World and Disney Imagineering. When in the parks, Rebekah and her husband Scott make the most of their time by enjoying every minute with their Fab Four, by delving deeper into Walt's vision for the parks and into the history behind the Walt Disney World Resort, and by photographing the many different types of architecture at Magic Kingdom, Disney's Hollywood Studios and on the World Showcase at EPCOT. When she's not in the parks, Rebekah is excitedly setting travel dates and planning her family's next adventure to their happy place deep within the Sunshine State. On breaks from planning her next trip, Rebekah is a writer, journalist and children's author, penning children's books about kids with special needs that she affectionately calls "believement-achievement" stories. Her hobbies include creative writing, paper crafting and interviewing Imagineers. She is also an advocate for Autism Awareness and for children with developmental disabilities of all kinds.
Disney Dining Daily Newsletter
Unofficial Fan Site
DisneyDining.com is not affiliated with The Walt Disney Company. Official information can be found at DisneyParks.com
Other Great Disney World Fan Sites
WDWinfo.com
MouseMisers.com
WDWLive.com
DisneyFanatic.com
DisneyLists.com

redpajama_set_name: RedPajamaCommonCrawl


Classic Faceplate Locking Wall Mount Mailboxes lead the way in curb side distinction and design.
US patented design can be flush mounted into a home's exterior or inset into a pillar or column for a stately look.
Wall mount mailbox is made from premium quality materials and uses 16 different die cast aluminum castings in the design.
Solid brass accents come in polished brass, satin nickel and antique bronze finishes.
The top incoming MAIL door has a hinged bottom and opens like an oven door; classic eagle motif accents the lockable bottom access door which opens sideways.
Lockable bottom access door of wall mount mailbox comes with 2 keys. Door can be kept unlocked; a magnetic catch keeps it closed.
Powder coated for durability, these classic faceplate wall mount mailboxes make a stunning statement in decorative colors, ranging from almond, black, white, and metallic bronze.
Locking Access Door 4" 10"
Aluminum Can 11.375" 13.125" 10"


There is no maximum age limit - SC / SCA / ST / BC / BCM / MBC / DNC candidates and Destitute Widow of all communities.
There is no maximum age limit - Ex-Service-man candidates from SC / SCA / ST / BC / BCM / MBC / DNC candidates.
UR candidates - Maximum age limit 30 years.
PwD UR candidates - Maximum age limit 40 years.
Ex-Serviceman UR candidates - Maximum age limit 48 years.
This age concession will not apply to the ex-servicemen applicants who have already been recruited to any class or service or category.
*** There is no negative marking system.


text:
Viking Triangle
Cultural Quarter
Apple Market
Let's Meet O'Connell St.
Shop Waterford
Deise Diaries
Art & Culture Events Useful Info
Official Launch of the Waterford Gallery of Art
The Waterford Gallery of Art is having its official launch tonight (December 2).
Laura Doyle
The Waterford Gallery of Art is located at 31-32 O'Connell Street and the launch is happening from 7 p.m. to 10 p.m. The gallery would be delighted if you can join them in celebrating the official opening.
The gallery is the proud new home of the Waterford Collection of Art which features over 500 works of art by some of Ireland's best-known artists including: Sarah Purser (RHA); Evie Hone (HRHA); John Butler Yates (RHA); Jack Butler Yates (RHA); Paul Henry (RHA); Louis Le Brocquy (RHA); Hilda Roberts (HRHA); Seán Keating (PRHA); and Mainie Jellett.
This opening coincides with launch of the gallery's current exhibition, Portraits: People & Place.
This newly designed in-house display includes over 50 paintings, drawings, films, photography and audio by artists: Una Sealy (RHA), James Hanley (RHA), Thomas Ryan (PPRHA), John Behan (RHA), Hilda Roberts (HRHA), Mildred Anne Butler (RA, RWS), Tony Ryan, Gottfried Helnwein and more.
As well as the art, the building itself is worth a visit. Formally a bank, it was designed by the Waterford born architect Thomas Jackson (1807 – 1890). After time working in both Bristol and Belfast, Jackson returned to Waterford to design the bank at 31 O'Connell Street. It was completed around 1845.
The building retains many of its original features and is a significant reminder of the prosperity present within the area in the mid-nineteenth century.
Waterford Walls Festival is Gearing Up for 2023
Beat the Blues Minus the Booze with Music, Performance and Film
Rock the Last Three Days of Winterval at the Main Stage
Christmas Scenes in Waterford We've All Seen!
Waterford.fyi is a new online website for Waterford City that aims to showcase the sights, sounds and hidden gems that make us proud to live in the Deise. Soak up the city's nightlife, culture, and history or take in the beautiful scenery, spectacular beaches & mountains. Drop into some of its great restaurants & pubs. There is always something on.
At Waterford.fyi, we want to let everyone know what makes Waterford so special and why it's so dear to those that live here. The city and county has so much to offer its natives and its visitors so let's show everyone why they should come.
Shop Waterford. Support Local.
© 2020 Waterford.FYI. A Growl Media Initiative. All Rights Reserved
Made with ❤ by Growl Media


Distracted driving is the #1 cause of car accidents in the world. Distraction is a factor in 80% of crashes.
Did you know that there was a reported 32,675 motor vehicle fatalities in 2014 and that about 3,179 or 9.7%! This tells us that nearly 10% of motor vehicle fatalities could have been prevented if people would have paid more attention to the road rather than their phone.
Another statistic shows that drunk drivers are 7 times more likely to cause an accident compared to distracted drivers who are 23 times more likely to cause an accident! I am not by any means condoning drunk driving but I am trying to show how severe distracted driving is and how just like drunk driving should NOT be done.
Also, there are three main types of distractions. They are visual, manual, and cognitive. Texting impairs all 3 of these areas which is why you should NEVER text and drive!
14 States have made it illegal to use your phone while driving while 38 state ban ALL cell phone use for novice drivers (which are the category of drivers who most reportedly use their phones while driving). If you are wondering what your state laws are when it comes to using your handheld device while driving, visit here.
"Drivers in their 20s are 23 percent of drivers in all fatal crashes, but are 27 percent of the distracted drivers and 38 percent of the distracted drivers who were using cell phones in fatal crashes. (NHTSA)" For more statistics like this one visit distraction.gov.
As you can clearly tell from reading this post, distracted driving is a HUGE issue that is not getting the amount of attention that it needs! My hopes of writing this article is that it will make you realize how dangerous looking at your phone, doing your makeup, or even eating while driving can be; and that you will stop and hopefully get your friends to do so also!


text:
Home > Unlabelled > The siege is over
The siege is over
"What made sense then is no longer appropriate. Instead of making use of the newfound peace to rebuild its image, Sri Lanka is busy digging trenches in anticipation of prolonged discord."
By Kath Noble
(October 21, Colombo, Sri Lanka Guardian) Five months after the Security Forces recaptured the last square mile of territory and wiped out the entire leadership of the LTTE, Sri Lanka is behaving as though it is still at war. This may be understandable, after so many decades of fighting such a dangerous terrorist organisation, but that doesn't make it clever.
Nowhere is this clash between perception and reality more obvious than in the sphere of foreign policy. The situation created by Prabhakaran when he forced thousands of civilians to accompany his cadres as they retreated from Kilinochchi and Mullaitivu saw many countries press the Government to declare a ceasefire and then arrange a surrender. They were ignored in what I believe was the national interest, although I wouldn't describe everything that was done in the process with equal sympathy. It was simply the best course of action at the time. Sri Lanka had to press on with the military operation and accept the consequences, including a serious deterioration in relations with the West.
Consider the reaction to Hillary Clinton's interjection in the UN Security Council debate on Resolution 1888. In stressing how widespread the use of rape in armed conflict was, she mentioned that it didn't only happen in places like the Democratic Republic of Congo and Sudan. Bosnia, Sri Lanka and Burma had been afflicted by the same problem, she said. It was a passing reference of little importance. The Government wasn't at risk of being denied aid or trade concessions. There was no talk of sanctions. The UN Security Council members weren't even proposing to issue a statement.
She might as well have announced that the United States had launched a nuclear missile at Cinnamon Gardens. Politicians rushed onto the airwaves to shout about it, and there were several poster campaigns and vocal demonstrations outside the embassy. The JHU started one of its ridiculous petitions. Add to that about half a dozen newspaper editorials and more than twenty letters and articles condemning her with what could most politely be described as extraordinary vigour, and that was just in English. Colombo looked poised to sail on the Statue of Liberty.
I'm not suggesting that there was nothing wrong with what Hillary Clinton said or that she ought not to have been challenged. Her statement gave the impression that the Security Forces had been sexually abusing women as part of their advance through Kilinochchi and Mullaitivu, which I don't think is the case.
It is a question of tactics. What was needed in response to the incident was a polite note to Ambassador Butenis requesting either a retraction or the forwarding of information on such crimes for the purpose of further investigation. That would have been proportionate and in keeping with the actual situation as regards Sri Lanka and the use of rape in armed conflict.
Screaming that members of the United States army have been responsible for sexual violence from Okinawa to Abu Ghraib and Colorado isn't going to help. Hillary Clinton knows about it, and she probably believes that the issue in Sri Lanka is different.
I am simply befuddled by the people who think that it is sensible to argue that Hillary Clinton mentioned Sri Lanka in this way because she received and then gave back a few thousand dollars from sources connected to the LTTE when she was running for the Democratic Party nomination for president. First, that could never be enough to buy the Secretary of State. More importantly, this accusation can only encourage her to press on with her criticism of Sri Lanka. It is rather like the other mad suggestion being thrown around that the remarks were part of a plot by the United States government to overthrow Mahinda Rajapaksa because Barack Obama is jealous of his victory over terrorism. It's completely stupid.
A frightening number of people brought up Monica Lewinsky. If they keep going on this line, Hillary Clinton will very soon be convinced that Sri Lanka is run by an offshoot of the Taliban.
The impression given is that this country does not respect women and cares little about rape. I sometimes wonder myself.
Mindsets have been so warped over all these years of war that a lot of people now seem to be completely incapable of dispassionate and rational analysis of criticism. They don't believe that any unfavourable remarks could possibly be true or at least offered with genuine intentions, even when that is the most likely possibility.
Some commentators went so far as to argue that the Security Forces hadn't ever been accused of sexual violence, never mind its officially sanctioned use as a weapon in the war against the LTTE. They are sadly misguided. The list of allegations is disturbingly long. That incidents didn't happen on the battlefield makes such blanket denials even more worrying now that the main task for the Security Forces is among civilians. It is not reassuring to argue that the general inability of the criminal justice system to punish the guilty is responsible for the lack of prosecutions.
One person even suggested that rape was not part of Sri Lankan culture. Wake up, sir.
This blinkered attitude is clearly a barrier to progress in ridding society of such crimes, but it also reinforces the negative image of the country that has found its way around the globe. Hillary Clinton is hardly the only person to think badly of Sri Lanka. Effecting a change in global public opinion requires intelligent presentation as well as supporting facts.
What was most ludicrous about the reaction to Hillary Clinton's brief speech was that most of the venomous insults were spat out after her office had despatched a letter admitting that it had no knowledge of rape being used by the Security Forces in the most recent phase of fighting. This is what really mattered, as the Government said itself. Nothing more was ever going to be forthcoming, and it didn't come.
It is about time that Sri Lanka stopped regarding interaction with other countries as an all-out battle. There is no need for it, and such an approach has consequences.
Now that the fighting on the ground is over, the tasks facing the Government in countering the threat posed by the LTTE have changed dramatically. The primary theatre of operations has moved overseas to where the funds and political leaders are to be found, which is mainly in the West. Cadres have been making their way abroad too. The situation is obviously much less urgent than when Prabhakaran was holed up in the No Fire Zone with thousands of civilians, but it still requires action. That will need the collaboration of the authorities in Washington and other national capitals, which is unlikely to be forthcoming if the old strategy of confrontation persists.
Sri Lanka has to take note of its new circumstances and adjust. This is true in many ways, as I have argued elsewhere.
(The writer can be reached at kathnoble99@gmail.com )
-Sri Lanka Guardian
nadesan said...
Here is a sensible article.
tno4 said...
hey mr.editor
so u think we should obey wot the america say wot ever it is...and u think we should worship them....typical colonialissm....dont think sri lanka wil do wot ever west says..
Alinosof said...
Thank you so much for your thoughtfulness. Your article is a breath of fresh air compare to what we have read else where since Secretary Clinton made her remarks. I wish other publications will follow your example of addressing the issue at hand without being sidetracked by heated rhetoric.


Blue Lips, Meat Packs, Baling Hay & Beyond: The Man Responsible For Sparking A Fitness Revolution In The Hunting Industry.
Living Large: The Skinny Guy's Guide to No-Nonsense Muscle Building With Vince Del Monte.
Why The Media & Supplement Companies Lie To You About Diets & Supplements (& What You Can Do About It).
I'm a voracious consumer of knowledge.
17 Ways I'm Detoxing My Body In 2017: A Special Solo Podcast Episode.
© 2019, Human Wellness Solutions Inc.


text:
Q: Is there a way to store auto value in c++ map? Hey I'm new with c++ and I'm trying to create a map wich can store multiples types :
map<sting, `auto`> test_map;
test_map["first elem"] = 1;
test_map["second elem"] = 'c';

Wich obviously gets me some errors.
I've been looking a bit online and I have found interesting things but not an answer. Maybe I miss a bit of c++ vocabulary.
I would also try with some kind of class wich stores about any types and I don't know if it can works.
map<string, `my_class`> test_map;
map["first_elem"] = my_class("string");
map["first_elem"] = my_class(12);

Thank you for helping !

A: The auto keyword doesn't mean you can assign multiple value types to the same storage, it's merely an automatic type deduction tool in c++ useful when you deal with complex type names or purely unwritable types (such as capturing lamdas) eg.:
void foo()
{
    bool b = true;
    auto l = [&]() -> bool { return !b; };
}

If you want to store values of different (or any) types in the same storage space try using either std::varian or std::any (both require c++17 or higher).
std::variant allows you to store one of the earlier specified types and doesn't do additional allocations (it's size is enough to hold any object of specified type). It's a type safe alternative to unions.
void foo()
{
    std::map<std::string, std::variant<int, float, char>> c; // this can only map int, float and char to std::string
}

std::any can store any type you want but will allocate when necessary.
void foo()
{
    std::map<std::string, std::any> c; // this can map any type of value to std::string
}

redpajama_set_name: RedPajamaStackExchange


This project was chosen for the 2014 University Park Home Tour. Many pictures were gathered by the home owners and submitted for this Craftsman Style (with some modifications)design. The front door was styled after an early 1800 design. The Master deck was also from an old image. The box beam ceiling adds a warm feeling, as do the distressed large pocket doors that separate the living area from the light airy library. The Stair wood paneling hide the basement access, a secret door! Transom windows grace each of the interior doors. The kitchen wall curves above the sink to meet the ceiling. The wall has artfully laid subway tile. The Breakfast noon, with it's built in benches provide additional storage. More pictures will follow, but the entry door should invite you back!
This Kitchen project was what moved us into the physical construction of the construction process. A one month project, where we removed a wall between the dining and kitchen, replaced all cabinets, repaired or replaced the flooring, completely rewired the house, replaced a sliding exterior door with French doors, and of course the paint!


text:
namespace {

base::FilePath g_temp_history_dir;

const int kMoreAccumulationsThanNeededToMaxDailyEngagement = 40;
const int kMoreDaysThanNeededToMaxTotalEngagement = 40;
const int kLessPeriodsThanNeededToDecayMaxScore = 2;
const int kMorePeriodsThanNeededToDecayMaxScore = 40;

// Waits until a change is observed in site engagement content settings.
class SiteEngagementChangeWaiter : public content_settings::Observer {
 public:
  explicit SiteEngagementChangeWaiter(Profile* profile) : profile_(profile) {
    HostContentSettingsMapFactory::GetForProfile(profile)->AddObserver(this);
  }
  ~SiteEngagementChangeWaiter() override {
    HostContentSettingsMapFactory::GetForProfile(profile_)->RemoveObserver(
        this);
  }

  // Overridden from content_settings::Observer:
  void OnContentSettingChanged(const ContentSettingsPattern& primary_pattern,
                               const ContentSettingsPattern& secondary_pattern,
                               ContentSettingsType content_type,
                               std::string resource_identifier) override {
    if (content_type == CONTENT_SETTINGS_TYPE_SITE_ENGAGEMENT)
      Proceed();
  }

  void Wait() { run_loop_.Run(); }

 private:
  void Proceed() { run_loop_.Quit(); }

  Profile* profile_;
  base::RunLoop run_loop_;

  DISALLOW_COPY_AND_ASSIGN(SiteEngagementChangeWaiter);
};

base::Time GetReferenceTime() {
  base::Time::Exploded exploded_reference_time;
  exploded_reference_time.year = 2015;
  exploded_reference_time.month = 1;
  exploded_reference_time.day_of_month = 30;
  exploded_reference_time.day_of_week = 5;
  exploded_reference_time.hour = 11;
  exploded_reference_time.minute = 0;
  exploded_reference_time.second = 0;
  exploded_reference_time.millisecond = 0;

  return base::Time::FromLocalExploded(exploded_reference_time);
}

std::unique_ptr<KeyedService> BuildTestHistoryService(
    content::BrowserContext* context) {
  std::unique_ptr<history::HistoryService> service(
      new history::HistoryService());
  service->Init(history::TestHistoryDatabaseParamsForPath(g_temp_history_dir));
  return std::move(service);
}

}  // namespace

class SiteEngagementServiceTest : public ChromeRenderViewHostTestHarness {
 public:
  void SetUp() override {
    ChromeRenderViewHostTestHarness::SetUp();
    ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
    g_temp_history_dir = temp_dir_.path();
    HistoryServiceFactory::GetInstance()->SetTestingFactory(
        profile(), &BuildTestHistoryService);
    SiteEngagementScore::SetParamValuesForTesting();
  }

  void NavigateWithTransitionAndExpectHigherScore(
      SiteEngagementService* service,
      const GURL& url,
      ui::PageTransition transition) {
    double prev_score = service->GetScore(url);
    controller().LoadURL(url, content::Referrer(), transition, std::string());
    int pending_id = controller().GetPendingEntry()->GetUniqueID();
    content::WebContentsTester::For(web_contents())
        ->TestDidNavigate(web_contents()->GetMainFrame(), 1, pending_id, true,
                          url, transition);
    EXPECT_LT(prev_score, service->GetScore(url));
  }

  void NavigateWithTransitionAndExpectEqualScore(
      SiteEngagementService* service,
      const GURL& url,
      ui::PageTransition transition) {
    double prev_score = service->GetScore(url);
    controller().LoadURL(url, content::Referrer(), transition, std::string());
    int pending_id = controller().GetPendingEntry()->GetUniqueID();
    content::WebContentsTester::For(web_contents())
        ->TestDidNavigate(web_contents()->GetMainFrame(), 1, pending_id, true,
                          url, transition);
    EXPECT_EQ(prev_score, service->GetScore(url));
  }

 private:
  base::ScopedTempDir temp_dir_;
};

TEST_F(SiteEngagementServiceTest, GetMedianEngagement) {
  SiteEngagementService* service = SiteEngagementService::Get(profile());
  ASSERT_TRUE(service);

  GURL url1("http://www.google.com/");
  GURL url2("https://www.google.com/");
  GURL url3("https://drive.google.com/");
  GURL url4("https://maps.google.com/");
  GURL url5("https://youtube.com/");
  GURL url6("https://images.google.com/");

  {
    // For zero total sites, the median is 0.
    std::map<GURL, double> score_map = service->GetScoreMap();
    EXPECT_TRUE(0 == score_map.size());
    EXPECT_DOUBLE_EQ(0, service->GetMedianEngagement(score_map));
  }

  {
    // For odd total sites, the median is the middle score.
    service->AddPoints(url1, 1);
    std::map<GURL, double> score_map = service->GetScoreMap();
    EXPECT_TRUE(1 == score_map.size());
    EXPECT_DOUBLE_EQ(1, service->GetMedianEngagement(score_map));
  }

  {
    // For even total sites, the median is the mean of the middle two scores.
    service->AddPoints(url2, 2);
    std::map<GURL, double> score_map = service->GetScoreMap();
    EXPECT_TRUE(2 == score_map.size());
    EXPECT_DOUBLE_EQ(1.5, service->GetMedianEngagement(score_map));
  }

  {
    service->AddPoints(url3, 1.4);
    std::map<GURL, double> score_map = service->GetScoreMap();
    EXPECT_TRUE(3 == score_map.size());
    EXPECT_DOUBLE_EQ(1.4, service->GetMedianEngagement(score_map));
  }

  {
    service->AddPoints(url4, 1.8);
    std::map<GURL, double> score_map = service->GetScoreMap();
    EXPECT_TRUE(4 == score_map.size());
    EXPECT_DOUBLE_EQ(1.6, service->GetMedianEngagement(score_map));
  }

  {
    service->AddPoints(url5, 2.5);
    std::map<GURL, double> score_map = service->GetScoreMap();
    EXPECT_TRUE(5 == score_map.size());
    EXPECT_DOUBLE_EQ(1.8, service->GetMedianEngagement(score_map));
  }

  {
    service->AddPoints(url6, 3);
    std::map<GURL, double> score_map = service->GetScoreMap();
    EXPECT_TRUE(6 == score_map.size());
    EXPECT_DOUBLE_EQ(1.9, service->GetMedianEngagement(score_map));
  }
}

// Tests that the Site Engagement service is hooked up properly to navigations
// by performing two navigations and checking the engagement score increases
// both times.
TEST_F(SiteEngagementServiceTest, ScoreIncrementsOnPageRequest) {
  SiteEngagementService* service = SiteEngagementService::Get(profile());
  ASSERT_TRUE(service);

  // Create the helper manually since it isn't present when a tab isn't created.
  SiteEngagementService::Helper::CreateForWebContents(web_contents());

  GURL url("http://www.google.com/");
  EXPECT_EQ(0, service->GetScore(url));
  NavigateWithTransitionAndExpectHigherScore(service, url,
                                             ui::PAGE_TRANSITION_TYPED);
  NavigateWithTransitionAndExpectHigherScore(service, url,
                                             ui::PAGE_TRANSITION_AUTO_BOOKMARK);
}

// Expect that site engagement scores for several sites are correctly
// aggregated during navigation events.
TEST_F(SiteEngagementServiceTest, GetTotalNavigationPoints) {
  SiteEngagementService* service = SiteEngagementService::Get(profile());
  ASSERT_TRUE(service);

  // The https and http versions of www.google.com should be separate.
  GURL url1("https://www.google.com/");
  GURL url2("http://www.google.com/");
  GURL url3("http://drive.google.com/");

  EXPECT_EQ(0, service->GetScore(url1));
  EXPECT_EQ(0, service->GetScore(url2));
  EXPECT_EQ(0, service->GetScore(url3));

  service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED);
  EXPECT_EQ(0.5, service->GetScore(url1));
  EXPECT_EQ(0.5, service->GetTotalEngagementPoints());

  service->HandleNavigation(url2, ui::PAGE_TRANSITION_GENERATED);
  service->HandleNavigation(url2, ui::PAGE_TRANSITION_KEYWORD_GENERATED);
  EXPECT_EQ(1, service->GetScore(url2));
  EXPECT_EQ(1.5, service->GetTotalEngagementPoints());

  service->HandleNavigation(url2, ui::PAGE_TRANSITION_AUTO_BOOKMARK);
  EXPECT_EQ(1.5, service->GetScore(url2));
  EXPECT_EQ(2, service->GetTotalEngagementPoints());

  service->HandleNavigation(url3, ui::PAGE_TRANSITION_TYPED);
  EXPECT_EQ(0.5, service->GetScore(url3));
  EXPECT_EQ(2.5, service->GetTotalEngagementPoints());

  service->HandleNavigation(url1, ui::PAGE_TRANSITION_GENERATED);
  service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED);
  EXPECT_EQ(1.5, service->GetScore(url1));
  EXPECT_EQ(3.5, service->GetTotalEngagementPoints());
}

TEST_F(SiteEngagementServiceTest, GetTotalUserInputPoints) {
  SiteEngagementService* service = SiteEngagementService::Get(profile());
  ASSERT_TRUE(service);

  // The https and http versions of www.google.com should be separate.
  GURL url1("https://www.google.com/");
  GURL url2("http://www.google.com/");
  GURL url3("http://drive.google.com/");

  EXPECT_EQ(0, service->GetScore(url1));
  EXPECT_EQ(0, service->GetScore(url2));
  EXPECT_EQ(0, service->GetScore(url3));

  service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_MOUSE);
  EXPECT_DOUBLE_EQ(0.05, service->GetScore(url1));
  EXPECT_DOUBLE_EQ(0.05, service->GetTotalEngagementPoints());

  service->HandleUserInput(url2, SiteEngagementMetrics::ENGAGEMENT_MOUSE);
  service->HandleUserInput(url2, SiteEngagementMetrics::ENGAGEMENT_KEYPRESS);
  EXPECT_DOUBLE_EQ(0.1, service->GetScore(url2));
  EXPECT_DOUBLE_EQ(0.15, service->GetTotalEngagementPoints());

  service->HandleUserInput(url3, SiteEngagementMetrics::ENGAGEMENT_KEYPRESS);
  EXPECT_DOUBLE_EQ(0.05, service->GetScore(url3));
  EXPECT_DOUBLE_EQ(0.2, service->GetTotalEngagementPoints());

  service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_KEYPRESS);
  service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_MOUSE);
  EXPECT_DOUBLE_EQ(0.15, service->GetScore(url1));
  EXPECT_DOUBLE_EQ(0.3, service->GetTotalEngagementPoints());

  service->HandleUserInput(url2, SiteEngagementMetrics::ENGAGEMENT_SCROLL);
  service->HandleUserInput(url3,
                           SiteEngagementMetrics::ENGAGEMENT_TOUCH_GESTURE);
  EXPECT_DOUBLE_EQ(0.15, service->GetScore(url2));
  EXPECT_DOUBLE_EQ(0.1, service->GetScore(url3));
  EXPECT_DOUBLE_EQ(0.4, service->GetTotalEngagementPoints());
}

TEST_F(SiteEngagementServiceTest, LastShortcutLaunch) {
  base::SimpleTestClock* clock = new base::SimpleTestClock();
  std::unique_ptr<SiteEngagementService> service(
      new SiteEngagementService(profile(), base::WrapUnique(clock)));

  base::HistogramTester histograms;

  base::Time current_day = GetReferenceTime();
  clock->SetNow(current_day - base::TimeDelta::FromDays(5));

  // The https and http versions of www.google.com should be separate. But
  // different paths on the same origin should be treated the same.
  GURL url1("https://www.google.com/");
  GURL url2("http://www.google.com/");
  GURL url3("http://www.google.com/maps");

  EXPECT_EQ(0, service->GetScore(url1));
  EXPECT_EQ(0, service->GetScore(url2));
  EXPECT_EQ(0, service->GetScore(url3));

  service->SetLastShortcutLaunchTime(url2);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kDaysSinceLastShortcutLaunchHistogram, 0);
  histograms.ExpectUniqueSample(
      SiteEngagementMetrics::kEngagementTypeHistogram,
      SiteEngagementMetrics::ENGAGEMENT_WEBAPP_SHORTCUT_LAUNCH, 1);

  service->AddPoints(url1, 2.0);
  service->AddPoints(url2, 2.0);
  clock->SetNow(current_day);
  service->SetLastShortcutLaunchTime(url2);

  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kDaysSinceLastShortcutLaunchHistogram, 1);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                              4);
  histograms.ExpectBucketCount(
      SiteEngagementMetrics::kEngagementTypeHistogram,
      SiteEngagementMetrics::ENGAGEMENT_WEBAPP_SHORTCUT_LAUNCH, 2);
  histograms.ExpectBucketCount(
      SiteEngagementMetrics::kEngagementTypeHistogram,
      SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 2);

  EXPECT_DOUBLE_EQ(2.0, service->GetScore(url1));
  EXPECT_DOUBLE_EQ(7.0, service->GetScore(url2));

  clock->SetNow(GetReferenceTime() + base::TimeDelta::FromDays(1));
  EXPECT_DOUBLE_EQ(2.0, service->GetScore(url1));
  EXPECT_DOUBLE_EQ(7.0, service->GetScore(url2));

  clock->SetNow(GetReferenceTime() + base::TimeDelta::FromDays(7));
  EXPECT_DOUBLE_EQ(0.0, service->GetScore(url1));
  EXPECT_DOUBLE_EQ(5.0, service->GetScore(url2));

  clock->SetNow(GetReferenceTime() + base::TimeDelta::FromDays(10));
  EXPECT_DOUBLE_EQ(0.0, service->GetScore(url1));
  EXPECT_DOUBLE_EQ(5.0, service->GetScore(url2));

  clock->SetNow(GetReferenceTime() + base::TimeDelta::FromDays(11));
  EXPECT_DOUBLE_EQ(0.0, service->GetScore(url1));
  EXPECT_DOUBLE_EQ(0.0, service->GetScore(url2));
}

TEST_F(SiteEngagementServiceTest, CheckHistograms) {
  base::HistogramTester histograms;

  base::SimpleTestClock* clock = new base::SimpleTestClock();
  std::unique_ptr<SiteEngagementService> service(
      new SiteEngagementService(profile(), base::WrapUnique(clock)));

  base::Time current_day = GetReferenceTime();
  clock->SetNow(current_day);

  // Histograms should start empty as the testing SiteEngagementService
  // constructor does not record metrics.
  histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram,
                              0);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalOriginsHistogram, 0);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram,
                              0);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kMedianEngagementHistogram,
                              0);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram,
                              0);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kEngagementScoreHistogramHTTP, 0);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kEngagementScoreHistogramHTTPS, 0);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                              0);

  // Record metrics for an empty engagement system.
  service->RecordMetrics();

  histograms.ExpectUniqueSample(
      SiteEngagementMetrics::kTotalEngagementHistogram, 0, 1);
  histograms.ExpectUniqueSample(SiteEngagementMetrics::kTotalOriginsHistogram,
                                0, 1);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram,
                              0);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kEngagementScoreHistogramHTTP, 0);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kEngagementScoreHistogramHTTPS, 0);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kEngagementPercentageForHTTPSHistogram, 0);
  histograms.ExpectUniqueSample(SiteEngagementMetrics::kMeanEngagementHistogram,
                                0, 1);
  histograms.ExpectUniqueSample(
      SiteEngagementMetrics::kMedianEngagementHistogram, 0, 1);
  histograms.ExpectUniqueSample(
      SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 1);
  histograms.ExpectUniqueSample(
      SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0, 1);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                              0);

  const std::vector<std::string> engagement_bucket_histogram_names =
      SiteEngagementMetrics::GetEngagementBucketHistogramNames();

  for (const std::string& histogram_name : engagement_bucket_histogram_names)
    histograms.ExpectTotalCount(histogram_name, 0);

  clock->SetNow(clock->Now() + base::TimeDelta::FromMinutes(60));

  // The https and http versions of www.google.com should be separate.
  GURL url1("https://www.google.com/");
  GURL url2("http://www.google.com/");
  GURL url3("http://drive.google.com/");

  service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED);
  service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_KEYPRESS);
  service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_MOUSE);
  service->HandleMediaPlaying(url2, true);

  histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram,
                              2);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalOriginsHistogram, 2);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 0,
                               1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 1,
                               1);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram,
                              2);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kMedianEngagementHistogram,
                              2);
  // Recorded per origin.
  histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram,
                              1);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kEngagementScoreHistogramHTTP, 0);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kEngagementScoreHistogramHTTPS, 1);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kEngagementPercentageForHTTPSHistogram, 1);
  histograms.ExpectUniqueSample(
      SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 2);
  histograms.ExpectUniqueSample(
      SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 2);
  histograms.ExpectUniqueSample(
      SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0, 2);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                              6);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_MOUSE, 1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_MEDIA_HIDDEN,
                               1);
  histograms.ExpectBucketCount(
      SiteEngagementMetrics::kEngagementTypeHistogram,
      SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 2);

  // Navigations are still logged within the 1 hour refresh period
  clock->SetNow(clock->Now() + base::TimeDelta::FromMinutes(59));

  service->HandleNavigation(url2, ui::PAGE_TRANSITION_GENERATED);
  service->HandleNavigation(url2, ui::PAGE_TRANSITION_AUTO_BOOKMARK);

  histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                              8);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 3);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_MOUSE, 1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_MEDIA_HIDDEN,
                               1);
  histograms.ExpectBucketCount(
      SiteEngagementMetrics::kEngagementTypeHistogram,
      SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 2);

  // Update the hourly histograms again.
  clock->SetNow(clock->Now() + base::TimeDelta::FromMinutes(1));

  service->HandleNavigation(url3, ui::PAGE_TRANSITION_TYPED);
  service->HandleUserInput(url2,
                           SiteEngagementMetrics::ENGAGEMENT_TOUCH_GESTURE);
  service->HandleMediaPlaying(url3, false);

  histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram,
                              3);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 0,
                               1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 1,
                               1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 3,
                               1);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram,
                              3);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kMedianEngagementHistogram,
                              3);
  // Recorded per origin.
  histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram,
                              4);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kEngagementScoreHistogramHTTP, 2);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kEngagementScoreHistogramHTTPS, 2);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kEngagementPercentageForHTTPSHistogram, 2);
  histograms.ExpectUniqueSample(
      SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 3);
  histograms.ExpectUniqueSample(
      SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 3);
  histograms.ExpectUniqueSample(
      SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0, 3);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                              12);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 4);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_MOUSE, 1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_TOUCH_GESTURE,
                               1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_MEDIA_VISIBLE,
                               1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_MEDIA_HIDDEN,
                               1);
  histograms.ExpectBucketCount(
      SiteEngagementMetrics::kEngagementTypeHistogram,
      SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 3);

  service->HandleNavigation(url1, ui::PAGE_TRANSITION_GENERATED);
  service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED);
  service->HandleUserInput(url2, SiteEngagementMetrics::ENGAGEMENT_SCROLL);
  service->HandleUserInput(url1, SiteEngagementMetrics::ENGAGEMENT_KEYPRESS);
  service->HandleUserInput(url3, SiteEngagementMetrics::ENGAGEMENT_MOUSE);

  histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                              17);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_NAVIGATION, 6);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_KEYPRESS, 2);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_MOUSE, 2);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_TOUCH_GESTURE,
                               1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_SCROLL, 1);
  histograms.ExpectBucketCount(
      SiteEngagementMetrics::kEngagementTypeHistogram,
      SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 3);

  // Advance an origin to the max for a day and advance the clock an hour before
  // the last increment before max. Expect the histogram to be updated.
  for (int i = 0; i < 6; ++i)
    service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED);

  clock->SetNow(clock->Now() + base::TimeDelta::FromMinutes(60));
  service->HandleNavigation(url1, ui::PAGE_TRANSITION_TYPED);

  histograms.ExpectTotalCount(SiteEngagementMetrics::kTotalEngagementHistogram,
                              4);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 0,
                               1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 1,
                               1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kTotalOriginsHistogram, 3,
                               2);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kMeanEngagementHistogram,
                              4);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kMedianEngagementHistogram,
                              4);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementScoreHistogram,
                              7);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kEngagementScoreHistogramHTTP, 4);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kEngagementScoreHistogramHTTPS, 3);
  histograms.ExpectTotalCount(
      SiteEngagementMetrics::kEngagementScoreHistogramHTTPS, 3);
  histograms.ExpectUniqueSample(
      SiteEngagementMetrics::kOriginsWithMaxEngagementHistogram, 0, 4);
  histograms.ExpectBucketCount(
      SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 0, 3);
  histograms.ExpectBucketCount(
      SiteEngagementMetrics::kOriginsWithMaxDailyEngagementHistogram, 1, 1);
  histograms.ExpectUniqueSample(
      SiteEngagementMetrics::kPercentOriginsWithMaxEngagementHistogram, 0, 4);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                              24);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kEngagementTypeHistogram,
                               SiteEngagementMetrics::ENGAGEMENT_NAVIGATION,
                               13);
  histograms.ExpectBucketCount(
      SiteEngagementMetrics::kEngagementTypeHistogram,
      SiteEngagementMetrics::ENGAGEMENT_FIRST_DAILY_ENGAGEMENT, 3);

  for (const std::string& histogram_name : engagement_bucket_histogram_names)
    histograms.ExpectTotalCount(histogram_name, 3);

  histograms.ExpectBucketCount(engagement_bucket_histogram_names[0], 100, 1);
  histograms.ExpectBucketCount(engagement_bucket_histogram_names[0], 33, 1);
  histograms.ExpectBucketCount(engagement_bucket_histogram_names[0], 66, 1);
  histograms.ExpectBucketCount(engagement_bucket_histogram_names[1], 33, 1);
  histograms.ExpectBucketCount(engagement_bucket_histogram_names[1], 66, 1);
}

// Expect that sites that have reached zero engagement are cleaned up.
TEST_F(SiteEngagementServiceTest, CleanupEngagementScores) {
  base::SimpleTestClock* clock = new base::SimpleTestClock();
  std::unique_ptr<SiteEngagementService> service(
      new SiteEngagementService(profile(), base::WrapUnique(clock)));

  base::Time current_day = GetReferenceTime();
  clock->SetNow(current_day);

  // The https and http versions of www.google.com should be separate.
  GURL url1("https://www.google.com/");
  GURL url2("http://www.google.com/");

  EXPECT_EQ(0, service->GetScore(url1));
  EXPECT_EQ(0, service->GetScore(url2));

  // Add the maximum number of points for one day.
  service->AddPoints(url1, 5.0);
  EXPECT_EQ(5.0, service->GetScore(url1));
  service->AddPoints(url2, 5.0);
  EXPECT_EQ(5.0, service->GetScore(url2));

  // Add more points by moving to another day.
  clock->SetNow(GetReferenceTime() + base::TimeDelta::FromDays(1));

  service->AddPoints(url1, 5.0);
  EXPECT_EQ(10.0, service->GetScore(url1));

  {
    // Decay one origin to zero by advancing time and expect the engagement
    // score to be cleaned up. The other score was changed a day later so it
    // will not have decayed at all.
    clock->SetNow(
        GetReferenceTime() +
        base::TimeDelta::FromDays(SiteEngagementScore::GetDecayPeriodInDays()));

    std::map<GURL, double> score_map = service->GetScoreMap();
    EXPECT_EQ(2u, score_map.size());
    EXPECT_EQ(10, score_map[url1]);
    EXPECT_EQ(0, score_map[url2]);

    service->CleanupEngagementScores();

    score_map = service->GetScoreMap();
    EXPECT_EQ(1u, score_map.size());
    EXPECT_EQ(10, score_map[url1]);
    EXPECT_EQ(0, service->GetScore(url2));
  }

  {
    // Decay the other origin to zero by advancing time and expect the
    // engagement score to be cleaned up.
    clock->SetNow(GetReferenceTime() +
                  base::TimeDelta::FromDays(
                      3 * SiteEngagementScore::GetDecayPeriodInDays()));

    std::map<GURL, double> score_map = service->GetScoreMap();
    EXPECT_EQ(1u, score_map.size());
    EXPECT_EQ(0, score_map[url1]);

    service->CleanupEngagementScores();

    score_map = service->GetScoreMap();
    EXPECT_EQ(0u, score_map.size());
    EXPECT_EQ(0, service->GetScore(url1));
  }
}

TEST_F(SiteEngagementServiceTest, NavigationAccumulation) {
  GURL url("https://www.google.com/");

  SiteEngagementService* service = SiteEngagementService::Get(profile());
  ASSERT_TRUE(service);

  // Create the helper manually since it isn't present when a tab isn't created.
  SiteEngagementService::Helper::CreateForWebContents(web_contents());

  // Only direct navigation should trigger engagement.
  NavigateWithTransitionAndExpectHigherScore(service, url,
                                             ui::PAGE_TRANSITION_TYPED);
  NavigateWithTransitionAndExpectHigherScore(service, url,
                                             ui::PAGE_TRANSITION_GENERATED);
  NavigateWithTransitionAndExpectHigherScore(service, url,
                                             ui::PAGE_TRANSITION_AUTO_BOOKMARK);
  NavigateWithTransitionAndExpectHigherScore(
      service, url, ui::PAGE_TRANSITION_KEYWORD_GENERATED);

  // Other transition types should not accumulate engagement.
  NavigateWithTransitionAndExpectEqualScore(service, url,
                                            ui::PAGE_TRANSITION_AUTO_TOPLEVEL);
  NavigateWithTransitionAndExpectEqualScore(service, url,
                                            ui::PAGE_TRANSITION_LINK);
  NavigateWithTransitionAndExpectEqualScore(service, url,
                                            ui::PAGE_TRANSITION_RELOAD);
  NavigateWithTransitionAndExpectEqualScore(service, url,
                                            ui::PAGE_TRANSITION_FORM_SUBMIT);
}

TEST_F(SiteEngagementServiceTest, IsBootstrapped) {
  base::SimpleTestClock* clock = new base::SimpleTestClock();
  std::unique_ptr<SiteEngagementService> service(
      new SiteEngagementService(profile(), base::WrapUnique(clock)));

  base::Time current_day = GetReferenceTime();
  clock->SetNow(current_day);

  GURL url1("https://www.google.com/");
  GURL url2("https://www.somewhereelse.com/");

  EXPECT_FALSE(service->IsBootstrapped());

  service->AddPoints(url1, 5.0);
  EXPECT_FALSE(service->IsBootstrapped());

  service->AddPoints(url2, 5.0);
  EXPECT_TRUE(service->IsBootstrapped());

  clock->SetNow(current_day + base::TimeDelta::FromDays(10));
  EXPECT_FALSE(service->IsBootstrapped());
}

TEST_F(SiteEngagementServiceTest, CleanupOriginsOnHistoryDeletion) {
  base::SimpleTestClock* clock = new base::SimpleTestClock();
  std::unique_ptr<SiteEngagementService> engagement(
      new SiteEngagementService(profile(), base::WrapUnique(clock)));
  ASSERT_TRUE(engagement.get());

  GURL origin1("http://www.google.com/");
  GURL origin1a("http://www.google.com/search?q=asdf");
  GURL origin1b("http://www.google.com/maps/search?q=asdf");
  GURL origin2("https://drive.google.com/");
  GURL origin2a("https://drive.google.com/somedoc");
  GURL origin3("http://notdeleted.com/");
  GURL origin4("http://decayed.com/");
  GURL origin4a("http://decayed.com/index.html");

  base::Time today = GetReferenceTime();
  base::Time yesterday = GetReferenceTime() - base::TimeDelta::FromDays(1);
  base::Time yesterday_afternoon = GetReferenceTime() -
                                   base::TimeDelta::FromDays(1) +
                                   base::TimeDelta::FromHours(4);
  base::Time yesterday_week = GetReferenceTime() - base::TimeDelta::FromDays(8);
  clock->SetNow(today);

  history::HistoryService* history = HistoryServiceFactory::GetForProfile(
      profile(), ServiceAccessType::IMPLICIT_ACCESS);

  history->AddPage(origin1, yesterday_afternoon, history::SOURCE_BROWSED);
  history->AddPage(origin1a, yesterday_week, history::SOURCE_BROWSED);
  history->AddPage(origin1b, today, history::SOURCE_BROWSED);
  engagement->AddPoints(origin1, 3.0);

  history->AddPage(origin2, yesterday_afternoon, history::SOURCE_BROWSED);
  history->AddPage(origin2a, yesterday_afternoon, history::SOURCE_BROWSED);
  engagement->AddPoints(origin2, 5.0);

  history->AddPage(origin3, today, history::SOURCE_BROWSED);
  engagement->AddPoints(origin3, 5.0);

  history->AddPage(origin4, yesterday_week, history::SOURCE_BROWSED);
  history->AddPage(origin4a, yesterday_afternoon, history::SOURCE_BROWSED);
  engagement->AddPoints(origin4, 5.0);

  EXPECT_EQ(3.0, engagement->GetScore(origin1));
  EXPECT_EQ(5.0, engagement->GetScore(origin2));
  EXPECT_EQ(5.0, engagement->GetScore(origin3));
  EXPECT_EQ(5.0, engagement->GetScore(origin4));

  {
    SiteEngagementChangeWaiter waiter(profile());

    base::CancelableTaskTracker task_tracker;
    // Expire origin1, origin2, origin2a, and origin4's most recent visit.
    history->ExpireHistoryBetween(std::set<GURL>(), yesterday, today,
                                  base::Bind(&base::DoNothing), &task_tracker);
    waiter.Wait();

    // origin2 is cleaned up because all its urls are deleted. origin1a and
    // origin1b are still in history, but 33% of urls have been deleted, thus
    // cutting origin1's score by 1/3. origin3 is untouched. origin4 has 1 URL
    // deleted and 1 remaining, but its most recent visit is more than 1 week in
    // the past. Ensure that its scored is halved, and not decayed further.
    EXPECT_EQ(2, engagement->GetScore(origin1));
    EXPECT_EQ(0, engagement->GetScore(origin2));
    EXPECT_EQ(5.0, engagement->GetScore(origin3));
    EXPECT_EQ(2.5, engagement->GetScore(origin4));
    EXPECT_EQ(9.5, engagement->GetTotalEngagementPoints());
  }

  {
    SiteEngagementChangeWaiter waiter(profile());

    // Expire origin1a.
    std::vector<history::ExpireHistoryArgs> expire_list;
    history::ExpireHistoryArgs args;
    args.urls.insert(origin1a);
    args.SetTimeRangeForOneDay(yesterday_week);
    expire_list.push_back(args);

    base::CancelableTaskTracker task_tracker;
    history->ExpireHistory(expire_list, base::Bind(&base::DoNothing),
                           &task_tracker);
    waiter.Wait();

    // origin1's score should be halved again. origin3 and origin4 remain
    // untouched.
    EXPECT_EQ(1, engagement->GetScore(origin1));
    EXPECT_EQ(0, engagement->GetScore(origin2));
    EXPECT_EQ(5.0, engagement->GetScore(origin3));
    EXPECT_EQ(2.5, engagement->GetScore(origin4));
    EXPECT_EQ(8.5, engagement->GetTotalEngagementPoints());
  }

  {
    SiteEngagementChangeWaiter waiter(profile());

    // Expire origin1b.
    std::vector<history::ExpireHistoryArgs> expire_list;
    history::ExpireHistoryArgs args;
    args.urls.insert(origin1b);
    args.SetTimeRangeForOneDay(today);
    expire_list.push_back(args);

    base::CancelableTaskTracker task_tracker;
    history->ExpireHistory(expire_list, base::Bind(&base::DoNothing),
                           &task_tracker);
    waiter.Wait();

    // origin1 should be removed. origin3 and origin4 remain untouched.
    EXPECT_EQ(0, engagement->GetScore(origin1));
    EXPECT_EQ(0, engagement->GetScore(origin2));
    EXPECT_EQ(5.0, engagement->GetScore(origin3));
    EXPECT_EQ(2.5, engagement->GetScore(origin4));
    EXPECT_EQ(7.5, engagement->GetTotalEngagementPoints());
  }
}

TEST_F(SiteEngagementServiceTest, EngagementLevel) {
  static_assert(SiteEngagementService::ENGAGEMENT_LEVEL_NONE !=
                    SiteEngagementService::ENGAGEMENT_LEVEL_LOW,
                "enum values should not be equal");
  static_assert(SiteEngagementService::ENGAGEMENT_LEVEL_LOW !=
                    SiteEngagementService::ENGAGEMENT_LEVEL_MEDIUM,
                "enum values should not be equal");
  static_assert(SiteEngagementService::ENGAGEMENT_LEVEL_MEDIUM !=
                    SiteEngagementService::ENGAGEMENT_LEVEL_HIGH,
                "enum values should not be equal");
  static_assert(SiteEngagementService::ENGAGEMENT_LEVEL_HIGH !=
                    SiteEngagementService::ENGAGEMENT_LEVEL_MAX,
                "enum values should not be equal");

  base::SimpleTestClock* clock = new base::SimpleTestClock();
  std::unique_ptr<SiteEngagementService> service(
      new SiteEngagementService(profile(), base::WrapUnique(clock)));

  base::Time current_day = GetReferenceTime();
  clock->SetNow(current_day);

  GURL url1("https://www.google.com/");
  GURL url2("http://www.google.com/");

  EXPECT_EQ(SiteEngagementService::ENGAGEMENT_LEVEL_NONE,
            service->GetEngagementLevel(url1));
  EXPECT_EQ(SiteEngagementService::ENGAGEMENT_LEVEL_NONE,
            service->GetEngagementLevel(url2));
  EXPECT_TRUE(service->IsEngagementAtLeast(
      url1, SiteEngagementService::ENGAGEMENT_LEVEL_NONE));
  EXPECT_FALSE(service->IsEngagementAtLeast(
      url1, SiteEngagementService::ENGAGEMENT_LEVEL_LOW));
  EXPECT_FALSE(service->IsEngagementAtLeast(
      url1, SiteEngagementService::ENGAGEMENT_LEVEL_MEDIUM));
  EXPECT_FALSE(service->IsEngagementAtLeast(
      url1, SiteEngagementService::ENGAGEMENT_LEVEL_HIGH));
  EXPECT_FALSE(service->IsEngagementAtLeast(
      url1, SiteEngagementService::ENGAGEMENT_LEVEL_MAX));

  // Bring url1 to LOW engagement.
  service->AddPoints(url1, 1.0);
  EXPECT_EQ(SiteEngagementService::ENGAGEMENT_LEVEL_LOW,
            service->GetEngagementLevel(url1));
  EXPECT_EQ(SiteEngagementService::ENGAGEMENT_LEVEL_NONE,
            service->GetEngagementLevel(url2));
  EXPECT_TRUE(service->IsEngagementAtLeast(
      url1, SiteEngagementService::ENGAGEMENT_LEVEL_NONE));
  EXPECT_TRUE(service->IsEngagementAtLeast(
      url1, SiteEngagementService::ENGAGEMENT_LEVEL_LOW));
  EXPECT_FALSE(service->IsEngagementAtLeast(
      url1, SiteEngagementService::ENGAGEMENT_LEVEL_MEDIUM));
  EXPECT_FALSE(service->IsEngagementAtLeast(
      url1, SiteEngagementService::ENGAGEMENT_LEVEL_HIGH));
  EXPECT_FALSE(service->IsEngagementAtLeast(
      url1, SiteEngagementService::ENGAGEMENT_LEVEL_MAX));

  // Bring url2 to MEDIUM engagement.
  service->AddPoints(url2, 5.0);
  EXPECT_EQ(SiteEngagementService::ENGAGEMENT_LEVEL_LOW,
            service->GetEngagementLevel(url1));
  EXPECT_EQ(SiteEngagementService::ENGAGEMENT_LEVEL_MEDIUM,
            service->GetEngagementLevel(url2));
  EXPECT_TRUE(service->IsEngagementAtLeast(
      url2, SiteEngagementService::ENGAGEMENT_LEVEL_NONE));
  EXPECT_TRUE(service->IsEngagementAtLeast(
      url2, SiteEngagementService::ENGAGEMENT_LEVEL_LOW));
  EXPECT_TRUE(service->IsEngagementAtLeast(
      url2, SiteEngagementService::ENGAGEMENT_LEVEL_MEDIUM));
  EXPECT_FALSE(service->IsEngagementAtLeast(
      url2, SiteEngagementService::ENGAGEMENT_LEVEL_HIGH));
  EXPECT_FALSE(service->IsEngagementAtLeast(
      url2, SiteEngagementService::ENGAGEMENT_LEVEL_MAX));

  // Bring url2 to HIGH engagement.
  for (int i = 0; i < 9; ++i) {
    current_day += base::TimeDelta::FromDays(1);
    clock->SetNow(current_day);
    service->AddPoints(url2, 5.0);
  }
  EXPECT_EQ(SiteEngagementService::ENGAGEMENT_LEVEL_HIGH,
            service->GetEngagementLevel(url2));

  EXPECT_TRUE(service->IsEngagementAtLeast(
      url2, SiteEngagementService::ENGAGEMENT_LEVEL_NONE));
  EXPECT_TRUE(service->IsEngagementAtLeast(
      url2, SiteEngagementService::ENGAGEMENT_LEVEL_LOW));
  EXPECT_TRUE(service->IsEngagementAtLeast(
      url2, SiteEngagementService::ENGAGEMENT_LEVEL_MEDIUM));
  EXPECT_TRUE(service->IsEngagementAtLeast(
      url2, SiteEngagementService::ENGAGEMENT_LEVEL_HIGH));
  EXPECT_FALSE(service->IsEngagementAtLeast(
      url2, SiteEngagementService::ENGAGEMENT_LEVEL_MAX));

  // Bring url2 to MAX engagement.
  for (int i = 0; i < 10; ++i) {
    current_day += base::TimeDelta::FromDays(1);
    clock->SetNow(current_day);
    service->AddPoints(url2, 5.0);
  }
  EXPECT_EQ(SiteEngagementService::ENGAGEMENT_LEVEL_MAX,
            service->GetEngagementLevel(url2));
  EXPECT_TRUE(service->IsEngagementAtLeast(
      url2, SiteEngagementService::ENGAGEMENT_LEVEL_NONE));
  EXPECT_TRUE(service->IsEngagementAtLeast(
      url2, SiteEngagementService::ENGAGEMENT_LEVEL_LOW));
  EXPECT_TRUE(service->IsEngagementAtLeast(
      url2, SiteEngagementService::ENGAGEMENT_LEVEL_MEDIUM));
  EXPECT_TRUE(service->IsEngagementAtLeast(
      url2, SiteEngagementService::ENGAGEMENT_LEVEL_HIGH));
  EXPECT_TRUE(service->IsEngagementAtLeast(
      url2, SiteEngagementService::ENGAGEMENT_LEVEL_MAX));
}

TEST_F(SiteEngagementServiceTest, ScoreDecayHistograms) {
  base::SimpleTestClock* clock = new base::SimpleTestClock();
  std::unique_ptr<SiteEngagementService> service(
      new SiteEngagementService(profile(), base::WrapUnique(clock)));

  base::Time current_day = GetReferenceTime();
  clock->SetNow(current_day);
  base::HistogramTester histograms;
  GURL origin1("http://www.google.com/");
  GURL origin2("http://drive.google.com/");

  histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram,
                              0);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram,
                              0);

  service->AddPoints(origin2, SiteEngagementScore::GetNavigationPoints());

  // Max the score for origin1.
  for (int i = 0; i < kMoreDaysThanNeededToMaxTotalEngagement; ++i) {
    current_day += base::TimeDelta::FromDays(1);
    clock->SetNow(current_day);

    for (int j = 0; j < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++j)
      service->AddPoints(origin1, SiteEngagementScore::GetNavigationPoints());
  }

  EXPECT_EQ(SiteEngagementScore::kMaxPoints, service->GetScore(origin1));
  histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram,
                              0);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram,
                              0);

  // Check histograms after one decay period.
  clock->SetNow(current_day + base::TimeDelta::FromDays(
                                  SiteEngagementScore::GetDecayPeriodInDays()));

  // Trigger decay and histogram hit.
  service->AddPoints(origin1, 0.01);
  histograms.ExpectUniqueSample(
      SiteEngagementMetrics::kScoreDecayedFromHistogram,
      SiteEngagementScore::kMaxPoints, 1);
  histograms.ExpectUniqueSample(
      SiteEngagementMetrics::kScoreDecayedToHistogram,
      SiteEngagementScore::kMaxPoints - SiteEngagementScore::GetDecayPoints(),
      1);

  // Check histograms after a few decay periods.
  clock->SetNow(current_day + base::TimeDelta::FromDays(
                                  kLessPeriodsThanNeededToDecayMaxScore *
                                  SiteEngagementScore::GetDecayPeriodInDays()));
  // Trigger decay and histogram hit.
  service->AddPoints(origin1, 0.01);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram,
                              2);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram,
                              2);

  // Check decay to zero.
  clock->SetNow(current_day + base::TimeDelta::FromDays(
                                  kMorePeriodsThanNeededToDecayMaxScore *
                                  SiteEngagementScore::GetDecayPeriodInDays()));
  // Trigger decay and histogram hit.
  service->AddPoints(origin1, 0.01);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram,
                              3);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram,
                              3);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kScoreDecayedToHistogram,
                               0, 1);
  // Trigger decay and histogram hit for origin2, checking an independent decay.
  service->AddPoints(origin2, 0.01);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram,
                              4);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram,
                              4);
  histograms.ExpectBucketCount(
      SiteEngagementMetrics::kScoreDecayedFromHistogram, 0, 1);
  histograms.ExpectBucketCount(SiteEngagementMetrics::kScoreDecayedToHistogram,
                               0, 2);

  // Add more points and ensure no more samples are present.
  service->AddPoints(origin1, 0.01);
  service->AddPoints(origin2, 0.01);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedFromHistogram,
                              4);
  histograms.ExpectTotalCount(SiteEngagementMetrics::kScoreDecayedToHistogram,
                              4);
}

redpajama_set_name: RedPajamaGithub


text:
Singer-Songwriter Aoife O'Donovan...
Singer-Songwriter Aoife O'Donovan Joins Punch Brothers' Fall Residency
Erich Burnett
Punch Brothers, the virtuosic bluegrass ensemble that has held court as artists in residence at Oberlin since fall 2013, will return to campus Monday through Wednesday, October 5-7, for a three-day residency that includes activities with conservatory students as well as numerous events that are open for all to attend.
Punch Brothers will be joined by their good friend and collaborator, singer-songwriter Aoife O'Donovan, a graduate of the New England Conservatory of Music, who has played a major role in shaping the 21st-century folk and bluegrass scene in America.
Among the festivities are the return of two popular events from past Punch residencies: a listening party with the band and O'Donovan (Monday at noon in Stull Recital Hall) and a 10 p.m. jam session (Tuesday in the Central Lounge).
Honored as Oberlin Affiliate Scholars in 2014, Punch Brothers are the first artists to take part in Oberlin's American Roots Residency, a program established by actor-comedian Ed Helms '96 to further the study and appreciation of American music. Punch Brothers will return to Oberlin in spring 2016.
The lineup of public events this fall is as follows:
Listening Party with Aoife and Punch Brothers
12-1:30 p.m. (Stull Recital Hall)
Professional Development Talk and Q&A
4-5:30 p.m. (Bibbins 224)
Songwriting and Performance Workshop with Chris Thile and Aoife O'Donovan
7-8:30 p.m. (Stull Recital Hall)
Chamber Ensemble Master Classes
2-3:30 p.m. (Stull Recital Hall & Bibbins 238)
Fiddle Workshop with Gabe Witcher
4:30-6 p.m. (Bibbins 213)
Mandolin Workshop with Chris Thile
4:30-6 p.m. (Clonick Hall)
Banjo Workshop with Noam Pikelny
Guitar Studio Class with Chris Eldridge
Ear Training for Singers with Aoife O'Donovan
10 p.m. (Con Lounge)
Bluegrass Workshop with Chris Eldridge and Noam Pikelny
For questions, please contact conevent@oberlin.edu or call 440-775-8200.
ABOUT PUNCH BROTHERS: Formed in 2006, Punch Brothers boast members who hail from all over the musical map. MacArthur Award-winner Chris Thile has elevated mandolin playing from its folk origins to the finest in jazz improvisation and classical performance. Fiddle player Gabe Witcher has more than 300 records and countless movie and television scores to his credit, including the 2006 Oscar winner Brokeback Mountain. Three-finger banjo player Noam Pikelny developed his bluegrass facility growing up in Chicago; he studied music at the University of Illinois in Champaign-Urbana before striking out professionally and redefining the role of the instrument. Versatile bass player Paul Kowert, a graduate of the Curtis Institute of Music in Philadelphia, has performed with orchestras as a soloist and section member, in such internationally renowned venues as Switzerland's Verbier Festival. Guitarist Chris Eldridge, a 2004 graduate of Oberlin College, devoted his student years to creating an independent major in bluegrass music, working closely with Professor of Jazz Guitar Bobby Ferrazza. The Phosphorescent Blues, the band's fourth album for Nonesuch, was released in January 2015.
ABOUT AOIFE O'DONOVAN: A driving force in the contemporary folk and bluegrass scene, singer-songwriter Aoife O'Donovan is the lead singer of the band, Crooked Still, and a member of the female folk trio Sometymes Why. A former student of contemporary improvisational music at the New England Conservatory of Music, O'Donovan has collaborated on tour and in studio with a wide range of musicians, including Punch Brothers, Sara Watkins of Nickel Creek, Edgar Meyer, Jim Lauderdale, Dave Douglas Quintet, and the Boston Pops Orchestra.
O'Donovan shared vocal duties with Punch Brothers' Chris Thile on a pair of tracks on Yo-Yo Ma's 2013 Grammy-winning recording The Goat Rodeo Sessions. Her first full-length album, Fossils, was released on Yep Roc Records in 2013.
Tag: Conservatory
Tag: Guest Artists & Speakers
Jason Goldberg '16 Leads Oberlin Co-Production of Dido and Aeneas
Based on an ancient Roman tragedy, April 15-17 production serves as the final project for Goldberg's major in opera directing.
Milt Hinton Institute Returns with Emphasis on Suzuki Instruction
Named in honor of the legendary jazz bassist, Oberlin's biennial summer program welcomes young bassists of all ability levels.
Baritone Michael Preacely '01 to Perform, Lead Talks at Oberlin
March-April visit includes a recital, career-development session, and insight how he broke his family's education barrier.
View all News Releases


resume and template ~ Licensed Massage Therapist Resume Sample For With No Experience In Children Quotes And Images Education Services Fantastic Resume For Massage Therapist With No Experience. Massage Therapist Yelp. Resume For Massage Therapist With No Experience In Children Education Program. Resume For Massage Therapist With No Experience In Spanish Language Test.
Licensed massage therapist resume sample for with no experience in children quotes and images education services. Resume for massage therapist with noce in education services texas spanish meaning hindi. Resume for massage therapist with no experience remarkable physical therapy aide sample awesome collection of good.