Ann Webster, Assistant Auditor-General, Research and Development, visited the Wales Audit Office during a recent holiday to share thoughts and ideas on integrated reporting.
There's a Māori saying that comes to mind: "He pai te tirohanga ki nga mahara mo nga raa pahemo engari ka puta te maaramatanga i runga i te titiro whakamua" – "It's fine to have recollections of the past but wisdom comes from being able to prepare opportunities for the future". Our public sectors number among the world's best in financial transparency and accountability. The challenge we face is how to make our financial management systems even more effective and the financial information that underlies it more useful and better used. We will need to bring financial and performance information together to inform more a co-ordinated and responsive public sector.
My very best wishes to the Wales Audit Office for your journey in promoting a high-performing performance and trusted public sector, and my thanks for your taking good care of me during my visit. We look forward to meeting you in the finals of the Rugby World Cup this year.
Great that good practice was discussed. Look forward to doing more work around the Well-being of Future Generations Act and sharing further good practice around the topic. Cheers!


The day after that there were more people. There were some clouds but that was not a problem. The bands finished their soundcheck and at 19.00 the crowd went into the citadel in which the bands played and there was a lot of noise.


text:
A aposta de Loki é uma forma de falácia lógica (ou falácia informal) que consiste numa insistência irracional de que um conceito não pode ser definido, e, portanto, não pode ser discutido.

De acordo com a Prosa Edda (Skáldskaparmál cap. 35), o deus nórdico Loki (um Gigante ou Áss) uma vez fez uma aposta com o anão Brok e apostou sua cabeça. Loki perdeu a aposta e, no devido tempo, os anões vieram cobrar. Loki não teve nenhum problema em desistir de sua cabeça, mas insistiu que eles não tinham absolutamente nenhum direito de tirar qualquer parte de seu pescoço. Todos os envolvidos discutiram o assunto; certas partes eram obviamente cabeça e certas partes eram obviamente pescoço, mas nenhum dos lados concordava exatamente onde terminava um e começava o outro. Loki manteve sua cabeça indefinidamente, embora seus lábios estivessem costurados como punição por sair da aposta com um jogo de palavras complicado.

Pode-se superar a falácia, quer através do estabelecimento de uma definição razoável de trabalho do termo em questão, quer mostrando que a outra parte está sendo irracional e evitar o argumento.

Ver também
 Draupnir — o anel de ouro no centro do mito
 Equívoco
 Falácia do escocês de verdade
 Vagueza

Falácias lógicas
Loki

redpajama_set_name: RedPajamaWikipedia


This cat has been seen in our neighbourhood (7 mile Nelson) for several weeks. We trapped it because we thought that it could be our friend's cat that went missing several months ago. It isn't. The cat is either feral or very scared (hissing. spitting and clawing). We couldn't take it in the house as we have 2 cats of our own, so we have released it back where it was caught and will make sure there is food for it. The cat is healthy looking and has very long, black fur (Persian looking), not matted at all. Are you missing a cat or do you know someone missing a cat fitting this description?
I can only reiterate that it's fur is long, black and fluffy. It has very yellow eyes. Apologies for the photo, but we couldn't get near to it without upsetting it.


Once I started preparing for the 200-105 exam using the certleader.com latest 200-105 dumps, I knew that the certification was practically in my hands. I scored highly and now I am certified!
Yesterday I passed 200-105 exam. I know now that when it comes to the right exam materials, certleader.com provides the best. On the actual exam I had 120 minutes to complete 66 questions. I recognized all the questions from my 200-105 test questions and I immediately felt comfortable. I passed with a high score! Not to mention that I finished half an hour earlier!


Check out our official EA Help support articles for everything from character transfers, to guilds, to in-game mail!
Subscribers can submit in-game tickets, but everyone can call in for Account & Billing issues or Technical Support, even if you're Free2Play!
[Guide] "How to install Swtor Correctly and address Windows 10 issues"
Issues with connecting to the game or the launcher? Getting lag spikes, high latency, or disconnections?


All the pleasure and freshness of cleansing with water... without water! In one easy step, this cleanser promotes a feeling of ""waterrinsed"" cleansing. It gently removes light makeup and impurities without any lather.
Skin stays smooth, supple and velvetysoft.
Rated 4 out of 5 by Chahehe from Refreshing cleaner Nice alternative when in a hurry or to clean skin just before a mask. It removes dirt and leaves skin refreshed.


text:
Tycoon Snatches Jubilee Asili From DP William Ruto
June 25, 2020 June 25, 2020 tmz editor
Deputy President William Ruto with Kandara MP Alice Wahome in Kandara, Murang'a county on February 13, 2020.
Update: DP Ruto allies have refuted reports that the name Jubilee Asili was reserved by the businessman while speaking with TMZ.co.ke on Thursday, June 25.
An MP aligned to Ruto argued that the name was registered as a private company and not a political party.
"What has been registered under Asili is a Limited Company at the Registrar of Companies and not at the Registrar of Political Parties," the MP stated.
Deputy President William Ruto and his allies have lost rights to the Jubilee Asili name after a businessman beat them at registering with the Office of the Registrar of Political Parties.
The 30-year-old Andrew Simiyu registered the name on Wednesday, June 17. Ruto allies have lamented that he is a pawn being used to frustrate the DP's 2022 ambitions.
"I am waiting for feedback from the Registrar of Political Parties to know the fate of my application. I am not interested in politics.
"I am a businessman engaged in clearing and forwarding. I was just excited by the name," Simiyu stated while speaking with the Daily Nation on Wednesday, June 24.
An image shared by Digital Strategist Dennis Itumbi of the 'Jubilee Asili Centre' on June 18, 2020
Details of the businessman are scanty as he declined to reveal more about himself. The developments came a week after Jubilee Chairman David Murathe vowed to frustrate all efforts to have a new breakaway party registered bearing resemblance to the ruling party.
"You can't claim to have a party that appears to share a name and slogan with another because it will confuse people. We have the copyright of Jubilee, so they can't list another party with that name," Murathe stated on Friday, June 19.
A perspective which Gatundu South MP, Moses Kuria acknowledged. Kuria reportedly runs operations at the Jubilee Asili Centre at Kilimani, Nairobi.
"What I know is that it is not possible to register such a name according to the Political Parties Act," Kuria detailed.
The Act stipulates that the registrar may decline an application if a party bears a similar name, abbreviation and symbol of another outfit.
Soy MP and Jubilee Deputy Secretary-General Caleb Kositany had earlier on declared that they would register the party under a new name if attempts to register Jubilee Asili were blocked.
"A name is just a name. If they register it, we can still pick another one and we are not short of options. It is time for those who were rejected at the Jubilee headquarters to express their mind," Kositany stated.
Deputy President William Ruto in a meeting with de-whipped Jubilee legislators in Nairobi on June 18, 2020
← 7-Year-Old Girl Wins Eliud Kipchoge's Heart [VIDEO]
Jeff Koinange Cancels Show After Speaker Lusaka Goes Missing [VIDEO] →
No Budget for Coronavirus – CoG Tells National Government
'I am the one who pays my husbands salary' Wakavinye opens up
Ruto, Uhuru Rift Widens With DPs Latest Stand
August 22, 2020 August 22, 2020 tmz editor

redpajama_set_name: RedPajamaCommonCrawl


