text:
Metal News for October 1, 2018
Last updated on July 18, 2019 at 2:23 AM ET
We post metal news every day, throughout the day, covering thousands of metal bands including underground and unsigned bands. You are currently browsing the news archive, but you can also find news by band.
Behemoth Show: Couple Filmed Engaging In Oral Sex
Immolation & Monument Of Misanthropy Announce Tour
Oh, Sleeper Premiere New Music Video
Sacred Reich Premiere New Song & Music Video
Chamber Premiere New Music Video
Killswitch Engage Premiere New Song
Vomit Angel Premiere Pre-Release Full-Album Stream
Wormed Premiere New Song "Remote Void"
Unmensch Premiere New Song "Wolf"
Orm Premiere Excerpt Of New Song
<< < October 2018 > >>
13 news articles posted on this day.
Burning Witches Posts New Teaser Video
Oct 1, 2018 at 12:24 PM by Diamond Oz.
Old school heavy metal newcomers Burning Witches are set to release their new album "Hexenhammer" on November 9th through Nuclear Blast. Today, the band have released a teaser for the official music video for the title track of the new album, "Hexenhammer." You can check it out below. "Hexenhammer" was produced in the Little Creek Studio by the same team as its predecessor: V.O. Pulver (Pro-Pain, Destruction, Nervosa) and Destruction legend Schmier, who also helped and advised as a close friend of the band. More...
Read more... | 0 Comments - Discuss
Trivium Posts New Video Online
Floridian heavy metal outfit Trivium has posted a new music video online for the song, "The Wretchedness Inside." You can check it out below. The song comes from the band's latest album, "The Sin And The Sentence," which was released last year through Roadrunner Records, peaking at number 23 in the Billboard charts. The band are also about to kick off a North American tour, where they will be joined by Avatar and Light The Fire. The dates are as follows:
10/03 Tampa, FL – The Ritz Ybor
10/04 Atlanta, GA – Buckhead Theater
10/05 Raleigh, NC – The Ritz
10/06 Norfolk, VA – The Norva
10/08 Cincinnati, OH – Bogarts
10/09 Nashville, TN – Cannery Ballroom
10/11 Baltimore, MD – Rams Head Live
10/12 Huntington, NY – The Paramount
10/13 Philadelphia, PA – Electric Factory
10/14 Worcester, MA – The Palladium
10/16 Cleveland, OH – House of Blues
10/17 Royal Oak, MI – Royal Oak Music Theatre
10/19 Oklahoma City, OK – Diamond Ballroom
10/20 Sauget, IL – Pop's Nightclub
10/21 Chicago, IL – House of Blues
10/22 St. Paul, MN – Myth Live
10/23 Fargo, ND – Sanctuary
10/25 Edmonton, AB – The Ranch Roadhouse
10/26 Calgary, AB – The Palace Theater
10/28 Vancouver, BC – Commodore Ballroom
10/29 Seattle, WA – Showbox SODO
10/30 Portland, OR – Crystal Ballroom
10/31 Spokane, WA – Knitting Factory
11/02 Anaheim, CA – House of Blues
11/03 Berkeley, CA – UC Theatre More...
All That Remains Posts New Lyric Video Online
Oct 1, 2018 at 10:40 AM by Diamond Oz.
Clinging to airtight songcraft, knifepoint precise metallic instrumentation, and stadium-size hard rock hooks, All That Remains are cutting right to the chase on their ninth full-length album, "Victim Of The New Disease." The album arrives on November 9th via Fearless Records.
The quintet— Philip Labonte [lead vocals], Oli Herbert [lead guitar], Mike Martin [rhythm guitar], Jason Costa [drums], and Aaron Patrick [bass, backing vocals]— has shared the punishing and patently pummeling new track "Fuck Love," which you can watch the lyric video for below.
Labonte offered this insight into the album, saying, "We decided to throw a curveball… and do the heaviest record since 'For We Are Many' in 2010! It was the perfect way to follow-up 'Madness', where we did some different styles and songs and even covered a country song. People might've expected something more experimental, but throwing curveballs is what we do". More...
Behemoth Posts "Bartzabel" Video Online
Before unleashing their eagerly awaited new album, "I Loved You At Your Darkest" this Friday, Behemoth have released the brand new single "Bartzabel."
Mastermind Nergal comments: "'Bartzabel' is a song that came in the midst of a Behemoth rehearsal... We had no structure, no vision - but piece by piece, it came to be, and we were extremely excited by the result. To us, it's the eye of the 'ILYAYD' storm: sonically calmer and slower than anything else on the record, but definitely one of the darkest!
"Lyrically, we (myself and Krzysztof Azarewicz) were inspired by Aleister Crowley's conjuration of the Spirit of Mars - which the video, by our trusted friends in Grupa 13, depicts beautifully...I may even go as far to say that it's my favourite BEHEMOTH video of all time! I hope you all enjoy it, and we look forward to 'ILYAYD''s launch this Friday!" More...
Fleshgod Apocalypse Enters The Studio
Italian symphonic death metallers Fleshgod Apocalypse are currently in the studio recording the follow up to their critically acclaimed 2016 release, "King." Frontman and drummer Francesco Paoli recently checked in to offer the following update:
"It's official, we're finally back in the studio and it feels absolutely great! This past year marked a new era for the band, so we felt the need to look back at our death metal roots and, at the same time, to push ourselves beyond our limits, reaching a wider level of variety and influences within the songs. We wanted this album to be fierce but also organic and unpredictable, as if it had a life on its own. That's why we decided to involve several guest musicians, a full classical string section and even a choir!
"We're also incredibly excited to work with legendary producer Jacob Hansen (Volbeat, Destruction, Aborted, Epica) for the first time. He's the man behind so many amazing metal records and definitely one of our favourite producers at the moment. On my side, being back as the frontman also means this is my last chance to record drums on a Fleshgod Apocalypse record and this awareness actually inspired me so much while writing the parts. I really think this album will be a true landmark for me, as a drummer."
The as of yet untitled record is tentatively scheduled for a spring 2019 release.
0 Comments - Discuss
Agony Kings Premiere New Video For "Futureburn"
Oct 1, 2018 at 2:58 AM by LugalKiEn.
Crossover thrash metal band AGONY KINGS have released their new video for "Futureburn". The song is taken from their self-titled album which was released last year on vinyl and digital formats.
The band commented: More...
Automb Premiere New Music Video Song "Horned God"
Pittsburgh, Pennsylvania based blackened death metal band Automb have teamed up with Metalundergound.com to exclusively premiere their new song and music video titled "Horned God".
The track is taken from their impending new album "Esoterica", which will be released through Satanath Records (Russia) and Final Gate Records (Germany) on October 22nd in a jewel-case CD edition of 500 copies, with an 8-page booklet.
Check out now "Horned God" below.
Fluisteraars & Turia Premiere Full-Album Stream
Dutch black metal outfits Fluisteraars and Turia premiere the full-album stream of the two bands' brand new split release "De Oord", which has just been released by Eisenwald on CD and vinyl, and on limited cassette by Haeresis Noviomagi.
Check out now "De Oord" in its entirety below.
De Oord by FLUISTERAARS & TURIA
Solar Temple Premiere Full-Album Stream Of New CD
Dutch black metal band Solar Temple premiere the full-album stream of the band's brand new album "ertile Descent", which is available digitally, and on CD and vinyl, via Haeresis Noviomagi.
Check out now "ertile Descent" in its entirety below.
Fertile Descent by SOLAR TEMPLE
Slegest Premiere Two New Songs From Upcoming Album
Norwegian heavy rock and black metal band Slegest premiere Two advance tracks from their upcoming new album "Introvert", which will be released by Dark Essence Records on November 16th.
Check out now "Undergangens Tankesmed" and "Blodets Varme Gjennom Meg" below.
Introvert by Slegest
1 Comment - Discuss
A Flock Named Murder Premiere New Song
Toronto-based trio A Flock Named Murder (f.k.a. Sovereign) premiere a new song titled "Without Passage", taken from their upcoming debut album "An Appointed Time", which will be digitally released on October 31st, with physical editions forecast for early next year.
Check out now "Without Passage" below.
An Appointed Time by A Flock Named Murder
Dratna Premiere Full-Album Stream Of Brand New CD
Northern Ireland based black metal band Dratna premiere the full-album stream of the band's brand new album "Altar", which was released September 28 via Bandcamp.
Check out now "Altar" in its entirety below.
Altar by Dratna
Groza Premiere Full-Album Stream Of Debut Album
Bavarian black metal band Groza premiere the full-album stream of the band's brand debut album "Unified In Void", which was released digitally on September 8th and will be issued on CD and vinyl by AOP Records on November 30th.
Check out now "Unified In Void" in its entirety below.
Unified In Void by GROZA
Navigate forward or backward through each day of news below:
Monday, October 1, 2018 - currently viewing
The Rockstar Ramblings
About the Writers
Just For Funs
Latest Comments On...
R. Zombie: First Full '3 From Hell' Trailer Posted (1)
Opeth Premiere New Song "Heart In Hand" (2)
Megadeth's David Ellefson Premieres New Single (2)
Rimfrost Premiere New Song & Lyric Video (1)
Exhorder Premiere New Song "My Time" (1)
Obituary Premiere New Song "A Dying World" (1)
Tengger Cavalry Frontman Nature Ganganbaigal Dead (2)
HellYeah Premiere New Song & Music Video (2)
Destruction Posts Third Album Trailer (1)
Abbath Posts Full Album Stream Online (1)
Phil Anselmo On The Illegals And Playing Pantera (2)
Korn Premiere New Track & Music Video (1)
Dave Mustaine Diagnosed With Cancer (1)
Satan's Taint (ex-Overkill) Premiere New Song (2)
TBDM's Singer Guests On New Shadow Of Intent Song (1)
Post your own comments
and be heard!


