WALNUT CREEK, Calif. -- STANFORD's Grant Robison and Alicia Craig were named the Pacific-10 Conference Cross Country Athletes of the Year, Commissioner Tom Hansen announced today.
Robison, a junior from San Angelo, Texas, captured his second consecutive title at the Pac-10 Championships. He then capped off the season with a third-place finish, the highest placing by a Pac-10 runner, at the NCAA Championships as he guided the Stanford Cardinal to the NCAA title.
Craig, a sophomore from Gillette, Wash., finished fourth at the Pac-10 Championship and took top honors at the NCAA West Regional. She then placed third at the NCAA Championships, guiding Stanford to a second place finish in the team standings.
Stanford freshman Neil Davis, from Los Altos, Calif., was named the Men's Cross Country Newcomer of the Year. He was the top placing freshman at the Pac-10 Championships, finishing seventh, as he helped lead the Cardinal to their sixth Pac-10 title in seven years. He also placed eighth at the NCAA West Regional, helping the Cardinal to a 22-point margin-of-victory.
ARIZONA STATE freshman Jessica Scalzo, from Snoqualimie, Wash., was named the Women's Cross Country Newcomer of the Year. Scalzo, who finished fifth at the Pac-10 Championships - tops among all Pac-10 freshmen, was key in leading the Arizona State women to a second place finish.
Also announced were the Conference Coach of the Year honors. Stanford's Vin Lananna was named both men's and women's Coach of the Year .
Lananna captures the men's coaching honor for the fifth time. The Stanford men won their sixth Pac-10 title in the last seven years, easily outdistancing the field by a 32-point margin of victory. The Cardinal also took first place at the NCAA West Regionals and capped off the 2002 season with their second NCAA title.
Lananna also has been awarded coach of the year on the women's side for the fifth time. The Cardinal won their seventh consecutive Pac-10 title with a 36-point margin-of-victory over Arizona State, took the team title at the NCAA West Regional and finished second at the NCAA Championships.
The honors were decided by a vote of the Conference's cross country coaches.


text:
<?php
declare(strict_types=1);

namespace App\DTO;

use Articus\DataTransfer\Annotation as DTA;

/**
 * @DTA\Strategy(name="ObjectList", options={"type":\App\DTO\FreeStyleProjectactions::class})
 * @DTA\Validator(name="Collection", options={"validators":{
 *     {"name":"TypeCompliant", "options":{"type":\App\DTO\FreeStyleProjectactions::class}}
 * }})
 */
class Collection59 extends \ArrayObject
{
}

redpajama_set_name: RedPajamaGithub


Once part of school uniform or formal occasions, the classic 8065 Double Mary Jane shoe is now an everyday staple that will remain as an infamous Dr. Martens original. Updated in Cherry Red Smooth leather and with Dr. Martens branded buckles and adjustable straps, the classic Goodyear welted sole and yellow Z-welt stitch ensure comfort and durability. The bouncy Airwair sole is oil-and-fat-resistant, hard wearing and offers good abrasion and slip resistance.


I say that with a ugh! It's a time of year that I'm not fond of, on the upside, I can wrap up warm on SL, even if I'm not cold, and what better way to do it than with this set Bueno are releasing for Uber!
Previous Post No Snow Here!


text:
Eve (Rapper) biography
By Kylie - Dec 17, 2020
Quick Facts Of Eve (Rapper)
Eve (Rapper)
Eve Jihan Jeffers
Jerry Jeffers
Julie Wilcher
American-Black
Мuѕіс Аwаrdѕ, Віllbоаrd Мuѕіс Аwаrdѕ, Веt Аwаrdѕ, МТV Моvіе Аwаrdѕ, and more
Maximillion Cooper
London, LA and New York
Eve, the professional name of Eve Jihan Jeffers Cooper, is an American rapper, singer, songwriter, actress, and talk show hostess who is best known for her single "Let Me Blow Ya Mind". She is also famous for her role as Terri Jones in the film "Barbershop" and its sequels: "Barbershop 2: Back in Business" and "Barbershop: The Next Cut". She has released four studio albums: "Let There Be Eve...Ruff Ryders' First Lady", "Scorpion", "Eve-Olution", and "Lip Lock".Eve has won numerous awards including a Grammy Award, BET Award, Teen Choice Award, and MTV Video Music Award. She co-hosted the American talk show "The Talk" from 2017 to 2020. She also got ranked at 46th position on VH1's list of 50 Greatest Hip Hop Artists.
She is active in the social media platform with around 2.1 million followers on her verified Instagram account: @therealeve and has around 1.3 million followers on her Twitter account: @TheRealEve. Besides on 16th December 2020, she will be hosting the show "PLAY ON: Celebrating the Power of Music to Make Change" alongside American actor, Kevin Bacon. It will be aired on the CBS channel and will be raising money for two important charities "Legal Defence Fund" and "WhyHunger".
What is Eve famous for?
Famous an American rapper, singer, songwriter, actress, and talk show
Known for her single "Let Me Blow Ya Mind" and for her role as Terri Jones in the film "Barbershop" and its sequels film
Where is Eve from?
Eve was born on November 10, 1978, in Philadelphia, Pennsylvania, United States. Her birth name is Eve Jihan Jeffers Cooper. She holds an American nationality. Her ethnicity is African-American while Scorpio is her zodiac sign. She is Christain by religion.
Eve was born as the only daughter of Julie Wilcher(mother) and Jerry Jeffers(father). Her mother was a publishing company supervisor while her father worked as a chemical plant supervisor. She has a brother named Harold Wilch.
She was raised in West Philadelphia until the age of 13. Then, her family moved to the neighborhood of Germantown. Since her childhood, she was interested in singing and she performed in many choirs and programs. She completed her studies at Martin Luther King High School. After graduation, she began working as a stripper until when rapper Mase convinced her not to do so and start her music career.
She also formed a female singing group (Dope Girl Posse or EDGP). After the group's split, she started her solo music career under the name "Eve of Destruction".
Eve's Career: Highlights
Eve started her professional music career in 1998 as a rapper by appearing in the Bulworth soundtrack under the name "Eve of Destruction".
She then signed with American rapper, Dr. Dre's record label "Aftermath Entertainment".
Under the Aftermath Entertainment, she released her first single "What Ya'll Want" in June 1999. Her single peaked at no. 29 on the US Billboard Hot 100.
Her first album "Let There Be Eve...Ruff Ryders' First Lady" got released on September 14, 1999, under Interscope and Ruff Ryders Entertainment. The album also peaked at no.1 on the Billboard Hot 200 and she became the third woman to do so.
She got featured on Missy Elliott's single "Hot Boyz(Remix)" along with other artists such as Nas, Lil Mo, and Q-Tip. The remix broke the record for most weeks at number-one on the US R&B chart and also was at no. 1 on the Hot Rap Singles for 18 weeks.
On March 6, 2001, she released her second album "Scorpion". She was widely appreciated for her album's single "Let Be Blow Ya Mind" which ranked at no.2 on the Billboard's Hot 100.
The song featured American singer, Gwen Stefani. The song made Eve won her first Grammy Award which was for Best Rap/Sung Collaboration.
In the same year, she won the BET award for Best Female Hip-Hop Artist.
Under Ruff Ryders Entertainment, she released her third album "Eve-Olution" on August 27, 2002. It charted at no. 6 on the Billboard Hot 200.
The album's singles like "Gangsta Lovin'" and "Satisfaction" became very successful.
She released her fourth album "Lip Lock" on May 14, 2013, under her own label "The Rib Music". The album's first single "Make It Out This Town" got released on February 23, 2013.
Her fourth album charted at no. 46 on the Billboard Hot 200.
After around 6 years, she released her very first single "Reload" on July 12, 2019. Her song featured Jamaican dancehall artist, Konshens.
Before singing, Eve is a well-established actress.
She made her film debut in 2002 by appearing in the role of J.J. on the American action film "XXX".
As an actress, she got her career breakthrough in 2002 after she portrayed the role of Terri Jones in the American comedy-drama film "Barbershop". Her role also earned her an MTV Movie Awards Nomination for Best Female Breakthrough Performance.
Since then, she has acted in various hit films including "The Woodsman", "The Cookout", "Good Hair", "Whip It", "4.3.2.1.", "All Wifed Out" and "Animal".
She also acted as herself in the two documentaries: "Gumball 3000: LDN 2 NYC" and "Gumball 3000: Number 13".
Eve reprised her breakthrough role of Terri Jones in the film, Barbershop's two sequels: "Barbershop 2: Back in Business", and "Barbershop: The Next Cut" respectively in 2004 and 2016.
She has made her guest appearances in numerous TV shows and series including "Third Watch", "One on One", "America's Next Top Model", "LA Ink", "Stylista", "Glee", "MTV Africa Music Awards 2010", "Double Exposure", "The Getaway", "Kidding", "Happy Together", "Saturday Night Live" and "Empire".
She has got featured on the covers of numerous magazines, including Essence, Teen People, Allure, Rolling Stone, Paper, Philadelphia Style, Giant, Blaze, Vibe, Inked, XXL and Ebony.
From 2003 to 2006, she portrayed the starring role of fashion designer, Shelly Williams in the American sitcom "Eve". Later, she worked as the co-executive producer of the show for 21 episodes.
She along with American singer, Gwen Stefani performed "Rich Girl" on NBC's competition series "The Voice".
Eve began co-hosting of the CBS Daytime talk show "The Talk" on November 14, 2017. She and her The Talk co-stars also received a second Daytime Emmy Award nomination for Outstanding Entertainment Talk Show Host.
On 2nd November 2020, live on The Talk, she announced that she would be leaving the show at the end of the year.
At present, she is busy working on her upcoming 2nd season of the Netflix series "Feel Good".
Source: @gettyimages
Eve Awards
1 Grammy Award
1 ASCAP Pop Music Award
3 ASCAP Rhythm & Soul Awards
1 Black Reel Award
1 BMI Pop Award
3 MCP Awards
1 MTV Video Music Award
1 Much Music Video Award
1 Soul Train Award
4 Teen Choice Awards
1 My VH1 Music Award
1 VH1 Vogue Fashion Award
Source: @usmagazine
Eve Husband
Eve is a married woman. She is currently married to her only husband, Maximillion Cooper. Cooper is an American businessman. The couple started dating each other in 2010 and got engaged on December 25, 2013. The couple got married on June 14, 2014, in Ibiza, Spain. The couple together doesn't have any child due to Eve's fertility problem. However, she has four stepchildren from Cooper's previous marriage with businesswoman, Julie Brangstrup.
At present, she is living a happy lifestyle with her family. For her work, she has to keep moving in London, Los Angeles, and New York. Also, Eve doesn't have good relation with New York City-based rapper Foxy Brown and has been involved in few controversies with her.
Eve Net Worth
Eve has quite good earnings from her professional career as a rapper, singer, actress, and TV show host. Having her professional music started at the early age of 20, Eve has come a long way up becoming one of the recognized singers and actresses in the Hollywood film industry. She has won dozens of awards and honors including a Grammy Award.
Her source of income is surely her songs, films, series, and shows. With her hard work for years, Eve undoubtedly has managed to amass a healthy fortune estimated to be around $10 million as of 2020. She also made additional income from her endorsement deals with renowned brands like Pepsi, Clarica, and Sprite.
Eve Height
Eve is a gorgeous lady with a well maintained hour-glass body physique in her early 40s. She stands tall with a height of 5ft 7inches. (1.70m) while her body weighs around 60kg(132 lbs).Her body measurement is around 34-23-35 inches with a bra size of 34B, and 6(US) as her shoe size. She has a fair complexion with black hair and brown eyes. She has planted two tattoos of dog paws on her chest.
eve is nicknamed as "Pitbull in a skirt"
She gave her voice for the role of Major Jones in the video game "XII" in 2003.
She has appeared in television commercials for renowned brands like Clarica, Pepsi, and Sprite
She owned a clothing line called Fetish from 2003 to 2009
She also was a contestant on the game show "Who Wants to Be a Millionaire" and won $32,000 for her charity.
She doesn't have good relation with New York City-based rapper Foxy Brown and has been involved in few controversies with her.
#The Talk
#Full Name
#Songs and Albums
#Nationality and Ethnicity
#Parents and Siblings
#Awards and Honours
#husband and children
#Leaving The Talk
Permalink: https://gossipgist.com/eve-rapper
Bobby Shmurda Biography
Gelson / December 17, 2020
Carter Rubin Biography

