text:
Jeanine Áñez Chávez (Trinidad, 13 de agosto de 1967) é uma advogada e política boliviana. Autoproclamou-se presidente interina da Bolívia, em 2019, após a renúncia de Evo Morales e a ausência do presidente e do primeiro vice-presidente da Câmara Alta e, como segunda vice-presidente do Senado, convocou sessões extraordinárias no Parlamento para tentar resolver o vazio de poder.

Sua ascensão ao cargo foi formalmente legitimada horas depois pelo Tribunal Constitucional Plurinacional, que declarou que ela havia assumido legalmente a posição de facto, de acordo com o precedente estabelecido pela Declaração Constitucional 0003/01 de 31 de julho de 2001. Em novembro de 2020, foi sucedida por Luis Arce, que venceu as eleições em outubro daquele ano.  Após quase quinze meses de prisão preventiva, o Tribunal de Primeira Instância de La Paz considerou Áñez culpada de violação de deveres e resoluções contrárias à Constituição, sentenciando-a a dez anos de prisão. Foi a segunda mulher na história da Bolívia a assumir o cargo.

Biografia
Nasceu em 13 de agosto de 1967 na cidade de San Joaquin, departamento de Beni. Começou seus estudos escolares em 1972, saindo do ensino médio em 1984. Continuou seus estudos em Ciências Jurídicas e Direito e se formou como advogada por profissão em 1991. Foi diretora e apresentadora de televisão na Totalvision e membro do Comitê Executivo Nacional da Movimento Social Democrata.

Carreira política
Entre 2006 e 2008, atuou como membro da assembleia constituinte na elaboração da nova carta constitucional. Ela era membro da Assembleia Constituinte da comissão de organização e estrutura do novo Estado, também trabalhando no Poder Judiciário. Após a conclusão da Assembleia Constitucional, ela voltou ao seu programa de televisão, mas foi chamada novamente para retornar à política.

Nas eleições de 6 de dezembro de 2009, foi eleita senadora da Bolívia pelo partido do Plano de Progresso para a Convergência Nacional da Bolívia, representando o Departamento de Beni na Assembleia Nacional, desde que assumiu em janeiro de 2010.

Presidência da Bolívia
Em 11 de novembro de 2019, após a renúncia de Evo Morales, do vice-presidente Álvaro García Linera, da presidente do Senado Adriana Salvatierra e do presidente da Câmara dos Deputados Víctor Borda, Jeanine Áñez anunciou que estaria disposta a assumir provisoriamente a presidência do país, seguindo a ordem de sucessão para convocar novas eleições de acordo com a linha de sucessão constitucional do país.

Assumir oficialmente a presidência do Senado exige os votos da maioria nas mãos do Movimento para o Socialismo, antes de convocar uma sessão bicameral na qual ele juraria à liderança provisória e transitória do Estado.

Ascensão ao cargo

Em 12 de novembro de 2019, em uma breve sessão legislativa sem quórum, Áñez proclamou-se presidente interina da Bolívia, alegando sucessão constitucional, com base em uma decisão do mesmo dia do Tribunal Constitucional em favor da imediata sucessão constitucional, sem a necessidade de recorrer a qualquer lei ou resolução do Legislativo. Áñez obteve o voto favorável dos oponentes, um terço do parlamento, enquanto o Movimento Socialista não participou da votação rejeitando a sucessão.

Depois de seu juramento, Áñez foi ao Palácio Quemado, acompanhada por uma Bíblia, depois cantando o hino nacional. Já no palácio, ela fez declarações da varanda da sede do governo, carregando a banda presidencial. Logo após a sua posse, o Tribunal Constitucional Plurinacional reconheceu Áñez como presidente constitucional da Bolívia, em oposição a uma suposta "auto-proclamação" de sua parte, que indicou que "o funcionamento do órgão executivo de maneira integral não deve ser suspenso, porque a próxima na sucessão assume de facto a presidência". Dessa forma, ela se tornou a segunda mulher chefe de estado na história boliviana, depois de Lidia Gueiler Tejada.

Em 13 de novembro, a ex-presidente do Senado boliviano Adriana Salvatierra ignorou a proclamação de Áñez como presidente e disse que ainda estava no cargo de presidente da câmara alta, apesar de ter renunciado depois de estar sob pressão de grupos da oposição para fazê-lo, renuncia que não foi tomada pelo Senado para que, segundo ela, se tornasse eficaz.

Mais tarde, em 20 de novembro, a bancada das duas câmaras do Movimento ao Socialismo (MAS) reconheceu a afirmação de Jeanine Áñez em um comunicado, afirmando:

Preparativos eleitorais
Em 20 de novembro de 2019, o governo interino apresentou um projeto de lei para abrir caminho para novas eleições. A lei apresentada pelo governo de Áñez diz que as eleições serão realizadas em 120 dias após a nomeação das novas autoridades eleitorais, mesmo que deve ser escolhido em no máximo 20 dias. Uma vez em seus cargos, os membros do Supremo Tribunal Eleitoral terão 48 horas para divulgar a data das eleições. A lei também afirma que pelo menos dois dos membros devem ser indígenas e três deles mulheres.

Após o debate nas duas câmaras da lei, foi acordado por unanimidade cancelar as eleições de 20 de outubro e a nomeação de um novo conselho eleitoral nos 15 dias seguintes à sua aprovação, abrindo caminho para uma nova votação.

O projeto aprovado em conjunto pelo MAS e legisladores anti-Morales, foi aprovado em 23 de novembro, também proibindo Morales de participar das novas eleições. Em troca, o governo de Áñez concordou em retirar as forças armadas de todas as áreas de protesto, revogando seu decreto que concede imunidade ao exército contra processos criminais, libera manifestantes pró-Morales presos, protege legisladores e líderes sociais de ataques e oferece compensação às famílias dos mortos durante a crise. Ela aceitou tudo isso pouco depois.

Em entrevista publicada pelo jornal boliviano Página Siete, Añez rejeitou a possibilidade de se apresentar como candidata nas eleições presidenciais a serem realizadas nos próximos meses. Mais tarde, o ministro interino da presidência, Yerko Núñez, afirmou oficialmente que Áñez rejeitou a possibilidade de concorrer nas eleições. Em 20 de dezembro, doze membros, seis titulares e seis suplentes do Supremo Tribunal Eleitoral foram empossados.

Em 31 de dezembro de 2019, seu governo emitiu à Assembleia Legislativa Plurinacional do país para aprovação um projeto que estabelece o debate público e obrigatório entre os candidatos à presidência e vice-presidência no âmbito do processo pré-eleitoral. O projeto, que modifica a Lei 026 do Regime Eleitoral Boliviano, também prevê que os debates sejam transmitidos de maneira obrigatória e vividos pela mídia estatal.

Gabinete

Em 13 de novembro, ela nomeou onze dos vinte ministros que compõem o gabinete do governo do Estado Plurinacional da Bolívia. Áñez, que tem controle sobre a polícia e as forças armadas como presidente, também fez modificações na liderança militar do país.

Reconhecimento internacional
Os Estados Unidos reconheceram a presidência de Áñez em 13 de novembro de 2019, mostrando seu interesse em trabalhar com seu governo para organizar eleições no país. O mesmo aconteceu com o Brasil, onde seu presidente Jair Bolsonaro parabenizou Áñez por sua suposição: que ele descreveu como constitucional, enfatizou a necessidade de realizar eleições na Bolívia. Da mesma forma, o Reino Unido disse: "Congratulamo-nos com a nomeação de Jeanine Áñez e sua declaração de convocação às eleições em breve" e instando os partidos políticos a apoiar esforços calmos na Bolívia e a realizar eleições presidenciais. Da mesma forma, a Colômbia, por meio de sua chancelaria, mostrou seu reconhecimento a Áñez como presidente, no mesmo dia 13 de novembro. A embaixadora mexicana na Bolívia afirmou que seu país — que deu asilo a Evo Morales e ex-funcionários do governo — não reconhece Áñez como presidente boliviano. A Rússia, apesar de reconhecer a presidência interina de Áñez, indicou que isso não deveria ser necessariamente considerado um processo legítimo, mas garantiu que o único poder de legitimidade seria aquele concedido após a convocação de novas eleições. A Argentina decidiu esperar até que a Assembleia Legislativa daquele país (com a maioria do Movimento ao Socialismo, Morales) conceder essa investidura, embora tenha sido expresso que o presidente Mauricio Macri considera Áñez como uma "referência de autoridade".

Imagem pública
Uma pesquisa da Universidade Maior de San Andrés conduziu 557 236 pessoas, mostrando que 56% dos entrevistados reconheceram o governo de Áñez como "legal e legítimo". Outra pesquisa de Página Siete localizou a aceitação da presidência de Áñez 41%.

Política exterior
O governo de Jeanine Añez culpou os estrangeiros por provocar confrontos violentos durante mais de um mês de violência pós-eleitoral na Bolívia que deixou dezenas de mortos. A polícia prendeu um cidadão argentino na província oriental de Santa Cruz de la Sierra, um ex-membro das Forças Armadas Revolucionárias da Colômbia (FARC).

A Bolívia suspendeu relações diplomáticas com Cuba em 24 de janeiro de 2020, depois de acusar a ilha de afetar sistematicamente o relacionamento bilateral com base no respeito mútuo, nos princípios de não interferência nos assuntos internos, na autodeterminação dos povos e na igualdade soberana dos Estados, mas o governo de Áñez reiterou a disposição do governo boliviano de manter relações cordiais.

Ela decide romper as relações diplomáticas com a Venezuela e Cuba. Ela teve o embaixador mexicano na Bolívia, o encarregado de negócios espanhol na Bolívia e o cônsul espanhol declararam persona non grata, acusando a Espanha e o México de terem protegido antigos próximos de Evo Morales, que seu governo estava procurando prender. As embaixadas bolivianas no Irã e na Nicarágua foram fechadas, oficialmente para economizar dinheiro.

Em janeiro de 2020, o governo boliviano apoiou a reeleição de Luis Almagro como chefe da Organização dos Estados Americanos (OEA).

Política interior
Seu governo adotou uma política favorável aos interesses do agronegócio, liberalizando as exportações de produtos agroindustriais a partir de janeiro de 2020 e promovendo o desmatamento florestal. Um decreto presidencial adotado em maio de 2020 autorizou a entrada de várias sementes transgênicas no país. Além disso, o governo autorizou um aumento nas taxas de juros bancárias e reduziu a taxa de impostos para grandes empresas. Em junho, o governo interino ofereceu novas terras ao setor agro-exportador e, em resposta às conseqüências econômicas causadas pela pandemia de Covid-19, levantou US$ 600 milhões de fundos públicos para pagar as dívidas de grandes empresas privadas (um dos principais beneficiários é o Ministro da Economia Branko Marinkovic).

Entretanto, o desejo do governo de privatizar grandes empresas encontrou resistência por parte do Senado. O plano de devolver as ações da empresa pública de eletricidade Elfec (nacionalizada em 2010) a um antigo acionista privado, a Cooperativa de Teléfonos de Cochabamba, levou a tensões dentro do próprio governo e à renúncia de três ministros.

Em poucos meses, os gastos do Estado boliviano com a importação de armas para equipar a polícia aumentaram 18 vezes em comparação com 2019.

Posições políticas
Áñez se descreve como uma conservadora religiosa de direita e criticou Evo Morales.

Serviços prisionais
No início de 2019, Áñez solicitou uma investigação sobre os guardas da prisão de Beni depois de falar com as vítimas de estupro e abuso dos guardas. Seu objetivo era estabelecer um precedente para a introdução de nova legislação que aguarda aprovação.