While many Syracuse University students will be hitting the beaches during spring break, March 10 to 17, some students will travel to Florence, Italy, to become more deeply acquainted with Leonardo da Vinci. Other students will travel to Berlin to study the Weimar Republic. And more students will travel to England to study Renaissance London.
Nearly 50 students will take part in a study abroad experience in the spring break programs offered through the Division of International Programs Abroad (DIPA) in cooperation with The College of Arts and Sciences, the L.C. Smith College of Engineering and Computer Science (ECS) and the Honors Program.
The programs are a twist on the traditional study abroad model, in which students spend a summer, a semester or a year abroad. In this model, the actual trip abroad takes place during the 10 days of spring break. But the study abroad experience doesn't begin or end there-it is integrated into a spring semester course. In the weeks before the trip, classes are geared toward preparing students for what they will experience through lectures, readings and conversations. The weeks after the trip offer students the opportunity to put everything they have learned and experienced into context with the help of their classmates. Students receive four credits for the course-three credits for the coursework done in Syracuse and one credit for the trip abroad.
o "Leonardo da Vinci: Artist and Engineer," an interdisciplinary course team taught by Gary Radke, professor of fine arts in The College of Arts and Sciences, and Samuel Clemence, professor of civil and environmental engineering in the L.C. Smith College of Engineering and Computer Science and a Meredith Professor for Teaching Excellence. The course brings together two of Leonardo's interests-art and engineering-and explores the ways that Leonardo's interests and talents intertwined. Students will travel to Florence, Milan and Paris, and will view the Last Supper, Mona Lisa and models of some of Leonardo's famous inventions.
"Literature and Culture of the Weimar Republic and Berlin," taught by Gerd K. Schneider, professor of German in The College of Arts and Sciences. The course teaches about Germany's Weimar Republic, and past and present Berlin. Students will travel to Berlin and visit the New Jewish Museum and the Pergamon Museum, go on a walking tour through a multicultural district, and visit Weimar and Buchenwald.
"Renaissance London," taught by Chris Kyle, associate professor of humanities in The College of Arts and Sciences. In the course, which is limited to participants in the Honors Program, students will study Renaissance London in the context of literature, art, architecture, social and political history. The students will be based in London, and will visit the National Gallery, Hampton Court, Oxford University and the Globe Theatre, among other places.
The programs also have the staunch support of their respective deans. Dean Cathryn Newton in The College of Arts and Sciences and Dean Edward Bogucz of the L.C. Smith College of Engineering and Computer Science have each provided special funding for the Leonardo course, and Dean Newton also provided special funding for the Berlin and Renaissance London courses. Additionally, the Honors Program has provided special funding for the Renaissance London course.
The opportunities offered through DIPA are consistent with a signature experience identified in the University's Academic Plan, which calls for more internationalization of curricula and strives for a time when each undergraduate student takes part in a study abroad experience. The "Leonardo" program is also consistent with a spire of the Academic Plan focusing on collaborative design.
DIPA's first experience with a short-term program was in December 1996, when College of Visual and Performing Arts professors John Orentlicher and the late Michael Recht led 12 students in a trip to Chile to photograph the Patagonian peninsula. During the following semester, the students took a course that built on their trip.
In 2000, Radke developed a short-term program on Michelangelo. Radke, who studied in Florence and has returned there on a regular basis as a scholar, teacher and tourist, believed that his students' most profound experiences in studying Michelangelo would be when they actually experienced Italy. That trip was a great success in engaging students in their studies, Radke says.
"They had it in their bones," he says.
"The class turned out to be above and beyond anything I could have expected," says Jamie Primo, a junior majoring in information management and technology in the School of Information Studies and in art history in The College of Arts and Sciences.
Jon Booth, DIPA's deputy director, says the short-term programs are appealing on many levels. The programs enable students who can't get abroad for a semester or a year because of curricular reasons to have a study abroad experience. The short-term programs are affordable, says Booth, as the tuition is folded into the semester. Additionally, some of the special funding provided by the deans goes to students in the form of merit and need-based scholarships. The programs are academically sound, Booth says, as they are in a learning context. But faculty members also keep in mind that it is spring break, and build in free time and fun activities as well.
Radke has teamed with Clemence for this year's program, and they have been busy preparing students for what they will experience on the trip abroad. Clemence says it will be a wonderful opportunity for his students. "They will gain an appreciation for an amazing person who was a wonderful artist and a wonderful engineer," he says.
Primo is also enrolled in this year's "Leonardo" course.
Kyle developed the "Renaissance London" course out of his own research into London and Westminster in the 16th and 17th centuries. Renaissance London was a dynamic city in which fashions, recreation and social activities came and went rapidly, Kyle says. Coupled with an explosion in population and building, London became one of the top five cities in Europe. His students will not only study the past, but will see the city as it is today. "The contrast may look great, but similarities in city status, surviving buildings and geographic layout provide readily accessible reference points," he says.
Schneider became interested in leading a short-term program after teaching a course that was a virtual trip to several regions in Germany. "Students then asked me if we could make this virtual trip a real experience. Since the College provided funds, this was feasible," Schneider says. This program is designed so that the students have the choice of taking the semester-long course or not.
DIPA administrators are hoping that more faculty members will follow Radke's lead in brainstorming and developing similar short-term courses, and have begun a series of working sessions for faculty to help in the development of new courses. Booth says he would especially like to see that happen with departments in which students do not typically go abroad, as a study-abroad experience is increasingly becoming an important asset for students to have.


text:
id: bad87fee1348bd9aed208826
title: Identificare i figli di un elemento usando jQuery
challengeType: 6
forumTopicId: 18320
dashedName: target-the-children-of-an-element-using-jquery
---

# --description--

Quando gli elementi HTML sono posizionati un livello sotto un altro, vengono chiamati <dfn>figli</dfn> di quell'elemento. Ad esempio, gli elementi button in questa sfida con il testo `#target1`, `#target2`, e `#target3` sono tutti figli dell'elemento `<div class="well" id="left-well">`.

jQuery ha una funzione chiamata `children()` che consente di accedere ai figli di qualsiasi elemento selezionato.

Ecco un esempio di come usare la funzione `children()` per dare ai figli del tuo elemento `left-well` il colore `blue`:

```js
$("#left-well").children().css("color", "blue")
```

# --instructions--

Dai a tutti i figli del tuo elemento `right-well` il colore arancione.

# --hints--

Tutti i figli di `#right-well` dovrebbero avere un testo arancione.

```js
assert($('#right-well').children().css('color') === 'rgb(255, 165, 0)');
```

Dovresti usare la funzione `children()` per modificare questi elementi.

```js
assert(code.match(/\.children\(\)\.css/g));
```

Dovresti usare solo jQuery per aggiungere queste classi all'elemento.

```js
assert(code.match(/<div class="well" id="right-well">/g));
```

# --seed--

## --seed-contents--

```html
<script>
  $(document).ready(function() {
    $("#target1").css("color", "red");
    $("#target1").prop("disabled", true);
    $("#target4").remove();
    $("#target2").appendTo("#right-well");
    $("#target5").clone().appendTo("#left-well");
    $("#target1").parent().css("background-color", "red");

  });
</script>

<!-- Only change code above this line -->

<div class="container-fluid">
  <h3 class="text-primary text-center">jQuery Playground</h3>
  <div class="row">
    <div class="col-xs-6">
      <h4>#left-well</h4>
      <div class="well" id="left-well">
        <button class="btn btn-default target" id="target1">#target1</button>
        <button class="btn btn-default target" id="target2">#target2</button>
        <button class="btn btn-default target" id="target3">#target3</button>
      </div>
    </div>
    <div class="col-xs-6">
      <h4>#right-well</h4>
      <div class="well" id="right-well">
        <button class="btn btn-default target" id="target4">#target4</button>
        <button class="btn btn-default target" id="target5">#target5</button>
        <button class="btn btn-default target" id="target6">#target6</button>
      </div>
    </div>
  </div>
</div>
```

# --solutions--

```html
<script>
  $(document).ready(function() {
    $("#target1").css("color", "red");
    $("#target1").prop("disabled", true);
    $("#target4").remove();
    $("#target2").appendTo("#right-well");
    $("#target5").clone().appendTo("#left-well");
    $("#target1").parent().css("background-color", "red");
    $("#right-well").children().css("color", "orange");
  });
</script>

<!-- Only change code above this line -->

<div class="container-fluid">
  <h3 class="text-primary text-center">jQuery Playground</h3>
  <div class="row">
    <div class="col-xs-6">
      <h4>#left-well</h4>
      <div class="well" id="left-well">
        <button class="btn btn-default target" id="target1">#target1</button>
        <button class="btn btn-default target" id="target2">#target2</button>
        <button class="btn btn-default target" id="target3">#target3</button>
      </div>
    </div>
    <div class="col-xs-6">
      <h4>#right-well</h4>
      <div class="well" id="right-well">
        <button class="btn btn-default target" id="target4">#target4</button>
        <button class="btn btn-default target" id="target5">#target5</button>
        <button class="btn btn-default target" id="target6">#target6</button>
      </div>
    </div>
  </div>
</div>
```

redpajama_set_name: RedPajamaGithub