Hello All. Thus far in my troubleshooting my echoplex, this thread: http://tapeproject.com/smf/index.php?topic=1100.0 [nofollow] on this forum had the most valuable information.. so I thought I ask a related question to the techs here. Thanks so much for your time. Any advice or links will be gratefully received.
I own an echoplex EP-2. When I purchased my EP-2, it had very weak repeats. I replaced most of the caps. The filter caps were replaced by the previous owner with a higher value multican 40/20/80/80. The voltages appear within spec . I have tried different tapes and physical adjustment to the heads. Demagged and cleaned numerous times.
I traced the problem to the oscillator circuit. Replacing the .047 c15 with a fresh .01 and setting the R26 trimmer to very low resistance gives me strong full echoes, repeats and self oscillation when driven. The unit doesn't fully erase. When the black lead from the erase circuit is scoped I find a distorted sine wave which looks to be 25 khz. (full disclosure, I am a new to my oscilloscope but I think I got the math right) This seems low for ac bias. The Orange lead to the record head shows the same frequency but smooth and a much higher amplitude with the r26 trim lowered. I don't totally understand how the bias choke and capacitor work. I tried adding a variable capacitor, c17 but I don't register a change at V2B per the schematic instructions. Do you have any recommendations for further tests? How might I raise the ac bias for the erase head?
I realize I am a little out of my league on this circuit but, I feel like I am so close and not ready to give up just yet. Especially when i got the echoes to sound amazing... I just want deeper erasure!
Looking at the schematic, you might want to check the resistance of the erase head to see if it is around the 28 ohms given - can measure it "in circuit", right across the head/connections as it is coupled to the oscillator thru an .01 cap. If that cap isn't shorted/leaky, it should NOT pass DC.
I'm confused a bit by note 3. The schematic shows R26 to be a 33K fixed resistor: but the note says it can be replaced by a parallel coil/cap in series with a 220K trimmer. The coil/cap is a record "bias trap", a circuit that is "supposed to" be tuned to the bias frequency and "trap" it so it can't make it into the record circuitry (V2) and possibly cause intermodulation distortion. I'm troubled by the 220K value which seems WAY too high, considering the fixed resistor it replaces was 33K. I'd opine that it is a misprint and should be around 25K or so - which would also make sense since you are setting the current trimmer "lowered". The erase level is "set" by the .01 cap C15. Try replacing it - suggest 250VDC MINIMUM and see if it may be the problem. If not, you could try increasing the value of C15 to .015 or.022. However, maybe the circuit is working "as designed" or is "as good as it can be". The erase oscillators on pro tape recorders are supposed to generate a really pure sine wave - distortion adds "noise" to the recording. Realize that this is a "much cheaper" circuit.
1.The erase head measures 21.8 ohms so that seems ok.
2. The R26 value definitely isn't a typo as it appears across multiple schematics of different serial numbers (these units are interesting in that each serial number grouping is a little different, different voltages, varying values and mine has proven to have a few "in between" design attributes, including some values more similar to the EP-1.) R26, along with the 18mh choke and the variable capacitor c17, comprise the bias trap circuit. Some schematics include that in the circuit proper, others footnote to it as a possible improvement. I don't understand c17's role and didn't see a change when replacing it with a variable capacitor.Also when I trim R26 down to nothing, I get the loudest echoes and the most "erasure.." though perhaps I am just recording over at a hotter level? As I increase resistance, the echoes are still pretty good up to a point but the previously recorded material becomes louder. Originally my c15 was .047 which corresponds to an earlier schematic... but this value didn't induce multiple repeats or oscillation. Changing it to .01 produced repeats, the original problem I was trying to solve.
3. R27 varies across all the schematics. Currently mine is 4k7 which increases the plate voltage 220v on the oscillator tube... when reduced to 560 ohms as in some schematics, the plate value reduces to 160. Both values correspond to iterations of the schematic, but changes here didn't seem to improve erasure.
4. c16 is supposed to set the resonant tank. When increased to .002 from .001 I noticed the slightest increase in bias frequency.
5. The oscillator tube is new, but I have no way of testing it. I have swapped the old tube back and noted the same results.
Again as a newbie and amateur here, I very much appreciate your time reading these and helping me troubleshoot. I am grateful to learn from you all. Cheers.
The purpose of C17 is to "tune" the bias trap to the oscillator frequency, thereby minimizing the amount of bias voltage "leaking" into the record amp V2. The way to adjust it would be to put a scope on the plate (pin7) and, with no audio signal, adjust the cap for MINIMUM bias "bleed thru".
R26 adjusts the amount of bias added to the record signal. "In theory", you "optimize" the bias by recording a HF audio signal, say 10Khz or so and while monitoring it's Playback level, increase the bias signal till the 10K peaks, then increase the bias a little more till the signal falls by a few dB - maybe 2 to 4.
Original c15 bias cap at Erase was .047. This corresponds to one of the schematics, though most schematics use a .01 here. When I switch back to the .047, the ac bias signal is now a pure sine wave but increases to way over spec, in the area of 200kHz. Also with the .047 cap, I don't get repeats or much echo at all, and no erasure. .022 is the same story.
One tech who helped me via email also suggested that the record/erase circuit is very sensitive to impedances and to use low esr caps, ceramics where often in the original. I might order a few different values to test this out.
1. the bias trap doesn't seem to be working and doesn't have an adjustable cap originally but a 240pf. The variable cap I tried have seems to make no change. I have removed the trap for now leaving R26 as a trim and adding a 47k in between the orange record head lead and c13 per the original non-bias trap design.
2. c15 is back to .01, but I also added 2 .001s which I had on hand. So the .012 cap gives me a much better window as I trim R26 for maximum echoes to erasure ratio. Note, with this value, my bias signal is still in the 20-25kHz range. It should be 50-70kHz.
With these adjustments, the unit is basically there... sounds really good, and erasure is at about 90% I'd say. The trade-off is that for this level of erasure, I don't get runaway repeats. If I increase R26 I can achieve the runaways, but the ghosts of recorded sounds on the tape come back.
And I doubt I can put this to rest knowing that things are still not quite right and I still am after the circuit that gives me correct bias and a working trap.
I notice that the leads to the erase/record head are wrapped in the same shield unlike factory where the erase and record leads were in separate shields. The head measures correct and looks original, but perhaps has been messed with. Could the the leads sharing the same shield wrapping influence the bias frequency issue?
Also, the one area I haven't addressed is that the multican filter caps are non original and a few of the values are different. ie.
c18c is 100uf, c18d is 80uf, c18b is 20uf but was added separate to the multicap. Could any of these cause a weird interaction in terms of the ac signal?
Again if any of these diagnostics rings a bell, I'd love to hear back. If not, no worries, I know I am asking a lot..but hopefully the troubleshooting will be helpful to others too. Thanks so much for the knowledge you have shared already.


Whales in Paradise are proud to be the pioneers of Whale Watching on the Gold Coast. As a company, that started small in 2005, they have been taking visitors and locals out to see Humpback Whales every whale watching season for the past 11 years. The Gold Coast has become one of the most popular destination in Australia to watch whales, so in order to keep up with the demand, Whales in Paradise have grown considerably and are now able to take people on whale watching tours 5 times per day, throughout the whale watching season. (June-November) In late 2015, Whales in Paradise introduced a brand new purpose built, whale watching vessel in order to keep up with the demand and to be able to extend their whale watching tours to 5 per day.
Southern Cross 4WD Tours, provide a variety of half and full day tour options to explore the scenic hinterland directly behind the hub of the Gold Coast. Being the hinterland experts, you can be assured your hinterland experience will be unique. The owners have tailored their tours to explore places where no-one else goes. This not only gives you a window to view some very special sites, but guarantee's there will not be bus loads of people on these tours. Being family orientated, the modern luxury Mercedes Benz vehicles are spacious, includes child seats when required and have large windows for viewing, making them the ultimate touring vehicle.
You can see Whales and Wildlife on a full day tour by combining a whale watching experience with a half day tour to Mt Tamborine. Whales in Paradise and Southern Cross 4WD Tours work together to bring you these memorable experiences and will assist in providing transfers between the tours, so you can just enjoy your day.
Gold Coast Whale Watching and Hinterland Tours are two of the most popular things to do on the Gold Coast and come very well recommended. If you would like to book a Whale Watching experience and explore the Gold Coast Hinterland, simply contact either company on the phone number below, to book your tours. Further information on both tours can be found on each website.


text:
« How photography completely changed the visual arts
Oil painting – from old masters to modern »
The modern Baroque is characterized by an abundance of ornaments and complexity of lines.
Cubism is an avant-garde art movement that originated in the 20th century. thanks to Pablo Picasso, she revolutionized European painting and sculpture, also inspiring similar trends in music, literature and architecture.
One of the most famous paintings of the 20th-century Cubist era is Pablo Picasso's painting Avignon Girls, 1907.
For works of art in the style of cubism is characterized by broken, re-combined objects in an abstract form, in the image of which uses a large number of points of view.
Pablo Picasso is one of the most prominent representatives of the Cubism movement. The ten most expensive paintings ever sold include 2 works by Picasso in the style of cubism.
10 most expensive paintings ever sold
Expressionism is a modern art movement that originated in Germany in the first half of the 20th century, initially encompassing only painting and poetry.
Expressionists depict the world around 3 exclusively subjectively, radically distorting reality, for a greater emotional effect, forcing, thus, to reflect on their audience.
In expressionism, expression prevails over the image. This period is characterized by motives of pain, anguish, cry, suffering.
The material reality of expressionist artists is absolutely not interested, their paintings are imbued with emotional experiences and deep meaning.
His name is obliged to the picture of Claude Monet "Impression, Sunrise" ("Impression" translated into English – impression).
Impressionism – the direction of painting, 4 which is mainly aimed at working not in the studio, but in the open air (plein air).
Painting in the style of impressionism is designed to convey the light sensation of the artist.
The main characteristics of impressionism include: relatively small, thin, barely visible strokes; open composition; an accurately transmitted change in lighting (often emphasizing the effect of the passage of time); common, simple goal; the presence of movement, as a key element of human perception and experience; unusual vision of objects.
The most prominent representatives of impressionism are: Claude Monet, Edgar Degas, Pierre Renoir.
It depicts both the totality of cultural tendencies and a number of united areas of art that originated in the late 19th and early 20th centuries.
In 1863, the Salon of the Outcast was opened 5 in Paris, where artists were exhibited whose paintings were not allowed into the official Salon. Actually this date marked the birth of modernism as a trend in art.
Modernism is also called "other art", the purpose of which is to create unique, not similar to other paintings, the main feature of which is a special vision of the world by the artist.
In their work, the artists of the era of modernism rebelled against the conservative values of realism. A striking characteristic of modernism is self-awareness, which often leads to experiments with form, and to a further tendency to abstraction. Particular attention is paid to the process of work and materials used.
Pablo Picasso and Henry Matisse became one of the brightest representatives of the modernism trend.
It was the main focus in Northern Europe, from the middle of the 18th to the end of the 19th century, characterized by a return to the traditions of the art of antiquity, the art of the Renaissance, and even classicism.
In a cultural, artistic and architectural sense, neoclassicism originated as the answer of Rococo, who was perceived as an elaborate and not deep style of art.
Due to deep knowledge of church laws, neoclassicists artists tried to reconstruct and introduce canons into each of their works.
Avoiding the usual reproduction of classical themes and motifs, the artist tried to put his picture in the midst of a well-known tradition and demonstrate mastery of the genre.
In this respect, neoclassicism is directly opposed to Modernism, in which self-expression and improvisation are considered virtues.
Representatives: Raphael, Nicolas Poussin, Franz Joseph Haydn …
As an art movement, pop art originated in the mid-1950s in Britain, and in the late 7th 1950s in America. It is believed that pop art was born as a reaction to the ideas of abstract expressionism that dominated at that time.
Of course, speaking of pop art, it is impossible not to recall Andy Warhol – one of the most prominent representatives of this trend. One of his paintings "Eight Elvis" was sold in 2009 for $ 100 million.
Replaced the elite art came pop art, the main theme of which are ordinary objects. Pop art focuses on the banal and vulgar elements of any culture, often doing it through irony.
Pop art has found its application in various aspects of mass art: advertising, comic books, as well as all sorts of objects related to art.
Posted in anti-anti-discriminationists, blank canvases, characterized by a return, force of circumstances, get an education, great passion, key element, most expensive paintings
mostly landscapes written same time suffering until his death four-year pensioner's trip struggle began simply could taking over the experience closest associate highest strata of society likely have been national school depict strong people Many prominent painters decisions became hundred products stages of directions leaf on special steel impression of the prison bygone era master in front decade by starting masters left untouched entrance to the neighboring more connection well-known names heavy bodies been withdrawn very long time during his stay will be held even buried tremendous change dark palette created a special world sewed fig leaves body corresponds look is achieved avant-garde paintings memorial exhibition pearl lies right exhibitions of Russian art image of the nude mahi second institutional structure which various creative apartment of the artist
likely have been image of the nude mahi been withdrawn during his stay tremendous change look is achieved more connection exhibitions of Russian art pearl lies right well-known names master in front struggle began which various creative mostly landscapes written masters left untouched dark palette leaf on special steel hundred products bygone era sewed fig leaves until his death memorial exhibition taking over the experience simply could even buried decisions became very long time four-year pensioner's trip will be held stages of directions avant-garde paintings Many prominent painters closest associate apartment of the artist impression of the prison decade by starting body corresponds entrance to the neighboring depict strong people heavy bodies highest strata of society same time suffering second institutional structure national school created a special world
Russian art in the Catherine period finally goes beyond one portrait form. A multi-genre painting system emerges at the Academy, and a historical picture appears. One of the brightest representatives…
Surprisingly, the paintings of the famous Spanish artist, painted at the turn of the enlightened XVIII and XIX century gold, became the causes of scandals until the liberated XX. Despite…
Avant-gardism, developed in the literature by Vladimir Mayakovsky and Velimir Khlebnikov, since the 1910s has also spread powerfully in Russian painting. Back in the 1910s avant-gardism in Russia was fond…