Religião
Ela se descreve como cristã e levantou uma grande Bíblia enquanto se declara presidente interina. O Guardian descreveu isso como uma "repreensão explícita" por Morales, que tem uma história tensa com a Igreja Católica e manifestou apoio às tradições religiosas indígenas. Sob Morales, uma nova constituição foi aprovada por referendo concedendo ao cristianismo o mesmo status que outras religiões. Uma pesquisa de 2018 descobriu que 70% dos bolivianos se identificavam como católicos, 17,2% como protestantes de alguma forma e 9,3% não eram religiosos. O analista político Carlos Cordero afirma que "ela é crente, mas não usa sua religiosidade politicamente, ela a expressa, ela a vive".

Controvérsias

Acusação de racismo
Cerca de 41% da população da Bolívia se identifica como indígena e a população freqüentemente encontra discriminação em relação ao seu status social na Bolívia, principalmente relacionado à pobreza e etnia. Após a eleição em 2006 de Evo Morales, o primeiro presidente indígena da Bolívia, a polarização entre povos indígenas e outros aumentou, à medida que o sistema político da Bolívia passou da política da esquerda para a direita para a política urbana-indígena.

Por meio das redes sociais, Áñez fez comentários sobre povos indígenas que foram descritos como "racistas" pelo The Guardian, "anti-indígenas" pela Agence France-Press, e "provocativos" pelo The New York Times. No Twitter, Áñez chamou a celebração do Ano Novo do povo aimará de "satânica" e disse que "ninguém pode substituir Deus", e sugeriu que os nativos não eram genuínos usando sapatos. Mais tarde, diria "vi alguns tweets que nunca escrevi e que já dissemos que eram falsos" e que ele nunca fez "más intenções".

Como presidente interina, Áñez declarou que manteria a wiphala, bandeira das comunidades indígenas bolivianas, como bandeira co-oficial da Bolívia, como ela esteve sob Morales, afirmando que estava comprometida com a tarefa fundamental de "destacar a unidade da "nação plural e diversificada" da Bolívia ". Além da whipala, o patujú é exibido com destaque. O patujú é um símbolo dos povos indígenas orientais da Bolívia e Santa Cruz, a maior cidade da Bolívia. Essa bandeira também foi adotada pela oposição indígena a Morales durante os protestos do TIPNIS. Em 26 de novembro de 2019, representantes da comunidade indígena concederam a ele um poncho vermelho (uma roupa andina tradicional usada pelos líderes comunitários) em a investidura de Rafael Quispe como diretor do Fundo para o Desenvolvimento Indígena.

Prisão

Na madrugada de 13 de março de 2021, Jeanine Áñez foi presa, sob a acusação de conspiração, sedição e terrorismo durante o período que se seguiu à renúncia de Evo Morales em 2019, em um suposto golpe de Estado. Jeanine pediu através de cartas à Organização dos Estados Americanos (OEA) e à União Europeia que acompanhassem de perto a sua prisão, que acusou de ilegal, abuso e perseguição política. Também foram presos dois ministros do seu governo, o ex-chefe da Justiça, Álvaro Coímbra e o da Energia, Rodrigo Guzmán. Em novembro de 2020, quando passou o cargo de presidente para Luis Arce, Áñez teria tentado fugir para o Brasil, mas foi impedida.

Evo Morales manifestou-se, pedindo "justiça e verdade para as 36 vítimas fatais, os mais de 800 feridos e mais de 1 500 detidos ilegalmente no golpe de Estado", punindo os "autores e cúmplices da ditadura que abalou a economia e ameaçou a vida e a democracia na Bolívia". Os ex-presidentes Carlos Mesa e Jorge Quiroga manifestaram-se contra as prisões e as qualificaram como "um processo de perseguição política pior do que nas ditaduras" e que "começa uma caça à vingança". Já o presidente da Bolívia Luis Arce, que assumiu o cargo em novembro em 2020, sucedendo a Ágñez, respondeu que Quiroga "é um aprendiz de tirano".

A prisão prolongada de Áñez na Penitenciária Feminina de Miraflores foi denunciada como abusiva por sua família e observou-se um declínio acentuado em sua saúde física e mental. Após quase quinze meses de prisão preventiva, o Tribunal de Primeira Instância de La Paz considerou Áñez culpada de violação de deveres e resoluções contrárias à Constituição, sentenciando-a a dez anos de prisão.

Vida pessoal
Divorciada do advogado e ex-prefeito de Trinidad Tadeo Rivera Bruckner, com quem teve dois filhos, Áñez é casada com o político colombiano Héctor Hernando Hincapié Carvajal, membro do Partido Conservador da Colômbia.

Ligações externas

Mulheres da Bolívia na política
Presidentes da Bolívia
Presidentes do Senado da Bolívia
Advogados da Bolívia
Mulheres chefes de governo


Hello! I have created introductory VIDEOS about my services in details. In a nutshell, I am a writer and an editor. Above all, I understand your needs. You want to be seen as an authority and a trusted resource for potential customers who are searching for the products or services you provide. You understand the importance of high-quality content that appeals to your ideal customer, but you don't have the time or ability to create it. That's why I am here-to create concise, informative content that resonates with your audience. Be it: Content writing Technical writing Product description/reviews Business writing I do it to your satisfaction. In fact, have a look at my videos to understand how I do it. You need an editor who has been editing for years and knows what to look for. One who can do developmental as well as copy editing without missing any grammatical error (more on this in my video). That's me. Check out my videos and portfolio-I am ready to work with you. Are you?
I write on health articles such as reviews on supplements and multivitamin. It is a humbling experience.
I have managed to be a monthly writer at this awesome site. The work involves creating content that is SEO optimized and attractive to the 1M viewers.
I was in charge of coming up with topics as well as writing on the latest business trends as well as on information that would benefit business people. This was especially about online businesses such as eCommerce.
I was in charge of content production . This job gave me the skill of being detailed but specific and to the point.
This certificate offered a great insight as to why some content make it big and others never see the light of viewership. This is the knowledge I have applied in all my work.
This certificate has given me knowledge of how to package any form of information. Be it news, blogs...whatever the information, into the best format to meet the objectives.


text:
Guernsey Power Station is a planned gas-fired power plant under construction in Guernsey County, Ohio south of Byesville. When completed in 2022, it is planned to generate 1.875 GW of power, enough to power 1.5 million homes. When completed it will be the 69th largest power station in the United States.

History
Regulatory filings were originally submitted in 2016 to take advantage of decreasing natural gas costs, but construction was delayed until 3rd quarter 2019. The power plant sits atop a former coal mine, and was selected in part due to its proximity to the Rockies Express East natural gas pipeline running from Ohio to Missouri.

Construction is expected to create up to 1,000 jobs. Taxes paid during construction will also pay for new buildings at Meadowbrook High School.  In June 2020, local union construction workers protested the use of out-of-state non-union workers on the project instead of the completely local workforce promised. A company spokesperson denied the allegations.

After construction is complete, the plant is expected to provide about 30 full-time jobs, according to a local newspaper's interview with a Caithness Energy official.

While the first unit was scheduled to go online in September 2022, initial start up activity was still underway as of December 2022.

Operation
GPS will receive its natural gas from the Utica and Marcellus shale formations in eastern Ohio.

Power will be generated by three advanced combined-cycle GE 7HA.02 gas turbines. Water for operation will be provided by Byesville which will then process the wastewater.

References

Buildings and structures in Guernsey County, Ohio
Natural gas-fired power stations in Ohio
Guernsey County, Ohio
2019 establishments in Ohio

redpajama_set_name: RedPajamaWikipedia


text:
/*
    Smallest Multiple

    2520 is the smallest number that can be divided by each of the numbers from 1 to 10 without any remainder.

    What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?
*/
#include <stdio.h>

int main(void)
{
    long count, product;

    product = 1;

    for (count = 2; count <= 20; count++)
    {
        printf("%li - ", count);
        if (product % count)
        {
            product = product * count;
            printf("ok - %li\n", product);
        }
        else
            printf("fail\n");
    }

    printf("Smallest Multiple: %li\n", product/24);

    return 0;
}

// Another Beautiful Algorithm
/* Credits to lassevk

Python:
i = 1
for k in (range(1, 21)):
    if i % k > 0:
        for j in range(1, 21):
            if (i*j) % k == 0:
                i *= j
                break
print i

*/

redpajama_set_name: RedPajamaGithub


text:
Tailor Soldier Spy: Black Lightning 2x05
Television Analysis Gaming
The Last Of Us Finally Gets It
Television Analysis Entertainment
The White Lotus Is Drama TV For Survivor Fans
How Love Is Blind One-Upped The TV Romance Formula
'On Cinema,' The Internet's Avant-Garde Comedy Masterpiece
House of the Dragon Failed Alicent Hightower
House of the Dragon Is Winning This Thrones Hater Over
Better Call Saul Concludes With Sorrowful, Quiet Reflection
Tailor Soldier Spy: Black Lightning 2×05
Hello and welcome back to Black Lightning season 2 after one of those weird one-week hiatuses that networks sometimes do!
Last episode, Lynn was struggling to navigate her pure heart clashing against Dr. Jace's conscience-less one at the ASA; Anissa was vigilante-ing and Thunder and Black Lightning diffused several bombs at a neighborhood clinic; and Jen was imploding under the pressure of house arrest to the point where she finally responded to Kahlil's messages and met him at Garfield.
This week, our fam is still pretty much in the same boat as they were in the previous episode, but with the sudden devastating addition of Gambi's supposed death by assassins (presumably sent by Tobias).
going out in a blaze of glory
The general rule for things like this is that if there's no body (which in this case there isn't), the character isn't dead (see also: Delphine Cormier). But for now, we're all operating under the assumption that Gambi's dead, which makes for some heartbreaking crying from the entire Pierce family, including Jefferson who at first won't believe Gambi's gone. It's so sad, y'all.
when ur faves cry, u cry
In her grief, Anissa indulges her central character flaw, aka using Grace/sex with Grace as an emotional crutch. When she shows up at Grace's apartment, she has all kinds of claims about how she now knows what's important and Grace is the only person besides her family that she cares about, but in the morning when Grace asks Anissa to look her in the eyes and promise she won't hurt her again, Anissa can't do it. Really Anissa? Please stop with this nonsense. I love our bulletproof lesbian but given the way she treats her girlfriends, I would not date her.
Grace, for her part, looks like she's about to turn into some kind of supernatural being with creepy-crawly skin, which is also something that's happening to some other Freeland residents such as a skittish boyfriend of one of Anissa's pregnant patients who turns up dead at the clinic (did I mention Anissa now works there because she can do everything?), and a cop who pulls her over as she drives out to check on said pregnant patient. CREEPY.
but this is sexy tho
Jen, meanwhile, has some particularly great moments this episode, the first being her witty one-sided banter with her online learning program. We also get to see the conversation she and Kahlil had at Garfield, which consisted of both of them quietly lamenting their circumstances. When Kahlil asks her then, and again later in the episode, of she thinks they can fix whatever they have together, Jen is a true Strong Female Character and basically is like, no dude, we get each other on an important level but we cannot be a thing anymore. (Anyway that's what her facial expression said, I'm pretty sure).
Lynn aka perpetual Black Lightning MVP finds herself tricked into believing Dr. Jace has used Lynn's amazing brain-power-math to crack a code that will save all the pod kids, but it turns out it will only save half of them and the rest of them die. This is not great for Lynn's giant heart and after slapping Dr. Jace's smug face and having her dragged off by security, she is left alone to deal with the mess and be extra sad because yeah, Gambi's gone too. And because she's Lynn, she's also doing all the emotional labor on behalf of Jefferson who is in denial about Gambi until the end of the episode. Someone give this woman a trophy and a massage.
Tobias (I guess we have to talk about him too) is busy being horrible as usual, relentlessly intimidating Kahlil and also blackmailing a councilman into helping advance his agenda to take over Freeland and ultimately kill Black Lightning. So, great. That guy sucks.
the only option for a last image: Gambi & Jefferson
That's it for this week, friends! Do you think Gambi is really dead? Do you think Anissa needs to get her lesbian act together? Do you think Jen will be ok?!?!?! Come back next week and maybe we'll find out!
Images courtesy of The CW
Sarah divides her mental energy between analyzing/crushing on queer characters, training for marathons and sometimes on her day job.
In this article:episode review, episode recap, Featured, Black Lightning, Black Lightning Season 2
Welcome back to our continuing coverage of HBO's new television series, The Last of Us, starring Pedro Pascal and Bella Ramsey. After a solid...
Caroline3 days ago
Welcome all to the first of the Fandomentals' articles covering the new show, The Last of Us, starring Pedro Pascal and Bella Ramsey. Some...
CarolineJanuary 19, 2023
New Amsterdam's Mid-Season Premiere Sparks A Revolution
Following a wild mid-season finale, New Amsterdam is back with the start of the back half of its fourth season. With the show now...
KathrynJanuary 4, 2022
New Amsterdam's Mid-Season Finale Has Us Wondering What's Next
To put it plainly, New Amsterdam's mid-season finale was a rollercoaster. The 10th episode of the show's fourth season solidified what we all know:...
KathrynNovember 23, 2021

