Yorkshire features over 800 attractions, from World Heritage Sites to mining museums, ruined castles and abbeys, to hands on museums. You'll find serene gardens and unique breweries, thrilling rides and industrial heritage. From attractions and museums to sports and galleries, from the history-lover to the inquisitive child, there's something for everyone.
Every month there are events all over Yorkshire, whether you are looking for a family day out, food festival, live music or a comedy gig Yorkshire.com should be the first place you visit. With listings of the top events and offers you can plan your time in Yorkshire in one place knowing you are getting the most for your money.
Yorkshire accommodation caters for everyone's needs with everything from backpacker's barns to top-class accommodation, offering five-star service and facilities. Discover large city hotels, family run guesthouses along the coast, countryside campsites or self-catering town houses.


Acupuncture Treatment which has been known as a Chinese medicine is responsible for numerous natural therapies, and is considered one of the best therapies in the market today. Essentially, acupuncture works on the theory that energy centers are contained by the body at special, strategic points. These energy centers are subsequently linked to some particular element of the body. If you have a sore knee, for instance, then the power center links would be located by the acupuncturist to that knee. This may well be found in a completely different portion of the body. That is the point where quite thin needles are then inserted to stimulate the energy center. The effect? By getting the central nervous system through the acupuncture point the pain in your knee is reduced or removed entirely.
Medical therapy from Elledge Chiropractic and Acupuncture Oklahoma City is utilized to take care of many illnesses, but pain relief is the most typical. It's an odd theory – adding needles into your own body to lessen pain! Other research has indicated that acupuncture can assist the immune system by stimulating the production of white blood cells. It is also been proven that Alpha, Beta and Gamma Globulin increase after acupuncture treatment, and these assist in fighting infection and generating immune antibodies. Recently, acupuncture has been utilized to assist people recovering from substance and alcohol dependence. Acupuncture centers around inducing a sense of easiness, and reducing tension, withdrawal symptoms and cravings.
Sports folks in the highest level have turned to acupuncture therapy to greatly help enhance their training and operation. Muscle tension inhibits operation, and acupuncture releases tension in both muscles and the surround tissue, as well enhancing the efficiency of the lymphatic, circulatory and nervous systems. Acupuncture could also be utilized manage pain and to speed up recovery rates from harm.
Allergies additionally react well to acupuncture therapy. Materials that are benign can cause the immune system to overreact, leading to an allergic reaction. Common environmental factors such as pollen, dust and chemicals trigger many allergies. Many individuals also have problems with food allergies, which can be actuated by wheat, milk and shellfish, among other things. In a few sufferers, allergy reaction can lead to extreme symptoms such as joint pain kidney problems and melancholy. Detoxifying the body and strengthening the immune system helps eliminate or reduce allergic reactions.
Many people turn to acupuncture treatment for more serious problems, for example bronchitis, asthma, hypertension and ulcers. The results speak for themselves, although Western medicine struggles to understand how acupuncture manages to not be so ineffective. Occasionally, for more long-term conditions, herbal treatments and massage are used jointly with acupuncture treatment.
Other health conditions that often react well to acupuncture include stress, chronic fatigue syndrome, PMS, menopause and menstruation problems. In the event you're thinking about trying acupuncture treatment, find yourself a reputable local practitioner, then ring and have a chat with them about your health problems. This will give them an opportunity to say if they think you can be helped by acupuncture or not.


Convert 167.93 Centimeter to Meters (cm to m) with our conversion calculator and conversion tables. To convert 167.93 cm to m use direct conversion formula below.
167.93 cm = 1.6793 m.
You also can convert 167.93 Centimeter to other length units.


I Love My Freedom reports, Remember when Kavanaugh was brutally attacked by almost every Democratic Senator when he was falsely accused of sexual assault? Almost every Democrat in Washington, with no hard evidence, was willing to believe a baseless allegation against Brett Kavanagh. These same Democrats seem to have nothing to say about the recent sexual assault allegations against Virginia Democratic Lt. Gov. Justin Fairfax.


text:
The Definition of Bullying for Kids
You are here:HomeThe Definition of Bullying for Kids
What Is the Definition of Bullying?
"Bullying is when you keep picking on someone because you think you're cooler, smarter, stronger or better than them."
How did we come up with this definition?
Let's start with the basics. What exactly is the definition of bullying? Unfortunately there are as many definitions of bullying as there are people talking about it. One definition of bullying of kids is:
Bullying is a form of proactive aggression in which the bullying is unprovoked and the bully initiates the bullying behaviour. (Dodge and Coie, 1987)
Another is:
Bullying involves an imbalance of power between the bully and the victim, is intentionally harmful and occurs repetitively. (Olweus et al., 1999)
A great definition of bullying for kids from stopbullying.gov that incorporates elements of both of these bullying definitions is:
Bullying is unwanted, aggressive behavior among school aged children that involves a real or perceived power imbalance. The behavior is repeated, or has the potential to be repeated, over time. Bullying includes actions such as making threats, spreading rumors, attacking someone physically or verbally, and excluding someone from a group on purpose.
To put this into a more kid-friendly definition of bullying, you could say that:
Repetition and an Imbalance of Power Make Bullying Unique
There are two components in the above definitions of bullying for kids that make bullying unique.
Bullying is a repetitive act that occurs over time. This differentiates bullying from aggressive acts that occur only once.
Bullying involves an imbalance of power between the bully and the victim.
Of course, bullies need not be physically stronger than their victims. Instead, this imbalance of power that occurs in bullying can come from numerous sources including:
Being more popular
Being stronger
Being smarter
Having a higher social status
What is Relational Bullying / Social Bullying?
Bullies, Victims & Bully-Victims: The Problem with the Bully and Victim Labels
Not all victims of bullying play the role of victim their entire time in school. Similarly, not all bullies play the role of bully their entire time in school. In fact, one study done on a middle school showed that 87% of students changed their role over the course of 3 years (Swearer, Cary, & Frazier-Koontz, 2001.)
What's more, a size-able portion of students are both bullied and play the role of bully themselves creating a third category – the bully-victim. In comparison with bullies and victims, bully-victims are at increased changes of developing mood-related disorders like depression and anxiety.
Susan Swearer in her book, Bullying Prevention and Intervention: Realistic Strategies for Schools, suggests that people adopt a terminology that allows for the fact that students can and do move between the roles of bully & victim. Specifically, she recommends using the terms 'students who bully' and 'students who are victimized'.
Find out about Interesting Facts About Bullying for Kids
References for the Definitions of Bullying
Dodge KA, Coie JD. Social-information-processing factors in reactive and proactive aggression in children's peer groups. J Pers Soc Psychol. 1987;53:1146–1158
Olweus, D., Limber, S. P., & Mihalic, S. (1999). The Bullying Prevention Program: Blueprints for Violence Prevention, Vol. 10. Center for the Study and Prevention of Violence: Boulder, CO.

redpajama_set_name: RedPajamaCommonCrawl


Welcome to Client Access. Your content will be uploaded through this link. Please notice that in order to gain access, you must have a pin or password. Due to the respect of full privacy to some clients, not all folders will be accessible.


text:
Palin and Christie had right answers
Updated Oct 10, 2009 ; Posted Oct 10, 2009
By Letters to the Editor/Gloucester County Times
In response to Jack Hannold's Oct. 7 letter about Republican gubernatorial candidate Chris Christie, which made reference to former Alaska Gov. Sarah Palin:
Apparently, Hannold's disdain for Palin is informed only by severely edited interviews she granted as a vice presidential candidate to supposedly unbiased reporters like Charlie Gibson.
I read an unedited transcript of the Gibson-Palin interview and was absolutely astounded at the hatchet job they did. It was despicable.
Palin's complete answers showed her to be quite informed of current events. And her response to the "Do you agree with the Bush Doctrine?" question was entirely appropriate, as there were several aspects of our foreign policy the press had dubbed "The Bush Doctrine."
South Carolina Gov. Mark Sanford, whom Hannold cited along with Palin, and others were entirely correct in their attempt to reject some so-called federal "stimulus" money. Permit me an analogy:
Say someone offered you money, and you wanted to use it to pay off your current mortgage so your future was less debt ridden, but were told, "No, you have to use it as a down payment on a second house, and we'll pick up the mortgage payments for the first two years." If you didn't have a source of income to cover your increased debt load, you'd be an absolute fool to take that deal.
In effect, that's what the Obama administration demanded of the states in exchange for some stimulus funds. So, several states have foolishly put themselves further into debt. That's why Christie also thinks it "makes sense" to reject some of the funds.
I think it makes sense as well.
I know little of Christie's investigation as U.S. attorney of Democrat U.S. Sen. Robert Menendez's real estate income. But which is worse: Launching an investigation on the eve of an election, which Hannold accused Christie of doing? Or, what incumbent Democrat Gov. Jon Corzine did — being the boyfriend of someone (state worker union leader Carla Katz) with whom you would be negotiating contracts as governor, on behalf of the state? How about compounding any possible ethics violations, as Corzine did, by paying Katz or lending her money after their relationship ended?
Perhaps there's no impropriety, but Democrats have demanded, and gotten, the resignations of several Republicans for matters less controversial than the one in which Corzine was involved.
If the Menendez investigation was the "most outrageous" thing Christie has done, he's a step above Corzine and most other politicians.
One last thing: When are liberals like Hannold going to get over their "Bush Derangement Syndrome"? George Bush is no longer the president. Stop blaming him for everything.
Gregg Helsel
Woolwich Township