text:
School Profiles
School Discovery
Bülow Blog
Tea with the Head
Have a question about this story or want us to help you?
by Ferdinand Steinbeis
Mini Series BOARDING SCHOOL AT HOME // Part 1: Teaching At Home
Hello from Oxford!
This is the first article of three as part of our mini-series Boarding School At Home. Please check back in a few days for the next two articles on extracurricular activities and school culture.
Teaching in An Online World
In some ways, a school day for Justus, a pupil at Bede's School in Sussex, hasn't changed all that much. He still goes to assembly in the morning, and catches up with his friends and tutor in their tutor period. Then his lessons start, followed by his usual morning break. He has two more lessons in the afternoon, another break, and on Wednesdays and Fridays, another two lessons after that. It's his normal routine — except, of course, that he does it all from a desk in his bedroom.
So how does Bede's ensure the school day on his laptop screen is as engaging and stimulating as it would be in real life? "In the private sector, the facilities, the grounds, the ambience, are so amazing," says Stephen Curran, an independent education expert. "It's incredibly difficult to recreate that incredible experience online, so the quality of delivery is the key thing if parents are going to feel like they've benefited from private education."
Getting our own online lesson: Antonia and Ferdinand talking to Rick Clarke of Frensham Heights School for podcast "Tea with the Head"
Quite. Without face-to-face contact, schools are having to rack their brains to think of engaging ways to deliver the curriculum, especially in subjects that would normally be taught using hands-on methods. And we've been amazed at what they've come up with!
Emily, an IB student at Haileybury in Hertfordshire, told us that her Design and Technology department had been sending out packages with building kits in them for the students; Joss Buchanan, principal at King William's College on the Isle of Man, gave an example from the junior school, where they'd taught pupils about raising agents in science by teaching them to bake scones at home. At Cheltenham Ladies' College in Gloucestershire, teachers and technicians living on site have been filming themselves doing live experiments in the science labs, while at Wells Cathedral School in Somerset, the in-house studio technicians have been stitching together pupils' recordings to help deliver the music curriculum.
Schools are also having to decide how they balance live teaching with independent learning tasks and pre-recorded lessons.
"We have to think about how we structure our lessons so they're not just staring at the screen the whole time," says Natalie Perry, deputy head of academics at Wells. Teachers are encouraged to greet pupils and teach live at the start of the lesson, before allowing pupils to go away from the screen to read a textbook or make notes, and then return online for discussions at the end.
Antonia and Ferdinand getting an online lesson about King William's College from Joss Buchanan
It's a strategy we've seen lots of schools following, and one that education experts recommend. "It's about keeping children engaged and things being enjoyable," says Sandra Leaton Gray, professor of education at University College London. "Videocasts, podcasts, a bit of live teaching, thoughtful activities that the children will try and work through on their own." Ms Gray said teachers and parents should be slightly wary of some educational apps and platforms, which can be harmful. "In a lot of education platforms they're used to using nudge notifications and these are usually quite addictive. It's important to make sure children still retain an intrinsic desire to learn."
Pupils we spoke to were largely really satisfied with teachers' efforts, although they acknowledged that some subjects (and some teachers) are better suited to online learning. "There are some teachers who are really motivated to try and make their lessons as interactive as possible and others who are just sharing a powerpoint," says Justus. "Our maths lessons are good because it's easier when we're online for our teacher to go in a private conversation (a private "room" on Zoom or Google Meets) with us and explain it to us when you don't have to be in front of the whole class."
Meanwhile Katerina, an IB student at Charterhouse in Surrey, said she was surprised how well online school worked in some subjects — and she thinks it's actually made her more productive! "In English we all have our cameras on and are unmuted, and we just discuss a poem. I imagined that English would be really hard online, but it turned out to be just fine," she says.
This time solo: Ferdinand recording a podcast interview mid-session
At Bede's, the lessons are always live, which Justus has mixed feelings about. "Sometimes it would be more useful if they would just give us a task in our time, but it's good in my opinion that they try and make it as active as possible."
Trying to make things work for different students with different preferences is a big challenge in an online environment. All the schools we spoke to acknowledged that they've had to adjust their expectations of how much content they can cover — something that most exam boards have also compensated for. "It's about making sure we keep the expectations of standards up, but modify that to acknowledge the practical challenges that our students face," says Matthew Lim, head of digital education at Cheltenham.
Ms Gray says that in such extreme circumstances, schools have to see their role as being slightly different than normal. "Your starting point has to be 'How can we give these kids a good pandemic?', not 'What are we missing from the time we had before that was completely different?'" she says.
Mid-chat with the lovely Alastair Thige, headmaster of Wells Cathedral School
Timetabling for virtual school
It's not just about the individual lessons. Schools have also had to think about how to approach timetabling, especially with international pupils all around the globe. At the start of lockdown, Mr Lim created a "roadmap" for their online teaching, catering for pupils in the UK and those as far away as Australia, Brasil, Singapore, and Malaysia. "We looked geographically at where the girls are in the world, and which lessons we could realistically expect them to attend," he says. Lessons are recorded, to make sure those that can't attend them live because of the time difference can work to their own schedule.
Almost all schools we've spoken to have said that maintaining a semblance of routine, of school's daily rhythms, is a priority in their approach to online learning.
"We've made online schooling look as much like the school day as possible," says Mr Buchanan, echoing the response from other heads. "There's tutor time, chapel service, assemblies, almost everything." Ms Perry says it's been important to keep the school timetable in place to "keep that contact" with pupils' studies.
Rick Clarke, headmaster of Frensham Heights in action for podcast "Tea with the Head"
Interestingly, this approach seems to work better for some pupils more than others. Katerina says it's a relief, considering the lack of structure she sees in some of her German friends' online schooling. "It's not very different from normal school really, we just log on," she says. "I personally am really glad that I went to England to a private boarding school because I hear about my friends here in Germany, and some of them barely have lessons."
Despite trying to keep the school day as normal as possible, we noticed that most schools had made two small modifications — lessons are shorter, to mimic the break students would get when walking between classrooms, and most have moved Saturday school lessons to the weekdays, to give pupils free weekends away from their screens. At King William's, students are also tasked to spend Fridays on educational activities away from the screen. "Curiously, it's much more demanding than normal school and you have to build in bigger breaks," says Mr Buchanan.
Recording a podcast intro - Ferdinand during one of his better covid-19 hair days
Haileybury has taken a more radical approach. Rather than moving the normal timetable online, their head of academics created an online schooling website with an entirely new timetable for each pupil. The idea was not to recreate a school day in an online world, but instead, to try and work out the best way to teach pupils online, full stop.
"The whole system of online school was very much new and no one has really done it like we did," says Emily. "I think the whole set up of the website was really special." To study for her IB, Emily had one live lesson on Zoom per day, covering a different subject each day of the week. "The rest was independent work, because they didn't want us to have loads of screentime," she says. Since December, more of Emily's lessons are now taught online rather than via independent learning, but she prefers the old model.
Always an education - talking to the inspirational Eve Jardine-Young, headmistress of CLC
Test and learn, test and learn
When we're all focusing on how pupils are adapting to online teaching, it's easy to forget that creating these impressive programmes has been a huge learning exercise for the schools as well. And they're constantly tweaking their online models based on feedback from parents, staff, and parents.
Almost all schools we spoke to said they had "started with a bit too much", and had to add in more free time and breaks away from the screen for pupils. "We started with setting homework, which we had to scrap because we thought it was too much," says Mr Buchanan.
Wells and King William's sent out feedback surveys over the holidays, which they then acted on, while Cheltenham upgraded classrooms' technical kit, adding webcams and conference microphones for the teachers streaming lessons on site.
Ingrid, Katerina's mother, says she has been really excited by Charterhouse's "professionalism" and how they keep parents in the loop. "I was really impressed by the speed with which the school changed to the home schooling system. I'm also very impressed by their readiness to inform parents — they are doing live webinars for us, on IB preparation, university applications, everything."
Katerina says sometimes she is asked for subject specific feedback. "For example in our maths department, what they're doing now is asking what is going well in the maths lessons and what is harder to teach the students." Justus, meanwhile, has to fill in a learning log after every lesson. "We have to complete it and say what we learnt if we got sent any prep and we go through it with our tutor if we had any problems."
Joss Buchanan on our podcast "Tea with the Head" - the man has stories!
Some schools were definitely more prepared than others for a digital world. Quite amazingly, Cheltenham hired Mr Lim as head of digital education three years ago, so pupils and teachers were already used to Microsoft Teams, uploading homework to digital portals, and making digital copies of handwritten notes. "The strategy was in place pre-Covid, so while it caught us off guard, we were prepared for it," Mr Lim explains. "It was nice to have this experimental pedagogy turn into mission critical." We bet!
Other schools without the in-house expertise looked outwards for advice. Haileybury, for example, consulted models from schools in Asia who had gone into lockdown a few months earlier, while Wells turned to the music institutions it has connections with. "Because we have such good links with the conservatoires, we've been able to pick their brains on what works well," says Ms Perry. "We're fortunate enough that we have our own in-house tech team, but we've learnt a lot from the Royal Welsh College of Music and Drama and the Royal Opera House, who are all doing rehearsals and auditions online."
A contemplative Ben Figgis, headmaster of Ardingly College on "Tea with the Head"
To help staff rise to the challenge, schools have had to provide digital training and equipment to teachers as well. "We've probably still got some teachers in the private system who have been there for about 40 years," Mr Curran points out. "They've delivered the same stuff for decades, teaching their latin class in the same way, and suddenly they're confronted with this online world. It's no mean feat."
For example, at King William's, they bought each member of staff a drawing tablet, and tech whiz teachers taught others how to use them. But Mr Buchanan pointed out that sometimes, it's not the end of the world if some staff prefer more traditional methods. "No one in the history department ever worked out how to use the tablet, but the maths department use it every lesson," he laughs. "It's probably quite nice to have some variety."
At Cheltenham, Mr Lim set up "teacher forums" where they held tech skills sessions. "At any organisation you have people with a range of abilities," he says. "We broke down and surveyed staff into a range of competencies, from "I really need help" to "I am happy to offer help", so we could train each other. If someone is struggling they drop into the forum and they'll get replies within a few minutes."
One thing we were perhaps surprised by was that schools don't seem to be checking on pupils' equipment and set ups at home. Bursary students are being helped with laptops and tablets, but we thought it would be easy to check all pupils have a chair that won't hurt their back, and things like that. The schools said they check pupils are learning in a happy and healthy environment by having cameras on in lessons and through pastoral care (which we'll look at in-depth in a later article), but we thought they should probably approach the practical side of things too.
Alastair Tighe of Wells Cathedral telling us of one of his funnier moments during lockdown
Mr Lim jokes that his role as head of digital education means he's ruined snow days forever — in a digitally enabled school, it doesn't matter if you can't be there in person. Jokes aside, the tech transformation at boarding schools has definitely led to some ways of working that both students and teachers will want to retain after the pandemic.
"Both staff and pupils have realised that there's some tech that they'd like to keep hold of," Ms Perry says. Google classroom, flip learning models, apps to annotate PDFs, and recorded lessons, have all turned out to be valuable revision and learning resources. As Mr Curran says, "This whole thing has pushed us forward, and there's a positive side to it too. So now we need to say, 'So what can we do with it?'"
Interested in our insights, opinions and stories related to English boarding schools? Then why not sign up!
BÜLOW BLOG - Our Thoughts On English Boarding Schools
English Boarding Schools in Profile: Box Hill School, The Caring School With An International Mindset
English Boarding Schools in Profile: Felsted School, The Warm-Hearted Family School
English Boarding Schools in Profile: Winchester College, The Quirkiest Of The Top Boys Boarding Schools
English Boarding Schools in Profile: Sedbergh School, a Full Boarding School in Idyllic Natural Surroundings
Von Bülow Education
Harwell Innovation Center
173 Curie Avenue, Harwell
Oxford, OX11 0QG
Email: info@buloweducation.com


