Want to increase traffic to your multi-language websites on a global scale? If that's the case, then you (or your translation service) really ought to pay attention to international search engine optimization (ISEO). After investing a lot of time, money and brainpower into website translation and website localization, it would be a heartbreaking shame if no one actually visited your professionally translated webpages. This is where ISEO can help.
First, let's look at how international search engine optimization differs from more traditional search engine optimization (SEO). When it comes to online marketing, translation, transcreation and localization are key elements in helping your company's brand move across cultural and linguists barriers — as is implementing a well-rounded SEO strategy.
If everyone searched the web in English, SEO centered around English language keywords and phrases opens in a new window would probably be enough to guarantee that your tech or medical device firm received a decent amount of traffic. But that just isn't the case.
For example, taking advantage of professional Arabic translation services would be a great way to start when breaking into the Arabic-speaking business world. But simply leaving your English language SEO strategies (or translating keywords directly into Arabic) in place for an Arabic website localization project won't necessarily help Arabic speakers naturally stumble upon your firm's online presence.
In a nutshell, ISEO means applying the rigorous SEO strategies a company uses for its English language websites to its localized, non-English web content — with a few important additions.
One of the main aspects of transforming SEO practices into good ISEO involves combining copywriting, marketing and translation skills into a workable ISEO bundle of relevant keywords and phrases. Once compiled (and updated often), this valuable linguistic toolkit can be used with text, titles and tags — as well as be inserted into a site's top-down, localization-update-friendly translation memory (TM).
Another important ISEO research-based concept is transcreation. Transcreation goes beyond mere translation by not focusing on translating keywords directly, but rather finding specific keywords in the local vernacular that people actually use to search the web. The real marketing translation trick here is that even within a certain language, these keywords can vary from region to region.
For example, an Arabic translation services transcreation specialist working on a website localization project involving different Arabic-speaking countries would have to take into account the fact that Moroccan Arabic (Maghrebi Arabic) has been influenced by Berber, French and Spanish over the years — which has had an impact on vocabulary and grammar today. Thus certain keywords and phrases Arabic speakers from Morocco or Tunisia might use to search for something online could vary widely with intuitive vocabulary choices made by someone from Lebanon or Saudi Arabia searching for the same thing.
In the Arabic translation services example above, website translation and basic localization practices will only get you so far. And while website translation and localization are all good steps in the right direction, ISEO can help attract more eyes organically to the marketing material you're posting online. This is why no matter how headache-inducing it might be to think about ISEO, it shouldn't be ignored when promoting your international brand.
The ultimate goal here is to foster a solid international inbound marketing strategy and increase organic searches for your business's content online through a comprehensive website localization process. This is why merging all of the strength of SEO with the research and linguistic subtleties of ISEO can help boost a company's regional or international visibility online considerably.


text:
Kuna a fost unitatea monetară a Statului Independent al Croației, din 1941 până în 1945, în timpul celui de al Doilea Război Mondial.

Istorie
Moneda kuna era utilizată în Slavonia, în Evul Mediu, din 1018 și între 1260 și 1380.
Cuvântul kuna semnifică "jder" în croată, același cuvânt este folosit pentru moneda croată actuală, care este subdivizată în 100 de lipa.

Kuna croată a fost introdusă în Statul Independent al Croației (NDH) la 26 iulie 1941.

Kuna a înlocuit dinarul iugoslav la paritate, iar față de marca germană, Reichsmark (ℛℳ), cu rate duble de schimb, una fixă, la 20 kuna = 1 ℛℳ, cealaltă fiind o rată controlată de stat de

31 decembrie 1941 - 25,00 Kn = 1 ℛℳ
31 decembrie 1942 - 37,50 Kn = 1 ℛℳ
31 decembrie 1943 - 40,00 Kn = 1 ℛℳ
31 decembrie 1944 - 80,00 Kn = 1 ℛℳ
6 mai 1945 - 120,00 Kn = 1 ℛℳ

Kuna din anii 1940 era subdivizată în 100 de banica. Moneda croată kuna a fost înlocuită de dinarul iugoslav, între 30 iunie și 9 iulie 1945, la o rată de 40 kuna = 1 dinar.

Monede metalice

Monedele de zinc au fost emise în valori nominale de 1 și 2 kune în 1941, dar numai cele cu valoare nominală de 2 kune sunt disponibile astăzi în număr apreciabil.

Bancnote
Bancnotele Kuna au fost introduse de guvern în 1941, cu valori nominale de 10, 50, 100, 500 și 1000 kuna. Acestea au fost urmate în 1942 de bancnote cu valori nominale de 50 de banica și de 1 și 2 kune. În 1943, Hrvatska Državna Banka (în română "Banca de Stat a Croației") a emis bancnote cu valori nominale de 100, 1000 și 5000 de kuna. Bancnotele au fost tipărite în Germania de către Giesecke & Devrient.

Probleme concurente

Grupări de partizani au emis și ele bancnote. Aici sunt incluse Autoritatea Regională din Zagreb de Eliberare a Poporului (în croată: "Oblasni narodno-oslobodilački odbor Zagrebačke oblasti") și Consiliul de Național Antifascist pentru Eliberarea Națională a Croației - ZAVNOH (în croată: "Zemaljsko antifašističko vijeće narodnog oslobođenja Hrvatske")

Regiunea Zagreb a emis bancnote cu valori nominale de 500, 1.000, 5.000, 10.000 și 50.000 de kuna. ZAVNOH a emis, în 1943, bancnote exprimate atât în dinari cât și în kuna, cu valori nominale de 100, 500, 1.000, 5.000, 10.000 și 100.000 de kuna / dinari. Au fost emise, de asemenea, bancnote cu valori nominale de 100, 500 și 1.000 de lire, însă fără indicații cu privire la valoarea în kuna.

Urmări
Privitor la noua monedă croată, Kuna, în uz începând din 1994, în noul stat croat, născut în urma dizolvării fostei Iugoslavii, au existat polemici, montate de unii care au dorit să lege actualul stat democratic croat de regimul aliat al Germaniei Naziste, statul ustaș, considerând că denumirea acestei monede, kuna, ar constitui o provocare.

Se prevede ca moneda kuna să continue să circule până la înlocuirea ei cu moneda comună europeană, euro.

Note

Bibliografie
 Cuhaj G., Michael T., Miller H., Standard Catalog of World Coins 1901-2000. — ed. a 39-a — Krause Publications, 2011. — 2345 p. — ISBN 978-1-4402-1172-8.
 Cuhaj G.S., Standard Catalog of World Paper Money. General Issues 1368—1960.'' — ed. a 12-a — Krause Publications, 2008. — 1223 p. — ISBN 978-0-89689-730-4.

Vezi și
 Kuna

Statul Independent al Croației
Monede ieșite din circulație
Istoria Iugoslaviei
Numismatică
Fondări în 1941
Desființări în 1945

redpajama_set_name: RedPajamaWikipedia


text:
Mark Reynolds: To solve climate change, passengers must now fly plane
Opinion | February 4, 2017
Mark Reynolds
When it comes to climate change, most Americans are like the passengers on a jetliner wanting to arrive safely at their destination but thinking there's no need to be involved with the actual flying of the plane. The "people in charge," surely, have things under control.
Lately, however, the plane has experienced a rough ride:
Christmas Day, the temperature at Santa's workshop — aka the North Pole — approached the melting point of 32 degrees Fahrenheit, about 40 degrees above average for that time of year.
With 2016 hitting another high mark for average global temperature, 16 of the 17 hottest years on record have occurred in the current century.
Floods, like the disasters that struck Louisiana and North Carolina last year, are happening as a result of unprecedented rainfall measured in feet rather than inches.
As we start the new year, 37 million people across Africa are without food because of crop failures caused by droughts and floods exacerbated by climate change.
All this turbulence is prompting some of the passengers to rise from their seats, walk to the cockpit and check with the pilot. Upon opening the door, however, they are shocked to see no one seated at the controls.
For a number of years, President Obama did his best to keep the plane aloft with executive orders to address climate change, chiefly the Clean Power Plan to reduce carbon dioxide emissions at power plants. But the 44th president has donned his parachute and exited the plane, leaving the pilot's seat disturbingly empty.
So, how do we avoid crashing into a mountainside? It's time for the passengers to start flying the plane, and by passengers, we mean citizens. This entails setting aside cynicism about our government and engaging with people in Congress who represent us in Washington. Government will respond to the will of the people, provided the people tell the government what we want.
Engaging with our government also requires us to seek common ground between Republicans and Democrats. We can find that common ground by listening as much as we talk. And if we listen, we find that the greatest concern about acting on climate change — whether through regulation or carbon pricing — is the impact it will have on our economy, the fear that jobs will be lost.
We can alleviate those fears and find that common ground with a market-based solution that holds polluters accountable for the damage caused to our air, water and climate. Such a market-based solution needs to be revenue neutral, thereby preventing it from increasing the size of government. A steadily-rising fee on carbon, with all revenue returned to households, would bring down greenhouse gas emissions while boosting the economy.
A study from the highly respected Regional Economic Models, Inc., looked at such a policy, whereby a fee on the carbon dioxide content of fuels would increase $10 per ton each year. Border tariffs on imports from nations lacking a similar carbon price were applied to maintain a level playing field for American businesses. Within 20 years, the REMI study found that emissions would drop more than 50 percent. The study also found that the policy would add 2.8 million jobs, due primarily to recycling the carbon fee revenue back to households.
But in our highly polarized political atmosphere, is it really possible for Republicans and Democrats in Congress to work together on climate change?
Hopeful signs emerged in 2016 with the creation of the bipartisan House Climate Solutions Caucus, which has equal membership from both sides of the aisle, including Mark Amodei, the Congressman from Northern Nevada. The caucus creates a safe space for Republicans and Democrats, weary of the bickering and posturing surrounding the climate issue, to have an honest dialogue about ways to reduce the risks we face in a warming world.
In the coming year, as more and more citizens interact with their members of Congress, we can grow the ranks within the Climate Solutions Caucus and reach the critical mass necessary to introduce and pass bipartisan legislation.
None of this can happen, however, unless we take control of the plane and put it back on course. As Apollo astronaut Rusty Schweickart once said, "We aren't passengers on spaceship Earth, we're the crew. We aren't residents on this planet, we're citizens. The difference in both cases is responsibility."
Mark Reynolds is executive director of Citizens' Climate Lobby.

redpajama_set_name: RedPajamaCommonCrawl


The item Barney, All about opposites, Lions Gate Films ; Lyons Partnership ; HIT Entertainment ; director, Fred Holmes ; writers, Mark S. Bernthal, Chryl Ammeter, Michael Anthony Steele ; producers, Julie Hutchings, Charlotte Spivey, R. Shawn Kelly, (DVD) represents a specific, individual, material embodiment of a distinct intellectual or artistic creation found in Cedar Rapids Public Library-Metro Library Network.
There's nonstop fun as Barney and his friends go and learn all about opposites! Everyone helps Baby Bop understand concepts like up and down, in and out, high and low. Hey Diddle Diddle, the kids see that they can be big or little but it's whats inside that counts! Then join in as Barney and his friends have a cool time on a hot day in a pretend winter-summer wonderland learning about hot and cold! There's always Tee-riffic teaching and fun when big dinos and small friends are around!