Here's your cake. Sorry, you'll all have to share.
I know everyone was talking about SIMPLIFYING this Christmas, but you know what else is pretty great? Getting spoiled rotten. And even better, spoiling someone else rotten. That's what ended up happening in our house, and each of us loved every minute of it. Soooo… simplify all you want. Maybe the Manullangs will try it next year.
In most other ways, though, Christmas was slightly less festive for us than it is most years.
Our Christmas season is always exceptionally long because we compile holiday music that goes out with a lot of our cards, and sometimes I start gathering those tunes in July. My kids have grown accustomed to hearing "Let It Snow" long before they've even dreamed of a day off school. Because of this, I don't always love listening to Christmas music non-stop from Thanksgiving to New Year's Day. In fact, sometimes hearing it makes me Scrooge-y. Not Grinch-y—I don't want the music to go away, I just don't want to hear it for, like, A MINUTE IS THAT TOO MUCH TO ASK OMG IMMA KILL SOMEONE. At least one local radio station plays Christmas music 24/7 from mid-November on, and sometimes it's all just a little much, y'know? I'm not sure exactly why, but this year it bothered me more than it has in the past.
It was the evening of the 25th when I looked at the tree and thought, "Yep, this has been up long enough." And on the 26th, I undecorated it. I put away all the Christmas gift bags and wrap. I put away the snowmen (and only had to remove batteries from this year's). The stockings, which were never really hung by the chimney with care anyway, have been boxed up. Christmas is D-O-N-E done.
Honestly? This year was kind of craptacular. I mean, we're all still alive, but, y'know, just barely.
Victor turned 50 in July. As expected, he immediately began to fall asleep amid crowds of people, yell at kids to get off our lawn, and misplace his teeth.
Katie is now (pause for effect…) in high school. She took out her ear buds long enough to be a counselor for Safety Town last summer. In February, she'll turn 15 — she's both eager AND the right amount of nervous about driving. She's in her seventh year of piano, and loves being in a high school choir. Feel free to ask her any question — she knows everything, or at least more than anyone else in our house does. Oh, and apparently we embarrass her constantly. Teens are FUN.
Jack, 13, played football again this year. He and his buddies are the best players in all of history. The constant phone calls from NFL scouts have become annoying, and now they're going to have to compete with the NBA; Jack recently started playing in a basketball league. As the refs can attest, he was a natural at picking up his latest language: trash talk. We pretend he doesn't belong to us more often than I'd like to admit. Personally, I'm most proud of The Boy's budding chef skills — he loves to prepare entire meals for us and his friends. He's still taking piano lessons, but he wants you to know he hates them.
My clumsiness continues to know no bounds; I broke my ankle in May and spent the rest of the year in a cast and/or humiliating physical therapy sessions. I'm convinced that physical therapists are nothing but sadist pranksters. Also in the category of "stuff that sucked this year," my ongoing cancer testing took us on the least fun roller coaster ever. More scans and pokes will happen in January, and with them we hope for more definitive answers than we were given in 2014. The up-side is that, thanks to my excessive exposure to radiation, our house glows even without Christmas lights.
We adopted a sweetheart of a beagle in June. Maya was rescued from an abusive situation, and we feel honored to give her the love and comfort she deserves. Lucy is happy to have another critter with which to share the blame for the ongoing destruction of The House of Manullang.
After years of making gemstone jewelry for myself, I started sharing more widely by selling it online. Intrigued? :) I'm at etsy.com/shop/DearGirlJewelry.
Other things we had the privilege to enjoy: my new, not at all ancient-sounding great-aunt status ("former step-great aunt," if you wanna be picky AND I DON'T) … a book reading/signing with the always-delightful Armistead Maupin … trips to see Sonya's family … being a top fundraising team at our fifth Relay for Life … seeing our niece/cousin, Abby, perform in Pippi Longstocking with Bellevue Youth Theater … a huge party celebrating Vic's 50th … floor seats at the Justin Timberlake concert (thanks, Sher!) … trips to Mother Mary's … and local productions of The Producers, Dreamgirls, and Fiddler on the Roof.
As 2014 closes, we feel more grateful than ever for family and dear friends. Our hope is that you're spending the holidays with people you can tolerate, and, if not, that you have easy access to the quantity of alcohol you require. AND: may the coming year be your best one yet.
So, that's it for the 2014 Christmas season. It came and went. We loved the Christmas-y part, but the rest sorta sucked and we're ready for 2015. Bring it on.


Communication Middleware is a hospitality management software solution that works with Call Plus to manage guest and company phones at hotels. When guests come to check in at a hotel, users can assign their names to the phones in guests' designated rooms.
As incoming calls arrive, the program can greet callers, take their information and direct them to the appropriate parties. In the event that the recipient is busy, the system can insert the caller into a queue. Housekeeping staff can also use the product by signaling their cleaning locations and tallying guests' minibar tabs from guest phones. Lastly, the platform can integrate with a number of third party platforms to expand its functionality.


Talbott makes some incredible Pinot and Chardonnay from their estate vineyards in Monterey County, and the Kali Hart, named after proprietor Robb Talbott's youngest daughter, is always a great value. This 100% estate wine is their entry level, and as I've said many times, some of the greatest values come from entry level or second wines of higher-end producers.
If I see this wine in a shop or on a restaurant list, I know, no matter the vintage, that it's going to be a good bet. This held true for the 2010 vintage which shows the bright acid signature of Monterey County balanced by round oak and beautiful yeasty flavors from 9 months of aging on the lees (dead yeast).


After the enormous success of Gravity, Alfonso Cuarón could have done anything he bloomin' well liked to follow it up. He could have easily been drawn to safer franchise fare (kind of like he did with Harry Potter and the Prisoner of Azkaban), or continued making films that audiences could easily access as opposed to some of his grittier and experimental movies like Children of Men and Y Tu Mamá También, but whatever he would end up doing, one thing was for certain: it would be something that only Alfonso Cuarón could bring to extraordinary life on the big screen.
This exact thing can easily be said about the follow-up he ended up going with, but while it is a very personal film based on his childhood in early 70s Mexico, Roma is far from being a self-indulgent reflection on his own experiences, and is instead an incredibly realised, passionately crafted, and extremely emotional celebration of family, life, and a very special person who Cuarón without question holds close to his heart.
That person being his childhood nanny, a Mixtec woman known as Libo, who cared for Cuarón and his siblings when they were growing up in the Roma district of Mexico City, and who this film is dedicated to at the very end. You can tell that he really has a special place in his soul for this person, who undoubtedly had a massive impact on not just his early life but his eventual career path too, and this film brilliantly dramatizes her story to let audiences discover who this person is and how her human spirit is a burning example that we must all strive to eventually become.
In the film, set across a number of months, Libo is dramatized as Cleo (played by Yalitza Aparicio in an absolutely astonishing debut performance), one of two housekeepers working for a middle-class family living within the city. The family, comprised of two parents and four reasonably young children, all treat Cleo like one of their own, and in return she does the dishes, keeps the house clean, and clears the driveway of dog crap. Things become a little tricky when the father (Fernando Grediaga) heads off on what he claims to be a work trip, but it is painfully obvious that he does not intend to return; in the meantime, mother Sofia (Marina de Tavira) as well as Cleo keep the children occupied while struggling to fill the hole he has left. On top of that, Cleo discovers that she is pregnant, but her boyfriend Fermín (Jorge Antonio Guerrero) wants nothing to do with the baby when she tells him.
There are hints of themes about class and even race peppered throughout, given that the focus is on a lower individual working for a reasonably well-off family, but Cuarón is infinitely more interested in recreating with as fine details as possible the world he once roamed as a child, and especially its inhabitants. The camera – operated by Cuarón, who also served as his own cinematographer since his regular DP Emmanuel Lubezki was unavailable – often pans left and right to let us soak in all the atmosphere surrounding the frame, giving the audience an illusion of floating through a memory of someone who clearly looks back on all of this fondly. That effect is crystalized by the decision to not only show it in black-and-white, but to shoot it in digital as well, further enabling us to look at a clear-as-day snapshot of the past that is largely free from grainy imagery and, even more remarkably, full of colour even when there's not one that's ever shown on-screen.
Many of the shots linger on just a scene unfolding in the street, and the main characters just blend in to it so naturally that you forget that they're there half the time, because there's just so much else going on that grabs your attention more, whether it be a marching band or even a human cannonball, that you kind of want to spend a lot more time in this place and era, along with these characters who you know and like enough to want to be right by their side at all times. There are also entire scenes that could easily have been cut for time and would have made no impact on the overall story, like a glimpse at a martial arts training group and the spiritual teachings of their well-regarded instructor, and another shot that lingers on a man dressed in a monster costume singing a solemn tune whilst in the background people are trying to put out a forest fire, but these scenes end up being so fascinating and full of character that you end up feeling glad that he didn't get rid of them, even though the movie comes in at over two hours long.
In short, Cuarón has perhaps made one of the most impressive snapshots of life in a certain period of time that has ever been put to film, all thanks to his incredibly passionate memory of a time and place he so eagerly wants to share with the world, which is no easy feat but has been accomplished all the same. At the same time, it is not a hollow experience; the film is beaming with emotion of all sorts, including warm love, quiet fear, fierce anger and, in one later pivotal scene set in a hospital, absolutely gut-wrenching. It's a wondrous celebration of the goodness in people's hearts, what makes them stand out in the crowd, and how they can end up changing another person's life for the better.
Cuarón certainly feels that way about Libo, and now I do too with Roma, one of the year's absolute best films.
Roma is a beautifully realised celebration of life that sees director Alfonso Cuarón revisit his childhood in a technically marvellous, brilliantly acted and emotionally driven mini-epic that ultimately pays tribute to a very special figure from his early years that's as loving as it is utterly fantastic. One of the year's very best films; do not miss this masterpiece.


text:
DIRIYE OSMAN
/ THE AFROSPHERE
The Song Of The Sea Queen
Beloved reader,
There was once an ancient queen who lived in a cave on a secluded beach in Bosaaso, Somalia.
This queen didn't have coin or a crown, but she always greeted the dawn with a dua and a song directed at the sea.
She sang like her fragile vocal chords were coated with crystals, so rhapsodic and euphonious were her harmonies, conjuring all the devotion she had cultivated over the course of her long life and gifting it to the water.
She sang until her spirit was depleted, until her voice cracked with fatigue, and as she sang the sea spat out entire schools of tropical fish at her feet in gratitude for her ballad.
The queen, who didn't have coin or a crown, took one tiny tilapia from the kaleidoscopic bounty of seafood writhing on the shoreline, blessed the sea for its extravagant benefaction, and asked the water to reclaim the rest of its riches.
The sea was startled. It was used to being polluted and plundered.
'Is there something wrong with the fish?' the sea asked the queen. 'Would you like more exotic fare? Why are you not taking advantage of me as others do?'
'You've consistently shown me more kindness and care and comfort than I can hold,' said the queen. 'I'm just grateful to be in your presence. When I sing for you, I do it because your splendour sustains my psyche. That is all.'
The sea was moved by her words. 'How can I thank you? Do you want me to bring you pearls or other hidden treasures?'
'Just keep me company,' said the queen. 'Your beauty is enough.'
So the sea and the ancient queen kept each other company. For the rest of her life, every morning she sang her hymns to the water. She passed away peacefully whilst having a moonlit conversation with the sea about love, and the water gently reached out and pulled her tenderly into its depths.
In that way she became part of the ocean.
I share this story with you, beloved reader, because stories are how we build the world we want to inhabit. I share this story with you because, unlike a map with no ocean, there are no limits to my love for you.
This song is yours.
Diriye
Image by DIRIYE OSMAN and STEVE BRIGHT.
Song of the moment: 'Lei Lei' by MARYAM MURSAL.
© Diriye Osman. All rights reserved.

redpajama_set_name: RedPajamaCommonCrawl


Follow these links for help finding the outdoor trash or recycling receptacle that best fits your need. Or give us a call and let us know what you need and we will find it for you.
MaxPlayFit offers a wide range of outdoor receptacles for trash and recycling. Construction includes metal, recycled plastic, wood, and concrete. We have both metal and plastic lids and even recycled plastic receptacles with built in lids. At MaxPlayFit we have all the related items to complete your project including: benches, grills, tables, bike racks, message centers, and more.


WITH marketing an increasingly challenging task due to the multitude of platforms available, Singapore Press Holdings (SPH) yesterday held its inaugural Media Distillery seminar to lend marketers a helping hand. L'Oreal Singapore's managing director Christopher Neo, Leo Burnett Singapore's executive creative director Chris Chiu and Straits Times deputy editor Alan John were among those who shared their thoughts on how to engage audiences despite the fragmentation of media platforms. Leslie Fong, senior executive vice-president of SPH's marketing division, said: "In this day and age, no one can afford to sit back and do things the usual way. Marketers have the difficult task of engaging their target audience via multiple platforms and maximising advertising returns while managing tight budgets." The full-day seminar - "Connecting with customers - Tips and tricks on getting your message across" - was held at the Raffles Hotel. About 250 people attended.


ABC Supply 500 live on Scoreboard.com. This page is about ABC Supply 500, (Motorsport/IndyCar). If you're searching for results from an other competition with the name ABC Supply 500, please select your sport in the top menu or a category (country) on the left. Follow ABC Supply 500 live on Scoreboard.com - ABC Supply 500 live results, final race results, practice and qualifying times.


Alpha Africa respects each individual's right to personal privacy. We will collect and use information through our website, only in the ways disclosed in this statement. This statement applies to information collected on the following websites controlled by us: maintenancetomission.co.za / divinerenovation.co.za.
(You might be redirected to these from other domains or online properties we own).
We may also share information with other national and local Alpha offices, technology suppliers and support companies, and other key contacts with whom it is necessary to share information.
Some of the forms include the contact form. You can see the Divine Renovation newsletter details at the bottom of this sign up form.


Want to help support BakaRenders?
We're BakaRenders! We're a small site that is full of images. We don't get much attention, but there are a few of you out there that love us! (And we love you too!) We will soon be starting our fourth year... Since then we've amassed a pretty sizable collection of images cut out by many wonderful people. You've helped us grow into what we are now!
We enjoy being one of the top sites you visit before working on a graphics project and we're glad that we can provide images that give you inspiration to be creative! But while it will always be free for you to use our site, it's not free for us to maintain it. Due to the traffic that BakaRenders.com receives, we have to pay a pretty large amount each month to maintain the site... and this all comes out of our pocket.
So what we're asking is pretty simple... If you love BakaRenders.com and want to see us continue through the next years... Please consider contributing a small amount. No amount is too little. We use PayPal... they allow people all over the world to help and support us. Besides... what else are you going to do with that Christmas money?
(PS: Your donation to BakaRenders.com can be used at OneCanvas.net for Premium Membership in an equal tier based on the donation).
Help us by submitting accurate render keywords! Click me for more info!
Making sure that renders have accurate is a never ending job! Lots of renders are submitted without any keywords at all. We're powered by the community that uses BakaRenders and we need your help in identifying and fixing wrong or missing keyword information! So what can you do to help? Submit proper keywords by leaving a comment with the show or game they're from as well as the character(s) identified. You can also click the "Report File to Administrator" and include the required information for us to add the proper keywords.
Thanks for continuing to help and support BakaRenders.com!
Baka Renders Created Content © 2011-2014 xD Anime Network - Legal Agreements.


Are you ready to taste some great local Salsa?
The Texarkana, Texas Farmers' Market will host its annual Best Salsa in the Ark-La-Tex Contest this Saturday July 28, from 7:30 to 11:00AM at 305 Texas Boulevard. This Saturday will be the last market of the 2018 Summer season.
Market manager Holden Fleming invites everyone to participate in the contest, by making salsa, or coming to the market to taste test.
Salsa registration starts at 7:30 Saturday morning and free tastings will be available at 8:30 and conclude at 10:30. Winners for each category will be announced at 11:00. Each categories' winner will receive a prize courtesy of the Texarkana, Texas Farmers' Market.
Along with the salsa contest, local vendors will be on hand selling fruits and vegetables, arts and crafts, and an assortment of other goods. With live local music to keep things moving, and chalk and games for children, this event is sure to be fun for market-goers of all ages.


text:
ePublications: Our Writings
Dialogues with Christians
Responses to Criticism
Defense Against Libel
Local Church et al v. Harvest House et al—Texas Supreme Court Decision
A press release concerning the Texas Supreme Court's decision not to review the Court of Appeals decision in The Local Church et al v. Harvest House et al.
On August 2, 2006, Living Stream Ministry (LSM) and 93 local churches petitioned the Texas Supreme Court to review the decision of the Texas Court of Appeals concerning the libel case brought by these churches and LSM against Harvest House Publishers and authors John Ankerberg and John Weldon regarding the book Encyclopedia of Cults and New Religions (ECNR). On December 1, 2006 the Court declined to consider that request.
The plaintiff churches and LSM felt constrained to petition the Texas Supreme Court because the decision of the Texas Appeals Court was seriously flawed and did not take into consideration the evidence or facts of the case. The ruling of the Appeals Court was based on faulty technical, legal grounds, and not on the facts of the case, which we continue to believe would be very compelling if ever presented to a jury. Furthermore, that ruling also raised issues that could have far-reaching implications for all manner of Christian and other religious groups in the future by creating a vehicle whereby libel and defamation can be protected under the guise of "religious speech." This potential still exists, and it may in fact be strengthened by the ruling of the Texas Supreme Court. Therefore, we plan to ask the Texas Supreme Court to reconsider their decision within the next few days. Beyond that, we are still prayerfully considering whether or not to appeal this case to the next level.
We believe that from the beginning we have followed the Lord's leading and regard all that has happened as being under His sovereign hand. Throughout this process, He has led us to gratifying fraternity and fellowship with many other followers of Christ who have patiently and earnestly looked into both the complex legal aspects of this case and the teachings and practices of the local churches.
Several of these are well-respected Christian leaders, and a number have been severely criticized—both publicly and privately—for taking a principled and courageous stand with us for the truth. We have been encouraged by and are grateful for their steadfast support in this effort—even at great personal cost. To all our friends and supporters who have stood with us both publicly and behind the scenes, we offer our deepest gratitude.
While we are disappointed by the Texas Supreme Court's unwillingness to consider this case further, neither that decision nor the previous ruling of the Texas Court of Appeals vindicate or validate the things written in ECNR. The Supreme Court has chosen simply not to consider the matter. As for the Appeals Court, their primary conclusion was that the complained of language in the book could not be construed as applying to the local churches or Living Stream Ministry. Harvest House has also publicly stated that they never intended for the abhorrent conduct detailed in the introduction to apply to Living Stream Ministry or the local churches.
Yet, the fact remains that many people have attributed, and will continue to attribute, the egregious accusations made in the book's introduction to Living Stream Ministry and the local churches. As a result, many believers, especially in countries that do not enjoy the same degree of religious freedom that we do in America, are suffering for their faith.
Therefore, we respectfully call upon Harvest House to align their actions with their public statements and do the right thing. If they sincerely believe, as they have repeatedly proclaimed, that the things written in ECNR were not intended to apply to Living Stream Ministry and the local churches, they should remove any mention of Living Stream Ministry and the local churches from ECNR and any future publications that make similar allegations. We hope that they would take this action for the sake of the unity of Body of Christ and for the welfare of innocent believers everywhere who have suffered as an unintended result of that book. We also hope our brothers and sisters throughout the Christian community will join us in this plea.
Background on this case, including copies of official court documents
The entire statement is available in Adobe format here.
Local Church et al v. Harvest House et al—Court of Appeals Decision
Statement on the U.S. Supreme Court Decision
Local Church et al v. Harvest House et al—Rutherford Institute Amicus
A Letter to the Saints in the Lord's Recovery
Case Outcomes, Defense, ECNR, Press Releases
ECNR, Encyclopedia of Cults and New Religions, Harvest House, John Ankerberg, John Weldon, press release, Texas Supreme Court
Watchman Nee and Witness Lee
Living Stream Ministry
Recovery Version of the New Testament
Books by Watchman Nee and Witness Lee
Life-study of the Bible Radio Broadcasts
Local Church FAQ
Affirmation & Critique
"We Were Wrong"
Testimony of the local churches and LSM
© 2017 Defense & Confirmation Project


text:
Jared Fogle slammed for pleading guilty to child pornography
INDIANAPOLIS — Jared Fogle was once the darling the advertising community, most particularly for the Subway restaurant chain.
But after his Zionsville, Ind. home was raided by the FBI for suspicion on child pornography, his crystal clean image was shattered into a thousand pieces. He is expected to plead guilty to possessing child pornography
Social media began clowning Fogle after he pleaded guilty to possession of child porn, not long after his No. 2 man
Subway issued the following statement to FOX59 Tuesday:
"We have already ended our relationship with Jared and have no further comment.
Earlier this year, Russell Taylor, the former director of the Jared Foundation started by Fogle, was arrested in a child pornography case. He was caught by federal agents possession and, most digustingly, producing child porn. Investigators said a search of Taylor's home turned up more than 500 videos with images of child pornography. In May, Taylor unsuccessfully tried to kill himself while in jail.
Social media wasted no time clowning the former Indiana University student and Subway spokesman.
Tags: child porn, Indiana, INDIANAPOLIS, jared fogle, jared fogle pleads guilty, subway spokesperson


text:
Алексе́й Ефиме́нко:
 Ефименко, Алексей Алексеевич (род. 1985) — белорусский хоккеист.
 Ефименко, Алексей Николаевич (род. 1984) — российский самбист.

redpajama_set_name: RedPajamaWikipedia


Appoligies go out to pilot_down, but I couldn't resist. I simply MUST use that line as a subject.
As with most of my really good journal entries...I must go back. Back to when I was a nerd in high school and I'd sit in class listening to all these people talk of going to visit "the light." And me...sitting there thinking to myself, "What the hell is this light people keep talking about?" See, "the light" was reserved for the cool kids only. At any rate, it was reserved for people who knew what the hell it was and more importantly, where it was. I, knowing neither, just chalked this up to another one of those "cool kid" secrets and moved on with my life.
Well friends, I must tell you, I'm going to have battle scars from this damn light.
See...I've FINALLY met someone who knows where the light is. So...we made plans to go there tonight since trying to get schedules together is impossible. This also probably had something to do with our desicion to go whether it was nice out or rainy, thunderstorming, lightening, and well....just really bad weather.
There was a bad storm in ER earlier today I guess...so *I* figured that most of it had to have blown through by now. I was wrong. I got to Jason's apartment and we left for MI. I kept the radio on low so in case there were any weather updates we could hear them. Not two minutes into it there's tornado warnings for MI and storm warnings for everywhere. For some crazy reason we just ignored them and kept driving.
When we finally got there...I parked the car and we walked a ways down the path. There's a rather lange obstacle in the way...a creek. The last time Jason was there it was still melting so it wasn't as big and they could use stones...but there was no way we were going to get around it. We even climbed up a huge hill to see if we could get across farther down, but wisely decided against it. It was then decided that if we walked back and drove down the road a bit further, that there was a road you could walk down and connect to the current down and somehow going through all this you avoid the creek. So we did just that. This road is really muddy mind you, and it's a fair distance...so it was a bit of a journey...but we made it:) Unfortunatley...so did the storm.
There was rain and lightening and thunder. It was wet...but at least it was a warm rain. The storm totally took away from the light's power though. But you could still barely see it through the fog. It was really cool to see the sky lighting up with the light barely coming through in the distance. Jason finally had the wise idea to go back, since after all we were standing under power lines and a tornado was supposed to be coming through. Not a good plan if you're planning on living to tell about your adventure. So as we head back, it starts HAILING. And this is no wimpy hail...this is golf ball sized hail.
Now...just for a moment...I would like you all to imagine huge chunks of ice falling out of the sky at you from God only knows how high up. I've been in hail storms....but never outside during one. I don't recommend it. There was virtually no shelter. Jason had a huge bump on his head and I've got a black and blue shoulder. Battle scars I tells ya!!
So after three or four minutes of getting beaten on...we walk back to the car. It seems MUCH further on the way back...probably because we're wet and walking on ice marbles. But much fun was had. Tea was made upon our return to warm up...and best of all...we are both still alive:) Yeeeeeeeeeeehaaaaaaaaaw!!!
For those of you who have no clue what light I'm refering to...here are a few links to quelch your curiosity.
Yeah...that might put a damper on things. We actually took another road back *not the one that was marked* and ended up trekking way back through the woods and stuff so we were alot closer than the "offical" viewing spot. It was fun...but now I've got a HUGE bruise on my shoulder from where a golf ball sized hail stone hit it.
LOL we both used the same subject line.
Oh my god Amanda that was the most fun I have had in a long while.
Despite Tiger Woods clocking me in the head!
Whenever you're in town again let me know. We have to have tea more often too. And of course,we have to go back there on an un-storming night. My shoes are finally dry!
You know what they say...great minds think alike.
I'm jealous...my shoes are nowhere NEAR dry. Good thing I don't have to wear them to work.
I'm thinking about spending the weekend at mum's again this week, at least maybe Sunday and Monday. And there's practice Tuesday...so I don't know. I'll have to talk to her and figure out her schedule.
Glad you had fun :) I throughly enjoyed myself as well! Lemme know what your free time is like during the next week or so and we'll see if we can plan something, k?