redpajama_set_name: RedPajamaCommonCrawl


Pakistan Society of Neurology (PSN) is holding an MS Awareness Seminar on Thursday 13th April, 2017 at Shalimar Hall, Faletti's Hotel, Lahore from 1:00 pm to 4:00 pm The seminar is being arranged to celebrate global solidarity and hope for the future for those suffering from Multiple Sclerosis. Renowned neurologists from Pakistan will be participating in the event, including Dr. Amir Ikram, Prof Athar Javed, Dr. Mohsin Zaheer, and Prof Mohammad Nasrullah. The expert panel includes Prof. Naeem Kasuri, Prof….
Society for Multiple Sclerosis Patients in Pakistan was established in 2011 by Afroz Syed, an MS patient from Lahore, Pakistan, to create awareness about MS and help MS patients live better, healthy and active lives.
Copyright © 2019 Society for Multiple Sclerosis Patients in Pakistan.


There's never been another like him or his sneakers, which is why the unconventionally classic design hasn't changed a bit since Chuck wore them himself. Durable canvas upper stays true to the original design. Rubber cupsole supplies low-profile traction. Wt. 14.4 oz. Shoe runs one size big. We suggest you order 1 size smaller than your normal shoe size for Men and 2 sizes smaller than your normal shoe size for Women.


text:
Home » Celebrities » Sinéad O'Connor admitted to hospital days after 17 year old son's tragic death
Sinéad O'Connor admitted to hospital days after 17 year old son's tragic death
Sinéad O'Connor has revealed she's been admitted to hospital just days after announcing her son Shane's tragic death.
The 55 year old has been open on how she's been coping since the loss of her 17 year old son on 7 January as he "decided to end his earthly struggle".
Now, the Nothing Compares 2 U singer has taken to her Twitter feed on Thursday 13 January to explain she feels responsible for the death of her child as she wrote his "death is no ones fault but mine."
Several hours later, she provided an update as she was escorted to the hospital with police. "I am with cops now on way to hospital. I'm sorry I upset everyone," she wrote.
Shortly before sharing the news of Shane's tragic passing last week, Sinéad revealed her son had gone missing from Tallaght Hospital in Dublin on 6 January and shared an appeal for his return.
Mum-of-four Sinéad shared a message to her son, whom she claimed was on suicide watch at the hospital, directly in a heartbreaking tweet.
She wrote: "This is a message for my son, Shane. Shane, it's not funny any more all this going missing. You are scaring the c**p out of me.
"Could you please do the right thing and present yourself at a Gardai station. If you are with Shane please call the Gardai for his safety."
The singer then added in another post: "Shane, your life is precious. God didn't chisel that beautiful smile on your beautiful face for nothing.
"My world would collapse without you. You are my heart. Please don't stop it from beating. Please don't harm yourself. Go to the Gardai and let's get you to hospital."
Sinéad then shared the tragic news of her son's death on her Twitter page with a tribute. She wrote: "My beautiful son, Nevi'im Nesta Ali Shane O'Connor, the very light of my life, decided to end his earthly struggle today and is now with God.
"May he rest in peace and may no one follow his example. My baby. I love you so much. Please be at peace".
If you have been affected by this story, you can call the Samaritans on 116 123 or visit www.samaritans.org.
Malin Andersson opens up on finding love again after learning to 'forgive abusive ex boyfriend' – EXCLUSIVE
Piers Morgan: GMB host leads tributes amid death of 'fearless' Ruth Bader Ginsburg
Sophie Turner Rocks Comfy Shorts For Afternoon Stroll With Joe Jonas & Baby Willa — Pic
Cheltenham Festival ante post tip: Templegate says recent winner is brilliant 20-1 each way shout
Gene Simmons Lists His Extravagant Las Vegas Mansion For $14.95 Million


text:
Mercurial Pakistan pin WC hopes on rising generation
ICC CRICKET WORLD CUP 2019, PROFILE
Afp, Karachi
Pakistan are pinning their hopes for World Cup glory on a crop of youngsters who have the talent to beat anybody but could also pay for their lack of experience.
The side have only won the showpiece 50-over tournament once — under the captaincy of current Pakistan Prime Minister Imran Khan in 1992.
Khan pledged to give youth a chance while campaigning for election last year and the squad, with an average age of just 27, reflects the demographics of the country, where around two-thirds of the population are under the age of 30.
The prime minister, a swashbuckling all-rounder in his playing days, tipped 20-year-old leg-spinner Shadab Khan as a potential trump card when he met the squad last month.
Pakistan stole a march on their rivals by arriving early in England to play a five-match one-day series, although they suffered a chastening 4-0 defeat.
Coach Mickey Arthur was not too despondent after his side lost the fifth and final ODI on Sunday, saying they had learned lessons despite their drubbing.
"I know there's not too many teams who will arrive in England as prepared as we are in terms of the competition we've played against and match fitness," said Arthur.
"All I know is the players are very determined to do well. Every time they go out there they play for 210 million people.
"We'll be ready — come the first game against the West Indies, we'll be ready."
Pakistan boast enviable options in attack, with 19-year-olds Shaheen Shah Afridi and Mohammad Hasnain part of a pace battery led by Mohammad Amir and Junaid Khan.
Shaheen offers a wicket-taking threat with his steep bounce while Hasnain has the ability to unsettle batsmen with sheer pace, sending down thunderbolts at 150 kilometres per hour (93 miles per hour).
Twenty-four-year-old Hasan Ali, touted for his ability to strike in the middle overs of matches, has already made a name for himself and has useful experience of English conditions.
Hasan grabbed 13 wickets to help Pakistan win the Champions Trophy in England two years ago, finishing as player of the tournament.
Aside from the pacemen, Shadab and Imad Wasim are an effective spin duo who can stem the flow of runs and also take wickets.
Pakistan's batting is more vulnerable but is led by the dependable Babar Azam, 24, who is ranked seventh in the ODI batting rankings and scored a century against England at Trent Bridge last week.
Imam-ul-Haq, 23, has had to cope with allegations of nepotism over his selection — he is the nephew of chief selector Inzamam-ul-Haq — but has come out fighting, smashing 151 against England in Bristol earlier this month.
And fiery Fakhar Zaman, 29, can be a matchwinner with his never-say-die approach.
The experienced trio of Shoaib Malik, Mohammad Hafeez and captain Sarfraz Ahmed give solidity to the batting while Haris Sohail is a useful player.
Pakistan's unpredictability means they can beat any side but they could also lose to weaker teams if things do not go their way.
Never was their Jekyll and Hyde character more clearly shown than at the 2017 Champions Trophy in England, where they were crushed by 124 runs by India in their opening match but hit back to beat their fierce rivals by 180 runs in the final.
Their 1992 World Cup triumph and World Twenty20 title in 2009 also came against the odds.
Coach Arthur said he disliked the tag of unpredictability, asking critics to judge his team as a well-prepared unit and said his side had "fire in their belly".
"Unpredictable is a word that we as a coaching staff hate," said Arthur.
"You read all the previews now, they say Pakistan are going to be in the top four because of their unpredictability. I say 'no, Pakistan are going to be in the top four because of the work we have put in, in their skills'."
Arthur is entitled to his opinion but fans relish Pakistan's fluctuating moods.
They love not knowing what to expect and the 2019 World Cup will be no different.
Tough to rebuff Pakistan tour, says Papon
'Will trounce Pakistan in their den'
Bangladesh storm to semis
Net session for Pakistan tour
Podolski set to join Antalyaspor
Real Madrid on top, Atletico beaten
Haaland bags hat-trick on debut
Iran accuses AFC of bias over 'ban' on hosting football
Sk Russel claim men's event
Autism Welfare Foundation sports meet held
National Women's Handball semis today
Dhoni to be retained by CSK
Immobile hits hat-trick as Lazio crush Sampdoria
Guardiola's birthday ruined as Palace snatch point
Gattuso 'scared' as Napoli hit 'rock bottom'
Chelsea rocked as Hayden's late strike lifts Newcastle


Ampersand's colorful designs are reproduced here for our Mini Fliptop Birthday collection. Our Mini FlipTop Notecard box notecards are full color, mini cards that can be used to convey personal greetings, thank-you's and invitations. 16 notecards, 8 each of 2 images. 16 envelopes. Magnetic closure. Sturdy, re-useable box, ideal for keepsakes.


text:
Byline: By CRAIG THOMPSON
My Turn: Everything's connected, but some connections spell trouble
By CRAIG THOMPSON - 7/6/20
On first glance, climate change, racial justice, and campaign funding don't seem like three strands of the same rope, but in fact they are deeply...
My Turn: Calling out fascism: D-Day veterans deserve it
Empty gestures are easy to come by in these grave times. Maybe too easy. It certainly wouldn't be hard to call my legislation, House Bill 1313...
My Turn: Food security matters now more than ever
By CRAIG THOMPSON - 4/14/20
Food security is defined as "the state of having reliable access to a sufficient quantity of affordable, nutritious food." When you look at how we...
My Turn: How prison reform bills would save the state money
Inmates in New Hampshire prisons will acknowledge that things aren't as bad here as in other states. I know – I've asked them. But that doesn't...
My Turn: We need a climate plan
'If you don't know where you're going any road will do," observed Lewis Carroll. He may well have been describing New Hampshire's efforts to tackle...
My Turn: Tackling the micro-aggressions of economic inequality
The New Hampshire House of Representatives recently voted to raise the minimum wage. Those of us who voted in favor of this basic move toward...
My Turn: Let's tackle the big problems in New Hampshire
By CRAIG THOMPSON - 12/14/19
I come to my role as a state representative with a background in farming, where not a day goes by when we don't have to make a tough decision or do...
My Turn: Where's the leadership, Commissioner Jasper?
Not long ago I was at a meeting of farmers. It was a pretty low-key affair. That is until the issue of our state commissioner of agriculture, Shawn...
My Turn: The hidden bite of N.H.'s Medicaid expansion, and how we can fix it
With the Democrats in the majority, lots of sexy topics are floating around the State House right now – paid family and medical leave, taxing...
My Turn: Sorry seems to be the hardest word
While many among us were up in arms a few weeks ago about the New Hampshire House vote to ban guns in Representatives Hall, something equally...