redpajama_set_name: RedPajamaCommonCrawl


Bring playful, modern shapes into your closet in sophisticated jewelry-like finishes. The geometric patterns inside create openings for scarf and accessory storage, and also provide visual interest when the hanger is not in use.
DESIGNED BY LAURA CARWARDINE FOR UMBRA: ?I love geometric patterns, so I designed a product that is all about patterns and shapes, including the integral hook at the top; I wanted it to be in a warm metal finish, to elevate the experience of organizing scarves and accessories?
COMPACT STORAGE: One single hanger allows you to store and display your scarves and accessories so that they sit compactly while being easy to access. Pendant measures 18 x 16 x ¼ inches.
This scarf organizer is the best I've owned to date. Not only is the design great, but it's durable and can handle as many scarves as you need!
awsome! work great and it is well made.
This is great! A lot bigger than I thought it would be, but hey, it does the job and it's so cute!
AMAZING! what did i do before I had this thing?
How have I lived without this?! Perfection!!!
I ADORE this gorgeous little gem of organization! I bought the copper color and it's lovely. No stags, I checked for that first! This could have a number of uses really, my wheels are turning here. I hung a few scarves on it hoping to get a nice photo to share, but then I realized I have the rest scattered all over the place because I don't have a central scarf spot, and couldn't find my cute ones. So annoying! That changes now. It's a very generous size and is designed to be placed most anywhere you want it. Excellent gift idea!!!!!
I got it for my boyfriends mom for Christmas and she thought it was really cute! It's a good size but not huge. The finish of the metal is a very pretty copper/rose gold.
This is a cute and smart scarf organizer. The quality is great and the color is beautiful. I'd buy again from this seller.
Very sturdy organizer, much more so than I expected for the price! Looks really cute and helps organize your scarfs in a very compact manner. Would recommend!


text:
Britain Unlimited
250 Great Britons
The life and works of 250 Great Britons
A to D list
E to L list
M to S list
T to Z list
Ages at Death
Sport/Theatre
English Midlands
Overseas Births
Romans to 599 AD
Tate Gallery
Curiosities from Britain Unlimited
Biography of Henry Bessemer
Sir Henry Bessemer was an industrialist who perfected the "Bessemer Process" of improving the quality of iron.
When and Where was Henry Bessemer Born?
19th January 1813, Charlton, Hertfordshire, England.
Family Background:
Henry Bessemer was the son of an Engineer and type founder.
He left the local school to enter his father's workshop.
Timeline of Henry Bessemer:
1830: Bessemer set up his own company in London to produce small castings and art works.
1834: He marries the daughter of his best friend Anne Allen.
1840: His early years were concerned with developing a number of inventions and it was his process of forming a gold paint from brass additives that gained him his wealth and standing in society. With the profits of this trade he set up a larger factory at St. Pancras in London. Much of late Victorian engineering used gilding as a decoration to represent the power and glory of the British Empire at the the time.
1854: During the Crimean War Bessemer invented a new type of artillery shell but the British Generals told him that the cast iron cannons of the time where not strong enough to take the forces involved in its firing and so he set about making iron stronger.
1855: In October he took out a patent on his process for making cast iron more malleable by introducing air into the liquid metal which greatly reduced its carbon content.
1859: He established a major steel works in Sheffield making that area renowned in later years for its quality products in steel. Amongst other things he manufactured rails for the new railways and locomotives and bridge parts.
1877: Bessemer was elected as a Fellow of the Royal Society of London.
1879: He was Knighted by Queen Victoria. His ideas in steel manufacturing weren't universally popular but Andrew Carnegie in the USA learnt much from the method and became one of the world's richest men in the process.
When and Where did he Die?
15th March 1898, London.
1834 to the daughter of his best friend, Miss Anne Allen.
Site of Grave:
Norwood Cemetery, Norwood, London, England.
Places of Interest:
Search Britain Unlimited
Additional Names I Prime Ministers I Ages at Death of Characters I About Us I Cookies I Disclaimers I Privacy Policy
Britain Unlimited has been published in the United Kingdom since 2000 by Striding2 Publishing
This website does not collect any personal data. Cookies are merely used to track which pages are most popular. more information


text:
// Copyright 2011 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.

package com.google.appengine.tools.pipeline.impl;

import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.taskqueue.TaskAlreadyExistsException;
import com.google.appengine.tools.pipeline.FutureList;
import com.google.appengine.tools.pipeline.ImmediateValue;
import com.google.appengine.tools.pipeline.Job;
import com.google.appengine.tools.pipeline.JobSetting;
import com.google.appengine.tools.pipeline.NoSuchObjectException;
import com.google.appengine.tools.pipeline.OrphanedObjectException;
import com.google.appengine.tools.pipeline.Value;
import com.google.appengine.tools.pipeline.impl.backend.AppEngineBackEnd;
import com.google.appengine.tools.pipeline.impl.backend.PipelineBackEnd;
import com.google.appengine.tools.pipeline.impl.backend.UpdateSpec;
import com.google.appengine.tools.pipeline.impl.backend.UpdateSpec.Group;
import com.google.appengine.tools.pipeline.impl.model.Barrier;
import com.google.appengine.tools.pipeline.impl.model.JobInstanceRecord;
import com.google.appengine.tools.pipeline.impl.model.JobRecord;
import com.google.appengine.tools.pipeline.impl.model.JobRecord.State;
import com.google.appengine.tools.pipeline.impl.model.PipelineObjects;
import com.google.appengine.tools.pipeline.impl.model.Slot;
import com.google.appengine.tools.pipeline.impl.model.SlotDescriptor;
import com.google.appengine.tools.pipeline.impl.servlets.PipelineServlet;
import com.google.appengine.tools.pipeline.impl.tasks.DeletePipelineTask;
import com.google.appengine.tools.pipeline.impl.tasks.FanoutTask;
import com.google.appengine.tools.pipeline.impl.tasks.FinalizeJobTask;
import com.google.appengine.tools.pipeline.impl.tasks.HandleSlotFilledTask;
import com.google.appengine.tools.pipeline.impl.tasks.RunJobTask;
import com.google.appengine.tools.pipeline.impl.tasks.Task;
import com.google.appengine.tools.pipeline.impl.util.GUIDGenerator;
import com.google.appengine.tools.pipeline.impl.util.StringUtils;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * The central hub of the Pipeline implementation.
 *
 * @author rudominer@google.com (Mitch Rudominer)
 *
 */
public class PipelineManager {

  private static final Logger logger = Logger.getLogger(PipelineManager.class.getName());

  private static PipelineBackEnd backEnd = new AppEngineBackEnd();

  /**
   * Creates and launches a new Pipeline
   *

   * Creates the root Job with its associated Barriers and Slots and saves them
   * to the data store. All slots in the root job are immediately filled with
   * the values of the parameters to this method, and
   * {@link HandleSlotFilledTask HandleSlotFilledTasks} are enqueued for each of
   * the filled slots.
   *
   * @param settings JobSettings used to control details of the Pipeline
   * @param jobInstance A user-supplied instance of {@link Job} that will serve
   *        as the root job of the Pipeline.
   * @param params Arguments to the root job's run() method
   * @return The pipelineID of the newly created pipeline, also known as the
   *         rootJobID.
   */
  public static String startNewPipeline(
      JobSetting[] settings, Job<?> jobInstance, Object... params) {
    UpdateSpec updateSpec = new UpdateSpec(null);
    String graphGUID = null; // The root job graph doesn't have a GUID
    JobRecord parentJobKey = null; // The root job graph doesn't have a parent
    // Create the root Job and its associated Barriers and Slots
    // Create HandleSlotFilledTasks for the input parameters.
    JobRecord jobRecord =
        registerNewJobRecord(updateSpec, settings, parentJobKey, graphGUID, jobInstance, params);
    updateSpec.setRootJobKey(jobRecord.getRootJobKey());
    // Save the Pipeline model objects and enqueue the tasks that start the
    // Pipeline executing.
    backEnd.save(updateSpec);
    return jobRecord.getKey().getName();
  }