text:
All female CS:GO tournament, "DreamHack Showdown", at DreamHack Valencia
Competition, CS:GO, Events, Interviews
Girl power is ever-present in the news today with feminism and women's success frequently topping the charts; its become the way of the world as of late! Well it appears they turned heads once again when it comes to the esports industry with news of a inaugural all-female CS:GO tournament on the cards for the 5-7th July this year.
"DreamHack Showdown" is a partnered event created by DreamHack, ZOWIE and Esports-Management and will feature a very attractive $100,000 prize pool and players who are dedicated and feisty enough to take the title. Involved players have access to specialised promotions and event attractions throughout and there is to be a total of 8 competing teams bringing their best of CS:GO skills to the stage.
Before we get too carried away in the excitement of this tournament, competing teams will have to go head to head beforehand at the LAN Qualifiers which is held in Asia, or the online version which serves the European and the North American region. The two split online divisions are managed by Esport-Management and scheduled to take place on the 8th and 9th of June for NA and EU and it is the surviving 8 teams that venture on to the DreamHack Showdown and battle head-to-head in Valencia.
DreamHack's AB Co-CEO, Mr Marcus Lindmark, spoke about the inspirational message that this tournament hopes to bring competing, female gamers across the world:
"Inclusivity at our events is a huge part of DreamHack – we aim to be the esports and gaming festival where all groups feel welcome […] DreamHack Showdown is a step to help create inspirational moments for aspiring female esports competitors worldwide."
This comment was addressed by the VP of Global Marketing for Esport-Management (EM), Ms Katherine Amoukhteh, who speak in-depth about her company views and what is especially important to EM in this case:
"We believe in an esports ecosystem where every gamer can embark on a path to become a competitive gamer in a professional, supportive environment, and DreamHack Showdown is an opportunity to show this on multiple levels: to celebrate women currently in the gaming industry, inspire those who desire to participate, and – through our platform – equip them with the tools to become the next champions. […] Our focus is on supporting esports at the grassroots level and creating diversity in exports through partnering on industry- changing initiatives like DreamHack Showdown."
One of the involved partners that are making this tournament possible is ZOWIE. A company who strongly believe in equal playing opportunities and previously announced their intention to host ZOWIE DIVINA Women's Asian CS:GO Championship in Shanghai, China between the 20th-23rd of June this year. ZOWIE are responsible for serving the Asian LAN Qualifying round and therefore responsible for sending the best two teams to DreamHack Showdown.
Director of Esports for BenQ, Mr Chris Lin, spoke about ZOWIE's involvement as well as the overall intention and excitement that DreamHack will bring via the Asian connections involved and why this move is essential for women gamers of CS:GO today:
"In 2012, ZOWIE started the DIVINA initiative in support of women's esports. The goal was to provide women with more opportunities to showcase their talent and bridge the gap to pursuing a professional esports career. […] "We are continuing towards that goal, not only with this partnership but by providing teams in the Asian region with the opportunity to compete in a LAN environment. Asia is one of the regions where such exposure is sorely lacking, and we think that the experience teams take back from this will be invaluable in helping build up the scene in their respective countries and communities. We are thrilled to be working with DreamHack to present the most professional CS:GO championship for women to date."
Having more women involved in online gaming and live tournaments is still a refreshing change in the esports industry and we hope that more and more women will take the plunge and put their stamp on what is currently a perceived masculine market.


text:
/sites/all/themes/penton_subtheme_wealthmanagement/images/logos/footer.png
Wealth Management is part of the Informa Connect Division of Informa PLC
Real Estate - WMRE
WMTV
Inside ETFs
Wealth Management Magazine
WMRE Magazine
Wealthies Circle – Digital Forums
Individual Wealth
Webinars & Whitepapers
RIA Edge - Rankings
Building Your Best Advisory Practice
Custom Passive Portfolios
ETF Insights & Perspectives
Helping Advisors Manage Wealth
Retirement Income Center
Strengthen Client Loyalty Resource Center
Marketing Resource Center
Subscribe: WealthManagement
Subscribe: Trusts & Estate
Subscribe: WMRE Magazine
Free Newsletter Sign-up
Financial Planning in the Era of the Great Resignation
What Makes a Successful Advisor Transition
Seven Must Reads for the CRE Industry Today (Jan. 14, 2022)
Warren Renews Criticism of Private Equity's Role in Housing
The 10 Best and 10 Worst States in Which to Retire in 2021
Poll: 15 Classic Books on Investing and the Markets
25 U.S. Markets Adding the Most Multifamily Units This Year
Fifteen Must-Listen Business Podcasts for Advisors
Halfpoint/iStock/Getty Images
Property Types>Multifamily
Apartment Owners Attempt to Accommodate the WFH Lifestyle
More outside space and on-site co-working amenities are now being incorporated into multifamily properties.
Jenn Elliot | Jun 08, 2021
A recent headline on Bloomberg read, "Employees are quitting instead of giving up working from home."
The article, which highlighted a handful of white-collar Americans who walked away from their jobs when their employers required them to return to the office, supports the notion that work from home (WFH) might be here to stay, at lease for some employees.
Related: A Faster Than Expected "Return to Office" Rollout Is Boosting Investors' Confidence
A recent Harris Poll found that 40 percent of Americans prefer to work from home full time and another 35 percent are seeking a hybrid of WFH and office days. Only one in four respondents wanted to go back to the office full time.
Most of the WFH discussion, as it relates to real estate, has focused on its impact on the office sector and decreased demand for office space. While "death of the office" conversations are no doubt overexaggerated, they also ignore another property sector that has been impacted by WFH: multifamily.
Related: Apartment Renters' Shifted Amenities Preferences Are Likely to Last After COVID-19
Renters, even those who work from home only part time, are re-evaluating where they want to live, how much space they need and the amenities they require. And multifamily owners and investors are re-evaluating too, taking shifting renter preferences into account and positioning their properties to accommodate WFH.
"WFH or work-from-anywhere was a trend that we noticed pre-pandemic," says Michael H. Zaransky, managing principal of MZ Capital Partners, a Northbrook, Ill.-based multifamily owner and developer. "The pandemic acted as an accelerator."
Early in the pandemic there was a lot of buzz about WFH and people moving out of urban areas and into suburbs, or moving from larger cities to smaller cities in other states. Faced with outbreaks, layoffs and shutdowns, city residents began paying more attention to costs and density to facilitate social distancing.
"Extended WFH policies, especially for workers with no return to office in sight, have driven many from larger gateway markets (New York City, Los Angeles, San Francisco) to smaller, secondary cities (Austin, Denver, Phoenix, Raleigh) where the cost of living is lower and the overall quality of life is higher," says Matthew Gorelik, CEO of Township Capital, a Los Angeles-based real estate investment manager. (Although this is a trend that might have been a natural extension of millennials already planning to move as they started their own families and was accelerated, rather than sparked, by the pandemic, according to some industry sources).
For the moment, investors are following residents. Gorelik has seen a shift in investor focus toward secondary and tertiary markets, particularly in Sunbelt states "where laws are more favorable to landlords and COVID restrictions have been less severe on day-to-day life."
But it's impossible to know how long this migration trend will last or how permanent the relocations will be.
"It is unclear if the transplants will like the slower pace of tier-two cities," says Brian Zrimsek, industry principal with real estate technology firm MRI Software. "Maybe they stick; maybe it will be more like the old sitcom 'Green Acres'—New York is where I'd rather be!"
Growing demand at suburban properties
With thirty-two percent of adults still working from home full time and another 21 percent commuting to the office occasionally, according to the Harris Poll, renters are looking for communities that offer a location that can accommodate their new lifestyle and help them be successful outside of an office.
"The greatest impact that we've seen so far is a shift in consumer preference towards more suburban product," Gorelik says.
Part of the appeal of suburban properties is financial—these units typically cost less on a per square foot basis,—but of equal importance is the surrounding environment. Apartments close to parks and greenbelts, where residents can get out of their apartments and enjoy some nature and fresh air, are particularly desirable.
"I do think we are going to see is an increased demand for garden-style product where consumers have the kinds of amenities that are more akin to those of a single-family property (more space for kids and pets)," Gorelik points out. "They serve as a great intermediary product for young families who need a little more space and still want easy access to the city, but aren't yet in the market for home ownership."
Larger floorplans, more bedrooms
Certain floorplans are more appealing for people who work from home, according to experts. They want more space because they're spending more time at home, and as a result, they're seeking floorplans with a dedicated study or den area for a desk.
Some renters may have had this space at the onset of the pandemic; others didn't. Things often get complicated if two people are forced to work from home in the same space. "One- and two-bedroom units fell out of favor toward the start of the pandemic, but once things settled a bit, they regained their popularity," Zrimsek says. "This could indicate folks trading up for more space for work from home. Very attractive pricing, relative to pre-pandemic levels, also contributes, as folks can get more for their money. They also could be doubling up to lower individual costs."
Two-bedroom, one-bath units are leasing up quickly, according to Albert Lord, founder and CEO of Lexerd Capital Management. The Summit, N.J.-based real estate firm primarily sponsors investments in opportunistic multifamily properties and has managed over $1 billion in assets since its founding.
"In the past, a single bathroom was a problem for some with roommates or children," Lord notes. "Now, the second bedroom is seen as a place of work for singles or a couple. WFH renters no longer need to pay for a second un-used bathroom."
Zrimsek expects renters that have certainty about work from home to look for more space, for example, by moving from studio to a one-bedroom or from a one-bedroom to a two-bedroom. However, he does acknowledge the limitations of an 800-sq.-ft. unit to address all WFH needs.
That's why many architects and owners are evaluating units that include home office space, such as small workstations and Zoom rooms. In fact, Lord predicts that a 200-sq.-ft. living room area of the past will likely become a 150-sq.-ft. gathering space and a 50-sq.-ft. WFH space, partially or fully separated from the other spaces.
Owners are also touting outdoor space as a perk for those who work from home. Renters covet apartment balconies that are large enough for a café table so they can work outside or take a break from their laptops. Likewise, outdoor entertaining areas such as patios, firepits or pergolas are appealing for a change of scenery.
WFH amenities
Renters still want community amenities such as fitness centers and pools, but other amenities such as movie theaters, tanning beds and wine tasting rooms are far less appealing for WFH residents. Instead, they're seeking affordable access to high-speed Internet and working space outside of their units.
Because office workers are used to (some would say spoiled) by fast and reliable Internet access, their homes must offer the same. And they're not satisfied with only having Internet access in their units; they want it while they lounge beside the pool, hang out in the clubhouse and relax on bench in the dog park.
And now that large global companies might be shifting their office occupier strategy to incorporate flexible co-working space because their employees want it, many multifamily owners are doing the same thing. Instead of a movie theater or game room, owners repurposing amenity space to accommodate co-working and residents who work from home.
These on-property workspaces serve as a compromise between a desk in the corner of the bedroom and an outside office. Multifamily experts expect that these types of spaces will have greater appeal than general meeting/party spaces. Some are planning to monetize the spaces instead of offering them as a free amenity by requiring reservations and equipping them with the latest technology and even higher speed internet.
"Highest speed Internet connections, co-working spaces in the common areas and private work-from-home suites are in high demand and new must-have amenities," Zaransky says.
TAGS: Property Management Leasing News


89 x 101 cm - 35 x 39 3/4 in.
Atelier Degas - Vente Degas, 1918, I, n° 95 (repr.) - Ambroise Vollard, Paris - Charles S. Payson, New York - Collection particulière, New York.
New York, Metropolitan Museum, 1968, n° 53 - Tokyo, Kyoto, Fukuoka, 1976-1977, n° 9 (repr.) - Kyoto, Tokyo, 1980, n° 18 (repr.) - Washington, National Gallery, 1998, n° 30, repr. p. 70.
Lemoisne, 1946-1949, II, n° 171, repr. p. 87 - Lemoisne, 1954, repr. face p. 40 - Cabanne, 1957, pl. 31 - Dunlop, 1979, n° 83, repr. p. 91 - New York, Metropolitan Museum, 1993, p. 74-75.


