text:
Poets & Writers Theater
Every day we share a new clip of interest to creative writers—author readings, book trailers, publishing panels, craft talks, and more. So grab some popcorn, filter the theater tags by keyword or genre, and explore our sizable archive of literary videos.
A Tribute to Denis Johnson
Denis Johnson Tribute
Marie Arana, literary advisor at the Library of Congress, presents a video tribute of the late Denis Johnson, who was awarded the 2017 Library of Congress Prize for American Fiction. Johnson's second story collection, The Largesse of the Sea Maiden (Random House, 2018), is featured in Page One in the January/February 2018 issue of Poets & Writers Magazine.
Tags: Fiction | Denis Johnson | Library of Congress | Library of Congress Prize | 2017 | The Largesse of the Sea Maiden | Random House | 2018 | Page One | January/February 2018 | tribute
The Beast: How Poetry Makes Us Human
"We harness a wildness in the 'I' of our poems." In this 2013 video at the Library of Congress, Dorothea Lasky delivers the Bagley Wright Lecture on Poetry and explores how poetry makes us human. Lasky interviews the late Max Ritvo about his poetry and process in "The World Beyond: A Last Interview With Max Ritvo" in the November/December issue of Poets & Writers Magazine.
Tags: 2013 | Library of Congress | Max Ritvo | November/December 2016 | Dorothea Lasky | The Beast: How Poetry Makes Us Human | Center for the Book | Poetry and Literature Center | Bagley Wright Lecture on Poetry | Poetry
A. Igoni Barrett
Nigerian Writer A. Igoni Barrett
"A lightning flash split the gloom and a rumble of cascading boulders burst from the sky." At an event at the Library of Congress, A. Igoni Barrett reads from "The Shape of a Full Circle," a short story from his collection Love Is Power, Or Something Like That (Graywolf Press, 2013). His debut novel, Blackass (Graywolf Press, 2016), is featured in Page One in the March/April issue of Poets & Writers Magazine.
Tags: reading | Page One | Graywolf Press | 2013 | Library of Congress | 2016 | March/April 2016 | Blackass | A. Igoni Barrett | Love Is Power, Or Something Like That | Fiction
A Celebration of Jorge Luis Borges
With Borges: A Conversation with María Kodama
María Kodama discusses the work of her late husband, Jorge Luis Borges, at the Library of Congress, which Borges often called his home. Kodama is joined by Saúl Sosnowski, a professor of Latin American Literature and Culture at the University of Maryland.
Tags: Poetry | Fiction | Creative Nonfiction | Jorge Luis Borges | María Kodama | translation | in memoriam | Library of Congress | 2016
Jon Pineda
Filipino Americans: The Other Asian Americans
Poet, memoirist, and novelist Jon Pineda discusses the Filipino American experience and his writing at the Library of Congress. Pineda's second novel, Let's No One Get Hurt (Farrar, Straus and Giroux, 2018), is featured in Page One in the March/April issue of Poets & Writers Magazine.
Tags: Fiction | Jon Pineda | Let's No One Get Hurt | Farrar, Straus and Giroux | Page One | 2018 | March/April 2018 | Library of Congress
Charles Wright reads "Together"
The Library of Congress announced today that Charles Wright is the new U.S. poet laureate. In this clip, Wright, the author of nearly two dozen poetry collections, most recently Caribou (FSG, 2014), reads his poem "Together" for PBS NewsHour.
Tags: PBS NewsHour | Farrar, Straus and Giroux | United States Poet Laureate | Library of Congress | Charles Wright | Caribou | Poetry
Carl Phillips
Hill Center Poetry Series: The Life of a Poet - A Conversation with Carl Phillips
Last month Ron Charles interviewed poet Carl Phillips, whose most recent collection, Silverchest, was published by FSG in April 2013, as part of the Hill Center Poetry Series, cosponsored by the Library of Congress and the Washington Post.
Tags: Poetry | Farrar, Straus and Giroux | Ron Charles | Washington Post | Library of Congress | Carl Phillips | Silverchest | Hill Center Poetry Series
Elizabeth Alexander
Elizabeth Alexander, Poet and Director of African American Studies Program at Yale
On April 11 the author of five books of poetry and two essay collections, including Power and Possibility: Essays, Interviews, Reviews (University of Michigan Press, 2007), read her poem "Haircut" at the opening presentation of the Hill Center Poetry Series, cosponsored by the Library of Congress and the Washington Post.
Tags: Elizabeth Alexander | Washington Post | Library of Congress | Hill Center Poetry Series | Poetry
Gerald Stern
Poet Gerald Stern Looks Back on Career of Reading, Writing
The eighty-seven-year-old poet talks with PBS NewsHour's Jeffrey Brown about a life of writing poetry and his Early Collected Poems: 1965-1992, for which he recently won the Bobbitt National Prize for Poetry from the Library of Congress.
Tags: PBS NewsHour | Jeffrey Brown | Library of Congress | Early Collected Poems: 1965-1992 | Bobbitt National Prize for Poetry | Poetry
Theater tags
<Any>Not Genre-SpecificPoetryFictionCreative NonfictionSpoken WordCross-Genre


The maintenance of a desired level of quality in fiscal reporting, especially by means of attention to every stage of the process.
Pre-Audit: Conduct sample selections and transaction reviews from WOLFS and HRM Payroll documents and monitor agencies' compliance with accounting policies, procedures and internal controls.
Training: Provide all end users with hands on training in all facets of the State's uniform accounting system, i.e., WOLFS, HRM Payroll and infoAdvantage, to include fiscal policies and procedures.


text:
Coronavirus Continues To Spread In The U.S.
WAMU 88.5 | By Danielle Knight
Published March 2, 2020 at 2:41 PM EST
Shoppers buy toilet paper, food and water at a store, as people begin to panic buy and stockpile essentials from fear that supplies will be affected by the spread of the COVID-19, coronavirus outbreak across the country, in Los Angeles, California.
As the official count of confirmed coronavirus cases worldwide rises to about 90,000, U.S. officials have been struggling to slow its spread stateside.
The U.S. is expanding travel restrictions from Iran and heightening a travel advisory for some areas of South Korea and Italy, Vice President Mike Pence said Saturday. Officials have instituted new screening methods for those reentering the country from high-risk areas.
American health officials say that coronavirus claimed its first two victims inside the country's borders over the weekend. Both deceased lived in Washington State. The official U.S. death count has risen to six.
They're also advising citizens to be as hygienic as possible and to prepare for the possibility of infection by purchasing food and supplies.
How much preparation is necessary? What can we expect?
Copyright 2020 WAMU 88.5. To see more, visit WAMU 88.5.
Danielle Knight
Justice Ruth Bader Ginsburg: Her Life, Her 'Most Fervent Wish' And The Future Of SCOTUS
Block The Vote: Mail-In Voting And Disenfranchisement
The News Roundup — International
The News Roundup — Domestic
Former Surgeon General Vivek Murthy On Joe Biden's Plan To Fight COVID-19
How The Coronavirus Pandemic Is Affecting Crime
A Conversation With 'Citizen Musician' Anthony McGill
Nearly 100 Million Eligible Americans Didn't Vote In 2016. Why Not?

redpajama_set_name: RedPajamaCommonCrawl


Travel Leisure has an Explorer Guide for seniors that can help you with the plethora of choices available. There you can Explore the World by simply selecting the "Request Catalog" checkbox next to each company you'd like to receive free information from. Then enter your contact information in the form provided at the bottom of the page and click "Next".
The "featured destinations" include Hawaii's Big Island, the O'ahu Visitor Center and Kaua'i, Hawai'is Island of Discovery. The Hawaiian Island of Oahu is a melting pot of experiences that energizes the soul and invigorates the senses. I loved it there, especially the evening breezes coming in off the ocean each and every day. Of course the 86 degree temps every day have something to do with making Hawai'i a paradise.
Somehow they have "tossed in" Santa Barbara (The American Riviera), sun-drenched, relaxed and nestled seductively between Los Angeles and San Francisco. Sample the world-class hotels and resorts and delectable restaurants that tempt even the well-seasoned traveler. From State Street and the Santa Ynez Mountains to the Channel Islands and the wine country, Santa Barbara is one of America's best-kept secrets. Delve deeper into the magic of Santa Barbara on the new SantaBarbaraCA.com where you can enjoy a virtual taste of the Santa Barbara lifestyle.
I have a friend who loves all the Disney Tours. Their website is called Adventures by Disney. There's a magical world out there waiting to be explored—and Adventures by Disney guided group vacations are the best way to go! Their knowledgeable and friendly Adventure Guides bring you closer to some of the world's most popular destinations through authentic cultural experiences with local experts. And with VIP access to activities, you and your family can see the world in a whole new way! Call (800) 543-0865 or your travel agent to see the world with Disney. You may send for an e-mail brochure using this site as it makes it easy to sign up. From bustling cities and awe-inspiring landscapes, to seaside villages and secret locales, Adventures by Disney offers worldwide vacations – to such wondrous places as Europe, Asia and South America – ranging in length from 6 to 13 days. Love Adventures? Disney has several and this site will tell you about it complete with sound/voice. Enjoy Disney.


text:
La Coupe Davis 1900 est la première du nom. L'épreuve a eu lieu à Longwood Cricket Club, Boston, Massachusetts du 8 au 10 août.
La première victoire revient aux États-Unis.

Contexte

Résultats

Match détaillé

Bibliographie

Notes et références

Articles connexes
 Coupe Davis

Liens externes
  Site officiel
  Site officiel de l'ATP

Voir aussi

Navigation

1900
Davis
1900 aux États-Unis
Compétition de tennis à Boston
Août 1900

redpajama_set_name: RedPajamaWikipedia