  /**
   * Creates a new JobRecord with its associated Barriers and Slots. Also
   * creates new {@link HandleSlotFilledTask} for any inputs to the Job that are
   * immediately specified. Registers all newly created objects with the
   * provided {@code UpdateSpec} for later saving.
   *

   * This method is called when starting a new Pipeline, in which case it is
   * used to create the root job, and it is called from within the run() method
   * of a generator job in order to create a child job.
   *
   * @param updateSpec The {@code UpdateSpec} with which to register all newly
   *        created objects. All objects will be added to the
   *        {@link UpdateSpec#getNonTransactionalGroup() non-transaction group}
   *        of the {@code UpdateSpec}.
   * @param settings Array of {@code JobSettings} to apply to the newly created
   *        JobRecord.
   * @param generatorJob The generator job or {@code null} if we are creating
   *        the root job.
   * @param graphGUID The GUID of the child graph to which the new Job belongs
   *        or {@code null} if we are creating the root job.
   * @param jobInstance The user-supplied instance of {@code Job} that
   *        implements the Job that the newly created JobRecord represents.
   * @param params The arguments to be passed to the run() method of the newly
   *        created Job. Each argument may be an actual value or it may be an
   *        object of type {@link Value} representing either an
   *        {@link ImmediateValue} or a
   *        {@link com.google.appengine.tools.pipeline.FutureValue FutureValue}.
   *        For each element of the array, if the Object is not of type
   *        {@link Value} then it is interpreted as an {@link ImmediateValue}
   *        with the given Object as its value.
   * @return The newly constructed JobRecord.
   */
  @SuppressWarnings("unchecked")
  public static JobRecord registerNewJobRecord(UpdateSpec updateSpec, JobSetting[] settings,
      JobRecord generatorJob, String graphGUID, Job<?> jobInstance, Object[] params) {
    Key rootKey = (null == generatorJob ? null : generatorJob.getRootJobKey());
    Key generatorKey = (null == generatorJob ? null : generatorJob.getKey());

    JobRecord jobRecord = new JobRecord(rootKey, generatorKey, graphGUID, jobInstance, settings);

    updateSpec.setRootJobKey(jobRecord.getRootJobKey());

    // Add slots to the RunBarrier corresponding to the input parameters
    for (Object param : params) {
      Value<?> value;
      if (null != param && param instanceof Value<?>) {
        value = (Value<?>) param;
      } else {
        value = new ImmediateValue<Object>(param);
      }
      registerSlotsWithBarrier(updateSpec, value, jobRecord.getRootJobKey(), generatorKey,
          graphGUID, jobRecord.getRunBarrierInflated());
    }

    if (0 == jobRecord.getRunBarrierInflated().getWaitingOnKeys().size()) {
      // If the run barrier is not waiting on anything, add a phantom filled
      // slot in order to trigger a HandleSlotFilledTask in order to trigger
      // a RunJobTask.
      Slot slot = new Slot(jobRecord.getRootJobKey(), generatorKey, graphGUID);
      jobRecord.getRunBarrierInflated().addPhantomArgumentSlot(slot);
      registerSlotFilled(updateSpec, slot, null);
    }

    // Register the newly created objects with the UpdateSpec.
    // The slots in the run Barrier have already been registered
    // and the finalize Barrier doesn't have any slots yet.
    // Any HandleSlotFilledTasks have also been registered already.
    Group updateGroup = updateSpec.getNonTransactionalGroup();
    updateGroup.includeBarrier(jobRecord.getRunBarrierInflated());
    updateGroup.includeBarrier(jobRecord.getFinalizeBarrierInflated());
    updateGroup.includeSlot(jobRecord.getOutputSlotInflated());
    updateGroup.includeJob(jobRecord);
    updateGroup.includeJobInstanceRecord(jobRecord.getJobInstanceInflated());

    return jobRecord;
  }

  /**
   * Given a {@code Value} and a {@code Barrier}, we add one or more slots to
   * the waitingFor list of the barrier corresponding to the {@code Value}. We
   * also create {@link HandleSlotFilledTask HandleSlotFilledTasks} for all
   * filled slots. We register all newly created Slots and Tasks with the given
   * {@code UpdateSpec}.
   *

   * If the value is an {@code ImmediateValue} we make a new slot, register it
   * as filled and add it. If the value is a {@code FutureValue} we add the slot
   * wrapped by the {@code FutreValueImpl}. If the value is a {@code FutureList}
   * then we add multiple slots, one for each {@code Value} in the List wrapped
   * by the {@code FutureList}. This process is not recursive because we do not
   * currently support {@code FutureLists} of {@code FutureLists}.
   *
   * @param updateSpec All newly created Slots will be added to the
   *        {@link UpdateSpec#getNonTransactionalGroup() non-transactional
   *        group} of the updateSpec. All {@link HandleSlotFilledTask
   *        HandleSlotFilledTasks} created will be added to the
   *        {@link UpdateSpec#getFinalTransaction() final transaction}. Note
   *        that {@code barrier} will not be added to updateSpec. That must be
   *        done by the caller.
   * @param value A {@code Value}. {@code Null} is interpreted as an
   *        {@code ImmediateValue} with a value of {@code Null}.
   * @param rootJobKey The rootJobKey of the Pipeline in which the given Barrier
   *        lives.
   * @param generatorJobKey The key of the generator Job of the local graph in
   *        which the given barrier lives, or {@code null} if the barrier lives
   *        in the root Job graph.
   * @param graphGUID The GUID of the local graph in which the barrier lives, or
   *        {@code null} if the barrier lives in the root Job graph.
   * @param barrier The barrier to which we will add the slots
   */
  private static void registerSlotsWithBarrier(UpdateSpec updateSpec, Value<?> value,
      Key rootJobKey, Key generatorJobKey, String graphGUID, Barrier barrier) {
    if (null == value || value instanceof ImmediateValue<?>) {
      Object concreteValue = null;
      if (null != value) {
        ImmediateValue<?> iv = (ImmediateValue<?>) value;
        concreteValue = iv.getValue();
      }
      Slot slot = new Slot(rootJobKey, generatorJobKey, graphGUID);
      registerSlotFilled(updateSpec, slot, concreteValue);
      barrier.addRegularArgumentSlot(slot);
    } else if (value instanceof FutureValueImpl<?>) {
      FutureValueImpl<?> futureValue = (FutureValueImpl<?>) value;
      Slot slot = futureValue.getSlot();
      barrier.addRegularArgumentSlot(slot);
      updateSpec.getNonTransactionalGroup().includeSlot(slot);
    } else if (value instanceof FutureList<?>) {
      FutureList<?> futureList = (FutureList<?>) value;
      List<Slot> slotList = new ArrayList<Slot>(futureList.getListOfValues().size());
      // The dummyListSlot is a marker slot that indicates that the
      // next group of slots forms a single list argument.
      Slot dummyListSlot = new Slot(rootJobKey, generatorJobKey, graphGUID);
      registerSlotFilled(updateSpec, dummyListSlot, null);
      for (Value<?> valFromList : futureList.getListOfValues()) {
        Slot slot = null;
        if (valFromList instanceof ImmediateValue<?>) {
          ImmediateValue<?> ivFromList = (ImmediateValue<?>) valFromList;
          slot = new Slot(rootJobKey, generatorJobKey, graphGUID);
          registerSlotFilled(updateSpec, slot, ivFromList.getValue());
        } else if (valFromList instanceof FutureValueImpl<?>) {
          FutureValueImpl<?> futureValFromList = (FutureValueImpl<?>) valFromList;
          slot = futureValFromList.getSlot();
        } else if (value instanceof FutureList<?>) {
          throw new IllegalArgumentException(
              "The Pipeline framework does not currently support FutureLists of FutureLists");
        } else {
          throwUnrecognizedValueException(valFromList);
        }
        slotList.add(slot);
        updateSpec.getNonTransactionalGroup().includeSlot(slot);
      }
      barrier.addListArgumentSlots(dummyListSlot, slotList);
    } else {
      throwUnrecognizedValueException(value);
    }
  }

  private static void throwUnrecognizedValueException(Value<?> value) {
    throw new RuntimeException(
        "Internal logic error: Unrecognized implementation of Value interface: "
        + value.getClass().getName());
  }

  /**
   * Given a Slot and a concrete value with which to fill the slot, we fill the
   * value with the slot and create a new {@link HandleSlotFilledTask} for the
   * newly filled Slot. We register the Slot and the Task with the given
   * UpdateSpec for later saving.
   *
   * @param updateSpec The Slot will be added to the
   *        {@link UpdateSpec#getNonTransactionalGroup() non-transactional
   *        group} of the updateSpec. The new {@link HandleSlotFilledTask} will
   *        be added to the {@link UpdateSpec#getFinalTransaction() final
   *        transaction}.
   * @param slot the Slot to fill
   * @param value the value with which to fill it
   */
  private static void registerSlotFilled(UpdateSpec updateSpec, Slot slot, Object value) {
    slot.fill(value);
    updateSpec.getNonTransactionalGroup().includeSlot(slot);
    updateSpec.getFinalTransaction().registerTask(new HandleSlotFilledTask(slot));
  }

  public static PipelineObjects queryFullPipeline(String rootJobHandle) {
    Key rootJobKey = KeyFactory.createKey(JobRecord.DATA_STORE_KIND, rootJobHandle);
    return backEnd.queryFullPipeline(rootJobKey);
  }

  private static void checkNonEmpty(String s, String name) {
    if (null == s || s.trim().length() == 0) {
      throw new IllegalArgumentException(name + " is empty.");
    }
  }

  /**
   * Retrieves a JobRecord for the specified job handle. The returned instance
   * will be only partially inflated. The run and finalize barriers will not be
   * inflated by the output slot will be.
   *
   * @param jobHandle The handle of a job.
   * @return The corresponding JobRecord
   * @throws NoSuchObjectException If a JobRecord with the given handle cannot
   *         be found in the data store.
   */
  public static JobRecord getJob(String jobHandle) throws NoSuchObjectException {
    checkNonEmpty(jobHandle, "jobHandle");
    Key key = KeyFactory.createKey(JobRecord.DATA_STORE_KIND, jobHandle);
    logger.finest("getJob: " + key.getName());
    return backEnd.queryJob(key, JobRecord.InflationType.FOR_OUTPUT);
  }

  /**
   * Changes the state of the specified job to STOPPED.
   *
   * @param jobHandle The handle of a job
   * @throws NoSuchObjectException If a JobRecord with the given handle cannot
   *         be found in the data store.
   */
  public static void stopJob(String jobHandle) throws NoSuchObjectException {
    checkNonEmpty(jobHandle, "jobHandle");
    Key key = KeyFactory.createKey(JobRecord.DATA_STORE_KIND, jobHandle);
    JobRecord jobRecord = backEnd.queryJob(key, JobRecord.InflationType.NONE);
    jobRecord.setState(JobRecord.State.STOPPED);
    UpdateSpec updateSpec = new UpdateSpec(jobRecord.getRootJobKey());
    updateSpec.getTransaction("stopJob").includeJob(jobRecord);
    backEnd.save(updateSpec);
  }

  /**
   * Delete all data store entities corresponding to the given pipeline.
   *
   * @param pipelineHandle The handle of the pipeline to be deleted
   * @param force If this parameter is not {@code true} then this method will
   *        throw an {@link IllegalStateException} if the specified pipeline is
   *        not in the
   *        {@link com.google.appengine.tools.pipeline.impl.model.JobRecord.State#FINALIZED}
   *        or
   *        {@link com.google.appengine.tools.pipeline.impl.model.JobRecord.State#STOPPED}
   *        state.
   * @param async If this parameter is {@code true} then instead of performing
   *        the delete operation synchronously, this method will enqueue a task
   *        to perform the operation.
   * @throws NoSuchObjectException If there is no Job with the given key.
   * @throws IllegalStateException If {@code force = false} and the specified
   *         pipeline is not in the
   *         {@link com.google.appengine.tools.pipeline.impl.model.JobRecord.State#FINALIZED}
   *         or
   *         {@link com.google.appengine.tools.pipeline.impl.model.JobRecord.State#STOPPED}
   *         state.
   */
  public static void deletePipelineRecords(String pipelineHandle, boolean force, boolean async)
      throws NoSuchObjectException, IllegalStateException {
    checkNonEmpty(pipelineHandle, "pipelineHandle");
    Key key = KeyFactory.createKey(JobRecord.DATA_STORE_KIND, pipelineHandle);
    backEnd.deletePipeline(key, force, async);
  }