text:
Meet Christa
Meet the Little
What is Fairytale Travel
Fairytale Travel
American Folklore
Cool History and Legends
Fairies and Enchantment
Creepy Stuff We Love
Gear and Games
interviews Marvel Nerd News Thor
Kevin Feige for Thor: Ragnarok #ThorRagnarokEvent
By Christa Thompson // October 25, 2017
Last week at the Thor: Ragnarok Premiere press junket we had a surprise visit from Marvel Studios President Kevin Feige. It has been a big year for Feige with Guardians of the Galaxy Vol. 2, Spider-Man: Homecoming and Thor: Ragnarok coming out in the same year. There were lots of questions from fellow bloggers in the room, we were in a roundtable setting, but one of the most important, I feel, addressed the issue from earlier this year regarding the comment made by Tony Stark (Robert Downey Jr.) about bloggers. If you missed the uproar, you can find more information on it here.
Looking for interviews? Check out my interviews with Director Taika Waititi, Karl Urban (Skurge), and live on Monday at 9 am EST Rachel House (Topaz). You can also check out my coverage of the media press conference, and my spoiler-free review here.
Thor: Ragnarok is in theaters now!
©Marvel Studios 2017
Thor: Ragnarok is an incredible film. Undoubtedly my top favorite along with Guardians of the Galaxy. If you missed my SPOILER-FREE Thor: Ragnarok review check it out here!
In addition to the blogger comment, we had a chance to talk about his big year, how he balances everything, standalone Hulk movies, his favorite Avenger, an all-female hero film and more.
Photo: Allison Waken
Interview with Kevin Feige for Thor: Ragnarok
Kevin on GOTGVol2 and Thor: Ragnarok coming out in the same year:
It's pretty awesome and I love that littler Peter Parker in high school is in the middle of all that. It's pretty cool and it indicates what I've always wanted people to understand that just because something's based on a comic doesn't mean they're all the same. Doesn't mean they all inhabit the same exact tone.
On the Guardians of the Galaxy meeting up with Thor:
Infinity War is a pretty major meeting of those minds and Thor, in particular, with the Guardians, we've already shot some very fun scenes, between them. The cosmic adventurers spend a lot of time together in that movie.
On filming in Atlanta:
We have finished Avengers: Infinity War. They are currently filming Untitled Avengers and that started in January of this year and we go through January of next year. Nonstop. Black Panther has started and finished. Ant-Man and The Wasp has started and almost finished while that's all going on.
On Thor's new look and feel:
That was our idea perfected and improved by Taika. We wanted to, as we always do in our movies, go to a new place. Go to an unexpected place. Look at what we did with Shane Black's Iron Man 3, the third Captain American film, with Civil War and we always look at a third film, Infinity War in the case of Avengers coming up, as an opportunity to, to take what the fans like, that they're willing to go with us and take them to a totally unexpected fun place.
Also, Mr. Hemsworth used to say, "Hey, mate, Captain America has got Iron Man in his movie, has got Black Widow in his movie, who am I getting?" I'd go, "I think he's right". And the fun thing about Thor is he's got amazing characters in his own comics, Hela and Valkyrie from his books, from the mythology.
We knew we wanted to bring someone in there. We realized Hulk would be that guy. Seeing Thor and Hulk battle it out together is great. Seeing Banner and Thor being fish out of water is even better. So, suddenly, you have this great dynamic between them.
On bringing Planet Hulk, Sakaar into the movie:
Well, it was always something, Planet Hulk, in which Hulk finds himself forced into these gladiatorial games, it was always a great comic. That image of Hulk with these big battle weapons and that big helmet, we loved. We never really thought we would be able to do it, in large part because Banner is not a part of those comics. He's Hulk the whole time and we love Mark Ruffalo. We wouldn't want to do a movie without Mark Ruffalo in it.
As we were putting Thor: Raganrak together, we realized, oh, this is where we could do it. This is how we could do, a taste of it. This is not the Planet Hulk story, but it's certainly the inspiration of getting to see that and even characters like Korg and Meek who, as performed by Taika, steal the whole movie.
On a standalone Hulk movie:
We love them all. We think it would be fun to bring them to the screen and how we do that, I'm not sure. In terms of stand-alone Hulk movies, there are various contracts with studios that have to be worked out. I'm just so happy that we have the ability to include Hulk in these ensembles and what we already have planned, the arc that we've started with Raganrak. An enhanced push and pull between Hulk and Bruce Banner sort of for their body continues in the next Avengers film, in unexpected fun ways.
On a film telling the story that bridges the gap between the Avengers and his life on Sakaar:
That would be pretty cool. I don't know. I think that would probably fall under the solo Hulk area and stuff we'd have to figure out before we'd be able to do that, but you wouldn't have to twist my arm to see more of that or more of Jeff Goldblum as the Grand, as the Grand Master.
On an all-female hero movie:
I think we certainly have enough powerful characters to do that. When and how, I don't know, but I recently found myself in an undisclosed location. Somebody tapped on my shoulder and I turned around and there was Scarlet Johansson, Brie Larson, Karen Gillan, um, Tessa Thompson, Pom Klementieff all saying, hey, when are we going to do a movie? So that was pretty overwhelming. Zoe Saldana was also standing there.
On the "bloggers aren't real journalists" comment made by Tony Stark in Spider-Man: Homecoming:
That was a ad lib. A comedic ad lib from Mr. Downey that he just, one of the many things he just says. Moments before that, he says something about a human dog hybrid and puppies and who knows what he's talking about? It's just funny and when we shot it, it just sort of went past me. When we cut it together and only in sort of the early screenings I went, oh, "I'm gonna hear about this".
On Kevin's favorite Avenger:
I really don't have a favorite and I love that. You know we've been so lucky that with each release, another one rises to the top and I read comments that now Thor is going to become people's favorite Avenger after this movie. I love the I'm Mary Poppins shirt and what we did for Yondu and what James did for Yondu.
But I think in the looking as we approach our ten year anniversary, it's impossible not to look back on Iron Man one and what Favreau did and what Downey did and continues to do that really is the foundation for everything we've done. So that experience of Iron Man one was our first, so, in many ways, is the one I look back at quite fondly, but I don't have favorites.
On balancing all the films coming out:
You hire Taika Waititi, you hire James Gunn, you hire John Anthony Russo. I've got a incredible team at Marvel Studios who each film has a single embedded Executive Producer on it who sees it. Brad Winterbaum on this movie, executive Producer on that poster over there has lived with Taika for the past two and a half years, moved his family to Australia for months. They're on it the whole time. I'm always a text or a phone call away of knowing exactly what's happening anywhere at any given time.
It's a great privilege to have this team in place. Most of us have been together for almost the entire ten years at the studio which is very unusual in, in Hollywood. It's great.
Want more Thor? Swing by my Thor: Ragnarok Products Gift Guide and enter to win this EPIC Thor: Ragnarok giveaway with over $200 in prizes.
Looking for all the trailers, posters and images for Thor: Ragnarok
Special thanks to Disney for flying me out to experience the Thor: Ragnarok premiere and attend the press junket, this in no way shaped my opinion in this post.
About Christa Thompson
Christa Thompson is the Founder and Chief Editor of The Fairytale Traveler. She started traveling the world in 2003 when she attended a summer abroad study at the University of Cambridge in England. Since then, her wanderlust has been fierce. Her three passions in life are her son, traveling, and being creative. The Fairytale Traveler brand gives Christa the opportunity to do all of these things and to live intentionally every day. "It's never too late to believe in what you love and to pursue your dreams." -Christa Thompson
[…] you see my interview with Marvel Studios President Kevin Feige for Thor: […]
Taika Waititi Interview - Loki, Led Zepplin, Childhood Comics and More / October 30, 2017 Reply
[…] for interviews? Check out my interviews with President of Marvel Studios Kevin Feige, Director Taika Waititi, Karl Urban (Skurge), and live on Monday at 9 am EST Rachel House (Topaz). […]
SPOILER FREE Thor: Ragnarok Film Review - Funny, Fresh and Epic / November 5, 2017 Reply
Thor: Ragnarok Gifts for the Marvel Geek in Your Life #ThorRagnarokEvent | / November 5, 2017 Reply
ULTIMATE Thor: Ragnarok Giveaway Over $200 in Loot - Enter Here | / November 5, 2017 Reply
[…] the cast and filmmakers. You can read my spoiler-free review here. The next day we had the chance to interview Marvel Studios President Kevin Feige, Director Taika Waititi, Rachel House and Karl Urban before we headed over to the press conference. […]
Karl Urban Interview for Thor: Ragnarok - Being Skurge, the MCU and Women Warriors / November 5, 2017 Reply
We love hearing your thoughts, stories and adventures. Share them here:	Cancel reply
A windy pose on the Isle of Skye
The Fairytale Traveler
The Fairytale Traveler is a travel and lifestyle blog inspired by the greatest stories ever told. It follows the adventures of Christa and her son Gauge as they explore the world's magical, otherworldly and fairytale-like places, places that inspired great stories, film locations, creepy places, historic sites, castles, and just about anything suited for royalty. They love myth, legend and lore, books, film, and fandoms. Along with travel stories, travel tips, and travel guides, they feature product reviews on cars, gadgets, and smart technology, and write Gift Guides on travel gear, geeky collectibles, housewares, home decor and more.
©2013-2019 Travel Media Solutions, LLC DBA The Fairytale Traveler All Rights Reserved
MY PRINT COLUMN!


text:
package gobblin.source.extractor.extract.jdbc;

import java.io.IOException;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.base.Joiner;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

import gobblin.configuration.ConfigurationKeys;
import gobblin.configuration.WorkUnitState;
import gobblin.password.PasswordManager;
import gobblin.source.extractor.DataRecordException;
import gobblin.source.extractor.exception.HighWatermarkException;
import gobblin.source.extractor.exception.RecordCountException;
import gobblin.source.extractor.exception.SchemaException;
import gobblin.source.extractor.extract.Command;
import gobblin.source.extractor.extract.CommandOutput;
import gobblin.source.extractor.extract.QueryBasedExtractor;
import gobblin.source.extractor.extract.SourceSpecificLayer;
import gobblin.source.extractor.extract.jdbc.JdbcCommand.JdbcCommandType;
import gobblin.source.extractor.resultset.RecordSetList;
import gobblin.source.extractor.schema.ColumnAttributes;
import gobblin.source.extractor.schema.ColumnNameCase;
import gobblin.source.extractor.schema.Schema;
import gobblin.source.extractor.utils.Utils;
import gobblin.source.extractor.watermark.Predicate;
import gobblin.source.extractor.watermark.WatermarkType;
import gobblin.source.workunit.WorkUnit;

/**
 * Extract data using JDBC protocol
 *
 * @author nveeramr
 */