text:
package org.apache.phoenix.end2end;

import static org.apache.phoenix.util.TestUtil.TEST_PROPERTIES;
import static org.apache.phoenix.util.TestUtil.getAllSplits;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;

import java.io.IOException;
import java.sql.Array;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Random;

import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HRegionLocation;
import org.apache.hadoop.hbase.client.HTableInterface;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.phoenix.jdbc.PhoenixConnection;
import org.apache.phoenix.jdbc.PhoenixDatabaseMetaData;
import org.apache.phoenix.query.ConnectionQueryServices;
import org.apache.phoenix.query.KeyRange;
import org.apache.phoenix.query.QueryServices;
import org.apache.phoenix.query.QueryServicesOptions;
import org.apache.phoenix.schema.PTable;
import org.apache.phoenix.schema.PTableImpl;
import org.apache.phoenix.schema.PTableKey;
import org.apache.phoenix.schema.PTableType;
import org.apache.phoenix.schema.stats.GuidePostsKey;
import org.apache.phoenix.util.PropertiesUtil;
import org.apache.phoenix.util.QueryUtil;
import org.apache.phoenix.util.ReadOnlyProps;
import org.apache.phoenix.util.SchemaUtil;
import org.apache.phoenix.util.TestUtil;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;

import com.google.common.collect.Maps;