  public static void acceptPromisedValue(String promiseHandle, Object value)
      throws NoSuchObjectException, OrphanedObjectException {
    checkNonEmpty(promiseHandle, "promiseHandle");
    Key key = KeyFactory.stringToKey(promiseHandle);
    Slot slot = null;
    // It is possible, though unlikely, that we might be asked to accept a
    // promise before the slot to hold the promise has been saved. We will try 5
    // times, sleeping 1, 2, 4, 8 seconds between attempts.
    for (int i = 0; i < 5; i++) {
      try {
        slot = backEnd.querySlot(key, false);
      } catch (NoSuchObjectException e) {
        try {
          Thread.sleep(((long) Math.pow(2.0, i)) * 1000L);
        } catch (InterruptedException f) {
          // ignore
        }
      }
    }
    if (null == slot) {
      throw new NoSuchObjectException("There is no promise with handle " + promiseHandle);
    }
    Key generatorJobKey = slot.getGeneratorJobKey();
    if (null == generatorJobKey) {
      throw new RuntimeException(
          "Pipeline is fatally corrupted. Slot for promised value has no generatorJobKey: "
          + slot);
    }
    JobRecord generatorJob = backEnd.queryJob(generatorJobKey, JobRecord.InflationType.NONE);
    if (null == generatorJob) {
      throw new RuntimeException("Pipeline is fatally corrupted. "
          + "The generator job for a promised value slot was not found: " + generatorJobKey);
    }
    String childGraphGuid = generatorJob.getChildGraphGuid();
    if (null == childGraphGuid) {
      // The generator job has not been saved with a childGraphGuid yet. This
      // can happen if
      // the promise handle leaked out to an external thread before the job that
      // generated it
      // had finished.
      throw new NoSuchObjectException(
          "The framework is not ready to accept the promised value yet. "
          + "Please try again after the job that generated the promis handle has completed.");
    }
    if (!childGraphGuid.equals(slot.getGraphGuid())) {
      // The slot has been orphaned
      throw new OrphanedObjectException(promiseHandle);
    }
    UpdateSpec updateSpec = new UpdateSpec(slot.getRootJobKey());
    registerSlotFilled(updateSpec, slot, value);
    backEnd.save(updateSpec);
  }

  /**
   * A RuntimeException which, when thrown, causes us to abandon the current
   * task, by returning a 200.
   */
  private static class AbandonTaskException extends RuntimeException {
    private static final long serialVersionUID = 358437646006972459L;
  }

  /**
   * Process an incoming task received from the App Engine task queue.
   *
   * @param task The task to be processed.
   */
  public static void processTask(Task task) {
    logger.finest("Processing task " + task);
    try {
      switch (task.getType()) {
      case RUN_JOB:
          RunJobTask runJobTask = (RunJobTask) task;
          runJob(runJobTask.getJobKey());
          break;
      case HANDLE_SLOT_FILLED:
          HandleSlotFilledTask hsfTask = (HandleSlotFilledTask) task;
          handleSlotFilled(hsfTask.getSlotKey());
          break;
      case FINALIZE_JOB:
          FinalizeJobTask finalizeJobTask = (FinalizeJobTask) task;
          finalizeJob(finalizeJobTask.getJobKey());
          break;
      case FAN_OUT:
          FanoutTask fanoutTask = (FanoutTask) task;
          handleFanoutTaskOrAbandonTask(fanoutTask);
          break;
      case DELETE_PIPELINE:
          DeletePipelineTask deletePipelineTask = (DeletePipelineTask) task;
          try {
            backEnd.deletePipeline(
                deletePipelineTask.getRootJobKey(), deletePipelineTask.shouldForce(), false);
          } catch (Exception e) {
            logger.log(Level.WARNING, "DeletePipeline operation failed.", e);
          }
          break;
      default:
          throw new IllegalArgumentException("Unrecognized task type: " + task.getType());
      }
    } catch (AbandonTaskException ate) {
      // return 200;
    }
  }

  public static PipelineBackEnd getBackEnd() {
    return backEnd;
  }

  @SuppressWarnings("unchecked")
  private static void invokePrivateJobMethod(
      String methodName, Job<?> jobObject, Object... params) {
    Class<?>[] signature = new Class<?>[params.length];
    int i = 0;
    for (Object param : params) {
      signature[i++] = param.getClass();
    }
    invokePrivateJobMethod(methodName, jobObject, signature, params);
  }

  @SuppressWarnings({"unchecked", "rawtypes"})
  private static void invokePrivateJobMethod(String methodName, Job<?> jobObject, Class<
      ?>[] signature, Object... params) {
    Class<Job> jobClass = Job.class;
    try {
      Method method = jobClass.getDeclaredMethod(methodName, signature);
      method.setAccessible(true);
      method.invoke(jobObject, params);
    } catch (NoSuchMethodException e) {
      throw new RuntimeException(e);
    } catch (InvocationTargetException e) {
      throw new RuntimeException(e);
    } catch (IllegalAccessException e) {
      throw new RuntimeException(e);
    }
  }

  // Currently we simply use the first method named "run" that we find.
  // As long as the user follows the rules and declares a single public method
  // named "run" this will be fine.
  // TODO(user) Consider actually looking for a method with matching
  // signature.
  private static Method findAppropriateRunMethod(Class<?> klass, Object... params) {
    Method runMethod = null;
    for (Method method : klass.getMethods()) {
      if ("run".equals(method.getName())) {
        runMethod = method;
        break;
      }
    }
    return runMethod;
  }

  private static void setJobRecord(Job<?> jobObject, JobRecord jobRecord) {
    invokePrivateJobMethod("setJobRecord", jobObject, jobRecord);
  }

  private static void setCurrentRunGuid(Job<?> jobObject, String guid) {
    invokePrivateJobMethod("setCurrentRunGuid", jobObject, guid);
  }

  private static void setUpdateSpec(Job<?> jobObject, UpdateSpec updateSpec) {
    invokePrivateJobMethod("setUpdateSpec", jobObject, updateSpec);
  }

  /**
   * Run the job with the given key.
   *

   * We fetch the {@link JobRecord} from the data store and then fetch its run
   * {@link Barrier} and all of the {@link Slot Slots} in the run
   * {@code Barrier} (which should be filled.) We use the values of the filled
   * {@code Slots} to populate the arguments of the run() method of the
   * {@link Job} instance associated with the job and we invoke the
   * {@code run()} method. We save any generated child job graph and we enqueue
   * a {@link HandleSlotFilledTask} for any slots that are filled immediately.
   *
   * @see "http://goto/java-pipeline-model"
   *
   * @param jobKey
   */
  private static void runJob(Key jobKey) {
    JobRecord jobRecord = null;
    jobRecord = queryJobOrAbandonTask(jobKey, JobRecord.InflationType.FOR_RUN);
    Key rootJobKey = jobRecord.getRootJobKey();
    logger.info("Running pipeline job " + jobKey.getName()
        + "; UI at " + PipelineServlet.makeViewerUrl(rootJobKey, jobKey));
    JobRecord rootJobRecord = jobRecord;
    if (!rootJobKey.equals(jobKey)) {
      rootJobRecord = queryJobOrAbandonTask(rootJobKey, JobRecord.InflationType.NONE);
    }
    if (rootJobRecord.getState() == JobRecord.State.STOPPED) {
      logger.warning("The pipeline has been stopped: " + rootJobRecord);
      throw new AbandonTaskException();
    }
    JobRecord.State jobState = jobRecord.getState();
    Barrier runBarrier = jobRecord.getRunBarrierInflated();
    if (null == runBarrier) {
      throw new RuntimeException("Internal logic error: " + jobRecord
          + " has not been inflated.");
    }
    Barrier finalizeBarrier = jobRecord.getFinalizeBarrierInflated();
    if (null == finalizeBarrier) {
      throw new RuntimeException("Internal logic error: finalize barrier not inflated in "
          + jobRecord);
    }

    // Release the run barrier now so any concurrent HandleSlotFilled tasks
    // will stop trying to release it.
    runBarrier.setReleased();
    UpdateSpec updateSpec = new UpdateSpec(rootJobKey);
    updateSpec.getTransaction("releaseRunBarrier").includeBarrier(runBarrier);
    backEnd.save(updateSpec);
    updateSpec = new UpdateSpec(rootJobKey);

    switch (jobState) {
    case WAITING_TO_RUN:
    case RETRY:
        // OK, proceed
        break;
    case WAITING_TO_FINALIZE:
        logger.info("This job has already been run " + jobRecord);
        return;
    case STOPPED:
        logger.info("This job has been stoped. " + jobRecord);
        return;
    }

    // Deserialize the instance of Job and set some values on the instance
    JobInstanceRecord record = jobRecord.getJobInstanceInflated();
    if (null == record) {
      throw new RuntimeException("Internal logic error:" + jobRecord
          + " does not have jobInstanceInflated.");
    }
    Job<?> jobObject = record.getJobInstanceDeserialized();
    setJobRecord(jobObject, jobRecord);
    String currentRunGUID = GUIDGenerator.nextGUID();
    setCurrentRunGuid(jobObject, currentRunGUID);
    setUpdateSpec(jobObject, updateSpec);

    // Get the run() method we will invoke and its arguments
    Object[] params = runBarrier.buildArgumentArray();
    Method runMethod = findAppropriateRunMethod(jobObject.getClass(), params);
    if (logger.isLoggable(Level.FINEST)) {
      StringBuilder builder = new StringBuilder(1024);
      builder.append("Running " + jobRecord + " with params: ");
      builder.append(StringUtils.toString(params));
      logger.finest(builder.toString());
    }

    // Set the Job's start time and save the jobRecord now before we invoke
    // run(). The start time will be displayed in the UI.
    jobRecord.incrementAttemptNumber();
    jobRecord.setStartTime(new Date());
    UpdateSpec tempSpec = new UpdateSpec(jobRecord.getRootJobKey());
    tempSpec.getNonTransactionalGroup().includeJob(jobRecord);
    backEnd.save(tempSpec);

    // Invoke the run() method. This has the side-effect of populating
    // the UpdateSpec with any child job graph generated by the run().
    Value<?> returnValue = null;
    Exception caughtException = null;
    try {
      runMethod.setAccessible(true);
      returnValue = (Value<?>) runMethod.invoke(jobObject, params);
    } catch (Exception e) {
      caughtException = e;
    }
    if (null != caughtException) {
      handleExceptionDuringRun(jobRecord, rootJobRecord, caughtException);
      return;
    }

    // The run() method returned without error.
    // We do all of the following in a transaction:
    // (1) Check that the job is currently in the state WAITING_TO_RUN or RETRY
    // (2) Change the state of the job to WAITING_TO_FINALIZE
    // (3) Set the finalize slot to be the one generated by the run() method
    // (4) Set the job's child graph GUID to be the currentRunGUID
    // (5) Enqueue a FanoutTask that will fan-out to a set of
    // HandleSlotFilledTasks for each of the slots that were immediately filled
    // by the running of the job.
    // See "http://goto/java-pipeline-model".
    logger.finest("Job returned: " + returnValue);
    registerSlotsWithBarrier(updateSpec, returnValue, rootJobKey, jobRecord.getKey(),
        currentRunGUID, finalizeBarrier);
    jobRecord.setState(State.WAITING_TO_FINALIZE);
    jobRecord.setChildGraphGuid(currentRunGUID);
    updateSpec.getFinalTransaction().includeJob(jobRecord);
    updateSpec.getFinalTransaction().includeBarrier(finalizeBarrier);
    backEnd.saveWithJobStateCheck(
        updateSpec, jobKey, JobRecord.State.WAITING_TO_RUN, JobRecord.State.RETRY);
  }

