Raphael Sbarge has been a working actor for more than five decades. Growing up in New York City's lower East Side, he began working at age 4 on Sesame Street. He has appeared in dozens of movies, including Risky Business, My Science Project, Independence Day, Pearl Harbor and Vision Quest.
Raphael's resume includes more than 100 guest appearances and series regular roles on network television shows including the long-running ABC hit Once Upon a Time, the TNT series Murder in the First, and The Guardian for CBS. He has recurred on series including Star Trek Voyager, Dexter and Prison Break. Raphael has also performed on stage in theaters around the country and appeared in five Broadway productions.
His first narrative short, The Bird Who Could Fly, an immigrant Korean story, set in K-town, Los Angeles with an all-Asian cast, has won numerous awards and garnered many laurels at film festivals around the country and internationally, including best narrative short at the Greenpoint Film Festival and DisOrient Film Festival, and winner of the best short, best drama, best ensemble and best director awards at the Asians on Film festival.
Raphael also produced and directed a short film, Is There Hope for Planet Earth, in conjunction with the California Institute of Technology. It was acquired and aired on KCET/PBS featured as part of the station's Emmy- and Peabody-awarded news program SoCalConnected. Raphael next produced and directed A Concrete River, a film about the history of the Los Angeles River that was also acquired by KCET.
LA Foodways, a six-part digital series and one-hour feature that Raphael directed and produced, debuted in January 2019 and airs on KCET and online. The series, which was co-produced with KCET, highlights Los Angeles' farming history, contrasted against the fact that there are 1.5 million people dealing with food scarcity or living in food deserts in Los Angeles County, the largest in the country.
Victoria is the CEO of McDaniel Knutson Financial Advisors and Affinity Financial Advisors based in Lawrence, Kansas. She and her husband, Luke Bogner, have always had a desire to make the community a better place, and Green Wish was the perfect opportunity to turn that desire into action. In June 2012, Victoria joined the board of Green Wish and has been part of the growing mission of the organization ever since.
For the past 10 years, Patti has been a business analyst for Express Scripts, a company committed to sustainable business practices. She also served in the military for 13 years. While in high school, she started her "bucket list" with her desire to visit the Galapagos Islands. The attraction was to see a part of the world through Charles Darwin's eyes and to protect the islands from destruction. These and other pivotal moments in her life occurred before the tender age of 16. Her connection to the planet is deep-rooted.
When she learned of Green Wish, she knew it was a perfect fit. It made the most sense. It appeals to her desire to educate people on environmental issues, work with organizations to develop and implement solutions to those issues and to leave a more sustainable environment for future generations. With a finite amount of time to devote to community involvement, focusing her efforts with Green Wish will benefit multiple organizations.
Saga graduated from Chapman University in 2001 with a Masters in Filmmaking and brought her unique style to some brilliant projects from low budget features to studio box office successes. She began her career at Fox Studios, one of the largest studios in the world, as a Production Coordinator in the VFX department on box office hits such as "The Devil Wears Prada", "A Good Year" and "Fantastic 4". She moved across the studio system to Marvel's "Iron Man 2", Sony Pictures' "Just Go With It" and Indie film festival award winners that have been distributed across the globe.
Saga has also been the Production Manager on high fashion photo shoots for world-class publications as Vogue, Vanity Fair, Harper's Bazaar and ELLE magazine gracing the covers and spreads with high profile clientele like Taylor Swift and David Beckham. She is passionate about film making and various types of production and enjoys taking projects from concept to completion. She has a strong understanding of creatively delivering on time and on budget shows. Saga started her own film consulting business, Hollywood Consulting.
Saga is also a fabulous chef, a "total foodie" as she calls herself! Food brings people together and has been a big part of her life. You can find her Arabic cooking show, Spice It Up with Saga.
Saga wants to inspire people and make a difference in the world through action and empowerment. Next to filmmaking and cooking, keeping our planet at the forefront of our attention is another one of her passions. The food charities Green Wish Los Angeles sponsors attracted her to the organization. Saga also finds time to volunteer with Golden Retrievers.
As environmental issues become more pressing, there are two possible responses: forget it and hope that government and corporations will figure it out, or take action yourself. In the "take action yourself" camp, a few individuals are leading the way. One such person in California is Ed Begley, Jr.
Turning up at Hollywood events on his bicycle, Ed has been considered an environmental leader in the Hollywood community for many years. He serves on Staff and Boards of The Coalition for Clean Air, The Thoreau Institute, and the advisory board of the Union of Concerned Scientists, among many others.
His work in the environmental community has earned him a number of awards from some of the most prestigious environmental groups in the nation, including the California League of Conservation Voters, the Natural Resources Defense Council, The Coalition for Clean Air, Heal the Bay, Santa Monica Baykeeper, and the Cesar E. Chavez Foundation. He currently lives near Los Angeles in a self-sufficient home powered by solar energy. He has his own website at www.edbegley.com.
You may know her from her multiple EMMY nominated and SAG Award-winning portrayal of ADA Sylvia Costas Sipowitz in the groundbreaking NYPD Blue or as a stay-at-home prostitute in DESPERATE HOUSEWIVES, as Issy's tender, but ditzy Mom on GREY'S ANATOMY (for which she earned her 4th Emmy nod) or a murderous realtor on MONK or a sociopathic serial killer on LAW AND ORDER: SVU, coming to terms with her long lost daughter on RIZZOLI & ISLES, speaking out for protection of endangered polar bears for the World Wildlife Fund or beating up Larry David on CURB YOUR ENTHUSIASM.
Film work includes the upcoming SOLACE with Sir Anthony Hopkins, the indie hit MIDDLE OF NOWHERE for Ava DuVernay (Best Director at Sundance Film Fest 2012; two GOTHAM AWARD and four SPIRIT nominations). Sharon commitment to social issue films is represented by three films GRACE about addiction recovery, UNA VIDA about Alzheimer's and THINSPO about eating disorders.
An accomplished stage actress, Sharon stared last December in the acclaimed Noel Coward cabaret Love, Noel, also in his final play A Song at Twilight, in the premiere of Poor Behavior at the Mark Taper Forum. NY audiences have seen her in Zorba, Cabaret, Fiddler, Love, Loss And What I Wore and as Velma in CHICAGO.
Sharon previously chaired the Women In Film Foundation where she incubated and managed corporate partnerships with Netflix and the Scholl Foundation and is still active on the Advisory Board. She serves on Staff and Board of Directors of Heal the Bay and the Screen Actors Guilds' Foundation. She lives in Los Angeles and Idyllwild, California is married to physician Dr. Thomas Apostle. She is a member of First Congregational Church.
Rachelle Carson-Begley is one of the most recognized names and faces in the environmental world of Hollywood. As the wife of Uber- Environmentalist, Ed Begley, Jr., Carson-Begley opened her life to millions of people as Co-Star of the highly successful reality series Living with Ed, shown on HGTV and Discovery's Planet Green. Now the Begley's have embarked on a new and exciting project, the building of their new Platinum LEED-certified Dream home which has been chronicled on two web series, On Begley Street, directed by Raphael Sbarge for Evox Television and Our Green House on BiteSizeTV.
Carson-Begley started her career in New York City and Regional Theater. After spending two seasons at Williamstown Theater Festival under the direction of Nikos Psacharapoulos, she headed for Los Angeles to begin working in film and television. One of her first jobs was a recurring role on the nighttime soap, Falcon Crest. Carson-Begley has worked consistently for the last 27 years and most recently appeared with her husband, Ed Begley, Jr., in the movie, The Summerland Project, which is due out this year. Her other films include The Bling Ring directed by Sophia Coppola, The M Word, Pittsburgh and the cult classic But I'm a Cheerleader. Some of her work in television includes Boston Legal, NYPD Blue, The Handler, State of Grace, Happy Family and Eight Simple Rules.
Preston is an environmental lawyer who works primarily on brownfield redevelopment and revitalization projects, as well as renewable energy developments. Inspired by his grandfather's dedication to the preservation of nature (including his leadership on the Conservation Foundation and the Audubon Society), Preston has volunteered his time to support many environmental projects. He is a frequent speaker on far-ranging environmental topics.
Preston is currently a member of the Green Advisory Committee of the California League of Conservation Voters, which has published the Environmental Scorecard for over four decades, rating the performance of the California Legislature and Governor on key environmental legislation.


A new book details "America's GI General," a full biography of General Omar Nelson Bradley. Award winning author, military historian, leadership development expert, and former Wall Street executive, Steve Ossad joins us today on The Not Old Better Show.
Steve's new book, Omar Nelson Bradley, America's GI General, is the subject of our show today, and this book is wonderful, and in terms of it's depth of research and understanding of this fascinating man, it is worth the read!
Bradley is credited with doing much to improve the military health care system and with helping veterans receive their educational benefits under the G. I. Bill of Rights. Let's listen to Bradley himself, in this quote about the VA and helping shape it into the veteran's administration support agency it is today.