The following is an interview with Christoff Visscher, founder of the geek-inspired candle company, Cantrip Candles. In this interview, Fanbase Press Editor-in-Chief Barbra Dillon chats with Visscher about the inspiration behind his candle line, the process of selecting and designing new scents, the products currently available (that would be a great fit for your next D&D campaign!), and more!
Barbra Dillon, Fanbase Press Editor-in-Chief: For those who may be unfamiliar, what can you tell us about Cantrip Candles, and what inspired you to create your own line of candles?
Christoff Visscher: Cantrip Candles are 100% soy wax candles designed for use with tabletop games. Each candle is scented to smell like a location or region in a fantasy world, so that when you light them, they can add further immersion to your game.
I actually started making candles as a hobby just about 2 years ago. I think I saw a random video on Facebook that inspired me to try making them myself. At the same time, I had just started getting into Dungeons and Dragons as a Dungeon Master and was having a blast preparing for games. One evening session got a bit rowdy and someone spilled beer all over the table. The plot happened to take place in a tavern at the time and one of the players said, "Hey, Christoff! You should make a beer candle!" Worlds collided, magic happened, and bam—Cantrip Candles. Although, I've tried the beer candle thing and it's kind of weird.
BD: I can only imagine that making candles is a time-intensive and arduous process! How would you describe your creative process of choosing scents and making candles?
CV: Surprisingly, candle making itself isn't too difficult. On a basic level, it involves melting wax, adding fragrance, and waiting for it to cool. The real challenge comes from the research and preparation that goes into developing scents.
Temperature, fragrance amounts, how fragrances affect each other, and even the type of wick you use all affect the quality of a candle. When you first start out, you have all these different variables, so you just pick somewhere to start experimenting.
There are literally hundreds of scents available, some natural and others artificial. On top of this, you have several companies that provide these scents and some are better than others. So, the first year of creating and experimenting involved me shopping around and comparing leather scents, wine scents, moss scents, etc. It got pretty frustrating for a while, as I wasn't able to come up with fragrance blends that actually smelled like the locations I wanted to create. But as with everything, it just takes patience and perseverance and I eventually began to come up with some pleasingly accurate mixture.
I like to think of it as a 50/50 blend between art and science. You have the limitations of measurements, but the infinite possibilities of imagination.
BD: Give that each candle has its own geeky theme, where do you find inspiration for each candle, and what are some of the available products?
CV: The tabletop games that I play (Dungeons and Dragons, Settlers of Catan, Dead of Winter) are the largest source of inspiration. As I take my party through fields and dungeons, I describe what they see, hear, and smell. These descriptions are necessary for any good Dungeon Master, and they translate perfectly into developing the next candle.
Living in Southern California, I'm often inspired by the variety of nature around me. We are fortunate enough to have mountains, oceans, and forest all within a short drive. For example, "A Walk in The Woods" is inspired by hiking the Griffith Park trails. It's a blend of pine and sandalwood which gives a much dryer and lighter forest fragrance than one would expect if they were smelling a forest in northern Alaska.
I also draw a lot of inspiration from my past. I lived in London for a year and fell absolutely in love with the rainy weather and old architecture. When I developed "Stonemoss Chapel," I wanted to create a deep, rich, mossy fragrance that legitimately smelled like the wet chapel walls I encountered around the city.
BD: What do you feel defines a Cantrip candle?
CV: Oooh… tough question. If we're being honest, there are lots of candles out there. After all, it's an art that's been going for 5000 years.
Cantrip Candles are different because of the ritual that goes into them. You can use them to help create a world that's completely unique. Everything from the accurate fragrance to the thematic design of the packaging adds inspiration and immersion to your game. When you light a Cantrip Candle, you're preparing to set your imagination into overdrive.
BD: Can you give us the inside scoop on any upcoming candle themes or scents?
CV: Of course! On top of the 8 fragrances that we already have, we're going to release a Palace Garden scent in the next few weeks which will be our first floral type. It's a really nice blend of bright flowers, with hints of earthy notes. It was inspired by a recent playthrough of The Legend of Zelda: Ocarina of Time when you first meet Princess Zelda.
We also are working on an oceanside scent and a medieval marketplace scent, but I'm still not satisfied with their realism yet. They should be out before holiday season.
BD: Lastly, what is the best way for our readers to find out more about Cantrip Candles?
CV: We're super active on Instagram and Twitter @cantripcandles. You can also check out our website, www.cantripcandles.com, to order our products, or simply ask us a question. For those of you who would like to know what others think about or products, we've got some really great reviews on our Facebook page!


text:
All posts tagged "RR"
Robin Uthappa Shared An Important Message For His Rajasthan Royals' Teammates
The 13th season of the Indian Premier League is just around the corner and the excitement among the fans is increasing with...
'IPL Edition' Is Trending On Twitter And Fans Are Picking Their Favourites
The new season of Indian Premier League (IPL) is just around the corner and fans are already going gaga about it. The...
These 2 Mistakes Proved Very Costly For Rajasthan Royals
Rajasthan Royals are now officially out of the race of IPL 2018 as they lost the match to Kolkata Knight Riders by 25 runs. The...
Dinesh Karthik Praised This Young Star For KKR's Victory
Last night, Kolkata Knight Riders lived upto the expectations of the jam-packed crowd at Eden Gardens of Kolkata, as they won the match...
RCB Out Of The League, Here's How Twitterati Reacted To RCB's Last Match
Today, Royal Challengers Bangalore not just lost a match but also their chance to play in the playoffs and their hopes to...
Jos Buttler Gets Emotional As He Leaves Rajasthan Royals Mid-Way
The eleventh edition of Indian Premier League is reaching towards it's end. As the league is moving towards the finale the overseas...
Dinesh Karthik Finishes Off In Style, Here's How Twitterati Reacted To The Great Win By KKR
Tonight the match was won by Kolkata Knight Riders beating Rajasthan Royals by 6 wickets at the very famous Eden Gardens of...
Twitterati Can't Stop Praising Kuldeep Yadav After His Amazing Performance Tonight
Tonight the match is hosted at the Eden Garden of Kolkata between Kolkata Knight Riders and Rajasthan Royals. Both the teams are...
Cricketers, Commentators And Fans Can't Stop Praising Jos Buttler On Twitter
Tonight, the match that was hosted by Mumbai Indians at Wankhede Stadium was won by the Rajasthan Royals by 7 wickets. Rajasthan...
From Trolling Stuart Binny To Praising Hardik Pandya Here's How Twitterati Reacted To The First Innings
Tonight, the 47th match of IPL 2018 was hosted by the Mumbai Indians against Rajasthan Royals at Wakhede Stadium of Mumbai. Before the match...


The new 9,000-capacity stage is part of a 10-year sponsorship renewal deal.
Summerfest's U.S. Cellular Connection Stage is getting a built-from-scratch upgrade for 2018, fest officials announced Thursday.
Constructed as part of a 10-year sponsorship renewal deal with U.S. Cellular, the stage will have its back to Lake Michigan, with clearer lakefront and skyline views and an increased capacity of 9,000, said Don Smiley, president and CEO of Summerfest's parent company, Milwaukee World Festival Inc. Festival officials did not give an exact price for the project, but described it as a multimillion-dollar undertaking.
"It's our job as stewards of this property to do the best we can for the infrastructure for this property," Smiley said. "The competition is really global in nature for these bands, whether they're on the ground or whether they're in the amphitheater. ... If you're not going forward, you are absolutely going backward."
The current Connection stage, last upgraded in 1996, will be demolished immediately following the 50th Summerfest run this July, Smiley said. U.S. Cellular is taking the lion's share of the expense, with Eppstein Uhen Architects behind the design.
This video rendering depicts Summerfest's new U.S. Cellular Connection Stage, slated to open in 2018.
At a board of directors meeting Thursday, MWF announced plans to spend $59.1 million on capital expenses from 2017 through 2020. Expenditures include rebuilding the 23,000-capacity Marcus Amphitheater, Summerfest's home for its most famous headliners. The project is still in the early stages, but Smiley told the Journal Sentinel Thursday he hopes the new amphitheater would open by 2020.
In September, Summerfest announced its Miller Lite Oasis stage would be renovated for the 2017 season. It will include a redesigned stage, new side stage bar area, video screen improvements and a new elevated viewing deck. Fest officials also announced in September construction of a new, air-conditioned Summerfest store and plans to reconfigure its marketplace for 2017.
The board of directors also approved the 2017 budget at Thursday's meeting. Milwaukee World Festival is budgeting for a $525,000 profit next year, and projecting a $14.6 million net budget operating income for Summerfest. That's a $163,700 decrease from the year prior, but MWF is planning to spend nearly $600,000 in marketing for Summerfest's 50th, largely offset by sponsorship revenue.
With July 3, a traditionally busy Summerfest date, landing on Summerfest's customary Monday break, attendance projections are flat for next year. Summerfest drew 804,116 people in 2016, a 4.1% increase from the year prior.
Summerfest 2017 will run from June 28 to July 2 and July 4 to 9. Two Marcus Amphitheater headliners — Red Hot Chili Peppers on opening night, and P!nk on July 2 — were announced last month. The vast majority of tickets have been purchased for both shows, Summerfest's Vice President of Entertainment Bob Babisch said at Thursday's board meeting. A third Marcus headliner will be announced Friday.