text:
Asian Tour Qualifying School sets all-time record of 599 golfers
Posted by The GolfPH Team at January 2, 2012
The New Year promises a bright future for golf as a record-breaking number of 599 golfers signed up for the upcoming 2012 Asian Tour Qualifying School, all vying for the chance to earn the playing rights in the much awaited Asian Tour season this year.
The record exceeded last year's total of 433 entries and also surpassed the 2009 record of 507 participants.
For the First Stage of the tournament which will be held at the Imperial Lakeview Golf Club in Hua Hin, Thailand on January 11-14, a total of 444 players have signed up. However, only the top 20% of the players after the fourth round will qualify for the Final Stage which will take place on January 19-22.
Meanwhile, 155 players have been exempted from playing in the First Stage and were automatically qualified into the Final Stage, which will be held at the Imperial Lakeview and Springfield Royal Country Club. Only the top 40 in the Final Stage will earn their Tour cards for 2012.
Some of the players in the qualifying school came from various Asian countries including Taiwan, Thailand, India, Singapore, Philippines, Pakistan, Bangladesh, Sri Lanka, Hong Kong and Myanmar.
Marikina to hold Astounding Golf Tournament
Junior World Champion sets her eyes on Philippine Ladies Crown


text:
Two more Bearded Vultures released in Parc Natural de la Tinença de Benifassà
Tags: 2022-05, beardedvulture, beardedvultureeep, BeardedVultureMaestrazgo, eep
Bearded Vultures released in Parc Natural de la Tinença de Benifassà © GVA Agricultura i Transició Ecològica
Following the recent arrival of Bearded Vultures Ereta and Espèrit in Parc Natural de la Tinença de Benifassà, eleven captive-bred birds have now been released to this area as part of the Maestrazgo reintroduction efforts. With the recovery of this species, which became extinct in this territory at the end of the 19th century, this project consolidates the objective of restoring the Valencian biodiversity.
From captivity to the wild
On 17 May 2022, Parc Natural de la Tinença de Benifassà, welcomed two new Bearded Vultures coming from captivity. The two young hatched in captivity within the Bearded Vulture Captive Breeding Network, coordinated by us at the Vulture Conservation Foundation (VCF) on behald of EAZA's EEP. One of them hatched at our Bearded Vulture Captive Breeding Center of Guadalentín in Andalusia and the other in the Richard Faust Zentrum Specialized Breeding Centre in Austria.
Releasing Bearded Vultures
Staff responsible for captive breeding at the VCF were also present to support the release of the two birds, using the hacking method. This involves releasing captive-bred chicks into an artificial nest that resembles a nest vultures would have had in the wild. Placing them in a suitable habitat enables vultures to acclimatize to the natural environment for the coming weeks before they take their first flights. With this technique, the nestlings can associate the place where they are released with the area of hatching so that when they reach breeding age, which is around 8-10 years old, they select these places to breed. When Bearded Vultures are young, they tend to travel vast distances and explore new regions, but once they become sexually mature, they tend to select areas close to where they hatched to breed.
Results from the project so far
The project has so far released a total of 11 Bearded Vultures, five males and six females, in Parc Natural de la Tinença de Benifassà. Today, nine of these birds are alive, which is considered a high survival rate.
The follow-up results indicate that five of the seven reintroduced individuals (not counting the recently released birds) are still in the release zone, which shows that the acclimatization protocol is yielding favourable results. The remaining two vultures have moved to the Pyrenees.
Connecting populations of Bearded Vultures in Spain
The Maestrazgo region of Spain was historically a breeding site for Bearded Vultures and while there is no resident population the area is regularly visited by individuals released in Andalusia. The project to reintroduce the species to the region began in 2018 with the aim of establishing a wild breeding population that will bridge the populations in the Pyrenees and Andalusia, similar to the LIFE GYPCONNECT project in France that connects populations in the Pyrenees and the Alps. Over the course of the project, Bearded Vultures will be released in the Parque Natural de la Tinença de Benifassà. As part of the project, the released birds will be monitored by fitting them with GPS transmitters to better understand how they move around the region and to encourage movements of birds to the region a series of supplementary feeding stations will be created.
Generalitat of Valencia leads the project in collaboration with the Autonomous Communities from Aragón and Catalonia, the Spanish Ministry of Agriculture, Fish, Food and Environment and us here at the Vulture Conservation Foundation (VCF).
PrevPreviousVote LIFE RE-Vultures for the LIFE Citizens' Prize Award and support vulture recovery
NextConservation on the ground: training Guinea-Bissau officials on anti-poisoning responseNext
The first Bearded Vulture chick of the new season has hatched
We welcome the first European Bearded Vulture chick of the new 2022/23 captive breeding season. The
Pyrenees and Alps: 99 Bearded Vultures fledged in 2022
The 2021/22 breeding season was very successful, as 99 juvenile Bearded Vultures (Gypaetus barbatus) took their


The Audience Grand Cru Classé is sponsored and organized by the Merlot d´Or s. r. o. company.
The company specializes in importing wines made by the most prestigious, small-batch wineries in the world of wine. We are not interested exclusively in top names and brands; we also try to find and import wines with an interesting price-quality ratio.
The product offering of our company covers wines from all across the world, but we place particular focus on French wines, mainly those from the area of Bordeaux. Our clients have a special opportunity to buy wines in our so-called "En Primeur" campaign, which means purchasing wine before it is bottled to get prices that are more reasonable. Our company has been doing "En Primeur" business since 1998, which is why we have this extraordinary offer of so-called "great wines" from France.
Company Merlot d´Or also owns several wine shops, most notably the flagship store, the Passage Wine Gallery in Prague. This haven for wine lovers is situated directly in the center of the city in the Millenium Plaza Passage. The Wine Gallery houses the company's largest archive of French wines. Furthermore, one part of the wine shop is a restaurant where our customers can escape from the hustle and bustle of the city and enjoy unforgettable combinations of food and wines at special wine shop prices.


For the next 2 weeks we will be having a Blog Hop over at the Creative Cowgirls Challenge. All you have to do is make a card with hearts (easy peasy) post it on the challenge blog and leave some love on the 8 blogs you will visit on the hop.
If you are doing the hop you should have arrived at my little place from Monika's blog (Kleblatt's Bastelseiten). If you want to join in the Hop go to the Challenge Blog and start your wonderful journey.
We were lucky enough to receive some great images from DZ Doodles to work with. I was doubly lucky as the image I got, "bowl of lillies", was one of my Mum's favourite flowers. As one of the other Posse members used orange for their image I went on the internet and found a picture of a beautiful purple/red lily so I used this as my inspiration. The card is from my stash, the image was coloured with Copics and highlighted with Sakura clear Stardust pen (you can't really see it on this picture). I glazed the vase with Anitas 3D clear finish gloss. Heart punched with a punch from Ideal World (before Create and Craft started).
There are 2 sponsors for this challenge/hop.
Your next visit is to Queen La Rubba's blog, where you will find out what you need to do to finish the Hop.
Hi sweetie this is gorgeous hun I love the flower image its beautiful I love lillies they were 1 of my dads fave flowers. I had a tatto of lillies done in memory of him....they look fab. Hope you having a good weekend hun.
Very pretty card, Poppet - love the image.
What a beautiful card.....fabulous image!!
What an amazing card! Love the image and sparkle!
Just lovely! Thank you for joining us at Cute Card Thursday!
Beautiful card, love all the shimmer on it! Thanks for joining us this week at Paper Play Challenges!!
a beautiful card. thanks for joining us at Cute Card Thursday.
Om, your card is wonderful...love the image and your fabbby coloring!!!!
What a beautiful card you've made... End fot the first time I did a hop... All members made wonderful cards!!!