text:
Four Monuments Honoring 4-Legged US War Heroes
May 25, 2020 Laura Goldman 0 Comments military dogs, Sgt. Stubby
Memorial Day is a time to honor the memory of those who bravely gave their lives for their country – and that should include four-legged as well as two-legged war heroes. Here are some monuments around the United States that pay tribute to the many military working dogs who bravely served their country.
1. United States War Dogs Memorial (New Jersey)
Located at the entrance to the New Jersey Vietnam Veterans' Memorial in Holmdel, N.J., this bronze statue of a Vietnam War soldier kneeling beside his loyal four-legged partner was funded and dedicated by the United States War Dogs Association in 2006. Sculptor Bruce Lindsay created the statue, which was the first official memorial in the United States to honor military dogs.
"Military canines make contributions every day while they serve in our military," the association's president, Ron Aiello, a former Marine scout dog handler and Vietnam veteran, said in 2006. "They are hardworking and do a great job of saving the lives of their handlers and the troops who walk in their footsteps."
What makes this and other memorials especially heartrending is that most of the life-saving hero dogs that served during the Vietnam War never made it home alive.
2. US Military Working Dog Teams National Monument (Texas)
This monument, dedicated in 2013, is open to the public at Joint Base San Antonio (JBSA)-Lackland in Texas. It depicts a soldier standing alongside the four most common breeds of military dogs since World War II: a Doberman Pinscher, German Shepherd, Labrador Retriever and Belgian Malinois. The pedestal is inscribed, "Guardians of America's Freedom."
The monument also includes the "Not Forgotten Fountain." This is a bronze statue of a soldier pouring water from a canteen into his helmet for his partner, the German Shepherd sitting by his side.
"These dogs were patriots just as much as anybody else who served," military dog handler John Baker, whose unit, 212th Military Police Company Detachment A, was known as "Hell on Paws," told Reuters when the monument was unveiled.
JBSA-Lackland is the home of the Department of Defense Military Working Dog program, the world's largest training center for military dogs and handlers. The center has been training dogs for all branches of the military since 1958.
Photo: U.S. Air Force photo by Airman 1st Class Krystal M. Jeffers
3. Sgt. Stubby Statue (New York)
Although he was the most decorated war dog in U.S. history and the only military dog ever promoted to sergeant, it took over 100 years for Sgt. Stubby to be honored with a monument. In 2018, "Stubby Salutes," a life-size statue of the hero dog, was dedicated in Middletown, Conn. The original casting remains there, and the statue is now in the American Kennel Club Museum of the Dog in New York City.
After Stubby was rescued in 1917 on a Yale University field by John Robert Conroy, a soldier who was training for World War I combat, Conroy smuggled his dog aboard his ship with him when he was deployed to France. During 17 battles on the Western Front, Stubby saved countless lives by alerting troops when he smelled mustard gas or heard artillery shells. He was able to crawl under barbed wire fences to reach injured soldiers and remained beside them until help arrived. He captured a German spy by the seat of his pants. And, as a plaque on his statue says, Stubby "was a morale booster."
Conroy's family had tried for 30 years to get a monument dedicated to Stubby, according to the Associated Press. The statue was created by artist Susan Bahary. Along with Stubby's likeness, Bahary said she wanted "to capture that beautiful spirit. That courage. His bravery. His ability to cheer up the troops both on the battlefield and at home."
4. Military Working Dog Tribute (Wisconsin)
This life-sized bronze sculpture inside Highground Veterans Memorial Park in Neillsville, Wisc., depicts a soldier crouched beside his partner, a German shepherd, with one hand holding a rifle and the other holding the dog's harness. Plaques display the names of handlers and their dogs.
The memorial "is in recognition of the military working dogs that have graced the soldiers' lives who worked in combat with these brothers in arms," according to the official website. Dedicated in 2018, it was created by Michael Martino and conceived by a group of Vietnam War veterans.
More War Dog Monuments
You can find a comprehensive list of war dog memorials across the country on the Vietnam Dog Handler Association's website.
This story was originally published on Care2.com.
5 Working Dogs Who Became Heroes
Happy Endings: All 4-Legged 'DOG' Actors Adopted by Their Trainers
Tissue (Box) Alert! Watch Veterans Reunite with Their Beloved Dogs
Why Hero Military Dog Conan Probably Won't Receive a Purple Heart
Military Hero Dog Will Be Parade's First Fur-Legged Grand Marshal
It's Now the Law: Retired Military Dogs Can Be Adopted by Their Handlers
Retired Hero Military Dog 'Major Mike' Shot Dead by Bicyclist
RIP Buster, Bomb-Sniffing Dog Who Saved a Thousand Lives
Congress Votes to Return Military Dogs to US and Reunite Them with Handlers
← Meet Two 4-Legged Burn Survivors Who Became Inspirational Firehouse Dogs
Former Bait Dog Abigail Becomes a 'Disney Princess' →

redpajama_set_name: RedPajamaCommonCrawl


text:
Poetry on the Train
April 25, 2012 Dispatches
By KOBUS MOOLMAN
When the compartment door was drawn back, and I saw my room for the nearly twelve-hour trip home, I had to conceal my disappointment. The room was already occupied. Well, no problem. I thought to myself. Coming up to Johannesburg on the train I had been faced with the same problem. Then I had simply asked the conductor if I could change and he had found me a cabin where I could be on my own: to think my own thoughts, laugh out loud at my pettiness and, most importantly, write without distraction – all night if I so chose. Of course, things had been considerably easier on that occasion: my proposed companion had been an elderly white man who smoked like a steam engine and had the watery eyes and puffy nose of a heavy drinker. This time, however, I would have to make excuses for not wanting to share a cabin with a quiet middle-aged black man.
We greeted each other cordially and after some idle exchanges I explained to him why I preferred to be alone and would be seeking a cabin of my own. I think he understood. Then the conductor came around. He was a thin African man with a woolen skullcap of sorts, and judging from the questions fired icily at me, he had definitely misinterpreted my request. It was going to be fruitless to try to persuade him. I resigned myself to a dull and early night. (I only hoped my companion wasn't going to try and talk to me all the way home.)
He introduced himself as Hezlon X. from Soweto. He had two children. The firstborn was fourteen and the youngest was eight. He was on his way to a small rural village inland from Port Shepstone to visit his parents and his brothers. He worked for the railways, and this was his annual free pass. He worked in the shunting yards, and he told me how difficult and dangerous this type of work was. Several of his friends had lost a hand or even an entire limb. He had once witnessed a man chopped in half by a runaway truck, he said.
I wanted to prepare for a talk I was to give to a private school on writing poetry, so I gave my companion a copy of my newly-published collection of poetry, Time like Stone, to read. Hezlon read for a long time in silence while I scribbled away in my notebook that rocked and jerked with the unpredictable motion of the train.
Finally Hezlon asked me what the title meant, and we discussed the burden of time, how I felt that it weighed like a stone upon us, and was impossible to shift. He nodded. He understood weight; the weight of a fully-laden truck that was capable of slicing a careless man's head clean off of his shoulders. Then he wanted to know how a poem came to me. Where did it come from? How did it happen? So we spoke of dreams, and of visions and nightmares; of things that stirred in one – without form or warning – and had to be obeyed or they would turn into poison and ruin us. Again he understood.
Then he asked me if he could write something, and how he should do it. I said to him that he had to wait; that he had to prepare himself, like a boxer or a football player; that he needed to be in shape to be able to receive the poem and to handle it, but that he was not the origin of his poem. It chose him; he could not go out and seek it. Again he nodded, and fell silent. The black veldt outside was pegged out like an animal skin to dry. The heavy forms of pylons and somber trees lumbered past. A tin shack, an empty bridge. Then the black veldt returned, seemingly impenetrable, seemingly endless.
"I've got it," he suddenly said. "Silent Rivers. Help me. Write it down." So I opened my notebook (volume 52) and on a new page wrote the first line of Hezlon's own poem: "Silent Rivers".
Over the next three hours Hezlon's poem grew slowly from those first two words into a page long meditation on the river of life that flowed in his veins: "at a constant speed / without beginning / or ending." At the end he was tired, but exultant. He made his bed soon after from some blankets he had with him and went to sleep. He was an honest man who led a simple and hard life. He was used to straightforward things like coupling coaches together, things like handling a wrench or a spanner. He understood these things. And he had now come to understand his own kind of poetry.
Kobus Moolman is an award-winning South African poet and playwright. He teaches creative writing at the University of KwaZulu-Natal in Durban. He has published five collections of poetry, two collections of plays and also edited a volume of poetry and prose by South African writers with disabilities. In 1999, he conducted a series of creative writing workshops at the New Prison in Pietermaritzburg, KwaZulu-Natal.
2012 Dispatches Johannesburg Kobus Moolman South Africa
Poetry on the Train 04.25.2012
Coconut and Bananas
ROMANA CAPEK-HABEKOVIC
A couple of days ago my husband returned from the grocery store with a pound of bananas and a small coconut. The bananas were perfectly ripe for consumption, and I put them in a fruit basket.
Inconvenience Store
SOPHIE DURBIN
Don Quijote makes no attempt to follow the traditional model of neat and unobtrusive conbini; its aisles were bathed in flashing lights and lined with neon signs brandishing sale prices. My head spun as I followed arrows pointing to various products, and I soon abandoned my mission to find face wash, instead pausing every few feet to gawk at gimmicks like teeth wipes and heated eye masks.


text:
Etsy's still a young white man's (and woman's) world
Etsy's been at the forefront of employers that offer extended paid leave benefits and other family-friendly work policies. However, that hasn't helped the makers' marketplace–whose sellers are 87% women–to move its workforce diversity needle much. The company touted its gains for women in its 2016 workforce progress report. Globally, 56% of its staff identified as women, a … Continue reading "Etsy's still a young white man's (and woman's) world"
[Photo: Raw Pixel / Unsplash]
By Lydia Dishman 1 minute Read
Etsy's been at the forefront of employers that offer extended paid leave benefits and other family-friendly work policies. However, that hasn't helped the makers' marketplace–whose sellers are 87% women–to move its workforce diversity needle much.
The company touted its gains for women in its 2016 workforce progress report. Globally, 56% of its staff identified as women, a 2% bump from 2015, and the board was 50% women. By comparison, the U.S. average for women's representation on boards is just 19.9% at S&P 500 companies. However, while the racial and ethnic diversity of the workforce did have year-over-year increases in the number of employees from underrepresented racial and ethnic groups, they weren't substantial.
Among the U.S. staff (the only country where they are counted) they remain a very small minority.
Overall Gender (GLOBAL), see full size here [Chart: courtesy of Etsy]
Overall staff is 73% white vs. 79% last year.
Leadership remained unchanged at 77% white.
Tech staff globally is 61% male, with engineering specifically 72% male.
In the U.S. whites accounted for 67% of engineering staff.
Globally, most workers (64%) fall between the ages of 25-35. Less than 10% of staff are over 40.
Overall Race / Ethnicity (US), see full size here [Chart: courtesy of Etsy]
Related: Soledad O'Brien: Workplace Diversity Efforts Should Start In High School
Lydia Dishman is a reporter writing about the intersection of tech, leadership, and innovation. She is a regular contributor to Fast Company and has written for CBS Moneywatch, Fortune, The Guardian, Popular Science, and the New York Times, among others.
From King to Warnock: How the Ebenezer Baptist Church became a center of Black organizing
People with disabilities have been disproportionately affected by the economic impact of COVID-19
Climate change, the digital divide, infectious disease, and unemployment are the top global risks
MLK Day 2021: What's open? What's closed? Who gets off?
Troubling study reveals how minor workplace slights can trigger suicidal thoughts in depressed people
Turning trash into treasure: London Design Biennale features gorgeous pieces made from waste
In London, an experimental building houses two very different types of tenants
Architecture criticism matters more than ever, according to a critic bullied by Trump
Female-founded companies will save our economy. Here's why
The 5 factors that will drive post-pandemic consumer behavior
After a string of life setbacks, here's how I learned to rethink happiness


This year's campaign is to support a refit of the Northern Arms Apartment complex, Independent living housing with supports provided by Canadian Mental Health Association.
Christian churches in Edmonton are once again joining forces at Christmas to assist those at risk of homelessness through the annual No Room in the Inn (NRII) campaign. This year NRII has chosen to support the Edmonton Region of the Canadian Mental Health Association (CMHA).
CMHA is a non-profit charitable organization that receives funding through the United Way and other government programs. In Edmonton, the CMHA has seven properties with a total of 146 independent living units. Presently, there is a wait-list and an influx of applications.
The property receiving support through our 2017 NRII Campaign will be the Northern Arms apartment complex (in the Queen Mary park neighbourhood) which CMHA purchased in August 2015. Although a structural assessment deemed the building had good bones, renovations are still necessary to replace ALL the windows and balcony doors. Exterior siding, painting, carpet in common areas will also be updated. In individual units, renovations are also needed to update flooring, appliances, and window coverings. As outlined in this year's NRII pamphlet, tenants of CMHA's affordable long-term housing can readily access all the services provided by CMHA-Edmonton including a supportive landlord who can assist them when their mental health is not well.
1) Through your church – make a cheque payable to your church and enter "No Room in the Inn" in the memo line. Drop the cheque in the church collection or mail it to your church. The church will then forward donations to CMHA for the Northern Arms Apartment complex.
This Christmas, please prayerfully consider being a blessing to the Canadian Mental Health Association – Edmonton Region's Northern Arms complex and its mission through the No Room in the Inn campaign.