text:
Atrocity/Crime
Consciousness/Emotion
European War
Pacific War
https://youtu.be/VUKvrNeNgk8 Amahl and the Night Visitors was a one-act production by Gian Carlo Menotti that was the first opera specifically composed for television in America. The story: One night in Judea, a disabled shepherd...
The King and I – Rodgers and Hammerstein
Wikipedia The King and I was a musical by Rodgers and Hammerstein based on Margaret Landon's novel, Anna and the King of Siam derived from the memoirs of a governess to the children of King Mongkut of Siam in the...
Ernie Kovacs Popular TV Comedian
https://youtu.be/U2AWAZ0gojY Ernest Edward Kovacs (1919 – 1962, was a popular American TV comedian, actor, and writer. Often spontaneous, his zany comedy style influenced numerous TV comedy programs for years after his death. Frequently his slapstick humor...
Victor Borge Danish Pianist & Comedian
Victor Borge (born Børge Rosenbaum) was a Danish conductor and pianist whose comic renditions of piano concerts were widely popular in the United States and Europe. Born to two concert musicians, Rosenbaum was a child prodigy pianist. After classical...
https://youtu.be/s9_vnMHYyig Top-grossing American films of 1950 RankTitleStudioBox-office gross rental1King Solomon's MinesMetro-Goldwyn-Mayer$5,047,000[1]2Annie Get Your Gun$4,708,000[1]3Cheaper by the Dozen20th Century Fox$4,425,000[2]4CinderellaWalt Disney/RKO...
Guys and Dolls Award-Winning Broadway Musical
https://youtu.be/SiUK-TDTIpo In 1950 the musical Guys and Dolls premiered on Broadway. The hit show continued for 1,200 performances and in 1951 won the Tony Award for best musical. In 1955 the show was made into a movie starring Marlon...
Al Jolson
https://youtu.be/KD_YRnuuKyY Al Jolson, born Asa Yoelson, was an American singer, comedian, and actor who lived from 1886-1950. In the 1920s, Jolson was immensely popular as America's highest-paid entertainer. In 1927 Jolson starred in The Jazz Singer, the...
Miles Davis explored the trumpet's middle register, experimenting with harmonies and rhythms and varying the phrasing of his improvisations.
https://youtu.be/SKhyLCjIpvw SOURCE: Wikipedia Born Norma Jeane Mortenson in 1926, she began working as a model in 1944 using the name Jean Norman. By 1946, she had appeared on 33 magazine covers for publications such as Pageant, U.S. Camera, Laff, and Peek. In 1946...
Zoo Parade
https://youtu.be/IwDnUeCh35M 1950 Philadelphia Zoo TV commercial Zoo Parade, a popular Sunday afternoon TV show on NBC from 1950-57 was hosted by Zoo director Marlin Perkins. ~ The show was actually shot at Chicago's Lincoln Park Zoo (I couldn't find a short video)....
https://youtu.be/H0cBnWgZOKg First televised by CBS in 1950, Beat the Clock was an American television game show that required its contestants to accomplish various stunts within 60 seconds. Contestants were chosen from the studio audience and usually were...
https://youtu.be/e7hpZbGd2Uw In 1950, the first public demonstration of the RCA system for color television, the all electronic tri-color picture tube, was made at a press conference in Washington, DC. The RCA system was eventually accepted by the...
Arthur Godfrey
https://youtu.be/3FlVhQTIL1Q Sponsored by Lipton Tea, Arthur Godfrey's Talent Scouts was broadcast on CBS radio and television from 1946 until 1958. Godfrey was also hosting Arthur Godfrey and His Friends at the same time. Arthur Godfrey delivered...
https://youtu.be/7eU90nf7xJg Antoine "Fats" Domino's 1950 song "The Fat Man" is widely regarded as the first million-selling Rock 'n Roll record. One of the pioneers of rock and roll music, Domino sold more than 65 million records. LISTEN Fats Domino: 12 Essential...
Bogart on Baseball
https://youtu.be/onojPONm-9A Concerned that the emerging medium of television would hurt ticket receipts, Major League baseball officials produced TV commercials similar to those used to promote movies in the early 1950s.
Kate Smith' s version of Irving Berlin's song God Bless America has been part of American sports tradition for decades. https://youtu.be/-BIoN9bWTMo However, a recent revelation that she also recorded two songs with racist content in the 1930s (That's Why Darkies Were...
R.I.P. Doris Day
https://youtu.be/D0MtzQDltr0 Doris Day, the freckle-faced movie actress whose irrepressible personality and golden voice made her America's top box-office star in the early 1960s, died on Monday at her home in Carmel Valley, Calif. She was 97. ~ NY Times May 13, 2019...
What's My Line
What's My Line? was a game show on the CBS Television Network from 1950 to 1967. Blindfolded celebrity panelists questioned a weekly "mystery guest" to determine his/her employment. Moderated by John Charles Daly, regular panelists included Dorothy Kilgallen, Arlene...
https://youtu.be/Oi6oSjmDV4U https://youtu.be/j11rwc6Sf4o
Premiering on NBC TV in February 1950, Your Show of Shows was a weekly, variety show featuring comedians Sid Caesar and Imogene Coca. https://youtu.be/ZmCCxEUfEsE https://youtu.be/e0iMF6DWpo8
South Pacific on Broadway
In 1949 the book Tales of the South Pacific by James Michener was adapted by Rodgers and Hammerstein into the Broadway musical South Pacific. https://youtu.be/6H3hVAfFcZY In 1958 it was produced as the movie South Pacific starring Rossano Brazzi and Mitzi Gaynor....
Hopalong Cassidy
In 1904 Clarence E. Mulford created the fictional cowboy hero Hopalong Cassidy, in a series of popular short stories and novels based on the character. Early on, Mulford portrayed Cassidy as a rude, dangerous, rough-talking man with a wooden leg that caused him to...
TV Soap Operas
Irna Phillips (Old Magazine Articles) In January 1949 NBC broadcast the first TV daytime soap opera entitled "These Are My Children." Written by long-time radio and screen writer Irna Phillips, the show was broadcast live from Chicago for just fifteen minutes at...
#Death of a Salesman, a play by Arthur Miller, won the Pulitzer prize for drama in 1949.
https://youtu.be/o7A16HvlbQw This clip is from Barsaat, a 1949 Bollywood film directed by Raj Kapoor. The film stars the famous duo of Kapoor and Nargis as well as Prem Nath. Barsaat, one of the first major hit films directed by Kapoor,...
Comments, contributions, corrections, and suggestions are always welcome: Cancel reply
Don't Miss a Post:
Enter your email address to receive notifications of posts.
Privacy | Copyright © 2021 Mark Scott Smith · All rights reserved | Terms
Header Image "Liberation" by Henry Carr


text:
package org.apache.cloudstack.storage.datastore.lifecycle;

import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.inject.Inject;

import org.apache.log4j.Logger;

import org.apache.cloudstack.context.CallContext;
import org.apache.cloudstack.engine.subsystem.api.storage.ClusterScope;
import org.apache.cloudstack.engine.subsystem.api.storage.DataStore;
import org.apache.cloudstack.engine.subsystem.api.storage.HostScope;
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreInfo;
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreLifeCycle;
import org.apache.cloudstack.engine.subsystem.api.storage.PrimaryDataStoreParameters;
import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope;
import org.apache.cloudstack.storage.datastore.db.PrimaryDataStoreDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailVO;
import org.apache.cloudstack.storage.datastore.db.StoragePoolDetailsDao;
import org.apache.cloudstack.storage.datastore.db.StoragePoolVO;
import org.apache.cloudstack.storage.datastore.util.SolidFireUtil;
import org.apache.cloudstack.storage.volume.datastore.PrimaryDataStoreHelper;

import com.cloud.agent.AgentManager;
import com.cloud.agent.api.Answer;
import com.cloud.agent.api.CreateStoragePoolCommand;
import com.cloud.agent.api.DeleteStoragePoolCommand;
import com.cloud.agent.api.ModifyTargetsCommand;
import com.cloud.agent.api.StoragePoolInfo;
import com.cloud.dc.ClusterVO;
import com.cloud.dc.dao.ClusterDao;
import com.cloud.dc.dao.DataCenterDao;
import com.cloud.host.Host;
import com.cloud.host.HostVO;
import com.cloud.host.dao.HostDao;
import com.cloud.hypervisor.Hypervisor.HypervisorType;
import com.cloud.resource.ResourceManager;
import com.cloud.storage.Storage.StoragePoolType;
import com.cloud.storage.StorageManager;
import com.cloud.storage.StoragePool;
import com.cloud.storage.StoragePoolAutomation;
import com.cloud.storage.StoragePoolHostVO;
import com.cloud.storage.VMTemplateStoragePoolVO;
import com.cloud.storage.dao.StoragePoolHostDao;
import com.cloud.template.TemplateManager;
import com.cloud.user.Account;
import com.cloud.user.AccountDetailsDao;
import com.cloud.user.AccountVO;
import com.cloud.user.dao.AccountDao;
import com.cloud.utils.db.GlobalLock;
import com.cloud.utils.exception.CloudRuntimeException;

public class SolidFireSharedPrimaryDataStoreLifeCycle implements PrimaryDataStoreLifeCycle {
    private static final Logger LOGGER = Logger.getLogger(SolidFireSharedPrimaryDataStoreLifeCycle.class);

    @Inject private AccountDao accountDao;
    @Inject private AccountDetailsDao accountDetailsDao;
    @Inject private AgentManager agentMgr;
    @Inject private ClusterDao clusterDao;
    @Inject private DataCenterDao zoneDao;
    @Inject private HostDao hostDao;
    @Inject private PrimaryDataStoreDao primaryDataStoreDao;
    @Inject private PrimaryDataStoreHelper primaryDataStoreHelper;
    @Inject private ResourceManager resourceMgr;
    @Inject private StorageManager storageMgr;
    @Inject private StoragePoolAutomation storagePoolAutomation;
    @Inject private StoragePoolDetailsDao storagePoolDetailsDao;
    @Inject private StoragePoolHostDao storagePoolHostDao;
    @Inject private TemplateManager tmpltMgr;