text:
You are currently in > Just a blog about Indonesia > OPM: Indonesian police kill fourteen Papuan separatists
OPM: Indonesian police kill fourteen Papuan separatists
JAKARTA - The separatist Free Papua Organization (OPM) on Thursday claimed fourteen of its members have allegedly been killed during a recent police raid in the district of Paniai in Indonesia's restive Papua region, the Jakarta Globe reported.
Leo Yeimo, spokesman for the Paniai chapter of the outlawed rebel group, said the fourteen members were killed on Tuesday when police forces raided one of its sites in the town of Eduda. He said the bodies of those killed have been evacuated from the group's former headquarters, which has since been transformed into a police station.
"We were constantly attacked by Indonesian security forces from the land as well as from helicopter. They even fired randomly at our headquarters, so many people fell victim," he told the newspaper. Leo said the group's leader, John Magay Yogi, escaped the raid unharmed.
"We are still being pursued [on Thursday]," the spokesman said, adding that guerrillas will launch an attack against Indonesian security forces if they 'continue to harass civilians.' "Helicopters are constantly looking for our hideouts. We know the terrain better so we will fight until the last drop of blood we have, we will never surrender."
Meanwhile, Papua Police spokesman Sr. Comr. Wachyono said he could not confirm the claims made by Leo, but acknowledged an operation was taking place. "We don't know if there were casualties on the OPM side. What is clear is that they were attacked because they attacked us first," he said.
Wachyono said the police confiscated two assault rifles and 53 rounds of ammunition as well as dozens of sharp weapons and bows from the OPM base during the raid. Officers also seized separatist paraphernalia, including an outlawed Morning Star Flag, a symbol of Papuan independence.
Police have intensified their crackdown on the OPM after a recent series of suspected guerrilla attacks in the province left five officers dead. According to people living in Eduda, more police officers and military soldiers have been deployed to the area, displacing a number of civilian residents.
Violence has been escalating in Papua since the Third Papuan People's Congress was held in mid-October in Abepura, Jayapura. Six people were found dead following the gathering of pro-independence activists, which was dispersed by Indonesian security forces who fired warning shots and tear gas.
Violence has plagued Papua since 1969 when Indonesia took over control of the region from the Dutch, ignoring Papuan demands for political sovereignty. Jakarta granted the region special autonomy in 2001, but this failed to quell widespread separatist sentiments.
Related blog entries (category 'Violence'):
15 December 2011 · More violence hits Kuta tourist district
02 December 2011 · Two police officers attacked by armed group in Papua
17 November 2011 · Indonesian activists: 8 killed during clashes at gold mine
07 November 2011 · Govt awaiting results of police probe into Papua congress incidents
21 September 2011 · One dead in Klungkung clash over temple ground
12 September 2011 · National police deployed after clashes in Ambon kill 6
Tags: separatists, murder, raid, police, OPM
© BNO News B.V.
Posted in Violence @ 15 December 2011 22:03 CET by Blog Bot · · permalink


Admission to the workshop is free, as are the meals at the conference site.
This year's workshop will try and present the major issues and developments associated with the evolution of global parallel file systems and high performance data storage. The convergence of high performance computing, big data analytics and artificial intelligence is imposing new challenges to storage hardware and software. At the same time, we see a convergence of hardware and software as well as a convergence of different technologies. How will solutions in a converged world look like and what is the path to convergence?
On Tuesday night, we plan for a joyful Reception and Dinner after visiting one of Stuttgart's most interesting places. Admission to the workshop is free, as are the meals at the conference site. Depending on our overall sponsoring situation, we might need to ask for a small cost contribution for the dinner invitation.


text:
Cheap flights from San Francisco to Lafayette (SFO - LFT)
The best prices from San Francisco to Lafayette Regional are usually found in August or July, booked 24 days in advance, depart on a Wednesday or Thursday and return on a Saturday
Cheap flights from San Francisco to Lafayette Regional
How to find the cheapest flight from San Francisco to Lafayette
All the information you need to plan the best SFO to LFT flight in 2022: compare San Francisco to Lafayette flight prices with the expected peak season, weather and rainfall in Lafayette.
SFO - LFT
3.8 - 7.1 inches
From San Francisco to Lafayette Regional
What is the cheapest day to fly round-trip from San Francisco to Lafayette?
Departing on a Tuesday is a good option for securing a great price. You can expect to save up to 49% when planning your travel around this day of the week.
How far in advance should I book a flight from San Francisco to Lafayette?
Find a great deal and save up to 69% by booking at least 25 days prior to your desired departure date, rather than waiting until the week of travel. According to our data, there are a number of flights available from San Francisco to Lafayette within the next two weeks, with the cheapest ticket starting at $467.
What is the cheapest month to fly from San Francisco to Lafayette?
Our data shows that August tends to be the cheapest month to fly to Lafayette from San Francisco. Users have commonly found prices around $407 for the month, but tickets can be as low as $208. Due to multiple factors, prepare for potentially higher prices in December.
When is the cheapest time to fly from San Francisco to Lafayette (SFO - LFT)?
Unlike in the morning, when flights are generally more expensive, you can save up to 20% on flights from San Francisco to Lafayette by exploring options for tickets in the evening.
Cheap flights from San Francisco to Lafayette in January, February 2022
The best prices found for SFO to LFT flights for January, February
Lafayette Regional
San Francisco to Lafayette 2022 flight deals
Cheap flights to Lafayette from San Francisco found for this year
Last minute flights from San Francisco to Lafayette
Late deals on return flights to Lafayette from San Francisco, departing today and this week
Useful info, stats and facts about San Francisco to Lafayette flights.
Which airlines flying from San Francisco to Lafayette Regional have flexible cancellations due to COVID-19?
Due to the rapidly changing circumstances due to COVID-19, airlines like United Airlines, American Airlines, and Frontier flying from San Francisco to Lafayette Regional have implemented new flexible cancellation policies.
Can I find flights from San Francisco to Lafayette for under $400 on Cheapflights?
Yes, there are multiple flights from San Francisco to Lafayette for under $400. The cheapest flight booked recently is on United Airlines for just $313, but on average you can expect to pay $477.
Are there last-minute flights available from San Francisco to Lafayette for under $500?
There are currently 1+ open flights from San Francisco to Lafayette within the next 7 days for less than $500.
What are the cheapest airlines flying from San Francisco to Lafayette round-trip?
Cheapflights users have booked flights from San Francisco to Lafayette round-trip from $313. Other airlines that can offer you cheap pricing are American Airlines, from $416, and Delta, from $1,416. United Airlines is priced at 23% lower than the current average price of a flight leaving 3 months from now.
What are the most popular airlines that fly from San Francisco to Lafayette?
When booking a flight from San Francisco to Lafayette, you may want to consider flying on American Airlines, Frontier or United Airlines as they are the most popular for this route.
What are the cheapest flights from San Francisco to Lafayette?
Looking for the cheapest flight from San Francisco to Lafayette? While on average our users pay $322, our data indicates the cheapest price to be $123. The most popular route (San Francisco - Lafayette Regional), is priced around $329.
Other flights from San Francisco
San Francisco to Las Vegas
San Francisco to Eugene
San Francisco to San Diego
San Francisco to Los Angeles
San Francisco to Denver
San Francisco to Sky Harbor Intl
Other flights to Lafayette
West Palm Beach to Lafayette
San Antonio to Lafayette
Knoxville to Lafayette
Chicago to Lafayette
Boston to Lafayette
Fort Lauderdale to Lafayette
Flights to Lafayette from San Francisco
Flights to Lafayette
Flights from San Francisco
Car Rentals in Louisiana
Car Rentals at Lafayette
View COVID Travel Restrictions for Lafayette
Can I fly to Lafayette Regional from San Francisco right now?
Information is based on travel restrictions for travel to Lafayette Regional within the United States
Most visitors from San Francisco need to provide a negative COVID-19 test result and/or quarantine to enter Lafayette Regional.
Visitors from San Francisco must present a negative RT-PCR (NAAT) or Antigen (quick-test) test taken 24 hours before departing to Lafayette Regional.
Visitors from San Francisco are not required to quarantine after entering Lafayette Regional.
Can I fly back to San Francisco from Lafayette Regional?
Returning to San Francisco from Lafayette Regional
Visitors from Lafayette Regional must present a negative RT-PCR (NAAT) or Antigen (quick-test) test taken 24 hours before departing to San Francisco.
Visitors from Lafayette Regional are not required to quarantine after entering San Francisco.
Alternative routes for San Francisco to Lafayette
Los Angeles to New Orleansfrom $55 pp
San Diego to New Orleansfrom $65 pp
Ontario to New Orleansfrom $78 pp
Oakland to New Orleansfrom $98 pp
San Francisco to New Orleansfrom $99 pp
Sacramento to New Orleansfrom $111 pp
Top 2 airlines flying from San Francisco to Lafayette
The chart below displays the airlines Cheapflights users traveling from San Francisco to Lafayette choose most often. Cheapest and average prices are based on aggregated data from the past 12 months.
Flights to Saint Vincent and the Grenadines
Flights from Florida to England
Flights to China
Flights to Rapid City
Flights from New York to Florida
Flights to Jordan
Flights to Tenerife
Flights from Chicago to Phoenix
Flights from San Francisco to Long Beach


text:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;

namespace Lucene.Net.Index
{
    using Lucene.Net.Support;
    using InfoStream = Lucene.Net.Util.InfoStream;

    using ThreadState = Lucene.Net.Index.DocumentsWriterPerThreadPool.ThreadState;

    /// <summary>
    /// this class controls <seealso cref="DocumentsWriterPerThread"/> flushing during
    /// indexing. It tracks the memory consumption per
    /// <seealso cref="DocumentsWriterPerThread"/> and uses a configured <seealso cref="FlushPolicy"/> to
    /// decide if a <seealso cref="DocumentsWriterPerThread"/> must flush.
    /// <p>
    /// In addition to the <seealso cref="FlushPolicy"/> the flush control might set certain
    /// <seealso cref="DocumentsWriterPerThread"/> as flush pending iff a
    /// <seealso cref="DocumentsWriterPerThread"/> exceeds the
    /// <seealso cref="IndexWriterConfig#getRAMPerThreadHardLimitMB()"/> to prevent address
    /// space exhaustion.
    /// </summary>
    public sealed class DocumentsWriterFlushControl
    {
        private readonly long HardMaxBytesPerDWPT;
        private long ActiveBytes_Renamed = 0;
        private long FlushBytes_Renamed = 0;
        private volatile int NumPending = 0;
        private int NumDocsSinceStalled = 0; // only with assert
        internal readonly AtomicBoolean FlushDeletes = new AtomicBoolean(false);
        private bool FullFlush_Renamed = false;
        private readonly Queue<DocumentsWriterPerThread> FlushQueue = new Queue<DocumentsWriterPerThread>();