public abstract class JdbcExtractor extends QueryBasedExtractor<JsonArray, JsonElement>
    implements SourceSpecificLayer<JsonArray, JsonElement>, JdbcSpecificLayer {
  private static final Gson gson = new Gson();
  private List<String> headerRecord;
  private boolean firstPull = true;
  private CommandOutput<?, ?> dataResponse = null;
  protected String extractSql;
  protected long sampleRecordCount;
  protected JdbcProvider jdbcSource;
  protected Connection dataConnection;
  protected int timeOut;
  private List<ColumnAttributes> columnAliasMap = new ArrayList<>();
  private Map<String, Schema> metadataColumnMap = new HashMap<>();
  private List<String> metadataColumnList = new ArrayList<>();
  private String inputColumnProjection;
  private String outputColumnProjection;
  private long totalRecordCount = 0;
  private boolean nextRecord = true;
  private int unknownColumnCounter = 1;

  private Logger log = LoggerFactory.getLogger(JdbcExtractor.class);

  /**
   * Metadata column mapping to lookup columns specified in input query
   *
   * @return metadata(schema) column mapping
   */
  public Map<String, Schema> getMetadataColumnMap() {
    return this.metadataColumnMap;
  }

  /**
   * @param metadataColumnMap metadata column mapping
   */
  public void setMetadataColumnMap(Map<String, Schema> metadataColumnMap) {
    this.metadataColumnMap = metadataColumnMap;
  }

  /**
   * Metadata column list
   *
   * @return metadata(schema) column list
   */
  public List<String> getMetadataColumnList() {
    return this.metadataColumnList;
  }

  /**
   * @param metadataColumnList metadata column list
   */
  public void setMetadataColumnList(List<String> metadataColumnList) {
    this.metadataColumnList = metadataColumnList;
  }

  /**
   * Sample Records specified in input query
   *
   * @return sample record count
   */
  public long getSampleRecordCount() {
    return this.sampleRecordCount;
  }

  /**
   * @param sampleRecordCount sample record count
   */
  public void setSampleRecordCount(long sampleRecordCount) {
    this.sampleRecordCount = sampleRecordCount;
  }

  /**
   * query to extract data from data source
   *
   * @return query
   */
  public String getExtractSql() {
    return this.extractSql;
  }

  /**
   * @param extractSql extract query
   */
  public void setExtractSql(String extractSql) {
    this.extractSql = extractSql;
  }

  /**
   * output column projection with aliases specified in input sql
   *
   * @return column projection
   */
  public String getOutputColumnProjection() {
    return this.outputColumnProjection;
  }

  /**
   * @param outputColumnProjection output column projection
   */
  public void setOutputColumnProjection(String outputColumnProjection) {
    this.outputColumnProjection = outputColumnProjection;
  }

  /**
   * input column projection with source columns specified in input sql
   *
   * @return column projection
   */
  public String getInputColumnProjection() {
    return this.inputColumnProjection;
  }

  /**
   * @param inputColumnProjection input column projection
   */
  public void setInputColumnProjection(String inputColumnProjection) {
    this.inputColumnProjection = inputColumnProjection;
  }

  /**
   * source column and alias mapping
   *
   * @return map of column name and alias name
   */
  public List<ColumnAttributes> getColumnAliasMap() {
    return this.columnAliasMap;
  }

  /**
   * add column and alias mapping
   *
   * @param columnAliasMap column alias mapping
   */
  public void addToColumnAliasMap(ColumnAttributes columnAliasMap) {
    this.columnAliasMap.add(columnAliasMap);
  }

  /**
   * check whether is first pull or not
   *
   * @return true, for the first run and it will be set to false after the
   *         first run
   */
  public boolean isFirstPull() {
    return this.firstPull;
  }

  /**
   * @param firstPull
   */
  public void setFirstPull(boolean firstPull) {
    this.firstPull = firstPull;
  }

  /**
   * Header record to convert csv to json
   *
   * @return header record with list of columns
   */
  protected List<String> getHeaderRecord() {
    return this.headerRecord;
  }

  /**
   * @param headerRecord list of column names
   */
  protected void setHeaderRecord(List<String> headerRecord) {
    this.headerRecord = headerRecord;
  }

  /**
   * @return connection timeout
   */
  public int getTimeOut() {
    return this.timeOut;
  }

  /**
   * @return true, if records available. Otherwise, false
   */
  public boolean hasNextRecord() {
    return this.nextRecord;
  }

  /**
   * @param nextRecord next Record
   */
  public void setNextRecord(boolean nextRecord) {
    this.nextRecord = nextRecord;
  }

  /**
   * @param timeOut connection timeout
   */
  @Override
  public void setTimeOut(int timeOut) {
    this.timeOut = timeOut;
  }

  /**
   * @return private static final Gson factory
   */
  public Gson getGson() {
    return this.gson;
  }

  public JdbcExtractor(WorkUnitState workUnitState) {
    super(workUnitState);
  }

  @Override
  public void extractMetadata(String schema, String entity, WorkUnit workUnit) throws SchemaException, IOException {
    this.log.info("Extract metadata using JDBC");
    String inputQuery = workUnitState.getProp(ConfigurationKeys.SOURCE_QUERYBASED_QUERY);
    String watermarkColumn = workUnitState.getProp(ConfigurationKeys.EXTRACT_DELTA_FIELDS_KEY);
    JsonObject defaultWatermark = this.getDefaultWatermark();
    String derivedWatermarkColumnName = defaultWatermark.get("columnName").getAsString();
    this.setSampleRecordCount(this.exractSampleRecordCountFromQuery(inputQuery));
    inputQuery = this.removeSampleClauseFromQuery(inputQuery);
    JsonArray targetSchema = new JsonArray();
    List<String> headerColumns = new ArrayList<>();

    try {
      List<Command> cmds = this.getSchemaMetadata(schema, entity);

      CommandOutput<?, ?> response = this.executePreparedSql(cmds);

      JsonArray array = this.getSchema(response);

      this.buildMetadataColumnMap(array);
      this.parseInputQuery(inputQuery);
      List<String> sourceColumns = this.getMetadataColumnList();

      for (ColumnAttributes colMap : this.columnAliasMap) {
        String alias = colMap.getAliasName();
        String columnName = colMap.getColumnName();
        String sourceColumnName = colMap.getSourceColumnName();
        if (this.isMetadataColumn(columnName, sourceColumns)) {
          String targetColumnName = this.getTargetColumnName(columnName, alias);
          Schema obj = this.getUpdatedSchemaObject(columnName, alias, targetColumnName);
          String jsonStr = gson.toJson(obj);
          JsonObject jsonObject = gson.fromJson(jsonStr, JsonObject.class).getAsJsonObject();
          targetSchema.add(jsonObject);
          headerColumns.add(targetColumnName);
          this.columnList.add(sourceColumnName);
        }
      }

      if (this.hasMultipleWatermarkColumns(watermarkColumn)) {
        this.columnList.add(derivedWatermarkColumnName);
        headerColumns.add(derivedWatermarkColumnName);
        targetSchema.add(defaultWatermark);
        this.workUnitState.setProp(ConfigurationKeys.EXTRACT_DELTA_FIELDS_KEY, derivedWatermarkColumnName);
      }

      String outputColProjection = Joiner.on(",").useForNull("null").join(this.columnList);
      outputColProjection = outputColProjection.replace(derivedWatermarkColumnName,
          Utils.getCoalesceColumnNames(watermarkColumn) + " AS " + derivedWatermarkColumnName);
      this.setOutputColumnProjection(outputColProjection);
      String extractQuery = this.getExtractQuery(schema, entity, inputQuery);

      this.setHeaderRecord(headerColumns);
      this.setOutputSchema(targetSchema);
      this.setExtractSql(extractQuery);
      // this.workUnit.getProp(ConfigurationKeys.EXTRACT_TABLE_NAME_KEY,
      // this.escapeCharsInColumnName(this.workUnit.getProp(ConfigurationKeys.SOURCE_ENTITY),
      // ConfigurationKeys.ESCAPE_CHARS_IN_COLUMN_NAME, "_"));
      this.log.info("Schema:" + targetSchema);
      this.log.info("Extract query: " + this.getExtractSql());
    } catch (RuntimeException | IOException | SchemaException e) {
      throw new SchemaException("Failed to get metadata using JDBC; error - " + e.getMessage(), e);
    }
  }

  /**
   * Build/Format input query in the required format
   *
   * @param schema
   * @param entity
   * @param inputQuery
   * @return formatted extract query
   */
  private String getExtractQuery(String schema, String entity, String inputQuery) {
    String inputColProjection = this.getInputColumnProjection();
    String outputColProjection = this.getOutputColumnProjection();
    String query = inputQuery;
    if (query == null) {
      // if input query is null, build the query from metadata
      query = "SELECT " + outputColProjection + " FROM " + schema + "." + entity;
    } else {
      // replace input column projection with output column projection
      if (StringUtils.isNotBlank(inputColProjection)) {
        query = query.replace(inputColProjection, outputColProjection);
      }
    }

    String watermarkPredicateSymbol = ConfigurationKeys.DEFAULT_SOURCE_QUERYBASED_WATERMARK_PREDICATE_SYMBOL;
    if (!query.contains(watermarkPredicateSymbol)) {
      query = SqlQueryUtils.addPredicate(query, watermarkPredicateSymbol);
    }
    return query;
  }

  /**
   * Update schema of source column Update column name with target column
   * name/alias Update watermark, nullable and primary key flags
   *
   * @param sourceColumnName
   * @param targetColumnName
   * @return schema object of a column
   */
  private Schema getUpdatedSchemaObject(String sourceColumnName, String alias, String targetColumnName) {
    // Check for source column and alias
    Schema obj = this.getMetadataColumnMap().get(sourceColumnName.toLowerCase());
    if (obj == null && alias != null) {
      obj = this.getMetadataColumnMap().get(alias.toLowerCase());
    }

    if (obj == null) {
      obj = getCustomColumnSchema(targetColumnName);
    } else {
      String watermarkColumn = this.workUnitState.getProp(ConfigurationKeys.EXTRACT_DELTA_FIELDS_KEY);
      String primarykeyColumn = this.workUnitState.getProp(ConfigurationKeys.EXTRACT_PRIMARY_KEY_FIELDS_KEY);
      boolean isMultiColumnWatermark = this.hasMultipleWatermarkColumns(watermarkColumn);

      obj.setColumnName(targetColumnName);
      boolean isWatermarkColumn = this.isWatermarkColumn(watermarkColumn, sourceColumnName);
      if (isWatermarkColumn) {
        this.updateDeltaFieldConfig(sourceColumnName, targetColumnName);
      } else if (alias != null) {
        // Check for alias
        isWatermarkColumn = this.isWatermarkColumn(watermarkColumn, alias);
        this.updateDeltaFieldConfig(alias, targetColumnName);
      }

      // If there is only one watermark column, then consider it as a
      // watermark. Otherwise add a default watermark column in the end
      if (!isMultiColumnWatermark) {
        obj.setWaterMark(isWatermarkColumn);
      }

      // override all columns to nullable except primary key and watermark
      // columns
      if ((isWatermarkColumn && !isMultiColumnWatermark)
          || this.getPrimarykeyIndex(primarykeyColumn, sourceColumnName) > 0) {
        obj.setNullable(false);
      } else {
        obj.setNullable(true);
      }

      // set primary key index for all the primary key fields
      int primarykeyIndex = this.getPrimarykeyIndex(primarykeyColumn, sourceColumnName);
      if (primarykeyIndex > 0 && (!sourceColumnName.equalsIgnoreCase(targetColumnName))) {
        this.updatePrimaryKeyConfig(sourceColumnName, targetColumnName);
      }

      obj.setPrimaryKey(primarykeyIndex);
    }
    return obj;
  }

  /**
   * Get target column name if column is not found in metadata, then name it
   * as unknown column If alias is not found, target column is nothing but
   * source column
   *
   * @param sourceColumnName
   * @param alias
   * @return targetColumnName
   */
  private String getTargetColumnName(String sourceColumnName, String alias) {
    String targetColumnName = alias;
    Schema obj = this.getMetadataColumnMap().get(sourceColumnName.toLowerCase());
    if (obj == null) {
      targetColumnName = (targetColumnName == null ? "unknown" + this.unknownColumnCounter : targetColumnName);
      this.unknownColumnCounter++;
    } else {
      targetColumnName = (StringUtils.isNotBlank(targetColumnName) ? targetColumnName : sourceColumnName);
    }
    targetColumnName = this.toCase(targetColumnName);
    return Utils.escapeSpecialCharacters(targetColumnName, ConfigurationKeys.ESCAPE_CHARS_IN_COLUMN_NAME, "_");
  }

  /**
   * Build metadata column map with column name and column schema object.
   * Build metadata column list with list columns in metadata
   *
   * @param array Schema of all columns
   */
  private void buildMetadataColumnMap(JsonArray array) {
    if (array != null) {
      for (JsonElement columnElement : array) {
        Schema schemaObj = gson.fromJson(columnElement, Schema.class);
        String columnName = schemaObj.getColumnName();
        this.metadataColumnMap.put(columnName.toLowerCase(), schemaObj);
        this.metadataColumnList.add(columnName.toLowerCase());
      }
    }
  }

  /**
   * Update water mark column property if there is an alias defined in query
   *
   * @param srcColumnName source column name
   * @param tgtColumnName target column name
   */
  private void updateDeltaFieldConfig(String srcColumnName, String tgtColumnName) {
    if (this.workUnitState.contains(ConfigurationKeys.EXTRACT_DELTA_FIELDS_KEY)) {
      String watermarkCol = this.workUnitState.getProp(ConfigurationKeys.EXTRACT_DELTA_FIELDS_KEY);
      this.workUnitState.setProp(ConfigurationKeys.EXTRACT_DELTA_FIELDS_KEY,
          watermarkCol.replaceAll(srcColumnName, tgtColumnName));
    }
  }

  /**
   * Update primary key column property if there is an alias defined in query
   *
   * @param srcColumnName source column name
   * @param tgtColumnName target column name
   */
  private void updatePrimaryKeyConfig(String srcColumnName, String tgtColumnName) {
    if (this.workUnitState.contains(ConfigurationKeys.EXTRACT_PRIMARY_KEY_FIELDS_KEY)) {
      String primarykey = this.workUnitState.getProp(ConfigurationKeys.EXTRACT_PRIMARY_KEY_FIELDS_KEY);
      this.workUnitState.setProp(ConfigurationKeys.EXTRACT_PRIMARY_KEY_FIELDS_KEY,
          primarykey.replaceAll(srcColumnName, tgtColumnName));
    }
  }

  /**
   * If input query is null or '*' in the select list, consider all columns.
   *
   * @return true, to select all colums. else, false.
   */
  private boolean isSelectAllColumns() {
    String columnProjection = this.getInputColumnProjection();
    if (columnProjection == null || columnProjection.trim().equals("*") || columnProjection.contains(".*")) {
      return true;
    }
    return false;
  }

  /**
   * Parse query provided in pull file Set input column projection - column
   * projection in the input query Set columnAlias map - column and its alias
   * mentioned in input query
   *
   * @param query input query
   */
  private void parseInputQuery(String query) {
    List<String> projectedColumns = new ArrayList<>();
    if (StringUtils.isNotBlank(query)) {
      String queryLowerCase = query.toLowerCase();
      int startIndex = queryLowerCase.indexOf("select ") + 7;
      int endIndex = queryLowerCase.indexOf(" from ");
      if (startIndex >= 0 && endIndex >= 0) {
        String columnProjection = query.substring(startIndex, endIndex);
        this.setInputColumnProjection(columnProjection);
        // parse the select list
        StringBuffer sb = new StringBuffer();
        int bracketCount = 0;
        for (int i = 0; i < columnProjection.length(); i++) {
          char c = columnProjection.charAt(i);
          if (c == '(') {
            bracketCount++;
          }

          if (c == ')') {
            bracketCount--;
          }

          if (bracketCount != 0) {
            sb.append(c);
          } else {
            if (c != ',') {
              sb.append(c);
            } else {
              projectedColumns.add(sb.toString());
              sb = new StringBuffer();
            }
          }
        }
        projectedColumns.add(sb.toString());
      }
    }

    if (this.isSelectAllColumns()) {
      List<String> columnList = this.getMetadataColumnList();
      for (String columnName : columnList) {
        ColumnAttributes col = new ColumnAttributes();
        col.setColumnName(columnName);
        col.setAliasName(columnName);
        col.setSourceColumnName(columnName);
        this.addToColumnAliasMap(col);
      }
    } else {
      for (String projectedColumn : projectedColumns) {
        String column = projectedColumn.trim();
        String alias = null;
        String sourceColumn = column;
        int spaceOccurences = StringUtils.countMatches(column.trim(), " ");
        if (spaceOccurences > 0) {
          // separate column and alias if they are separated by "as"
          // or space
          int lastSpaceIndex = column.toLowerCase().lastIndexOf(" as ");
          sourceColumn = column.substring(0, lastSpaceIndex);
          alias = column.substring(lastSpaceIndex + 4);
        }

        // extract column name if projection has table name in it
        String columnName = sourceColumn;
        if (sourceColumn.contains(".")) {
          columnName = sourceColumn.substring(sourceColumn.indexOf(".") + 1);
        }

        ColumnAttributes col = new ColumnAttributes();
        col.setColumnName(columnName);
        col.setAliasName(alias);
        col.setSourceColumnName(sourceColumn);
        this.addToColumnAliasMap(col);
      }
    }
  }

  /**
   * Execute query using JDBC simple Statement Set fetch size
   *
   * @param cmds commands - query, fetch size
   * @return JDBC ResultSet
   * @throws Exception
   */
  private CommandOutput<?, ?> executeSql(List<Command> cmds) {
    String query = null;
    int fetchSize = 0;

    for (Command cmd : cmds) {
      if (cmd instanceof JdbcCommand) {
        JdbcCommandType type = (JdbcCommandType) cmd.getCommandType();
        switch (type) {
          case QUERY:
            query = cmd.getParams().get(0);
            break;
          case FETCHSIZE:
            fetchSize = Integer.parseInt(cmd.getParams().get(0));
            break;
          default:
            this.log.error("Command " + type.toString() + " not recognized");
            break;
        }
      }
    }

    this.log.info("Executing query:" + query);
    ResultSet resultSet = null;
    try {
      this.jdbcSource = createJdbcSource();
      this.dataConnection = this.jdbcSource.getConnection();
      Statement statement = this.dataConnection.createStatement();

      if (fetchSize != 0 && this.getExpectedRecordCount() > 2000) {
        statement.setFetchSize(fetchSize);
      }
      final boolean status = statement.execute(query);
      if (status == false) {
        this.log.error("Failed to execute sql:" + query);
      }
      resultSet = statement.getResultSet();
    } catch (Exception e) {
      this.log.error("Failed to execute sql:" + query + " ;error-" + e.getMessage(), e);
    }

    CommandOutput<JdbcCommand, ResultSet> output = new JdbcCommandOutput();
    output.put((JdbcCommand) cmds.get(0), resultSet);
    return output;
  }

  /**
   * Execute query using JDBC PreparedStatement to pass query parameters Set
   * fetch size
   *
   * @param cmds commands - query, fetch size, query parameters
   * @return JDBC ResultSet
   * @throws Exception
   */
  private CommandOutput<?, ?> executePreparedSql(List<Command> cmds) {
    String query = null;
    List<String> queryParameters = null;
    int fetchSize = 0;

    for (Command cmd : cmds) {
      if (cmd instanceof JdbcCommand) {
        JdbcCommandType type = (JdbcCommandType) cmd.getCommandType();
        switch (type) {
          case QUERY:
            query = cmd.getParams().get(0);
            break;
          case QUERYPARAMS:
            queryParameters = cmd.getParams();
            break;
          case FETCHSIZE:
            fetchSize = Integer.parseInt(cmd.getParams().get(0));
            break;
          default:
            this.log.error("Command " + type.toString() + " not recognized");
            break;
        }
      }
    }

    this.log.info("Executing query:" + query);
    ResultSet resultSet = null;
    try {
      this.jdbcSource = createJdbcSource();
      this.dataConnection = this.jdbcSource.getConnection();

      PreparedStatement statement =
          this.dataConnection.prepareStatement(query, ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);

      int parameterPosition = 1;
      if (queryParameters != null && queryParameters.size() > 0) {
        for (String parameter : queryParameters) {
          statement.setString(parameterPosition, parameter);
          parameterPosition++;
        }
      }
      if (fetchSize != 0) {
        statement.setFetchSize(fetchSize);
      }
      final boolean status = statement.execute();
      if (status == false) {
        this.log.error("Failed to execute sql:" + query);
      }
      resultSet = statement.getResultSet();

    } catch (Exception e) {
      this.log.error("Failed to execute sql:" + query + " ;error-" + e.getMessage(), e);
    }

    CommandOutput<JdbcCommand, ResultSet> output = new JdbcCommandOutput();
    output.put((JdbcCommand) cmds.get(0), resultSet);
    return output;
  }

  /**
   * Create JDBC source to get connection
   *
   * @return JDBCSource
   */
  protected JdbcProvider createJdbcSource() {
    String driver = this.workUnitState.getProp(ConfigurationKeys.SOURCE_CONN_DRIVER);
    String userName = this.workUnitState.getProp(ConfigurationKeys.SOURCE_CONN_USERNAME);
    String password = PasswordManager.getInstance(this.workUnitState)
        .readPassword(this.workUnitState.getProp(ConfigurationKeys.SOURCE_CONN_PASSWORD));
    String connectionUrl = this.getConnectionUrl();

    String proxyHost = this.workUnitState.getProp(ConfigurationKeys.SOURCE_CONN_USE_PROXY_URL);
    int proxyPort = this.workUnitState.getProp(ConfigurationKeys.SOURCE_CONN_USE_PROXY_PORT) != null
        ? this.workUnitState.getPropAsInt(ConfigurationKeys.SOURCE_CONN_USE_PROXY_PORT) : -1;

    if (this.jdbcSource == null || this.jdbcSource.isClosed()) {
      this.jdbcSource = new JdbcProvider(driver, connectionUrl, userName, password, 1, this.getTimeOut(), "DEFAULT",
          proxyHost, proxyPort);
      return this.jdbcSource;
    } else {
      return this.jdbcSource;
    }
  }

  @Override
  public long getMaxWatermark(String schema, String entity, String watermarkColumn, List<Predicate> predicateList,
      String watermarkSourceFormat) throws HighWatermarkException {
    this.log.info("Get high watermark using JDBC");
    long calculatedHighWatermark = ConfigurationKeys.DEFAULT_WATERMARK_VALUE;

    try {
      List<Command> cmds = this.getHighWatermarkMetadata(schema, entity, watermarkColumn, predicateList);
      CommandOutput<?, ?> response = this.executeSql(cmds);
      calculatedHighWatermark = this.getHighWatermark(response, watermarkColumn, watermarkSourceFormat);
      return calculatedHighWatermark;
    } catch (Exception e) {
      throw new HighWatermarkException("Failed to get high watermark using JDBC; error - " + e.getMessage(), e);
    }
  }

  @Override
  public long getSourceCount(String schema, String entity, WorkUnit workUnit, List<Predicate> predicateList)
      throws RecordCountException {
    this.log.info("Get source record count using JDBC");
    long count = 0;
    try {
      List<Command> cmds = this.getCountMetadata(schema, entity, workUnit, predicateList);
      CommandOutput<?, ?> response = this.executeSql(cmds);
      count = this.getCount(response);
      this.log.info("Source record count:" + count);
      return count;
    } catch (Exception e) {
      throw new RecordCountException("Failed to get source record count using JDBC; error - " + e.getMessage(), e);
    }
  }

  @Override
  public Iterator<JsonElement> getRecordSet(String schema, String entity, WorkUnit workUnit,
      List<Predicate> predicateList) throws DataRecordException, IOException {
    Iterator<JsonElement> rs = null;
    List<Command> cmds;
    try {
      if (isFirstPull()) {
        this.log.info("Get data recordset using JDBC");
        cmds = this.getDataMetadata(schema, entity, workUnit, predicateList);
        this.dataResponse = this.executePreparedSql(cmds);
        this.setFirstPull(false);
      }

      rs = this.getData(this.dataResponse);
      return rs;
    } catch (Exception e) {
      throw new DataRecordException("Failed to get record set using JDBC; error - " + e.getMessage(), e);
    }
  }

  @Override
  public JsonArray getSchema(CommandOutput<?, ?> response) throws SchemaException, IOException {
    this.log.debug("Extract schema from resultset");
    ResultSet resultset = null;
    Iterator<ResultSet> itr = (Iterator<ResultSet>) response.getResults().values().iterator();
    if (itr.hasNext()) {
      resultset = itr.next();
    } else {
      throw new SchemaException("Failed to get schema from database - Resultset has no records");
    }

    JsonArray fieldJsonArray = new JsonArray();
    try {
      while (resultset.next()) {
        Schema schema = new Schema();
        String columnName = resultset.getString(1);
        schema.setColumnName(columnName);

        String dataType = resultset.getString(2);
        String elementDataType = "string";
        List<String> mapSymbols = null;
        JsonObject newDataType = this.convertDataType(columnName, dataType, elementDataType, mapSymbols);

        schema.setDataType(newDataType);
        schema.setLength(resultset.getLong(3));
        schema.setPrecision(resultset.getInt(4));
        schema.setScale(resultset.getInt(5));
        schema.setNullable(resultset.getBoolean(6));
        schema.setFormat(resultset.getString(7));
        schema.setComment(resultset.getString(8));
        schema.setDefaultValue(null);
        schema.setUnique(false);

        String jsonStr = gson.toJson(schema);
        JsonObject obj = gson.fromJson(jsonStr, JsonObject.class).getAsJsonObject();
        fieldJsonArray.add(obj);
      }
    } catch (Exception e) {
      throw new SchemaException("Failed to get schema from database; error - " + e.getMessage(), e);
    }

    return fieldJsonArray;
  }

  @Override
  public long getHighWatermark(CommandOutput<?, ?> response, String watermarkColumn, String watermarkColumnFormat)
      throws HighWatermarkException {
    this.log.debug("Extract high watermark from resultset");
    ResultSet resultset = null;
    Iterator<ResultSet> itr = (Iterator<ResultSet>) response.getResults().values().iterator();
    if (itr.hasNext()) {
      resultset = itr.next();
    } else {
      throw new HighWatermarkException("Failed to get high watermark from database - Resultset has no records");
    }

    Long HighWatermark;
    try {
      String watermark;
      if (resultset.next()) {
        watermark = resultset.getString(1);
      } else {
        watermark = null;
      }

      if (watermark == null) {
        return ConfigurationKeys.DEFAULT_WATERMARK_VALUE;
      }

      if (watermarkColumnFormat != null) {
        SimpleDateFormat inFormat = new SimpleDateFormat(watermarkColumnFormat);
        Date date = null;
        try {
          date = inFormat.parse(watermark);
        } catch (ParseException e) {
          this.log.error("ParseException: " + e.getMessage(), e);
        }
        SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        HighWatermark = Long.parseLong(outFormat.format(date));
      } else {
        HighWatermark = Long.parseLong(watermark);
      }
    } catch (Exception e) {
      throw new HighWatermarkException("Failed to get high watermark from database; error - " + e.getMessage(), e);
    }

    return HighWatermark;
  }

  @Override
  public long getCount(CommandOutput<?, ?> response) throws RecordCountException {
    this.log.debug("Extract source record count from resultset");
    ResultSet resultset = null;
    long count = 0;
    Iterator<ResultSet> itr = (Iterator<ResultSet>) response.getResults().values().iterator();
    if (itr.hasNext()) {
      resultset = itr.next();

      try {
        if (resultset.next()) {
          count = resultset.getLong(1);
        }
      } catch (Exception e) {
        throw new RecordCountException("Failed to get source record count from database; error - " + e.getMessage(), e);
      }
    } else {
      throw new RuntimeException("Failed to get source record count from database - Resultset has no records");
    }

    return count;
  }

  @Override
  public Iterator<JsonElement> getData(CommandOutput<?, ?> response) throws DataRecordException, IOException {
    this.log.debug("Extract data records from resultset");

    RecordSetList<JsonElement> recordSet = this.getNewRecordSetList();

    if (response == null || !this.hasNextRecord()) {
      return recordSet.iterator();
    }

    ResultSet resultset = null;
    Iterator<ResultSet> itr = (Iterator<ResultSet>) response.getResults().values().iterator();
    if (itr.hasNext()) {
      resultset = itr.next();
    } else {
      throw new DataRecordException("Failed to get source record count from database - Resultset has no records");
    }

    try {
      final ResultSetMetaData resultsetMetadata = resultset.getMetaData();

      int batchSize = this.workUnitState.getPropAsInt(ConfigurationKeys.SOURCE_QUERYBASED_FETCH_SIZE, 0);
      batchSize = (batchSize == 0 ? ConfigurationKeys.DEFAULT_SOURCE_FETCH_SIZE : batchSize);

      int recordCount = 0;
      while (resultset.next()) {

        final int numColumns = resultsetMetadata.getColumnCount();
        JsonObject jsonObject = new JsonObject();

        for (int i = 1; i < numColumns + 1; i++) {
          final String columnName = this.getHeaderRecord().get(i - 1);
          jsonObject.addProperty(columnName, parseColumnAsString(resultset, resultsetMetadata, i));

        }

        recordSet.add(jsonObject);

        recordCount++;
        this.totalRecordCount++;

        // Insert records in record set until it reaches the batch size
        if (recordCount >= batchSize) {
          this.log.info("Total number of records processed so far: " + this.totalRecordCount);
          return recordSet.iterator();
        }
      }
      this.setNextRecord(false);
      this.log.info("Total number of records processed so far: " + this.totalRecordCount);
      return recordSet.iterator();
    } catch (Exception e) {
      throw new DataRecordException("Failed to get records from database; error - " + e.getMessage(), e);
    }
  }

  /*
   * For Blob data, need to get the bytes and use base64 encoding to encode the byte[]
   * When reading from the String, need to use base64 decoder
   *     String tmp = ... ( get the String value )
   *     byte[] foo = Base64.decodeBase64(tmp);
   */
  private String readBlobAsString(Blob logBlob) throws SQLException {
    byte[] ba = logBlob.getBytes(1L, (int) (logBlob.length()));

    if (ba == null) {
      return StringUtils.EMPTY;
    }
    String baString = Base64.encodeBase64String(ba);
    return baString;
  }

  /**
   * HACK: there is a bug in the MysqlExtractor where tinyint columns are always treated as ints.
   * There are MySQL jdbc driver setting (tinyInt1isBit=true and transformedBitIsBoolean=false) that
   * can cause tinyint(1) columns to be treated as BIT/BOOLEAN columns. The default behavior is to
   * treat tinyint(1) as BIT.
   *
   * Currently, {@link MysqlExtractor#getDataTypeMap()} uses the information_schema to check types.
   * That does not do the above conversion. {@link #parseColumnAsString(ResultSet, ResultSetMetaData, int)}
   * which does the above type mapping.
   *
   * On the other hand, SqlServerExtractor treats BIT columns as Booleans. So we can be in a bind
   * where sometimes BIT has to be converted to an int (for backwards compatibility in MySQL) and
   * sometimes to a Boolean (for SqlServer).
   *
   * This function adds configurable behavior depending on the Extractor type.
   **/
  protected boolean convertBitToBoolean() {
    return true;
  }

  private String parseColumnAsString(final ResultSet resultset, final ResultSetMetaData resultsetMetadata, int i)
      throws SQLException {

    if (isBlob(resultsetMetadata.getColumnType(i))) {
      return readBlobAsString(resultset.getBlob(i));
    }
    if ((resultsetMetadata.getColumnType(i) == Types.BIT
         || resultsetMetadata.getColumnType(i) == Types.BOOLEAN)
        && convertBitToBoolean()) {
      return Boolean.toString(resultset.getBoolean(i));
    }
    return resultset.getString(i);
  }

  private static boolean isBlob(int columnType) {
    return columnType == Types.LONGVARBINARY || columnType == Types.BINARY;
  }

  protected static Command getCommand(String query, JdbcCommandType commandType) {
    return new JdbcCommand().build(Arrays.asList(query), commandType);
  }

  protected static Command getCommand(int fetchSize, JdbcCommandType commandType) {
    return new JdbcCommand().build(Arrays.asList(Integer.toString(fetchSize)), commandType);
  }

  protected static Command getCommand(List<String> params, JdbcCommandType commandType) {
    return new JdbcCommand().build(params, commandType);
  }

  /**
   * Concatenate all predicates with "and" clause
   *
   * @param predicateList list of predicate(filter) conditions
   * @return predicate
   */
  protected String concatPredicates(List<Predicate> predicateList) {
    List<String> conditions = new ArrayList<>();
    for (Predicate predicate : predicateList) {
      conditions.add(predicate.getCondition());
    }
    return Joiner.on(" and ").skipNulls().join(conditions);
  }

  /**
   * Schema of default watermark column-required if there are multiple watermarks
   *
   * @return column schema
   */
  private JsonObject getDefaultWatermark() {
    Schema schema = new Schema();
    String dataType;
    String columnName = "derivedwatermarkcolumn";

    schema.setColumnName(columnName);

    WatermarkType wmType = WatermarkType.valueOf(
        this.workUnitState.getProp(ConfigurationKeys.SOURCE_QUERYBASED_WATERMARK_TYPE, "TIMESTAMP").toUpperCase());
    switch (wmType) {
      case TIMESTAMP:
        dataType = "timestamp";
        break;
      case DATE:
        dataType = "date";
        break;
      default:
        dataType = "int";
        break;
    }

    String elementDataType = "string";
    List<String> mapSymbols = null;
    JsonObject newDataType = this.convertDataType(columnName, dataType, elementDataType, mapSymbols);
    schema.setDataType(newDataType);
    schema.setWaterMark(true);
    schema.setPrimaryKey(0);
    schema.setLength(0);
    schema.setPrecision(0);
    schema.setScale(0);
    schema.setNullable(false);
    schema.setFormat(null);
    schema.setComment("Default watermark column");
    schema.setDefaultValue(null);
    schema.setUnique(false);

    String jsonStr = gson.toJson(schema);
    JsonObject obj = gson.fromJson(jsonStr, JsonObject.class).getAsJsonObject();
    return obj;
  }

  /**
   * Schema of a custom column - required if column not found in metadata
   *
   * @return column schema
   */
  private Schema getCustomColumnSchema(String columnName) {
    Schema schema = new Schema();
    String dataType = "string";
    schema.setColumnName(columnName);
    String elementDataType = "string";
    List<String> mapSymbols = null;
    JsonObject newDataType = this.convertDataType(columnName, dataType, elementDataType, mapSymbols);
    schema.setDataType(newDataType);
    schema.setWaterMark(false);
    schema.setPrimaryKey(0);
    schema.setLength(0);
    schema.setPrecision(0);
    schema.setScale(0);
    schema.setNullable(true);
    schema.setFormat(null);
    schema.setComment("Custom column");
    schema.setDefaultValue(null);
    schema.setUnique(false);
    return schema;
  }

  /**
   * New record set for iterator
   *
   * @return RecordSetList
   */
  private static RecordSetList<JsonElement> getNewRecordSetList() {
    return new RecordSetList<>();
  }

  /**
   * Change the column name case to upper, lower or nochange; Default nochange
   *
   * @return column name with the required case
   */
  private String toCase(String targetColumnName) {
    String columnName = targetColumnName;
    ColumnNameCase caseType = ColumnNameCase.valueOf(this.workUnitState
        .getProp(ConfigurationKeys.SOURCE_COLUMN_NAME_CASE, ConfigurationKeys.DEFAULT_COLUMN_NAME_CASE).toUpperCase());
    switch (caseType) {
      case TOUPPER:
        columnName = targetColumnName.toUpperCase();
        break;
      case TOLOWER:
        columnName = targetColumnName.toLowerCase();
        break;
      default:
        columnName = targetColumnName;
        break;
    }
    return columnName;
  }

  @Override
  public void closeConnection() throws Exception {
    this.jdbcSource.close();
    if (this.dataConnection != null) {
      try {
        this.dataConnection.close();
      } catch (SQLException e) {
        this.log.error("Failed to close connection ;error-" + e.getMessage(), e);
      }
    }
  }
}