    // invoked to add primary storage that is based on the SolidFire plug-in
    @Override
    public DataStore initialize(Map<String, Object> dsInfos) {
        final String CAPACITY_IOPS = "capacityIops";

        String url = (String)dsInfos.get("url");
        Long zoneId = (Long)dsInfos.get("zoneId");
        Long podId = (Long)dsInfos.get("podId");
        Long clusterId = (Long)dsInfos.get("clusterId");
        String storagePoolName = (String)dsInfos.get("name");
        String providerName = (String)dsInfos.get("providerName");
        Long capacityBytes = (Long)dsInfos.get("capacityBytes");
        Long capacityIops = (Long)dsInfos.get(CAPACITY_IOPS);
        String tags = (String)dsInfos.get("tags");
        @SuppressWarnings("unchecked")
        Map<String, String> details = (Map<String, String>)dsInfos.get("details");

        if (podId == null) {
            throw new CloudRuntimeException("The Pod ID must be specified.");
        }

        if (clusterId == null) {
            throw new CloudRuntimeException("The Cluster ID must be specified.");
        }

        String storageVip = SolidFireUtil.getStorageVip(url);
        int storagePort = SolidFireUtil.getStoragePort(url);

        if (capacityBytes == null || capacityBytes <= 0) {
            throw new IllegalArgumentException("'capacityBytes' must be present and greater than 0.");
        }

        if (capacityIops == null || capacityIops <= 0) {
            throw new IllegalArgumentException("'capacityIops' must be present and greater than 0.");
        }

        HypervisorType hypervisorType = getHypervisorTypeForCluster(clusterId);

        if (!isSupportedHypervisorType(hypervisorType)) {
            throw new CloudRuntimeException(hypervisorType + " is not a supported hypervisor type.");
        }

        String datacenter = SolidFireUtil.getValue(SolidFireUtil.DATACENTER, url, false);

        if (HypervisorType.VMware.equals(hypervisorType) && datacenter == null) {
            throw new CloudRuntimeException("'Datacenter' must be set for hypervisor type of " + HypervisorType.VMware);
        }

        PrimaryDataStoreParameters parameters = new PrimaryDataStoreParameters();

        parameters.setType(getStorageType(hypervisorType));
        parameters.setZoneId(zoneId);
        parameters.setPodId(podId);
        parameters.setClusterId(clusterId);
        parameters.setName(storagePoolName);
        parameters.setProviderName(providerName);
        parameters.setManaged(false);
        parameters.setCapacityBytes(capacityBytes);
        parameters.setUsedBytes(0);
        parameters.setCapacityIops(capacityIops);
        parameters.setHypervisorType(hypervisorType);
        parameters.setTags(tags);
        parameters.setDetails(details);

        String managementVip = SolidFireUtil.getManagementVip(url);
        int managementPort = SolidFireUtil.getManagementPort(url);

        details.put(SolidFireUtil.MANAGEMENT_VIP, managementVip);
        details.put(SolidFireUtil.MANAGEMENT_PORT, String.valueOf(managementPort));

        String clusterAdminUsername = SolidFireUtil.getValue(SolidFireUtil.CLUSTER_ADMIN_USERNAME, url);
        String clusterAdminPassword = SolidFireUtil.getValue(SolidFireUtil.CLUSTER_ADMIN_PASSWORD, url);

        details.put(SolidFireUtil.CLUSTER_ADMIN_USERNAME, clusterAdminUsername);
        details.put(SolidFireUtil.CLUSTER_ADMIN_PASSWORD, clusterAdminPassword);

        if (capacityBytes < SolidFireUtil.MIN_VOLUME_SIZE) {
            capacityBytes = SolidFireUtil.MIN_VOLUME_SIZE;
        }

        long lMinIops = 100;
        long lMaxIops = 15000;
        long lBurstIops = 15000;

        try {
            String minIops = SolidFireUtil.getValue(SolidFireUtil.MIN_IOPS, url);

            if (minIops != null && minIops.trim().length() > 0) {
                lMinIops = Long.parseLong(minIops);
            }
        } catch (Exception ex) {
            LOGGER.info("[ignored] error getting Min IOPS: " + ex.getLocalizedMessage());
        }

        try {
            String maxIops = SolidFireUtil.getValue(SolidFireUtil.MAX_IOPS, url);

            if (maxIops != null && maxIops.trim().length() > 0) {
                lMaxIops = Long.parseLong(maxIops);
            }
        } catch (Exception ex) {
            LOGGER.info("[ignored] error getting Max IOPS: " + ex.getLocalizedMessage());
        }

        try {
            String burstIops = SolidFireUtil.getValue(SolidFireUtil.BURST_IOPS, url);

            if (burstIops != null && burstIops.trim().length() > 0) {
                lBurstIops = Long.parseLong(burstIops);
            }
        } catch (Exception ex) {
            LOGGER.info("[ignored] error getting Burst IOPS: " + ex.getLocalizedMessage());
        }

        if (lMinIops > lMaxIops) {
            throw new CloudRuntimeException("The parameter '" + SolidFireUtil.MIN_IOPS + "' must be less than or equal to the parameter '" + SolidFireUtil.MAX_IOPS + "'.");
        }

        if (lMaxIops > lBurstIops) {
            throw new CloudRuntimeException("The parameter '" + SolidFireUtil.MAX_IOPS + "' must be less than or equal to the parameter '" + SolidFireUtil.BURST_IOPS + "'.");
        }

        if (lMinIops != capacityIops) {
            throw new CloudRuntimeException("The parameter '" + CAPACITY_IOPS + "' must be equal to the parameter '" + SolidFireUtil.MIN_IOPS + "'.");
        }

        if (lMinIops > SolidFireUtil.MAX_MIN_IOPS_PER_VOLUME) {
            throw new CloudRuntimeException("This volume's Min IOPS cannot exceed " + NumberFormat.getInstance().format(SolidFireUtil.MAX_MIN_IOPS_PER_VOLUME) + " IOPS.");
        }

        if (lMaxIops > SolidFireUtil.MAX_IOPS_PER_VOLUME) {
            throw new CloudRuntimeException("This volume's Max IOPS cannot exceed " + NumberFormat.getInstance().format(SolidFireUtil.MAX_IOPS_PER_VOLUME) + " IOPS.");
        }

        if (lBurstIops > SolidFireUtil.MAX_IOPS_PER_VOLUME) {
            throw new CloudRuntimeException("This volume's Burst IOPS cannot exceed " + NumberFormat.getInstance().format(SolidFireUtil.MAX_IOPS_PER_VOLUME) + " IOPS.");
        }

        details.put(SolidFireUtil.MIN_IOPS, String.valueOf(lMinIops));
        details.put(SolidFireUtil.MAX_IOPS, String.valueOf(lMaxIops));
        details.put(SolidFireUtil.BURST_IOPS, String.valueOf(lBurstIops));

        SolidFireUtil.SolidFireConnection sfConnection = new SolidFireUtil.SolidFireConnection(managementVip, managementPort, clusterAdminUsername, clusterAdminPassword);

        SolidFireCreateVolume sfCreateVolume = createSolidFireVolume(sfConnection, storagePoolName, capacityBytes, lMinIops, lMaxIops, lBurstIops);

        SolidFireUtil.SolidFireVolume sfVolume = sfCreateVolume.getVolume();

        String iqn = sfVolume.getIqn();

        details.put(SolidFireUtil.VOLUME_ID, String.valueOf(sfVolume.getId()));

        parameters.setUuid(iqn);

        if (HypervisorType.VMware.equals(hypervisorType)) {
            String datastore = iqn.replace("/", "_");
            String path = "/" + datacenter + "/" + datastore;

            parameters.setHost("VMFS datastore: " + path);
            parameters.setPort(0);
            parameters.setPath(path);

            details.put(SolidFireUtil.DATASTORE_NAME, datastore);
            details.put(SolidFireUtil.IQN, iqn);
            details.put(SolidFireUtil.STORAGE_VIP, storageVip);
            details.put(SolidFireUtil.STORAGE_PORT, String.valueOf(storagePort));
        }
        else {
            parameters.setHost(storageVip);
            parameters.setPort(storagePort);
            parameters.setPath(iqn);
        }

        ClusterVO cluster = clusterDao.findById(clusterId);

        GlobalLock lock = GlobalLock.getInternLock(cluster.getUuid());

        if (!lock.lock(SolidFireUtil.LOCK_TIME_IN_SECONDS)) {
            String errMsg = "Couldn't lock the DB on the following string: " + cluster.getUuid();

            LOGGER.debug(errMsg);

            throw new CloudRuntimeException(errMsg);
        }

        DataStore dataStore = null;

        try {
            // this adds a row in the cloud.storage_pool table for this SolidFire volume
            dataStore = primaryDataStoreHelper.createPrimaryDataStore(parameters);

            // now that we have a DataStore (we need the id from the DataStore instance), we can create a Volume Access Group, if need be, and
            // place the newly created volume in the Volume Access Group
            List<HostVO> hosts = hostDao.findByClusterId(clusterId);

            SolidFireUtil.placeVolumeInVolumeAccessGroups(sfConnection, sfVolume.getId(), hosts);

            SolidFireUtil.SolidFireAccount sfAccount = sfCreateVolume.getAccount();
            Account csAccount = CallContext.current().getCallingAccount();

            SolidFireUtil.updateCsDbWithSolidFireAccountInfo(csAccount.getId(), sfAccount, dataStore.getId(), accountDetailsDao);
        } catch (Exception ex) {
            if (dataStore != null) {
                primaryDataStoreDao.expunge(dataStore.getId());
            }

            throw new CloudRuntimeException(ex.getMessage());
        }
        finally {
            lock.unlock();
            lock.releaseRef();
        }

        return dataStore;
    }

    private HypervisorType getHypervisorTypeForCluster(long clusterId) {
        ClusterVO cluster = clusterDao.findById(clusterId);

        if (cluster == null) {
            throw new CloudRuntimeException("Cluster ID '" + clusterId + "' was not found in the database.");
        }

        return cluster.getHypervisorType();
    }

    private StoragePoolType getStorageType(HypervisorType hypervisorType) {
        if (HypervisorType.XenServer.equals(hypervisorType)) {
            return StoragePoolType.IscsiLUN;
        }

        if (HypervisorType.VMware.equals(hypervisorType)) {
            return StoragePoolType.VMFS;
        }

        throw new CloudRuntimeException("The 'hypervisor' parameter must be '" + HypervisorType.XenServer + "' or '" + HypervisorType.VMware + "'.");
    }

    private class SolidFireCreateVolume {
        private final SolidFireUtil.SolidFireVolume _sfVolume;
        private final SolidFireUtil.SolidFireAccount _sfAccount;

        SolidFireCreateVolume(SolidFireUtil.SolidFireVolume sfVolume, SolidFireUtil.SolidFireAccount sfAccount) {
            _sfVolume = sfVolume;
            _sfAccount = sfAccount;
        }

        public SolidFireUtil.SolidFireVolume getVolume() {
            return _sfVolume;
        }

        public SolidFireUtil.SolidFireAccount getAccount() {
            return _sfAccount;
        }
    }

    private SolidFireCreateVolume createSolidFireVolume(SolidFireUtil.SolidFireConnection sfConnection,
            String volumeName, long volumeSize, long minIops, long maxIops, long burstIops) {
        try {
            Account csAccount = CallContext.current().getCallingAccount();
            long csAccountId = csAccount.getId();
            AccountVO accountVo = accountDao.findById(csAccountId);

            String sfAccountName = SolidFireUtil.getSolidFireAccountName(accountVo.getUuid(), csAccountId);

            SolidFireUtil.SolidFireAccount sfAccount = SolidFireUtil.getAccount(sfConnection, sfAccountName);

            if (sfAccount == null) {
                long sfAccountNumber = SolidFireUtil.createAccount(sfConnection, sfAccountName);

                sfAccount = SolidFireUtil.getAccountById(sfConnection, sfAccountNumber);
            }

            long sfVolumeId = SolidFireUtil.createVolume(sfConnection, SolidFireUtil.getSolidFireVolumeName(volumeName), sfAccount.getId(), volumeSize,
                    true, null, minIops, maxIops, burstIops);
            SolidFireUtil.SolidFireVolume sfVolume = SolidFireUtil.getVolume(sfConnection, sfVolumeId);

            return new SolidFireCreateVolume(sfVolume, sfAccount);
        } catch (Throwable e) {
            throw new CloudRuntimeException("Failed to create a SolidFire volume: " + e.toString());
        }
    }

    @Override
    public boolean attachHost(DataStore store, HostScope scope, StoragePoolInfo existingInfo) {
        return true;
    }