        // only for safety reasons if a DWPT is close to the RAM limit
        private readonly LinkedList<BlockedFlush> BlockedFlushes = new LinkedList<BlockedFlush>();

        private readonly IdentityHashMap<DocumentsWriterPerThread, long?> FlushingWriters = new IdentityHashMap<DocumentsWriterPerThread, long?>();

        internal double MaxConfiguredRamBuffer = 0;
        internal long PeakActiveBytes = 0; // only with assert
        internal long PeakFlushBytes = 0; // only with assert
        internal long PeakNetBytes = 0; // only with assert
        internal long PeakDelta = 0; // only with assert
        internal readonly DocumentsWriterStallControl StallControl;
        private readonly DocumentsWriterPerThreadPool PerThreadPool;
        private readonly FlushPolicy FlushPolicy;
        private bool Closed = false;
        private readonly DocumentsWriter DocumentsWriter;
        private readonly LiveIndexWriterConfig Config;
        private readonly BufferedUpdatesStream BufferedUpdatesStream;
        private readonly InfoStream InfoStream_Renamed;

        internal DocumentsWriterFlushControl(DocumentsWriter documentsWriter, LiveIndexWriterConfig config, BufferedUpdatesStream bufferedUpdatesStream)
        {
            this.InfoStream_Renamed = config.InfoStream;
            this.StallControl = new DocumentsWriterStallControl();
            this.PerThreadPool = documentsWriter.PerThreadPool;
            this.FlushPolicy = documentsWriter.FlushPolicy;
            this.Config = config;
            this.HardMaxBytesPerDWPT = config.RAMPerThreadHardLimitMB * 1024 * 1024;
            this.DocumentsWriter = documentsWriter;
            this.BufferedUpdatesStream = bufferedUpdatesStream;
        }

        public long ActiveBytes()
        {
            lock (this)
            {
                return ActiveBytes_Renamed;
            }
        }

        public long FlushBytes()
        {
            lock (this)
            {
                return FlushBytes_Renamed;
            }
        }

        public long NetBytes()
        {
            lock (this)
            {
                return FlushBytes_Renamed + ActiveBytes_Renamed;
            }
        }

        private long StallLimitBytes()
        {
            double maxRamMB = Config.RAMBufferSizeMB;
            return maxRamMB != IndexWriterConfig.DISABLE_AUTO_FLUSH ? (long)(2 * (maxRamMB * 1024 * 1024)) : long.MaxValue;
        }

        private bool AssertMemory()
        {
            double maxRamMB = Config.RAMBufferSizeMB;
            if (maxRamMB != IndexWriterConfig.DISABLE_AUTO_FLUSH)
            {
                // for this assert we must be tolerant to ram buffer changes!
                MaxConfiguredRamBuffer = Math.Max(maxRamMB, MaxConfiguredRamBuffer);
                long ram = FlushBytes_Renamed + ActiveBytes_Renamed;
                long ramBufferBytes = (long)(MaxConfiguredRamBuffer * 1024 * 1024);
                // take peakDelta into account - worst case is that all flushing, pending and blocked DWPT had maxMem and the last doc had the peakDelta

                // 2 * ramBufferBytes -> before we stall we need to cross the 2xRAM Buffer border this is still a valid limit
                // (numPending + numFlushingDWPT() + numBlockedFlushes()) * peakDelta) -> those are the total number of DWPT that are not active but not yet fully fluhsed
                // all of them could theoretically be taken out of the loop once they crossed the RAM buffer and the last document was the peak delta
                // (numDocsSinceStalled * peakDelta) -> at any given time there could be n threads in flight that crossed the stall control before we reached the limit and each of them could hold a peak document
                long expected = (2 * (ramBufferBytes)) + ((NumPending + NumFlushingDWPT() + NumBlockedFlushes()) * PeakDelta) + (NumDocsSinceStalled * PeakDelta);
                // the expected ram consumption is an upper bound at this point and not really the expected consumption
                if (PeakDelta < (ramBufferBytes >> 1))
                {
                    /*
                     * if we are indexing with very low maxRamBuffer like 0.1MB memory can
                     * easily overflow if we check out some DWPT based on docCount and have
                     * several DWPT in flight indexing large documents (compared to the ram
                     * buffer). this means that those DWPT and their threads will not hit
                     * the stall control before asserting the memory which would in turn
                     * fail. To prevent this we only assert if the the largest document seen
                     * is smaller than the 1/2 of the maxRamBufferMB
                     */
                    Debug.Assert(ram <= expected, "actual mem: " + ram + " byte, expected mem: " + expected + " byte, flush mem: " + FlushBytes_Renamed + ", active mem: " + ActiveBytes_Renamed + ", pending DWPT: " + NumPending + ", flushing DWPT: " + NumFlushingDWPT() + ", blocked DWPT: " + NumBlockedFlushes() + ", peakDelta mem: " + PeakDelta + " byte");
                }
            }
            return true;
        }

        private void CommitPerThreadBytes(ThreadState perThread)
        {
            long delta = perThread.Dwpt.BytesUsed() - perThread.BytesUsed;
            perThread.BytesUsed += delta;
            /*
             * We need to differentiate here if we are pending since setFlushPending
             * moves the perThread memory to the flushBytes and we could be set to
             * pending during a delete
             */
            if (perThread.FlushPending_Renamed)
            {
                FlushBytes_Renamed += delta;
            }
            else
            {
                ActiveBytes_Renamed += delta;
            }
            Debug.Assert(UpdatePeaks(delta));
        }

        // only for asserts
        private bool UpdatePeaks(long delta)
        {
            PeakActiveBytes = Math.Max(PeakActiveBytes, ActiveBytes_Renamed);
            PeakFlushBytes = Math.Max(PeakFlushBytes, FlushBytes_Renamed);
            PeakNetBytes = Math.Max(PeakNetBytes, NetBytes());
            PeakDelta = Math.Max(PeakDelta, delta);

            return true;
        }

        internal DocumentsWriterPerThread DoAfterDocument(ThreadState perThread, bool isUpdate)
        {
            lock (this)
            {
                try
                {
                    CommitPerThreadBytes(perThread);
                    if (!perThread.FlushPending_Renamed)
                    {
                        if (isUpdate)
                        {
                            FlushPolicy.OnUpdate(this, perThread);
                        }
                        else
                        {
                            FlushPolicy.OnInsert(this, perThread);
                        }
                        if (!perThread.FlushPending_Renamed && perThread.BytesUsed > HardMaxBytesPerDWPT)
                        {
                            // Safety check to prevent a single DWPT exceeding its RAM limit. this
                            // is super important since we can not address more than 2048 MB per DWPT
                            FlushPending = perThread;
                        }
                    }
                    DocumentsWriterPerThread flushingDWPT;
                    if (FullFlush_Renamed)
                    {
                        if (perThread.FlushPending_Renamed)
                        {
                            CheckoutAndBlock(perThread);
                            flushingDWPT = NextPendingFlush();
                        }
                        else
                        {
                            flushingDWPT = null;
                        }
                    }
                    else
                    {
                        flushingDWPT = TryCheckoutForFlush(perThread);
                    }
                    return flushingDWPT;
                }
                finally
                {
                    bool stalled = UpdateStallState();
                    Debug.Assert(AssertNumDocsSinceStalled(stalled) && AssertMemory());
                }
            }
        }

        private bool AssertNumDocsSinceStalled(bool stalled)
        {
            /*
             *  updates the number of documents "finished" while we are in a stalled state.
             *  this is important for asserting memory upper bounds since it corresponds
             *  to the number of threads that are in-flight and crossed the stall control
             *  check before we actually stalled.
             *  see #assertMemory()
             */
            if (stalled)
            {
                NumDocsSinceStalled++;
            }
            else
            {
                NumDocsSinceStalled = 0;
            }
            return true;
        }

        internal void DoAfterFlush(DocumentsWriterPerThread dwpt)
        {
            lock (this)
            {
                Debug.Assert(FlushingWriters.ContainsKey(dwpt));
                try
                {
                    long? bytes = FlushingWriters[dwpt];
                    FlushingWriters.Remove(dwpt);
                    FlushBytes_Renamed -= (long)bytes;
                    PerThreadPool.Recycle(dwpt);
                    Debug.Assert(AssertMemory());
                }
                finally
                {
                    try
                    {
                        UpdateStallState();
                    }
                    finally
                    {
                        Monitor.PulseAll(this);
                    }
                }
            }
        }

        private bool UpdateStallState()
        {
            //Debug.Assert(Thread.holdsLock(this));
            long limit = StallLimitBytes();
            /*
             * we block indexing threads if net byte grows due to slow flushes
             * yet, for small ram buffers and large documents we can easily
             * reach the limit without any ongoing flushes. we need to ensure
             * that we don't stall/block if an ongoing or pending flush can
             * not free up enough memory to release the stall lock.
             */
            bool stall = ((ActiveBytes_Renamed + FlushBytes_Renamed) > limit) && (ActiveBytes_Renamed < limit) && !Closed;
            StallControl.UpdateStalled(stall);
            return stall;
        }

        public void WaitForFlush()
        {
            lock (this)
            {
                while (FlushingWriters.Count != 0)
                {
                    try
                    {
                        Monitor.Wait(this);
                    }
                    catch (ThreadInterruptedException e)
                    {
                        throw new ThreadInterruptedException("Thread Interrupted Exception", e);
                    }
                }
            }
        }

        /// <summary>
        /// Sets flush pending state on the given <seealso cref="ThreadState"/>. The
        /// <seealso cref="ThreadState"/> must have indexed at least on Document and must not be
        /// already pending.
        /// </summary>
        public ThreadState FlushPending
        {
            set
            {
                lock (this)
                {
                    Debug.Assert(!value.FlushPending_Renamed);
                    if (value.Dwpt.NumDocsInRAM > 0)
                    {
                        value.FlushPending_Renamed = true; // write access synced
                        long bytes = value.BytesUsed;
                        FlushBytes_Renamed += bytes;
                        ActiveBytes_Renamed -= bytes;
                        NumPending++; // write access synced
                        Debug.Assert(AssertMemory());
                    } // don't assert on numDocs since we could hit an abort excp. while selecting that dwpt for flushing
                }
            }
        }