@RunWith(Parameterized.class)
public class StatsCollectorIT extends BaseUniqueNamesOwnClusterIT {
    private final String tableDDLOptions;
    private final boolean columnEncoded;
    private String tableName;
    private String schemaName;
    private String fullTableName;
    private String physicalTableName;
    private final boolean userTableNamespaceMapped;
    private final boolean mutable;

    public StatsCollectorIT(boolean mutable, boolean transactional, boolean userTableNamespaceMapped, boolean columnEncoded) {
        StringBuilder sb = new StringBuilder();
        if (transactional) {
            sb.append("TRANSACTIONAL=true");
        }
        if (!columnEncoded) {
            if (sb.length()>0) {
                sb.append(",");
            }
            sb.append("COLUMN_ENCODED_BYTES=0");
        } else {
            if (sb.length()>0) {
                sb.append(",");
            }
            sb.append("COLUMN_ENCODED_BYTES=4");
        }
        if (!mutable) {
            if (sb.length()>0) {
                sb.append(",");
            }
            sb.append("IMMUTABLE_ROWS=true");
            if (!columnEncoded) {
                sb.append(",IMMUTABLE_STORAGE_SCHEME="+PTableImpl.ImmutableStorageScheme.ONE_CELL_PER_COLUMN);
            }
        }
        this.tableDDLOptions = sb.toString();
        this.userTableNamespaceMapped = userTableNamespaceMapped;
        this.columnEncoded = columnEncoded;
        this.mutable = mutable;
    }

    @Parameters(name="columnEncoded = {0}, mutable = {1}, transactional = {2}, isUserTableNamespaceMapped = {3}")
    public static Collection<Boolean[]> data() {
        return Arrays.asList(new Boolean[][] {
                { false, false, false, false }, { false, false, false, true }, { false, false, true, false }, { false, false, true, true },
                // no need to test non column encoded mutable case and this is the same as non column encoded immutable
                //{ false, true, false, false }, { false, true, false, true }, { false, true, true, false }, { false, true, true, true },
                { true, false, false, false }, { true, false, false, true }, { true, false, true, false }, { true, false, true, true },
                { true, true, false, false }, { true, true, false, true }, { true, true, true, false }, { true, true, true, true }
          });
    }

    @BeforeClass
    public static void doSetup() throws Exception {
        // enable name space mapping at global level on both client and server side
        Map<String, String> serverProps = Maps.newHashMapWithExpectedSize(7);
        serverProps.put(QueryServices.IS_NAMESPACE_MAPPING_ENABLED, "true");
        serverProps.put(QueryServices.STATS_GUIDEPOST_WIDTH_BYTES_ATTRIB, Long.toString(20));
        Map<String, String> clientProps = Maps.newHashMapWithExpectedSize(2);
        clientProps.put(QueryServices.IS_NAMESPACE_MAPPING_ENABLED, "true");
        clientProps.put(QueryServices.STATS_GUIDEPOST_WIDTH_BYTES_ATTRIB, Long.toString(20));
        setUpTestDriver(new ReadOnlyProps(serverProps.entrySet().iterator()), new ReadOnlyProps(clientProps.entrySet().iterator()));
    }

    @Before
    public void generateTableNames() throws SQLException {
        schemaName = generateUniqueName();
        if (userTableNamespaceMapped) {
            try (Connection conn = getConnection()) {
                conn.createStatement().execute("CREATE SCHEMA " + schemaName);
            }
        }
        tableName = "T_" + generateUniqueName();
        fullTableName = SchemaUtil.getTableName(schemaName, tableName);
        physicalTableName = SchemaUtil.getPhysicalHBaseTableName(fullTableName, userTableNamespaceMapped, PTableType.TABLE).getString();
    }

    private Connection getConnection() throws SQLException {
        return getConnection(Integer.MAX_VALUE);
    }

    private Connection getConnection(Integer statsUpdateFreq) throws SQLException {
        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
        props.setProperty(QueryServices.EXPLAIN_CHUNK_COUNT_ATTRIB, Boolean.TRUE.toString());
        props.setProperty(QueryServices.EXPLAIN_ROW_COUNT_ATTRIB, Boolean.TRUE.toString());
        props.setProperty(QueryServices.STATS_UPDATE_FREQ_MS_ATTRIB, Integer.toString(statsUpdateFreq));
        // enable/disable namespace mapping at connection level
        props.setProperty(QueryServices.IS_NAMESPACE_MAPPING_ENABLED, Boolean.toString(userTableNamespaceMapped));
        return DriverManager.getConnection(getUrl(), props);
    }

    @Test
    public void testUpdateEmptyStats() throws Exception {
        Connection conn = getConnection();
        conn.setAutoCommit(true);
        conn.createStatement().execute(
                "CREATE TABLE " + fullTableName +" ( k CHAR(1) PRIMARY KEY )"  + tableDDLOptions);
        conn.createStatement().execute("UPDATE STATISTICS " + fullTableName);
        ResultSet rs = conn.createStatement().executeQuery("EXPLAIN SELECT * FROM " + fullTableName);
        String explainPlan = QueryUtil.getExplainPlan(rs);
        assertEquals(
                "CLIENT 1-CHUNK 0 ROWS 0 BYTES PARALLEL 1-WAY FULL SCAN OVER " + physicalTableName + "\n" +
                "    SERVER FILTER BY FIRST KEY ONLY",
                explainPlan);
        conn.close();
    }