    @Override
    public boolean attachCluster(DataStore store, ClusterScope scope) {
        PrimaryDataStoreInfo primaryDataStoreInfo = (PrimaryDataStoreInfo)store;

        // check if there is at least one host up in this cluster
        List<HostVO> allHosts = resourceMgr.listAllUpHosts(Host.Type.Routing, primaryDataStoreInfo.getClusterId(),
                primaryDataStoreInfo.getPodId(), primaryDataStoreInfo.getDataCenterId());

        if (allHosts.isEmpty()) {
            primaryDataStoreDao.expunge(primaryDataStoreInfo.getId());

            throw new CloudRuntimeException("No host up to associate a storage pool with in cluster " + primaryDataStoreInfo.getClusterId());
        }

        boolean success = false;

        for (HostVO host : allHosts) {
            success = createStoragePool(host, primaryDataStoreInfo);

            if (success) {
                break;
            }
        }

        if (!success) {
            throw new CloudRuntimeException("Unable to create storage in cluster " + primaryDataStoreInfo.getClusterId());
        }

        List<HostVO> poolHosts = new ArrayList<>();

        for (HostVO host : allHosts) {
            try {
                storageMgr.connectHostToSharedPool(host.getId(), primaryDataStoreInfo.getId());

                poolHosts.add(host);
            } catch (Exception e) {
                LOGGER.warn("Unable to establish a connection between " + host + " and " + primaryDataStoreInfo, e);
            }
        }

        if (poolHosts.isEmpty()) {
            LOGGER.warn("No host can access storage pool '" + primaryDataStoreInfo + "' on cluster '" + primaryDataStoreInfo.getClusterId() + "'.");

            primaryDataStoreDao.expunge(primaryDataStoreInfo.getId());

            throw new CloudRuntimeException("Failed to access storage pool");
        }

        primaryDataStoreHelper.attachCluster(store);

        return true;
    }

    private boolean createStoragePool(HostVO host, StoragePool storagePool) {
        long hostId = host.getId();
        HypervisorType hypervisorType = host.getHypervisorType();
        CreateStoragePoolCommand cmd = new CreateStoragePoolCommand(true, storagePool);

        if (HypervisorType.VMware.equals(hypervisorType)) {
            cmd.setCreateDatastore(true);

            Map<String, String> details = new HashMap<>();

            StoragePoolDetailVO storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.DATASTORE_NAME);

            details.put(CreateStoragePoolCommand.DATASTORE_NAME, storagePoolDetail.getValue());

            storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.IQN);

            details.put(CreateStoragePoolCommand.IQN, storagePoolDetail.getValue());

            storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.STORAGE_VIP);

            details.put(CreateStoragePoolCommand.STORAGE_HOST, storagePoolDetail.getValue());

            storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.STORAGE_PORT);

            details.put(CreateStoragePoolCommand.STORAGE_PORT, storagePoolDetail.getValue());

            cmd.setDetails(details);
        }

        Answer answer = agentMgr.easySend(hostId, cmd);

        if (answer != null && answer.getResult()) {
            return true;
        } else {
            primaryDataStoreDao.expunge(storagePool.getId());

            final String msg;

            if (answer != null) {
                msg = "Cannot create storage pool through host '" + hostId + "' due to the following: " + answer.getDetails();
            } else {
                msg = "Cannot create storage pool through host '" + hostId + "' due to CreateStoragePoolCommand returns null";
            }

            LOGGER.warn(msg);

            throw new CloudRuntimeException(msg);
        }
    }

    @Override
    public boolean attachZone(DataStore dataStore, ZoneScope scope, HypervisorType hypervisorType) {
        return true;
    }

    @Override
    public boolean maintain(DataStore dataStore) {
        storagePoolAutomation.maintain(dataStore);
        primaryDataStoreHelper.maintain(dataStore);

        return true;
    }

    @Override
    public boolean cancelMaintain(DataStore store) {
        primaryDataStoreHelper.cancelMaintain(store);
        storagePoolAutomation.cancelMaintain(store);

        return true;
    }

    // invoked to delete primary storage that is based on the SolidFire plug-in
    @Override
    public boolean deleteDataStore(DataStore dataStore) {
        List<StoragePoolHostVO> hostPoolRecords = storagePoolHostDao.listByPoolId(dataStore.getId());

        HypervisorType hypervisorType = null;

        if (hostPoolRecords.size() > 0 ) {
            hypervisorType = getHypervisorType(hostPoolRecords.get(0).getHostId());
        }

        if (!isSupportedHypervisorType(hypervisorType)) {
            throw new CloudRuntimeException(hypervisorType + " is not a supported hypervisor type.");
        }

        StoragePool storagePool = (StoragePool)dataStore;
        StoragePoolVO storagePoolVO = primaryDataStoreDao.findById(storagePool.getId());
        List<VMTemplateStoragePoolVO> unusedTemplatesInPool = tmpltMgr.getUnusedTemplatesInPool(storagePoolVO);

        for (VMTemplateStoragePoolVO templatePoolVO : unusedTemplatesInPool) {
            tmpltMgr.evictTemplateFromStoragePool(templatePoolVO);
        }

        Long clusterId = null;
        Long hostId = null;

        for (StoragePoolHostVO host : hostPoolRecords) {
            DeleteStoragePoolCommand deleteCmd = new DeleteStoragePoolCommand(storagePool);

            if (HypervisorType.VMware.equals(hypervisorType)) {
                deleteCmd.setRemoveDatastore(true);

                Map<String, String> details = new HashMap<>();

                StoragePoolDetailVO storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.DATASTORE_NAME);

                details.put(DeleteStoragePoolCommand.DATASTORE_NAME, storagePoolDetail.getValue());

                storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.IQN);

                details.put(DeleteStoragePoolCommand.IQN, storagePoolDetail.getValue());

                storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.STORAGE_VIP);

                details.put(DeleteStoragePoolCommand.STORAGE_HOST, storagePoolDetail.getValue());

                storagePoolDetail = storagePoolDetailsDao.findDetail(storagePool.getId(), SolidFireUtil.STORAGE_PORT);

                details.put(DeleteStoragePoolCommand.STORAGE_PORT, storagePoolDetail.getValue());

                deleteCmd.setDetails(details);
            }

            final Answer answer = agentMgr.easySend(host.getHostId(), deleteCmd);

            if (answer != null && answer.getResult()) {
                LOGGER.info("Successfully deleted storage pool using Host ID " + host.getHostId());

                HostVO hostVO = hostDao.findById(host.getHostId());

                if (hostVO != null) {
                    clusterId = hostVO.getClusterId();
                    hostId = hostVO.getId();
                }

                break;
            }
            else {
                if (answer != null) {
                    LOGGER.error("Failed to delete storage pool using Host ID " + host.getHostId() + ": " + answer.getResult());
                }
                else {
                    LOGGER.error("Failed to delete storage pool using Host ID " + host.getHostId());
                }
            }
        }

        if (clusterId != null) {
            ClusterVO cluster = clusterDao.findById(clusterId);

            GlobalLock lock = GlobalLock.getInternLock(cluster.getUuid());

            if (!lock.lock(SolidFireUtil.LOCK_TIME_IN_SECONDS)) {
                String errMsg = "Couldn't lock the DB on the following string: " + cluster.getUuid();

                LOGGER.debug(errMsg);

                throw new CloudRuntimeException(errMsg);
            }

            try {
                long sfVolumeId = getVolumeId(storagePool.getId());

                SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePool.getId(), storagePoolDetailsDao);

                List<SolidFireUtil.SolidFireVag> sfVags = SolidFireUtil.getAllVags(sfConnection);

                for (SolidFireUtil.SolidFireVag sfVag : sfVags) {
                    if (SolidFireUtil.sfVagContains(sfVag, sfVolumeId, clusterId, hostDao)) {
                        SolidFireUtil.removeVolumeIdsFromSolidFireVag(sfConnection, sfVag.getId(), new Long[] { sfVolumeId });
                    }
                }
            }
            finally {
                lock.unlock();
                lock.releaseRef();
            }
        }

        if (hostId != null) {
            handleTargetsForVMware(hostId, storagePool.getId());
        }

        deleteSolidFireVolume(storagePool.getId());

        return primaryDataStoreHelper.deletePrimaryDataStore(dataStore);
    }

    private void handleTargetsForVMware(long hostId, long storagePoolId) {
        HostVO host = hostDao.findById(hostId);

        if (host.getHypervisorType() == HypervisorType.VMware) {
            String storageAddress = storagePoolDetailsDao.findDetail(storagePoolId, SolidFireUtil.STORAGE_VIP).getValue();
            int storagePort = Integer.parseInt(storagePoolDetailsDao.findDetail(storagePoolId, SolidFireUtil.STORAGE_PORT).getValue());
            String iqn = storagePoolDetailsDao.findDetail(storagePoolId, SolidFireUtil.IQN).getValue();

            ModifyTargetsCommand cmd = new ModifyTargetsCommand();

            List<Map<String, String>> targets = new ArrayList<>();

            Map<String, String> target = new HashMap<>();

            target.put(ModifyTargetsCommand.STORAGE_HOST, storageAddress);
            target.put(ModifyTargetsCommand.STORAGE_PORT, String.valueOf(storagePort));
            target.put(ModifyTargetsCommand.IQN, iqn);

            targets.add(target);

            cmd.setTargets(targets);
            cmd.setApplyToAllHostsInCluster(true);
            cmd.setAdd(false);
            cmd.setTargetTypeToRemove(ModifyTargetsCommand.TargetTypeToRemove.DYNAMIC);
            cmd.setRemoveAsync(true);

            sendModifyTargetsCommand(cmd, hostId);
        }
    }

    private void sendModifyTargetsCommand(ModifyTargetsCommand cmd, long hostId) {
        Answer answer = agentMgr.easySend(hostId, cmd);

        if (answer == null) {
            String msg = "Unable to get an answer to the modify targets command";

            LOGGER.warn(msg);
        }
        else if (!answer.getResult()) {
            String msg = "Unable to modify target on the following host: " + hostId;

            LOGGER.warn(msg);
        }
    }

    private void deleteSolidFireVolume(long storagePoolId) {
        SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePoolId, storagePoolDetailsDao);

        long sfVolumeId = getVolumeId(storagePoolId);

        SolidFireUtil.deleteVolume(sfConnection, sfVolumeId);
    }

    private long getVolumeId(long storagePoolId) {
        StoragePoolDetailVO storagePoolDetail = storagePoolDetailsDao.findDetail(storagePoolId, SolidFireUtil.VOLUME_ID);

        String volumeId = storagePoolDetail.getValue();

        return Long.parseLong(volumeId);
    }

    private long getIopsValue(long storagePoolId, String iopsKey) {
        StoragePoolDetailVO storagePoolDetail = storagePoolDetailsDao.findDetail(storagePoolId, iopsKey);

        String iops = storagePoolDetail.getValue();

        return Long.parseLong(iops);
    }

    private static boolean isSupportedHypervisorType(HypervisorType hypervisorType) {
        return HypervisorType.XenServer.equals(hypervisorType) || HypervisorType.VMware.equals(hypervisorType);
    }

    private HypervisorType getHypervisorType(long hostId) {
        HostVO host = hostDao.findById(hostId);

        if (host != null) {
            return host.getHypervisorType();
        }

        return HypervisorType.None;
    }

    /* (non-Javadoc)
     * @see org.apache.cloudstack.engine.subsystem.api.storage.DataStoreLifeCycle#migrateToObjectStore(org.apache.cloudstack.engine.subsystem.api.storage.DataStore)
     */
    @Override
    public boolean migrateToObjectStore(DataStore store) {
        return false;
    }

    @Override
    public void updateStoragePool(StoragePool storagePool, Map<String, String> details) {
        String strCapacityBytes = details.get(PrimaryDataStoreLifeCycle.CAPACITY_BYTES);
        String strCapacityIops = details.get(PrimaryDataStoreLifeCycle.CAPACITY_IOPS);

        Long capacityBytes = strCapacityBytes != null ? Long.parseLong(strCapacityBytes) : null;
        Long capacityIops = strCapacityIops != null ? Long.parseLong(strCapacityIops) : null;

        SolidFireUtil.SolidFireConnection sfConnection = SolidFireUtil.getSolidFireConnection(storagePool.getId(), storagePoolDetailsDao);

        long size = capacityBytes != null ? capacityBytes : storagePool.getCapacityBytes();

        long currentMinIops = getIopsValue(storagePool.getId(), SolidFireUtil.MIN_IOPS);
        long currentMaxIops = getIopsValue(storagePool.getId(), SolidFireUtil.MAX_IOPS);
        long currentBurstIops = getIopsValue(storagePool.getId(), SolidFireUtil.BURST_IOPS);

        long minIops = currentMinIops;
        long maxIops = currentMaxIops;
        long burstIops = currentBurstIops;

        if (capacityIops != null) {
            if (capacityIops > SolidFireUtil.MAX_MIN_IOPS_PER_VOLUME) {
                throw new CloudRuntimeException("This volume cannot exceed " + NumberFormat.getInstance().format(SolidFireUtil.MAX_MIN_IOPS_PER_VOLUME) + " IOPS.");
            }

            float maxPercentOfMin = currentMaxIops / (float)currentMinIops;
            float burstPercentOfMax = currentBurstIops / (float)currentMaxIops;

            minIops = capacityIops;
            maxIops = (long)(minIops * maxPercentOfMin);
            burstIops = (long)(maxIops * burstPercentOfMax);

            if (maxIops > SolidFireUtil.MAX_IOPS_PER_VOLUME) {
                maxIops = SolidFireUtil.MAX_IOPS_PER_VOLUME;
            }

            if (burstIops > SolidFireUtil.MAX_IOPS_PER_VOLUME) {
                burstIops = SolidFireUtil.MAX_IOPS_PER_VOLUME;
            }
        }

        SolidFireUtil.modifyVolume(sfConnection, getVolumeId(storagePool.getId()), size, null, minIops, maxIops, burstIops);

        SolidFireUtil.updateCsDbWithSolidFireIopsInfo(storagePool.getId(), primaryDataStoreDao, storagePoolDetailsDao, minIops, maxIops, burstIops);
    }

    @Override
    public void enableStoragePool(DataStore dataStore) {
        primaryDataStoreHelper.enable(dataStore);
    }

    @Override
    public void disableStoragePool(DataStore dataStore) {
        primaryDataStoreHelper.disable(dataStore);
    }
}