text:
Lochalsh Junior Pipe band are British Champions
The Lochalsh Junior Pipe Band achieved first place in Novice B section of the British Pipe Band Championships in Paisley, and are now British Champions.
This follows several competition successes.
The championships took place on Saturday 20 May.
Highland Council Music Instructors Niall Stewart (pipes) and Drew Caldwell (drums), who tutor the band and teach the members during their weekly lessons are rightly proud of the achievements.
They stated that "…there is a high level of commitment from pupils and families to the work of the band and this has paid off recently with great achievements for such a young group."
Highland Council's Music Development Officer, Norman Bolton, added: "We have a tradition of supporting youth music in all its forms right across Highland and the determination of this group to make the most of opportunities and develop is a testament to the structure in their teaching and the commitment given to many hours of additional work that goes into this level of achievement.
"The aspects of teamwork and discipline involved in participating in a musical activity of this nature allow our young people to develop skills which will stand them in good stead in the wider world of work and community well beyond their years at school."


Building Care construction is underway. From now until building opening in Spring 2022, there will be ongoing construction activity at the hospital campus. Seattle Children's will publish a weekly post on this Construction Blog that outlines the work expected to occur the following week. We will also post to this blog whenever a construction activity will be especially impactful to neighbors.
Construction noise will be generated throughout the week. The noisiest external work will be installing tie backs/anchors (scheduled for April 29 to May 1) and the core drilling (scheduled for May 1 to May 6). The noisiest internal work will be the installation of new pipe pathways.
Expect heavy truck traffic as excavated soil is hauled away from the site. Construction activity is weather-dependent and subject to change based on conditions.
All work will take place within standard construction hours: 8 a.m. to 6 p.m. Monday to Friday, and 9 a.m. to 6 p.m. on Saturday.
Please call 206-987-8000 or email construction@seattlechildrens.org with questions.
Drill Rig Delivery April 25 at 5 a.m.
A new drill rig will be delivered to the Building Care construction site and unloaded on Thursday, April 25 beginning at 5 a.m. The truck delivering the drill rig will enter and exit the site via the Sand Point Way construction entrance. This work is occurring early to minimize traffic impacts from the oversize load. Moderate noise will be generated during the unloading, but impacts to neighbors should be minimal because the unloading will take place within the fenced construction site. If you have questions, please call 206-987-8000 or email construction@seattlechildrens.org.
Construction noise will be generated throughout the week. The noisiest external work will be the pile-drilling, which is scheduled for April 22 and April 23. The noisiest internal work will be the installation of new pipe pathways.
This Saturday, April 13, a construction crew will install insulation at the Hartmann Building, 4575 Sand Point Way NE. Though the work will take place indoors, an air compressor will be used outside between 8 a.m. and 5 p.m., which will generate moderate levels of noise. If you have questions, call 206-987-8000 or email construction@seattlechildrens.org.
Construction noise will be generated throughout the week. The noisiest external work will be drilling for piles and rebar, which will take place all week. The noisiest internal work will be the installation of new pipe pathways.
Construction noise will be generated throughout the week. The noisiest external work will be drilling new piles and demolishing some existing piles, which will take place all week. The noisiest internal work will be the installation of new pipe pathways.
On Saturday, March 30, a large crane will be delivered to the hospital campus at 8 a.m. and used to remove a temporary generator located near the Mountain building. Large vehicles associated with the crane delivery will enter and exit the hospital campus via Penny Drive at Sand Point Way NE; we do not anticipate impacts to traffic on Sand Point Way. Normal construction noise levels are expected. The crane will be removed from the site by the end of the day.
Please note this work is separate from Building Care, which uses its own crane.
For questions or concerns, please call the construction pager at 206-469-5860. Thank you for your patience.
Wood-chipping will occur at the hospital campus on Tuesday, March 26 within the Building Care construction area. The chipping will generate normal levels of construction noise all day.
The work to load out the current crane and load in the new crane will begin at 5 a.m. on Friday, April 5. The loading and unloading will take place within an existing no parking zone on 40th Avenue NE between NE 45th Street and Sand Point Way NE. This work is occurring early to minimize traffic impacts from the oversize load.
Construction noise will be generated throughout the week. The noisiest external work will be the crane load-out and load-in the morning of April 5 and installing tie backs/anchors, which will take place all week. The noisiest internal work will be the core drilling and installing new pipe pathways.
All work (other than the crane load-out and load-in discussed above) will take place within standard construction hours: 8 a.m. to 6 p.m. Monday to Friday, and 9 a.m. to 6 p.m. on Saturday.
Construction noise will be generated throughout the week. The noisiest external work will be installing tie backs/anchors, which will take place all week. The noisiest internal work will be associated with installing new pipe pathways.