    @Test
    public void testSomeUpdateEmptyStats() throws Exception {
        Connection conn = getConnection();
        conn.setAutoCommit(true);
        conn.createStatement().execute(
                "CREATE TABLE " + fullTableName +" ( k VARCHAR PRIMARY KEY, a.v1 VARCHAR, b.v2 VARCHAR ) " + tableDDLOptions + (tableDDLOptions.isEmpty() ? "" : ",") + "SALT_BUCKETS = 3");
        conn.createStatement().execute("UPSERT INTO " + fullTableName + "(k,v1) VALUES('a','123456789')");
        conn.createStatement().execute("UPDATE STATISTICS " + fullTableName);

        ResultSet rs;
        String explainPlan;
        rs = conn.createStatement().executeQuery("EXPLAIN SELECT v2 FROM " + fullTableName + " WHERE v2='foo'");
        explainPlan = QueryUtil.getExplainPlan(rs);
        // if we are using the ONE_CELL_PER_COLUMN_FAMILY storage scheme, we will have the single kv even though there are no values for col family v2
        String stats = columnEncoded && !mutable  ? "4-CHUNK 1 ROWS 38 BYTES" : "3-CHUNK 0 ROWS 0 BYTES";
        assertEquals(
                "CLIENT " + stats + " PARALLEL 3-WAY FULL SCAN OVER " + physicalTableName + "\n" +
                "    SERVER FILTER BY B.V2 = 'foo'\n" +
                "CLIENT MERGE SORT",
                explainPlan);
        rs = conn.createStatement().executeQuery("EXPLAIN SELECT * FROM " + fullTableName);
        explainPlan = QueryUtil.getExplainPlan(rs);
        assertEquals(
                "CLIENT 4-CHUNK 1 ROWS " + (columnEncoded ? "28" : "34") + " BYTES PARALLEL 3-WAY FULL SCAN OVER " + physicalTableName + "\n" +
                "CLIENT MERGE SORT",
                explainPlan);
        rs = conn.createStatement().executeQuery("EXPLAIN SELECT * FROM " + fullTableName + " WHERE k = 'a'");
        explainPlan = QueryUtil.getExplainPlan(rs);
        assertEquals(
                "CLIENT 1-CHUNK 1 ROWS " + (columnEncoded ? "204" : "202") + " BYTES PARALLEL 1-WAY POINT LOOKUP ON 1 KEY OVER " + physicalTableName + "\n" +
                "CLIENT MERGE SORT",
                explainPlan);

        conn.close();
    }