Last November I purchased a house with 4.75 acres that backs into stateland. It's been a dream to own enough land to hunt and last year Bishop helped me setup a ladder stand over one of two traversing trails on my hill. With limited trail cam photos, it was difficult to figure out a pattern and where they were cutting through.
I woke up at 3:45 on Saturday morning to the sound of rain and canceled any distant hunting plans and set my alarm for 5:15 to check in again on hunting my hill if it wasn't pouring. I woke at 5:15, radar showed the rain had finished up, got dressed, grabbed my bow and headed to the stand.
It was perfect temps around 50 with the wind blowing downhill towards the house. When legal light came and I could see enough to make a shot, I stood as my first hunt this season a doe surprised me and I wasn't in shooting position before the opportunity passed.
Scanning left and right and occasionally behind me, about 6:30 I spotted a doe at my 6:00 already looking at me. I ducked backed behind my tree and reposition my feet to take a shot at about my stands 4:00.
We played the peekaboo game for a couple minutes before she started walking again. As she stepped behind some brush I raised my bow, she froze. I leaned into the tree to reduce movement and fatigue. After 30-60 seconds she took two more steps in which I drew back. She stopped with a tree covering the vitals except a front should shot. My right leg was shaking uncontrollably. This is only my fourth season bowhunting and with few encounters. Holding at full draw she took one more step exposing the vitals. I let the arrow fly and hit with a good thwack! "Holy crap I just got the first deer off my hill" went through my mind as she ran the 30yds from my stands 4:00 to 2:00 position and crashed behind a tree. I could barely see her but watched closely and nocked another arrow just in case as I had seen the back end kind of dragging as she ran, expecting a spine or bad shot. I prayed for a quick passing and shortly after I heard a heavy exhale. I waited a couple minutes and whistled and kicked my stand to ensure she was expired and texted and called Bishop and Adam who were setting up on geese. A few more minutes and I climbed down to find a healthy looking doe I'd estimate at 1.5 years old. In looking for my shot I was both disappointed, embarrassed and relieved. I missed the vitals but had a complete pass through the back end hitting the major arterie(s). I enjoy shooting my bow and desire to make quick and clean kills. Call it nerves, or she took a step or both, probably a combination but I was grateful it was a quick kill regardless. This was the reason I switched to a expandable broadhead (Grim Reaper 125gr) and shoot heavy FMJ arrows)- just in case you need a little insurance. Almost no blood trail from the high hit but lots where she crashed/rolled and inside the cavity.
Easy one hand drag down my hill to the barn. Would you believe my plans were to build my outdoor sink, counter top and skinning station that day? Not having all the components ready to go I reached out to PassinThru who lives just a few minutes away to see if he minded lending a hand. He was happy to as I picked him up, went back to the house where he gave me a quick field dressing lesson (Bishop and I usually hang them when we're together) and headed off to his buddies who has a sugar shack that doubles as a skinning shed.
I appreciate the help but most of all building of a friendship, a few tips and tricks and comradarie of BSing while cutting up a deer followed by a great breakfast and retelling the story of the hunt. Finished the day with grilled tenderloins.
Great day all around, grateful for all of it!
That must be quite a feeling, taking a deer on your own land. Congrats on a nice doe to start things off.
That's awesome she is a beauty!!!
Great story! Congratulations on the kill behind your house. I wish you many years of success back there.
Nice job, congrats. I've arrowed a deer in the a$$ before after the arrow skipped a branch... Lucky to catch the main arteries along the back...dead in 75 yds and I've never seen a better blood trail.
Good deal, glad it all came together for you at your place! Good looking doe, congrats!
Congrats. Sometimes you have to rely on luck. May not have been the vitals you were aiming for, but vitals nonetheless. Go get another just to make sure it wasn't a fluke.
Congrats on the doe, and nice write up. The killing isn't always pretty but at least she went quickly. I passed on 3 does yesterday, and the first momma and skipper that were under my stand gave me a huge adrenaline rush. After I drew on them and gave them the pass, when I sat down my legs were shaking. Lol, I get that from the first deer I see under my tree every season even when I know I'm not gonna shoot. It's a great feeling of being alive, hope it never goes away.
Great story - thanks for sharing. Nice to get a deer off your own land.
Good job on getting it done.
I know all of us were as happy for you as you were. Glad I was able to help and be part of your first deer on your property. Great job and congrats!
I love the fact that as I enter my 40th hunting season I continue to get the opportunity to meet new people and add them to our circle of friends.


text:
Race to be run in memory of Sir Henry Cecil at Royal Ascot
Minute's silence for the late Sir Henry and Queen's Vase race to be run in his honour
Becky Barnes
Sir Henry Cecil
The late Sir Henry Cecil will be honoured at Royal Ascot next week.
A minute's silence will be held on the opening day next Tuesday, which will mark a week since the legendary race horse trainer died from cancer aged 70.
The Queen's Vase race will also be run in Sir Henry's memory, as he hold the outright record for having the most winners in the race.
Jockeys riding in 'The Queen's Vase In Memory of Sir Henry Cecil' on Friday will wear black armbands.
Johnny Weatherby, Her Majesty's Representative at Ascot, said: "Sir Henry was an intrinsic part of Royal Ascot with 75 winners over more than four decades.
"It is no secret that Royal Ascot was his favourite meeting of the year and we felt it was fitting to honour his achievements here next week, and remember the passing of one the greatest figures that the world of sport has ever seen.
"Our thoughts are with Sir Henry's family and I am delighted that Lady Jane will be accompanying the Countess of Wessex for the trophy presentation following the Queen's Vase."


text:
4.2" Polished Mammoth Molar Section - South Carolina
5" Partial Woolly Mammoth Molar - North Sea
This is a 5.0", section of fossil Woolly Mammoth (Mammuthus primigenius) molar, from Hungary and is between 20 and 50 thousand years old. It shows nine prism (hard enamel structures) plates, dentine and cementum. The roots indicate, this is the front of the tooth.
Comes with a stand.
These Pleistocene fossils are dredged up by fishing trawlers in the the North Sea between Britain and Denmark. Fishermen routinely find mammoth teeth and many ice aged fossils in their nets and given the chance that a fossil is accidentally gathered in a net is slim the sea floor is probably littered with the remains of millions of animals. The cold temperatures and low oxygen environment of the North Sea has aided in the preservation of these teeth and bones.
While these fossils have been pulled up in nets for more than a century, they were frequently discarded. It wasn't until the past two decades that this material has begun to be systematically collected and studied. By recording the locations of their finds and allowing scientists to make observations before the more common material is made available, much has been learned about the fauna that once roamed the land that now lies 30 to 150 feet below the North Sea waters.
You can read more information about this at the following link.
http://www.independent.co.uk/news/science/the-watery-grave-of-europes-monsters-1744973.html
The Woolly Mammoth (Mammuthus primegenius) is the iconic Pleistocene animal. They had long hair, tusks that extended up to 9 feet, and stood about 12 feet tall. They ranged across the northern hemisphere and were one of the most abundant Pleistocene creatures.
Learn More About Mammoth Molars
Mammuthus primigenius
Late Pleistocene (20,000-50,000 Years)
North Sea, Doggerland Bank, Netherlands Coast
5.0" long, 7.0" tall, 3.3" wide
Mammoth Fossils
5.0" Petrified Wood (Bald Cypress) Slab - Saddle Mountain, WA
5.0" Fossil Theropod Caudal Vertebra Centrum - Morocco
5.0" Polished Agate Standup - Oregon
3.55" Polished Mammoth Molar Section - South Carolina
10.0" Fossil Woolly Mammoth Lower M3 Molar - North Sea Deposits


text:
Het wapen van Son en Breugel  werd op 16 juli 1817 aan de Noord-Brabantse gemeente Son en Breugel toegekend.

Geschiedenis
Het wapen is een sprekend wapen. Het wapen van de schepenbank van Son heeft voor zover bekend altijd een zonnesymbool gehad. Tot aan het einde van de zeventiende eeuw werd een zegel gebruikt met daarop een gevierendeeld wapen met in het eerste kwartier een Brabantse leeuw, in het vierde kwartier een Limburgse leeuw, en in het tweede en derde kwartier een zonnesymbool. De kleuren zijn waarschijnlijk altijd blauw en goud geweest. Deze kleuren komen overeen met de rijkskleuren.

Beschrijving
De beschrijving van het wapen van Son en Breugel luidt:

Zie ook
Vlag van Son en Breugel

Wapen
Wapen van Noord-Brabantse gemeente


text:
Tag: nomination
Rep. Green Says Secretary of the Army Mark Esper Is a 'Great' Nominee for Secretary of Defense
June 19, 2019 June 18, 2019 Jason M. Reynolds
U.S. Rep. Dr. Mark Green (R-TN-07) told Fox News that Mark Esper is a "great" nominee for Secretary of Defense and mentioned that he was a fellow classmate at West Point even as details emerge of what happened to the nomination of Acting Secretary of Defense Patrick Shanahan. Shockwaves…
NewsMark Esper, nomination, Patrick Shanahan, President Donald Trump, Rep. Mark Green, Secretary of Defense, Secretary of the ArmyLeave a comment
McConnell Readies Senate Confirmation Votes for 4 Appeals Judges
Senate Republicans are heading into four votes this week to confirm appeals court judges. Majority Leader Mitch McConnell served notice late last week that the Senate will consider four of President Donald Trump's nominees to federal circuit courts, the powerful appeals panels that give the final word on the overwhelming…
Newsconfirmation, judges, Mitch McConnell, nomination, Senate Majority Leader, US SenateLeave a comment
Texas Supreme Court Judge Don Willett Nominated to the 5th Circuit Court of Appeals
September 30, 2017 September 29, 2017 Admin
Outspoken conservative and Texas' official Tweeter Laureate Justice Don Willett was nominated to the join the federal bench as a Circuit Judge on the U.S. Court of Appeals for the Fifth Circuit by the Trump Administration, the White House announced Thursday. Upon hearing the nomination was made public, Judge Willett took to…
News@JusticeWillett, 5th Circuit Court of Appeals, nomination, President Donald Trump, SCOTUS, Supreme Court, TwitterLeave a comment


text:
Vogelsong says he wasn't comfortable with Astros
By Evan Drellich on January 23, 2015 at 5:44 PM
Righthander Ryan Vogelsong seemed to leave more questions than he answered Friday, when he said he was uncomfortable with "what was going on" with the Astros, who were courting him. Vogelsong instead signed with his old team, the Giants.
Here's what Vogelsong had to say about the Astros and his decision in a conference call to re-introduce him to the Giants.
Well, I'm assuming you're talking about Houston right? I made a visit to Houston and met with A.J. Hinch the manager and the staff, the training staff, and I took a physical — just as the process went along here, really wasn't comfortable with what was going on. Ultimately, made a decision to come back with the Giants and I'm really just really happy to be back and glad things worked out the way they have.
We've had conversations with the Giants all through the offseason. Some a little bit more in depth than others. You know, some just check in and see where we were at, and some of us calling them to see where they were at. Talks did intensify here in the last week. It came down to decision time. I thought at the beginning, I thought Houston might be an intriguing place, but after going down there and meeting with people, you know I had great meetings with them, ultimately my decision, I felt I needed to be back in San Francisco.
Ultimately, you know, when a decision came down everything kept leading me back to San Francisco. And honestly, I think it's just, it's just where I'm supposed to be. And stuff happens for a reason. And you know, you guys know that I'm a big believer, and I just believe that, you know, that a lot of things have happened this offseason that make me a Giant. … We couldn't be happier about it.
You know how things are in life sometimes. You just have weird inclinations about things and things show themselves to you in weird ways and that's kind of the way it was here. Like I said before, I made a trip to Houston but ultimately it just wasn't comfortable and I wasn't comfortable there. It's crazy: as soon as I re-engaged with the Giants, it was like a big weight was lifted off my shoulders, and that was where I was supposed to be, and it kind of hit the ground running from there. Like I said, it's just kind of weird how things work themselves out.
I've learned through the years, not just dealing with contract negotiations, but also as a player, sometimes patience is the best thing. It might be a little bit easier for me because I'm not looking to make the most money and I'm not looking to have my ego stroked, so to speak, like some other guys might be. So I'm just patient, and I just kind of listen to what everyone has to say and try make the best decisions possible. Like I said, it just seemed like the way things were happening this offseason, the roads kept leading back to here. I mean, I also have a wife that loves San Francisco and loves the fans and got her chirping in my ear every two seconds about re-signing with the Giants so that always helps them on their side. It's, like I keep saying, it almost seems like that this offseason was some divine intervention going on that led me back, back to those guys.
Some things happened that I just weren't comfortable with and negotiations kind of broke down after that. Once that happened it was time to move on.
Evan Drellich


text:
Q: How to trigger an email when sonarqube code analysis report is generated? I am looking for an overall code analysis report after running the sonarqube code review. Everytime I trigger the sonarqube analysis through maven. Hence I need some automatic reporting which can be sent through a notification.  Please advise?

A: Suggest to use Jenkins to run your Sonar analysis and Jenkins post build actions will allow you to send report

redpajama_set_name: RedPajamaStackExchange


text:
In teoria dei grafi si dice multidigrafo euleriano un multidigrafo
connesso, privo di cappi e dotato di un cammino euleriano, cioè di un
cammino che tocca tutti i suoi archi una e una sola volta.

Problema dell'individuazione di cammini euleriani

Si pone il problema di stabilire se un multidigrafo possiede un cammino
euleriano o meno. Questo problema può risolversi abbastanza agevolmente attraverso un algoritmo
che costituisce una variante dell'algoritmo individuato da Eulero per individuare
cammini euleriani sui multigrafi (v. Multigrafo euleriano e Problema dei ponti di Königsberg).

Ricordiamo preliminarmente che per un qualsiasi multidigrafo la somma dei gradi uscenti
dei suoi nodi coincide con la somma dei loro gradi entranti.
Infatti ogni arco contribuisce con l'aggiunta di una unità a ciascuna di queste somme.

Conviene inoltre distinguere tre tipi di multidigrafi connessi:
Tipo 0: multidigrafi aventi tutti i nodi con grado entrante e grado uscente uguali.
Tipo 1: multidigrafi aventi tutti i nodi con grado entrante e grado uscente uguali, con l'eccezione di due: il primo di questi, che denotiamo con s (sorgente), ha il grado uscente uguale al grado entrante aumentato di 1; il secondo, che denotiamo con i (inghiottitoio), ha il grado uscente uguale al grado entrante diminuito di 1.
Tipo 2: multidigrafi rimanenti caratterizzati da maggiori differenze fra gradi entranti e uscenti.

Multidigrafi di tipo 0

Proposizione 1   Un multidigrafo che possiede un circuito euleriano ha
tutti i nodi con grado entrante e grado uscente uguali.

Dimostrazione    Consideriamo un multidigrafo M ed un suo circuito euleriano
che consideriamo inizi e termini nel nodo q. I gradi entranti e uscenti dei nodi di M
si possono ottenere sommando i contributi dei nodi che si incontrano percorrendo
il circuito a partire da q, nodi che si possono incontrare più volte.
Il contributo di ogni nodo aumenta di uno sia il suo grado uscente che il suo grado entrante.
QED

Proposizione 2   Un multidigrafo che
ha tutti i nodi con grado entrante e grado uscente uguali possiede un circuito euleriano.

La dimostrazione di questo fatto è costruttiva e viene fornita dal
seguente algoritmo.

Algoritmo Dato un multigrafo M i cui nodi presentano grado entrante e grado
uscente uguali, costruire un suo circuito euleriano.

Procedimento

In una prima fase si sceglie un nodo di partenza s qualsiasi e da questo si costruisce
un circuito iniettivo sugli archi tenendo conto di tutti gli archi utilizzati.
Dal nodo di partenza s si sceglie ad arbitrio un arco uscente.
Giunti in un nodo, se questo coincide con s la prima fase è conclusa; in caso contrario
vi è sicuramente almeno un arco uscente non ancora utilizzato per l'uguaglianza dei suoi gradi
e per il fatto che si sono utilizzati k dei suoi archi uscenti e k+1 degli entranti:
quindi si può estendere il cammino iniettivo sugli archi.

Si possono poi avere fasi successive nelle quali il circuito individuato C viene esteso.
Queste fasi di estensione si concludono quando i nodi del circuito C non hanno più archi
entranti o uscenti inutilizzati. Se un nodo p presenta un arco uscente si inizia
con questo ad individuare un nuovo circuito C' costituito dagli archi rimanenti. Si procede
come nella prima fase giungendo in qualche passo ad un nodo toccato da C: se questo è il
nodo di ripartenza p C' è concluso, in caso contrario il cammino iniettivo può proseguire
con un arco uscente che deve essere ancora disponibile. Quando accanto a C è stato individuato
il circuito C' con almeno un nodo in comune con C, si ottiene un circuito iniettivo più
esteso percorrendo a partire dal nodo in comune prima un circuito poi l'altro.
Questi processi di estensione possono procedere fino alla individuazione di un intero circuito
euleriano. QED

A questo punto si può affermare che i multidigrafi con circuiti euleriani sono tutti e soli i multidigrafi connessi i cui nodi hanno grado entrante e grado uscente uguali.

Multidigrafi di tipo 1

Proposizione 3   Un multidigrafo di tipo 1 possiede un cammino euleriano.

Dimostrazione costruttiva   Consideriamo un multidigrafo con un nodo sorgente s
e un nodo inghiottitoio i. Si osserva che aggiungendogli un arco da i ad s lo si trasforma
in un multidigrafo di tipo 0. Su di esso quindi si riesce ad individuare un circuito euleriano
che comprende l'arco (i,s). Si individua quindi un cammino euleriano sul multidigrafo dato
il quale, come prevedibile con considerazione sui gradi, inizia nel nodo sorgente e
finisce nel nodo inghiottitoio. QED

Proposizione 4   Un multidigrafo che possiede un cammino euleriano è di tipo 1.

Dimostrazione   Se si calcolano le sequenze dei semigradi entrante e uscente
relative ai nodi disposti in un qualche ordine procedendo sugli archi del cammino
si ottengono gradi entranti e uscenti uguali ad eccezione del nodo iniziale con grado uscente
maggiore di 1 del grado entrante e del nodo finale con grado uscente inferiore di 1
del grado entrante. QED

A questo punto si può affermare che i multidigrafi con cammini euleriani non chiusi sono tutti e soli i multidigrafi connessi di tipo 1.

Multidigrafi di tipo 2

Per semplice esclusione, si trova che un multidigrafo connesso non possiede cammini euleriani
se e solo se è di tipo 2.

Osservazioni

Le proprietà che si sono dimostrate caratteristiche rispettivamente dei multidigrafi
con circuiti euleriani, con cammini euleriani non chiusi e privi di cammini euleriani
sono facilmente ottenibili per ogni definizione dei multidigrafi che risulti
praticabile. Anche i procedimenti costruttivi dei circuiti e dei cammini euleriani
sono implementabili in modo efficiente, sostanzialmente con tempi di elaborazione
proporzionali al numero degli archi dei multidigrafi.

Il problema della individuazione di circuiti o di cammini euleriani di un multigrafo
riguarda configurazioni globali che risulta facile individuare: infatti per questo
si sono rivelati sufficienti calcoli e scelte riguardanti i singoli nodi e gli archi
che li riguardano, cioè elaborazioni puntuali.

È utile osservare anche che i problemi riguardanti i cammini hamiltoniani, cioè
configurazioni globali relative a grafi o digrafi (e non multigrafi e multidigrafi) a prima vista simili ai cammini euleriani, in effetti
sono molto più impegnativi dal punto di vista delle elaborazioni e molto meno definiti
dal punto di vista delle caratterizzazioni generali.

Voci correlate
Multigrafo euleriano
Grafo hamiltoniano

Teoria dei grafi
Algoritmi


Rooms at Sleepbox, inside Sheremetyevo International Airport, can hold a maximum of three bunk beds for people traveling in groups. Bedside tables with electrical outlets and reading lamps are provided, as are TVs and, critically, alarm clocks.
In Terminal 4 of London's Heathrow Airport and in the South Terminal of the city's Gatwick airport, Yotel offers either single or double beds, entertainment systems, and en suite bathrooms with rainfall showers. (Body wash and towels are provided.) For just $39, the room is yours for four hours. A full night goes for $93.
Snoozecube operates small, soundproof rooms at Dubai International Airport where travelers can power down and rest up. Starting at just $16 an hour, travelers have access to a twin bed, a touch screen TV, and Wi-F—as well as a nature-inspired mural to brighten up each pod.
The self-contained pods at Munich Airport come complete with blinds for privacy, a full bed for resting, and a work space if all you're seeking is the necessary peace and quiet to be productive. In-pod flight information boards keep you up-to-the-minute on schedule changes.
The name says it all at New Delhi's Indira Gandhi International Airport, where Snooze at My Space offers self-contained pods that provide a $10-an-hour respite from the terminal—as well as plentiful power plugs, TV, and included Wi-Fi.


Autobarn are a VW, Audi, SEAT & Skoda specialist garage in Buckinghamshire. We offer a full range of car services and all Autobarn vehicle services use genuine or OE quality Volkswagen, Audi, Seat, Skoda parts including oils.
Manufacturers warranty completely protected. Service schedules followed and only genuine original parts used.
You can book your MOT test with us for £48 and we price match recommended MOT repairs within 20 miles. See T&C's.
Using ODIS with our online licenced security pass we can code keys, ECU's and instrument clusters.
Your air-conditioning system needs regular checks and maintenance just like other components of the car.
At Autobarn we can supply and fit almost any tyre the same day.
How did you hear about us? Google Bing Yahoo Instagram Facebook Twitter LinkedIn A friend/colleague Already a customer Another source How did you hear about Autobarn?
Enter your enquiry here including details of any booking you wish to make and your vehicle registration number.
Please let us know if you would like to receive further information from Autobarn.
Not at this time, thank you Yes please, I'd like to opt-in to receive news and offers Would you like to receive further information from Autobarn?


text:
Legal update on business law reform - March 2015
Jan Etwell, Mark Odlin, Susie Kilty
Securities law reform
The Financial Markets Conduct Act 2013 (FMC Act) was (almost) fully implemented on 1 December 2014, together with its associated secondary legislation, the Financial Markets Conduct Regulations 2014 (FMC Regulations). (There are some provisions that are still to come into force, but these are limited to alternative securities markets – Unlisted and Sharemart.)
The FMC Act has replaced the Securities Markets Act 1988 and other legislation relating to the financial markets. The Securities Act 1978 (Securities Act) has been repealed, but will continue in force until December 2016 in a transitional regime contained in the FMC Act. The effect of this is that for the time being there will be two regimes in force, until market participants fully transition to the new FMC Act.
During the course of 2015 we can expect to see the remaining provisions of the FMC Act brought into force. This should give clarity as to the position of Unlisted and Sharemart, and their regulatory treatment in comparison with NZX's NXT market, which has regulatory approval and is expected to go live later this year.
Market participants will need to transition to the new legislation, with such steps obtaining fund manager licences from the Financial Markets Authority (FMA) and moving to the new offering documents.
During March 2015 the FMA published a consultation paper setting out proposals for class exemptions under the FMC Act which it intends to work on during 2015. The FMA's exemption powers under the FMC Act operate in a similar manner to those under the Securities Act, and the publication of the consultation paper and the intention to develop and grant class exemptions suggest that the FMA may be minded to exercise its exemption powers in a similar manner.
FMC Act in final form
FMC Regulations in final form
FMA's consultation paper on proposed class exemptions
Companies and limited partnerships rule changes
The Companies Act 1993 and Limited Partnerships Act 2008 have been amended to strengthen the rules applying to the governance, registration and reconstruction of companies and the registration of limited partnerships.
The amendments received the Royal Assent on 2 July 2014 as the Companies Amendment Act 2014 and the Limited Partnerships Amendment Act 2014.
These changes have mostly now come into force, and have been summarised in our earlier updates.
The remaining provisions to come into force are the residency requirements for directors being added to the Companies Act, which are scheduled to come into force on 1 May 2015 (with an additional six month grace period for existing companies).
Australia has been designated as an "enforcement country" for this purpose, so when the new requirements come into force companies must have at least one director who is resident in New Zealand or who is resident in Australia and a director of a company registered in that country. As at the date of this update no other countries have been designated as "enforcement countries".
Buddle Findlay's legal update - February 2014
Companies Amendment Act 2014
Companies Amendment Act 2014 Commencement Order 2014
Companies Act 1993 Amendment Regulations (No 2) 2014
Limited Partnerships Amendment Act 2014
Limited Partnership Amendment Act 2014 Commencement Order 2014
On 11 September 2013 the Law Commission released its report Review of the Law of Trusts.
The report recommends the passing of a new Trusts Act, to replace the current Trustee Act 1956. The report recommends that the new Act should expressly set out trustees' duties, obligations regarding the provision of information to intermediaries, and rules regarding investment.
In March 2014 the Government formally responded to the Law Commission's recommendations, agreeing with the Law Commission's recommendation for a new Trusts Act.
The Ministry of Justice is currently reviewing the Law Commission's proposals, and it remains to be seen when a draft Bill will be released for consultation.
The Minister's statement on 17 February 2015 of the Law Commission's work priorities for this year did not include the law relating for trusts, suggesting that this will not be an immediate priority.
Law Commission report
February 2015 press release from the Minister of Justice
Cartel criminalisation
The Government has proposed criminalising 'hard-core' cartel conduct in New Zealand.
The Commerce (Cartels and Other Matters) Amendment Bill has had its Second Reading, and the Bill is now Number 11 on the most recent Order Paper, and is awaiting the Committee stage.
The Commerce Commission consulted the market during August 2014 on its revised draft Competitor Collaboration Guidelines, which the Commission is preparing in anticipation of the Bill becoming law.
Commerce (Cartels and Other Matters) Amendment Bill
Draft Competitor Collaboration Guidelines, as prepared by the Commerce Commission
Fair Trading – unfair contract terms
The Fair Trading Amendment Act 2013 (Amendment Act) amended the Fair Trading Act 1986.
Most of the provisions in the Amendment Act had previously come into force, other than the provisions relating to unfair contract terms (UCTs), which came into force on 17 March 2015.
The UCT provisions apply to consumer contracts which are standard form contracts, as defined in the Amendment Act. If a term in a standard form contract is found to be "unfair" (again as defined according to statutory tests in the Amendment Act) then that term will have to be removed from contracts and will not be able to be relied on or enforced.
The UCT provisions came into force on 17 March 2015, with the Commerce Commission confirming in a statement that it did not intend to provide a grace period for businesses, as the changes had been signalled over a lengthy period.
The Commerce Commission's media release mentioned "rollover" clauses and other provisions that may have the effect of reducing competition as particular concerns.
The Fair Trading Amendment Act 2013
The Commerce Commission's guidance on the UCT provisions
Media release by the Commerce Commission of 16 March 2015
Credit laws
The Credit Contracts and Financial Services Law Reform Bill was introduced to strengthen and consolidate the suite of legislation that governs consumer credit contracts.
In particular, the Bill introduces responsible lending requirements to the Credit Contracts and Consumer Finance Act 2003 (CCCFA), in addition to strengthening existing provisions so that borrowers are better informed and protected.
The Credit Contracts and Consumer Finance Amendment Act 2014 received the Royal Assent on 6 June 2014.
On March 17 2015 officials published the Responsible Lending Code, which is intended to assist lenders in complying with their new obligations, and confirmed the scheduled commencement date for the new provisions of 6 June 2015.
New requirements under the CCCFA were also published during March 2015, in the form of the Credit Contracts and Consumer Finance Amendment Regulations 2015. These regulations cover matters such as the information that lenders must publish regarding costs of borrowing and minimum repayments.
Buddle Findlay have been working to update clients on these new obligations, and will publish a separate update on the full suite of CCCFA changes.
Credit Contracts and Consumer Finance Amendment Act 2014
Responsible Lending Code
Credit Contracts and Consumer Finance Amendment Regulations 2015
In this Insight
Legal update on business law reform - February 2014
What's it about? The Financial Markets Conduct Act 2013 (FMC Act), and its associated regulations, will replace the Securities Act 19…
Jan Etwell
Susie Kilty


text:
Paul Questions Trump Candidacy
Speaking to CNN, U.S. Sen. Rand Paul, R-Ky., questioned if birther, carnival barker, reality TV star and real estate mogul Donald Trump is a serious presidential candidate.The freshman Senator was reacting to his father, U.S. Rep. Ron Paul, R-Tx., announcing a third bid for president, but was skeptical if Trump was actually running."I think it's hard for an entertainer or comedian to be treated seriously and that's the big hurdle he will have to overcome," Paul said. "We'll let the public decide that, but I'd say he does have quite a few hurdles to overcome to be taken seriously."UPDATE:During the broadcast, Paul points out his father has won 11 federal elections as a congressman, but Trump hasn't won any. And he gives a warning to Tea Party voters that Trump has—dun, dun, dun—contributed to Democratic candidates.Here's the video. Go to 4:00.
News President Barack ObamaU.S. Senator Rand Pauldonald trump
Sweet Lady Is On Fire With New Single
Six Months After Capitol Riot, 46 From Ohio Valley Face Charges
Trump Continues To Push Election Falsehoods. Here's Why That Matters
Mapping The Ohio Valley Residents Charged In Connection With U.S. Capitol Riot
McConnell Says Trump Caused Insurrection, But Votes To Acquit Anyway


Good post from Ricky Schaede on how to write female protagonists who the reader will be glad to read about over and over. I highly recommend it. Writing Strong Female Protagonists.
2. Lots of characters face conflict because they are late for their engagements. What about a character who is always early? How can being early create conflict?
3. What's the worst that could happen during a nice afternoon chat?
4. Many fight scenes with dozens of combatants occur in a bar or tavern. So, what if a crowd of "normal" people got into fisticuffs in a more unusual place? A museum. An auction house. An observatory. The Louvre. The nearest Village Inn. A train station. Anyplace where you're not expecting to step on someone's recently dislodged tooth.
5. How would a big battle scene change in the transition between night and day? Whether they're fighting at sunrise or sunset, think about the changes of mood, the tactics each side would switch over to, the soldiers having to adapt to the new environment. Contrast the features of nighttime combat and daytime combat as much as possible.
Hope these are of some use to you. Thanks for your time!
Well, for the first time in my life as a writer, I have officially been interviewed. Rob Killam, good friend and zombie connoisseur extraordinaire, has just had our exchange posted to the Pikes Peak Writers blog. Check it out! It is about my pitch appointment with a literary agent at the PPWC, and I'm glad Rob decided to interview me about it.


Partners involved: UL (WP leader), DTU, TUB, Micronit.
Successful application of MBR technology should rely on maximizing the exploitation of the flexibility and the capabilities of the MBR platform to deliver information-rich experiments on one hand, and on extracting as much information as possible from the obtained experimental data on the other hand. In practice, this can be achieved by coupling advanced mathematical data interpretation to the MBR experiments. This WP is therefore devoted to technologies that support MBR development.
Cultivations (WP6) and biocatalysis processes at microscale (WP7) will be described by mechanistic models of reactor systems both based on ordinary differential equations (ODEs) or partial differential equations (PDEs), and will specifically be based on the modeling of S. cerevisiae batch and continuous. Based on an existing Matlab toolbox, the application of uncertainty and sensitivity analysis for this model will be implemented with the aim to propose adjustments to the operation and the data-collection of the experimental set-up.
Furthermore, software sensors will be developed for the MBR platforms, to extend the number of variables for which on-line information is available. The two chemometric methods principal component analysis (PCA) and partial least squares (PLS) regression are commonly applied together with spectroscopic data (WP8) and process data (WP6), and will be used to predict variables such as biomass concentration and substrate concentration which are usually difficult to measure.
An analysis of fluid dynamics, transport phenomena and reaction kinetics will be developed for different enzyme-catalyzed processes within microstructured devices (WP7) and analyzed by on-line monitoring with optical nano- sensor particles (WP8).
A CFD modelling of biocatalytic conversions within a MBR will be investigated (WP6). The possibilities for either phenomenological or empirical modelling of the particle/surfaces/microorganisms-interactions (WP6 and WP8) will be evaluated. Validation of the CFD simulations will be based on a micro Particle Image Velocimetry and Confocal Laser Scanning Microscopy, enabling to analyse specific growth/production patterns at the microscale.
Methods for Design of Experiments (DoE) will be incorporated in software such as MatlabTM, and on coupling these on-line to the MBR platform (WP6). The final goal is to demonstrate the ability of exploiting continuous culture MBRs with S. cerevisiae in a DoE, for example to characterize the design space of the process (WP6).


text:
April 17, 2017 Millennial
Check out these recent articles from around the web:
I told Paul Ryan what it's like to be poor. I wonder if he remembers me now. by Tianna Gaines-Turner: "The structural changes Ryan envisions — sometimes referred to as "per capita caps" or "block grants" — are actually budget cuts that will devastate the safety net and harm families like mine."
Fox serves up a fetid reminder that when you're a star, you can still do anything by Michael Gerson: "A certain kind of Fox viewer will never find this persuasive. They think that boys will be boys, and men should be manly, and opponents are snowflakes, and women should just learn to lump it or leave. But it is hard for me to imagine how Christian conservatives — a major Fox demographic — could avoid choking on such rotted values. The way that women are treated in the workplace — or at home, or anywhere else — should reflect a belief in human equality and a commitment to human dignity. And the proper reaction when reading about the cases of O'Reilly and Ailes is revulsion."
Is it time for a dramatic flourish from U.S. bishops on immigration? by John Allen: "Suppose it wasn't just one cardinal who led brother bishops in celebrating a Mass at the border. Suppose it was all six residential cardinals in the United States – Timothy Dolan of New York, O'Malley of Boston, Donald Wuerl of Washington, Joseph Tobin of Newark, Daniel DiNardo of Galveston-Houston, and Blase Cupich of Chicago? Suppose, too, the cardinals were joined by a good chunk of the archbishops who lead the other 30 dioceses in the United States – Archbishop Charles Chaput of Philadelphia, for instance, and William Lori of Baltimore, not to mention the indispensable voice in American Catholicism on this issue, Archbishop Jose Gomez of Los Angeles?"
End the death penalty for mentally ill criminals by Bob Taft and Joseph E. Kernan: "Legislators in six states — Indiana, Ohio, South Dakota, Tennessee, Texas and Virginia — have proposed legislation to prohibit the death penalty for individuals with severe mental illness. As former governors of states that are grappling with this issue, we strongly support this effort to end an inhumane practice that fails to respect common standards of decency and comport with recommendations of mental-health experts."
Trump's failing presidency has the GOP in a free fall by Michael Gerson: "Republicans got an administration that is morally small. Trump's proposed budget would require massive cuts in disease research, global development and agricultural programs — just as a famine gathers a hideous strength. The proposed budget practices random acts of gratuitous cruelty."
To Advance Justice, Catholics Should Make More Allies by Matthew Tyson: "American Catholics could stand to learn a thing or two from anti-surrogacy movement in Europe. Let's make allies, not enemies."
The Charism of Infertility written by Timothy O'Malley: "It is precisely the charism of the infertile couple in the Church to remind us that the fundamental end of marriage is not reproduction at all costs. Rather, it is the giving over of the entire life of the couple to God."
'Common security' must trump 'national security,' Cardinal says by Cindy Wooden: "To combat a fear of migrants or the fear that they may impinge on the security and economic well-being of their host communities, the cardinal said Catholics must foster a "point of encounter" with migrants based on "our common humanity, our common aspiration for fullness of life, and hopefully this will lead to a common commitment to fight the globalization of indifference and to promote integral development for all human beings.""
Catholics to open climate march with Mass, prayer, Capitol Hill visits by Dennis Sadowski: "Catholics participating in the Peoples Climate Movement march in the nation's capital will be able to pray at a Mass and visit their representatives on Capitol Hill as part of two days of activities."
The United Airlines debacle isn't about customer service. It's about the morality of capitalism. by James Martin: "What is the solution, then, to a system that gave rise to such treatment? To recognize that profits are not the sole measure of a good decision in the corporate world. To realize that human beings are more important than money, no matter how much a free-market economist might object. To act morally. And to respect human dignity."
'Mother of All Bombs' reminds us that America is still at war in Afghanistan by Gayle Tzemach Lemmon: "That war needs more: more attention, more discussion, more understanding of the strategy in play and the desired end. And, above all, more context. We don't have the luxury of tuning out our fights. And even if we did, we shouldn't."
French presidential hopeful slams Pope Francis for welcoming migrants by Josephine McKenna: "France's National Front presidential candidate, Marine Le Pen, slammed Pope Francis for welcoming migrants and attacked the Catholic Church for meddling in French politics."
Both sides on abortion debate ponder if pro-lifers can also be feminists by Julie Asher: "Like Murphy, the other two pro-life panelists, Cessilye Smith of Doulas for Life and Destiny Herndon-De La Rosa of New Wave Feminists, also strongly emphasized a consistent life ethic that opposes abortion and all threats to life."
This entry was posted in Around the Web. Bookmark the permalink.
Millennial of the Year 2019: Joshua Wong millennialjournal.com/2020/01/21/mil… https://t.co/tow2HsKY3x 17 minutes ago


This study was guided by three specific objectives namely; to estimate the impact of feeder roads in improving household income, assess the challenges encountered in the feeder roads maintenance and explore the strategies to engage in improving the feeder roads in Wakiso District. In data collection, the researcher adopted a cross section research design. Questionnaires were used for data collection. The population for the study comprised of household heads in villages of Namayumba Subcounty namely Bembe, Gobero, Luwano and Muguluka. A sample size of 60 respondents was used and a response of 50 was realised, representing 83% of the targeted sample size was realised. The analysis was carried out and the results indicated that participation by men was nearly thrice that of women and participation in the study was highest by individuals in the 31-40 years age group Impacts of feeder roads were presented and discussed with sampled households and the results show improvement in transportation of produce to the market outlets, this was felt mainly in Gobero village (42%) relatively to the other villages and improved access to schools as a result of the feeder roads was highest in Gobero (32%) and lowest in Luwano (22%) and Muguluka (22%) villages. In line with the results of the study, it can be concluded that the Rehabilitation and construction of feeder roads is a means to improving access to markets and basic social services (education and health). The results also underscore the importance of feeder roads promoting rural households income, access to and participation in markets.


Though it's a sequel in-name-only to Donnie Yen's 2005 cops and robbers film, Kill Zone 2 proves superior to its predecessor, thanks to straightforward storytelling that ultimately benefits its fight sequences.
Hong Kong police detectives investigating a series of missing persons cases discover an operation much more nefarious when one of its undercover operatives gets caught in a kidnapping sting gone awry. Following the melee that left the attempted abduction victim in a coma, previously undercover Detective Kit (Wu Jing) wakes up as a hostage in a Thai prison, completely cut off from support and uncertain of his fate with the coolly brutal Warden Ko (Zhang Jin), but a seemingly sympathetic prison guard, Chatchai (Tony Jaa).
Back in Hong Kong, Chan's comrades — which includes his Uncle Wha (Simon Yam) — are trying to piece together what went wrong during the shootout and determine the identity of the man the kidnappers were after. Eventually, the victim's brother reveals himself as the head of the human trafficking ring and makes a simple offer to Detective Wah – turn over his brother and he will allow Wah's nephew to live. With time running out, Kit's only hope for escape ultimately rests with Chatchai, who has his own reasons for wanting to keep Kit alive.
Although Kill Zone 2 is billed as a sequel to Donnie Yen's 2005 film Kill Zone, it's a follow-up merely in its loose adherence to the Chinese astrological reference in the latter's original language title (two of the actors return as well, but play totally different characters). Knowing the reference doesn't provide any real insights into either film, however, which explains why a more faithful English translation was abandoned in favor of one so inelegant, but ultimately more marketable.
Even without trading on the previous film's name brand (and possible confusion with a first-person shooter game), Kill Zone 2 has plenty of draw, primarily with the casting of Thai martial arts powerhouse Tony Jaa, who thrilled audiences in films like Ong Bak and its sequels, but then took a short break to pursue more spiritual needs. He's back in fine form here, bringing not just the requisite physical prowess, but a soulful sincerity that's needed to portray a father trying to save his daughter from terminal cancer. His performance, along with Wu's, grounds an otherwise contrived and predictable plot element.
The first film also suffered from overly dramatic storytelling, but there's a smarter balance in this second outing, mainly because it doesn't keep hitting you on the head with the situational melodrama. Instead, straightforward characterization and solid cast performances provide the motivational throughline for some thrillingly executed (and award winning) martial arts sequences. After the disappointment that was Ip Man 3, it's nice to see a Chinese action movie can still get some things right.
Framed at 2.40:1 and presented in 1080p with the AVC codec, the transfer features solid black levels, accurate contrast levels, and nicely saturated color. As with other Well Go titles, the film can have a somewhat digitized appearance, but this won't likely be an issue for most viewers.
Dialogue in the Chinese and Thai 5.1 DTS-HD MA audio track is consistently crisp and clear. Surround channel activity is at times aggressive, with directional fight effects and film score cues making up the bulk of the material. LFE sounds deep and robust.
The extras mostly consist of promotional materials.
Well Go USA delivers a solid high definition presentation for its latest Chinese action flick featuring popular Thai martial artist Tony Jaa, fighting alongside some veteran Hong Kong stars. The bonus material is perfunctory, but the feature should elicit repeat viewings, particularly for fans of the genre.


text:
// Classes for allocating XLA literals in device memory and managing handles
// that refer to them.

#ifndef TENSORFLOW_COMPILER_XRT_KERNELS_XRT_STATE_OPS_H_
#define TENSORFLOW_COMPILER_XRT_KERNELS_XRT_STATE_OPS_H_

#include <functional>
#include <memory>
#include <string>

#include "tensorflow/compiler/tf2xla/literal_util.h"
#include "tensorflow/compiler/tf2xla/shape_util.h"
#include "tensorflow/compiler/tf2xla/type_util.h"
#include "tensorflow/compiler/xla/client/local_client.h"
#include "tensorflow/compiler/xla/layout_util.h"
#include "tensorflow/compiler/xla/literal.h"
#include "tensorflow/compiler/xla/status_macros.h"
#include "tensorflow/compiler/xla/statusor.h"
#include "tensorflow/compiler/xla/xla_data.pb.h"
#include "tensorflow/compiler/xrt/xrt.pb.h"
#include "tensorflow/compiler/xrt/xrt_device.h"
#include "tensorflow/compiler/xrt/xrt_memory_manager.h"
#include "tensorflow/compiler/xrt/xrt_state.h"
#include "tensorflow/core/common_runtime/dma_helper.h"
#include "tensorflow/core/framework/op_kernel.h"
#include "tensorflow/core/framework/resource_mgr.h"
#include "tensorflow/core/framework/tensor.h"
#include "tensorflow/core/framework/tensor_shape.h"
#include "tensorflow/core/framework/types.pb.h"
#include "tensorflow/core/lib/core/errors.h"
#include "tensorflow/core/lib/core/refcount.h"
#include "tensorflow/core/lib/core/status.h"
#include "tensorflow/core/lib/gtl/cleanup.h"
#include "tensorflow/core/platform/types.h"

namespace tensorflow {

// Helper functions for templated ops.
class XRTStateHelpers {
 public:
  // The Status return value allows us to use the
  // TF_ASSIGN_OR_RETURN macro, which doesn't work within the body of an
  // OpKernel::Compute method.
  static Status MakeLiteral(const xla::LiteralProto& proto,
                            xla::Literal* literal) {
    TF_ASSIGN_OR_RETURN(*literal, xla::Literal::CreateFromProto(proto));
    return Status::OK();
  }

  // ParseTupleNode is the recursive function used to parse a recursive
  // xrt::XLATupleNode proto and generate the xla::Shape of the 'spine' i.e. the
  // tuple shape where every leaf is an existing allocation. As a side-effect it
  // fills in input_vector by looking up allocations from handles in the
  // input_tensor_list as they are referenced by nodes in the proto.
  static Status ParseTupleNode(
      const xrt::XLATupleNode& tuple_node, const OpInputList& input_tensor_list,
      std::vector<XRTTupleAllocation::ExpandedTupleInput>* input_vector,
      xla::Shape* shape, ResourceMgr* rm) {
    if (tuple_node.tuples_size() > 0) {
      // This is an internal node in the proto so descend recursively.
      xla::Shape dummy = xla::ShapeUtil::MakeShapeWithType<float>({});
      std::vector<xla::Shape> subshapes(tuple_node.tuples_size(), dummy);
      *xla::ShapeUtil::GetMutableSubshape(shape, {}) =
          xla::ShapeUtil::MakeTupleShape(subshapes);
      for (int i = 0; i < tuple_node.tuples_size(); ++i) {
        TF_RETURN_IF_ERROR(ParseTupleNode(
            tuple_node.tuples(i), input_tensor_list, input_vector,
            xla::ShapeUtil::GetMutableSubshape(shape, {i}), rm));
      }
    } else {
      // This is a leaf node in the proto so look up the referenced input.
      int input_index = tuple_node.input_index();
      if (input_index < 0 || input_index >= input_vector->size()) {
        return errors::InvalidArgument("Invalid tuple input index ",
                                       input_index, ": MakeTuple has ",
                                       input_vector->size(), " inputs.");
      }
      bool release_this_input = tuple_node.release_input_handle();
      XRTTupleAllocation::ExpandedTupleInput& input =
          input_vector->at(input_index);
      if (input.allocation != nullptr &&
          (input.release_allocation_after_use || release_this_input)) {
        return errors::InvalidArgument(
            "Invalid tuple tree: input index ", input_index,
            " is repeated but release_input_handle is true.");
      }
      if (input.allocation == nullptr) {
        // We haven't dereferenced this handle yet.
        TF_RET_CHECK(
            TensorShapeUtils::IsScalar(input_tensor_list[input_index].shape()));
        int64 key = input_tensor_list[input_index].scalar<int64>()();
        TF_ASSIGN_OR_RETURN(input.allocation,
                            XRTMemoryManager::Get(rm)->Lookup(key));
        input.release_allocation_after_use = release_this_input;
      }
    }
    return Status::OK();
  }

  // Parses a xrt::XLATupleNode proto recursively and returns the corresponding
  // ShapeTree where each leaf is an allocation corresponding to a handle in
  // input_tensor_list. The ordinal of one of the allocations is returned in
  // device_ordinal. Since it's not possible to specify a xrt::XLATupleNode with
  // no leaves, device_ordinal will always be filled in by a successful call to
  // ParseTupleTree.
  static Status ParseTupleTree(
      const xrt::XLATupleNode& tuple_tree_root,
      const OpInputList& input_tensor_list,
      std::vector<XRTTupleAllocation::ExpandedTupleInput>* input_vector,
      xla::ShapeTree<XRTTupleAllocation::ExpandedTupleInput>* tuple_shape_tree,
      int* device_ordinal, ResourceMgr* rm) {
    // First get the shape of the 'spine' of the new tuple, where every leaf is
    // an existing allocation. As a side-effect dereference the input handles
    // into allocations in input_vector.
    xla::Shape tuple_tree_shape;
    TF_RETURN_IF_ERROR(ParseTupleNode(tuple_tree_root, input_tensor_list,
                                      input_vector, &tuple_tree_shape, rm));
    // Make the shape tree of allocations where the shape is the spine and each
    // leaf is one of the allocations looked up in input_vector. Internal nodes
    // have nullptr allocations.
    *tuple_shape_tree = xla::ShapeTree<XRTTupleAllocation::ExpandedTupleInput>(
        tuple_tree_shape);
    tuple_shape_tree->ForEachMutableElement(
        [&](const xla::ShapeIndex& index,
            XRTTupleAllocation::ExpandedTupleInput* element) {
          if (tuple_shape_tree->IsLeaf(index)) {
            // Find the matching leaf in the proto tree.
            const xrt::XLATupleNode* tuple_node = &tuple_tree_root;
            for (int i = 0; i < index.size(); ++i) {
              tuple_node = &tuple_node->tuples(index[i]);
            }
            // Copy the appropriate input allocation to the leaf of the
            // tuple_shape_tree.
            int input_index = tuple_node->input_index();
            *element = input_vector->at(input_index);
            CHECK(element->release_allocation_after_use ==
                  tuple_node->release_input_handle());
            // We just need to know the device_ordinal of one of the
            // allocations. We will validate later that they are all the same.
            *device_ordinal = (*element).allocation->device_ordinal();
          }
        });
    return Status::OK();
  }
};

// Op that allocates memory for a literal and transfers it to the device.
template <class DeviceAccessor>
class XRTAllocateOp : public OpKernel {
 public:
  explicit XRTAllocateOp(OpKernelConstruction* ctx) : OpKernel(ctx) {}
  ~XRTAllocateOp() override = default;
  XRTAllocateOp(const XRTAllocateOp&) = delete;
  XRTAllocateOp& operator=(const XRTAllocateOp&) = delete;

  void Compute(OpKernelContext* ctx) override {
    VLOG(1) << "XRTAllocateOp::Compute";

    const Tensor& allocation_info = ctx->input(0);
    OP_REQUIRES(ctx, TensorShapeUtils::IsScalar(allocation_info.shape()),
                errors::Internal("allocation input should be a string scalar"));
    xrt::XLAAllocation allocation_proto;
    OP_REQUIRES(
        ctx,
        allocation_proto.ParseFromString(allocation_info.scalar<string>()()),
        errors::InvalidArgument(
            "Unable to parse allocation input to XLAAllocation"));

    xla::Literal literal;
    OP_REQUIRES_OK(
        ctx, XRTStateHelpers::MakeLiteral(allocation_proto.value(), &literal));

    ResourceMgr* rm;
    OP_REQUIRES_OK(ctx, DeviceAccessor::GetResourceManager(ctx, &rm));

    // We are guaranteed that the underlying device object won't be deleted out
    // from under us, while the ScopedRef is live.
    class DeviceAccessor::ScopedRef device_ref;
    OP_REQUIRES_OK(ctx, DeviceAccessor::InitScopedRef(ctx, &device_ref));

    RefPtr<XRTMemoryManager> memory_manager = XRTMemoryManager::Get(rm);
    XRTTupleAllocation* allocation;
    OP_REQUIRES_OK(ctx, XRTTupleAllocation::CreateAndTransfer(
                            literal, memory_manager.get(), device_ref.backend(),
                            device_ref.device_ordinal(), &allocation));

    Tensor output(DT_INT64, TensorShape({}));
    output.scalar<int64>()() = memory_manager->Register(allocation);
    ctx->set_output(0, output);
  }
};

// Op that allocates memory for a tensor (with optional layout) and transfers it
// to the device, returning an allocation handle.
template <class DeviceAccessor>
class XRTAllocateFromTensorOp : public OpKernel {
 public:
  explicit XRTAllocateFromTensorOp(OpKernelConstruction* ctx) : OpKernel(ctx) {
    bool make_tuple = false;
    OP_REQUIRES_OK(ctx, ctx->GetAttr("shapes", &tf_shapes_));
    OP_REQUIRES_OK(ctx, ctx->GetAttr("dtypes", &dtypes_));
    OP_REQUIRES_OK(ctx, ctx->GetAttr("make_tuple", &make_tuple));
    std::vector<int64> minor_to_major;
    if (ctx->HasAttr("layouts")) {
      OP_REQUIRES_OK(ctx, ctx->GetAttr("layouts", &minor_to_major));
    }
    OP_REQUIRES(
        ctx, tf_shapes_.size() == dtypes_.size(),
        errors::InvalidArgument("shapes and dtypes must be the same length"));
    std::vector<xla::Shape> xla_shapes;
    xla_shapes.reserve(tf_shapes_.size());
    for (int i = 0; i < tf_shapes_.size(); i++) {
      xla::Shape xla_shape;
      OP_REQUIRES_OK(
          ctx, TensorShapeToXLAShape(dtypes_[i], tf_shapes_[i], &xla_shape));
      xla_shapes.push_back(std::move(xla_shape));
    }
    if (xla_shapes.size() > 1 || make_tuple) {
      shape_ = xla::ShapeUtil::MakeTupleShape(xla_shapes);
    } else {
      shape_.Swap(&xla_shapes.front());
    }
    if (!minor_to_major.empty()) {
      xla::Shape shape_with_layouts;
      OP_REQUIRES_OK(ctx, GetShapeWithLayout(shape_, minor_to_major,
                                             /*layout_func=*/nullptr,
                                             &shape_with_layouts));
      shape_.Swap(&shape_with_layouts);
    }
  }

  ~XRTAllocateFromTensorOp() override = default;
  XRTAllocateFromTensorOp(const XRTAllocateFromTensorOp&) = delete;
  XRTAllocateFromTensorOp& operator=(const XRTAllocateFromTensorOp&) = delete;

  void Compute(OpKernelContext* ctx) override {
    VLOG(1) << "XRTAllocateFromTensorOp::Compute";

    OpInputList values;
    OP_REQUIRES_OK(ctx, ctx->input_list("inputs", &values));
    OP_REQUIRES(ctx, values.size() == tf_shapes_.size(),
                errors::InvalidArgument(
                    "Wrong number of inputs to XRTAllocateFromTensor: ",
                    values.size(), " vs. ", tf_shapes_.size()));

    std::vector<const char*> tensors_data;
    for (size_t i = 0; i < values.size(); ++i) {
      const Tensor& input_tensor = values[i];
      OP_REQUIRES(ctx, input_tensor.dtype() == dtypes_[i],
                  errors::InvalidArgument(
                      "Input tensor type and input dtype do not match"));
      // We allow the requested on-device shape to differ from the shape of the
      // input tensor, as long as they have the same number of elements.
      OP_REQUIRES(
          ctx,
          input_tensor.shape().num_elements() == tf_shapes_[i].num_elements(),
          errors::InvalidArgument(
              "Input tensor must have the number of elements specified "
              "in the matching input shape: ",
              input_tensor.shape().num_elements(), " vs. ",
              tf_shapes_[i].num_elements(), " at index ", i));
      tensors_data.push_back(
          static_cast<const char*>(DMAHelper::base(&input_tensor)));
    }
    // Use the buffer straight out of the input tensors to create the literal.
    xla::BorrowingLiteral literal =
        shape_.IsTuple() ? xla::BorrowingLiteral(tensors_data, shape_)
                         : xla::BorrowingLiteral(tensors_data.front(), shape_);
    ResourceMgr* rm;
    OP_REQUIRES_OK(ctx, DeviceAccessor::GetResourceManager(ctx, &rm));

    // We are guaranteed that the underlying device object won't be deleted out
    // from under us, while the ScopedRef is live.
    class DeviceAccessor::ScopedRef device_ref;
    OP_REQUIRES_OK(ctx, DeviceAccessor::InitScopedRef(ctx, &device_ref));

    RefPtr<XRTMemoryManager> memory_manager = XRTMemoryManager::Get(rm);
    XRTTupleAllocation* allocation;
    OP_REQUIRES_OK(ctx, XRTTupleAllocation::CreateAndTransfer(
                            literal, memory_manager.get(), device_ref.backend(),
                            device_ref.device_ordinal(), &allocation));

    Tensor output(DT_INT64, TensorShape({}));
    output.scalar<int64>()() = memory_manager->Register(allocation);
    ctx->set_output(0, output);
  }

 private:
  std::vector<TensorShape> tf_shapes_;
  DataTypeVector dtypes_;
  xla::Shape shape_;
};

// Op that takes a tuple handle input and returns a handle to a sub-tuple of the
// input.
template <bool discard_, class DeviceAccessor>
class XRTSubTupleOp : public OpKernel {
 public:
  explicit XRTSubTupleOp(OpKernelConstruction* ctx) : OpKernel(ctx) {}
  ~XRTSubTupleOp() override = default;
  XRTSubTupleOp(const XRTSubTupleOp&) = delete;
  XRTSubTupleOp& operator=(const XRTSubTupleOp&) = delete;

  void Compute(OpKernelContext* ctx) override {
    VLOG(1) << "XRTSubTupleOp::Compute";

    const Tensor& handle_tensor = ctx->input(0);
    OP_REQUIRES(
        ctx, TensorShapeUtils::IsScalar(handle_tensor.shape()),
        errors::Internal("computation input should be an int64 scalar"));
    int64 allocation_handle = handle_tensor.scalar<int64>()();

    const Tensor& subtuple_info = ctx->input(1);
    OP_REQUIRES(
        ctx, TensorShapeUtils::IsVector(subtuple_info.shape()),
        errors::Internal("tuple index input should be an int32 vector"));
    xla::ShapeIndex shape_index;
    for (int i = 0; i < subtuple_info.dim_size(0); ++i) {
      shape_index.push_back(subtuple_info.vec<int32>()(i));
    }

    ResourceMgr* rm;
    OP_REQUIRES_OK(ctx, DeviceAccessor::GetResourceManager(ctx, &rm));

    RefPtr<XRTMemoryManager> memory_manager = XRTMemoryManager::Get(rm);
    RefPtr<XRTTupleAllocation> allocation;
    OP_REQUIRES_OK(ctx, memory_manager->Lookup(allocation_handle, &allocation));

    if (discard_) {
      VLOG(2) << "Releasing handle " << allocation_handle;
      OP_REQUIRES_OK(ctx, memory_manager->Release(allocation_handle));
    }

    XRTTupleAllocation* suballocation;
    OP_REQUIRES_OK(
        ctx, XRTTupleAllocation::MakeSubBuffer(allocation.get(), shape_index,
                                               &suballocation, !discard_));

    Tensor output(DT_INT64, TensorShape({}));
    output.scalar<int64>()() = memory_manager->Register(suballocation);
    ctx->set_output(0, output);
  }
};

// Op that allocates memory for a literal and transfers it to the device.
template <class DeviceAccessor>
class XRTMakeTupleOp : public OpKernel {
 public:
  explicit XRTMakeTupleOp(OpKernelConstruction* ctx) : OpKernel(ctx) {}
  ~XRTMakeTupleOp() override = default;
  XRTMakeTupleOp(const XRTMakeTupleOp&) = delete;
  XRTMakeTupleOp& operator=(const XRTMakeTupleOp&) = delete;

  void Compute(OpKernelContext* ctx) override {
    VLOG(1) << "XRTMakeTupleOp::Compute";

    const Tensor& tuple_info = ctx->input(0);
    OP_REQUIRES(
        ctx, TensorShapeUtils::IsScalar(tuple_info.shape()),
        errors::Internal("tuple description input should be a string scalar"));
    xrt::XLATupleNode tuple_proto;
    OP_REQUIRES(
        ctx, tuple_proto.ParseFromString(tuple_info.scalar<string>()()),
        errors::InvalidArgument("Unable to parse tuple input to XLATupleNode"));

    OpInputList arg_list;
    OP_REQUIRES_OK(ctx, ctx->input_list("input_handles", &arg_list));

    // For each input, the allocation it corresponds to and a flag indicating
    // whether or not it should be released, i.e. discarded from the resource
    // manager. One ref on each allocation is owned by this vector, and freed on
    // exit.
    std::vector<XRTTupleAllocation::ExpandedTupleInput> input_vector(
        arg_list.size());
    ResourceMgr* rm;
    OP_REQUIRES_OK(ctx, DeviceAccessor::GetResourceManager(ctx, &rm));

    xla::ShapeTree<XRTTupleAllocation::ExpandedTupleInput> tuple_shape_tree;
    // device_ordinal is filled in by ParseTupleTree with the ordinal of one of
    // the allocations. It is guaranteed that there is at least on allocation in
    // any legal tree. We validate below in XRTTupleAllocation::MakeTuple that
    // all the allocations are on the same device.
    int device_ordinal;
    OP_REQUIRES_OK(ctx, XRTStateHelpers::ParseTupleTree(
                            tuple_proto, arg_list, &input_vector,
                            &tuple_shape_tree, &device_ordinal, rm));

    // We are guaranteed that the underlying device object won't be deleted out
    // from under us, while the ScopedRef is live.
    class DeviceAccessor::ScopedRef device_ref;
    OP_REQUIRES_OK(
        ctx, DeviceAccessor::InitScopedRef(ctx, device_ordinal, &device_ref));

    RefPtr<XRTMemoryManager> memory_manager = XRTMemoryManager::Get(rm);
    XRTTupleAllocation* output_allocation;
    OP_REQUIRES_OK(ctx, XRTTupleAllocation::MakeTuple(
                            memory_manager.get(), device_ref.backend(),
                            device_ref.device_ordinal(), tuple_shape_tree,
                            &output_allocation));
    RefPtr<XRTTupleAllocation> output_ptr(output_allocation);
    for (int i = 0; i < input_vector.size(); ++i) {
      if (input_vector[i].release_allocation_after_use) {
        OP_REQUIRES_OK(ctx,
                       memory_manager->Release(arg_list[i].scalar<int64>()()));
      }
    }

    Tensor output(DT_INT64, TensorShape({}));
    output.scalar<int64>()() = memory_manager->Register(std::move(output_ptr));
    ctx->set_output(0, output);
  }
};

// Op that reads a device-resident tuple to host memory and returns it as a
// literal.
template <bool discard_, class DeviceAccessor>
class XRTReadLiteralOp : public OpKernel {
 public:
  explicit XRTReadLiteralOp(OpKernelConstruction* ctx) : OpKernel(ctx) {}
  ~XRTReadLiteralOp() override = default;
  XRTReadLiteralOp(const XRTReadLiteralOp&) = delete;
  XRTReadLiteralOp& operator=(const XRTReadLiteralOp&) = delete;

  void Compute(OpKernelContext* ctx) override {
    VLOG(1) << "XRTReadLiteralOp::Compute";

    const Tensor& handle_tensor = ctx->input(0);
    OP_REQUIRES(
        ctx, TensorShapeUtils::IsScalar(handle_tensor.shape()),
        errors::Internal("computation input should be an int64 scalar"));
    int64 allocation_handle = handle_tensor.scalar<int64>()();

    ResourceMgr* rm;
    OP_REQUIRES_OK(ctx, DeviceAccessor::GetResourceManager(ctx, &rm));

    RefPtr<XRTMemoryManager> memory_manager = XRTMemoryManager::Get(rm);
    RefPtr<XRTTupleAllocation> allocation;
    OP_REQUIRES_OK(ctx, memory_manager->Lookup(allocation_handle, &allocation));

    if (discard_) {
      VLOG(2) << "Releasing handle " << allocation_handle;
      OP_REQUIRES_OK(ctx, memory_manager->Release(allocation_handle));
    }

    // We are guaranteed that the underlying device object won't be deleted out
    // from under us, while the ScopedRef is live.
    class DeviceAccessor::ScopedRef device_ref;
    OP_REQUIRES_OK(ctx, DeviceAccessor::InitScopedRef(
                            ctx, allocation->device_ordinal(), &device_ref));

    xla::Literal literal(allocation->on_host_shape());
    OP_REQUIRES_OK(ctx, allocation->ToLiteral(device_ref.backend(), &literal));
    xla::LiteralProto literal_proto = literal.ToProto();

    Tensor output(DT_STRING, TensorShape({}));
    literal_proto.SerializeToString(&output.scalar<string>()());
    ctx->set_output(0, output);
  }
};

// Op that reads a device-resident tuple to host memory and returns it as a
// literal.
template <class DeviceAccessor>
class XRTReadToTensorOp : public OpKernel {
 public:
  explicit XRTReadToTensorOp(OpKernelConstruction* ctx) : OpKernel(ctx) {
    OP_REQUIRES_OK(ctx, ctx->GetAttr("release_handles", &discard_));
    OP_REQUIRES_OK(ctx, ctx->GetAttr("dtypes", &dtypes_));
  }
  ~XRTReadToTensorOp() override = default;
  XRTReadToTensorOp(const XRTReadToTensorOp&) = delete;
  XRTReadToTensorOp& operator=(const XRTReadToTensorOp&) = delete;

  void Compute(OpKernelContext* ctx) override {
    VLOG(1) << "XRTReadToTensorOp::Compute";

    const Tensor& handle_tensor = ctx->input(0);
    // TODO(phawkins,dlibenzi): accept multiple handles (i.e., vectors, not
    // just scalars.)
    OP_REQUIRES(
        ctx, TensorShapeUtils::IsScalar(handle_tensor.shape()),
        errors::Internal("computation input should be an int64 scalar"));
    int64 allocation_handle = handle_tensor.scalar<int64>()();

    ResourceMgr* rm;
    OP_REQUIRES_OK(ctx, DeviceAccessor::GetResourceManager(ctx, &rm));

    RefPtr<XRTMemoryManager> memory_manager = XRTMemoryManager::Get(rm);
    RefPtr<XRTTupleAllocation> allocation;
    OP_REQUIRES_OK(ctx, memory_manager->Lookup(allocation_handle, &allocation));

    if (discard_) {
      VLOG(2) << "Releasing handle " << allocation_handle;
      OP_REQUIRES_OK(ctx, memory_manager->Release(allocation_handle));
    }

    // We are guaranteed that the underlying device object won't be deleted out
    // from under us, while the ScopedRef is live.
    class DeviceAccessor::ScopedRef device_ref;
    OP_REQUIRES_OK(ctx, DeviceAccessor::InitScopedRef(
                            ctx, allocation->device_ordinal(), &device_ref));

    xla::Shape shape = allocation->on_host_shape();
    int output = 0;
    Status status = xla::ShapeUtil::ForEachMutableSubshapeWithStatus(
        &shape,
        [&](xla::Shape* subshape, const xla::ShapeIndex& index) -> Status {
          if (subshape->IsTuple()) return Status::OK();

          xla::PrimitiveType xla_type;
          TF_RETURN_IF_ERROR(DataTypeToPrimitiveType(
              ctx->expected_output_dtype(output), &xla_type));
          if (xla_type != subshape->element_type()) {
            return errors::InvalidArgument(
                "Type mismatch between buffer type (", subshape->ToString(),
                ") and tensor type (",
                DataTypeString(ctx->expected_output_dtype(output)),
                ") for output tensor ", output);
          }

          TensorShape output_shape;
          TF_RETURN_IF_ERROR(XLAShapeToTensorShape(*subshape, &output_shape));

          Tensor* output_tensor;
          TF_RETURN_IF_ERROR(
              ctx->allocate_output(output, output_shape, &output_tensor));

          XRTTupleAllocation* sub;
          TF_RETURN_IF_ERROR(XRTTupleAllocation::MakeSubBuffer(
              allocation.get(), index, &sub, /*alias_parent_allocation=*/true));
          core::ScopedUnref sub_unref(sub);

          xla::MutableBorrowingLiteral literal;
          TF_RETURN_IF_ERROR(HostTensorToMutableBorrowingLiteral(
              xla::LayoutUtil::GetWithDefaultLayout(*subshape), output_tensor,
              &literal));
          TF_RETURN_IF_ERROR(sub->ToLiteral(device_ref.backend(), &literal));

          ++output;
          return Status::OK();
        });
    OP_REQUIRES_OK(ctx, status);
  }
  bool discard_;
  DataTypeVector dtypes_;
};

// Op that writes a new literal value into device-resident memory.
template <class DeviceAccessor>
class XRTWriteLiteralOp : public OpKernel {
 public:
  explicit XRTWriteLiteralOp(OpKernelConstruction* ctx) : OpKernel(ctx) {}
  ~XRTWriteLiteralOp() override = default;
  XRTWriteLiteralOp(const XRTWriteLiteralOp&) = delete;
  XRTWriteLiteralOp& operator=(const XRTWriteLiteralOp&) = delete;

  void Compute(OpKernelContext* ctx) override {
    VLOG(1) << "XRTWriteLiteralOp::Compute";

    const Tensor& handle_tensor = ctx->input(0);
    OP_REQUIRES(
        ctx, TensorShapeUtils::IsScalar(handle_tensor.shape()),
        errors::Internal("computation input should be an int64 scalar"));
    int64 allocation_handle = handle_tensor.scalar<int64>()();

    const Tensor& literal_info = ctx->input(1);
    OP_REQUIRES(ctx, TensorShapeUtils::IsScalar(literal_info.shape()),
                errors::Internal("literal input should be a string scalar"));
    xla::LiteralProto literal_proto;
    OP_REQUIRES(ctx,
                literal_proto.ParseFromString(literal_info.scalar<string>()()),
                errors::InvalidArgument(
                    "Unable to parse allocation input to LiteralProto"));
    xla::Literal literal;
    OP_REQUIRES_OK(ctx, XRTStateHelpers::MakeLiteral(literal_proto, &literal));

    ResourceMgr* rm;
    OP_REQUIRES_OK(ctx, DeviceAccessor::GetResourceManager(ctx, &rm));

    RefPtr<XRTMemoryManager> memory_manager = XRTMemoryManager::Get(rm);
    RefPtr<XRTTupleAllocation> allocation;
    OP_REQUIRES_OK(ctx, memory_manager->Lookup(allocation_handle, &allocation));

    // We are guaranteed that the underlying device object won't be deleted out
    // from under us, while the ScopedRef is live.
    typename DeviceAccessor::ScopedRef device_ref;
    OP_REQUIRES_OK(ctx, DeviceAccessor::InitScopedRef(
                            ctx, allocation->device_ordinal(), &device_ref));
    OP_REQUIRES_OK(ctx,
                   allocation->WriteLiteral(device_ref.backend(), literal));

    Tensor output(DT_INT64, TensorShape({}));
    output.scalar<int64>()() = allocation_handle;
    ctx->set_output(0, output);
  }
};

// Op that discards a handle to device memory.
template <class DeviceAccessor>
class XRTReleaseAllocationOp : public OpKernel {
 public:
  explicit XRTReleaseAllocationOp(OpKernelConstruction* ctx) : OpKernel(ctx) {}
  ~XRTReleaseAllocationOp() override = default;
  XRTReleaseAllocationOp(const XRTReleaseAllocationOp&) = delete;
  XRTReleaseAllocationOp& operator=(const XRTReleaseAllocationOp&) = delete;

  void Compute(OpKernelContext* ctx) override {
    VLOG(1) << "XRTReleaseAllocationOp::Compute";

    ResourceMgr* rm;
    OP_REQUIRES_OK(ctx, DeviceAccessor::GetResourceManager(ctx, &rm));

    RefPtr<XRTMemoryManager> memory_manager = XRTMemoryManager::Get(rm);
    const Tensor& allocation_handle = ctx->input(0);
    auto flat_keys = allocation_handle.flat<int64>();
    for (int64 i = 0; i < flat_keys.size(); ++i) {
      int64 key = flat_keys(i);
      OP_REQUIRES_OK(ctx, memory_manager->Release(key));
      VLOG(2) << "Released allocation handle " << key;
    }
  }
};

// Op that discards a handle to device memory.
template <class DeviceAccessor>
class XRTReleaseAllAllocationsOp : public OpKernel {
 public:
  explicit XRTReleaseAllAllocationsOp(OpKernelConstruction* ctx)
      : OpKernel(ctx) {}
  ~XRTReleaseAllAllocationsOp() override = default;
  XRTReleaseAllAllocationsOp(const XRTReleaseAllAllocationsOp&) = delete;
  XRTReleaseAllAllocationsOp& operator=(const XRTReleaseAllAllocationsOp&) =
      delete;

  void Compute(OpKernelContext* ctx) override {
    VLOG(1) << "XRTReleaseAllAllocationsOp::Compute";

    ResourceMgr* rm;
    OP_REQUIRES_OK(ctx, DeviceAccessor::GetResourceManager(ctx, &rm));
    XRTMemoryManager::Get(rm)->ReleaseAllAllocations();
  }
};

template <class DeviceAccessor>
class XRTCompactAllocationsOp : public OpKernel {
 public:
  explicit XRTCompactAllocationsOp(OpKernelConstruction* ctx) : OpKernel(ctx) {}
  ~XRTCompactAllocationsOp() override = default;
  XRTCompactAllocationsOp(const XRTCompactAllocationsOp&) = delete;
  XRTCompactAllocationsOp& operator=(const XRTCompactAllocationsOp&) = delete;

  void Compute(OpKernelContext* ctx) override {
    VLOG(1) << "XRTCompactAllocationsOp::Compute";

    ResourceMgr* rm;
    OP_REQUIRES_OK(ctx, DeviceAccessor::GetResourceManager(ctx, &rm));
    RefPtr<XRTMemoryManager> memory_manager = XRTMemoryManager::Get(rm);
    class DeviceAccessor::ScopedRef device_ref;
    OP_REQUIRES_OK(ctx, DeviceAccessor::InitScopedRef(ctx, &device_ref));
    OP_REQUIRES_OK(ctx, memory_manager->CompactAllocations(
                            device_ref.backend(), device_ref.device_ordinal()));
  }
};

}  // namespace tensorflow

#endif  // TENSORFLOW_COMPILER_XRT_KERNELS_XRT_STATE_OPS_H_

redpajama_set_name: RedPajamaGithub


The foreigners arriving to Vietnam these days have many questions about Vietnam e-visa which is officially launched on February 1, 2017 by the Vietnamese Government in its pilot plan until February 1, 2021. For the Italian citizens, the first question should be: Vietnam e-visa is available for Italy passport or not?
To answer this question, we are happy to inform that, Italian citizens are eligible for Vietnam e-visa! In the first stage of this plan, this kind of visa is available for just 80 nationals (the full list can be found here) including Italy.
So, how to obtain Vietnam visa for Italian citizens at the moment?
How to apply for Vietnam e-visa from Italy?
How to apply for Vietnam visa from Italy?


text:
Review: 'The Burglary: The Discovery of J. Edgar Hoover's Secret FBI' by Betty Medsger
By David J. Garrow,
http://www.washingtonpost.com/opinions/review-the-burglary-the-discovery-of-j-edgar-hoovers-secret-fbi-by-betty-medsger/2014/01/23/92221976-7c55-11e3-93c1-0e888170b723_story.html
David J. Garrow is the author of "The FBI and Martin Luther King, Jr." and the Pulizer Prize-winning "Bearing the Cross."
On Saturday morning, March 6, 1971, Haverford College physics professor Bill Davidon and two fellow anti-Vietnam-War activists were welcomed to the White House for a 75-minute conversation with President Richard Nixon's national security adviser, Henry Kissinger. The appointment was especially incongruous because less than two months earlier, Davidon was named as an unindicted co-conspirator by a federal grand jury, which alleged that six peace activists, most of them Catholic, had plotted to kidnap Kissinger to protest his role in directing the war effort. Kissinger made light of the supposed scheme, joking that "sex-starved nuns" must be after him, then apologized for his poor taste.
The private Saturday conversation received no immediate press coverage, but six days later Kissinger told Washington Post reporter Betty Medsger that "it was very pleasant," and Davidon commended Kissinger as "an excellent listener."
One thing Davidon did not tell Kissinger during their meeting was that since December, he had been organizing a real plot aimed at unmasking the FBI's unconstitutional surveillance of American citizens by stealing the bureau's secret files — the story told by Medsger in her rich and valuable new book, "The Burglary." Davidon hurried back to Pennsylvania directly from the White House because he and seven colleagues had scheduled their break-in at a small FBI office in the Philadelphia suburbs for that Monday night.
Davidon and some of his recruits, such as Temple University religion professor John Raines, had already surreptitiously taken part in nighttime raids to seize draft boards' files and thus impede the Selective Service System, but Davidon alone had envisioned adding a new target in the hope of documenting war protesters' belief that FBI agents were spending more time surveilling them than chasing criminals.
Davidon's group had quietly cased the FBI resident agency in Media, Pa., for weeks. Located on the second floor of a four-story apartment building directly across the street from the imposing Delaware County courthouse, the office housed five agents, none of whom ever worked past 5 p.m., the plotters learned. Pretending to be a local college student, Raines's wife, Bonnie, arranged to interview the senior resident agent and observed that the office lacked an alarm system and had two exterior doors, one blocked by a large file cabinet and a second with only one lock.
One young plotter, Keith Forsyth, had worked on his lock-picking skills, and the group chose Monday, March 8, for their burglary in the belief that that night's Muhammad Ali-Joe Frazier championship boxing match would keep the building's residents and the courthouse's security guard pinned to their televisions and radios.
Only when Forsyth got to the FBI office's front door that evening did he realize that it now had two locks, one of which was far too complex for his correspondence-course skill level. He retreated to the nearby motel room Davidon had rented as the group's base of operations and questioned Bonnie Raines about what she remembered of the obstructed second door. Davidon's "calmness and courage" during those tense moments kept the group from abandoning their plot, she remembered. "Without his spirit, we wouldn't have done it."
Armed with a crowbar and a tire jack bar, Forsyth headed back to the apartment building, worried that some resident might happen upon him in the open hallway as he popped a deadbolt lock and then slowly wedged back both the door and the file cabinet that stood behind it.
Then four other members of the team, each wearing rubber gloves and carrying two large suitcases, arrived and used screwdrivers to force open locked file cabinets, removing every single document in the office. Once the suitcases were packed, two cars pulled up, the bags were loaded, and off they went to a rural cabin Davidon had borrowed for several weeks from a friend. There the group stayed up all night, reading and sorting the thousands of documents they had purloined.
Within an hour, Davidon's group came upon just the sort of revelatory FBI memo they had hoped to find. In a September 1970 report on the New Left, one Philadelphia agent told his colleagues that increased pressure on such activists "will enhance the paranoia endemic in these circles and will further serve to get the point across there is an FBI agent behind every mailbox."
"In that moment," Medsger writes in her sprawling and sometimes emotionally compelling account, the eight conspirators "knew that whatever would happen to them as a result of what they had done this night — arrest, trial, time in prison — the risk had been worthwhile."
The next morning, as Davidon, Raines and the others carefully resumed their daily routines, Assistant Attorney General and future chief justice William H. Rehnquist testified to a Senate subcommittee that "self-discipline on the part of the executive branch will provide an answer to virtually all of the legitimate complaints against excesses of information gathering" that critics were voicing about the Nixon administration. False claims such as that were precisely what Davidon and his colleagues wanted to explode with the best evidence possible, and after Davidon and Raines spent quiet Sundays at their departmental copy machines, five sets of the 14 most explosive memos were mailed by "Liberty Publications" to two liberal members of Congress and writers at three leading national newspapers.
Four of the recipients quickly handed the packages over to the FBI. Only Medsger chose differently and quickly drafted a story. In phone calls, Attorney General John Mitchell tried to bully Post editors and publisher Katharine Graham into canceling Medsger's story, but Graham approved its publication, and on March 24, 1971, the FBI's "enhance the paranoia" quotation appeared on The Post's front page in an article headlined "Stolen Documents Describe FBI Surveillance Activities." So began the collapse of FBI Director J. Edgar Hoover's surveillance empire, a collapse that became complete several years later after a Senate select committee fully plumbed the unconstitutional depths of the Counterintelligence Program — COINTELPRO — and other equally indefensible FBI abuses of power.
Much to the burglars' surprise, the FBI's intensive effort to identify the perpetrators never homed in on them; instead, agents ineptly targeted other activists who had had nothing to do with the break-in. Only now, with the publication of Medsger's book, years after the statute of limitations for their crimes expired, have five of the eight burglars stepped forward. One explained to Medsger that "it was a funny thing to be in a situation where you have done something that was against the law and yet you are proud of it" — and rightly so.
Davidon died at age 86 last November, but his daughter Sarah Davidon Hoover correctly voiced the most important lesson from her father and his friends' courageous contribution to American liberty: "Pretty typical people can do atypical things and make a difference." As Edward Snowden might add, "Yes we can!"
David J. Garrow is the author of "The FBI and Martin Luther King, Jr." and the Pulitzer Prize-winning "Bearing the Cross."
THE BURGLARY The Discovery of J. Edgar Hoover's Secret FBI By Betty Medsger Knopf.596 pp. $29.95