text:
Home > Technical Information
Different Types of Radar
X-Band Radar: 10.5 to 10.55 GHz — Dating from the 1950s, X-band radar is the easiest to detect because of its lower frequency and higher power output. Depending on terrain, temperature and humidity, X-band radar can be detected from a distance of 2 to 4 miles, yet it can only take accurate readings of speed from a distance of 1/2 mile or less.
Unfortunately, police radar is not the only source of X-band signals. Garage door openers, microwave intrusion alarms, microwave towers, and other high-tech equipment can fool a radar detector into giving off an X-band alert. Filters and redundant sampling are used to combat this "falsing."
K-Band: 24.05 to 24.25 GHz
K-band, the most common type of police radar, made its appearance in 1978. The first K-band hand-held radar guns could only be used from a stationary position. Later, a "pulsed" version was introduced that could be used from a stationary or moving vehicle.
K-band radar waves have a relatively small wavelength so they are more easily absorbed by water molecules in the air. At the power level found in police radar guns, K-band has an effective clocking range of about 1/4 mile. Depending upon terrain (around a corner, over a hill, etc.), K-band waves can be detected from a range of 1/4 mile to 2 miles.
K-band guns also have what's known as "Instant-On" radar. This keeps the transmitter in "hot standby" mode, ready to be activated by an officer when the target is within 200-300 yards. If it's been aimed at you, your speed has been measured by the time the detector alerts you. If it is being used to target vehicles ahead of you, your detector may provide a warning in time for you to slow down and avoid a ticket.
Ka Photo Cop and Ka Wide-Band: 34.2 to 35.2 GHz
In 1987 the FCC allocated a frequency on yet another band, Ka, for police radar use. With that came the introduction of photo radar (also known as "photo-cop"). The photo-cop system works at 34.3 GHz and combines a Ka-band radar gun with an automated camera.
A vehicle approaching at or above a predetermined speed will trigger the camera. The photo shows the front of the vehicle, license plate, driver's face, the date, location, and time. The unit can clock and photograph up to 200 vehicles per hour. Alleged speeders are not stopped. The film is processed and a ticket is mailed to the registered owner of the vehicle, ordering him or her to pay the fine or appear in court.
Photo-cop's effective range is 120-300 feet and it transmits a continuous signal which is a plus for radar detectors. The distance at which it can be detected varies depending upon a detector's Ka-band sensitivity. Better detectors can typically sniff out a photo-cop system 1/4 to 1/2 mile away. Only a handful of cities use photo radar. Industry sources predicted widespread interest and expanded use, but that has not been the case. Legal controversies along with prohibitive expense have caused officials to stick with more traditional methods of speed detection.
The FCC later expanded Ka-band radar use to a range of 34.2 to 35.2 GHz. This became known as Ka Wide-Band.
Ka Super Wide-Band: 33.4 to 36.0 GHz: The introduction of the "stalker" radar gun raised the stakes in the detection game. Unlike all previous guns, the Stalker can be FCC licensed for any frequency in the Ka-band between 33.4 GHz to 36.0 GHz, and so cannot be picked up by detectors designed only for X, K, and photo radar. Stalker guns are being used in more than half the country. In response, manufacturers have developed detectors with "Super wide-band" technology that sweeps all of the Ka-band allocated to radar, as well as providing continued protection against X, K, and photo radar.
Laser: With the help of the federal government and the insurance industry, the laser speed gun has found its way into the hands of state and local police in at least half the country.
The advantages of a laser gun are compelling: the laser light beam is far narrower than a radar beam, allowing more accurate pinpointing of a specific vehicle; and the time needed for capturing a speed reading is less than half a second versus 2 to 3 seconds for radar.
The drawbacks are also important to note: laser guns are very expensive, they can't be used from a moving vehicle or from behind glass, and accurate aiming requires a tripod or a very steady hand.
Despite initial claims that the energy from a laser gun is not detectable, it is. And as the laser beam moves away from the laser gun, it widens and becomes easier to detect.
Vehicle speeds are typically measured at roughly 1,000 feet (1/5 mile); at that distance the laser beam is over 3 feet wide. Many of the laser detectors in use have a working distance of approximately 1-1/2 miles (at that distance a laser gun's beam covers two lanes of traffic).
VG-2 Radar Detector Detection: You can think of VG-2 as law enforcement striking back against radar detectors. VG-2 identifies vehicles with operating radar detectors on board. VG-2 Guard emits an alert and shuts down when a VG-2 unit is sensed. "Shadow Technology" shields the detector from VG-2 without interrupting radar and laser protection.


Choose a Picture and Join Us - Blue Printing November 17th - Nicole Scott Designs Inc.
Next Sunday, November 17th, Trade Roots and I are hosting a fun Blue Printing Workshop. Choose a picture (8×10) and if you need help sizing it just email me the picture by Friday and I'll do it for you. Once the picture is the correct size I turn it into a negative of itself and print it on transparency paper and That's it! Everything is provided…and refreshments too!
We have a cool selection of images you can use if you're stumped or don't have time…here's a sample of some images I provided. One of the keys to success is having an image with high contrast and not too much fine detail or text which can have a tendency to turn out blurry. (These ones have already been turned into negatives as described above…so imagine for these pics when we are done the parts that are black will be light and and what is white will be blue) Click Here to Register – Hurry Space is Limited.
In the End your project can look like this…cool right?


The Secretary of Commerce and Economic Development, Mr Gregory So, attending a lunch meeting with directors and advisors of the Vancouver section of the Hong Kong-Canada Business Association in Vancouver, Canada, today (February 12, Vancouver time), encouraged Canadian enterprises to make full use of Hong Kong's strengths in tapping the massive Asian markets and beyond under the Belt and Road Initiative.
"Belt and Road is, in essence, an invitation to the international community to join hands to take global and regional co-operation to new heights, in particular in terms of enhancing policy co-ordination, strengthening infrastructural facilities connectivity, facilitating unimpeded trade and investment, deepening financial integration and building people-to-people bonds," Mr So said.
In this connection, Hong Kong is well placed to partner with Canadian companies to participate in the initiative to tap the business opportunities in the markets along the Belt and Road.
"With our distinctive advantage operating under the unique 'one country, two systems' framework, Hong Kong can play a central role in delivering the enormous opportunities presented by the Belt and Road Initiative," he added.
Before the lunch meeting, Mr So paid a courtesy call on the Consul General of the People's Republic of China in Vancouver, Ms Liu Fei.
He next met with the Chair of the Board of Directors of Creative BC, Mr Gordon Esau, to exchange views on the promotion of creative industries. Creative BC is an independent agency for promoting the development of creative industries in the province of British Columbia.
In the afternoon, Mr So met with the Minister of International Trade of British Columbia, Ms Teresa Wat. He pointed out that Hong Kong is a "super-connector" between Mainland China and other parts of the world, and the ideal gateway for British Columbia businesses to enter the vast Chinese and Asian markets. British Columbia companies in Hong Kong can leverage on the Mainland and Hong Kong Closer Economic Partnership Arrangement to gain easier access to the Chinese market.
Before concluding his visit, Mr So attended a Chinese New Year celebration dinner with the Hong Kong community in Vancouver.
Mr So will return to Hong Kong tomorrow morning (February 14).


100 Wedding Lightroom These presets are specially made for wedding & model photography. Mainly focused on skin & light. works well with both indoor & outdoor photography.Great for both amateur & professional photographers.
Set 1 Lightroom 150 presets Improvements presets for laytrum collected only the best presets from all the new pictures of me!You can easily and quickly, and most importantly accurately process your photos!
Set 2 Lightroom 150 presets Improvements presets for laytrum collected only the best presets from all the new pictures of me!You can easily and quickly, and most importantly accurately process your photos!
350 pro Lightroom presets Pro Lightroom Presets Bundle 350 includes professionally settings for your photos, images, and 3D renderings .
1200 Lightroom Presets Mega Bundle The guys from Symufa are back with a brand-new collection of Lightroom Presets that will give your photos an irresistible look in a matter of seconds! If you're looking for some fun, easy-to-use presets, this is just what you need.
40 Vintage wedding Presets For Adobe Lightroom 6 (CC), 5 & 4. and ACR Presets for Photoshop CC & CS6. If you are in search of classic look and love film soft colors this Vintage Wedding Presets collection for you! Presets are designed to work with RAW and JPG files.
Preset lightroom Pack Vol.1 LRB Plugins.com has announced that the LRB Preset Pack Vol 1. has been updated. The update includes JPEG versions of the presets, additional extra Presets for Lightroom 5, as well as Camera Raw Preset versios for the Pack.


text:
Café Pinfold
– A blog by Tom De Haven
COMICS WRITINGS
KING TOUEY
EPISODE ONE: Heroine, Hero & Villain
EPISODE TWO: Cat of Ashes
EPISODE THREE (Part One): Harrigan, That's Him
EPISODE THREE (Part Two): Harrigan, That's Him
EPISODE FOUR: Li'l Andiron
EPISODE FIVE: The Sheriff Rides In
EPISODE SIX: Bagatelle
EPISODE SEVEN: Breaker Bergoff
EPISODE EIGHT: Sleepless Night
EPISODE NINE: Truth
EPISODE TEN: Armored
EPISODE ELEVEN: Lily of Labor
EPISODE TWELVE (Part One): Hangfire
PAINTERS IN WINTER
Chapter Seventeen
Chapter Eighteen
Chapter Nineteen
Notes & Bibliography
NOTES ON GREEN CANDLES
(This essay is a revised and updated version of one that appeared as the Introduction to the trade paperback that collected Green Candles Volumes 1-3, published in 1997 by Paradox Press/DC Comics)
For eleven years I lived in Jersey City, and at least ten times a year I'd toy with the notion of setting a private-eye novel there. The place had (still has) all the right ingredients: mean streets and enclaves of great wealth, a cynical, and heterogeneous, population and a lively tradition of crooked politics. Once, I even got around to naming my fictional detective—"John Halting." Before I could think of anything for him to do, though, some other story idea came along that seemed more urgent, and poor Halting languished.
Then, three years after I moved to Virginia, I got a phone call from Andy Helfer, the editor-in-chief at Paradox Press, a then-new "mature-readers" imprint at DC Comics. Andy was developing a line of serialized mystery novels in comic-book form—would I be interested, he wondered, in submitting a proposal or two? Absolutely! Though I was in no way, shape or form a "comics professional," by that time in my career I'd scripted a couple of graphic novels and loved the work. It's much more fun, but a helluva lot more work, than writing film scripts: don't let anybody tell you differently. And since production costs are in the thousands rather than the millions, a writer often has a lot freer hand.
I wrote up three proposals. Andy picked the story called Green Candles—and suddenly I had my chance to write a detective novel set in Jersey City.
In the book, the setting is "Bergen City," but that was just so I could take some liberties with geography and not get snotty letters from local residents, and have a go at city politics without being sued (or worse).
Take it from me, though: John Halting lives in Jersey City.
In fact, shortly after my script for part one of the series was sent to cartoonist Robin Smith in London, I heard from Joel Rose, my editor, that Robin would appreciate some reference photographs. So I phoned a former neighbor who still lived in Jersey City and hired her to shoot a few rolls of black-and-white film (remember that? rolls of black-and-white film?). I gave her a very specific shot list. Eventually, Robin got a batch of prints–this all pre-dated the Internet, email, and email attachments–and one of the great pleasures I took in seeing his work-in-progress was to revisit my much-missed old stomping ground in his page panels. (Robin's cartooning is clean, clear, and bold, very reminiscent of DC Comics in the 1960s, and is especially reminiscent, to me, of quintessential Superman artist Curt Swan's work.) The house where the character Grace Penny lives is the Queen Anne brownstone, built circa 1880, that my wife Santa and I bought early in 1979 and lived in till the late summer of 1990; the elementary school where Grace teaches, and where Halting's daughter is a pupil, is the school my two daughters attended; the imposing building where Eddie Guinness presides as mayor is the Jersey City City Hall; and so on.
When I pitched Green Candles to Andy Helfer, I knew next to nothing about what a private investigator actually does—but that didn't seem any impediment. Ever since the days of Black Mask magazine, most writers of detective fiction (Dashiell Hammett to the contrary) have relied on their imaginations, not their memories or life experiences, to make up stories. And why not? The private eye you meet in a novel is an American myth, an urban myth, and readers have always been in on the con. Lew Archer and Philip Marlowe never existed and never could have; same goes for Nero Wolfe, for Mike Hammer, for Kinsey Milhone, for Spencer, for Travis McGee.
Same goes for John Halting.
The self-employed, fiercely independent, ferociously honest private eye solving murder mysteries (after being slugged and sapped and shot full of dope) is one of our more enduring fantasies, and even in our high-tech/high-snark new millennium, we continue to buy into that romantic, preposterous conceit. Good for us.
But while I was quite prepared to draft a detective story without so much as an inkling of how a bond fide private investigator operates (writers are shameless), by a weird quirk of fate, I ended up scripting Green Candle as a fully licensed P.I.
Here's what happened: One day shortly after I'd agreed to do the mystery novel for Paradox Press, I was flipping through a Richmond weekly newspaper when my attention was caught by a classified ad for a "Private Investigator Training Course." There was a phone number listed and I called it. Turns out, Virginia is (or at least it was back then; I haven't checked recently) one of the few (I think just two) states where you can become a licensed P.I. without having any previous law-enforcement or military credentials. All you have to do is take a 61-hour classroom course!
I couldn't resist. I signed up (it set me back a measly three hundred bucks) and spent four summer weekends (eight hours a day, Saturday and Sunday) in a classroom (located above a towing-service garage) with about twenty other would-be gumshoes. One class period we took a field trip to a local gun range, where I fired a handgun for the first, and only, time in my life. I was rated Sharpshooter.
My classmates included several bar bouncers, a couple of dairy farmers, a retail-store clerk, a housepainter, three or four college students, and a businessman who'd recently sold his potato chip company for a million bucks and was bored out of his skull by retirement. Naturally, we all smoked cigarettes like mad during our ten-minute breaks. We had to! We were training to become private eyes!
I loved that course, and scribbled notes like crazy, and was heartily sorry when the four weekends were over. Along with my classmates, I took and passed the state certification test (one of the questions—I swear!—was: "Whose picture appears on the five-dollar bill?") then I paid my seventy-five bucks and got a Virginia P.I.'s license, issued to me by the Department of Motor Vehicles.
Naturally, I showed it to everyone I met.
I began scripting Green Candles while I was "in training" and finished it after I was fully licensed. And yes, the story I wrote, while still a "fantasy," in the pulp tradition, was definitely informed—and improved, I hope—by certain things I learned in my "private-investigator training program."
For one thing, when John Halting tells his daughter that "Real cops don't like it when you call yourself a detective"—that's an exact quote I plucked from my class notes. And the episode that opens the novel is based on a story our instructor told in class.
Oh, in case you're wondering: no, I never used my license for anything other than to impress my friends and relatives. (At least I think I impressed them.)
"So where do you get your ideas?"
Here, there, everywhere—but never from newspapers or magazines.
Except in the case of Green Candles.
By a strange coincidence, both Vanity Fair and The New Yorker ran long articles in the same month in 1993 about "recovered memory syndrome" and "Satanic cults," and by an even stranger coincidence I happened to read them both. The Vanity Fair article pretty much supported the idea that devil cults were real and so were recovered memories; The New Yorker article (which later appeared as a book called Remembering Satan) took the opposite position.
Shortly after I'd read both pieces, it occurred to me that here was material for a novel. (Incidentally, the green candles motif is swiped directly from something mentioned by an interviewee in Vanity Fair: credit where credit's due.) I started doing a little independent reading about recovered memory, and began developing my own opinions on the subject.
Around that same time, Andy Helfer first contacted me, so it seemed natural to develop the material for a mystery story. In the twenty-one years that have passed since then, recovered memory syndrome has ceased to be a hot and controversial topic, and because of that, my plot may seem a lot less "cutting edge" that it did back in '93. But that's all right by me, quite all right. The phenomenon scared and depressed me, for a lot of reasons, and I'm happy it disappeared from tabloid television and American courtrooms.
From time to time, though I've wondered if that cultural disappearance was the reason why Green Candles never was optioned for a film; I'm pretty sure it was the only title in the Paradox Graphic Mystery line that wasn't; two books in the series—Road to Perdition and A History of Violence—actually were made into very successful films.
A few years ago I got a semester's release from teaching to work exclusively on my fiction. What I decided to do during those deliciously free eight months (summer vacation and fall semester) was to write first-drafts of a number of story ideas that I'd roughed out in notebooks. Ended up, I drafted four novels and a collection of novellas. One of the novels was another (but the first prose) John Halting murder mystery. With any luck, I'll get back to it, and revise it, one of these days.
Prose, scripts, lyrics © 2014 Tom De Haven.
Pinfold illustration by Philip Pascuzzo.
Website design by Chad Luibl.


text:
Starbreeze : A grand event begins as PAYDAY 2™ celebrates its 9-year Anniversary today
August 11, 2022 MarketScreener
Today, the 11th of August 2022, PAYDAY 2™ celebrates 9 amazing years of PAYDAY 2. The highlights of this event is the new community event where the community works together to unlock cosmetic rewards. In addition to the event and rewards, OVERKILL_Almir is hosting a stream this afternoon at 17:00 CEST on the paydaythegame Twitch Channel. It's been 9 years since PAYDAY 2 first released. Ever since, PAYDAY 2 has been at the forefront of co-op and heisting games and has often sat as one of the most played titles on Steam.
The Biggest Gaming News For August 8, 2022
August 9, 2022 Justin Reeve
Mondays. What positive can you possibly say about them? Since you've probably gotten bogged down in a backlog of work from last week, I'm sure that you're wanting to get back up to speed with everything that's been going on in the world of gaming, so I'm just going to get right down to it with our daily news roundup. This time around, we heard that a live action Pac-Man movie is currently on the horizon, someone came across a hidden multiplayer mode in Super Punch-Out, and the highly anticipated Midnight Suns has been delayed once again, this time indefinitely.
RPGamer Round-Up: July 31 – August 7
August 7, 2022 Alex Fuller
Welcome to the latest edition of RPGamer's round-up column, where we look back at some of the articles that we have posted over the previous week. This article is designed to give reminders of some interesting content and stories that our readers might have missed. Editorial Content
Soul Hackers 2 Impression
25 years after the debut of the first Soul Hackers game, a follow-up is nearly upon us. After only a few hours, Luis Mauricio reports it's clear that Soul Hackers 2 is a strong game with an excellent battle system.
PS5 sales rebound in Spain, while Nintendo stands out with Xenoblade Chronicles 3 and more games
August 5, 2022 https://pledgetimes.com
Monolith Soft's RPG becomes the best premiere of the franchise in the country.
Xenoblade Chronicles 3 has not needed many days to become a true success of Nintendo Switch. Monolith Soft has managed to develop an adventure that has already dominated the best-selling game rankings in the United Kingdom and Japan, although in Spain it can also boast of its popularity. In fact, the data of the last week place this RPG as the best opening of the franchise in the country.
Xenoblade Chronicles 3 debuts in Spain with 21,000 copies soldSo we read it in gamereactor, where they also detail the Top 10 best-selling titles in Spain.
Activision-Blizzard made more from mobile than consoles + PC combined
August 4, 2022 Derek Strickland
Activision made more money from mobile in Q2 2022 than all other platforms combined, signalling the importance of breakout hits like Diablo Immortal. VIEW GALLERY – 2 IMAGES Diablo Immortal is helping buoy Activision-Blizzard earnings amid stabilization of pandemic spending highs. The publisher has reported significant revenue drops The popular mobile game helped Blizzard's mobile earnings skyrocket by 462% year-over-year, and with the help of Candy Crush and Call of Duty Mobile, has catapulted total company mobile earnings.
Grab the jaw-dropping Matrix Awakens online games spin tech demo before it's delisted this week
July 7, 2022 Mitchell Clark
Download it before Saturday if you want the experience.
Screenshot by Umar Shakir / The Verge
If you've wanted to experience the impressive visuals in The Matrix Awakens: An Unreal Engine 5 Experience and haven't downloaded it yet, you'll want to act fast — according to Unreal Engine's website, it'll be removed from the PlayStation and Xbox stores on Saturday, July 9th. After that date you'll still be able to play and download it, but only if you added it to your library before the cutoff.
The Matrix Awakens, released in December 2021 for the PlayStation 5 and Xbox Series S / X, is meant to act as a tech demo showing off the 'power and potential' of Epic's next-generation graphics engine, with its ray traced lighting and 'metahumans.
Arcadegeddon Crossplay
July 5, 2022 About Bogdan Robert Mateș
Arcadegeddon adds a splash of color to developer IllFonic growing list of developed co-op titles. As its full launch comes around, crossplay is one topic that's on the mind of players who might have held out on the game during its early access period.Arcadegeddon cross-platform support was promised as part of the title's early access roadmap and, as we get ready to defend Gilly's arcade from everything the rival megacorporation throws at it, we won't have to worry about platform limitations.Arcadegeddon Crossplay That's because Arcadegeddon crossplay is available at launch, across PC, Xbox Series X/S, PS5, and PS4.
'Pac-Man World' Remake to Come Soon on PC, Consoles on August 26
June 28, 2022 Joseph Henry
Joseph Henry, Tech Times 28 June 2022, 02:06 pm "Pac-Man World," a classic video game title from PlayStation 1 will be revived in a remake under "Re-Pac." Bandai Namco confirms that the upcoming game is coming on Aug. 26 on PC, Nintendo Switch, and PS5. Since this is a revamped version, this title is expected to arrive with smoother graphics and updated gameplay. There might be a new twist in the story, but we will see if it's true upon its official launch two months from now. Following the Direct event that took place recently, Nintendo has teased the fans with a lot of games that will be returning to several platforms.
Fall Guys Fixes PlayStation 5 Party Issues and Several Other Bugs
June 27, 2022 Aaron Nashar
Mediatonic has finally released a brand new update for Fall Guys, fixing PlayStation 5 party bug, and Switch visual issues.
The new Fall Guys update targeted mainly performance issues across all platforms that came up amid the game's free-to-play launch. Notably, the patch fixes the PlayStation 5 issue that would prevent players from joining games while in a party. The update also fixes several issues with the game's visuals on the Nintendo Switch. Other notable changes that the patch brings include teams no longer spawning in the same place when playing Team Rounds, and party members also hearing each other in the game's voice chat.
Best deals from the 2022 GameStop Pro Days
June 24, 2022 Danny Appleford
GameStop Pro Members have access to two days' worth of exclusive deals on consoles, video games, and other merchandise on June 24 and 25. With so much offered in the Pro Days deal, there are some highlights that may go unseen. Here are the best deals during GameStop's 2022 Pro Days. The Pro Days highlight some major positives for Pro Members as soon as they reach the website. Pros can get a $25 GameStop gift card and a copy of Halo Infinite with the purchase of an Xbox Series S, giving players an opportunity to get two games for their new system, as well as up to 50 percent off select titles and 10 percent off various pre-owned games, accessories, and consoles.
deliver transparent infomediaries


text:
SCPDenise Everson2022-01-24T17:51:16+00:00
Positively Impacting Lives
The Sustainable Communities Project® (SCP) is an innovative public-private philanthropic effort consisting of a cross-disciplinary team launched by ThinkBox and supported by The George Washington University. The SCP aims to address demonstrated needs and reduce barriers to self-sufficiency plaguing underserved populations. Established in 2012, the SCP launched with $245,000 in seed funding from a District of Columbia government Sustainable DC Innovation Grant. The D.C. Housing Authority, SCP's inaugural Project Host, continues to ensure innovative community benefits from its on-going sustainable infrastructure work. In 2018, the Founder's Village (a consortium of thought leaders, entrepreneurs, academicians, and funders) convened to pledged support for the SCP and strategize long-term goals. From that convening, Task Teams emerged which marry problem solvers with evolving challenges in four critical areas: Jobs & Training, Entrepreneurship, Wellness, and S.T.E.A.M. Education.
Transforming Communities
In 2022, expansion of our Venture Studio ecosystem underway.
In 2021, coached and mentored returning citizens who participated in DC Government-sponsored immersive programming aimed at funding entrepreneurial ventures.
In 2020, launched a very successful Venture Studio to expose, identify, coach, and provide contracts to underserved entrepreneurs and ventures.
Participated in DCHA's 2020 Back2Business entrepreneurship event
Hosted community-wide entrepreneurship workshops and pop-up workshops serving over 100.
Supported DCHA's 2019, 2020, and 2021 Entrepreneurship Expo serving over 150 participants.
Sponsored a National Science Foundation's i-Corps™ lead trainer through The George Washington University's Office of Entrepreneurship
& Innovation.
Over 1,620 mentoring and coaching hours to students and ventures.
Fall 2020 Inaugural Venture Studio Cohort
Fall 2020 Participants:
Carleigh Berryman & Gavin Cornelius (www.vivavita.org), Alston Clark (www.zionroar.com), E. Lynn Coates (E. Lynn Coates Studios), Akili Cooper (Advanced Energy Solutions), R. Denise Everson (E3 Connections), Kayla Harley (www.kaylaharley.com), Dr. Monte Oyd Harris (AMoDAOS), Ny Kenya-Chamberlain (N&Co), Shinar Little & Maurice Hillyard (FogHill), Alexandria Smith (Monarchs), and Christopher & Gurnee McNair (Magnus Diagnostics Labs)
2019 Entrepreneurship Workshops hosted by D.C. Housing Authority
Generously Supported By:
ThinkBox + Altura + The Stennett Company + E3 Connections
S.T.E.A.M. Education
On track to award $35,000 in academic scholarships and stipends in 2022 to DC Housing Authority students enrolled in S.T.E.A.M. majors.
Awarded $30,000 in academic scholarships and stipends in 2021 to DC Housing Authority students enrolled in S.T.E.A.M. majors.
Invested over $5,000 in school supplies to DC Housing Authority students.
Invested over $11,000 in local community organizations and institutions such as the Washington, D.C. Chapter of the Continental Socieites, Inc., National Museum of African American History and Culture, Catch a Meal, and the Langston Terrace Resident Council.
Funded hundreds of dollars in community grants to low-income residents through a Resident Council.
Provided paid living-wage internships to several local students.
Volunteered over 4,450 hours to local communities.
*S.T.E.A.M.: Science, Technology, Engineering, Art (Architecture) & Math
In 2022, working with a Nurse Practitioner turned entrepreneur who is providing on-site services to DCHA residents to expand her reach and impact. Partnered with the National Association of Chronic Disease Directors through the Sustainable Communities Project® Founder's Village to impact health outcomes among underserved residents in D.C. specifically targeting: obesity, asthma, diabetes, smoking, depression, urban trauma, and maternal health.
2020 Catch a Meal Food Distribution Organized by The SVE Firm (April Taylor, Founder) and Hosted by the Lower Loudoun Boy's Football League and Sterling Youth Foundation (Former NFL player Darrell Jackson, Founder)
ThinkBox + Last Call + Founding Farmers + Prince William Food Rescue + Loudoun County Sheriff Office's Eastern Loudoun Station + PJ Santiago, President of Santiago Team at KW Capital Properties.
Photography By: India Andrea Photography
In 2022, plans are underway to support and expand existing workforce development programs in the region.
On track to generate over 300 jobs including over 50 careers in solar.
Trained over 50 participants in solar careers including installers and electricians.
Trained a lead-trainer for the National Science Foundation's i-Corps™.
Real People at Work
In 2013, the SCP in conjunction with D.C. Housing Authority surveyed residents to determine priority resident service focus areas. Realistic jobs/Quality careers emerged as the top priority which guided SCP's programming plan. The SCP manages the $5M human capital component of DCHA's Solar for All grant in support of its Sustainable Infrastructure Program. WDC Solar, a DC-based minority business, continues to provide high-demand solar installation training to D.C. residents in support of Solar for All. WDC Solar is a SCP Founder's Village member.
Project Host
Partnering in Success
D.C. Housing Authority became the inaugural project host in 2012 and continues to provide invaluable support. DCHA is a valued partner in the funding, planning, implementation, and ultimate success of the Sustainable Communities Project®. Project Hosts have access to our vast Founder's Village network, growing resources, and proven impact process.
District of Columbia Housing Authority
www.dchousing.org
D.C. Housing Authority became the inaugural project host in 2012 and continues to provide invaluable support.
Interested in the SCP?
We look forward to hearing from you. Let's start a conversion !


text:
#include "stdafx.h"
#include "cpprest/details/fileio.h"
#include "robuffer.h"

using namespace ::Windows::Foundation;
using namespace ::Windows::Storage;
using namespace ::Windows::Storage::Streams;
using namespace ::Windows::Networking;
using namespace ::Windows::Networking::Sockets;

namespace Concurrency { namespace streams { namespace details {

/// <summary>
/// The public parts of the file information record contain only what is implementation-
/// independent. The actual allocated record is larger and has details that the implementation
/// require in order to function.
/// </summary>
struct _file_info_impl : _file_info
{
    _file_info_impl(Streams::IRandomAccessStream^ stream, std::ios_base::openmode mode) :
        m_stream(stream),
        m_writer(nullptr),
        _file_info(mode, 0)
    {
        m_pendingWrites = pplx::task_from_result();
    }

    _file_info_impl(Streams::IRandomAccessStream^ stream, std::ios_base::openmode mode, size_t buffer_size) :
        m_stream(stream),
        m_writer(nullptr),
        _file_info(mode, buffer_size)
    {
        m_pendingWrites = pplx::task_from_result();
    }

    Streams::IRandomAccessStream^ m_stream;
    Streams::IDataWriter^ m_writer;
    pplx::task<void> m_pendingWrites;
};

}}}

using namespace Concurrency::streams::details;

#pragma warning(push)
#pragma warning(disable : 4100)

/// <summary>
/// Translate from C++ STL file open modes to Win32 flags.
/// </summary>
/// <param name="mode">The C++ file open mode</param>
/// <param name="prot">The C++ file open protection</param>
/// <param name="dwDesiredAccess">A pointer to a DWORD that will hold the desired access flags</param>
/// <param name="dwCreationDisposition">A pointer to a DWORD that will hold the creation disposition</param>
/// <param name="dwShareMode">A pointer to a DWORD that will hold the share mode</param>
void _get_create_flags(std::ios_base::openmode mode, int prot, FileAccessMode &acc_mode, CreationCollisionOption &options)
{
    options = CreationCollisionOption::OpenIfExists;
    acc_mode = FileAccessMode::ReadWrite;

    if ( (mode & std::ios_base::in) && !(mode & std::ios_base::out) )
        acc_mode = FileAccessMode::Read;
    if ( mode & std::ios_base::trunc )
        options = CreationCollisionOption::ReplaceExisting;
}

/// <summary>
/// Perform post-CreateFile processing.
/// </summary>
/// <param name="fh">The Win32 file handle</param>
/// <param name="callback">The callback interface pointer</param>
/// <param name="mode">The C++ file open mode</param>
/// <returns>The error code if there was an error in file creation.</returns>
void _finish_create(Streams::IRandomAccessStream^ stream, _In_ _filestream_callback *callback, std::ios_base::openmode mode, int prot)
{
    _file_info_impl *info = nullptr;

    info = new _file_info_impl(stream, mode, 512);

    // Seek to end if it's in appending write mode
    if ((mode & std::ios_base::out) && (mode & std::ios_base::app || mode & std::ios_base::ate ))
    {
        _seekwrpos_fsb(info, static_cast<size_t>(stream->Size), 1);
    }

    callback->on_opened(info);
}

/// <summary>
/// Create a streambuf instance to represent a WinRT file.
/// </summary>
/// <param name="callback">A pointer to the callback interface to invoke when the file has been opened.</param>
/// <param name="file">The file object</param>
/// <param name="mode">A creation mode for the stream buffer</param>
/// <returns>True if the opening operation could be initiated, false otherwise.</returns>
/// <remarks>
/// True does not signal that the file will eventually be successfully opened, just that the process was started.
/// This is only available for WinRT.
/// </remarks>
bool __cdecl _open_fsb_stf_str(_In_ Concurrency::streams::details::_filestream_callback *callback, ::Windows::Storage::StorageFile^ file, std::ios_base::openmode mode, int prot)
{
    _ASSERTE(callback != nullptr);
    _ASSERTE(file != nullptr);

    CreationCollisionOption options;
    FileAccessMode acc_mode;

    _get_create_flags(mode, prot, acc_mode, options);

    pplx::create_task(file->OpenAsync(acc_mode)).then(
        [=](pplx::task<Streams::IRandomAccessStream^> sop)
        {
            try
            {
                _finish_create(sop.get(), callback, mode, prot);
            }
            catch(Platform::Exception^ exc)
            {
                callback->on_error(std::make_exception_ptr(utility::details::create_system_error(exc->HResult)));
            }
        });

    return true;
}

bool __cdecl _sync_fsb_winrt(_In_ Concurrency::streams::details::_file_info *info, _In_opt_ Concurrency::streams::details::_filestream_callback *callback)
{
    _ASSERTE(info != nullptr);

    _file_info_impl *fInfo = (_file_info_impl *)info;

    pplx::extensibility::scoped_recursive_lock_t lck(fInfo->m_lock);

    if ( fInfo->m_stream == nullptr || fInfo->m_writer == nullptr || !fInfo->m_stream->CanWrite)
        return false;

    // take a snapshot of current writer, since writer can be replaced during flush
    auto writer = fInfo->m_writer;
    // Flush operation will not begin until all previous writes (StoreAsync) finished, thus it could avoid race.
    fInfo->m_pendingWrites = fInfo->m_pendingWrites.then([=] {
        return writer->StoreAsync();
    }).then([=](unsigned int) {
        fInfo->m_buffill = 0;
        return writer->FlushAsync();
    }).then([=] (pplx::task<bool> result) {
        // Rethrow exception if no callback attatched.
        if (callback == nullptr)
            result.wait();
        else
        {
            try
            {
                result.wait();
                callback->on_completed(0);
            }
            catch (Platform::Exception^ exc)
            {
                callback->on_error(std::make_exception_ptr(utility::details::create_system_error(exc->HResult)));
            }
        }
    });
    return true;
}

/// <summary>
/// Close a file stream buffer.
/// </summary>
/// <param name="info">The file info record of the file</param>
/// <param name="callback">A pointer to the callback interface to invoke when the file has been opened.</param>
/// <returns>True if the closing operation could be initiated, false otherwise.</returns>
/// <remarks>
/// True does not signal that the file will eventually be successfully closed, just that the process was started.
/// </remarks>
bool __cdecl _close_fsb_nolock(_In_ _file_info **info, _In_ Concurrency::streams::details::_filestream_callback *callback)
{
    _ASSERTE(callback != nullptr);
    _ASSERTE(info != nullptr);
    _ASSERTE(*info != nullptr);

    _file_info_impl *fInfo = (_file_info_impl *)*info;

    *info = nullptr;

    auto stream = fInfo->m_stream;

    if (fInfo->m_stream->CanWrite)
    {
        _sync_fsb_winrt(fInfo, nullptr);
        fInfo->m_pendingWrites.then([=] (pplx::task<void> t) {
            try {
                // The lock fInfo->m_lock must not be held at this point
                delete fInfo;
                t.wait();
                callback->on_closed();
            }
            catch (Platform::Exception^ exc) {
                callback->on_error(std::make_exception_ptr(utility::details::create_system_error(exc->HResult)));
            }
        });
    }
    else
    {
        // The lock fInfo->m_lock must not be held at this point
        delete fInfo;
        callback->on_closed();
    }
    return true;
}

bool __cdecl _close_fsb(_In_ _file_info **info, _In_ Concurrency::streams::details::_filestream_callback *callback)
{
    return _close_fsb_nolock(info, callback);
}

/// <summary>
/// Initiate an asynchronous (overlapped) read from the file stream.
/// </summary>
/// <param name="info">The file info record of the file</param>
/// <param name="callback">A pointer to the callback interface to invoke when the write request is completed.</param>
/// <param name="ptr">A pointer to a buffer where the data should be placed</param>
/// <param name="count">The size (in bytes) of the buffer</param>
/// <param name="offset">The offset in the file to read from</param>
/// <returns>0 if the read request is still outstanding, -1 if the request failed, otherwise the size of the data read into the buffer</returns>
size_t __cdecl _read_file_async(_In_ Concurrency::streams::details::_file_info_impl *fInfo, _In_ Concurrency::streams::details::_filestream_callback *callback, _Out_writes_ (count) void *ptr, _In_ size_t count, size_t offset)
{
    if ( fInfo->m_stream == nullptr )
    {
        if ( callback != nullptr )
        {
            // I don't know of a better error code, so this will have to do.
            callback->on_error(std::make_exception_ptr(utility::details::create_system_error(ERROR_INVALID_ADDRESS)));
        }
        return 0;
    }

    auto reader = ref new Streams::DataReader(fInfo->m_stream->GetInputStreamAt(offset));

    pplx::create_task(reader->LoadAsync((unsigned int)count)).then(
        [=] (pplx::task<unsigned int> result)
        {
            try
            {
                auto read = result.get();

                if ( read > 0 )
                {
                    reader->ReadBytes(Platform::ArrayReference<unsigned char>(static_cast<unsigned char *>(ptr), read));
                }

                callback->on_completed(read);
            }
            catch (Platform::Exception^ exc)
            {
                callback->on_error(std::make_exception_ptr(utility::details::create_system_error(exc->HResult)));
            }
        });

    return 0;
}

template<typename Func>
class _filestream_callback_fill_buffer : public _filestream_callback
{
public:
    _filestream_callback_fill_buffer(_In_ _file_info *info, Func func) : m_func(func), m_info(info) { }

    virtual void on_completed(size_t result)
    {
        m_func(result);
        delete this;
    }

private:
    _file_info *m_info;
    Func        m_func;
};

template<typename Func>
_filestream_callback_fill_buffer<Func> *create_callback(_In_ _file_info *info, Func func)
{
    return new _filestream_callback_fill_buffer<Func>(info, func);
}

size_t _fill_buffer_fsb(_In_ _file_info_impl *fInfo, _In_ _filestream_callback *callback, size_t count, size_t char_size)
{
    SafeInt<size_t> safeCount = count;

    if ( fInfo->m_buffer == nullptr || safeCount > fInfo->m_bufsize )
    {
        if ( fInfo->m_buffer != nullptr )
            delete fInfo->m_buffer;

        fInfo->m_bufsize = safeCount.Max(fInfo->m_buffer_size);
        fInfo->m_buffer = new char[fInfo->m_bufsize*char_size];
        fInfo->m_bufoff = fInfo->m_rdpos;

        auto cb = create_callback(fInfo,
            [=] (size_t result)
            {
                {
                    pplx::extensibility::scoped_recursive_lock_t lck(fInfo->m_lock);
                    fInfo->m_buffill = result / char_size;
                }
                callback->on_completed(result);

            });

        auto read =  _read_file_async(fInfo, cb, (uint8_t *)fInfo->m_buffer, fInfo->m_bufsize*char_size, fInfo->m_rdpos*char_size);

        switch (read)
        {
        case 0:
            // pending
            return read;

        case (-1):
            // error
            delete cb;
            return read;

        default:
            // operation is complete. The pattern of returning synchronously
            // has the expectation that we duplicate the callback code here...
            // Do the expedient thing for now.
            cb->on_completed(read);

            // return pending
            return 0;
        };
    }

    // First, we need to understand how far into the buffer we have already read
    // and how much remains.

    size_t bufpos = fInfo->m_rdpos - fInfo->m_bufoff;
    size_t bufrem = fInfo->m_buffill - bufpos;

    // We have four different scenarios:
    //  1. The read position is before the start of the buffer, in which case we will just reuse the buffer.
    //  2. The read position is in the middle of the buffer, and we need to read some more.
    //  3. The read position is beyond the end of the buffer. Do as in #1.
    //  4. We have everything we need.

    if ( (fInfo->m_rdpos < fInfo->m_bufoff) || (fInfo->m_rdpos >= (fInfo->m_bufoff+fInfo->m_buffill)) )
    {
        // Reuse the existing buffer.

        fInfo->m_bufoff = fInfo->m_rdpos;

        auto cb = create_callback(fInfo,
            [=] (size_t result)
            {
                {
                    pplx::extensibility::scoped_recursive_lock_t lck(fInfo->m_lock);
                    fInfo->m_buffill = result / char_size;
                }
                callback->on_completed(bufrem*char_size+result);
            });

        auto read = _read_file_async(fInfo, cb, (uint8_t*)fInfo->m_buffer, fInfo->m_bufsize*char_size, fInfo->m_rdpos*char_size);

        switch (read)
        {
        case 0:
            // pending
            return read;

        case (-1):
            // error
            delete cb;
            return read;

        default:
            // operation is complete. The pattern of returning synchronously
            // has the expectation that we duplicate the callback code here...
            // Do the expedient thing for now.
            cb->on_completed(read);

            // return pending
            return 0;
        };
    }
    else if ( bufrem < count )
    {
        fInfo->m_bufsize = safeCount.Max(fInfo->m_buffer_size);

        // Then, we allocate a new buffer.

        char *newbuf = new char[fInfo->m_bufsize*char_size];

        // Then, we copy the unread part to the new buffer and delete the old buffer

        if ( bufrem > 0 )
            memcpy(newbuf, fInfo->m_buffer+bufpos*char_size, bufrem*char_size);

        delete fInfo->m_buffer;
        fInfo->m_buffer = newbuf;

        // Then, we read the remainder of the count into the new buffer
        fInfo->m_bufoff = fInfo->m_rdpos;

        auto cb = create_callback(fInfo,
            [=] (size_t result)
            {
                {
                    pplx::extensibility::scoped_recursive_lock_t lck(fInfo->m_lock);
                    fInfo->m_buffill = result / char_size;
                }
                callback->on_completed(bufrem*char_size+result);
            });

        auto read = _read_file_async(fInfo, cb, (uint8_t*)fInfo->m_buffer+bufrem*char_size, (fInfo->m_bufsize-bufrem)*char_size, (fInfo->m_rdpos+bufrem)*char_size);

        switch (read)
        {
        case 0:
            // pending
            return read;

        case (-1):
            // error
            delete cb;
            return read;

        default:
            // operation is complete. The pattern of returning synchronously
            // has the expectation that we duplicate the callback code here...
            // Do the expedient thing for now.
            cb->on_completed(read);

            // return pending
            return 0;
        };
    }
    else
    {
        // If we are here, it means that we didn't need to read, we already have enough data in the buffer
        return count*char_size;
    }
}

/// <summary>
/// Read data from a file stream into a buffer
/// </summary>
/// <param name="info">The file info record of the file</param>
/// <param name="callback">A pointer to the callback interface to invoke when the write request is completed.</param>
/// <param name="ptr">A pointer to a buffer where the data should be placed</param>
/// <param name="count">The size (in characters) of the buffer</param>
/// <returns>0 if the read request is still outstanding, -1 if the request failed, otherwise the size of the data read into the buffer</returns>
size_t __cdecl _getn_fsb(_In_ Concurrency::streams::details::_file_info *info, _In_ Concurrency::streams::details::_filestream_callback *callback, _Out_writes_ (count) void *ptr, _In_ size_t count, size_t char_size)
{
    _ASSERTE(callback != nullptr);
    _ASSERTE(info != nullptr);
    _ASSERTE(count > 0);

    _file_info_impl *fInfo = (_file_info_impl *)info;

    pplx::extensibility::scoped_recursive_lock_t lck(info->m_lock);

    if ( fInfo->m_buffer_size > 0 )
    {
        auto cb = create_callback(fInfo,
            [=] (size_t read)
            {
                auto sz = count*char_size;
                auto copy = (read < sz) ? read : sz;
                auto bufoff = fInfo->m_rdpos - fInfo->m_bufoff;
                memcpy((void *)ptr, fInfo->m_buffer+bufoff*char_size, copy);
                fInfo->m_atend = copy < sz;
                callback->on_completed(copy);
            });

        int read = (int)_fill_buffer_fsb(fInfo, cb, count, char_size);

        if ( read > 0 )
        {
            auto sz = count*char_size;
            auto copy = ((size_t)read < sz) ? (size_t)read : sz;
            auto bufoff = fInfo->m_rdpos - fInfo->m_bufoff;
            memcpy((void *)ptr, fInfo->m_buffer+bufoff*char_size, copy);
            fInfo->m_atend = copy < sz;
            return copy;
        }

        return (size_t)read;
    }
    else
    {
        return _read_file_async(fInfo, callback, ptr, count*char_size, fInfo->m_rdpos*char_size);
    }
}

/// <summary>
/// Write data from a buffer into the file stream.
/// </summary>
/// <param name="info">The file info record of the file</param>
/// <param name="callback">A pointer to the callback interface to invoke when the write request is completed.</param>
/// <param name="ptr">A pointer to a buffer where the data should be placed</param>
/// <param name="count">The size (in characters) of the buffer</param>
/// <returns>0 if the write request is still outstanding, -1 if the request failed, otherwise the size of the data read into the buffer</returns>
size_t __cdecl _putn_fsb(_In_ Concurrency::streams::details::_file_info *info, _In_ Concurrency::streams::details::_filestream_callback *callback, const void *ptr, size_t count, size_t char_size)
{
    _ASSERTE(callback != nullptr);
    _ASSERTE(info != nullptr);
    _ASSERTE(count > 0);

    _file_info_impl *fInfo = (_file_info_impl *)info;

    pplx::extensibility::scoped_recursive_lock_t lck(fInfo->m_lock);

    if ( fInfo->m_stream == nullptr )
        return static_cast<size_t>(-1);

    // To preserve the async write order, we have to move the write head before read.
    if (fInfo->m_wrpos != static_cast<size_t>(-1))
        fInfo->m_wrpos += count;

    SafeInt<unsigned int> safeWriteSize = count;
    safeWriteSize *= char_size;

    // In most of the time, we preserve the writer so that it would have better performance.
    // However, after uer call seek, we will despose old writer. By doing so, users could
    // write to new writer in new position while the old writer is still flushing data into stream.
    if (fInfo->m_writer == nullptr)
    {
        fInfo->m_writer = ref new Streams::DataWriter(fInfo->m_stream);
        fInfo->m_buffill = 0;
    }

    // It keeps tracking the number of bytes written into m_writer buffer.
    fInfo->m_buffill += count;

    // ArrayReference here is for avoiding data copy.
    fInfo->m_writer->WriteBytes(Platform::ArrayReference<unsigned char>(const_cast<unsigned char *>(static_cast<const unsigned char*>(ptr)), safeWriteSize));

    // Flush data from m_writer buffer into stream , if the buffer is full
    if (fInfo->m_buffill >= fInfo->m_buffer_size)
    {
        fInfo->m_buffill = 0;
        fInfo->m_pendingWrites = fInfo->m_pendingWrites.then([=] {
            return fInfo->m_writer->StoreAsync();
        }).then([=] (pplx::task<unsigned int> result) {
            try
            {
                result.wait();
                callback->on_completed(safeWriteSize);
            }
            catch (Platform::Exception^ exc)
            {
                callback->on_error(std::make_exception_ptr(utility::details::create_system_error(exc->HResult)));
            }
        });
        return 0;
    }
    else
        return safeWriteSize;
}

/// <summary>
/// Write a single byte to the file stream.
/// </summary>
/// <param name="info">The file info record of the file</param>
/// <param name="callback">A pointer to the callback interface to invoke when the write request is completed.</param>
/// <param name="ptr">A pointer to a buffer where the data should be placed</param>
/// <returns>0 if the read request is still outstanding, -1 if the request failed, otherwise the size of the data read into the buffer</returns>
size_t __cdecl _putc_fsb(_In_ Concurrency::streams::details::_file_info *info, _In_ Concurrency::streams::details::_filestream_callback *callback, int ch, size_t char_size)
{
    return _putn_fsb(info, callback, &ch, 1, char_size);
}

/// <summary>
/// Flush all buffered data to the underlying file.
/// </summary>
/// <param name="info">The file info record of the file</param>
/// <param name="callback">A pointer to the callback interface to invoke when the write request is completed.</param>
/// <returns>True if the request was initiated</returns>
bool __cdecl _sync_fsb(_In_ Concurrency::streams::details::_file_info *info, _In_ Concurrency::streams::details::_filestream_callback *callback)
{
    return _sync_fsb_winrt(info, callback);
}

/// <summary>
/// Adjust the internal buffers and pointers when the application seeks to a new read location in the stream.
/// </summary>
/// <param name="info">The file info record of the file</param>
/// <param name="pos">The new position (offset from the start) in the file stream</param>
/// <returns>New file position or -1 if error</returns>
size_t __cdecl _seekrdpos_fsb(_In_ Concurrency::streams::details::_file_info *info, size_t pos, size_t char_size)
{
    _ASSERTE(info != nullptr);

    _file_info_impl *fInfo = (_file_info_impl *)info;

    pplx::extensibility::scoped_recursive_lock_t lck(info->m_lock);

    if ( fInfo->m_stream == nullptr) return (size_t)-1;;

    if ( pos < fInfo->m_bufoff || pos > (fInfo->m_bufoff+fInfo->m_buffill) )
    {
        delete fInfo->m_buffer;
        fInfo->m_buffer = nullptr;
        fInfo->m_bufoff = fInfo->m_buffill = fInfo->m_bufsize = 0;
    }

    fInfo->m_rdpos = pos;

    return fInfo->m_rdpos;
}

/// <summary>
/// Adjust the internal buffers and pointers when the application seeks to a new read location in the stream.
/// </summary>
/// <param name="info">The file info record of the file</param>
/// <param name="offset">The new position (offset from the end of the stream) in the file stream</param>
/// <param name="char_size">The size of the character type used for this stream</param>
/// <returns>New file position or -1 if error</returns>
_ASYNCRTIMP size_t __cdecl _seekrdtoend_fsb(_In_ Concurrency::streams::details::_file_info *info, int64_t offset, size_t char_size)
{
    _ASSERTE(info != nullptr);
    _file_info_impl *fInfo = (_file_info_impl *)info;

    return _seekrdpos_fsb(info, static_cast<size_t>(fInfo->m_stream->Size / char_size + offset), char_size);
}

utility::size64_t __cdecl _get_size(_In_ concurrency::streams::details::_file_info *info, size_t char_size)
{
    _ASSERTE(info != nullptr);

    _file_info_impl *fInfo = (_file_info_impl *)info;

    pplx::extensibility::scoped_recursive_lock_t lck(info->m_lock);

    if ( fInfo->m_stream == nullptr) return 0;

    return utility::size64_t(fInfo->m_stream->Size/char_size);
}

/// <summary>
/// Adjust the internal buffers and pointers when the application seeks to a new write location in the stream.
/// </summary>
/// <param name="info">The file info record of the file</param>
/// <param name="pos">The new position (offset from the start) in the file stream</param>
/// <returns>New file position or -1 if error</returns>
size_t __cdecl _seekwrpos_fsb(_In_ Concurrency::streams::details::_file_info *info, size_t pos, size_t char_size)
{
    _ASSERTE(info != nullptr);

    _file_info_impl *fInfo = (_file_info_impl *)info;

    pplx::extensibility::scoped_recursive_lock_t lck(info->m_lock);

    if ( fInfo->m_stream == nullptr) return (size_t)-1;;

    fInfo->m_wrpos = pos;

    // m_buffill keeps number of chars written into the m_writer buffer.
    // We need to flush it into stream before seek the write head of the stream
    if (fInfo->m_buffill > 0)
        _sync_fsb_winrt(fInfo, nullptr);

    // Moving write head should follow the flush operation. is_done test is for perf optimization.
    if (fInfo->m_pendingWrites.is_done())
        fInfo->m_stream->Seek(static_cast<long long>(pos) * char_size);
    else
    {
        auto lastWriter = fInfo->m_writer;
        fInfo->m_writer = nullptr;

        fInfo->m_pendingWrites = fInfo->m_pendingWrites.then([=] {
            // Detach stream could avoid stream destruction after writer get destructed.
            lastWriter->DetachStream();
            fInfo->m_stream->Seek(static_cast<long long>(pos) * char_size);
        });
    }

    return fInfo->m_wrpos;
}

namespace Concurrency { namespace streams { namespace details
{
/// <summary>
/// This class acts as a bridge between WinRT input streams and Casablanca asynchronous streams.
/// </summary>
ref class IRandomAccessStream_bridge sealed : public Windows::Storage::Streams::IRandomAccessStream
{
public:
    virtual property bool CanRead { bool get() { return m_buffer.can_read(); } }

    virtual property bool CanWrite { bool get() { return m_buffer.can_write(); } }

    virtual property uint64_t Position { uint64_t get() { return m_position; } }

    virtual property uint64_t Size
    {
        uint64_t get()
        {
            if (!m_buffer.has_size())
                return m_remembered_size;
            return m_buffer.size();
        }

        void set(uint64_t sz)
        {
            if (!m_buffer.has_size() || !m_buffer.can_write())
                m_remembered_size = sz;
            else
                m_buffer.seekoff(basic_streambuf<uint8_t>::pos_type(sz), std::ios_base::beg, std::ios_base::out);
        }
    }

    virtual Windows::Storage::Streams::IRandomAccessStream^ CloneStream()
    {
        return ref new IRandomAccessStream_bridge(m_buffer);
    }

    virtual Windows::Storage::Streams::IInputStream^ GetInputStreamAt(uint64_t position)
    {
        if ( !m_buffer.can_read() ) return nullptr;

        concurrency::streams::streambuf<uint8_t>::pos_type pos = position;

        if ( m_buffer.can_seek() || pos == m_buffer.getpos(std::ios_base::in) )
        {
            return ref new IRandomAccessStream_bridge(m_buffer,position);
        }
        return nullptr;
    }

    virtual Windows::Storage::Streams::IOutputStream^ GetOutputStreamAt(uint64_t position)
    {
        if ( !m_buffer.can_write() ) return nullptr;

        concurrency::streams::streambuf<uint8_t>::pos_type pos = position;

        if ( m_buffer.can_seek() || pos == m_buffer.getpos(std::ios_base::out) )
        {
            return ref new IRandomAccessStream_bridge(m_buffer,position);
        }
        return nullptr;
    };

    virtual void Seek(uint64_t position)
    {
        if (!m_buffer.can_seek())
            throw ref new Platform::InvalidArgumentException(L"underlying buffer cannot seek");

        m_position = position;

        m_buffer.seekpos(concurrency::streams::streambuf<uint8_t>::pos_type(m_position),std::ios_base::in);
        m_buffer.seekpos(concurrency::streams::streambuf<uint8_t>::pos_type(m_position),std::ios_base::out);
    }

    virtual Windows::Foundation::IAsyncOperationWithProgress<unsigned int, unsigned int>^ WriteAsync(Windows::Storage::Streams::IBuffer^ buffer);
    virtual Windows::Foundation::IAsyncOperationWithProgress<::Windows::Storage::Streams::IBuffer^, unsigned int>^ ReadAsync(::Windows::Storage::Streams::IBuffer^ buffer, unsigned int count, Windows::Storage::Streams::InputStreamOptions options);
    virtual Windows::Foundation::IAsyncOperation<bool>^ FlushAsync();

    virtual ~IRandomAccessStream_bridge()
    {
    }

internal:

    IRandomAccessStream_bridge(concurrency::streams::streambuf<uint8_t> buffer) :
        m_buffer(buffer),
        m_remembered_size(0),
        m_position(0)
    {
    }

    IRandomAccessStream_bridge(concurrency::streams::streambuf<uint8_t> buffer,
                               concurrency::streams::streambuf<uint8_t>::pos_type position) :
        m_buffer(buffer),
        m_remembered_size(0),
        m_position(position)
    {
    }

private:
    uint64_t m_remembered_size;
    concurrency::streams::streambuf<uint8_t>::pos_type m_position;
    concurrency::streams::streambuf<uint8_t> m_buffer;
};

struct _alloc_protector
{
    _alloc_protector(concurrency::streams::streambuf<uint8_t>& buffer) :
        m_buffer(buffer), m_size(0)
    {
    }

    ~_alloc_protector()
    {
        m_buffer.commit(m_size);
    }

    size_t m_size;

private:
    _alloc_protector& operator=(const _alloc_protector&);

    concurrency::streams::streambuf<uint8_t>& m_buffer;
};

struct _acquire_protector
{
    _acquire_protector(concurrency::streams::streambuf<uint8_t>& buffer, uint8_t* ptr) :
        m_buffer(buffer), m_ptr(ptr), m_size(0)
    {
    }

    ~_acquire_protector()
    {
        m_buffer.release(m_ptr, m_size);
    }

    size_t   m_size;

private:
    _acquire_protector& operator=(const _acquire_protector&);

    uint8_t* m_ptr;
    concurrency::streams::streambuf<uint8_t>& m_buffer;
};

// Rather than using ComPtr, which is somewhat complex, a simple RAII class
// to make sure that Release() is called is useful here.
struct _IUnknown_protector
{
    _IUnknown_protector(IUnknown* unk_ptr) : m_unknown(unk_ptr) {}
    ~_IUnknown_protector() { if (m_unknown != nullptr) m_unknown->Release(); }
private:
    IUnknown* m_unknown;
};

Windows::Foundation::IAsyncOperationWithProgress<::Windows::Storage::Streams::IBuffer^, unsigned int>^
IRandomAccessStream_bridge::ReadAsync(::Windows::Storage::Streams::IBuffer^ buffer, unsigned int count, Windows::Storage::Streams::InputStreamOptions options)
{
    if (!m_buffer.can_read())
    {
        return pplx::create_async([buffer](pplx::progress_reporter<uint32> reporter) { return buffer; });
    }

    if (buffer->Capacity < count)
        return pplx::create_async([buffer](pplx::progress_reporter<uint32> reporter) { return buffer; });

    m_buffer.seekpos(concurrency::streams::streambuf<uint8_t>::pos_type(m_position),std::ios_base::in);

    concurrency::streams::streambuf<uint8_t> streambuf = m_buffer;

    return pplx::create_async(
        [streambuf,buffer,options,count](pplx::progress_reporter<uint32> reporter)
        {
            auto sbuf = streambuf;
            auto local_buf = ref new ::Platform::Array<unsigned char, 1>(count);

            uint8_t* ptr = nullptr;
            size_t   acquired_size = 0;

            if ( sbuf.acquire(ptr, acquired_size) && acquired_size >= count )
            {
                _acquire_protector prot(sbuf, ptr);

                IUnknown* pUnk = reinterpret_cast<IUnknown*>(buffer);
                ::Windows::Storage::Streams::IBufferByteAccess* pBufferByteAccess = nullptr;
                HRESULT hr = pUnk->QueryInterface(IID_PPV_ARGS(&pBufferByteAccess));
                __abi_ThrowIfFailed(hr);

                _IUnknown_protector unkprot(pBufferByteAccess);

                byte* buffer_data = nullptr;
                hr = pBufferByteAccess->Buffer(&buffer_data);
                __abi_ThrowIfFailed(hr);

                memcpy(buffer_data,ptr,count);

                prot.m_size = count;
                buffer->Length = count;

                return pplx::task_from_result(buffer);
            }
            else
            {
                if ( acquired_size > 0 )
                {
                    sbuf.release(ptr, 0);
                }

                IUnknown* pUnk = reinterpret_cast<IUnknown*>(buffer);
                ::Windows::Storage::Streams::IBufferByteAccess* pBufferByteAccess = nullptr;
                HRESULT hr = pUnk->QueryInterface(IID_PPV_ARGS(&pBufferByteAccess));
                __abi_ThrowIfFailed(hr);

                _IUnknown_protector unkprot(pBufferByteAccess);

                byte* buffer_data = nullptr;
                hr = pBufferByteAccess->Buffer(&buffer_data);
                __abi_ThrowIfFailed(hr);

                pBufferByteAccess->AddRef();

                return sbuf.getn(buffer_data,count).then(
                    [buffer,pBufferByteAccess,count](pplx::task<size_t> written)
                    {
                        _IUnknown_protector unkprot(pBufferByteAccess);
                        buffer->Length = (unsigned int)written.get();
                        return pplx::task_from_result(buffer);
                    });
            }
        });
}

Windows::Foundation::IAsyncOperationWithProgress<unsigned int, unsigned int>^
IRandomAccessStream_bridge::WriteAsync(Windows::Storage::Streams::IBuffer^ buffer)
{
    if (!m_buffer.can_write())
    {
        return pplx::create_async([](pplx::progress_reporter<uint32> reporter) { return 0U; });
    }

    m_buffer.seekpos(concurrency::streams::streambuf<uint8_t>::pos_type(m_position),std::ios_base::out);

    concurrency::streams::streambuf<uint8_t> streambuf = m_buffer;

    return pplx::create_async(
        [buffer,streambuf](pplx::progress_reporter<uint32> reporter)
        {
            auto size = buffer->Length;
            auto sbuf = streambuf;
            uint8_t* ptr = sbuf.alloc(size);

            if ( ptr != nullptr)
            {
                {
                    _alloc_protector prot(sbuf);

                    IUnknown* pUnk = reinterpret_cast<IUnknown*>(buffer);
                    ::Windows::Storage::Streams::IBufferByteAccess* pBufferByteAccess = nullptr;
                    HRESULT hr = pUnk->QueryInterface(IID_PPV_ARGS(&pBufferByteAccess));
                    __abi_ThrowIfFailed(hr);

                    _IUnknown_protector unkprot(pBufferByteAccess);

                    byte* buffer_data = nullptr;
                    hr = pBufferByteAccess->Buffer(&buffer_data);
                    __abi_ThrowIfFailed(hr);

                    memcpy(ptr,buffer_data,size);

                    prot.m_size = size;
                }
                return pplx::task_from_result((unsigned int)size);
            }
            else
            {
                IUnknown* pUnk = reinterpret_cast<IUnknown*>(buffer);
                ::Windows::Storage::Streams::IBufferByteAccess* pBufferByteAccess = nullptr;
                HRESULT hr = pUnk->QueryInterface(IID_PPV_ARGS(&pBufferByteAccess));
                __abi_ThrowIfFailed(hr);

                _IUnknown_protector unkprot(pBufferByteAccess);

                byte* buffer_data = nullptr;
                hr = pBufferByteAccess->Buffer(&buffer_data);
                __abi_ThrowIfFailed(hr);

                pBufferByteAccess->AddRef();

                return sbuf.putn(buffer_data,size).then(
                    [pBufferByteAccess](pplx::task<size_t> size)
                    {
                        pBufferByteAccess->Release();
                        return (unsigned int)size.get();
                    });
            }
        });
}

Windows::Foundation::IAsyncOperation<bool>^
IRandomAccessStream_bridge::FlushAsync()
{
    concurrency::streams::streambuf<uint8_t> streambuf = m_buffer;
    return pplx::create_async([streambuf]()
        {
            if (!streambuf.can_write())
            {
                return pplx::task_from_result(false);
            }

            auto sbuf = streambuf;
            return sbuf.sync().then([] { return pplx::task_from_result(true); });
        });
}

}}} // namespaces

Windows::Storage::Streams::IInputStream^ Concurrency::streams::winrt_stream::create_input_stream(concurrency::streams::streambuf<uint8_t> buffer)
{
    return ref new ::Concurrency::streams::details::IRandomAccessStream_bridge(buffer,0);
}

Windows::Storage::Streams::IOutputStream^ Concurrency::streams::winrt_stream::create_output_stream(concurrency::streams::streambuf<uint8_t> buffer)
{
    return ref new Concurrency::streams::details::IRandomAccessStream_bridge(buffer,0);
}

Windows::Storage::Streams::IRandomAccessStream^ Concurrency::streams::winrt_stream::create_random_access_stream(concurrency::streams::streambuf<uint8_t> buffer)
{
    return ref new Concurrency::streams::details::IRandomAccessStream_bridge(buffer);
}

#pragma warning(pop)

redpajama_set_name: RedPajamaGithub


I've been waiting almost 3 years to work an E.T. reference into one of my blog post titles.
For whatever reason, I've had quite a few requests lately for a scone recipe video. I should say at the outset, I've never made scones before (or at least never remember making scones before), and I've never been a big fan of eating them either.
I've always found them so dry and crumbly that I just assumed some devious Scottish café owner invented them to increase sales, since most of the scones I've tried take about five cups of coffee to wash down.
Then I thought, maybe I've just never had a really good one. So I did what any social media savvy professional video recipe blogger would do; I asked my friends on Twitter for a recipe.
I got many great suggestions for all kinds of wonderful sounding versions, but since I'd never made them before, I decided to just make a plain, very traditional version to start off with. I figured I'd get the basic recipe down before trying anything crazy.
This recipe is very slightly adapted from one by someone called "Friendlyfood" on All Recipes, who claims it was adapted from a version made at the Savoy hotel in London. I have to say, I am very impressed. It was light, tender, moist and very delicious.
By the way, a couple of my favorite foodies, Denise from ChezUs, and Jennifer from In Jennie's Kitchen, may also be posting scone recipes soon, and when they do, I will share those with you as well (and believe me, they won't be as plain as this one!).
Another friend of mine, Tamar from Starving off the Land, pointed out the controversy regarding the correct pronunciation. While most Americans (and by most, I mean all) say it so it rhymes with "cone," the proper articulation is said to rhyme with "John."
As you know, I've never been big on pronouncing things correctly, and I'm not about to start now, but I wanted to point that out in case you find yourself in Scotland someday. Hey, you don't want to sound like a tourist, or worse, a Brit.
One last thing, you'll see me add the currants along with the wet ingredients. I don't understand why recipes for cookies, muffins, etc., call for fruit, nuts, and/or chips to be stirred in after the wet ingredients are mixed in. These types of recipes suffer greatly from over mixing, so I say add the chunky bits when you combine the wet and dry. Having said that, I'm not a baker, so maybe there's a reason for this common recipe instruction. Is there? Anyway, enjoy!
Love the ET reference! Nice recipe.
Oh, and clotted cream? You need to go find yourself some STAT. I must have clotted cream as part of my last meal on this Earth.
Best ET shout out EVER. Seriously. Fantastic scone video! It looks like you did a fantastic job. I have to say, I LOVE scones when they're tender and moist like yours, but despise them when you need multiple drinks to wash them down.
Thanks! I will add clotted cream to my culinary bucket list.
Dunno why people add things *with* the wet ingredients, but I *do* know why I mix them into the DRY ingredients before adding the wet. Dried fruit, nuts, chocolate bits all have some surface moisture to hold onto flour - and each other. Stirring them into the dry ingredients, they're less likely to clump together and more certain to be evenly distributed through the product. Adding wet ingredients after that step doesn't change that.
These look awesome. How about a savory scone now, CJ? Say, cheddar & chive?
Boy, do those look nice!
I love scones and these look fabulous!!
I love you! I just wish you did a write up of the recipe. I don't have a computer at home. This is something that you want to do with the full details. Will definitely try this coz only my butternut scones come out moist.
Clotted cream is really thick cream, thicker than the consistency of strained Greek yogurt, to the point that it has to be scraped (or preferably, licked!) off the serving spoon. It goes marvellously with scones, and the combination of scones, clotted cream and a red jam is famous in Devon and Cornwall in the UK. I love you blog, Chef John, only recently found it and it is already a big favourite!!
i love scones! nice to see that you're also getting into the baking goodies, as well.
Scone Henge! You, Sir, are my hero.
I can't cook worth a flip, (yet) but at least I can make them laugh. You make learning fun.
Thanks for the Vid + recipe!
That seems like an awful lot of baking powder for just 8 oz. of flour, but then again I don't use sour cream for scones.
After you've formed and portioned the dough - CHILL IT. This relaxes the gluten and yields a moist, tender crumb, without drying out the product too much. You want the scones cold going into the oven. Makes a huge difference.
Instead of an egg wash, try brushing them with heavy cream, and sprinkle vanilla bean sugar on top.
Savory option: use crumbled bacon and shredded cheddar cheese. Really, really good.
Chris, thanks for the tips as usual, but I honestly can't imagine the scones I tasted in this video being any more tender and moist. However, maybe chilling the dough gives one a larger margin for error for over mixing.
btw, those of you that chill the dough before baking should allow for a bit longer cooking time.
I suppose it says something about me that there's a huge, multi-blog scone-a-thon and all I can contribute is a snarky question about pronounciation. Thing is, why would I try and come up with a recipe when you're so bloody good at it and I can just use yours?
So much for my dream of a savory scone recipe using freshly dug clams.
I used to bake scones for my coffee house and they were very similar except for my secret ingredient that made them moist and wonderful. In each batch, I threw in a handful of white chocolate chips. I also swirled a little cream cheese icing on some of them.
People came from out of town to get my scones.
I did use cream instead of sour cream but I want to try the sour cream as I love the texture that sour cream gives baked goods.
I also used a variety of dried and fresh fruit.
Thanks for all the work you put in to this wonderful blog. I'm impatiently waiting for the cook book.
I dream of lemon poppy seed scones. All I ate for a week during a double blizzard in DC. OMG best week ever.
Cheeseboard in Berkeley makes the best scones.
I believe the full rule on splitting pairs is "Always split aces and eights, never split 5's and 10's, and split other pairs only when the dealer has a 2 through 7 showing". Oh - and I made the scones last night. My wife now thinks I'm a baking rock star! Thanks for the recipe.
My favorite are plain flavored with clotted cream or savory ones with cheddar cheese and chili flakes.
Hey chef john I just finished making your scones but if I eat them at room temperature it seems to leave a bit of "tanginess" or some spicy feeling on my tongue. I wonder if it comes from the sour cream or the uncooked baking soda?
probably the BP. you may be someone who tastes it more strongly than other.
its the baking powder (see previous 2 comments) use a little less next time.
btw, everyone is using baking powder, not baking soda right?
If you want authentic scones, you need to hie thee to Glasgow, Scotland, and the Willow Tea Room. The scones there are a bit more dry than what we often get here in the States and are perhaps something of an acquired taste. However, you will definitely find out what clotted cream is.
The Willow, by the way, is a re-creation the original, designed and decorated by the famed artist and architect, Charles Rennie Mackintosh.
Loved the recipe! I tried it last night and it worked very well!
My wife used to make scones once a year or so.... they were dry and chalky and would go mostly uneaten.
I made these and we ate them all in a couple of days. They were delicious. I used plain yogurt instead of sour cream and I sprinkled a little brown sugar over the egg wash. It created a nice crust and a perfect extra bit of sweetness.
We noticed they weren't quite as good the next day so we tried reheating them in the toaster oven for about 8 minutes and they were like fresh-baked again. I'm adding dried cranberries to the next batch. Many thanks Chef.
I just finished making myself some rich, delicious creme fraiche. How would that work substituting for the sour cream in this recipe?
Well, I did just that, and I also added the zest of half a lemon just for the heck of it. Those were some mighty good scones.
Lets just hope the next time they'll come out better.
Hi, how should the ingredients be adjusted if Self-Rising Flour was used instead of All-Purpose Flour? Thanks!
Since I've found a scones' recipe in the cookbook "Baking" purchased recently, I'm making scones almost every week if not more often.
In my recipe they don't include sugar, and that's why I like them!
I'm making scones with fruits or with cheese and herbs - rosemary work so wonderfully, but others are fine too.
Oh, another thing: there is always 1/2tsp of mustard powder in my scones' recipe.
I will try making your version of cranberry scones tonight because they run out so fast.
Thank you John for the great blog! - I've discovered it today and I just love it!
Funny i didnt see you mixing in the sour cream.
Chef John is there anything you can substitute for clotted cream or a dare I ask home version of clotted cream that you have a recipe for?
Sorry, I don't know. Not an American ing. I'd google. Im not sure if I've even had it.
I don't have a pastry cutter for the butter. What other tool would render the same result?
Wow!! What a wonderful recipe! My daughter and I tried this out this evening. We had no pastry cutter so she used her clean hands. For my purposes I, like anonymous, would like to know what other tool could substitute for the pastry cutter (besides hands), although that gadget sure did look fun.
We didn't have currants and I didn't want to use raisins so I looked up a recipe for cranberry orange scones and we made the necessary substitutions and additions and they turned out fabulous.
What a great discovery Food Wishes is. I will be back to check out more of your videos. THANKS!!
I went with dried cranberries and sliced almonds instead of currants. They were so good I made them again today. Unbelievably easy and delicious.
Ailey and anon-- If you don't have a pastry mixer on hand my aunt would "cut" the butter in with two knives like you would cut with a knife and fork. I just used my food processor and pulsed til grainy, like in Chef John's pie crust video. Personally much easier that way, but I mix the rest of the way by hand, as over mixing is a killer for scones biscuits and other pastry, like Chef John says.
Well done Chef John. I'm in Scotland, and if you say it Scottish or if you say it English, the recipe works a charm and is as good as our local tea room will make.
One question I have is regarding smoking point of butter. I experience A LOT of smoke coming up, when baking at 400 degree (googled and I think its because of the butter). Is there a solution to this problem? Thank you. What would be the difference to bake it at a lower temperature and longer?
Sorry, but haven't experienced or heard of any such smoking issues. Is your pan too thin? Oven temp off? No idea? I wouldnt change time temp.
hey there chef john! i had scones at a friend's house for tea earlier and because it was so yummy, i kept thinking about it....so i found your blog & decided to make it myself...it turned out delish! i just substituted the flour with whole grain organic flour and the sour cream with yogurt. thanks chef john, u have blessed hands!
I got bored Friday night so I decided to try this recipe after having the Shrimp and grits. I didn't have sour cream but went ahead without it. Came out with 8 scones and only one made it overnight!!!
up next banana bread. I really think that I'm a chef now....HAHAHAHA!!!
You are so awesome and I love all your recipes! Thanks so much!
Yummy! The scones are indeed tender and moist. We couldn't wait for them to cool...ate them plain. :) Don't have jam and clotted cream at home. Tasty nonetheless! Thanks for the amazing recipe, Chef John!
I've watched this twice and still can't identify the ET reference.
I've watched the vid twice now and will be making theses soon using my recently purchased pastry blender tool and silicone baking sheet. I still don't see the ET reference some are mentioning though and I've seen that film a few times!
can i use chocolate chip instead of dried currant since I couldn't find any here. If yes, shuld I make the baking time longer?
They came out perfectly!! THANKS!! this is my first attempt to pastry ever. Instead of currants I used half cup of fresh blueberries and brown sugar instead of white sugar. To me, perfect amount of sweet, loved it!!!
They came out perfectly!! THANKS!! this is my first attempt to pastry ever. Instead of currants I used half cup of fresh blueberries and brown sugar instead of white. To me, the perfect amount of sweet!!!
Thank you! Thank you! Thank you! I just finished making my first batch of scones and they are OH SO good!!! I am hosting an old fashion tea party next week and these will defiantly be a hit! I used butterscotch chips in place of the dried currents, probably not the best idea because I can't stop eating them! ;) Either way thank you so much for ALL your recipes they are so delightful!
Love the recipy, tried it out and they were delicious!
Alternatively; Buttermilk can also very well replace the milk and sour cream.
I made these with my daughter (it was a while ago since I made scones) and boy, they were better than what I remembered sooo that says it all! We have substitued currants with chocolate chips and sour cream with a mixture of milk and lemon juice. And love the way the dough is soooo moist and light. You've done it again! Thank you!
2. I didn't have sour cream so I used yoghurt as someone commented.
3. Instead of raisins I used dried pineapple but twice of what the recipe asked for and added some lemon and orange zest for flavor.
The dough was extremely sticky. It might come from the cup to gram conversion of the flour, since I live in the metric system. However it wasn't a problem. I just scooped dallops onto the baking sheet without folding or kneading by hand. They turned out wonderfully fluffy and delicious and were already requested for the next birthday. Definitely a keeper!
Excellent recipe, I have made it several times and often substitute flour with 1/2 c oats for texture and health.