  private static void handleExceptionDuringRun(
      JobRecord jobRecord, JobRecord rootJobRecord, Exception e) {
    int attemptNumber = jobRecord.getAttemptNumber();
    int maxAttempts = jobRecord.getMaxAttempts();
    String message = StringUtils.printStackTraceToString(e);
    jobRecord.setErrorMessage(message);
    Key thisJobKey = jobRecord.getKey();
    UpdateSpec updateSpec = new UpdateSpec(jobRecord.getRootJobKey());
    if (attemptNumber >= maxAttempts) {
      jobRecord.setState(JobRecord.State.STOPPED);
      rootJobRecord.setState(JobRecord.State.STOPPED);
      rootJobRecord.setErrorMessage(message);
      updateSpec.getNonTransactionalGroup().includeJob(jobRecord);
      updateSpec.getNonTransactionalGroup().includeJob(rootJobRecord);
      backEnd.save(updateSpec);
    } else {
      jobRecord.setState(JobRecord.State.RETRY);
      updateSpec.getNonTransactionalGroup().includeJob(jobRecord);
      updateSpec.getNonTransactionalGroup().includeJob(rootJobRecord);
      backEnd.save(updateSpec);
      int backoffFactor = jobRecord.getBackoffFactor();
      int backoffSeconds = jobRecord.getBackoffSeconds();
      Task task = new RunJobTask(jobRecord.getKey(), attemptNumber);
      task.setDelaySeconds(backoffSeconds * (long) Math.pow(backoffFactor, attemptNumber));
      task.setOnBackend(jobRecord.getOnBackend());
      backEnd.enqueue(task);
    }
    logger.log(Level.SEVERE, "An exception occurred while attempting to run " + jobRecord + ". "
        + "This was attempt number " + attemptNumber + " of " + maxAttempts + ".", e);

  }

  /**
   * Finalize the job with the given key.
   *

   * We fetch the {@link JobRecord} from the data store and then fetch its
   * finalize {@link Barrier} and all of the {@link Slot Slots} in the finalize
   * {@code Barrier} (which should be filled.) We set the finalize Barrier to
   * released and save it. We fetch the job's output Slot. We use the values of
   * the filled finalize {@code Slots} to populate the output slot. We set the
   * state of the Job to {@code FINALIZED} and save the {@link JobRecord} and
   * the output slot. Finally we enqueue a {@link HandleSlotFilledTask} for the
   * output slot.
   *
   * @see "http://goto/java-pipeline-model"
   *
   * @param jobKey
   */
  private static void finalizeJob(Key jobKey) {
    JobRecord jobRecord = null;

    // Get the JobRecord, its finalize Barrier, all the slots in the
    // finalize Barrier, and the job's output Slot.
    jobRecord = queryJobOrAbandonTask(jobKey, JobRecord.InflationType.FOR_FINALIZE);
    Barrier finalizeBarrier = jobRecord.getFinalizeBarrierInflated();
    if (null == finalizeBarrier) {
      throw new RuntimeException("" + jobRecord + " has not been inflated");
    }
    Slot outputSlot = jobRecord.getOutputSlotInflated();
    if (null == outputSlot) {
      throw new RuntimeException("" + jobRecord + " has not been inflated.");
    }

    // release the finalize barrier now so that any concurrent
    // HandleSlotFilled tasks will stop trying
    finalizeBarrier.setReleased();
    UpdateSpec updateSpec = new UpdateSpec(jobRecord.getRootJobKey());
    updateSpec.getTransaction("releaseFinalizeBarrier").includeBarrier(finalizeBarrier);
    backEnd.save(updateSpec);
    updateSpec = new UpdateSpec(jobRecord.getRootJobKey());

    // Copy the finalize value to the output slot
    List<Object> finalizeArguments = finalizeBarrier.buildArgumentList();
    int numFinalizeArguments = finalizeArguments.size();
    if (1 != numFinalizeArguments) {
      throw new RuntimeException("Internal logic error: numFinalizeArguments="
          + numFinalizeArguments);
    }
    Object finalizeValue = finalizeArguments.get(0);
    logger.finest("Finalizing " + jobRecord + " with value=" + finalizeValue);
    outputSlot.fill(finalizeValue);

    // Change state of the job to FINALIZED and set the end time
    jobRecord.setState(JobRecord.State.FINALIZED);
    jobRecord.setEndTime(new Date());

    // Propagate the filler of the finalize slot to also be the filler of the
    // output slot. If there is no unique filler of the finalize slot then we
    // resort to assigning the current job as the filler job.
    Key fillerJobKey = getFinalizeSlotFiller(finalizeBarrier);
    if (null == fillerJobKey) {
      fillerJobKey = jobKey;
    }
    outputSlot.setSourceJobKey(fillerJobKey);

    // Save the job and the output slot
    updateSpec.getNonTransactionalGroup().includeJob(jobRecord);
    updateSpec.getNonTransactionalGroup().includeSlot(outputSlot);
    backEnd.save(updateSpec);

    // enqueue a HandleSlotFilled task
    backEnd.enqueue(new HandleSlotFilledTask(outputSlot));

  }

  /**
   * Return the unique value of {@link Slot#getSourceJobKey()} for all slots in
   * the finalize Barrier, if there is a unique such value. Otherwise return
   * {@code null}.
   *
   * @param finalizeBarrier A finalize Barrier
   * @return The unique slot filler for the finalize slots, or {@code null}
   */
  private static Key getFinalizeSlotFiller(Barrier finalizeBarrier) {
    Key fillerJobKey = null;
    for (SlotDescriptor slotDescriptor : finalizeBarrier.getWaitingOnInflated()) {
      Key key = slotDescriptor.slot.getSourceJobKey();
      if (null != key) {
        if (null == fillerJobKey) {
          fillerJobKey = key;
        } else {
          if (!fillerJobKey.toString().equals(key.toString())) {
            // Found 2 non-equal values, return null
            return null;
          }
        }
      }
    }
    return fillerJobKey;
  }

  /**
   * Handle the fact that the slot with the given key has been filled.
   *

   * For each barrier that is waiting on the slot, if all of the slots that the
   * barrier is waiting on are now filled then the barrier should be released.
   * Release the barrier by enqueueing an appropriate task (either
   * {@link RunJobTask} or {@link FinalizeJobTask}.
   *
   * @param slotKey The key of the slot that has been filled.
   */
  private static void handleSlotFilled(Key slotKey) {
    Slot slot = null;
    slot = querySlotOrAbandonTask(slotKey, true);
    List<Barrier> waitingList = slot.getWaitingOnMeInflated();
    if (null == waitingList) {
      throw new RuntimeException("Internal logic error: " + slot + " is not inflated");
    }
    // For each barrier that is waiting on the slot ...
    for (Barrier barrier : waitingList) {
      logger.finest("Checking " + barrier);
      // unless the barrier has already been released,
      if (!barrier.isReleased()) {
        // we check whether the barrier should be released.
        boolean shouldBeReleased = true;
        if (null == barrier.getWaitingOnInflated()) {
          throw new RuntimeException("Internal logic error: " + barrier + " is not inflated.");
        }
        // For each slot that the barrier is waiting on...
        for (SlotDescriptor sd : barrier.getWaitingOnInflated()) {
          // see if it is full.
          if (!sd.slot.isFilled()) {
            logger.finest("Not filled: " + sd.slot);
            shouldBeReleased = false;
            break;
          }
        }
        if (shouldBeReleased) {
          Key jobKey = barrier.getJobKey();
          Task task;
          switch (barrier.getType()) {
          case RUN:
              task = new RunJobTask(jobKey);
              break;
          case FINALIZE:
              task = new FinalizeJobTask(jobKey);
              break;
          default:
              throw new RuntimeException("Unknown barrier type " + barrier.getType());
          }
          try {
            backEnd.enqueue(task);
          } catch (TaskAlreadyExistsException e) {
            // OK. Some other thread has already enqueued this task.
          }
        }
      }
    }
  }

  /**
   * Queries for the job with the given key from the data store and if the job
   * is not found then throws an {@link AbandonTaskException}.
   *
   * @param key The key of the JobRecord to be fetched
   * @param inflationType Specifies the manner in which the returned JobRecord
   *        should be inflated.
   * @return A {@code JobRecord}, possibly with a partially-inflated associated
   *         graph of objects.
   * @throws AbandonTaskException If Either the JobRecord or any of the
   *         associated Slots or Barriers are not found in the data store.
   */
  private static JobRecord queryJobOrAbandonTask(
      Key key, JobRecord.InflationType inflationType) {
    try {
      return backEnd.queryJob(key, inflationType);
    } catch (NoSuchObjectException e) {
      logger.log(Level.SEVERE,
          "Cannot find some part of the job: " + key + ". Aborting the pipeline.", e);
      throw new AbandonTaskException();
    }
  }

  /**
   * Queries the Slot with the given Key from the data store and if the Slot is
   * not found then throws an {@link AbandonTaskException}.
   *
   * @param key The Key of the slot to fetch.
   * @param inflate If this is {@code true} then the Barriers that are waiting
   *        on the Slot and the other Slots that those Barriers are waiting on
   *        will also be fetched from the data store and used to partially
   *        populate the graph of objects attached to the returned Slot. In
   *        particular: {@link Slot#getWaitingOnMeInflated()} will not return
   *        {@code null} and also that for each of the {@link Barrier Barriers}
   *        returned from that method {@link Barrier#getWaitingOnInflated()}
   *        will not return {@code null}.
   * @return A {@code Slot}, possibly with a partially-inflated associated graph
   *         of objects.
   * @throws AbandonTaskException If either the Slot or the associated Barriers
   *         and slots are not found in the data store.
   */
  private static Slot querySlotOrAbandonTask(Key key, boolean inflate) {
    try {
      return backEnd.querySlot(key, inflate);
    } catch (NoSuchObjectException e) {
      logger.log(Level.SEVERE, "Cannot find the slot: " + key + ". Aborting the pipeline.", e);
      throw new AbandonTaskException();
    }
  }

  /**
   * Handles the given FanoutTask and if the corresponding FanoutTaskRecord is
   * not found then throws an {@link AbandonTaskException}.
   *
   * @param fanoutTask The FanoutTask to handle
   */
  private static void handleFanoutTaskOrAbandonTask(FanoutTask fanoutTask) {
    try {
      backEnd.handleFanoutTask(fanoutTask);
    } catch (NoSuchObjectException e) {
      logger.log(Level.SEVERE, "Pipeline is fatally corrupted. Fanout task record not found", e);
      throw new AbandonTaskException();
    }
  }

}


Location.--Latitude 47°48'25", Longitude 124°14'59", in NE 1/4 NE 1/4 Section 33, Township 27 North, Range 12 West, in Jefferson County, Hydrologic Unit 17100001, on left bank 250 feet downstream from U.S. Highway 101, 1.0 mile downstream from Hell Roaring Creek, 11.5 miles southeast of Forks, and at river mile 15.4. Drainage area is 253 mi2. Datum of gage is 163.64 feet above NGVD of 1929.
Additional Data and Information.--Station data inventory, annual data report.
flood frequency, and latest shifted rating.


The exciting new Roca Anima furniture range is now on display at our William Street showroom, featuring a combined drawer and hinged cupboard configuration. Available in gloss white, gloss anthracite grey, and textured grey with square or oval design basin, we think this is a great edition to their range and great value too. The showroom also has Roca Debba and Gap on display.


Furniture — This furniture, is one of the 11 designs published under the gallery: ModernWhite Residence Design By MLK Studio. In the next page, we have the modern kitchen design [ ... ]. While in	the previous page, we have the cozy library brentwood residence [ ... ].
Hi TechHD23 Kitchen Designed by Massimo Castagna for Lovers of Freedom Ideas.