text:
require 'minitest/spec'
require 'minitest-chef-handler'

module ConsulKv
  # This module is used to extract common inclusions as well as provide any
  # useful methods that might be used across many test files
  module TestHelper
    include MiniTest::Chef::Assertions
    include MiniTest::Chef::Context
    include MiniTest::Chef::Resources
  end
end


Welcome to FetCast, this week KingHulk is joined by BustyGeek, DC and MassageMeDeep in a fantastic epiosde all about 69 and oral!
To BustyGeek, DC and MassageMeDeep. All of you were wonderful!
FetCast Episode 68: Baltimore LIVE!
Welcome to FetCast. This week KingHulk is at the Baltimore Playhouse for Scene and Screams 3, with a couple guests popping up. Sorry about the shortness of the epiosde. Had some equipment issues, but still have an episode for you!
Thank you to the Baltimore Playhouse and BearsCarol and BeavisBear!
Thank you both for coming on the show, it was fantastic chatting with you!


William B. Barton is a founding partner of the McLean, Virginia, law firm of Barton, Baker, Thomas, & Tolle, now Baker, Cronogue, Tolle & Werfel, LLP, where he specializes in all aspects of Government contracts, corporate counseling, mergers and acquisitions, commercial/corporate transactions and corporate finance; he also assists clients with commercial transactions, corporate strategy, board counseling and has presented numerous cases in civil litigation. He began his career as an attorney for the Federal Government working first with The Department of Air Force for five years followed by The Department of Navy where he litigated complex shipbuilding and weapon systems claims.
Since 1976 Mr. Barton has been in private practice where he devotes the principal part of his time to representing Government contractors from a variety of industries (including commercial products) in all aspects of their contractual relations with the Federal Government including, GSA schedule contracts, cost and pricing issues, pre- and post award audits, compliance reviews, labor issues, IG investigations, rights in data, teaming agreements, size protests, performance disputes, claims, suspensions and debarment. He has litigated disputes before all of the major Boards of Contract Appeals (including protests at the General Services Board of Contract Appeals), the U. S. Court of Federal Claims and U. S. District Courts, the Small Business Administration Office of Hearings and Appeals and has appeared frequently before the General Accounting Office on bid protests. He served for 10 years as a member of the panel of arbitrators for the American Arbitration Association and continues to serve on several Boards of Directors and is outside counsel for a number of corporations.
Mr. Barton has most recently been focused on assisting companies with their growth and restructuring which has included a variety of tasks such as working with the principals in the location of asset based financing and private equity investors, introductions to venture capital and other early stage financing, aiding companies in the sale of their business and identification of potential buyers, positioning for equity markets, equity restructuring, mergers and acquisitions, development of acquisition strategies, terms of sale and due diligence in the purchase of acquisition candidates. Mr. Barton has worked especially closely with early and mid stage companies in the technology, services and telecommunications industries.
Mr. Barton has published extensively in the field of Government contracts and has lectured for professional seminars sponsored by groups such as Federal Publications and has taught sections of a course on GSA Schedule Contracts for the University of Virginia. A list of some of Mr. Barton's Articles and Lectures is contained below. Mr. Barton is an active member of the American Bar Association Public Contract Law Section - commercial products and claims committees - and is past President of the McLean Bar Association.
Mr. Barton has also served as Chairman of the Program Committee and Membership Committee for the National Capital Chapter of the Association for Corporate Growth and is currently serving as Vice Chairman of the Sibley Memorial Hospital Board of Trustees, part of the John's Hopkins Health System. In 2014, Mr. Barton transitioned to Of Counsel status with the firm and currently engages in special projects.
Compliance with the Trade Agreements Act, Set-Aside Alert, at page 5 (October 10, 2005).