redpajama_set_name: RedPajamaGithub


text:
'Angry' dad and his friend 'hogtied his daughter's abusive boyfriend and beat him to death after she begged for help'
Oklahoma men Dearld Peal Jr, 46, and Tracy Price, 40, are charged with murder
Peal's daughter accused her boyfriend Anthony Pietrzak, 18, of abusing her
Peal and Price allegedly retaliated by hogtying Pietrzak and beating him to death
By Keith Griffith For Dailymail.com and Associated Press
Published: 16:29 EDT, 28 September 2017 | Updated: 14:44 EDT, 29 September 2017
A father and his friend have been charged with beating his daughter's abusive boyfriend to death.
Dearld Ray Peal Jr, 46, and Tracy Gene Price, 40, are charged with kidnapping and murder in the death of 18-year-old Anthony Pietrzak, who was found dead on Thursday in Tulsa, Oklahoma.
Pietrzak had been dating Peal's daughter, who told her father that Pietrzak had been beating her and begged him to retaliate, police said.
The young couple were reportedly expecting a baby daughter in October.
The daughter has not been charged in connection with the murder, and police have not publicly named her.
Dearld Ray Peal Jr (left) and Tracy Gene Price (right) are charged with kidnapping and murder in the death of 18-year-old Anthony Pietrzak, who was dating Peal's daughter
Murder victim Pietrzak (pictured) had allegedly been beating on Peal's daughter when the young woman told her outraged father and begged him to help her, police said
Juror in 'womb raider' trial faints at the sight of grisly... Video shows the car crash that led to fatal police shooting...
On Tuesday, an anonymous caller told police that a man he knew only as Anthony had been beaten to death in his home.
A witness told homicide detectives of seeing a man being beaten, hogtied and thrown into the back of a pickup truck outside the victim's home in north Tulsa, police said.
Pietrza's body was found at around 2am Thursday just outside of Tulsa's city limits and about 3 miles from his and his girlfriend's home.
Officer Jeanne MacKenzie told The Associated Press that Pietrzak wasn't dismembered, as earlier reports has claimed.
She said that he was hogtied when they found his body, with his hands and feet tied together.
Peal is seen with his daughter in this family photo from her childhood. The daughter, now grown, has not been charged or publicly named by police
Pietrza's body was found at around 2am Thursday just outside of Tulsa's city limits. Peal (right) is one of two men charged with his kidnapping and murder
'It's very horrific,' MacKenzie said. 'Just beating someone to death, there's no other way to describe it.'
'She got these ... individuals to beat up her boyfriend because she alleged he was beating on her,' MacKenzie said of Peal's daughter.
MacKenzie said more arrests are possible and that detectives are trying to determine if a third man was involved in the attack.
Jail records show that Peal and Price are being held without bond and do not list an attorney for either of them.
They are due in court next Wednesday.
Tulsa dad accused of beating daughter's boyfriend to death


Without a doubt the most moving music I've ever heard has been movie soundtracks, played by full orchestras. With the movie or without it, great music immediately gets hold of you and takes you deep into the moment. I'd been hearing John Barry's work for years without even knowing it. It was only when a friend lent me a CD called "The best of Big Movie Hits" that I realised who was behind the unforgettable music of the James Bond movies and a host of others. He was also responsible for the music for "Born Free" which is forever etched in my brain. And the music which, to this day I can only listen to at very particular times, the soundtrack to "Out of Africa". The main title "I had a farm in Africa" so perfectly captures the drama, life force and majesty of Africa. The music is terrifying and incredibly beautiful at the same time. John died in 2011 but was thankfully as prolific as he was brilliant. His work is there for us to enjoy forever. Cheers John.


text:
Have Your Say And Ask Your Question At The Uks Busiest Station On August 6
Published 2nd August 2013
The rail industry invites you to Waterloo to participate in the first passenger forum
Network Rail (NR) and Stagecoach South West Trains (SSWT) announced that they would form an 'Alliance' to take effect from April 30 last year in an attempt to work closer together to deliver better value for money and performance.
The Alliance supervises train operations between London's Waterloo station, the UK's busiest, to the south and south west to Hampshire, Dorset and Devon on one of Europe's busiest rail networks with 1,700 trains a day running. The Alliance is an experiment in UK rail and because of rail privatisation legislation takes the form of an unincorporated company.
The hybrid organisation although putting forward a unified front, still has to adhere to their respective contractual obligations with each other and the Department for Transport (DfT), so just how much difference has this experiment made? In essence, the sometimes confrontational contractual relationship remains as it has to being ruled by primary legislation.
Stagecoach also operates the East Midlands franchise and has a 49% share in the Virgin West Coast Main Line franchise so is a major UK rail operator and are in the business to make money
At a recent Alliance board meeting, it was noted that neither party had improved its financial position in the first year of the alliance, but neither is worse off either. Recent engineering work at Epsom had been carried out as planned but the indications were that it may have been cancelled without the Alliance being in place thus saving money.
Debates have been held about train regulation and how to fix track drainage faults but this is all basic railway operating many rail insiders argue, and you do not need an Alliance to do the work.
So far as the next year is concerned, there is a significant amount of work required including a heavy track renewal programme, resignalling works between Poole and Wool to carry out. The Alliance remains affected by national constraints such as provision of cranes, wagons and haulage equipment so hopefully the new way of working will be able to resolve this investment.
What was the question?
So what questions can be asked? Any is the answer, there are clues in this report! The event is billed as an ask the manager anything. For example, Alstom maintains SWT's Class 458 trains and is delivering their Class 458/5 conversion project to make them into longer trains and they will be at this event. The British Transport Police, Passenger Focus and the Samaritans will also be at the all-day event which will be repeated every six months.
This is our chance to meet and talk to senior managers face-to-face as well as staff from the Alliance customer service and infrastructure maintenance teams between 9am and 7pm.
They said
Arthur Pretorius, Deputy Customer Service Director for the South West Trains – Network Rail Alliance, said:
"Our customers are at the heart of everything we do both internally and externally. "Our new passenger forum will enable us to get first hand feedback from our customers about our services and how we can improve further. It will also provide an opportunity for our customers to meet some of our partners, such as British Transport Police and Samaritans, and hear about some of our joint improvement initiatives".
"I would like to personally invite our passengers to come and meet us at any time between 9am and 7pm at our busiest station, London Waterloo, on Friday 6 August."
Terence Watson, President of Alstom UK, said: "We are delighted to be partnering with the South West Trains - Network Rail Alliance for this event at Waterloo. On the 7th August, we will be talking to the public about our work in London and our need for over 200 London-based railway engineers over the next two years.
"As well as working closely on projects with the South West Trains - Network Rail Alliance, we also need people for a number of projects including Crossrail and the Northern Line."
Tweet the manager!
Improvements to communications include the launch of a 'Tweet the Manager' initiative and the roll out of a new state-of-the-art PA system at Waterloo station, easy to read colour coded disruption boards and the development of an enhanced mobile version of the South West Trains' website, allowing passengers to purchase tickets and receive tailored information on their journeys while on the move.
The second event will again be held at Waterloo station on December 10, 2013.
Written by Phil Marsh
Network Rail Website
SouthWest Trains Website
Alstom Website