text:
Reverse Mentoring – a small step towards making the workplace, and society, more inclusive
by Jacinta | Jun 21, 2020 | Uncategorized | 0 comments
Now more than ever silence on inequality, in all its forms, is unacceptable.
I feel strongly that on this topic, actions speak louder than words. Talking about diversity and inclusion in broad brush strokes and support for #BlackLivesMatter isn't good enough. People want to see and hear about what businesses are actually doing to create workplaces where all are equal and have equal opportunities. Anything less could be seen as platitudes.
My little business isn't in a position to show a photo of a diverse executive team or board, nor are we large enough to point to a robust development programme to support minority groups, or established HR sanctions for discrimination, but we are trying to play our part by listening, learning and advocating. Reverse mentoring is something we all can do to actively listen and learn.
I first encountered the concept of 'reverse mentoring' while I worked at GSK. I was a member of the global Research and Development (R&D) Leadership Team and our Diversity Council gave everyone on the team an opportunity to participate in a Reverse Mentoring programme to learn from a diverse group of colleagues how we could create a truly inclusive workplace.
Here's how it worked. I put myself forward via the Diversity Council and invited people across the 10,000 person R&D organisation to sign up as my reverse mentors. In the end I had a network of 14 people who generously gave their time to help me understand the issues, challenges and opportunities they encountered as members of a minority group. We met monthly and I did a lot of listening and learning.
Here's some of what I learnt. I learnt that resource groups and dedicated development programmes to support minority groups are important, but they are only the first step. I learnt that actions speak louder than words e.g. it is important to look at who gets recognised and promoted. I learnt that diversity of thought, experience and perspective is also an important part of the mix, in addition to diversity in race, gender, sexual orientation, age, disability and socio-economic backgrounds. I learnt that inclusive workplaces actively seek out diversity, they don't focus on achieving quotas (but they do track hiring and retention too). I also learnt how I could use my voice to make a positive difference.
I loved it. It made me question my own biases and take action.
I'm now trying replicate it in my own business. I've started to build my own reverse mentoring network – people from different walks of life and minority groups who challenge my thinking and help me see different perspectives.
The first member of my reverse mentoring network was my 13-year-old niece. She's wise beyond her years and asks great questions, most of which start with "why"?
Be a force for good. Work out what you can do to ensure change.
Look away now if you are a fan of competency frameworks, 9-box and other performance management tools.
Face masks, thermal scanners, Perspex, handshake bans … don't be surprised if colleagues aren't in a rush back to your sparsely populated office
Take time to re-evaluate your values and emerge from COVID-19 stronger
The power of Purpose in navigating these uncertain times
© Argideen Communications Limited 2020. Site made with ❤ by Creagh Design


I had an idea of making a garden on a button but then I watched The Princess and the Frog and I changed it a bit to a lily pond with reeds, flowers and a tiny little frog.
I used fimo clay and the base is a button from my big old button tin, have never made anything like this before, I usually just make earrings from fimo but I am really pleased with how this turned out and it was very fun to make.
It is under 2 inches which I found not too bad to do in fact and I know my froggie has no front legs heehee!
Gah! You guys are making it impossible to choos one to vote for! This is awesome, and I like your camera (my camera has an awful time getting tiny details)!
Oh wow! I find it hard to believe that's under 2 inches! Great job.
Wow....this is beautiful! Such detail for such a tiny project.
I really like this a lot! There is so much detail... And I am a pond lover. I had one in my last yard. all it needs now are the fish!
Beautiful-so much detail for such a tiny piece!
Beautiful, and such a lot of detail!