text:
Keyword: massshootings
Undercover Investigation: Minneapolis riot was preplanned [check out sunrisemovement.org ]
06/17/2020 7:13:59 PM PDT · by FrdmLvr · 58 replies
YouTube ^ | 6-8-20 | Millennial Millie
Millennial Millie does an expose on who is behind the riot insurrections, the connection with the Green New Deal, the group that recruits school children as young as middle schoolers as foot soldiers in the ranks of Antifa and BLM, and who have gotten 16 of the 30 Democrat candidates they promoted elected in 2018 including Cortez, Omar, Talib and Presley. A must see.
Mass Shootings: The Politicization of Tragedy and Fact-Free Data
03/11/2020 5:51:33 AM PDT · by The Houston Courant · 3 replies
The Houston Courant ^ | March 4th, 2020 | M. Tremoglie
There was another mass shooting in America. This time at a Molson Coors brewery in Milwaukee on February 26. An employee walked in the plant and, for inexplicable reasons, gunned down five people before committing suicide. This tragedy has once again sparked the discussion of gun control. The usual suspects are making the usual claims - and as usual - stoking demonization of Second Amendment advocates. But much of the public and media discourse about mass shootings, like the public discourse about crime in general, is fact-free. This has led to a political and ideological war. As in all wars,...
Prescription For Violence: The Corresponding Rise of Antidepressants, SSRIs & Mass Shootings
01/25/2020 11:03:52 AM PST · by ammodotcom · 7 replies
Ammo.com ^ | 1-25-2020 | Ammo.com
One of our Resistance Library readers reached out to us recently and shared a BBC article that they found interesting. They said it reminded them of our piece Prescription For Violence: The Corresponding Rise of Antidepressants, SSRIs & Mass Shootings and thought it supported some of the connections made there. They've been linked to road rage, pathological gambling, and complicated acts of fraud. Some make us less neurotic, and others may even shape our social relationships. It turns out many ordinary medications don't just affect our bodies – they affect our brains. Why? And should there be warnings on...
Mass shootings have hit 158 House districts so far this year (must see graphic)
10/02/2019 6:22:24 AM PDT · by yesthatjallen · 40 replies
The Hill ^ | 10 02 2019 | Jordan Lancaster, James Jarvis, etc
More than a third of all House lawmakers represent districts where a mass shooting has occurred this year, highlighting the bipartisan pressure on Congress to take action on gun legislation after a wave of killings in Texas and Ohio during August. An analysis by The Hill found that about two-thirds of those shootings have taken place in districts represented by Democrats, many of whom represent cities hard-hit by the scourge of gun violence, while a third occurred in Republican-held districts, from the suburbs to rural communities. Through Friday, 158 congressional districts had experienced at least one mass shooting this...
Phoenix police say driver killed man for 'looking at him' at red light
09/29/2019 5:53:41 PM PDT · by familyop · 37 replies
Fox News ^ | September 29, 2019 | Robert Gearty
Three people told police they were with Elliott at the time of the shooting and they said Mixon "merely looked over at (Elliott) which in turn enraged (him) to fire his handgun at (Mixon)," the Arizona Republic reported citing court documents. Those three people also told investigators Elliott had a bad temper, owned guns and sold drugs, Fox 10 Phoenix reported.
Mosque beating & marriage of sharia child in Nashville, Tn
04/09/2009 11:57:33 AM PDT · by ebiskit · 44 replies · 1,683+ views
http://atlasshrugs2000.typepad.com ^ | Thursday, April 09, 2009 | Pamela Geller
There is a first-hand undercover investigation being done in Al-Farooq mosque in Nashville, TN. What has been exposed is unthinkable. This is video footage of a first-hand undercover investigation done in Al-Farooq mosque. Listen to a 7 year old talk about her husband and how they are beaten during shariah class. The video is just the sound, as these kids are in tremendous danger and the undercover person inside needed to hide the camera deeply. We are working on the sound quality. Listen to the girl stating how kids are beaten as she begins to cry.The teachers, "they hit...
Fashion brand sparks outrage over school shooting-themed hoodies
09/18/2019 12:44:26 PM PDT · by Diana in Wisconsin · 20 replies
Channel 3000 ^ | September 18, 2019 | Emily iDxon
American fashion brand Bstroy has received fierce criticism on social media after displaying school shooting-themed hoodies at a show during New York Fashion Week. The brand's spring/summer 2020 collection, designed by Brick Owens and Duey Catorze, featured distressed hoodies reading "Stoneman Douglas," "Sandy Hook," "Virginia Tech" and "Columbine," the sites of four of the deadliest school shootings in the US. Photos from the show posted on the brand's Instagram account, as well as Owens' account, quickly drew outrage, with some commenters identifying themselves as survivors or relatives of victims. On a photo of the Stoneman Douglas hoodie, one person commented,...
Just last month, 53 Americans died in mass shootings…while 40,000 died from obesity
The Sun (UK) ^ | September 17, 2019 | Jane Moore
IN his fascinating book Unnatural Causes, forensic pathologist Dr Richard Shepherd observes how, over the years, the dead bodies he examines have changed. One of the most noticeable is the rapid increase in body fat. He says: "Unless a patient is homeless or has died of cancer or is so old or poor they could not eat, few are the same shape as the dead of the 1980s when I started practising. "Looking back at forensic photos from that era I am astonished at how thinness was then the norm." Fast-forward just three decades and obesity levels are now rising...
Biden: "Nobody Should Be In Jail For A Non-Violent Crime"
09/13/2019 8:14:15 AM PDT · by Liberty7732 · 131 replies
Hotair ^ | 09/13/19
Joe Biden once again took the germ of a good idea — and botched it by reductioing his own absurdum. ABC News correspondent Linsey Davis challenged Biden on his criminal justice reform plans to release inmates convicted of drug use, referring to criticisms from Cory Booker that Biden's plan won't go far enough. Oh yeah, Biden seemed to say? He began expanding his vision of reform until it reached the stage where "nobody should be in jail for a nonviolent crime."
New Al Qaeda Video: American Muslims Should Buy Guns, Start Shooting People
06/05/2011 5:12:49 AM PDT · by stevie_d_64 · 80 replies · 1+ views
ABCNews ^ | June 3, 2011 | MATTHEW COLE
In a new video message released on the internet Friday, American-born al Qaeda spokesman Adam Gadahn calls on Muslims living in America to carry out deadly one-man terrorist acts using fully automatic weapons purchased at gun shows, and to target major institutions and public figures. "What are you waiting for?" asks Gadahn in English, and then adds that jihadis shouldn't worry about getting caught, since so many have been released. "Over these past few years, I've seen the release of many, many Mujahideen whom I had never even dreamed would regain their freedom." The two-part, two hour video appeared on...
We can stop mass shootings without restricting Second Amendment liberties
09/09/2019 10:02:52 AM PDT · by PROCON · 46 replies
dallasnews.com ^ | Sept. 8, 2019 | Tom Giovanetti
An armed Arlington SWAT officer stands guard at the AT&T Stadium tunnel entrance before the Big 12 Championship between the Oklahoma Sooners and TCU Horned Frogs at AT&T Stadium in Arlington on Dec. 2, 2017. (Tom Fox / Staff Photographer)It is often said by people of all political persuasions, and certainly by my fellow conservatives, that the primary duty of the federal government is to keep us safe. The problem is, that's not true. The founding documents, the Declaration of Independence, the Constitution, and especially the Federalist Papers, make it clear that the primary duty of the federal government is...
Trump Admin Is Considering Using [Big Tech] To Determine If Citizens Should Own A Gun
09/01/2019 4:56:55 PM PDT · by Tolerance Sucks Rocks · 99 replies
The Daily Caller ^ | August 22, 2019 | Chris White
The Trump administration is considering a proposal that would use Google, Amazon and Apple to collect data on users who exhibit characteristics of mental illness that could lead to violent behavior, The Washington Post reported Thursday. The proposal is part of an initiative to create a Health Advanced Research Projects Agency (HARPA), which would be located inside the Health and Human Services Department, the report notes, citing sources inside the administration. The new agency would have a separate budget and the president would be responsible for appointing its director. HARPA would take after Defense Advanced Research Projects Agency, or DARPA,...
New 'Joker' movie offers uncomfortable message about mass shooters
09/01/2019 9:11:38 AM PDT · by CondoleezzaProtege · 14 replies
Washington Examiner ^ | Aug 30, 2019 | Stephen Kent
Arthur Fleck is a strange, middle-aged, white man, living with his mother, playing comedy clubs at night and routinely falling flat on his face. He endures humiliation at every turn...is unsuccessful, alienated, aggrieved, and most importantly, deeply disturbed. In a short scene with his therapist, Fleck is agitated by the routine nature of the questions she asks. "You never listen do you? You just ask the same questions every week. 'How's your job? Are you having any negative thoughts?' All I have...are negative thoughts." It's a chilling moment as he stares down the therapist who tells him they won't be...
If It Bleeds It Leads: How the American Media Perpetuates and Profits from Mass Shootings
08/30/2019 11:16:02 AM PDT · by ammodotcom · 14 replies
Ammo.com ^ | August 30, 2019 | Ammo.com
Video games. 4chan. "Toxic masculinity." These are just a few of the media's favorite folk devils when it comes to assigning blame for mass shootings in America. However, there is startling evidence that the media itself plays a key role in perpetuating mass shootings. This might sound like a stretch, but it's supported by a well-established phenomenon of copycat suicides called the Werther Effect. While the media of other countries have put in place self-imposed industry standards for reporting tragedies, like suicides and mass shootings, the U.S. media does not. Mass shootings in the U.S. are sensationalized with detailed discussions...
Two mass murders a world apart share a common theme: 'ecofascism'
08/19/2019 5:50:53 PM PDT · by CondoleezzaProtege · 7 replies
SF Gate ^ | Aug 2019 | Joel Achenbach
The alleged Christchurch shooter, who is charged with targeting Muslims and killing 51 people in March, declared himself an "eco-fascist" and railed about immigrants' birthrates. The statement linked to the El Paso shooter, who is charged with killing 22 people in a shopping area earlier this month, bemoans water pollution, plastic waste and an American consumer culture that is "creating a massive burden for future generations." The two mass shootings appear to be extreme examples of ecofascism - what Hampshire College professor emeriti Betsy Hartmann calls "the greening of hate." ...These ideas have shown themselves to be particularly dangerous when...
Scarborough's Case for Liz Warren: 'At Least She Won't Inspire Mass Shootings'
08/16/2019 9:23:45 AM PDT · by governsleastgovernsbest · 53 replies
NewsBusters ^ | Mark Finkelstein
Joe Scarborough has come up with what could be the worst campaign slogan in American political history. On today's Morning Joe, making the case for Elizabeth Warren, Scarborough said: "At least she won't inspire mass shootings!"We say, run with it, Liz! Order a million bumper stickers today! Get the rest of the story and view the video here.
Understanding Recent Mass Shootings: Not a national catastrophe judged by number of people killed.
08/13/2019 7:30:02 AM PDT · by SeekAndFind · 28 replies
American Thinker ^ | 08/13/2019 | Robert Weissberg
When it comes to mass shootings, America lives in two separate worlds. The first is the one of Gilroy, California, El Paso, Texas, and Dayton, Ohio among many others. They follow a familiar script: a white shooter using a high-powered weapon kills multiple victim and this carnage is quickly followed by public outrage, intensive on-site media coverage, and never-ending publicized pronouncements on gun violence, and, in recent years, condemnation of Trump's alleged racism and xenophobia that fuels such carnage. The second universe consists of urban, black-on-black shootings, typically of the drive-by-shooting variety using handguns where relatively few are killed but...
Blame Everybody: Double Standards and a False Narrative
08/09/2019 1:18:32 AM PDT · by Kaslin · 12 replies
Townhall.com ^ | August 9, 2019 | Paul Curry
This past Saturday a mentally unhinged gunman walked into a Wal-Mart in El Paso, TX and brutally murdered 22 innocent people. The gunman, who for decency's sake shall remain nameless, was a deranged white nationalist. The mainstream media and Democrat politicians alike, never ones to let an opportunity to smear Donald Trump go by, even (or especially) in times of national mourning, quickly tried to tie President Trump to the shooter. Unlike previous false narratives about the president, this one is especially disgusting. Unlike the Russia Collusion false narrative which became almost comical towards its eventual evaporation with the Mueller Report,...
Feminist-Celebrated Imam's Son Ran Terrorist Camp For School Shooters in New Mexico
08/16/2018 11:00:03 AM PDT · by SeekAndFind · 5 replies
The Federalist ^ | 08/16/2018 | Ellie Bufkin
Already missing from the news cycle is the story of Muslim leader Siraj Wahhaj, who alerted authorities to the squalid conditions in New Mexico in which his son, two daughters, another man and woman, and 11 children were living.Authorities arrived at the compound to some of the most horrifying conditions they had ever seen, and prosecutors identified the makeshift home as a training ground for militant children, including in carrying out school shootings. The imam's son had been wanted for kidnapping his own four-year-old child, who had severe disabilities. The body of a young child was recovered from the...
Oprah on Mass Shootings: We'll Be Lost Until America Finds the 'Moral Center'
08/07/2019 1:41:07 PM PDT · by ChicagoConservative27 · 69 replies
Breitbart ^ | 08/07/2019 | Jerome Hudson
Entertainment mogul and part-time political activist Oprah Winfrey says the spat of mass shootings occurring in America are a result of the country's disconnect with faith and church, which once provided people with "values about a way of living and being in the world." Speaking with Extra host Renee Bargh about the deadly mass shootings in El Paso, Texas, and Dayton, Ohio that left more than 30 people dead and dozens more injured, Oprah said "I think what people are missing is a core moral center."