The head honchos at Google are notoriously tight-lipped about the intricacies of their PageRank algorithms, which have evolved significantly over the past decade. But last year the company announced that RankBrain, an artificial intelligence system that monitors search results, was the third most important factor in Google's ranking algorithm. That left the top two factors up for debate.
Later, Google Senior Search Quality Strategist Andrey Lipattsev shed light on that during a truly enlightening Q & A with several web marketing experts (embedded above). Lipattssev noted that content and backlinks were the top two ranking factors.
While most of us grasp the concept of delivering relevant, keyword rich long-form content, earning backlinks can still be tricky business. Check out these three link building lessons based on work we've done with the Health and Wellness Alliance for Children, a collective impact organization dedicated to improving the health and well-being of children in the Dallas area.
1. Riff on the guest blog.
The conventional guest blogging strategy for earning backlinks is to write guest blogs for others, judiciously including links back to your own website in the body of the article and your author bio. This straightforward approach certainly works for garnering inbound links. But what if you could spend the same amount of time crafting amazing content, and let it live on your own website, where you'd reap other SEO benefits as well?
Consider writing content for your own website that features partner organizations or key industry leaders. This content works because it confers credibility; your partners get the benefit of letting someone else talk about their successes, and they can simply link back to your article without any additional effort.
With so many incredible partner organizations, the Alliance perfectly lends itself to this approach. For National School Breakfast Week, for instance, we featured two major partners who fight food insecurity through school breakfast programs: Dallas Independent School District and Children at Risk. Promoted via social media and the Alliance's newsletter, the articles garnered plenty of traffic on their own. They also provided a great opportunity for two partner organizations to link back to the Alliance's website.
Align your article with your partner's goals and needs. Connect with your partner organization's marketing lead to find out what they'd like to showcase, and build that into your article. For instance, Dallas ISD wanted to showcase a new smoothie program they'd recently launched and planned to phase in county-wide.
Share the link with your partner organization first. Invite your partners into the review process, and provide them the link before the final post goes live. That will reinforce your desire to cooperate and reiterate that you truly respect the value they bring to your partnership.
2. Provide online marketing collateral to partner organizations.
As part of your content marketing strategy, you're already building landing pages and other marketing collateral for all of your company's key initiatives and product lines. If you collaborate with other companies or organizations on these initiatives, you're poised to help them market those initiatives while ensuring that their marketing efforts are aligned with best practices for link building and other facets of SEO. Remember, not every organization has the same marketing budget and bandwidth as you might have, so this additional resource can prove invaluable.
With that in mind, leverage the content you're already creating for yourself and create a parallel version to offer your partner organization. For example, if you're already writing copy for a landing page about a particular project, draft similar copy for your partner. You can also co-brand any related case studies or white papers, to give your partner organizations added incentive to link back to them. Note that any copy you provide to your partner organization should be original, to avoid getting penalized for duplicate content.
The Alliance recently partnered with the National Center for Healthy Housing (NCHH) for the 1000 Communities Campaign. We provided landing page copy to the NCHH to post on its website, along with online documents for each strategy associated with the campaign. This resulted in multiple backlinks from a highly reputable domain.
Position your copy as a blueprint or draft. Let your partners know that they can truly own any copy you generate for their website; they're free to change it as they see fit. You may want to specifically request, however, that they leave one backlink to your organization.
Make your partner organization shine. Consider that this copy will live on their website, not yours. Highlight their role in the initiative, without writing your own organization out of the story completely.
Reciprocate the backlink. If your partner organization publishes the copy you provide with a baclink to your site, incorporate a backlink for them on your corresponding web page. Share the backlink love!
3. Put press releases to work (the right way).
Do you remember the days when companies would pump out dozens of SEO-optimized press releases through syndication sites, chock full of backlinks to their own domains? That strategy (rightfully) got a bad rap, and press release syndication has fallen by the wayside. But press releases still have a place in your backlink strategy. The tricks are to limit your press releases to topics that are truly press-worthy, and to write for humans rather than search engines.
First and foremost, you should absolutely publish your company's news somewhere on your own website. Then think about the best ways to distribute a different version of that content elsewhere on the web. You may decide to contact journalists directly and send them a link to the press release on your website, or you may opt to go the more traditional distribution route. Either way, if your news is truly newsworthy, it will likely generate interest.
A prime example was the Alliance's recent recognition by the the Environmental Protection Agency (EPA) Region 6 for their efforts to improve housing conditions for children with asthma. Following the award ceremony, the Alliance's parent organization, Children's Health, published a press release about the achievement. It was picked up by several news sites, including Lung Disease News and the Dallas Morning News, earning multiple backlinks.
Write for journalists, not for Google. Journalists look for very specific information when they skim press releases. They don't want links back to your product pages, but they do want links to the profile pages of experts you cite, for instance. As you write each press release, think about how you can make their job easier by providing as many useful facts as possible.
Pair press releases with proactive outreach. Journalists receive countless pitches each day. As part of your social media strategy, identify key journalists in your industry and keep their contact information handy. When you publish new press releases, send them the link along with a very brief teaser. You can even do this via Twitter if necessary.
4. Include the right keywords.
This seems like an incredibly simple recommendation. After all, we all spend plenty of time implementing a keyword strategy for our websites and can probably recite the long-tail keywords that drive the most traffic to our websites. Okay, maybe I'm a little too into keywords, but they're certainly the foundation of any robust online marketing strategy.
But earning high-quality backlinks sometimes requires a slightly different approach to keyword selection. The first step is to follow industry news and related current events, so you'll know about hot topics and how they fit with your own company's objectives. You'll find that some keywords you might not necessary target with your overall SEO strategy might be perfect for a shorter-term campaign. Once you've identified these keywords, find meaningful ways to contribute to the conversation.
Avoid shameless newsjacking. Stick with news stories and trends that truly fit with your company's mission and offerings. Your best bet is to focus on niche stories that appeal to your target audience, rather than sensational stories that relate only tangentially to your company or require you to force an inauthentic connection.
Focus on creating value. Think about what you can add to the conversation. The Alliance's blog post about the connection between public policy and food access, for instance, offered a historical perspective on a very current problem. It's no wonder that article has been the top-performing post every week since it was published — it delivers something deeper than most other related content.


Bob's Red Mill, an internationally renowned natural foods flouring mill and market, is now completely owned by its 209 proud employees.
February 18, 2010, 5:45 a.m.
Driving just south of Portland along Oregon highway 224 in Milwaukie, you can't miss it. Bob's Red Mill, a 15-acre production and flouring facility and two-acre retail outlet, is well-loved by natural foods enthusiasts and Oregonians. The landmark business and marketplace has grown from humble local roots into one of the most prominent producers of natural and organic milled grain products in North America. Despite great success, Red Mill's owner Bob Moore never forgot where his business began.
Now in a generous and humbling gesture, Moore has handed over ownership of the business to his 209 employees, according to OregonLive.com.
"In some ways I had a choice," said Moore, referring to the countless offers on the table to buy his privately held company or take it public. "But in my heart, I didn't. These people are far too good at their jobs for me to just sell it."
The plan was unveiled during Moore's 81st birthday event, which he celebrated with scores of his employees. Deemed The Employee Stock Ownership Plan, the new business model is a retirement plan in which the company contributes its stock to the plan to be held in trust for the benefit of its employees.
"This is Bob taking care of us," said Lori Sobelson, who helps run the business' retail operation. "He expects a lot out of us, but really gives us the world in return."
Although the company's worth is not public, revenues were estimated to be at least around $24 million in 2004, and a recent news release reported an annual growth rate of between 20 percent to 30 percent every year since. That means eventual payouts to the employees could be substantial.
Vested employees, who need to be with the company for at least three years to qualify, will be given annual reports detailing their respective stake in the company. When they quit or retire, the employees will be given cash totaling whatever amount they are due.
Bob's Red Mill Natural Foods bills itself as the "nation's leading miller of diverse whole-grain foods." It produces more than 400 products from flours, cereals and bread mixes, primarily whole grains, that are ground with quartz millstones which come from several 120-year-old mills, as well as distributing beans, seeds, nuts, dried fruits, spices and herbs. Many of the products are certified organic and some are also gluten-free.
"It's very humbling to be part of a company that cares this much about its employees," said Nancy Garner, Moore's executive assistant.
Indeed, in a time of national economic woes, employment insecurity and taxpayer-funded bank bailouts, it's refreshing to find a locally based natural foods company with a business model that's as healthy for its employee's well-being as its product.


The skulls (r) are long and narrow, not in keeping with Native Indians' broader, rounder features.
Some of the earliest settlers of America may have come from Australia, southern Asia, or the Pacific, new research suggests.
Traditional theories have held that the first Americans originated from northern Asia.
Dr Silvia Gonzalez conducted a study of ancient bones found in Mexico and found that they have very different characteristics to Native Americans.
The results are being presented at the BA Festival of Science this week.
Some of the ancient skulls she has looked at are more than 12,000 years old.
These skulls have long and narrow heads that are very different from the short, broad skulls of today's Native Americans.
One particularly well-preserved skull of a long-headed female, who has been dubbed Penon Woman, has been carbon dated to 12,700 years ago.
"They appear more similar to southern Asians, Australians and populations of the South Pacific Rim than they do to northern Asians," Dr Gonzalez, of Liverpool John Moores University, told the British Association's annual meeting in Exeter.
"We think there were several migration waves into the Americas at different times by different human groups."
Dr Gonzalez said the research would be controversial. "[Native Americans] cannot claim to have been the first people there," Dr Gonzalez said.
She also hinted that DNA recovered from Penon Woman would corroborate measurements of the skulls. "We have extracted her DNA. It is going to be a bomb," Dr Gonzalez commented.
Recently, a coalition of native tribes lost their claim to the remains of Kennewick Man, a 9,000-year-old skeleton found in Washington State.
The case was won by a group of scientists who wanted access to the remains for study.
A population of the long-headed individuals being studied by Dr Gonzalez had survived into historic times, she claimed.
The results concur with a study of the Pericues carried out by Spanish researchers in 2003.
This also used measurements of the skulls to show that this population was only distantly related to contemporary Amerindian groups.
However, some scientists think that the older group of Americans may simply have evolved the features typical of present-day natives of the continent.
One study has shown marked differences in the skull shape of prehistoric and present-day Inuit populations despite the fact their mitochondrial DNA types were very similar.


Comfort, tranquility and design describe our rooms. A space where you can rest and relax. A home from home is our goal, for which we will provide an experience without getting in your way. We think that resting should have no limits or interruptions unless you want, our breakfast time has no restriction.