The browser used to access our site.
This information is used to measure the number of visitors to the various sections of our site. We also use this information to help us expand the coverage of our web site and to make the site more useful.
If you choose to provide us with personal information by sending an email, or by filling out a form with your personal information and submitting it through our Web site, we use that information to respond to your message and to help us provide you with information or material that you request. If provided, personally identifiable information is maintained in a secure database. We do not give, share, sell, or transfer any personal information to a third party unless required by law.
Brexit Business Training Ltd is committed to improving the experience for our users as they visit our site. When you visit our website, open an email from us, or experience our services online we may send you a cookie.
Navigation patterns, entry and exit points.
Tracking and measuring the success of a marketing campaign.
Tracking site usage, areas visited and information downloaded.
These cookies do not collect personal data about you. A unique (anonymous) visitor to our site remains anonymous in all cases. We cannot and do not attempt to identify visitors if they do not register and create a profile on our site.
Usage of a cookie is in no way linked to any personally identifiable information while on our site. You have the ability to accept or decline cookies by modifying the settings in your browser.
Brexit Business Training Ltd will be what's known as the "Controller" of the personal data you provide to us. We only collect basic personal data about you which does not include any special categories of personal information about you (known as Special Category Data). This does however include name, company name, address, e-mail and telephone number.
We need to know your basic personal data in order to provide services requested, process your orders and provide you with information about our products and services. We will not collect any personal data from you we do not need to provide and oversee these services to you.
Whenever we process data for these purposes we will ensure that we always keep your personal data rights in high regard and take account of these rights at all times. When we process your personal data for our legitimate interests, we will make sure that we consider and balance any potential impact on you (both positive and negative), and your rights under data protection laws. Our legitimate business interests do not automatically override your interests – we will not use your personal data for activities where our interests are overridden by the impact on you (unless we have your consent or are otherwise required or permitted to by law). You have the right to object to this processing if you wish, and if you wish to do so please click here. Please bear in mind that if you object this may affect our ability to carry out tasks above for your benefit.
We are based in the UK and we store our data within the EU. Some organisations which provide services to us may transfer personal data outside of the EU, but we will only allow them to do so if your data is adequately protected. For example, some of our systems use Microsoft products. As a US company, it may be that using their products result in personal data being transferred to or accessible from the US. However, we will allow this as we are certain personal data will still be adequately protected (as Microsoft is certified under the USA's Privacy Shield scheme).
We continually review what information we hold and delete what is no longer required. We will not retain your data for any longer than necessary and the longest time that we will hold your data will be six years.
based on your consent or the performance of a contract. This information will be provided in a common electronic format.
If you wish to raise a complaint on how we have handled your personal data, you can contact us by e-mail, please click here and we will be happy to investigate the matter.
Brexit Business Training Ltd is a company specialising in providing 1 day seminars and training courses based solely on Brexit and was founded in direct response to the uncertainty, confusion and risks posed by Brexit on the UK business sector.
Since the United Kingdom's invocation of Article 50 of the European Union was triggered on 29th March 2017 there have been demands for clarity and assurances on the UK government from all sectors of UK business. The negotiation process between the UK and the EU has so far not provided the answers, leaving the UK business sector in a state of limbo with regards to planning, investments and future operations.


Among the dozens of automakers pouring in to the Shanghai Motor Show this week to showcase their latest wares, this one comes from a brand you may never have heard of. It's called Venucia, and it's the product of a joint venture between Nissan and Chinese automaker Dongfeng.
Today Venucia has unveiled the VOW Concept, a sporty-looking crossover designed to appeal to young Chinese buyers and previewed in a teaser rendering last week. The design is said to have been inspired by the Salar de Uyuni plateau in the Bolivian Andes, but reminds us a bit of the Lamborghini Urus and Mitsubishi XR-PHEV concepts. And that's no bad thing.
Technical details are few and far between, but the name VOW apparently stands for "Venucia Over Wonder," that brand name itself having been derived from the Roman diety Venus. Beyond that we couldn't tell you any more, but even if the VOW concept gets put into production, the chances are slim to none that any version would ever reach a showroom on our side of the pond in the foreseeable future.


As an introduction to the key elements of the Trombone version of Arban, adapted for the Tuba, this book has been designed to provide young tuba players with the essentials of a great method. Basic exercises from the parent method have been arranged in sequence, some in their original form and the more difficult ones adjusted to take account of student abilities. The book will improve the technical facility and musicianship of the player and prepare him or her for the more advanced material in Arban's Famous Method. My First Arban is tailored to work in either an individual or group lesson setting and is guaranteed to help the young student achieve a level of playing proficiency.


* Blue represents nationalism and liberty.
Of note, the tricolour of the Republic of China is the same as the French tricolour. The colours also represent the same concepts: liberty, equality and fraternity. However, blue, for example, in the Chinese tricolour represent equality and red represent liberty.


text:
package org.gearvrf.scene_objects;

import java.util.concurrent.Future;

import org.gearvrf.GVRMaterial;
import org.gearvrf.GVRSceneObject;
import org.gearvrf.GVRRenderData;
import org.gearvrf.GVRContext;
import org.gearvrf.GVRMesh;
import org.gearvrf.GVRTexture;
import org.gearvrf.utility.Log;

public class GVRSphereSceneObject extends GVRSceneObject {

    @SuppressWarnings("unused")
    private static final String TAG = Log.tag(GVRSphereSceneObject.class);

    private static final int STACK_NUMBER = 18;
    private static final int SLICE_NUMBER = 36;

    private float[] vertices;
    private float[] normals;
    private float[] texCoords;
    private char[] indices;

    private int vertexCount = 0;
    private int texCoordCount = 0;
    private char indexCount = 0;
    private char triangleCount = 0;

    /**
     * Constructs a sphere scene object with a radius of 1 and 18 stacks, and 36
     * slices.
     *
     * The sphere's triangles and normals are facing out and the same texture
     * will be applied to each side of the sphere.
     *
     * @param gvrContext
     *            current {@link GVRContext}
     */
    public GVRSphereSceneObject(GVRContext gvrContext) {
        super(gvrContext);

        generateSphereObject(gvrContext, STACK_NUMBER, SLICE_NUMBER, true,
                new GVRMaterial(gvrContext), 1);
    }

    /**
     * Constructs a sphere scene object with a radius of 1 and 18 stacks, and 36
     * slices.
     *
     * The sphere's triangles and normals are facing either in or out and the
     * same texture will be applied to each side of the sphere.
     *
     * @param gvrContext
     *            current {@link GVRContext}
     *
     * @param facingOut
     *            whether the triangles and normals should be facing in or
     *            facing out.
     */
    public GVRSphereSceneObject(GVRContext gvrContext, boolean facingOut) {
        super(gvrContext);

        generateSphereObject(gvrContext, STACK_NUMBER, SLICE_NUMBER, facingOut,
                new GVRMaterial(gvrContext), 1);
    }

    /**
     * Constructs a sphere scene object with a radius of 1 and 18 stacks, and 36
     * slices.
     *
     * The sphere's triangles and normals are facing either in or out and the
     * same texture will be applied to each side of the sphere.
     *
     * @param gvrContext
     *            current {@link GVRContext}
     *
     * @param facingOut
     *            whether the triangles and normals should be facing in or
     *            facing out.
     */
    /**
     * Constructs a sphere scene object 18 stacks, and 36
     * slices.
     *
     * The sphere's triangles and normals are facing either in or out and the
     * same texture will be applied to each side of the sphere.
     *
     * @param gvrContext
     *            current {@link GVRContext}
     *
     * @param facingOut
     *            whether the triangles and normals should be facing in or
     *            facing out.
     * @param radius
     *          sets the sphere with the radius parameter.  Radius must be > 0
     *          otherwise, set it to the default of 1
     */
    public GVRSphereSceneObject(GVRContext gvrContext, boolean facingOut, float radius) {
        super(gvrContext);

        if (radius < 0) radius = 1;
        generateSphereObject(gvrContext, STACK_NUMBER, SLICE_NUMBER, facingOut,
                new GVRMaterial(gvrContext), radius);
    }

    /**
     * Constructs a sphere scene object with a radius of 1 and 18 stacks, and 36
     * slices.
     *
     * The sphere's triangles and normals are facing either in or out and the
     * same texture will be applied to each side of the sphere.
     *
     * @param gvrContext
     *            current {@link GVRContext}
     *
     * @param stackNumber
     *            the number of stacks for the sphere. It should be equal or
     *            greater than 3.
     *
     * @param sliceNumber
     *            the number of slices for the sphere. It should be equal or
     *            greater than 4.
     *
     * @param facingOut
     *            whether the triangles and normals should be facing in or
     *            facing out.
     */
    public GVRSphereSceneObject(GVRContext gvrContext, int stackNumber, int sliceNumber, boolean facingOut) {
        super(gvrContext);

        generateSphereObject(gvrContext, stackNumber, sliceNumber, facingOut, new GVRMaterial(gvrContext), 1);
    }

    /**
     * Constructs a sphere scene object with a radius of 1 and 18 stacks, and 36
     * slices.
     *
     * The sphere's triangles and normals are facing either in or out and the
     * same texture will be applied to each side of the sphere.
     *
     * @param gvrContext
     *            current {@link GVRContext}
     *
     * @param facingOut
     *            whether the triangles and normals should be facing in or
     *            facing out.
     *
     * @param texture
     *            the texture for the sphere.
     */
    public GVRSphereSceneObject(GVRContext gvrContext, boolean facingOut,
            GVRTexture texture) {
        super(gvrContext);

        GVRMaterial material = new GVRMaterial(gvrContext);
        material.setMainTexture(texture);
        generateSphereObject(gvrContext, STACK_NUMBER, SLICE_NUMBER, facingOut,
                material, 1);
    }

    /**
     * Constructs a sphere scene object with a radius of 1 and 18 stacks, and 36
     * slices.
     *
     * The sphere's triangles and normals are facing either in or out and the
     * same texture will be applied to each side of the sphere.
     *
     * @param gvrContext
     *            current {@link GVRContext}
     *
     * @param stackNumber
     *            the number of stacks for the sphere. It should be equal or
     *            greater than 3.
     *
     * @param sliceNumber
     *            the number of slices for the sphere. It should be equal or
     *            greater than 4.
     *
     * @param facingOut
     *            whether the triangles and normals should be facing in or
     *            facing out.
     *
     * @param texture
     *            the texture for the sphere.
     */
    public GVRSphereSceneObject(GVRContext gvrContext, int stackNumber, int sliceNumber, boolean facingOut, GVRTexture texture) {
        super(gvrContext);

        GVRMaterial material = new GVRMaterial(gvrContext);
        material.setMainTexture(texture);
        generateSphereObject(gvrContext, stackNumber, sliceNumber, facingOut, material, 1);
    }

    /**
     * Constructs a sphere scene object with a radius of 1 and 18 stacks, and 36
     * slices.
     *
     * The sphere's triangles and normals are facing either in or out and the
     * same material will be applied to each side of the sphere.
     *
     * @param gvrContext
     *            current {@link GVRContext}
     *
     * @param facingOut
     *            whether the triangles and normals should be facing in or
     *            facing out.
     *
     * @param material
     *            the material for the sphere.
     */
    public GVRSphereSceneObject(GVRContext gvrContext, boolean facingOut,
            GVRMaterial material) {
        super(gvrContext);

        generateSphereObject(gvrContext, STACK_NUMBER, SLICE_NUMBER, facingOut,
                material, 1);
    }

    /**
     * Constructs a sphere scene object with a radius of 1 and user specified
     * stack and slice numbers.
     *
     * The sphere's triangles and normals are facing either in or out and the
     * same material will be applied to each side of the sphere.
     *
     * @param gvrContext
     *            current {@link GVRContext}
     *
     * @param stackNumber
     *            the number of stacks for the sphere. It should be equal or
     *            greater than 3.
     *
     * @param sliceNumber
     *            the number of slices for the sphere. It should be equal or
     *            greater than 4.
     *
     * @param facingOut
     *            whether the triangles and normals should be facing in or
     *            facing out.
     *
     * @param material
     *            the material for the sphere.
     */
    public GVRSphereSceneObject(GVRContext gvrContext, int stackNumber,
            int sliceNumber, boolean facingOut, GVRMaterial material) {
        super(gvrContext);

        // assert sliceNumber>=4
        if (sliceNumber < 4) {
            throw new IllegalArgumentException(
                    "Slice number should be equal or greater than 4.");
        }

        // assert stackNumber>=3
        if (stackNumber < 3) {
            throw new IllegalArgumentException(
                    "Stack number should be equal or greater than 3.");
        }

        generateSphereObject(gvrContext, stackNumber, sliceNumber, facingOut,
                material, 1);
    }

    /**
     * Constructs a sphere scene object with a radius of 1 and user specified
     * stack and slice numbers. The sphere is subdivided into MxN meshes, where M=sliceSegmengNumber and N=(stackSegmentNumber+2) are specified by user.
     *
     * The sphere's triangles and normals are facing either in or out and the
     * same material will be applied to each side of the sphere.
     *
     * @param gvrContext
     *            current {@link GVRContext}
     *
     * @param stackNumber
     *            the number of stacks for the sphere. It should be equal or
     *            greater than 3.
     *
     * @param sliceNumber
     *            the number of slices for the sphere. It should be equal or
     *            greater than 4.
     *
     * @param facingOut
     *            whether the triangles and normals should be facing in or
     *            facing out.
     *
     * @param material
     *            the material for the sphere.
     *
     * @param stackSegmentNumber
     *            the segment number along vertical direction (i.e. stacks).
     *            Note neither top cap nor bottom cap are subdivided along
     *            vertical direction. So number of stacks in body part (i.e.
     *            stackNumber-2) should be divisible by stackSegmentNumber.
     *
     * @param sliceSegmentNumber
     *            the segment number along horizontal direction (i.e. slices).
     *            Number of slices (i.e. sliceNumber) should be divisible by
     *            sliceSegmentNumber.
     */
    public GVRSphereSceneObject(GVRContext gvrContext, int stackNumber,
            int sliceNumber, boolean facingOut, GVRMaterial material,
            int stackSegmentNumber, int sliceSegmentNumber) {
        super(gvrContext);

        // assert stackNumber>=3
        if (stackNumber < 3) {
            throw new IllegalArgumentException(
                    "Stack number should be equal or greater than 3.");
        }

        // assert sliceNumber>=4
        if (sliceNumber < 4) {
            throw new IllegalArgumentException(
                    "Slice number should be equal or greater than 4.");
        }

        // assert for valid stackSegmentNumber
        if ((stackNumber - 2) % stackSegmentNumber != 0) {
            throw new IllegalArgumentException(
                    "(stackNumber-2) should be divisible by stackSegmentNumber.");
        }

        // assert for valid sliceSegmentNumber
        if (sliceNumber % sliceSegmentNumber != 0) {
            throw new IllegalArgumentException(
                    "sliceNumber should be divisible by sliceSegmentNumber.");
        }

        generateComplexSphereObject(gvrContext, stackNumber, sliceNumber,
                facingOut, material, stackSegmentNumber, sliceSegmentNumber);
    }

    private void generateSphereObject(GVRContext gvrContext, int stackNumber,
            int sliceNumber, boolean facingOut, GVRMaterial material, float radius) {
        generateSphere(stackNumber, sliceNumber, facingOut);

        // multiply by radius > 0
        //float radius = 1;
        for (int i = 0; i < vertices.length; i++) {
            vertices[i] *= radius;
        }
        GVRMesh mesh = new GVRMesh(gvrContext, "float3 a_position float2 a_texcoord float3 a_normal");
        mesh.setVertices(vertices);
        mesh.setNormals(normals);
        mesh.setTexCoords(texCoords);
        mesh.setTriangles(indices);

        GVRRenderData renderData = new GVRRenderData(gvrContext, material);
        attachComponent(renderData);
        renderData.setMesh(mesh);
    }

    private void generateSphere(int stackNumber, int sliceNumber,
            boolean facingOut) {
        int capVertexNumber = 3 * sliceNumber;
        int bodyVertexNumber = 4 * sliceNumber * (stackNumber - 2);
        int vertexNumber = (2 * capVertexNumber) + bodyVertexNumber;
        int triangleNumber = (2 * capVertexNumber)
                + (6 * sliceNumber * (stackNumber - 2));

        vertices = new float[3 * vertexNumber];
        normals = new float[3 * vertexNumber];
        texCoords = new float[2 * vertexNumber];
        indices = new char[triangleNumber];

        // bottom cap
        createCap(stackNumber, sliceNumber, false, facingOut);

        // body
        createBody(stackNumber, sliceNumber, facingOut);

        // top cap
        createCap(stackNumber, sliceNumber, true, facingOut);
    }

    private void createCap(int stackNumber, int sliceNumber, boolean top,
            boolean facingOut) {

        float stackPercentage0;
        float stackPercentage1;

        if (!top) {
            stackPercentage0 = ((float) (stackNumber - 1) / stackNumber);
            stackPercentage1 = 1.0f;

        } else {
            stackPercentage0 = (1.0f / stackNumber);
            stackPercentage1 = 0.0f;
        }

        float t0 = stackPercentage0;
        float t1 = stackPercentage1;
        double theta0 = stackPercentage0 * Math.PI;
        double theta1 = stackPercentage1 * Math.PI;
        double cosTheta0 = Math.cos(theta0);
        double sinTheta0 = Math.sin(theta0);
        double cosTheta1 = Math.cos(theta1);
        double sinTheta1 = Math.sin(theta1);

        for (int slice = 0; slice < sliceNumber; slice++) {
            float slicePercentage0 = ((float) (slice) / sliceNumber);
            float slicePercentage1 = ((float) (slice + 1) / sliceNumber);
            double phi0 = slicePercentage0 * 2.0 * Math.PI;
            double phi1 = slicePercentage1 * 2.0 * Math.PI;
            float s0, s1;
            if (facingOut) {
                s0 = 1 - slicePercentage0;
                s1 = 1 - slicePercentage1;
            } else {
                s0 = slicePercentage0;
                s1 = slicePercentage1;
            }
            float s2 = (s0 + s1) / 2.0f;
            double cosPhi0 = Math.cos(phi0);
            double sinPhi0 = Math.sin(phi0);
            double cosPhi1 = Math.cos(phi1);
            double sinPhi1 = Math.sin(phi1);

            float x0 = (float) (sinTheta0 * cosPhi0);
            float y0 = (float) cosTheta0;
            float z0 = (float) (sinTheta0 * sinPhi0);

            float x1 = (float) (sinTheta0 * cosPhi1);
            float y1 = (float) cosTheta0;
            float z1 = (float) (sinTheta0 * sinPhi1);

            float x2 = (float) (sinTheta1 * cosPhi0);
            float y2 = (float) cosTheta1;
            float z2 = (float) (sinTheta1 * sinPhi0);

            vertices[vertexCount + 0] = x0;
            vertices[vertexCount + 1] = y0;
            vertices[vertexCount + 2] = z0;

            vertices[vertexCount + 3] = x1;
            vertices[vertexCount + 4] = y1;
            vertices[vertexCount + 5] = z1;

            vertices[vertexCount + 6] = x2;
            vertices[vertexCount + 7] = y2;
            vertices[vertexCount + 8] = z2;

            if (facingOut) {
                normals[vertexCount + 0] = x0;
                normals[vertexCount + 1] = y0;
                normals[vertexCount + 2] = z0;

                normals[vertexCount + 3] = x1;
                normals[vertexCount + 4] = y1;
                normals[vertexCount + 5] = z1;

                normals[vertexCount + 6] = x2;
                normals[vertexCount + 7] = y2;
                normals[vertexCount + 8] = z2;
            } else {
                normals[vertexCount + 0] = -x0;
                normals[vertexCount + 1] = -y0;
                normals[vertexCount + 2] = -z0;

                normals[vertexCount + 3] = -x1;
                normals[vertexCount + 4] = -y1;
                normals[vertexCount + 5] = -z1;

                normals[vertexCount + 6] = -x2;
                normals[vertexCount + 7] = -y2;
                normals[vertexCount + 8] = -z2;
            }

            texCoords[texCoordCount + 0] = s0;
            texCoords[texCoordCount + 1] = t0;
            texCoords[texCoordCount + 2] = s1;
            texCoords[texCoordCount + 3] = t0;
            texCoords[texCoordCount + 4] = s2;
            texCoords[texCoordCount + 5] = t1;

            if ((facingOut && top) || (!facingOut && !top)) {
                indices[indexCount + 0] = (char) (triangleCount + 1);
                indices[indexCount + 1] = (char) (triangleCount + 0);
                indices[indexCount + 2] = (char) (triangleCount + 2);
            } else {
                indices[indexCount + 0] = (char) (triangleCount + 0);
                indices[indexCount + 1] = (char) (triangleCount + 1);
                indices[indexCount + 2] = (char) (triangleCount + 2);
            }

            vertexCount += 9;
            texCoordCount += 6;
            indexCount += 3;
            triangleCount += 3;
        }

    }

    private void createBody(int stackNumber, int sliceNumber, boolean facingOut) {
        for (int stack = 1; stack < stackNumber - 1; stack++) {
            float stackPercentage0 = ((float) (stack) / stackNumber);
            float stackPercentage1 = ((float) (stack + 1) / stackNumber);

            float t0 = stackPercentage0;
            float t1 = stackPercentage1;

            double theta0 = stackPercentage0 * Math.PI;
            double theta1 = stackPercentage1 * Math.PI;
            double cosTheta0 = Math.cos(theta0);
            double sinTheta0 = Math.sin(theta0);
            double cosTheta1 = Math.cos(theta1);
            double sinTheta1 = Math.sin(theta1);

            for (int slice = 0; slice < sliceNumber; slice++) {
                float slicePercentage0 = ((float) (slice) / sliceNumber);
                float slicePercentage1 = ((float) (slice + 1) / sliceNumber);
                double phi0 = slicePercentage0 * 2.0 * Math.PI;
                double phi1 = slicePercentage1 * 2.0 * Math.PI;
                float s0, s1;
                if (facingOut) {
                    s0 = 1.0f - slicePercentage0;
                    s1 = 1.0f - slicePercentage1;
                } else {
                    s0 = slicePercentage0;
                    s1 = slicePercentage1;
                }
                double cosPhi0 = Math.cos(phi0);
                double sinPhi0 = Math.sin(phi0);
                double cosPhi1 = Math.cos(phi1);
                double sinPhi1 = Math.sin(phi1);

                float x0 = (float) (sinTheta0 * cosPhi0);
                float y0 = (float) cosTheta0;
                float z0 = (float) (sinTheta0 * sinPhi0);

                float x1 = (float) (sinTheta0 * cosPhi1);
                float y1 = (float) cosTheta0;
                float z1 = (float) (sinTheta0 * sinPhi1);

                float x2 = (float) (sinTheta1 * cosPhi0);
                float y2 = (float) cosTheta1;
                float z2 = (float) (sinTheta1 * sinPhi0);

                float x3 = (float) (sinTheta1 * cosPhi1);
                float y3 = (float) cosTheta1;
                float z3 = (float) (sinTheta1 * sinPhi1);

                vertices[vertexCount + 0] = x0;
                vertices[vertexCount + 1] = y0;
                vertices[vertexCount + 2] = z0;

                vertices[vertexCount + 3] = x1;
                vertices[vertexCount + 4] = y1;
                vertices[vertexCount + 5] = z1;

                vertices[vertexCount + 6] = x2;
                vertices[vertexCount + 7] = y2;
                vertices[vertexCount + 8] = z2;

                vertices[vertexCount + 9] = x3;
                vertices[vertexCount + 10] = y3;
                vertices[vertexCount + 11] = z3;

                if (facingOut) {
                    normals[vertexCount + 0] = x0;
                    normals[vertexCount + 1] = y0;
                    normals[vertexCount + 2] = z0;

                    normals[vertexCount + 3] = x1;
                    normals[vertexCount + 4] = y1;
                    normals[vertexCount + 5] = z1;

                    normals[vertexCount + 6] = x2;
                    normals[vertexCount + 7] = y2;
                    normals[vertexCount + 8] = z2;

                    normals[vertexCount + 9] = x3;
                    normals[vertexCount + 10] = y3;
                    normals[vertexCount + 11] = z3;
                } else {
                    normals[vertexCount + 0] = -x0;
                    normals[vertexCount + 1] = -y0;
                    normals[vertexCount + 2] = -z0;

                    normals[vertexCount + 3] = -x1;
                    normals[vertexCount + 4] = -y1;
                    normals[vertexCount + 5] = -z1;

                    normals[vertexCount + 6] = -x2;
                    normals[vertexCount + 7] = -y2;
                    normals[vertexCount + 8] = -z2;

                    normals[vertexCount + 9] = -x3;
                    normals[vertexCount + 10] = -y3;
                    normals[vertexCount + 11] = -z3;
                }

                texCoords[texCoordCount + 0] = s0;
                texCoords[texCoordCount + 1] = t0;
                texCoords[texCoordCount + 2] = s1;
                texCoords[texCoordCount + 3] = t0;
                texCoords[texCoordCount + 4] = s0;
                texCoords[texCoordCount + 5] = t1;
                texCoords[texCoordCount + 6] = s1;
                texCoords[texCoordCount + 7] = t1;

                // one quad looking from outside toward center
                //
                // @formatter:off
                //
                //     s1 --> s0
                //
                // t0   1-----0
                //  |   |     |
                //  v   |     |
                // t1   3-----2
                //
                // @formatter:on
                //
                // Note that tex_coord t increase from top to bottom because the
                // texture image is loaded upside down.
                if (facingOut) {
                    indices[indexCount + 0] = (char) (triangleCount + 0);
                    indices[indexCount + 1] = (char) (triangleCount + 1);
                    indices[indexCount + 2] = (char) (triangleCount + 2);

                    indices[indexCount + 3] = (char) (triangleCount + 2);
                    indices[indexCount + 4] = (char) (triangleCount + 1);
                    indices[indexCount + 5] = (char) (triangleCount + 3);
                } else {
                    indices[indexCount + 0] = (char) (triangleCount + 0);
                    indices[indexCount + 1] = (char) (triangleCount + 2);
                    indices[indexCount + 2] = (char) (triangleCount + 1);

                    indices[indexCount + 3] = (char) (triangleCount + 2);
                    indices[indexCount + 4] = (char) (triangleCount + 3);
                    indices[indexCount + 5] = (char) (triangleCount + 1);
                }

                vertexCount += 12;
                texCoordCount += 8;
                indexCount += 6;
                triangleCount += 4;
            }
        }

    }

    private void generateComplexSphereObject(GVRContext gvrContext,
            int stackNumber, int sliceNumber, boolean facingOut,
            GVRMaterial material, int stackSegmentNumber, int sliceSegmentNumber) {
        // bottom cap
        createComplexCap(gvrContext, stackNumber, sliceNumber, false,
                facingOut, material, sliceSegmentNumber);

        // body
        createComplexBody(gvrContext, stackNumber, sliceNumber, facingOut,
                material, stackSegmentNumber, sliceSegmentNumber);

        // top cap
        createComplexCap(gvrContext, stackNumber, sliceNumber, true, facingOut,
                material, sliceSegmentNumber);

        // attached an empty renderData for parent object, so that we can set
        // some common properties
        GVRRenderData renderData = new GVRRenderData(gvrContext, material);
        attachComponent(renderData);
    }

    private void createComplexCap(GVRContext gvrContext, int stackNumber,
            int sliceNumber, boolean top, boolean facingOut,
            GVRMaterial material, int sliceSegmentNumber) {
        int slicePerSegment = sliceNumber / sliceSegmentNumber;
        int vertexNumber = 3 * slicePerSegment;
        vertices = new float[3 * vertexNumber];
        normals = new float[3 * vertexNumber];
        texCoords = new float[2 * vertexNumber];
        indices = new char[vertexNumber];

        vertexCount = 0;
        texCoordCount = 0;
        indexCount = 0;
        triangleCount = 0;

        int sliceCounter = 0;

        float stackPercentage0;
        float stackPercentage1;

        if (!top) {
            stackPercentage0 = ((float) (stackNumber - 1) / stackNumber);
            stackPercentage1 = 1.0f;

        } else {
            stackPercentage0 = (1.0f / stackNumber);
            stackPercentage1 = 0.0f;
        }

        float t0 = stackPercentage0;
        float t1 = stackPercentage1;
        double theta0 = stackPercentage0 * Math.PI;
        double theta1 = stackPercentage1 * Math.PI;
        double cosTheta0 = Math.cos(theta0);
        double sinTheta0 = Math.sin(theta0);
        double cosTheta1 = Math.cos(theta1);
        double sinTheta1 = Math.sin(theta1);

        for (int slice = 0; slice < sliceNumber; slice++) {
            float slicePercentage0 = ((float) (slice) / sliceNumber);
            float slicePercentage1 = ((float) (slice + 1) / sliceNumber);
            double phi0 = slicePercentage0 * 2.0 * Math.PI;
            double phi1 = slicePercentage1 * 2.0 * Math.PI;
            float s0, s1;
            if (facingOut) {
                s0 = 1 - slicePercentage0;
                s1 = 1 - slicePercentage1;
            } else {
                s0 = slicePercentage0;
                s1 = slicePercentage1;
            }
            float s2 = (s0 + s1) / 2.0f;
            double cosPhi0 = Math.cos(phi0);
            double sinPhi0 = Math.sin(phi0);
            double cosPhi1 = Math.cos(phi1);
            double sinPhi1 = Math.sin(phi1);

            float x0 = (float) (sinTheta0 * cosPhi0);
            float y0 = (float) cosTheta0;
            float z0 = (float) (sinTheta0 * sinPhi0);

            float x1 = (float) (sinTheta0 * cosPhi1);
            float y1 = (float) cosTheta0;
            float z1 = (float) (sinTheta0 * sinPhi1);

            float x2 = (float) (sinTheta1 * cosPhi0);
            float y2 = (float) cosTheta1;
            float z2 = (float) (sinTheta1 * sinPhi0);

            vertices[vertexCount + 0] = x0;
            vertices[vertexCount + 1] = y0;
            vertices[vertexCount + 2] = z0;

            vertices[vertexCount + 3] = x1;
            vertices[vertexCount + 4] = y1;
            vertices[vertexCount + 5] = z1;

            vertices[vertexCount + 6] = x2;
            vertices[vertexCount + 7] = y2;
            vertices[vertexCount + 8] = z2;

            if (facingOut) {
                normals[vertexCount + 0] = x0;
                normals[vertexCount + 1] = y0;
                normals[vertexCount + 2] = z0;

                normals[vertexCount + 3] = x1;
                normals[vertexCount + 4] = y1;
                normals[vertexCount + 5] = z1;

                normals[vertexCount + 6] = x2;
                normals[vertexCount + 7] = y2;
                normals[vertexCount + 8] = z2;
            } else {
                normals[vertexCount + 0] = -x0;
                normals[vertexCount + 1] = -y0;
                normals[vertexCount + 2] = -z0;

                normals[vertexCount + 3] = -x1;
                normals[vertexCount + 4] = -y1;
                normals[vertexCount + 5] = -z1;

                normals[vertexCount + 6] = -x2;
                normals[vertexCount + 7] = -y2;
                normals[vertexCount + 8] = -z2;
            }

            texCoords[texCoordCount + 0] = s0;
            texCoords[texCoordCount + 1] = t0;
            texCoords[texCoordCount + 2] = s1;
            texCoords[texCoordCount + 3] = t0;
            texCoords[texCoordCount + 4] = s2;
            texCoords[texCoordCount + 5] = t1;

            if ((facingOut && top) || (!facingOut && !top)) {
                indices[indexCount + 0] = (char) (triangleCount + 1);
                indices[indexCount + 1] = (char) (triangleCount + 0);
                indices[indexCount + 2] = (char) (triangleCount + 2);
            } else {
                indices[indexCount + 0] = (char) (triangleCount + 0);
                indices[indexCount + 1] = (char) (triangleCount + 1);
                indices[indexCount + 2] = (char) (triangleCount + 2);
            }

            sliceCounter++;
            if (sliceCounter == slicePerSegment) {
                GVRMesh mesh = new GVRMesh(gvrContext, "float3 a_position float2 a_texcoord float3 a_normal");
                mesh.setVertices(vertices);
                mesh.setNormals(normals);
                mesh.setTexCoords(texCoords);
                mesh.setTriangles(indices);
                GVRSceneObject childObject = new GVRSceneObject(gvrContext, mesh, material);
                addChildObject(childObject);

                sliceCounter = 0;

                vertexCount = 0;
                texCoordCount = 0;
                indexCount = 0;
                triangleCount = 0;
            } else {
                vertexCount += 9;
                texCoordCount += 6;
                indexCount += 3;
                triangleCount += 3;
            }
        }
    }

    private void createComplexBody(GVRContext gvrContext, int stackNumber,
            int sliceNumber, boolean facingOut, GVRMaterial material,
            int stackSegmentNumber, int sliceSegmentNumber) {
        int stackPerSegment = (stackNumber - 2) / stackSegmentNumber;
        int slicePerSegment = sliceNumber / sliceSegmentNumber;

        int vertexNumber = 4 * stackPerSegment * slicePerSegment;
        int triangleNumber = 6 * stackPerSegment * slicePerSegment;
        vertices = new float[3 * vertexNumber];
        normals = new float[3 * vertexNumber];
        texCoords = new float[2 * vertexNumber];
        indices = new char[triangleNumber];

        vertexCount = 0;
        texCoordCount = 0;
        indexCount = 0;
        triangleCount = 0;

        for (int stackSegment = 0; stackSegment < stackSegmentNumber; stackSegment++) {
            for (int sliceSegment = 0; sliceSegment < sliceSegmentNumber; sliceSegment++) {
                for (int stack = stackSegment * stackPerSegment + 1; stack < (stackSegment+1) * stackPerSegment + 1; stack++) {

                    float stackPercentage0 = ((float) (stack) / stackNumber);
                    float stackPercentage1 = ((float) (stack + 1) / stackNumber);

                    float t0 = stackPercentage0;
                    float t1 = stackPercentage1;

                    double theta0 = stackPercentage0 * Math.PI;
                    double theta1 = stackPercentage1 * Math.PI;
                    double cosTheta0 = Math.cos(theta0);
                    double sinTheta0 = Math.sin(theta0);
                    double cosTheta1 = Math.cos(theta1);
                    double sinTheta1 = Math.sin(theta1);

                    for (int slice = sliceSegment * slicePerSegment; slice < (sliceSegment+1) * slicePerSegment; slice++) {
                        float slicePercentage0 = ((float) (slice) / sliceNumber);
                        float slicePercentage1 = ((float) (slice + 1) / sliceNumber);
                        double phi0 = slicePercentage0 * 2.0 * Math.PI;
                        double phi1 = slicePercentage1 * 2.0 * Math.PI;
                        float s0, s1;
                        if (facingOut) {
                            s0 = 1.0f - slicePercentage0;
                            s1 = 1.0f - slicePercentage1;
                        } else {
                            s0 = slicePercentage0;
                            s1 = slicePercentage1;
                        }
                        double cosPhi0 = Math.cos(phi0);
                        double sinPhi0 = Math.sin(phi0);
                        double cosPhi1 = Math.cos(phi1);
                        double sinPhi1 = Math.sin(phi1);

                        float x0 = (float) (sinTheta0 * cosPhi0);
                        float y0 = (float) cosTheta0;
                        float z0 = (float) (sinTheta0 * sinPhi0);

                        float x1 = (float) (sinTheta0 * cosPhi1);
                        float y1 = (float) cosTheta0;
                        float z1 = (float) (sinTheta0 * sinPhi1);

                        float x2 = (float) (sinTheta1 * cosPhi0);
                        float y2 = (float) cosTheta1;
                        float z2 = (float) (sinTheta1 * sinPhi0);

                        float x3 = (float) (sinTheta1 * cosPhi1);
                        float y3 = (float) cosTheta1;
                        float z3 = (float) (sinTheta1 * sinPhi1);

                        vertices[vertexCount + 0] = x0;
                        vertices[vertexCount + 1] = y0;
                        vertices[vertexCount + 2] = z0;

                        vertices[vertexCount + 3] = x1;
                        vertices[vertexCount + 4] = y1;
                        vertices[vertexCount + 5] = z1;

                        vertices[vertexCount + 6] = x2;
                        vertices[vertexCount + 7] = y2;
                        vertices[vertexCount + 8] = z2;

                        vertices[vertexCount + 9] = x3;
                        vertices[vertexCount + 10] = y3;
                        vertices[vertexCount + 11] = z3;

                        if (facingOut) {
                            normals[vertexCount + 0] = x0;
                            normals[vertexCount + 1] = y0;
                            normals[vertexCount + 2] = z0;

                            normals[vertexCount + 3] = x1;
                            normals[vertexCount + 4] = y1;
                            normals[vertexCount + 5] = z1;

                            normals[vertexCount + 6] = x2;
                            normals[vertexCount + 7] = y2;
                            normals[vertexCount + 8] = z2;

                            normals[vertexCount + 9] = x3;
                            normals[vertexCount + 10] = y3;
                            normals[vertexCount + 11] = z3;
                        } else {
                            normals[vertexCount + 0] = -x0;
                            normals[vertexCount + 1] = -y0;
                            normals[vertexCount + 2] = -z0;

                            normals[vertexCount + 3] = -x1;
                            normals[vertexCount + 4] = -y1;
                            normals[vertexCount + 5] = -z1;

                            normals[vertexCount + 6] = -x2;
                            normals[vertexCount + 7] = -y2;
                            normals[vertexCount + 8] = -z2;

                            normals[vertexCount + 9] = -x3;
                            normals[vertexCount + 10] = -y3;
                            normals[vertexCount + 11] = -z3;
                        }

                        texCoords[texCoordCount + 0] = s0;
                        texCoords[texCoordCount + 1] = t0;
                        texCoords[texCoordCount + 2] = s1;
                        texCoords[texCoordCount + 3] = t0;
                        texCoords[texCoordCount + 4] = s0;
                        texCoords[texCoordCount + 5] = t1;
                        texCoords[texCoordCount + 6] = s1;
                        texCoords[texCoordCount + 7] = t1;

                        // one quad looking from outside toward center
                        //
                        // @formatter:off
                        //
                        //     s1 --> s0
                        //
                        // t0   1-----0
                        //  |   |     |
                        //  v   |     |
                        // t1   3-----2
                        //
                        // @formatter:on
                        //
                        // Note that tex_coord t increase from top to bottom because the
                        // texture image is loaded upside down.
                        if (facingOut) {
                            indices[indexCount + 0] = (char) (triangleCount + 0);
                            indices[indexCount + 1] = (char) (triangleCount + 1);
                            indices[indexCount + 2] = (char) (triangleCount + 2);

                            indices[indexCount + 3] = (char) (triangleCount + 2);
                            indices[indexCount + 4] = (char) (triangleCount + 1);
                            indices[indexCount + 5] = (char) (triangleCount + 3);
                        } else {
                            indices[indexCount + 0] = (char) (triangleCount + 0);
                            indices[indexCount + 1] = (char) (triangleCount + 2);
                            indices[indexCount + 2] = (char) (triangleCount + 1);

                            indices[indexCount + 3] = (char) (triangleCount + 2);
                            indices[indexCount + 4] = (char) (triangleCount + 3);
                            indices[indexCount + 5] = (char) (triangleCount + 1);
                        }

                        vertexCount += 12;
                        texCoordCount += 8;
                        indexCount += 6;
                        triangleCount += 4;
                    }
                }

                GVRMesh mesh = new GVRMesh(gvrContext, "float3 a_position float2 a_texcoord float3 a_normal");
                mesh.setVertices(vertices);
                mesh.setNormals(normals);
                mesh.setTexCoords(texCoords);
                mesh.setTriangles(indices);
                GVRSceneObject childObject = new GVRSceneObject(gvrContext,
                        mesh);
                childObject.getRenderData().setMaterial(material);
                addChildObject(childObject);

                vertexCount = 0;
                texCoordCount = 0;
                indexCount = 0;
                triangleCount = 0;
            }
        }
    }
}

redpajama_set_name: RedPajamaGithub


text:
'Star Wars: Episode IX' Leaks Reveal Kylo's New Helmet, Rey's Jedi Robes
Eric Francisco
A new batch of leaked reference photos from the set of Star Wars: Episode IX (title TBA) hints at a great many disturbances in the Force. Namely, Kylo Ren's helmet is destroyed (again), Rey is dressing in white, and "Old Lando" wears almost his exact outfit from Solo: A Star Wars Story.
But are these Star Wars: Episode IX leaks to be believed? For now, who cares? The questions they raise are more interesting than the answers.
On Saturday, a redditor named u/JediPaxis posted in r/StarWarsLeaks, sharing a bunch of images courtesy of an anonymous source that "previously provided me information on previous films" and were "proven to be correct." Of the 17 photos in total, the most interesting ones show costumes for Rey, Lando, Kylo Ren, and a new character played by Dominic Monaghan who appears to be part of the Resistance.
JediPaxis states the leaked images corroborate other previous rumors, including ones involving Rey's and Lando's costumes on Making Star Wars. They believe this "lends credibility" to both Making Star Wars and their source, who allegedly shared these images before Making Star Wars ran their stories.
You can see the full image in JediPaxis' Reddit thread here and in the embed below. We also break down some of the most interesting things the leak reveals with the film's biggest characters.
r/StarWarsLeaks
Dominic Monaghan's Role Revealed?
We knew the Lost and Lord of the Rings actor would appear in Star Wars: Episode IX, but his exact role was a mystery — until now. If this leak is to be believed, than Monaghan is set to play a new member of the Resistance, suggesting that our heroes will have some success in rallying new allies to their side.
Then again, it's possible he could be a double agent, infiltrating the Resistance on behalf of the First Order. That's just us speculating, but anything's possible when it comes to these new characters.
Kylo Ren's Helmet Is Hot Fire
Kylo Ren (Adam Driver) smashed his helmet in a thematically engrossing fit of rage in Star Wars: The Last Jedi. But the new photos show his Knights of Ren helmet reassembled, held together by red paste that almost looks like hot lava. Gotta admit, "glued by lava" sounds like the most heavy metal thing of all time.
Old Man Lando, in Yellow
Billy Dee Williams is putting the cape back on to play Lando Calrissian in Star Wars: Episode IX. But based on the reference photos, that's almost a literal statement, as Lando's costume is visually identical to Donald Glover's costume from 2018's Solo: A Star Wars Story.
Making Star Wars previously reported this would be the case, with the differences being that Williams will wear "a fancy blue cape" and carry a gentleman's cane.
"Adventure Poe" Goes Uncharted
In another photo from the leak, Oscar Isaac's Poe Dameron wears a new costume that is nicknamed "Adventure Poe." With a leather bandolier, cargo pants, and a neck scarf, fans of the Uncharted video games can't help but see Poe's resemblance to Nathan Drake.
White Rey-nger
Rey's transformation is complete. Reminiscent of Luke Skywalker's costume evolution in the original trilogy, Rey's white costume in the new Star Wars suggests she will complete her training into a Jedi Knight after spending The Last Jedi in the "gray" space between the Light and Dark sides.
What's interesting is that the Jedi mostly wore warm earth tones, such as beige, tan, and brown. And Luke, of course, wore black in Return of the Jedi, which according to George Lucas was to emphasize Luke's resemblance to his father.
So is Rey supposed to resemble anyone in particular in Star Wars: Episode IX? Probably not. But if Rey is actually capable of doing a bunch of cool, badass Jedi powers in the next film, don't be surprised if the movie treats her like a superhero Messiah.
Star Wars: Episode IX will be released in theaters on December 20, 2019.
Correction 2/11/19: A previous version of this article confused Dominic Monaghan with Domhnall Gleeson (General Hux). We regret this error.


SIBLINGS Rebecca and Matthew Rigg will both be vying for national table tennis honours on Aprl 27 – albeit over 60 miles apart.
Rebecca, 14, won the Cumbria Schools under-15 individual tournament in February and will now be representing the county at the national finals in Wolverhampton.
On the same day, elder brother Matthew, 16, will be in action in Nottingham in the Association of Colleges National Championship after finishing runner-up in the North-West area tournament last November.
Away from school, both play in the Barrow Table Tennis league for Furness Cricket Club Juniors.
They thanked coach John Harrison for his time and commitment to the club, and their sponsor Cumbria Autos.


text:
Colorado Town Is Being Used For Wild Sex Parties For Baby Boomers
Shutterstock/ Arina P Habich
Gabrielle Okun Reporter
April 25, 2018 11:19 AM ET
A house in a Colorado town is being used for wild sex parties for baby boomers, much to the dismay of locals, The New York Post reported Tuesday.
A 7,500-square-foot-house known as "Thunderstorm Play Palace" in Castle Rock, a suburban Colorado town about 20 miles from Denver, is the location for the sex parties, and is causing disturbances for frustrated neighbors.
The house has a "large open playroom" and "four large areas for mingling," according to Newsweek. The attendees are required to bring their own condoms and give a donation of $70 for couples and single men, but only $20 for women arriving stag to the invite-only events. One event had 400 people on the invite list. Of the invitees, 87 people sent a "yes" RSVP.
Frustrated neighbors claimed that they heard "disturbing sounds" as well as trouble finding parking spots in their fancy neighborhood, according to Fox31.
"Some of them are so old that they struggled walking up the stairs," one neighbor told Fox31.
The party organizer said that he received harassment from his neighbors. He claimed that he installed sound-proof walls so that children cannot hear what is going on. However, one neighbor said, "You can hear people doing what they're doing."
Party attendees argue that the events are consensual and that they are doing nothing wrong. "Do you get to see naked people and do you get to have live porn around you? Yes. And is there like sexy people? It's awesome," Jen Malmon told Fox31. The guest claimed that several thousand people are a part of this "lifestyle community" in the Denver area.
Police say that he is allowed to throw the parties because he is only taking donations and the parties are in a private location, Fox31 added.
Sexually transmitted diseases for baby boomers has increased dramatically. A 2012 study by the Health and Social Care Information Centre taken over the span of five years showed that genital herpes increased by 50 percent for men over the age of 65, the Economist reported.
Follow Gabrielle on Twitter
Send tips to gabrielle@dailycallernewsfoundation.org.
Tags : castle rock colorado
Gabrielle Okun


text:
import React from 'react';
import PropTypes from 'prop-types';
import { Dropdown, DropdownToggle, DropdownMenu, DropdownItem } from 'reactstrap';
import { gettext, siteRoot, orgID, username } from '../../utils/constants';
import { seafileAPI } from '../../utils/seafile-api';
import { Utils } from '../../utils/utils';
import toaster from '../../components/toast';
import UserStatusEditor from '../../components/select-editor/user-status-editor';

const propTypes = {
  user: PropTypes.object,
  currentTab: PropTypes.string,
  toggleRevokeAdmin: PropTypes.func,
  isItemFreezed: PropTypes.bool.isRequired,
  toggleDelete: PropTypes.func.isRequired,
  onFreezedItem: PropTypes.func.isRequired,
  onUnfreezedItem: PropTypes.func.isRequired,
};

class UserItem extends React.Component {

  constructor(props) {
    super(props);
    this.state = {
      highlight: false,
      showMenu: false,
      currentStatus: this.props.user.is_active ? 'active' : 'inactive',
      isItemMenuShow: false
    };

    this.statusArray = ['active', 'inactive'];
  }

  onMouseEnter = () => {
    if (!this.props.isItemFreezed) {
      this.setState({
        showMenu: true,
        highlight: true,
      });
    }
  }

  onMouseLeave = () => {
    if (!this.props.isItemFreezed) {
      this.setState({
        showMenu: false,
        highlight: false
      });
    }
  }

  toggleDelete = () => {
    const email = this.props.user.email;
    this.props.toggleDelete(email);
  }

  toggleResetPW = () => {
    const { email, name } = this.props.user;
    toaster.success(gettext('Resetting user\'s password, please wait for a moment.'));
    seafileAPI.orgAdminResetOrgUserPassword(orgID, email).then(res => {
      let msg;
      msg = gettext('Successfully reset password to %(passwd)s for user %(user)s.');
      msg = msg.replace('%(passwd)s', res.data.new_password);
      msg = msg.replace('%(user)s', name);
      toaster.success(msg, {
        duration: 15
      });
    }).catch(error => {
      let errMessage = Utils.getErrorMsg(error);
      toaster.danger(errMessage);
    });
  }

  toggleRevokeAdmin = () => {
    const email = this.props.user.email;
    this.props.toggleRevokeAdmin(email);
  }

  changeStatus = (st) => {
    let isActive;
    if (st == 'active') {
      isActive = 'true';
    } else {
      isActive = 'false';
    }

    seafileAPI.orgAdminChangeOrgUserStatus(orgID, this.props.user.email, isActive).then(res => {
      this.setState({
        currentStatus: isActive == 'true' ? 'active' : 'inactive',
        highlight: false,
        showMenu: false,
      });
      toaster.success(gettext('Edit succeeded.'));
    }).catch(error => {
      let errMessage = Utils.getErrorMsg(error);
      if (errMessage === gettext('Error')) {
        errMessage = gettext('Edit failed.');
      }
      toaster.danger(errMessage);
    });
  }

  onDropdownToggleClick = (e) => {
    e.preventDefault();
    this.toggleOperationMenu(e);
  }

  toggleOperationMenu = (e) => {
    e.stopPropagation();
    this.setState(
      {isItemMenuShow: !this.state.isItemMenuShow }, () => {
        if (this.state.isItemMenuShow) {
          this.props.onFreezedItem();
        } else {
          this.setState({
            highlight: false,
            showMenu: false,
          });
          this.props.onUnfreezedItem();
        }
      }
    );
  }

  getQuotaTotal = (data) => {
    switch (data) {
      case -1: // failed to fetch quota
        return gettext('Failed');
      case -2:
        return '--';
      default: // data > 0
        return Utils.formatSize({bytes: data});
    }
  }

  render() {
    let { user, currentTab } = this.props;
    let href = siteRoot + 'org/useradmin/info/' + encodeURIComponent(user.email) + '/';
    let isOperationMenuShow = (user.email !== username)  && this.state.showMenu;
    let isEditIconShow = isOperationMenuShow;
    return (

          {user.name}

          <UserStatusEditor
            isTextMode={true}
            isEditIconShow={isEditIconShow}
            currentStatus={this.state.currentStatus}
            statusArray={this.statusArray}
            onStatusChanged={this.changeStatus}
          />

        {`${Utils.formatSize({bytes: user.quota_usage})} / ${this.getQuotaTotal(user.quota_total)}`}

          {user.ctime} /

          {user.last_login ? user.last_login : '--'}

          {isOperationMenuShow && (
            <Dropdown isOpen={this.state.isItemMenuShow} toggle={this.toggleOperationMenu}>
              <DropdownToggle
                tag="a"
                className="attr-action-icon fas fa-ellipsis-v"
                title={gettext('More Operations')}
                data-toggle="dropdown"
                aria-expanded={this.state.isItemMenuShow}
                onClick={this.onDropdownToggleClick}
              />
              <DropdownMenu>
                <DropdownItem onClick={this.toggleDelete}>{gettext('Delete')}</DropdownItem>
                <DropdownItem onClick={this.toggleResetPW}>{gettext('ResetPwd')}</DropdownItem>
                {currentTab == 'admins' && <DropdownItem onClick={this.toggleRevokeAdmin}>{gettext('Revoke Admin')}</DropdownItem>}
              </DropdownMenu>
            </Dropdown>
          )}

    );
  }
}

UserItem.propTypes = propTypes;

export default UserItem;