    @Test
    public void testUpdateStats() throws SQLException, IOException,
			InterruptedException {
		Connection conn;
        PreparedStatement stmt;
        ResultSet rs;
        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
        conn = getConnection();
        conn.createStatement().execute(
                "CREATE TABLE " + fullTableName +" ( k VARCHAR, a_string_array VARCHAR(100) ARRAY[4], b_string_array VARCHAR(100) ARRAY[4] \n"
                        + " CONSTRAINT pk PRIMARY KEY (k, b_string_array DESC))"
                		+ tableDDLOptions );
        String[] s;
        Array array;
        conn = upsertValues(props, fullTableName);
        // CAll the update statistics query here. If already major compaction has run this will not get executed.
        stmt = conn.prepareStatement("UPDATE STATISTICS " + fullTableName);
        stmt.execute();
        stmt = upsertStmt(conn, fullTableName);
        stmt.setString(1, "z");
        s = new String[] { "xyz", "def", "ghi", "jkll", null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(2, array);
        s = new String[] { "zya", "def", "ghi", "jkll", null, null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(3, array);
        stmt.execute();
        stmt = conn.prepareStatement("UPDATE STATISTICS " + fullTableName);
        stmt.execute();
        rs = conn.createStatement().executeQuery("SELECT k FROM " + fullTableName);
        assertTrue(rs.next());
        conn.close();
    }

    private void testNoDuplicatesAfterUpdateStats(String splitKey) throws Throwable {
        Connection conn = getConnection();
        PreparedStatement stmt;
        ResultSet rs;
        conn.createStatement()
                .execute("CREATE TABLE " + fullTableName
                        + " ( k VARCHAR, c1.a bigint,c2.b bigint CONSTRAINT pk PRIMARY KEY (k))"+ tableDDLOptions
                        + (splitKey != null ? " split on (" + splitKey + ")" : "") );
        conn.createStatement().execute("upsert into " + fullTableName + " values ('abc',1,3)");
        conn.createStatement().execute("upsert into " + fullTableName + " values ('def',2,4)");
        conn.commit();
        stmt = conn.prepareStatement("UPDATE STATISTICS " + fullTableName);
        stmt.execute();
        rs = conn.createStatement().executeQuery("SELECT k FROM " + fullTableName + " order by k desc");
        assertTrue(rs.next());
        assertEquals("def", rs.getString(1));
        assertTrue(rs.next());
        assertEquals("abc", rs.getString(1));
        assertTrue(!rs.next());
        conn.close();
    }

    @Test
    public void testNoDuplicatesAfterUpdateStatsWithSplits() throws Throwable {
        testNoDuplicatesAfterUpdateStats("'abc','def'");
    }

    @Test
    public void testNoDuplicatesAfterUpdateStatsWithDesc() throws Throwable {
        testNoDuplicatesAfterUpdateStats(null);
    }

    @Test
    public void testUpdateStatsWithMultipleTables() throws Throwable {
        String fullTableName2 = SchemaUtil.getTableName(schemaName, "T_" + generateUniqueName());
        Connection conn;
        PreparedStatement stmt;
        ResultSet rs;
        Properties props = PropertiesUtil.deepCopy(TEST_PROPERTIES);
        conn = getConnection();
        conn.createStatement().execute(
                "CREATE TABLE " + fullTableName +" ( k VARCHAR, a_string_array VARCHAR(100) ARRAY[4], b_string_array VARCHAR(100) ARRAY[4] \n"
                        + " CONSTRAINT pk PRIMARY KEY (k, b_string_array DESC))" + tableDDLOptions );
        conn.createStatement().execute(
                "CREATE TABLE " + fullTableName2 +" ( k VARCHAR, a_string_array VARCHAR(100) ARRAY[4], b_string_array VARCHAR(100) ARRAY[4] \n"
                        + " CONSTRAINT pk PRIMARY KEY (k, b_string_array DESC))" + tableDDLOptions );
        String[] s;
        Array array;
        conn = upsertValues(props, fullTableName);
        conn = upsertValues(props, fullTableName2);
        // CAll the update statistics query here
        stmt = conn.prepareStatement("UPDATE STATISTICS "+fullTableName);
        stmt.execute();
        stmt = conn.prepareStatement("UPDATE STATISTICS "+fullTableName2);
        stmt.execute();
        stmt = upsertStmt(conn, fullTableName);
        stmt.setString(1, "z");
        s = new String[] { "xyz", "def", "ghi", "jkll", null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(2, array);
        s = new String[] { "zya", "def", "ghi", "jkll", null, null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(3, array);
        stmt.execute();
        stmt = upsertStmt(conn, fullTableName2);
        stmt.setString(1, "z");
        s = new String[] { "xyz", "def", "ghi", "jkll", null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(2, array);
        s = new String[] { "zya", "def", "ghi", "jkll", null, null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(3, array);
        stmt.execute();
        conn.close();
        conn = getConnection();
        // This analyze would not work
        stmt = conn.prepareStatement("UPDATE STATISTICS "+fullTableName2);
        stmt.execute();
        rs = conn.createStatement().executeQuery("SELECT k FROM "+fullTableName2);
        assertTrue(rs.next());
        conn.close();
    }

    private Connection upsertValues(Properties props, String tableName) throws SQLException, IOException,
            InterruptedException {
        Connection conn;
        PreparedStatement stmt;
        conn = getConnection();
        stmt = upsertStmt(conn, tableName);
        stmt.setString(1, "a");
        String[] s = new String[] { "abc", "def", "ghi", "jkll", null, null, "xxx" };
        Array array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(2, array);
        s = new String[] { "abc", "def", "ghi", "jkll", null, null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(3, array);
        stmt.execute();
        conn.commit();
        stmt = upsertStmt(conn, tableName);
        stmt.setString(1, "b");
        s = new String[] { "xyz", "def", "ghi", "jkll", null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(2, array);
        s = new String[] { "zya", "def", "ghi", "jkll", null, null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(3, array);
        stmt.execute();
        conn.commit();
        stmt = upsertStmt(conn, tableName);
        stmt.setString(1, "c");
        s = new String[] { "xyz", "def", "ghi", "jkll", null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(2, array);
        s = new String[] { "zya", "def", "ghi", "jkll", null, null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(3, array);
        stmt.execute();
        conn.commit();
        stmt = upsertStmt(conn, tableName);
        stmt.setString(1, "d");
        s = new String[] { "xyz", "def", "ghi", "jkll", null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(2, array);
        s = new String[] { "zya", "def", "ghi", "jkll", null, null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(3, array);
        stmt.execute();
        conn.commit();
        stmt = upsertStmt(conn, tableName);
        stmt.setString(1, "b");
        s = new String[] { "xyz", "def", "ghi", "jkll", null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(2, array);
        s = new String[] { "zya", "def", "ghi", "jkll", null, null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(3, array);
        stmt.execute();
        conn.commit();
        stmt = upsertStmt(conn, tableName);
        stmt.setString(1, "e");
        s = new String[] { "xyz", "def", "ghi", "jkll", null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(2, array);
        s = new String[] { "zya", "def", "ghi", "jkll", null, null, null, "xxx" };
        array = conn.createArrayOf("VARCHAR", s);
        stmt.setArray(3, array);
        stmt.execute();
        conn.commit();
        return conn;
    }

    private PreparedStatement upsertStmt(Connection conn, String tableName) throws SQLException {
        PreparedStatement stmt;
        stmt = conn.prepareStatement("UPSERT INTO " + tableName + " VALUES(?,?,?)");
        return stmt;
    }

    private void compactTable(Connection conn, String tableName) throws Exception {
        TestUtil.doMajorCompaction(conn, tableName);
    }

    @Test
    @Ignore //TODO remove this once  https://issues.apache.org/jira/browse/TEPHRA-208 is fixed
    public void testCompactUpdatesStats() throws Exception {
        testCompactUpdatesStats(0, fullTableName);
    }

    @Test
    @Ignore //TODO remove this once  https://issues.apache.org/jira/browse/TEPHRA-208 is fixed
    public void testCompactUpdatesStatsWithMinStatsUpdateFreq() throws Exception {
        testCompactUpdatesStats(QueryServicesOptions.DEFAULT_STATS_UPDATE_FREQ_MS, fullTableName);
    }

    private static void invalidateStats(Connection conn, String tableName) throws SQLException {
        PTable ptable = conn.unwrap(PhoenixConnection.class)
                .getMetaDataCache().getTableRef(new PTableKey(null, tableName))
                .getTable();
        byte[] name = ptable.getPhysicalName().getBytes();
        conn.unwrap(PhoenixConnection.class).getQueryServices().invalidateStats(new GuidePostsKey(name, SchemaUtil.getEmptyColumnFamily(ptable)));
    }

    private void testCompactUpdatesStats(Integer statsUpdateFreq, String tableName) throws Exception {
        int nRows = 10;
        Connection conn = getConnection(statsUpdateFreq);
        PreparedStatement stmt;
        conn.createStatement().execute("CREATE TABLE " + tableName + "(k CHAR(1) PRIMARY KEY, v INTEGER, w INTEGER) "
                + (!tableDDLOptions.isEmpty() ? tableDDLOptions + "," : "")
                + HColumnDescriptor.KEEP_DELETED_CELLS + "=" + Boolean.FALSE);
        stmt = conn.prepareStatement("UPSERT INTO " + tableName + " VALUES(?,?,?)");
        for (int i = 0; i < nRows; i++) {
            stmt.setString(1, Character.toString((char) ('a' + i)));
            stmt.setInt(2, i);
            stmt.setInt(3, i);
            stmt.executeUpdate();
        }
        conn.commit();

        compactTable(conn, physicalTableName);

        if (statsUpdateFreq != 0) {
            invalidateStats(conn, tableName);
        } else {
            // Confirm that when we have a non zero STATS_UPDATE_FREQ_MS_ATTRIB, after we run
            // UPDATATE STATISTICS, the new statistics are faulted in as expected.
            List<KeyRange>keyRanges = getAllSplits(conn, tableName);
            assertNotEquals(nRows+1, keyRanges.size());
            // If we've set MIN_STATS_UPDATE_FREQ_MS_ATTRIB, an UPDATE STATISTICS will invalidate the cache
            // and forcing the new stats to be pulled over.
            int rowCount = conn.createStatement().executeUpdate("UPDATE STATISTICS " + tableName);
            assertEquals(10, rowCount);
        }
        List<KeyRange>keyRanges = getAllSplits(conn, tableName);
        assertEquals(nRows+1, keyRanges.size());

        int nDeletedRows = conn.createStatement().executeUpdate("DELETE FROM " + tableName + " WHERE V < " + nRows / 2);
        conn.commit();
        assertEquals(5, nDeletedRows);

        Scan scan = new Scan();
        scan.setRaw(true);
        PhoenixConnection phxConn = conn.unwrap(PhoenixConnection.class);
        try (HTableInterface htable = phxConn.getQueryServices().getTable(Bytes.toBytes(tableName))) {
            ResultScanner scanner = htable.getScanner(scan);
            Result result;
            while ((result = scanner.next())!=null) {
                System.out.println(result);
            }
        }

        compactTable(conn, physicalTableName);

        scan = new Scan();
        scan.setRaw(true);
        phxConn = conn.unwrap(PhoenixConnection.class);
        try (HTableInterface htable = phxConn.getQueryServices().getTable(Bytes.toBytes(tableName))) {
            ResultScanner scanner = htable.getScanner(scan);
            Result result;
            while ((result = scanner.next())!=null) {
                System.out.println(result);
            }
        }

        if (statsUpdateFreq != 0) {
            invalidateStats(conn, tableName);
        } else {
            assertEquals(nRows+1, keyRanges.size());
            // If we've set STATS_UPDATE_FREQ_MS_ATTRIB, an UPDATE STATISTICS will invalidate the cache
            // and force us to pull over the new stats
            int rowCount = conn.createStatement().executeUpdate("UPDATE STATISTICS " + tableName);
            assertEquals(5, rowCount);
        }
        keyRanges = getAllSplits(conn, tableName);
        assertEquals(nRows/2+1, keyRanges.size());
        ResultSet rs = conn.createStatement().executeQuery("SELECT SUM(GUIDE_POSTS_ROW_COUNT) FROM "
                + PhoenixDatabaseMetaData.SYSTEM_STATS_NAME + " WHERE PHYSICAL_NAME='" + physicalTableName + "'");
        rs.next();
        assertEquals(nRows - nDeletedRows, rs.getLong(1));
    }

    @Test
    public void testWithMultiCF() throws Exception {
        int nRows = 20;
        Connection conn = getConnection(0);
        PreparedStatement stmt;
        conn.createStatement().execute(
                "CREATE TABLE " + fullTableName
                        + "(k VARCHAR PRIMARY KEY, a.v INTEGER, b.v INTEGER, c.v INTEGER NULL, d.v INTEGER NULL) "
                        + tableDDLOptions );
        stmt = conn.prepareStatement("UPSERT INTO " + fullTableName + " VALUES(?,?, ?, ?, ?)");
        byte[] val = new byte[250];
        for (int i = 0; i < nRows; i++) {
            stmt.setString(1, Character.toString((char)('a' + i)) + Bytes.toString(val));
            stmt.setInt(2, i);
            stmt.setInt(3, i);
            stmt.setInt(4, i);
            stmt.setInt(5, i);
            stmt.executeUpdate();
        }
        conn.commit();
        stmt = conn.prepareStatement("UPSERT INTO " + fullTableName + "(k, c.v, d.v) VALUES(?,?,?)");
        for (int i = 0; i < 5; i++) {
            stmt.setString(1, Character.toString((char)('a' + 'z' + i)) + Bytes.toString(val));
            stmt.setInt(2, i);
            stmt.setInt(3, i);
            stmt.executeUpdate();
        }
        conn.commit();

        ResultSet rs;
        TestUtil.analyzeTable(conn, fullTableName);
        List<KeyRange> keyRanges = getAllSplits(conn, fullTableName);
        assertEquals(26, keyRanges.size());
        rs = conn.createStatement().executeQuery("EXPLAIN SELECT * FROM " + fullTableName);
        assertEquals("CLIENT 26-CHUNK 25 ROWS " + (columnEncoded ? ( mutable ? "12530" : "13902" ) : "12420") + " BYTES PARALLEL 1-WAY FULL SCAN OVER " + physicalTableName,
                QueryUtil.getExplainPlan(rs));

        ConnectionQueryServices services = conn.unwrap(PhoenixConnection.class).getQueryServices();
        List<HRegionLocation> regions = services.getAllTableRegions(Bytes.toBytes(physicalTableName));
        assertEquals(1, regions.size());

        TestUtil.analyzeTable(conn, fullTableName);
        String query = "UPDATE STATISTICS " + fullTableName + " SET \""
                + QueryServices.STATS_GUIDEPOST_WIDTH_BYTES_ATTRIB + "\"=" + Long.toString(1000);
        conn.createStatement().execute(query);
        keyRanges = getAllSplits(conn, fullTableName);
        boolean oneCellPerColFamliyStorageScheme = !mutable && columnEncoded;
        assertEquals(oneCellPerColFamliyStorageScheme ? 13 : 12, keyRanges.size());

        rs = conn
                .createStatement()
                .executeQuery(
                        "SELECT COLUMN_FAMILY,SUM(GUIDE_POSTS_ROW_COUNT),SUM(GUIDE_POSTS_WIDTH),COUNT(*) from SYSTEM.STATS where PHYSICAL_NAME = '"
                                + physicalTableName + "' GROUP BY COLUMN_FAMILY ORDER BY COLUMN_FAMILY");

        assertTrue(rs.next());
        assertEquals("A", rs.getString(1));
        assertEquals(24, rs.getInt(2));
        assertEquals(columnEncoded ? ( mutable ? 12252 : 13624 ) : 12144, rs.getInt(3));
        assertEquals(oneCellPerColFamliyStorageScheme ? 12 : 11, rs.getInt(4));

        assertTrue(rs.next());
        assertEquals("B", rs.getString(1));
        assertEquals(oneCellPerColFamliyStorageScheme ? 24 : 20, rs.getInt(2));
        assertEquals(columnEncoded ? ( mutable ? 5600 : 6972 ) : 5540, rs.getInt(3));
        assertEquals(oneCellPerColFamliyStorageScheme ? 6 : 5, rs.getInt(4));

        assertTrue(rs.next());
        assertEquals("C", rs.getString(1));
        assertEquals(24, rs.getInt(2));
        assertEquals(columnEncoded ? ( mutable ? 6724 : 6988 ) : 6652, rs.getInt(3));
        assertEquals(6, rs.getInt(4));

        assertTrue(rs.next());
        assertEquals("D", rs.getString(1));
        assertEquals(24, rs.getInt(2));
        assertEquals(columnEncoded ? ( mutable ? 6724 : 6988 ) : 6652, rs.getInt(3));
        assertEquals(6, rs.getInt(4));

        assertFalse(rs.next());

        // Disable stats
        conn.createStatement().execute("ALTER TABLE " + fullTableName +
                " SET " + PhoenixDatabaseMetaData.GUIDE_POSTS_WIDTH + "=0");
        TestUtil.analyzeTable(conn, fullTableName);
        // Assert that there are no more guideposts
        rs = conn.createStatement().executeQuery("SELECT count(1) FROM " + PhoenixDatabaseMetaData.SYSTEM_STATS_NAME +
                " WHERE " + PhoenixDatabaseMetaData.PHYSICAL_NAME + "='" + physicalTableName + "' AND " + PhoenixDatabaseMetaData.COLUMN_FAMILY + " IS NOT NULL");
        assertTrue(rs.next());
        assertEquals(0, rs.getLong(1));
        assertFalse(rs.next());
        rs = conn.createStatement().executeQuery("EXPLAIN SELECT * FROM " + fullTableName);
        assertEquals("CLIENT 1-CHUNK PARALLEL 1-WAY FULL SCAN OVER " + physicalTableName,
                QueryUtil.getExplainPlan(rs));
    }

    @Test
    public void testRowCountAndByteCounts() throws SQLException {
        Connection conn = getConnection();
        String ddl = "CREATE TABLE " + fullTableName + " (t_id VARCHAR NOT NULL,\n" + "k1 INTEGER NOT NULL,\n"
                + "k2 INTEGER NOT NULL,\n" + "C3.k3 INTEGER,\n" + "C2.v1 VARCHAR,\n"
                + "CONSTRAINT pk PRIMARY KEY (t_id, k1, k2)) " + tableDDLOptions + " split on ('e','j','o')";
        conn.createStatement().execute(ddl);
        String[] strings = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r",
                "s", "t", "u", "v", "w", "x", "y", "z" };
        for (int i = 0; i < 26; i++) {
            conn.createStatement().execute(
                    "UPSERT INTO " + fullTableName + " values('" + strings[i] + "'," + i + "," + (i + 1) + ","
                            + (i + 2) + ",'" + strings[25 - i] + "')");
        }
        conn.commit();
        ResultSet rs;
        String query = "UPDATE STATISTICS " + fullTableName + " SET \""
                + QueryServices.STATS_GUIDEPOST_WIDTH_BYTES_ATTRIB + "\"=" + Long.toString(20);
        conn.createStatement().execute(query);
        Random r = new Random();
        int count = 0;
        while (count < 4) {
            int startIndex = r.nextInt(strings.length);
            int endIndex = r.nextInt(strings.length - startIndex) + startIndex;
            long rows = endIndex - startIndex;
            long c2Bytes = rows * (columnEncoded ? ( mutable ? 37 : 48 ) : 35);
            String physicalTableName = SchemaUtil.getPhysicalHBaseTableName(fullTableName, userTableNamespaceMapped, PTableType.TABLE).getString();
            rs = conn.createStatement().executeQuery(
                    "SELECT COLUMN_FAMILY,SUM(GUIDE_POSTS_ROW_COUNT),SUM(GUIDE_POSTS_WIDTH) from SYSTEM.STATS where PHYSICAL_NAME = '"
                            + physicalTableName + "' AND GUIDE_POST_KEY>= cast('" + strings[startIndex]
                            + "' as varbinary) AND  GUIDE_POST_KEY<cast('" + strings[endIndex]
                            + "' as varbinary) and COLUMN_FAMILY='C2' group by COLUMN_FAMILY");
            if (startIndex < endIndex) {
                assertTrue(rs.next());
                assertEquals("C2", rs.getString(1));
                assertEquals(rows, rs.getLong(2));
                assertEquals(c2Bytes, rs.getLong(3));
                count++;
            }
        }
    }
}


text:
I Cut Myself A Bob At Home & It Changed Everything
Story from Hair
I Gave Myself A Bob Haircut At Home — & It Changed Everything
Georgia Murray
Photo: Courtesy of Georgia Murray.
It was only a matter of time before I cut my own hair in lockdown. When you're moving a maximum of 10 meters a day (I will not look at my phone's step counter, you can't make me), you start itching for a different kind of change of scenery. We tend to do something dramatic to our hair when we experience those big, life-altering shifts: a break-up, recovery from an illness, a new job, a move to a different city. While the COVID-19 crisis is certainly lacking the same agency and excitement, the total novelty of the situation (none of us has ever been here before) has caused a restlessness, leading many to shake things up with their appearance.
Naturally, everyone and their mother has gone for a buzzcut. Sorry to disappoint, but while others pull off a shaved head with either gamine or badass finesse, I'd look more like Phil Mitchell. Others are growing beards out of curiosity or choosing more daring hair colors than they would if they were still office-bound. Instead, I opted for a bob. There were practical reasons, sure — I'm growing out my last dramatic hair change (a perm from last summer) and I'm getting impatient with the damage. The shorter the hair, the quicker the repair, right? I'd also had some layers cut in that I wasn't too keen on, so chopping them away felt good. But for me, changing my hair always feels like something more.
Georgia's hair before cutting a bob.
I've never been one to shy away from a switch-up. I've had every color under the sun, from chocolate brown to tangerine orange, ice blonde to golden peach, and as well as the aforementioned perm, I've had the '70s shag cut. For me, hair holds the same power as clothes: It's more than something you wear every day; it has the power to change the way you feel about yourself. In the same way that donning a pair of corduroy kick-flares and a hand-embroidered blouse has me channelling Stevie Nicks, or showing off my tattoos in a black tank top and leather trousers makes me feel more like Joan Jett, switching up my hairstyle gives me the creative freedom to tap into different facets of myself. I take neither fashion nor beauty seriously: like a dress-up box, it's about trying on a different version of myself each time.
Practicality and playfulness aside, I think I went for a bob cut in self-quarantine because it feels nostalgic. My mom gave me a chin-skimming bob throughout my childhood — most likely because the shorter my hair, the less food would end up in it. While at the time I envied classmates with flowing locks (hilariously, I used to put a pair of black tights on my head and pretend I had long hair like Ariel from The Little Mermaid), I look back at childhood photos and love it. There's something inherently youthful about a bob: the fuss-free nature of it, the way it frames your cheeks and exposes your neck, the way it literally bobs from side to side as you shake your head.
Since lockdown started, I've subscribed to Disney+ and am watching '90s classics on repeat — perhaps cutting a bob was a similar effort to root myself in the safety and comfort of childhood. It's a really scary time and while much is uncertain, one thing is for sure: Life won't be the same after this. Comfort is what we're all seeking right now, whether it's in cozy hobbies like knitting and sourdough baking, or watching Hercules for the 100th time and cutting a familiar hairstyle.
Of course, I had my doubts before I cut the damn thing. There's no substitute for a professional cut, and I didn't want to end up looking like Lord Farquaad from Shrek. For something like the shag or the perm, you really need a professional stylist, but there's still room for error with the seemingly simpler bob. Sure, I wouldn't be seeing anyone but my boyfriend for the foreseeable, but the constant Zoom calls and Houseparty gatherings mean we're all confronting our reflection more than we'd like to right now. Luckily, my borderline obsession with hair meant that I had thousands of references on Pinterest boards, in desktop folders, and my Instagram saved page.
Photo: ABC/KOBAL/Shutterstock.
Photo: Frank Trapper/Getty Images.
The more I skimmed my saved styles, the clearer it became that the bob might just be one of the most enduring hairstyles in history. It thrived in the '20s and '30s, with iconic women of the Jazz Age owning the inimitable style. Josephine Baker and Bette Davis opted for glamorous waves, while Louise Brooks created the iconic razor-sharp, cheekbone-skimming "Lulu bob" (see Catherine Zeta-Jones in Chicago). In the 1960s it was the bouffant bobs of The Supremes and Aretha Franklin, while in the '90s, a leather jacket-clad Winona Ryder and My So-Called Life's Claire Danes gave the bob a shaggy grunge makeover. Uma Thurman's turn as Mia in Pulp Fiction proved there was life in the geometric style yet, and Natalie Portman's roles in Léon and Closer crowned her as the haircut's ultimate pin-up. A more contemporary cultural reference is Audrey Tautou in Amelie; her awkward, arty home-cut bob, along with septum piercings and chokers, became synonymous with Urban Outfitters employees several years ago. For a less whimsical but equally cute take on this style, artist Frances Cannon's bob phase has been in my IG faves for years now.
Photo: Moviestore/Shutterstock.
Armed with my kitchen scissors (I know! I am sorry to all professional hairstylists, but desperate times call for desperate tools), I headed to the bathroom to rid myself of a good few inches. For those interested in the mechanics of my very rudimentary cut, I parted my hair down the middle, separated it into two bunches, and chopped straight across the bottom where my first layers started. Once the hair was all one length (just about), I pinned it up in layers across the head to see if it was even enough and worked my way through it until I was satisfied. I still have to blow-dry my hair post-wash as I have the remainder of my perm to tame, but since the chop I've been washing it once every three days, and using dry shampoo to keep the roots in check. I find that my bob on day two and three is much better as it's lived-in and less blow-dried, and becomes more naturally wavy and loose.
While there's so much I love about my new neck-grazing cut, from the kicky shape to my newfound love of hair accessories (a padded headband and pearl barrette look all the more cute in a fresh bob), what I didn't expect was for it to help me feel like myself again. Before I went for the chop, I was struggling to find any motivation to get dressed — properly dressed — in lockdown. Like everyone else working from home, I'd bought new joggers but, as friends and colleagues will tell you, I've never worn anything resembling athleisure before this. The lines between pajamas and everyday wear were becoming blurred and, as a fashion editor whose wardrobe is a constant source of joy and experimentation, I felt as though a part of me was lost. For some people, putting comfort first is the raison d'être of their wardrobe, but for me that meant losing the magic of playing dress-up.
Since cutting my bob, I've rediscovered my jewelery box, too: from candy-store beads and '80s door-knockers to faux-crystal chandeliers, a surprise benefit of shorter hair is that statement earrings stand out so much more. Zoom calls will be a hell of a lot less boring now I can show off my out-there earlobes. When you dye your hair, you're encouraged to try on new colors to see what suits your new shade. In a similar effort, I threw everything in my wardrobe onto my bed and had a day-long trying-on session — music blasting, bottle of wine on hand.
Black rollnecks now feel nouvelle vague; prairie dresses look all the more saccharine; blouses with eccentric necklines have their time to shine now that my hair isn't concealing the main event. Every day since cutting my hair I've worn an outfit that feels like me — which version of me depends on the day, of course, but I've packed away my joggers and hoodie for another place, another time. Sitting down at my makeshift WFH desk each morning no longer feels like a groggy extension of my bed but like I'm starting a new day. We're all in a state of free-fall right now, and anchoring ourselves to some kind of normality feels like a mammoth task. Thanks to just a few inches off my ends, I feel that little bit more like myself.
This story was originally published on Refinery29 UK.
Why I Gave Myself A Bob Haircut At Home In Quarantine
Hair • Beauty • The Latest
written by Georgia Murray
Photo courtesy of Georgia Murray.
More from Hair
I Got My Damaged Hair Color Corrected — & This Is The Result
The creative possibilities are endless when it comes to coloring your hair at home, and even when the finished look is exactly what you wanted, you'l
by Sydney Clarke
Under-$20 Shampoo & Conditioners The Pros Actually Swear By
by Lexy Lebsack
7 New Drugstore Launches That'll Save You Money & Bad Hair ...
by aimee simeon
I Got A '70s-Inspired Curly Shag & This Is What It Looks Like
Whoever said the curly shag wasn't here to stay lied. The tousled chop is still a popular request in salons, and it's exactly the look that Jos
Since I Stopped Making These 7 Mistakes, My Hair Has Never Felt H...
by Jacqueline Kilikita
I Chopped Off 10 Inches Of Hair & My Curls Have Never Looked Better
Ask most people with curly hair and they'll tell you: A good haircut makes a huge difference in the overall health and appearance of your curls — e
I Got A Scalp Facial & It Cured My Chronic Dandruff
If you're familiar with the tenderness and general discomfort of a dry, itchy, flaky scalp that seems to get exponentially more painful and obvious i
It's Deeper Than The Bonnet: The Ever-Present Expectations ...
When doing our hair for the office is off the table, how much of our natural hair routines do we keep under wraps?
21 Protective Styles Perfect For Transitioning To Natural Hair
7 Top-Rated Conditioners That Are Like A Long Drink Of Water For ...
4 Hair-Color Trends That Will Be Huge In 2021
I Got A Moody Grey Weave To Channel My Inner Witch
Instant gratification is an unrealistic expectation with most things in life, but when it comes to hair, wigs and weaves are arguably the quickest, easiest