        internal void DoOnAbort(ThreadState state)
        {
            lock (this)
            {
                try
                {
                    if (state.FlushPending_Renamed)
                    {
                        FlushBytes_Renamed -= state.BytesUsed;
                    }
                    else
                    {
                        ActiveBytes_Renamed -= state.BytesUsed;
                    }
                    Debug.Assert(AssertMemory());
                    // Take it out of the loop this DWPT is stale
                    PerThreadPool.Reset(state, Closed);
                }
                finally
                {
                    UpdateStallState();
                }
            }
        }

        internal DocumentsWriterPerThread TryCheckoutForFlush(ThreadState perThread)
        {
            lock (this)
            {
                return perThread.FlushPending_Renamed ? InternalTryCheckOutForFlush(perThread) : null;
            }
        }

        private void CheckoutAndBlock(ThreadState perThread)
        {
            perThread.@Lock();
            try
            {
                Debug.Assert(perThread.FlushPending_Renamed, "can not block non-pending threadstate");
                Debug.Assert(FullFlush_Renamed, "can not block if fullFlush == false");
                DocumentsWriterPerThread dwpt;
                long bytes = perThread.BytesUsed;
                dwpt = PerThreadPool.Reset(perThread, Closed);
                NumPending--;
                BlockedFlushes.AddLast(new BlockedFlush(dwpt, bytes));
            }
            finally
            {
                perThread.Unlock();
            }
        }

        private DocumentsWriterPerThread InternalTryCheckOutForFlush(ThreadState perThread)
        {
            //Debug.Assert(Thread.HoldsLock(this));
            Debug.Assert(perThread.FlushPending_Renamed);
            try
            {
                // We are pending so all memory is already moved to flushBytes
                if (perThread.TryLock())
                {
                    try
                    {
                        if (perThread.Initialized)
                        {
                            //Debug.Assert(perThread.HeldByCurrentThread);
                            DocumentsWriterPerThread dwpt;
                            long bytes = perThread.BytesUsed; // do that before
                            // replace!
                            dwpt = PerThreadPool.Reset(perThread, Closed);
                            Debug.Assert(!FlushingWriters.ContainsKey(dwpt), "DWPT is already flushing");
                            // Record the flushing DWPT to reduce flushBytes in doAfterFlush
                            FlushingWriters[dwpt] = Convert.ToInt64(bytes);
                            NumPending--; // write access synced
                            return dwpt;
                        }
                    }
                    finally
                    {
                        perThread.Unlock();
                    }
                }
                return null;
            }
            finally
            {
                UpdateStallState();
            }
        }

        public override string ToString()
        {
            return "DocumentsWriterFlushControl [activeBytes=" + ActiveBytes_Renamed + ", flushBytes=" + FlushBytes_Renamed + "]";
        }

        internal DocumentsWriterPerThread NextPendingFlush()
        {
            int numPending;
            bool fullFlush;
            lock (this)
            {
                DocumentsWriterPerThread poll;
                if (FlushQueue.Count > 0 && (poll = FlushQueue.Dequeue()) != null)
                {
                    UpdateStallState();
                    return poll;
                }
                fullFlush = this.FullFlush_Renamed;
                numPending = this.NumPending;
            }
            if (numPending > 0 && !fullFlush) // don't check if we are doing a full flush
            {
                int limit = PerThreadPool.ActiveThreadState;
                for (int i = 0; i < limit && numPending > 0; i++)
                {
                    ThreadState next = PerThreadPool.GetThreadState(i);
                    if (next.FlushPending_Renamed)
                    {
                        DocumentsWriterPerThread dwpt = TryCheckoutForFlush(next);
                        if (dwpt != null)
                        {
                            return dwpt;
                        }
                    }
                }
            }
            return null;
        }

        internal void SetClosed()
        {
            lock (this)
            {
                // set by DW to signal that we should not release new DWPT after close
                if (!Closed)
                {
                    this.Closed = true;
                    PerThreadPool.DeactivateUnreleasedStates();
                }
            }
        }

        /// <summary>
        /// Returns an iterator that provides access to all currently active <seealso cref="ThreadState"/>s
        /// </summary>
        public IEnumerator<ThreadState> AllActiveThreadStates()
        {
            return GetPerThreadsIterator(PerThreadPool.ActiveThreadState);
        }

        private IEnumerator<ThreadState> GetPerThreadsIterator(int upto)
        {
            return new IteratorAnonymousInnerClassHelper(this, upto);
        }

        private class IteratorAnonymousInnerClassHelper : IEnumerator<ThreadState>
        {
            private readonly DocumentsWriterFlushControl OuterInstance;
            private ThreadState current;
            private int Upto;
            private int i;

            public IteratorAnonymousInnerClassHelper(DocumentsWriterFlushControl outerInstance, int upto)
            {
                this.OuterInstance = outerInstance;
                this.Upto = upto;
                i = 0;
            }

            public ThreadState Current
            {
                get { return current; }
            }

            public void Dispose()
            {
            }

            object System.Collections.IEnumerator.Current
            {
                get { return Current; }
            }

            public bool MoveNext()
            {
                if (i < Upto)
                {
                    current = OuterInstance.PerThreadPool.GetThreadState(i++);
                    return true;
                }

                return false;
            }

            public void Reset()
            {
                throw new NotImplementedException();
            }
        }

        internal void DoOnDelete()
        {
            lock (this)
            {
                // pass null this is a global delete no update
                FlushPolicy.OnDelete(this, null);
            }
        }

        /// <summary>
        /// Returns the number of delete terms in the global pool
        /// </summary>
        public int NumGlobalTermDeletes
        {
            get
            {
                return DocumentsWriter.DeleteQueue.NumGlobalTermDeletes() + BufferedUpdatesStream.NumTerms();
            }
        }

        public long DeleteBytesUsed
        {
            get
            {
                return DocumentsWriter.DeleteQueue.BytesUsed() + BufferedUpdatesStream.BytesUsed();
            }
        }

        internal int NumFlushingDWPT()
        {
            lock (this)
            {
                return FlushingWriters.Count;
            }
        }

        public bool AndResetApplyAllDeletes
        {
            get
            {
                return FlushDeletes.GetAndSet(false);
            }
        }

        public void SetApplyAllDeletes()
        {
            FlushDeletes.Set(true);
        }

        internal int NumActiveDWPT()
        {
            return this.PerThreadPool.ActiveThreadState;
        }

        internal ThreadState ObtainAndLock()
        {
            ThreadState perThread = PerThreadPool.GetAndLock(Thread.CurrentThread, DocumentsWriter);
            bool success = false;
            try
            {
                if (perThread.Initialized && perThread.Dwpt.DeleteQueue != DocumentsWriter.DeleteQueue)
                {
                    // There is a flush-all in process and this DWPT is
                    // now stale -- enroll it for flush and try for
                    // another DWPT:
                    AddFlushableState(perThread);
                }
                success = true;
                // simply return the ThreadState even in a flush all case sine we already hold the lock
                return perThread;
            }
            finally
            {
                if (!success) // make sure we unlock if this fails
                {
                    perThread.Unlock();
                }
            }
        }

        internal void MarkForFullFlush()
        {
            DocumentsWriterDeleteQueue flushingQueue;
            lock (this)
            {
                Debug.Assert(!FullFlush_Renamed, "called DWFC#markForFullFlush() while full flush is still running");
                Debug.Assert(FullFlushBuffer.Count == 0, "full flush buffer should be empty: " + FullFlushBuffer);
                FullFlush_Renamed = true;
                flushingQueue = DocumentsWriter.DeleteQueue;
                // Set a new delete queue - all subsequent DWPT will use this queue until
                // we do another full flush
                DocumentsWriterDeleteQueue newQueue = new DocumentsWriterDeleteQueue(flushingQueue.Generation + 1);
                DocumentsWriter.DeleteQueue = newQueue;
            }
            int limit = PerThreadPool.ActiveThreadState;
            for (int i = 0; i < limit; i++)
            {
                ThreadState next = PerThreadPool.GetThreadState(i);
                next.@Lock();
                try
                {
                    if (!next.Initialized)
                    {
                        if (Closed && next.Active)
                        {
                            PerThreadPool.DeactivateThreadState(next);
                        }
                        continue;
                    }
                    Debug.Assert(next.Dwpt.DeleteQueue == flushingQueue || next.Dwpt.DeleteQueue == DocumentsWriter.DeleteQueue, " flushingQueue: " + flushingQueue + " currentqueue: " + DocumentsWriter.DeleteQueue + " perThread queue: " + next.Dwpt.DeleteQueue + " numDocsInRam: " + next.Dwpt.NumDocsInRAM);
                    if (next.Dwpt.DeleteQueue != flushingQueue)
                    {
                        // this one is already a new DWPT
                        continue;
                    }
                    AddFlushableState(next);
                }
                finally
                {
                    next.Unlock();
                }
            }
            lock (this)
            {
                /* make sure we move all DWPT that are where concurrently marked as
                 * pending and moved to blocked are moved over to the flushQueue. There is
                 * a chance that this happens since we marking DWPT for full flush without
                 * blocking indexing.*/
                PruneBlockedQueue(flushingQueue);
                Debug.Assert(AssertBlockedFlushes(DocumentsWriter.DeleteQueue));
                //FlushQueue.AddAll(FullFlushBuffer);
                foreach (var dwpt in FullFlushBuffer)
                {
                    FlushQueue.Enqueue(dwpt);
                }
                FullFlushBuffer.Clear();
                UpdateStallState();
            }
            Debug.Assert(AssertActiveDeleteQueue(DocumentsWriter.DeleteQueue));
        }

        private bool AssertActiveDeleteQueue(DocumentsWriterDeleteQueue queue)
        {
            int limit = PerThreadPool.ActiveThreadState;
            for (int i = 0; i < limit; i++)
            {
                ThreadState next = PerThreadPool.GetThreadState(i);
                next.@Lock();
                try
                {
                    Debug.Assert(!next.Initialized || next.Dwpt.DeleteQueue == queue, "isInitialized: " + next.Initialized + " numDocs: " + (next.Initialized ? next.Dwpt.NumDocsInRAM : 0));
                }
                finally
                {
                    next.Unlock();
                }
            }
            return true;
        }