A cookie is a small data file that certain web sites write to your hard drive when you visit them. A cookie file can contain information such as a user ID, password, and the pages you've visited on that web site. The only personal information a cookie can contain is information you supply yourself. A cookie can't read other data off your hard drive or read cookie files created by other sites. Cookies can persist on the client's computer for a variable amount of time.
Ramakrishna Vedanta Society of Massachusetts does not use or deliberately set cookies on this web site. However, it must be noted that the web site uses Microsoft's Active Server Pages technologies which sets a cookie containing server generated SessionID which is used to maintain state on the server. Session information on the server expires after 10 to 20 minutes of inactivity or when the instance of the browser window is closed.
Ramakrishna Vedanta Society of Massachusetts may collect information such as IP address, page visited etc. This information does not in any way reveal your personal identity. The purpose of collecting such information is to track the success of the web site in terms of number of visits and pages most frequently visited. It must be noted, that the web hosting services where the web sites are hosted provide us with the total number of daily hits to the web sites. This number does not in any way give us any information about you or your hardware or software, or accessories.
Our site's Sign Up form or Question Box form requires you to give us your contact information (name and email address). We use the for no other purpose than to send you what you explicitly requested, namely, updates or Vedanta related programs.
Ramakrishna Vedanta Society of Massachusetts will not share with anyone, personal information provided by you or non-personal, non-identifiable information provided by you. However, we have no control over and are not responsible for the quality of security measures in force by the web hosting company. We are NOT responsible to you if our web hosting company's server security is compromised and if any of your personal information is obtained illegally by anyone.
However, we are not responsible for the security measures in force by the web hosting company. From that consideration, we are NOT responsible to you if our web hosting company's server security is compromised and if any of your personal information is illegally accessed by anyone.
This site contains links to other sites. Such sites are clearly identified and you can elect not to use them. Ramakrishna Vedanta Society of Massachusetts is not responsible for the privacy practices or the content of such web sites. You should be aware that these sites may collect information such as your IP address, and deliver cookies. However, any personal information you give us is not shared with any link site.
If you wish to correct or update any information that you provide us through the web site, please send us an email at boston@vedantasociety.net.


Hello, I thought you might like to know about a recording of my work.
Mr. Bear, a champion of writers, has a weekly radio show broadcast on Boston Free Radio called Mr. Bear's Violet Hour Saloon. This week, she dedicated her show to my work. She read some of my published flash fiction and also chose the music to go with the stories. The music she chose is so apt and beautiful. Her show starts with one of my favourite songs of all time, "Can't Help Falling In Love". I feel incredibly fortunate. You can listen to the podcast here.
The podcast features several recent stories, including one published last week in Jellyfish Review, It falls, which is set in Berlin, a city that I love. This story concludes the podcast and is a perfect end, before one more final song.


text:
Installing
==========

.. warning::
	TwatBot is currently developed for Python 2.7.x. No compatibility for other
	Python versions is guaranteed.

TwatBot is developed as a `Django <https://djangoproject.com/>`_ app. Access to
`Twitter API <https://dev.twitter.com/overview/documentation>`_ is gained using
`python-twitter <https://pypi.python.org/pypi/python-twitter/2.0>`_.

You should be familiar with basic Django project layout and have a working
`Twitter app <https://apps.twitter.com/>`_ which allows you to tweet before
using this project.

**Short installing notes:**

* Clone (or fork) project's git-repository::

	$> git clone https://github.com/assamite/TwatBot.git

* Install `pip <https://pypi.python.org/pypi/pip>`_
* Install third party libraries::

	$> cd project_root/
	$> pip install -r requirements.txt // you might need root privileges

* From dependencies, `nltk <http://www.nltk.org/>`_-package needs wordnet and `textblob <https://textblob.readthedocs.org/en/dev/>`_ some other corporas to be able to function. You can download them using following commands::

	$>python -m textblob.download_corpora
	$>python -c "import nltk; nltk.download()"

* Install `MySQL <http://www.mysql.com/>`_ and create MySQL database::

	$>mysql -u root -p
	mysql> create database your_db_name character set 'utf8' collate 'utf8_general_ci';
	mysql> grant usage on *.* to your_user@localhost identified by 'your_user_password';
	mysql> grant all privileges on your_db_name.* to your_user@localhost ;

* Create local settings file::

	$> cd project_root/TwatBot/
	$> touch lsettings.py

* Configure ``lsettings.py``  with at least following attributes (see Twitter API documentation for details)::

	SECRET_KEY = 'Secret key for Django'
	TWITTER_API_KEY = 'Your Twitter API key'
	TWITTER_API_SECRET  = 'Your Twitter API secret'
	TWITTER_ACCESS_TOKEN = 'Your Twitter access token'
	TWITTER_ACCESS_TOKEN_SECRET = 'Your Twitter access token secret'
	DATABASE = 'your_db_name'
	USER = 'your_user'
	PASSWORD = 'your_user_password'

* Create DB-tables and apply migrations::

	$> cd project_root/
	$> python manage.py syncdb
	$> python manage.py migrate django_cron
	$> python manage.py migrate tweets

* Populate ``tweets``-app models with initial data::

	$> python manage.py loaddata tweets/fixtures/fixtures.json

* Configure project's cronjobs to be run every 5 minutes (or so)

	.. warning::
		This will make your bot to Tweet every once in a while, so only do this
		when you are ready to face the consequences.

		**If you just want to test the bot locally, don't enable cronjobs.**

	* Open crontab in new editor from terminal::

		$> env EDITOR=nano crontab -e

	* Write the cronjob on new line (you need to change the paths to your bash profile and project)::

		*/5 * * * * source ~/.bash_profile && python path/to/TwatBot/manage.py runcrons > path/to/TwatBot/logs/cronjob.log

	* Save and exit. Now the terminal should say something like::

		crontab: installing new crontab

**Local Usage:**

* Run the Django's builtin test server::

	$> python manage.py runserver

* Now the web site should be served for you in ``127.0.0.1:8000/``


text:
Back to Journals » International Journal of Nanomedicine » Volume 12
Lipase degradation of plasticized polyvinyl chloride endotracheal tube surfaces to create nanoscale features
Authors Machado MC, Webster TJ
Received 19 December 2016
Accepted for publication 6 February 2017
Published 16 March 2017 Volume 2017:12 Pages 2109—2115
DOI https://doi.org/10.2147/IJN.S130608
Editor who approved publication: Professor Carlos Rinaldi
Video abstract presented by Mary C Machado.
Mary C Machado,1 Thomas J Webster2
1Center for Biomedical Engineering, Division of Engineering Brown University, Providence, RI, 2Department of Chemical Engineering, Northeastern University, Boston, MA, USA
Abstract: Polyvinyl chloride (PVC) endotracheal tubes (ETTs) nanoetched with a fungal lipase have been shown to reduce bacterial growth and biofilm formation and could be an inexpensive solution to the complex problem of ventilator-associated pneumonia (VAP). Although bacterial growth and colonization on these nanoetched materials have been well characterized, little is known about the mechanism by which the fungal lipase degrades the PVC and, thus, alters its properties to minimize bacteria functions. This study used X-ray photoelectron spectroscopy (XPS) and attenuated total reflectance Fourier transform infrared spectroscopy (ATR-FTIR) to better describe the surface chemistry of both unetched and lipase nanoetched PVC ETT. ATR-FTIR analysis of the unetched and treated surfaces showed a similar presence of a plasticizer. This was confirmed by XPS analysis, which showed an increase of carbon and the presence of oxygen on both unetched and nanoetched surfaces. A quantitative comparison of the FTIR spectra revealed significant correlations (Pearson's correlation, R=0.997 [R2=0.994, P<0.001]) between the unetched and nanomodified PVC ETT spectra, demonstrating similar surface chemistry. This analysis showed no shifting or widening of the bands in the spectra and no significant changes in the intensity of the infrared peaks due to the degradation of the plasticizer by the fungal lipase. In contrast, results from this study did demonstrate significantly increased nanoscale surface features on the lipase etched compared to non-etched PVC ETTs. This led to a change in surface energetics, which altered ion adsorption to the ETTs. Thus, these results showed that PVC surfaces nanoetched with a 0.1% lipase solution for 48 hours have no significant change on surface chemistry but do significantly increase nanoscale surface roughness and alters ion adsorption, which suggests that the unique properties of these materials, including their previously reported ability to decrease bacterial adhesion and growth, are due to the changes in the degree of the nanoscale roughness, not changes in their surface chemistry.
Keywords: nanorough, lipase, hydrolysis, spectroscopy, polymer


Dalit leader Prakash Ambedkar on Friday accused the BJP and Maharashtra Chief Minister Devendra Fadnavis of playing politics over the Maratha reservation issue.
Earlier in the day, Fadnavis announced that the state government would allot 16 percent of the 72,000 posts it is going to fill to the Maratha candidates in the form of backlog if the Bombay High Court allows quota for the community.
Addressing a rally here, Ambedkar, who heads Bharipa Bahujan Mahasangh, hit out at the RSS for "reintroducing" Manismriti–the ancient Hindu law book–to divide the society.
He said the RSS didn't believe in equality.
"When did RSS chief Mohan Bhagwat garland the statue of Mahatma Phule (the social reformer of the 19th Century)? Bhagwat didn't glorify Phule because the latter had discarded Manusmiriti and fought against it," he said.
Ambedkar, the grandson of B R Ambedkar, also accused the RSS of trying to change the Constitution of the country.
"The RSS has adopted a dubious policy. On one hand, they hate Muslims and on the other, they invite Muslims for iftaar party," he said.
Later addressing a press conference, Ambedkar said an alliance comprising secular-minded and backward class parties has been formed.
"The alliance has given a proposal to the Congress saying it wanted to contest 12 seats in the 2019 Lok Sabha polls. However, no response has come from the Congress," he said.
Responding to a query on the Maratha quota, he said the chief minister should desist from making such controversial statement as the quota issue is sub-judice.
"The BJP is not serious of giving reservation to the Marathas. The elitists Marathas are responsible for the plight of their community," he said.
Ambedkar said the Congress did not choose the proper time to present the no-confidence motion against the BJP government in Parliament, as the party is not in a position to take on the BJP.


text:
Q: Output from web scraping with bs4 returns empty lists I am trying to scrape specific information from a website of 25 pages but when I run my code i get empty lists. My output is supposed to be dictionary with the specific information scraped. Please any help would be appreciated.
# Loading libraries
import requests
from bs4 import BeautifulSoup
import pandas as pd
import mitosheet

# Assigning column names using class_ names
name_selector = "af885_1iPzH"
old_price_selector = "f6eb3_1MyTu"
new_price_selector = "d7c0f_sJAqi"
discount_selector = "._6c244_q2qap"

# Placeholder list
data = []

# Looping over each page
for i in range(1,26):
   url = "https://www.konga.com/category/phones-tablets-5294?brand=Samsung&page=" +str(i)
   website = requests.get(url)
   soup = BeautifulSoup(website.content, 'html.parser')

   name = soup.select(name_selector)
   old_price = soup.select(old_price_selector)
   new_price = soup.select(new_price_selector)
   discount = soup.select(discount_selector)

   # Combining the elements into a zipped list to be able to pull the data simultaneously
   for names, old_prices, new_prices, discounts in zip(name, old_price, new_price, discount):
      dic = {"Phone Names": names.getText(),"New Prices": new_prices.getText(),"Old Prices": old_prices.getText(),"Discounts": discounts.getText()}
      data.append(dic)

   data

A: I tested the below and it works for me getting 40 name values.
I wasn't able to get the values using beautiful soup but directly through selenium.
If you decide to use Chrome and PyCharm as I have then:
Open Chrome. Click on three dots near top right. Click on Settings then About Chrome to see the version of your Chrome. Download the corresponding driver here. Save the driver in the PyCharm PATH folder
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))