Established in 1974, we are well known for our focus on high levels of customer service, product quality and competitive pricing. Located in the Midlands on a 3.6 acres site, we service customers throughout the UK.
Our mission is to provide our customers with cost-effective packaging materials. We aim to be considered as one of the preferred suppliers in the packaging retail and catering sectors.
We focus on innovation, market trends, working environment and continuous improvement of our business.
At Lesta we are committed to supplying quality packaging products To our customers.


text:
Former SD Sheriff's Captain Pleads Guilty to Trafficking 'Off-Roster' Firearms
By City News Service and Rafael Avitabile
Former Sheriff's captain Marco Garmo sold "off-roster" guns, which can only be purchased by law enforcement, to potential donors of his anticipated campaign for Sheriff
• A former San Diego County sheriff's captain pleaded guilty Tuesday to running a longstanding illegal arms trafficking operation, in which he bought and resold guns available only to law enforcement for both financial and professional gain.
Marco Garmo, 52, the former captain of the sheriff's Rancho San Diego station, illegally purchased and resold "off roster'' firearms, which may be purchased by members of law enforcement, but not the general public, according to the U.S. Attorney's Office.
In addition to receiving cash for the firearms, federal prosecutors say that between March 2013 and February 2019, Garmo conducted the gun sales to create goodwill among potential donors for his planned campaign to run for San Diego County Sheriff.
He acquired around 144 firearms during that time and transferred 98 of them to others, all while lacking the required license to do so, according to prosecutors.
The federal charge of engaging in the business of dealing in firearms without a license carries a maximum penalty of five years in prison, a $250,000 fine and a supervised release term of up to three years, according to the U.S. Attorney's Office. Garmo's sentencing is slated for Dec. 9.
Garmo retired shortly before he and four others were indicted last November. He served the department for nearly 27 years.
"This case involved stunning and sustained violations of the public trust by a high-ranking law enforcement officer who bent his public position to his private gain," said Attorney for the United States Linda Frakes. "This office will not hesitate to hold accountable anyone who thinks that their badge or office is a license to break the law. All of the honorable men and women serving their communities in law enforcement deserve no less."
Fellow former sheriff's deputy Fred Magana and prominent local jeweler Leo Hamel pleaded guilty last year to aiding and abetting the operation and await sentencing.
Read full article and watch news report here


The University was formed by Royal Charter and so is neither a company nor a charity registered with the Charity Commission. It does however retain charitable statue.
Although not a company it has been assigned a reference number at Companies House which can be quoted in place of a company registration number where required: RC000651.