        private readonly IList<DocumentsWriterPerThread> FullFlushBuffer = new List<DocumentsWriterPerThread>();

        internal void AddFlushableState(ThreadState perThread)
        {
            if (InfoStream_Renamed.IsEnabled("DWFC"))
            {
                InfoStream_Renamed.Message("DWFC", "addFlushableState " + perThread.Dwpt);
            }
            DocumentsWriterPerThread dwpt = perThread.Dwpt;
            //Debug.Assert(perThread.HeldByCurrentThread);
            Debug.Assert(perThread.Initialized);
            Debug.Assert(FullFlush_Renamed);
            Debug.Assert(dwpt.DeleteQueue != DocumentsWriter.DeleteQueue);
            if (dwpt.NumDocsInRAM > 0)
            {
                lock (this)
                {
                    if (!perThread.FlushPending_Renamed)
                    {
                        FlushPending = perThread;
                    }
                    DocumentsWriterPerThread flushingDWPT = InternalTryCheckOutForFlush(perThread);
                    Debug.Assert(flushingDWPT != null, "DWPT must never be null here since we hold the lock and it holds documents");
                    Debug.Assert(dwpt == flushingDWPT, "flushControl returned different DWPT");
                    FullFlushBuffer.Add(flushingDWPT);
                }
            }
            else
            {
                PerThreadPool.Reset(perThread, Closed); // make this state inactive
            }
        }

        /// <summary>
        /// Prunes the blockedQueue by removing all DWPT that are associated with the given flush queue.
        /// </summary>
        private void PruneBlockedQueue(DocumentsWriterDeleteQueue flushingQueue)
        {
            var node = BlockedFlushes.First;
            while (node != null)
            {
                var nextNode = node.Next;
                BlockedFlush blockedFlush = node.Value;
                if (blockedFlush.Dwpt.DeleteQueue == flushingQueue)
                {
                    BlockedFlushes.Remove(node);
                    Debug.Assert(!FlushingWriters.ContainsKey(blockedFlush.Dwpt), "DWPT is already flushing");
                    // Record the flushing DWPT to reduce flushBytes in doAfterFlush
                    FlushingWriters[blockedFlush.Dwpt] = Convert.ToInt64(blockedFlush.Bytes);
                    // don't decr pending here - its already done when DWPT is blocked
                    FlushQueue.Enqueue(blockedFlush.Dwpt);
                }
                node = nextNode;
            }
        }

        internal void FinishFullFlush()
        {
            lock (this)
            {
                Debug.Assert(FullFlush_Renamed);
                Debug.Assert(FlushQueue.Count == 0);
                Debug.Assert(FlushingWriters.Count == 0);
                try
                {
                    if (BlockedFlushes.Count > 0)
                    {
                        Debug.Assert(AssertBlockedFlushes(DocumentsWriter.DeleteQueue));
                        PruneBlockedQueue(DocumentsWriter.DeleteQueue);
                        Debug.Assert(BlockedFlushes.Count == 0);
                    }
                }
                finally
                {
                    FullFlush_Renamed = false;
                    UpdateStallState();
                }
            }
        }

        internal bool AssertBlockedFlushes(DocumentsWriterDeleteQueue flushingQueue)
        {
            foreach (BlockedFlush blockedFlush in BlockedFlushes)
            {
                Debug.Assert(blockedFlush.Dwpt.DeleteQueue == flushingQueue);
            }
            return true;
        }

        internal void AbortFullFlushes(ISet<string> newFiles)
        {
            lock (this)
            {
                try
                {
                    AbortPendingFlushes(newFiles);
                }
                finally
                {
                    FullFlush_Renamed = false;
                }
            }
        }

        internal void AbortPendingFlushes(ISet<string> newFiles)
        {
            lock (this)
            {
                try
                {
                    foreach (DocumentsWriterPerThread dwpt in FlushQueue)
                    {
                        try
                        {
                            DocumentsWriter.SubtractFlushedNumDocs(dwpt.NumDocsInRAM);
                            dwpt.Abort(newFiles);
                        }
                        catch (Exception)
                        {
                            // ignore - keep on aborting the flush queue
                        }
                        finally
                        {
                            DoAfterFlush(dwpt);
                        }
                    }
                    foreach (BlockedFlush blockedFlush in BlockedFlushes)
                    {
                        try
                        {
                            FlushingWriters[blockedFlush.Dwpt] = Convert.ToInt64(blockedFlush.Bytes);
                            DocumentsWriter.SubtractFlushedNumDocs(blockedFlush.Dwpt.NumDocsInRAM);
                            blockedFlush.Dwpt.Abort(newFiles);
                        }
                        catch (Exception)
                        {
                            // ignore - keep on aborting the blocked queue
                        }
                        finally
                        {
                            DoAfterFlush(blockedFlush.Dwpt);
                        }
                    }
                }
                finally
                {
                    FlushQueue.Clear();
                    BlockedFlushes.Clear();
                    UpdateStallState();
                }
            }
        }

        /// <summary>
        /// Returns <code>true</code> if a full flush is currently running
        /// </summary>
        internal bool FullFlush
        {
            get
            {
                lock (this)
                {
                    return FullFlush_Renamed;
                }
            }
        }

        /// <summary>
        /// Returns the number of flushes that are already checked out but not yet
        /// actively flushing
        /// </summary>
        internal int NumQueuedFlushes()
        {
            lock (this)
            {
                return FlushQueue.Count;
            }
        }

        /// <summary>
        /// Returns the number of flushes that are checked out but not yet available
        /// for flushing. this only applies during a full flush if a DWPT needs
        /// flushing but must not be flushed until the full flush has finished.
        /// </summary>
        internal int NumBlockedFlushes()
        {
            lock (this)
            {
                return BlockedFlushes.Count;
            }
        }

        private class BlockedFlush
        {
            internal readonly DocumentsWriterPerThread Dwpt;
            internal readonly long Bytes;

            internal BlockedFlush(DocumentsWriterPerThread dwpt, long bytes)
                : base()
            {
                this.Dwpt = dwpt;
                this.Bytes = bytes;
            }
        }

        /// <summary>
        /// this method will block if too many DWPT are currently flushing and no
        /// checked out DWPT are available
        /// </summary>
        internal void WaitIfStalled()
        {
            if (InfoStream_Renamed.IsEnabled("DWFC"))
            {
                InfoStream_Renamed.Message("DWFC", "waitIfStalled: numFlushesPending: " + FlushQueue.Count + " netBytes: " + NetBytes() + " flushBytes: " + FlushBytes() + " fullFlush: " + FullFlush_Renamed);
            }
            StallControl.WaitIfStalled();
        }

        /// <summary>
        /// Returns <code>true</code> iff stalled
        /// </summary>
        internal bool AnyStalledThreads()
        {
            return StallControl.AnyStalledThreads();
        }

        /// <summary>
        /// Returns the <seealso cref="IndexWriter"/> <seealso cref="InfoStream"/>
        /// </summary>
        public InfoStream InfoStream
        {
            get
            {
                return InfoStream_Renamed;
            }
        }
    }
}

redpajama_set_name: RedPajamaGithub


text:
Samsung boosts flash density with 3-bit, 32-layer design
A terabyte on a postage stamp: RRAM heads into commercialization
Samsung begins mass production of 3-bit 3D NAND chips
Mobile storage about to balloon with new 3D flash chips from Intel and Micron
Intel touts 3D NAND flash that offers 'as much storage as you want'
The company says it can pack double the number of bits in a die compared with its competitors
By Stephen Lawson
Senior U.S. Correspondent, IDG News Service |
Intel plans to ship 3D NAND flash chips next year that will allow it to cram more bits into solid-state storage.
Its 3D NAND will have twice the density of competing products on the market now, Intel claims. Samsung, a key rival, is already on its second generation of SSDs built with 3D technology.
3D NAND has multiple layers of transistors stacked on top of each other in a cube. Intel's chips will have 32 layers. Samsung is shipping SSDs made with 32-layer flash, but Intel says its products will hold twice as many bits: 256 billion bits on a single die using MLC (multilevel cell), the most common form of flash.
Flash storage is much faster and more power-efficient than spinning disks but remains more expensive to manufacture. By doubling the capacity of a single die, Intel thinks it can achieve a breakthrough in the cost of flash so it can go into a wider range of systems. Products that already use flash will be able to have more storage for a given price.
For the high end of the market, Intel will be able to fit 1TB of data on a NAND chip just two millimeters thick, said Rob Crooke, vice president and general manager of Intel's Non-Volatile Memory Solutions Group. He announced the plans at Intel's investor meeting on Thursday.
"We're no longer having to make a compromise on how much storage we can fit in there," Crooke said. Within the next two years, Intel plans to build storage cards for enterprise servers that have more than 10TB of capacity.
The technology also increases what Intel can do for less expensive systems.
"You can [have] good-enough storage, so something less than a terabyte, at a much, much lower cost," he said. For thin and light devices such as two-in-one tablet-PCs, "you can get as much storage as you want," he said.
Flash still makes up only about 20 percent of storage sold today, averaged across all types of systems, Crooke said. Current projections see flash reaching 50 percent of the notebook market and 35 percent of the server market by 2018, he said.
Stephen Lawson covers mobile, storage and networking technologies for The IDG News Service. Follow Stephen on Twitter at @sdlawsonmedia. Stephen's e-mail address is stephen_lawson@idg.com
Stephen Lawson is a senior U.S. correspondent for the IDG News Service based in San Francisco.


Whether we are on social media, shopping, or banking, almost all of our connections have the same first experience: enter your username and password. Enter the FIDO Alliance and the W3C. The FIDO Alliance is a collection of organizations working to move the web off of the password dependency and on to cryptographically strong credentials. In this talk, we'll introduce you to .msCredential, an experimental version of the FIDO API implemented in Microsoft Edge, powered by Windows Hello.
We encourage you to test across browsers and devices, including Microsoft Edge–the default browser for Windows 10 – with free tools; including F12 developer tools — seven distinct, fully-documented tools to help you debug, test, and speed up your webpages. Also, visit the Edge blog to stay updated and informed from Microsoft developers and experts.