# Assigning column names using class_ names
name_selector = "af885_1iPzH"

# Looping over each page
for i in range(1, 27):
    url = "https://www.konga.com/category/phones-tablets-5294?brand=Samsung&page=" +str(i)
    driver.get(url)

    xPath = './/*[@class="' + name_selector + '"]'
    name = driver.find_elements(By.XPATH, xPath)

redpajama_set_name: RedPajamaStackExchange


Part 2 of a two-part (free) series on _practical_ ways Agility can help you deliver value in your context.
Part 2 Clinic: A lively and interactive open forum for group discussion and Q&A on _your_ delivery scenarios. Bring your toughest challenges and gain collective insight!
You are constantly working on creative and complex tasks. But you never seem to get done – or perhaps not to the quality level you truly wanted. You may be surprised – relieved even – to know that it is not possible! But how can you still succeed? Come get your answers questioned.
The philosophy, values, principles, policies, practices, and tools to complete any interesting initiative always depend on context. This workshop and clinic delve into the Agile way of delivering value, and how it relates to traditional ways. Participants will add pragmatic tools to their toolbox for assessing how Agile applies, and for being Agile to get stuff done on-time and on-budget.
Johnny Hermann is a professional technical leader and team builder with 15 years in software engineering and management. He has facilitated employees ranging from contributor to executive, and companies ranging from startup to enterprise. He spends his days bootstrapping healthy technical teams via humanistic servant-leadership.
* Deliver valuable product and service to customers.
* Build successful technical teams and learning organizations.
* Motivate and improve the working lives of employees.


The group is for almost every type of writing. I want it to be very helpful for people who live in the state of PA. I'm hoping for constructive criticism on everyone's work just like anywhere else on this site or any other.


This web page lists tool and die makers in the State of Tennessee. Before visiting any of these Tennessee tool and die makers, be sure to verify their address, hours of operation, and appointment policies (if applicable). A tool and die maker may have ceased operations or moved to a different address, and business hours can sometimes vary seasonally and during holiday periods. So a quick phone call can often save you time and aggravation.
Related directory pages are highlighted below the Tennessee tool and die maker listings on this page. Links to Tool and Die Maker directory pages for adjacent States are provided at the bottom of the page. Tennessee directory and map page links are also included there.
Advertise Your Tennessee Tool and Die Maker Web Site Here!
Alabama Tool and Die Makers - AL Tool and Die Maker Listings.
23 tool and die makers listed in Tennessee.


Staycation was a Jake and Amy episode which wouldn't be exactly what they bargained for as they were each blindsided by where they saw their relationship while a crisis would bring them closer together.
The cold open was of Amy meeting Jake at the hospital. He needed a partner to help watch a cartel member until he wakes up from a coma so he could get information from him. Meanwhile, Scully was very familiar with the hospital in a way that was perfectly Scully. Jake believed it was the perfect opportunity to spend time together while still technically working therefore it would be a casecation. Being the goof that he was, Holt would surely want Jake to have supervision so his plan was foolproof.
Jake set he and Amy up (Charles did and wouldn't leave right away) in a comatose patient's room where they reminisced about their favorite moments as a couple, including being in a Uber Pool with Michael Caine (he wasn't). He felt blindsided when Amy shared the fact that she wanted kids as he wasn't quite sure if he wanted any and that she didn't like water parks. Amy was equally blindsided. There was an obvious miscommunication between them. Amy suggested they debate for and against having children while Holt stood in as a judge.
Amy was of course winning but when the debate shifted towards their employment, Holt would abstain and Kevin (who was on Holt's phone) took his place for which he would then abstain himself in favor of another woman named Gayle. Jake was ultimately scared of having kids because of his relationship with his own father which brought many insecurities around the male role models in his life. The forever-growing phone call grew even further when Gale had another man on the line after Jake complained about Gayle's bias. The other recurring joke in the episode was a patient with twisted bowels next door named Pam would keep showing up as she was interested in Jake and may.
Amy's debate idea clearly didn't work but Jake thought they should enjoy their lives before making that kind of a decision. However, she needed an answer a lot sooner since she couldn't wait. She wanted to make sure that they were on the same page. Terry and Rosa showed up soon after to inform them that someone may be coming to kill the cartel member. Jake and Amy would split up. Rosa was on Amy's side (she believed Amy not having kids was f-ed up). Terry warned Jake that he should not have kids. Meanwhile, Rosa stopped a man who looked suspicious but he would just be a distraction as Pam was the one sent to kill the cartel member.
Pam had a bomb and in order to convince her to not blow everyone up, Jake would engage in another debate with her for which she would bring up several good arguments of her own (she would be financially compensated for doing so). He would convince her to give him the bomb.
Once everything was set and done, Amy had asked for some proper time off so she and Jake could spend some quality time together at a water park. Jake also shared that he wanted kids but when they were ready. His suggestion for baby names were unsurprisingly ridiculous.


Fun and educational activities for six year olds serve as catalysts to their growth and learning. Engage your six-year-old in different kinds of activities and plant the seed of a lifelong love for learning.
It is important for parents and teachers to ensure that the activities for six year olds promote developmental advancement. When they are, these activities work wonders in aiding the growth and learning of the kids.
There are many advantages of engaging six year olds in different kinds of activities. Since their language skills have become more sophisticated, age-specific reading activities can expose them to more advanced writing and reading levels. Simple science experiments and activities that encourage first-hand observation of causes and effects will facilitate a greater understanding of different science concepts. Kids of 6 years also have longer attention spans and can be very social. Engaging them in different games and group activities for 6 year olds can also work wonders in building their inter-personal skills.
Six year olds are generally in first grade and are in school full-time. Activities for six year olds often serve as effective teaching aids as they ensure that learning continues even outside the classroom.
JumpStart has many kinds of activities that parents and teachers can use to engage kids of this age group. From math activities and reading activities, to art activities and science activities, there is something for everyone. Most activities do not require elaborate preparation. Everyday tasks such as helping out in household chores or even playing age-appropriate board games and solving puzzles are good activities for six year olds too!


Click here for the official Vodafone Automotive Anti-Theft Website.
Cobra is designed and manufactured in Italy. Founded in 1975 Cobra make some of the worlds most advanced vehicle security systems.
Cobra is distributed in New Zealand by ACS Limited who have a selective network of dealers to ensure a high standard of installation quality, of which I'm proud to be one of them.
All Cobra alarms and Immobilisers available in New Zealand meet with Thatcham standards. Test certificates are valid for 2 years from the date of issue. These can be found on the Thatcham website.
This is your guarantee that the systems are current and effective and not some old technology being marketed as "the best" without any substance!
Cobra offers an extensive range of systems for both OEM and the aftermarket. The new generation of CAN-Bus alarms integrates perfectly with most modern vehicles (list here) and feature cutting-edge technology such as wireless sirens and driver card key theft protection.
The quality of Cobra is second to none which ensures years of trouble-free security. For example, Cobra remote controls and sirens are waterproof. Cobra also offers the only true attack proof immobiliser security housing in NZ.
This entry was posted in Car Security, Cobra. Bookmark the permalink.


text:
PC Mag Middle East | Consumer Electronics | Computer & Console Gaming - Products | News
'Gnarly Bugs' Prompt Rock Band 4 Leaderboard Wipe
If you've been kicking ass on Rock Band 4 since its release this fall, Harmonix has some bad news.
The game shipped with some "gnarly bugs," developers revealed this week, including the ability for drummers to "double-deploy overdrive by hitting the green 'Overdrive' gems at the end of dynamic drum fills." Translation: it let you unfairly inflate your score and climb the leaderboards.
As a result, Harmonix will "wipe all of the leaderboard scores for all songs" as part of its January update, because the changes it's making "affect almost every song, instrument, and difficulty in the game."
SEE ALSO: E3: 8 Jaw-Dropping Moments From Years Past
After that, the game maker will make an "adjustment to our code that will allow us, in the future, to address song-specific bugs and issue targeted leaderboard wipes." Throughout the spring, it will also "be rolling out some score fidelity fixes to individual songs."
"We know that many of you have worked hard to climb the leaderboards, and that wiping your scores sucks," Harmonix said. "That said, these changes will ensure that in the future, you won't be unseated from the top spot by someone using an exploit. And if we do discover an issue down the road, we can address it much more quickly and easily."
The wipes only affect high scores you've posted to leaderboards. "Those of you who are racking up Full Combos won't lose that data on your local saves," Harmonix explained. "You'll also hold on to the 'song plays' stat visible on the Player Stats screen. As far as your song library goes, it'll continue to display the accuracy and star count for your highest-scoring performances to date. These stats will be replaced the first time you re-play each song after the update goes live." For more, see this FAQ page.
In January, meanwhile, scores from "Play a Show" mode will apply to leaderboards, which Harmonix hopes will encourage more people to use that mode.
Computer & Console ...
Rock Band 4 ...
PS4 Update Adding Suspend-and-Resume, Social Tools
How to Play Games on an Old, Low-End PC


Better get your [brrrrp] vaccinations, Morty, because that burn was sick. Sick, Morty, like a [brrrrp] frickin' plague of frogs that hurts your feelings.
Ahem. For some additional context, the bump was aired without sound, and appeared through a slow fade-in-and-fade-out, similar to how post-episode "In Memoriam" cards appear. Apparently, there are a fair bit of people at Adult Swim who were not fans of Season 7 of Game of Thrones. That, or some particularly cheesed-off intern upset with some of the twists from last night snuck in and made that hot take on the fly!
Unfortunately, Adult Swim waited until the Season 7 finale of Game of Thrones to fire shots at the show, so the chances of any dragon-centered retaliations, or even just snide reactions, from the GoT staff appear slim. That's probably for the best anyway, as the season finale definitely provided more talking points worth obsessing over than a text bump could ever provide. Check out some of the questions we are asking right here, and those who are in need of a new series to watch following GoT's end for the year should visit our fall premiere guide.


text:
Q: PHP file crashes after 5 sec of execution I have a mysql query which returns a list of movies from database.
The query is as follows
$query = "SELECT * FROM `$tableName` WHERE `$columnName` >= '$stDate' and `$columnName` <= '$endDate' and `$columnName` != '0000-00-00' and `$columnName` != '1970-01-01' ORDER BY `$columnName` ASC;";

The query is working fine perfectly as i have tested it using phpmyadmin
The main problem is that it only returns about 30 records.
if the no. of records to return are more then 30, then the php file crashes and returns nothing at all.
Through my research on google i have found out that these setting in php.ini needs to be changed. I have made the following changes and restarted the server.
max_input_time = 60;       to    max_input_time = 3600;
max_execution_time = 60;   to    max_input_time = 3600;
memory_limit = 64M;        to    memory_limit = 1024M;

But these changes does not solves the problem.
Any help will be appreciated.
Thank you

A: It's very hard to know without knowing more.
Looking at your query makes me think of some things:
$query = "SELECT * FROM `$tableName` WHERE `$columnName` >= '$stDate' and `$columnName` <= '$endDate' and `$columnName` != '0000-00-00' and `$columnName` != '1970-01-01' ORDER BY `$columnName` ASC;";

1. Use RESERVED KEYWORD NOT (or IS NOT) instead of !=.
2. Why $columnName != '0000-00-00' and $columnName != '1970-01-01' ???
3. You shouldn't use semicolon at the end of the query. (if you're not adding queries in the same batch)
Please supply us with the whole code, at least where the actual query are executed and what values are put in to it...