Most people spend a significant amount of time each day using mobile-device keyboards: composing emails, texting, engaging in social media, and more. Yet, mobile keyboards are still cumbersome to handle. The average user is roughly 35% slower typing on a mobile device than on a physical keyboard. To change that, we recently provided many exciting improvements to Gboard for Android, working towards our vision of creating an intelligent mechanism that enables faster input while offering suggestions and correcting mistakes, in any language you choose.
With the realization that the way a mobile keyboard translates touch inputs into text is similar to how a speech recognition system translates voice inputs into text, we leveraged our experience in Speech Recognition to pursue our vision. First, we created robust spatial models that map fuzzy sequences of raw touch points to keys on the keyboard, just like acoustic models map sequences of sound bites to phonetic units. Second, we built a powerful core decoding engine based on finite state transducers (FST) to determine the likeliest word sequence given an input touch sequence. With its mathematical formalism and broad success in speech applications, we knew that an FST decoder would offer the flexibility needed to support a variety of complex keyboard input behaviors as well as language features. In this post, we will detail what went into the development of both of these systems.
Mobile keyboard input is subject to errors that are generally attributed to "fat finger typing" (or tracing spatially similar words in glide typing, as illustrated below) along with cognitive and motor errors (manifesting in misspellings, character insertions, deletions or swaps, etc). An intelligent keyboard needs to be able to account for these errors and predict the intended words rapidly and accurately. As such, we built a spatial model for Gboard that addresses these errors at the character level, mapping the touch points on the screen to actual keys.
Average glide trails for two spatially-similar words: "Vampire" and "Value".
Up to recently, Gboard used a Gaussian model to quantify the probability of tapping neighboring keys and a rule-based model to represent cognitive and motor errors. These models were simple and intuitive, but they didn't allow us to directly optimize metrics that correlate with better typing quality. Drawing on our experience with Voice Search acoustic models we replaced both the Gaussian and rule-based models with a single, highly efficient long short-term memory (LSTM) model trained with a connectionist temporal classification (CTC) criterion.
However, training this model turned out to be a lot more complicated than we had anticipated. While acoustic models are trained from human-transcribed audio data, one cannot easily transcribe millions of touch point sequences and glide traces. So the team exploited user-interaction signals, e.g. reverted auto-corrections and suggestion picks as negative and positive semi-supervised learning signals, to form rich training and test sets.
Raw data points corresponding to the word "could" (left), and normalized sampled trajectory with per-sample variances (right).
A plethora of techniques from the speech recognition literature was used to iterate on the NSM models to make them small and fast enough to be run on any device. The TensorFlow infrastructure was used to train hundreds of models, optimizing various signals surfaced by the keyboard: completions, suggestions, gliding, etc. After more than a year of work, the resulting models were about 6 times faster and 10 times smaller than the initial versions, they also showed about 15% reduction in bad autocorrects and 10% reduction in wrongly decoded gestures on offline datasets.
While the NSM uses spatial information to help determine what was tapped or swiped, there are additional constraints — lexical and grammatical — that can be brought to bear. A lexicon tells us what words occur in a language and a probabilistic grammar tells us what words are likely to follow other words. To encode this information we use finite-state transducers. FSTs have long been a key component of Google's speech recognition and synthesis systems. They provide a principled way to represent various probabilistic models (lexicons, grammars, normalizers, etc) used in natural language processing together with the mathematical framework needed to manipulate, optimize, combine and search the models*.
In Gboard, a key-to-word transducer compactly represents the keyboard lexicon as shown in the figure below. It encodes the mapping from key sequences to words, allowing for alternative key sequences and optional spaces.
This transducer encodes "I", "I've", "If" along paths from the start state (the bold circle 1) to final states (the double circle states 0 and 1). Each arc is labeled with an input key (before the ":") and a corresponding output word (after the ":") where ε encodes the empty symbol. The apostrophe in "I've" can be omitted. The user may skip the space bar sometimes. To account for that, the space key transition between words in the transducer is optional. The ε and space back arcs allow accepting more than one word.
A probabilistic n-gram transducer is used to represent the language model for the keyboard. A state in the model represents an (up to) n-1 word context and an arc leaving that state is labeled with a successor word together with its probability of following that context (estimated from textual data). These, together with the spatial model that gives the likelihoods of sequences of key touches (discrete tap entries or continuous gestures in glide typing), are combined and explored with a beam search.
Generic FST principles, such as streaming, support for dynamic models, etc took us a long way towards building a new keyboard decoder, but several new functionalities also had to be added. When you speak, you don't need the decoder to complete your words or guess what you will say next to save you a few syllables; but when you type, you appreciate the help of word completions and predictions. Also, we wanted the keyboard to provide seamless multilingual support, as shown below.
Trilingual input typing in Gboard.
It was a complex effort to get our new decoder off the ground, but the principled nature of FSTs has many benefits. For example, supporting transliterations for languages like Hindi is just a simple extension of the generic decoder.
In many languages with complex scripts, romanization systems have been developed to map characters into the Latin alphabet, often according to their phonetic pronunciations. For example, the Pinyin "xièxiè" corresponds to the Chinese characters "谢谢" ("thank you"). A Pinyin keyboard allows users to conveniently type words on a QWERTY layout and have them automatically "translated" into the target script. Likewise, a transliterated Hindi keyboard allows users to type "daanth" for "दांत" (teeth). Whereas Pinyin is an agreed-upon romanization system, Hindi transliterations are more fuzzy; for example "daant" would be a valid alternative for "दांत".
Transliterated glide input for Hindi.
Just as we have a transducer mapping from letter sequences to words (a lexicon) and a weighted language model automaton providing probabilities for word sequences, we built weighted transducer mappings between Latin key sequences and target script symbol sequences for 22 Indic languages. Some languages have multiple writing systems (Bodo for example can be written in the Bengali or Devanagari scripts) so between transliterated and native layouts, we built 57 new input methods in just a few months.
The general nature of the FST decoder let us leverage all the work we had done to support completions, predictions, glide typing and many UI features with no extra effort, allowing us to offer a rich experience to our Indian users right from the start.
All in all, our recent work cut the decoding latency by 50%, reduced the fraction of words users have to manually correct by more than 10%, allowed us to launch transliteration support for the 22 official languages of India, and enabled many new features you may have noticed.
While we hope that these recent changes improve your typing experience, we recognize that on-device typing is by no means solved. Gboard can still make suggestions that seem nonintuitive or of low utility and gestures can still be decoded to words a human would never pick. However, our shift towards powerful machine intelligence algorithms has opened new spaces that we're actively exploring to make more useful tools and products for our users worldwide.
This work was done by Cyril Allauzen, Ouais Alsharif, Lars Hellsten, Tom Ouyang, Brian Roark and David Rybach, with help from Speech Data Operation team. Special thanks go to Johan Schalkwyk and Corinna Cortes for their support.
Last year we launched Smart Reply, a feature for Inbox by Gmail that uses machine learning to suggest replies to email. Since the initial release, usage of Smart Reply has grown significantly, making up about 12% of replies in Inbox on mobile. Based on our examination of the use of Smart Reply in Inbox and our ideas about how humans learn and use language, we have created a new version of Smart Reply for Gmail. This version increases the percentage of usable suggestions and is more algorithmically efficient.
Inspired by how humans understand languages and concepts, we turned to hierarchical models of language, an approach that uses hierarchies of modules, each of which can learn, remember, and recognize a sequential pattern.
The content of language is deeply hierarchical, reflected in the structure of language itself, going from letters to words to phrases to sentences to paragraphs to sections to chapters to books to authors to libraries, etc. Consider the message, "That interesting person at the cafe we like gave me a glance." The hierarchical chunks in this sentence are highly variable. The subject of the sentence is "That interesting person at the cafe we like." The modifier "interesting" tells us something about the writer's past experiences with the person. We are told that the location of an incident involving both the writer and the person is "at the cafe." We are also told that "we," meaning the writer and the person being written to, like the cafe. Additionally, each word is itself part of a hierarchy, sometimes more than one. A cafe is a type of restaurant which is a type of store which is a type of establishment, and so on.
In proposing an appropriate response to this message we might consider the meaning of the word "glance," which is potentially ambiguous. Was it a positive gesture? In that case, we might respond, "Cool!" Or was it a negative gesture? If so, does the subject say anything about how the writer felt about the negative exchange? A lot of information about the world, and an ability to make reasoned judgments, are needed to make subtle distinctions.
Given enough examples of language, a machine learning approach can discover many of these subtle distinctions. Moreover, a hierarchical approach to learning is well suited to the hierarchical nature of language. We have found that this approach works well for suggesting possible responses to emails. We use a hierarchy of modules, each of which considers features that correspond to sequences at different temporal scales, similar to how we understand speech and language.
Each module processes inputs and provides transformed representations of those inputs on its outputs (which are, in turn, available for the next level). In the Smart Reply system, and the figure above, the repeated structure has two layers of hierarchy. The first makes each feature useful as a predictor of the final result, and the second combines these features. By definition, the second works at a more abstract representation and considers a wider timescale.
By comparison, the initial release of Smart Reply encoded input emails word-by-word with a long-short-term-memory (LSTM) recurrent neural network, and then decoded potential replies with yet another word-level LSTM. While this type of modeling is very effective in many contexts, even with Google infrastructure, it's an approach that requires substantial computation resources. Instead of working word-by-word, we found an effective and highly efficient path by processing the problem more all-at-once, by comparing a simple hierarchy of vector representations of multiple features corresponding to longer time spans.
We have also considered whether the mathematical space of these vector representations is implicitly semantic. Do the hierarchical network representations reflect a coarse "understanding" of the actual meaning of the inputs and the responses in order to determine which go together, or do they reflect more consistent syntactical patterns? Given many real examples of which pairs go together and, perhaps more importantly which do not, we found that our networks are surprisingly effective and efficient at deriving representations that meet the training requirements.
So far we see that the system can find responses that are on point, without an overlap of keywords or even synonyms of keywords.More directly, we're delighted when the system suggests results that show understanding and are helpful.
The key to this work is the confidence and trust people give us when they use the Smart Reply feature. As always, thank you for showing us the ways that work (and the ways that don't!). With your help, we'll do our best to keep learning.
Every day, participants of online communities form and share their opinions, experiences, advice and social support, most of which is expressed freely and without much constraint. These online discussions are often a key resource of information for many important topics, such as parenting, fitness, travel and more. However, these discussions also are intermixed with a clutter of disagreements, humor, flame wars and trolling, requiring readers to filter the content before getting the information they are looking for. And while the field of Information Retrieval actively explores ways to allow users to more efficiently find, navigate and consume this content, there is a lack of shared datasets on forum discussions to aid in understanding these discussions a bit better.
To aid researchers in this space, we are releasing the Coarse Discourse dataset, the largest dataset of annotated online discussions to date. The Coarse Discourse contains over half a million human annotations of publicly available online discussions on a random sample of over 9,000 threads from 130 communities from reddit.com.
To create this dataset, we developed the Coarse Discourse taxonomy of forum comments by going through a small set of forum threads, reading every comment, and deciding what role the comments played in the discussion. We then repeated and revised this exercise with crowdsourced human editors to validate the reproducibility of the taxonomy's discourse types, which include: announcement, question, answer, agreement, disagreement, appreciation, negative reaction, elaboration, and humor. From this data, over 100,000 comments were independently annotated by the crowdsourced editors for discourse type and relation. Along with the raw annotations from crowdsourced editors, we also provide the Coarse Discourse annotation task guidelines used by the editors to help with collecting data for other forums and refining the task further.
An example thread annotated with discourse types and relations. Early findings suggest that question answering is a prominent use case in most communities, while some communities are more converationally focused, with back-and-forth interactions.
This work was done by Amy Zhang during her internship at Google. We would also like to thank Bryan Culbertson, Olivia Rhinehart, Eric Altendorf, David Huynh, Nancy Chang, Chris Welty and our crowdsourced editors.
Taking, sharing, and viewing selfies has become a daily habit for many — the car selfie, the cute-outfit selfie, the travel selfie, the I-woke-up-like-this selfie. Apart from a social capacity, self-portraiture has long served as a means for self and identity exploration. For some, it's about figuring out who they are. For others it's about projecting how they want to be perceived. Sometimes it's both.
Photography in the form of a selfie is a very direct form of expression. It comes with a set of rules bounded by reality. Illustration, on the other hand, empowers people to define themselves - it's warmer and less fraught than reality.
Today, Google is introducing a feature in Allo that uses a combination of neural networks and the work of artists to turn your selfie into a personalized sticker pack. Simply snap a selfie, and it'll return an automatically generated illustrated version of you, on the fly, with customization options to help you personalize the stickers even further.
The traditional computer vision approach to mapping selfies to art would be to analyze the pixels of an image and algorithmically determine attribute values by looking at pixel values to measure color, shape, or texture. However, people today take selfies in all types of lighting conditions and poses. And while people can easily pick out and recognize qualitative features, like eye color, regardless of the lighting condition, this is a very complex task for computers. When people look at eye color, they don't just interpret the pixel values of blue or green, but take into account the surrounding visual context.
In order to account for this, we explored how we could enable an algorithm to pick out qualitative features in a manner similar to the way people do, rather than the traditional approach of hand coding how to interpret every permutation of lighting condition, eye color, etc. While we could have trained a large convolutional neural network from scratch to attempt to accomplish this, we wondered if there was a more efficient way to get results, since we expected that learning to interpret a face into an illustration would be a very iterative process.
That led us to run some experiments, similar to DeepDream, on some of Google's existing more general-purpose computer vision neural networks. We discovered that a few neurons among the millions in these networks were good at focusing on things they weren't explicitly trained to look at that seemed useful for creating personalized stickers. Additionally, by virtue of being large general-purpose neural networks they had already figured out how to abstract away things they didn't need. All that was left to do was to provide a much smaller number of human labeled examples to teach the classifiers to isolate out the qualities that the neural network already knew about the image.
To create an illustration of you that captures the qualities that would make it recognizable to your friends, we worked alongside an artistic team to create illustrations that represented a wide variety of features. Artists initially designed a set of hairstyles, for example, that they thought would be representative, and with the help of human raters we used these hairstyles to train the network to match the right illustration to the right selfie. We then asked human raters to judge the sticker output against the input image to see how well it did. In some instances, they determined that some styles were not well represented, so the artists created more that the neural network could learn to identify as well.
Raters were asked to classify hairstyles that the icon on the left resembled closest. Then, once consensus was reached, resident artist Lamar Abrams drew a representation of what they had in common.
In the study of aesthetics, a well-known problem is the uncanny valley - the hypothesis that human replicas which appear almost, but not exactly, like real human beings can feel repulsive. In machine learning, this could be compounded if were confronted by a computer's perception of you, versus how you may think of yourself, which can be at odds.
Rather than aim to replicate a person's appearance exactly, pursuing a lower resolution model, like emojis and stickers, allows the team to explore expressive representation by returning an image that is less about reproducing reality and more about breaking the rules of representation.
The team worked with artist Lamar Abrams to design the features that make up more than 563 quadrillion combinations.
Reconciling how the computer perceives you with how you perceive yourself and what you want to project is truly an artistic exercise. This makes a customization feature that includes different hairstyles, skin tones, and nose shapes, essential. After all, illustration by its very nature can be subjective. Aesthetics are defined by race, culture, and class which can lead to creating zones of exclusion without consciously trying. As such, we strove to create a space for a range of race, age, masculinity, femininity, and/or androgyny. Our teams continue to evaluate the research results to help prevent against incorporating biases while training the system.
There is no such thing as a 'universal aesthetic' or 'a singular you'. The way people talk to their parents is different than how they talk to their friends which is different than how they talk to their colleagues. It's not enough to make an avatar that is a literal representation of yourself when there are many versions of you. To address that, the Allo team is working with a range of artistic voices to help others extend their own voice. This first style that launched today speaks to your sarcastic side but the next pack might be more cute for those sincere moments. Then after that, maybe they'll turn you into a dog. If emojis broadened the world of communication it's not hard to imagine how this technology and language evolves. What will be most exciting is listening to what people say with it.
This feature is starting to roll out in Allo today for Android, and will come soon to Allo on iOS.
This work was made possible through a collaboration of the Allo Team and Machine Perception researchers at Google. We additionally thank Lamar Abrams, Koji Ashida, Forrester Cole, Jennifer Daniel, Shiraz Fuman, Dilip Krishnan, Inbar Mosseri, Aaron Sarna, Aaron Maschinot and Bhavik Singh.
Every day, Google Maps provides useful directions, real-time traffic information and information on businesses to millions of people. In order to provide the best experience for our users, this information has to constantly mirror an ever-changing world. While Street View cars collect millions of images daily, it is impossible to manually analyze more than 80 billion high resolution images collected to date in order to find new, or updated, information for Google Maps. One of the goals of the Google's Ground Truth team is to enable the automatic extraction of information from our geo-located imagery to improve Google Maps.
In "Attention-based Extraction of Structured Information from Street View Imagery", we describe our approach to accurately read street names out of very challenging Street View images in many countries, automatically, using a deep neural network. Our algorithm achieves 84.2% accuracy on the challenging French Street Name Signs (FSNS) dataset, significantly outperforming the previous state-of-the-art systems. Importantly, our system is easily extensible to extract other types of information out of Street View images as well, and now helps us automatically extract business names from store fronts. We are excited to announce that this model is now publicly available!
Example of street name from the FSNS dataset correctly transcribed by our system. Up to four views of the same sign are provided.
Text recognition in a natural environment is a challenging computer vision and machine learning problem. While traditional Optical Character Recognition (OCR) systems mainly focus on extracting text from scanned documents, text acquired from natural scenes is more challenging due to visual artifacts, such as distortion, occlusions, directional blur, cluttered background or different viewpoints. Our efforts to solve this research challenge first began in 2008, when we used neural networks to blur faces and license plates in Street View images to protect the privacy of our users. From this initial research, we realized that with enough labeled data, we could additionally use machine learning not only to protect the privacy of our users, but also to automatically improve Google Maps with relevant up-to-date information.
In 2014, Google's Ground Truth team published a state-of-the-art method for reading street numbers on the Street View House Numbers (SVHN) dataset, implemented by then summer intern (now Googler) Ian Goodfellow. This work was not only of academic interest but was critical in making Google Maps more accurate. Today, over one-third of addresses globally have had their location improved thanks to this system. In some countries, such as Brazil, this algorithm has improved more than 90% of the addresses in Google Maps today, greatly improving the usability of our maps.
The next logical step was to extend these techniques to street names. To solve this problem, we created and released French Street Name Signs (FSNS), a large training dataset of more than 1 million street names. The FSNS dataset was a multi-year effort designed to allow anyone to improve their OCR models on a challenging and real use case. FSNS dataset is much larger and more challenging than SVHN in that accurate recognition of street signs may require combining information from many different images.
These are examples of challenging signs that are properly transcribed by our system by selecting or combining understanding across images. The second example is extremely challenging by itself, but the model learned a language model prior that enables it to remove ambiguity and correctly read the street name. Note that in the FSNS dataset, random noise is used in the case where less than four independent views are available of the same physical sign.
With this training set, Google intern Zbigniew Wojna spent the summer of 2016 developing a deep learning model architecture to automatically label new Street View imagery. One of the interesting strengths of our new model is that it can normalize the text to be consistent with our naming conventions, as well as ignore extraneous text, directly from the data itself.
Example of text normalization learned from data in Brazil. Here it changes "AV." into "Avenida" and "Pres." into "Presidente" which is what we desire.
In this example, the model is not confused from the fact that there is two street names, properly normalizes "Av" into "Avenue" as well as correctly ignores the number "1600".
While this model is accurate, it did show a sequence error rate of 15.8%. However, after analyzing failure cases, we found that 48% of them were due to ground truth errors, highlighting the fact that this model is on par with the label quality (a full analysis our error rate can be found in our paper).
This new system, combined with the one extracting street numbers, allows us to create new addresses directly from imagery, where we previously didn't know the name of the street, or the location of the addresses. Now, whenever a Street View car drives on a newly built road, our system can analyze the tens of thousands of images that would be captured, extract the street names and numbers, and properly create and locate the new addresses, automatically, on Google Maps.
But automatically creating addresses for Google Maps is not enough -- additionally we want to be able to provide navigation to businesses by name. In 2015, we published "Large Scale Business Discovery from Street View Imagery", which proposed an approach to accurately detect business store-front signs in Street View images. However, once a store front is detected, one still needs to accurately extract its name for it to be useful -- the model must figure out which text is the business name, and which text is not relevant. We call this extracting "structured text" information out of imagery. It is not just text, it is text with semantic meaning attached to it.
Using different training data, the same model architecture that we used to read street names can also be used to accurately extract business names out of business facades. In this particular case, we are able to only extract the business name which enables us to verify if we already know about this business in Google Maps, allowing us to have more accurate and up-to-date business listings.
The system is correctly able to predict the business name 'Zelina Pneus', despite not receiving any data about the true location of the name in the image. Model is not confused by the tire brands that the sign indicates are available at the store.
Applying these large models across our more than 80 billion Street View images requires a lot of computing power. This is why the Ground Truth team was the first user of Google's TPUs, which were publicly announced earlier this year, to drastically reduce the computational cost of the inferences of our pipeline.
People rely on the accuracy of Google Maps in order to assist them. While keeping Google Maps up-to-date with the ever-changing landscape of cities, roads and businesses presents a technical challenge that is far from solved, it is the goal of the Ground Truth team to drive cutting-edge innovation in machine learning to create a better experience for over one billion Google Maps users.


Located on the shores of the Abyss, the Drowning City of Dūbavum is bound to the black waters by faith and necessity. They make their living by the waters and struggle against its encroachment, from where the city has gotten its moniker. The fishermen who brave the waves feed the city and in turn feed the waters with every boat that fails to return. Dūbavum accept this hard lot as a matter of course: there can be no life without death and sacrifice.
Hope you don't mind the smell, because it's going to be here much longer than you are, stranger.
Dūbavum is roughly divided in three parts; the new city, the old city and the rafts. Of those, only the new city is still on dry land and catastrophic floods have seen much of the old city submerged beneath the waves. The rafts are almost a city in its own right, snaking out across the water in haphazard fashion. That is where the poor live, working, sleeping and dying upon the waves.
It's a great place to live, but I think I prefer fish to noblemen.
Constructed shortly after the city begun to flood and the ancient buildings of the city's founding begun to vanish beneath the waves, the New City is the political center of Dūbavum. The structures are new, but the powers that have claimed them are the same as has ruled Dūbavum for some time. This is where the nobles and wealthier merchants make their home, far away from the black water and smell of fish guts.
Wall of Shrines The dividing levy between the New and the Old city are guarded by regularly spaced shrines, square stone alters adorned with bones and burning incense. Processions to the shrine are near daily, with the clergy promising that they will keep the waters from consuming the New City as it did the old. Most, however, prefer to trust the levy wall.
Fisheries are replaced by workshops and forges, with most of the city's non-fish related industries located here. The grand temples and government buildings make their home in the New City. Any visitor who come by land will enter through the gates of the Foreign District and housed there in any of the many inns and taverns, ranging from simple to luxurious.
Well, when they didn't listen to our warning, the ocean made our point for us.
The Old City lies beyond the levy but before the Rafts. It was the old center of the city, before the waters rose and drowned it. Now, the crumbling remains of old buildings jut from the water like bones. Some of the tallest building and largest temples provide enough ground that those with nowhere else to go squat there and scavenge from the drowned districts for anything of value. Other make their homes on long-legged homes and rafts with the buildings as either anchor or foundation. Once abandoned by the wealthy, the Old City has become a lawless place where the peacekeepers rarely go. Most would prefer to forget the time the ocean turned on them and simply pretend such a thing could never happen again.
Beyond and around the Old City, rafts and boats are latched together to form large floating island, snaking streets and simple homes. This is the Raft City, a floating district of the working poor and to many, the true heart of the city. The rafts form a chaotic mess of homes, businesses and pathways with near constant activity at all times of day. Lanterns of fish oil or Ahi bugs glitter against the water just below the rolling wooden streets while cooking fires compete with fisheries in filling the air with smells.
Thank the water and the waves.
The Abyss and the waters play a central part in the life of all who live in the Drowning City and it is a central part of their culture. Most make their living from the waters in one way or another, whether it is by pulling the nets from the waters or carving charms from the bones. All know the Abyss to be something to revere - and fear. The ocean is equally content to feed them as it is to swallow them whole. Death on the waters are not uncommon, with everything from freezing waters and drowning to dangerous, lurking terrors that drag the unwary under. This familiarity with death has bred superstition, with charms and talismans common and popular among all classes in the city. Omens, good or bad, are everywhere and in Dūbavum, it is considered wise to heed them lest it be your boat that goes under. The same familiarity brings with it a sort of grim gallows humor and stoicism, features that return again and again in the theater plays and folktales in Dūbavum.
To those who visit the city, the people of Dūbavum are a reasonably friendly bunch, quick to welcome but slow to trust. To take someone on your boat is a sign of respect and trust. While the wealthier in the city are changing and importing new habits from places like Mharaji, the common folk live like they always have: elbow deep in fish.
The political power of the clergy of the Ch'elema is currently in ascendant in Dūbavum, exploiting the superstition of the masses to ensure their support. They use omens and prophecy to spread fear, then promise that sacrifice can avert disaster. On a more practical level, it is the clergy that now occupy many of the bureaucratic roles involved in the day to day management of the city-state. It is considered a highly desirable assignment, far from the black waters and all its dangers.
Some are more fervent then others and shun such easy life. These true believers worship the very Abyss as a godlike entity, standing far above all the gods in the church's pantheon. Out of all the clergy, they are particularly fast to suggest sacrifice.
Despite their current control, the situation is more complicated than the Ch'elema would prefer. Without the support, or at least non-interference, from the city's powerful merchant and nobles, the church would not be able to keep their grip on power. Each vie with the other for favor and influence. So far, there have been no conflict so dire to begin to fracture the city, but only time will tell if this state can continue.
A thousand flavors of fish. But it's not a bad deal if all you've ever had is mushroom and rat.
Most of the city's industry is drawn from the Abyss; fishing, catching shrimp and crab, or farming kelp and other aquatic plants. What they can't eat, they grind up to fodder for crops or Khtam while bone, plate and skin are turned into any number of products, from spear-tips to religious icons.
One of the city's most popular exports if a spiced fish-oil called Shoriba, used to cook or as a condiment to flavor food. It is so popular that Dūbavum have successfully used the threat of ending its sale in negotiation.
The Drowning City maintains several smaller outposts further into the caverns to mine metal and grow mushrooms, but much of both are imported. In the wet air near the Abyss, poorly kept metal can rust fast and the demand is rarely sated. Since the water of the Abyss is by large drinkable with only some treatment, the Dūbavum sell some of it to their allies and friends while wielding its supply as a implied threat in negotiations. Some of the Ch'elema are loath to do so, but these fanatics are outnumbered by more practical minds.
Between the Ch'elema, the nobles and the vast ranks of fishermen and women, the city is divided between several powerful interests.
On the surface, the Hulumi are the voice of the people, united to make their demands for justice. But just beneath this thin veil lies a large mass of regular people backed by wealthy patrons that guide them. While the exact names of these backers are not known to any but the closest circle, they use the same tactics as the Ch'elema to maintain control, but with much less finesse. So far, they've avoided the consequences of their fear-mongering manipulation, but for every day those paid to spread their message report less and less control. A reckoning seem inevitable and the entire city is bracing for it.
Known to most as simply "the Bureau", this association of merchants and mid-level clergy have always been a moderate power in the city. Motivated by very little more than profit and peace, they occupy a position as deal-maker and power-brokers. When the other powers begin to fray or fight, the Bureau find itself in a place to make the crucial vote or show of support. Despite their name, the Bureau have extensive dealings with the criminal elements in the Raft City and the smuggling of goods in and out of Dūbavum.
The church of Dūbavum evolved from ancient, tribal customs when the city-state was still young. It's pantheon of gods have grown to a great host, each with some role to play with the Abyss. They maintain the temples, keep the city in good standing with the divine and offer sacrifice to calm the waves.
Those that worship the Abyss itself as a living thing are feared as fanatics, dangerous cultists that have lost themselves to the waters. While small in numbers, the fear they inspire give them influence disproportionate to their actual power.
More important than faith, the Ch'elema are more organized and unified than the other factions with a common goal and an established way of reaching it. This goal is largely to remain in control and continue to profit, with both taxes and involuntary sacrifice filling the temples coffers.
At present, the Drowning City maintains a standing militia due to their conflict with Dhanā and their vassals. Skirmishes and small raids have become part of the routine for these levy troops, with mercenary troops providing the bulk of the offense. On average, the warrior in service of Dūbavum is not a well-trained professional, but an laborer or worker called to trade their tools for arms. While defending the city-state in the more expansive caverns, they favor longer polearms made out of bones, horns or fangs of ocean creatures.
In the Naaaaavy! Dūbavum does not have a conventional navy. Hattick does not allow for ships of any real size, so most favor simple and small canoes for rapid movement and surprise. When battle does happen on the black waters, it is usually fought at range with javelins and crossbows.
The Dūbavian Ranger stand apart from the levy as an well-trained standing force that specialize in prowling the waters on small, fast-moving ships. Most of their time and efforts are not against other humans, but against the monsters of the deep. This has left them no less dangerous to face for the soldiers of Dhanā and their arrival has turned several battles.
State of War Dūbavum is currently engaged in an extended conflict with the city-state of Dhanā over what began as a minor border skirmish. Neither side has been willing to settle as of yet and blood still feeds the black waters with every new raid.
One of the more popular places among the Raft City is Sanghin's Ship. This large floating palace is constructed from several rafts and precariously stands two stories tall. It travels along the Raft City, bringing cheer (and vice) to all who come aboard with coin in hand.
This sounds like a rough place to live. I was going to pick a favorite quote but there's so many good ones it's hard to say! My critique would be more style than content, as all of the placeholders personally detract more than they help, and make the article feel longer at first glance that it actually takes to read. I might also suggest a tighter/smaller font, especially for quotes. For the same reason that it makes the article feel longer and more intimidating than it is! I look forward to seeing you pad out some of the WIP sections.


text:
Justia Patents Polycrystalline Or Amorphous SemiconductorUS Patent Application for III-V PHOTOVOLTAIC ELEMENTS Patent Application (Application #20150047704)
III-V PHOTOVOLTAIC ELEMENTS
Solar cell structures that have improved carrier collection efficiencies at a heterointerface are provided by low temperature epitaxial growth of silicon on a III-V base. Additionally, a solar cell structure having improved open circuit voltage includes a shallow junction III-V emitter formed by epitaxy or diffusion followed by the epitaxy of SixGe1−x passivated by amorphous SiyGe1−y:H.
CROSS-REFERENCE TO RELATED APPLICATION(S)
This patent application is a divisional of U.S. patent application Ser. No. 13/193,260 filed Jul. 28, 2011, entitled "III-V PHOTOVOLTAIC ELEMENTS." The complete disclosure of the aforementioned U.S. patent application Ser. No. 13/193,260 is expressly incorporated herein by reference in its entirety for all purposes.
The present invention relates to the physical sciences, and, more particularly, to solar cell structures comprising III-V absorber materials.
Direct gap III-V materials such as gallium arsenide are attractive candidates for making high efficiency solar cells due to their strong absorption properties. The fabrication of high efficiency III-V solar cells can be achieved by epitaxial growth of the structures using various techniques such as metalorganic chemical vapor deposition and molecular beam epitaxy, the cost of which renders them relatively expensive for many terrestrial applications. Alternative approaches have been proposed such as formation of ITO Schottky contacts and zinc diffusion. Such approaches do not, however, provide a platform for manufacturing high efficiency cells due to the lack of proper surface passivation.
Principles of the invention provide techniques for improving solar cell performance and for solar cell structures that exhibit improved carrier collection efficiency at the heterointerface. In one aspect, an exemplary method includes the steps of obtaining a doped, p-type III-V base layer, depositing an n+amorphous hydrogenated silicon layer or n+ epitaxial crystalline Si on the base layer, and annealing the sample, thereby forming an emitter layer comprising an n+ region in the base layer and an n+epitaxial layer adjoining the emitter layer. Further manufacturing steps may include forming an intrinsic amorphous hydrogenated semiconductor layer on the n+ epitaxial layer and a transparent conductive layer such as a TCO over the intrinsic amorphous hydrogenated semiconductor layer.
A further exemplary method includes obtaining a doped, III-V base layer and forming an intrinsic hydrogenated epitaxial semiconductor layer comprising SixGe1−x wherein x is between 0 and 1 on the base layer by plasma enhanced chemical vapor deposition at a temperature below 400° C. An intrinsic amorphous semiconductor layer comprising Six′Ge1−x′:H, wherein x′ is between 0 and 1 is formed on the intrinsic epitaxial semiconductor layer and an emitter layer is formed on the intrinsic amorphous semiconductor layer.
Photovoltaic elements are provided in accordance with further exemplary embodiments of the invention. In one such embodiment, a solar cell structure is provided that comprises a doped III-V absorber layer, an epitaxial, intrinsic semiconductor layer adjoining the absorber layer, an emitter layer above the epitaxial, intrinsic semiconductor layer, and a transparent conductive layer above the emitter layer. The intrinsic, epitaxial semiconductor layer may comprise SixGe1−x wherein x is between 0 and 1. An intrinsic amorphous semiconductor layer preferably adjoins the intrinsic, epitaxial semiconductor layer and may be comprised of Six′Ge1−x′:H, wherein x′ is between 0 and 1. The emitter layer may be comprised of SiyGe1−y:H, wherein y is between 0 and 1.
In accordance with a further exemplary embodiment, a solar cell structure comprises a p-type III-V base layer and an n+ III-V emitter layer adjoining the base layer. An n+ epitaxial layer adjoins the emitter layer, the n+ epitaxial layer comprising SixGe1−x wherein x is between 0 and 1. An intrinsic amorphous semiconductor layer comprised of SiyGe1−y:H wherein y is between 0 and 1 adjoins the n+ epitaxial layer and a transparent conductive layer is above the intrinsic amorphous semiconductor layer.
As used herein, "facilitating" an action includes performing the action, making the action easier, helping to carry the action out, or causing the action to be performed. Thus, by way of example and not limitation, instructions executing on one processor might facilitate an action carried out by instructions executing on a remote processor, by sending appropriate data or commands to cause or aid the action to be performed. For the avoidance of doubt, where an actor facilitates an action by other than performing the action, the action is nevertheless performed by some entity or combination of entities.
Techniques of the present invention can provide substantial beneficial technical effects, including methods of making high efficiency solar cells having particular utility in solar panels. The resulting structures can, however, be used for energy autonomous solar-powered electronic circuits and sensors. One or more embodiments may provide one or more of the following advantages:
Improving open circuit voltage (Voc)
Improving the short circuit current density (Jsc)
Improving solar cell efficiency (η)
Improving the fill factor (FF)
These and other features and advantages of the present invention will become apparent from the following detailed description of illustrative embodiments thereof, which is to be read in connection with the accompanying drawings.
FIG. 1 includes a chart describing three exemplary single heterojunction solar cell structures;
FIG. 2 includes a graph illustrating various properties of the exemplary structures shown in FIG. 1;
FIG. 3 is a cross sectional view of one the exemplary structures shown in FIG. 1 using a transmission electron microscope (TEM);
FIG. 4 is a schematic illustration of a solar cell structure including an intrinsic, amorphous semiconductor layer on a III-V base;
FIG. 5 is a schematic illustration of a solar cell structure in accordance with an embodiment of the invention;
FIG. 6 is a schematic illustration of a solar cell structure in accordance with a further embodiment of the invention,
FIGS. 7A-7C illustrate a process for forming an exemplary solar cell structure in accordance with an embodiment of the invention, and
FIG. 8 is an energy band diagram relating to the solar cell structure shown in FIG. 6.
Heterojunction III-V solar cell structures based on a-Si:H/III-V heterostructures offer a path for low-cost, high efficiency PV (photovoltaic) technology when implemented in conjunction with a layer transfer technique. The use of a-Si:H as an intrinsic layer (i-a:Si:H) can significantly improve the surface passivation of GaAs. US Pub. No. 2010/0307572 entitled "Heterojunction III-V Photovoltaic Cell Fabrication", the disclosure of which is incorporated by reference herein, discloses techniques for forming single and double heterojunction III-V PV cells.
FIG. 4 shows a solar cell structure 10 that can be produced using techniques disclosed in US Pub. No. 2010/0307572. The structure 10 includes a base layer 12 comprising a doped III-V substrate that may be n-type or p-type. Doped amorphous silicon layers 18, 18′ are formed on intrinsic amorphous silicon layers 16 on the base layer 12. The amorphous silicon layers 18, 18′ may have doping types that are the same or opposite from the doping type of the base layer. If the doping type of an amorphous silicon layer is opposite to that of the base layer, the amorphous silicon layer will function as an emitter. In the structure shown in FIG. 4, one of the amorphous silicon layers 18′ has the same doping type as the base layer while the other amorphous silicon layer has the opposite doping type. Transparent layers 20 such as a transparent conducting oxide (TCO) are formed on the amorphous silicon layers 18. Front metal contacts including fingers and bus bars (not shown) may be formed on the transparent layers. Although the i-a:Si:H layers 16 improve surface passivation of the GaAS base layer, the relatively high interface trap density at the i-a:Si:H/GaAs heterointerface leads to a significantly high dark current, degrading the open circuit voltage.
FIG. 1 includes a chart relating to three structures, one of which is similar to that shown in FIG. 4 in that an intrinsic amorphous semiconductor layer adjoins a III-V base and a doped hydrogenated amorphous silicon layer is formed over the intrinsic semiconductor layer. The intrinsic semiconductor layer of this "Sample 1" or "Reference Structure" has a relatively low hydrogen dilution (HD) ratio, resulting in an amorphous structure. The structure includes an InGaP back surface field (BSF). Specific thicknesses are provided for the layers of the "Reference Structure" of FIG. 1 to facilitate performance comparisons to the other two structures, each of which has corresponding layers of equal thickness. Those of ordinary skill in the art will appreciate that the layers may be provided in different thicknesses.
The structures identified in FIG. 1 as "New Structure 1" and "New Structure 2" are examples of single heterojunction structures that may be provided in accordance with the invention. It will, however, be appreciated that the principles of the invention can also be applied to double heterojunction solar cell structures. Both structures include intrinsic semiconductor layers adjoining a GaAs absorber. These intrinsic semiconductor layers are epitaxial and were grown at relatively high hydrogen dilution ratios at below 200° C. using plasma enhanced chemical vapor deposition (PECVD). New Structure 2 further includes an amorphous hydrogenated intrinsic semiconductor layer having a relatively low hydrogen dilution ratio that overlies the epitaxial layer. The variations in the hydrogen dilution ratios of the epitaxial and amorphous i-Si:H layers is achieved by varying the hydrogen gas flow while flowing the silicon precursor (silane (SiH4) in this illustrative embodiment) at a fixed rate. The low temperature epitaxial growth of Si containing carbon, germanium or other elements is discussed further in U.S. application Ser. No. 13/032,866 filed Feb. 23, 2011 and entitled LOW-TEMPERATURE SELECTIVE EPITAXIAL GROWTH OF SILICON FOR DEVICE INTEGRATION, the disclosure of which is incorporated by reference herein.
FIG. 2 provides various performance parameters for the three structures described in FIG. 1. The graph shows the short circuit current density as a function of voltage. The open circuit voltage, short circuit current density, fill factor and efficiency of the three structures are provided in chart form. While Voc for Sample 1 (the "Reference Structure") is greater than in Samples 2 and 3, the short circuit current density, fill factor and efficiency of Samples 2 and 3 exceed that of Sample 1.
A TEM image of Sample 2 (New Structure 1) is provided in FIG. 3. The p-GaAS absorber layer, the epitaxial instrinsic semiconductor layer, the emitter layer (n+ a-Si:H) and a TCO layer comprised of ZnO:Al are delineated in this figure. The BSF does not appear in the image. In this embodiment, the epitaxial hydrogenated intrinsic silicon layer is grown at 150° C.
It will be appreciated that the III-V absorber layer of New Structure 1 or New Structure 2 could be InxGa1−xAs with x ranging from 0 to 0.53. The back contact employed can be selected from conventional back surface fields known to those of ordinary skill in the art.
FIG. 5 shows a solar cell structure 50 in accordance with a further embodiment of the invention. Certain layers of the structure 50 also found in the solar cell structure 10 shown in FIG. 4 are designated with the same reference numerals. The solar cell structure 50 includes a doped III-V base 12 such as GaAs or InxGa1−xAs where x can range from 0-0.53. The absorbing material comprising the base can alternatively be InyGa1−yP where y ranges from 0.4 to 1. The base doping level is from 1e14-1e18/cm3. Intrinsic semiconductor layers 52 comprised of epitaxial SixGe1−x adjoin the base. These layers 52 contain hydrogen if grown using PECVD. The value of x may be between 0 and 1, preferably 0-0.5, for these layers 52. The deposition temperature of these epitaxial layers 52 is between 150-400° using PECVD. The preferred thickness of the epitaxial layers is 3-15 nm. Epitaxial SiGe layers 52 containing less than 35% Ge can be grown using conventional CVD at temperatures exceeding 600° C. The layers 52 do not contain hydrogen if grown using CVD. Low temperature PECVD growth of the epitaxial layers is preferred to allow low temperature fabrication of heterojunction III-V solar cells and is particularly important for applications such as flexible solar cells.
Intrinsic hydrogenated amorphous semiconductor layers 54 comprised of Six′Ge1−x′:H adjoin the intrinsic epi-SixGe1−x layers in this preferred embodiment, where x′ is between 0 and 1 and preferably between 0 and 0.5. These layers can be deposited using PECVD or hot-wire chemical vapor deposition including appropriate source materials. In one embodiment, the intrinsic hydrogenated amorphous semiconductor layers 54 are deposited in a process chamber containing a semiconductor precursor source gas and a carrier gas including hydrogen. Hydrogen atoms within the carrier gas are incorporated into the deposited material to form the intrinsic hydrogenated semiconductor containing material of the intrinsic semiconductor layer. The germanium content in the hydrogenated amorphous SiGe layers 54 may be different from the epitaxial layers 52. Carbon atoms can be incorporated in the amorphous semiconductor layers with or in place of germanium. The germanium and carbon content can be graded. The amorphous semiconductor layers can each be comprised of multi-layer structures with different compositions. If carbon is used in place of germanium in the above-referenced formula, the value of x′ would be 0 to 0.6 and preferably 0 to 0.3.
A doped hydrogenated amorphous emitter layer 56 adjoins one of the two amorphous semiconductor layers. Its doping type is opposite to that of the base 12. This layer 56 is comprised of a-SiyGe1−y:H where y is between 0 and 1 and preferably between 0 and 0.5. A back surface field layer 56′ adjoins the other of the two intrinsic hydrogenated amorphous semiconductor layers 54. Its doping type is the same as the doping type of the base 12. This layer is comprised of a-SizGe1−z:H where z is between 0 and 1 and preferably between 0 and 0.5.
Transparent conductive layers 20 adjoin the emitter and back surface field layers 56,56′. The transparent layers are comprised of conductive material that is transparent in the range of electromagnetic radiation at which photogeneration of electrons and holes occur within the solar cell structure 50. The transparent conductive layer 20 in the exemplary embodiment of FIG. 5 may comprise TCO's such as indium tin oxide (ITO), tin oxide (SnO), fluorine-doped tin oxide (SnO2:F) or aluminum-doped zinc oxide (ZnO:Al). Transparent conducting films such as carbon nanotube-based films and graphene-based films may alternatively be employed to form this transparent conductive layer 20. These examples are to be considered exemplary as opposed to limiting. The thickness of the transparent conductive layer may vary depending on the type of transparent conductive material employed as well as the technique used in forming this layer. Typically, and in one exemplary embodiment, the thickness of the transparent conductive layer 20 is between 20-500 nm. Other thicknesses, including those less than 20 nm and/or greater than 500 nm, can alternatively be employed. The preferred thickness of the transparent conductive layer for minimizing reflection from the surface of Si is in the range of 70-110 nm for a TCO. Nanotube and graphene-based films may in the range of 2-50 nm. The transparent conductive layer is typically formed using a deposition process such as sputtering or CVD. Examples of CVD processes usable for a number of types of such layers include APCVD, LPCVD, PECVD, MOCVD and combinations thereof. RF and DC magnetron sputtering are among other techniques for forming the transparent conductive layer 20.
The hydrogenated amorphous SiGe layers 56,56′ may be formed from precursor gases such as SiH4, SiF4, or H2SiCl2 (DCS). Germane is a known precursor for forming layers comprising germanium. The layers may be doped "in situ" by adding a dopant gas containing dopant atoms in the gas mixture. The dopant atoms are incorporated into the deposited material to form a hydrogenated doped semiconductor. Examples of dopant gases containing p-type dopant atoms are B2H6 and B(CH3)3 (TMB). Examples of an n-type dopant gas include AsH3 and PH3. The n-type dopant concentration in certain layer(s) of the structure 50 ranges from 1016 atoms/cm3 to 1021 atoms/cm3, with the range of 1018-1020 atoms/cm3 being a typical range. The doping efficiency (the ratio of activated dopant atoms to the total dopant atoms) typically ranges from 0.1%-20%, although higher and lower doping efficiencies are possible. The doping efficiency is generally decreased by increasing the dopant atom concentration. The p-type dopant concentration likewise ranges from 1016-1021 atoms/cm3 with the range of 1018-1020 atoms/cm3 being typical. In this exemplary embodiment, the layer 56 above the base layer 12 functions as an emitter and the layer 56′ below the base layer as a back surface field (BSF).
FIG. 6 schematically illustrates a solar cell structure 60 in accordance with a further exemplary embodiment of the invention. This embodiment includes a p-type III-V base layer 12. A high interface state or trap density (Dit) limits performance of a solar cell structure by reducing Voc. The solar cell structure 60 helps to overcome such performance limits. A shallow junction n+ III-V emitter layer 62 can be formed on the base layer through epitaxial growth or introduction of n-type doping impurities into the base layer 12 through ion implantation or diffusion. Epitaxial methods include chemical vapor deposition such as MOCVD and molecular beam epitaxy (MBE). The second possible method includes the introduction of n-type doping impurities such as Si, Ge, Te or S into the p-type base layer 12 via ion implantation and activation annealing at elevated temperatures in the range of 450-1000° C. Alternatively, the impurities can be diffused out of an impurity-rich layer into the p-type base layer. The impurity-rich layer could be, for example, a-Si1−xGex or a thin sulfur layer. The diffusion temperature varies depending on the type of the impurity and ranges between 500-1000° C. The thickness of the n+ emitter layer 62 formed via epitaxy, ion implantation or diffusion ranges from 5-50 nm. Doping concentrations may be in the same ranges as in the embodiment of FIG. 5.
An n+ epi-SixGe1−x layer 64 is formed on the emitter layer 62 where x is between 0 and 1 and preferably between 0 and 0.5. This layer may, but does not necessarily contain hydrogen, the presence of hydrogen depending on growth conditions. The conduction band edge of the III-V base 12 (GaAs in this exemplary embodiment) and the n+ epi-SixGe1−x layer 64 are aligned. In other words, the energy difference between the conduction band and vacuum is about the same for both regions. (See FIG. 8.) Voc degradation is thereby reduced. An intrinsic amorphous hydrogenated semiconductor layer 66 adjoins the n+ epi-SixGe1−x layer 64. The i-a:SiyGe1−y:H layer 66 (where y is between 0 and 1, preferably between 0 and 0.5) provides surface passivation of the adjoining n+ epi-SixGe1−x layer. The remaining layers of the solar cell structure 60 in this embodiment are the same as those found in the structure 50 according to the embodiment of FIG. 5 and have been designated with the same reference numbers in the drawings.
FIGS. 7A-7C show several steps employed in the manufacture of an exemplary solar cell structure having a p-type III-V base layer and a novel emitter layer in accordance with the invention. It will be appreciated that the structure may include an appropriate back surface field region at the rear section of the structure.
Referring to FIG. 7A, a p-type GaAs base layer 12 is formed on a p+ GaAs substrate 70. The front contact (emitter layer) for the structure is formed by depositing a 5-20 nm thick n+ a-Si:H layer 72 as an impurity rich material on the base layer. In this exemplary embodiment, the n+ a-Si:H layer 72 is phosphorus doped, but could alternatively be doped with arsenic. The structure shown in FIG. 7A is subjected to rapid thermal annealing (RTA) at elevated temperatures as shown in FIG. 7B. In this exemplary embodiment, the annealing temperature is 900° C. and the annealing time is 60-240 seconds. Upon annealing, some silicon atoms diffuse into the GaAs base to form an n+ region 74 about 10-15 nm deep while the a-Si:H layer becomes single-crystalline through a solid-phase epitaxy process, forming the n+ epi-Si layer 76 shown in FIG. 7B. This layer 76 is unlikely to contain hydrogen as Si:H bonds are volatile above 400-500° C. An intrinsic semiconductor layer (i-a-Si:H) 78 is formed on the n+ epi-Si layer 76 and a transparent conductive layer 20 is formed on the intrinsic amorphous semiconductor layer 78 to provide the structure 80 shown in FIG. 7C. In this exemplary embodiment, the transparent conductive layer 20 is a TCO such as ZnO:Al. Voc of the resulting structure 80 is 920 mV.
The method as described with respect to FIGS. 7A-7C can be effected by depositing an n+ epitaxial crystalline layer on the p-type base layer rather than the n+ a-Si:H layer, followed by annealing of the sample.
Given the discussion thus far, it will be appreciated that, in general terms, an exemplary method, according to an aspect of the invention, includes the step of obtaining a doped, p-type III-V base layer such as that shown in FIG. 7A. An n+ amorphous hydrogenated silicon layer is deposited on the base layer, also as shown in FIG. 7A. The base layer and the n+ amorphous hydrogenated silicon layer are annealed, preferably by rapid thermal annealing, forming an emitter layer 74 comprising an n+ region in the base layer and an n+ epitaxial layer 76 adjoining the emitter layer as shown in FIG. 7B. Further manufacturing steps may include forming an intrinsic amorphous hydrogenated semiconductor layer 78 on the n+ epitaxial layer and a transparent conductive layer 20 such as a TCO over the intrinsic amorphous hydrogenated semiconductor layer to provide the photovoltaic element shown in FIG. 7C.
A further exemplary method in accordance with the invention may be employed to form at least part of the solar cell structure 50 shown in FIG. 5. The exemplary method includes obtaining a doped, III-V base layer and forming an intrinsic hydrogenated epitaxial semiconductor layer comprising SixGe1−x wherein x is between 0 and 1 on the base layer by plasma enhanced chemical vapor deposition at a temperature below 400° C. An intrinsic amorphous semiconductor layer comprising Six′Ge1−x′:H, wherein x′ is between 0 and 1 is formed on the intrinsic epitaxial semiconductor layer and an emitter layer is formed on the intrinsic amorphous semiconductor layer. As discussed above, the method may further include forming a transparent conductive layer on the emitter layer. The method may include further steps depending on whether a single or double heterojunction solar cell structure is desired.
In accordance with a further aspect of the invention, a solar cell structure is provided that comprises a doped III-V absorber layer such as the GaAs absorber described with respect to FIG. 1. An epitaxial, intrinsic semiconductor layer comprising hydrogenated silicon adjoins the absorber layer as described above with respect to New Structures 1 and 2 of FIG. 1. An emitter layer is above the epitaxial, intrinsic semiconductor layer and a transparent conductive layer is above the emitter layer as shown in FIG. 3.
A solar cell structure provided in accordance with another aspect of the invention comprises a doped III-V base layer and an intrinsic hydrogenated epitaxial semiconductor layer comprising SixGe1−x wherein x is between 0 and 1, the intrinsic hydrogenated epitaxial semiconductor layer adjoining the base layer. FIG. 5 provides an exemplary embodiment of a structure 50 having such a base layer 12 and epitaxial layer 52. An intrinsic amorphous semiconductor layer adjoins the intrinsic hydrogenated epitaxial semiconductor layer and comprised of Six′Ge1−x′:H, wherein x′ is between 0 and 1. Layer 54 in the structure 50 shown in FIG. 5 is exemplary of such a layer. A doped amorphous emitter layer comprised of SiyGe1−y:H, wherein y is between 0 and 1, is located above the intrinsic amorphous semiconductor layer and a transparent conductive layer is positioned above the doped amorphous emitter layer. Layers 56 and 20 in FIG. 5, respectively, illustrate corresponding structures. A structure including the above-referenced layers can be incorporated in either a single or double heterojunction solar cell structure.
A solar cell structure in accordance with a further aspect of the invention includes a p-type III-V base layer, an n+ III-V emitter layer adjoining the base layer, and an n+ epitaxial layer adjoining the emitter layer. The n+ epitaxial layer comprises SixGe1−x wherein x is between 0 and 1. An intrinsic amorphous semiconductor layer adjoins the n+ epitaxial layer and is comprised of SiyGe1−y:H wherein y is between 0 and 1. A transparent conductive layer is located above the intrinsic amorphous semiconductor layer. FIG. 6 shows such a structure. In the embodiment of FIG. 6, the structure further includes an intrinsic epitaxial semiconductor layer 52 comprising SixGe1−x adjoining the base layer, an intrinsic amorphous semiconductor layer 54 comprising Six′Ge1−x′:H, an amorphous back surface field layer 56′ comprising SizGe1−z:H below the intrinsic amorphous semiconductor layer (wherein z is between 0 and 1), and a transparent conductive layer 20 (a TCO in this exemplary embodiment) below the amorphous back surface field layer. FIG. 7C shows another exemplary embodiment of such a structure wherein the base and emitter layers 12, 74 both comprise GaAs and the intrinsic amorphous semiconductor layer 78 is i-a:Si:H.
Those skilled in the art will appreciate that the exemplary structures discussed above can be distributed in raw form or incorporated as parts of intermediate products or end products that benefit from having photovoltaic elements therein.
The terminology used herein is for the purpose of describing particular embodiments only and is not intended to be limiting of the invention. As used herein, the singular forms "a", "an" and "the" are intended to include the plural forms as well, unless the context clearly indicates otherwise. It will be further understood that the terms "comprises" and/or "comprising," when used in this specification, specify the presence of stated features, integers, steps, operations, elements, and/or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components, and/or groups thereof Terms such as "above" and "below" are used to indicate relative positioning of elements or structures to each other as opposed to relative elevation.
The corresponding structures, materials, acts, and equivalents of all means or step plus function elements in the claims below are intended to include any structure, material, or act for performing the function in combination with other claimed elements as specifically claimed. The description of the present invention has been presented for purposes of illustration and description, but is not intended to be exhaustive or limited to the invention in the form disclosed. Many modifications and variations will be apparent to those of ordinary skill in the art without departing from the scope and spirit of the invention. The embodiment was chosen and described in order to best explain the principles of the invention and the practical application, and to enable others of ordinary skill in the art to understand the invention for various embodiments with various modifications as are suited to the particular use contemplated.
1-5. (canceled)
obtaining a doped, p-type III-V base layer;
depositing an n+ epitaxial crystalline silicon layer on the base layer, and
annealing the base layer and the deposited n+ epitaxial crystalline silicon layer, thereby forming an emitter layer comprising an n+ region in the base layer and an n+ epitaxial layer adjoining the emitter layer.
7. The method of claim 6, further comprising the steps of depositing an intrinsic amorphous hydrogenated silicon layer on the n+ epitaxial layer and a transparent conductive layer above the intrinsic amorphous hydrogenated silicon layer.
8. The method of claim 7, wherein the base layer comprises GaAs.
9. A solar cell structure comprising:
a doped III-V absorber layer;
an epitaxial, intrinsic semiconductor layer adjoining the absorber layer;
an emitter layer above the epitaxial, intrinsic semiconductor layer, and
a transparent conductive layer above the emitter layer.
10. The solar cell structure of claim 9, further comprising an amorphous, intrinsic semiconductor layer comprising hydrogenated silicon adjoining the epitaxial, intrinsic semiconductor layer.
11. The solar cell structure of claim 9, wherein the emitter layer comprises n+ a-Si:H and the absorber layer is a p-type layer.
12. The solar cell structure of claim 9, wherein the epitaxial, intrinsic semiconductor layer is hydrogenated, and further comprising an amorphous, intrinsic semiconductor layer comprising hydrogenated silicon adjoining the epitaxial, hydrogenated intrinsic semiconductor layer.
13. The solar cell structure of claim 9, wherein the epitaxial, intrinsic semiconductor layer comprises SixGe1−x:H wherein x is between 0 and 1, and further including an intrinsic amorphous semiconductor layer adjoining the intrinsic epitaxial semiconductor layer and comprised of Six′Ge1−x′:H, wherein x′ is between 0 and 1.
14. The solar cells structure of claim 13, wherein the emitter layer is comprised of doped, amorphous SiyGe1−y:H, wherein y is between 0 and 1.
15. The solar cell structure of claim 14, wherein x is between 0 and 0.5.
16. The solar cell structure of claim 15, wherein x′ is between 0 and 0.5.
17. The solar cell structure of claim 14, wherein y is between 0 and 0.5.
18. The solar cell structure of claim 13, wherein the base layer comprises GaAs.
19. The solar cell structure of claim 13, further including a back surface field below the base layer.
obtaining a doped III-V base layer;
forming an intrinsic hydrogenated epitaxial semiconductor layer comprising SixGe1−x wherein x is between 0 and 1 on the base layer by plasma enhanced chemical vapor deposition at a temperature below 400° C.;
forming an intrinsic amorphous semiconductor layer comprising Six′Ge1−x′:H, wherein x′ is between 0 and 1 on the intrinsic epitaxial semiconductor layer, and
forming an emitter layer on the intrinsic amorphous semiconductor layer.
21. The method of claim 20, further including forming a transparent conductive layer on the emitter layer.
22. A solar cell structure comprising:
a p-type III-V base layer;
an n+ III-V emitter layer adjoining the base layer;
an n+ epitaxial layer adjoining the emitter layer, the n+ epitaxial layer comprising SixGe1−x wherein x is between 0 and 1;
an intrinsic amorphous semiconductor layer adjoining the n+ epitaxial layer and comprised of SiyGe1−y:H wherein y is between 0 and 1, and
a transparent conductive layer above the intrinsic amorphous semiconductor layer.
23. The solar cell structure of claim 22, wherein the base layer and the emitter layer comprise GaAs.
26. The solar cell structure of claim 22, further including:
an intrinsic epitaxial semiconductor layer comprising SixGe1−x adjoining the base layer;
a second intrinsic amorphous semiconductor layer comprising Six′Ge1−x′:H wherein x′ is between 0 and 1, the second intrinsic amorphous semiconductor layer adjoining the intrinsic epitaxial semiconductor layer;
an amorphous back surface field layer comprising SizGe1−z:H below the intrinsic amorphous semiconductor layer wherein z is between 0 and 1, and
a transparent conductive layer below the amorphous back surface field layer.
27. The solar cell structure of claim 26, wherein x, x′, y and z are between 0 and 0.5.
Filed: Sep 29, 2014
Patent Grant number: 9246032
Inventors: Stephen W. Bedell (Wappingers Falls, NY), Bahman Hekmatshoartabari (Mount Kisco, NY), Devendra K. Sadana (Pleasantville, NY), Davood Shahrjerdi (Ossining, NY)
Current U.S. Class: Polycrystalline Or Amorphous Semiconductor (136/258); Heterojunction (438/94); Cells (136/252); Silicon Or Germanium Containing (136/261)
International Classification: H01L 31/0304 (20060101); H01L 31/036 (20060101); H01L 31/077 (20060101); H01L 31/20 (20060101);

redpajama_set_name: RedPajamaCommonCrawl


Dalyell enrichment units are optional and can be taken by Dalyell Scholars as electives.
The list of available Dalyell enrichment units is organised by faculty. Dalyell Scholars can take units from any faculty with enrichment units on offer, including their own faculty.
They can take units at their own year level, or up to two years higher than their year level.For example, a Dalyell Scholar in the first year of their degree can enrol in 2000 and 3000-level enrichment units. A Dalyell Scholar in the second year of their degree can enrol in 2000, 3000 and 4000-level enrichment units. Enrolment in enrichment units is via the special permission process. Pre-requisites for these units are waived for Dalyell Scholars.
Questions about enrichment units can be directed to Dalyell Faculty Leads.


text:
Q: Is there a way to monitor Mac Notifications on El Capitan? Hey just a quick question for OSX developers - I'm basically trying to create a simple AppleScript file that monitors your notifications and triggers a Node.js script every time your Mac gets a notification. This shouldn't be too hard to do, right?

A: You can send notifications with AppleScript, but you can't subscribe to them. For that you will have to resort to Objective-C or Swift. Triggering a NodeJS application is of course possible from within AppleScript, but that is not going to help you in this case.

redpajama_set_name: RedPajamaStackExchange


Operation Santa 2018 has officially kicked off!
For almost 30 years, the Yorkville Junior Women's Club (YJWC) has partnered with the Kendall County Community Food Pantry to provide toys and gifts for those families in need in Kendall County. The group helps provide gifts for approximately 1,200 children each year.
Schools, churches, businesses and area organizations collect toys, hats, gloves and mittens as well as wrapping paper, batteries and gift cards (cash donations are also accepted). Deadline for gift donations is Monday, Dec. 10.
Area locations to drop off are Keith's Car Care and all five Oswegoland Park District locations in Oswego; Harmony Aesthetics, Club 47 Fitness and American Legion Post 489 in Yorkville; and the Kendall County Community Food Pantry, also in Yorkville. For more information, email YorkvilleJWC@gmail.com.


text:
#include "file.h"

#include <fstream>
#include <iostream>
#include <memory>
#include <string>
#include <cstdio>
#include <cassert>

#include "exceptions/file_exists_exception.h"
#include "exceptions/file_not_found_exception.h"
#include "exceptions/file_open_exception.h"
#include "exceptions/invalid_page_exception.h"
#include "file_iterator.h"
#include "page.h"

namespace badgerdb {

File::StreamMap File::open_streams_;
File::CountMap File::open_counts_;

void File::remove(const std::string& filename) {
  if (!exists(filename)) {
    throw FileNotFoundException(filename);
  }
  if (isOpen(filename)) {
    throw FileOpenException(filename);
  }
  std::remove(filename.c_str());
}

bool File::isOpen(const std::string& filename) {
  if (!exists(filename)) {
    return false;
  }
  return open_counts_.find(filename) != open_counts_.end();
}

bool File::exists(const std::string& filename) {
	std::fstream file(filename);
	if(file)
	{
		file.close();
		return true;
	}

	return false;
}

File::~File() {
  close();
}

PageId File::getFirstPageNo() {
  const FileHeader& header = readHeader();
  return header.first_used_page;
}

File::File(const std::string& name, const bool create_new) : filename_(name) {
  openIfNeeded(create_new);

  if (create_new) {
    // File starts with 1 page (the header).
    FileHeader header = {1 /* num_pages */, 0 /* first_used_page */,
                         0 /* num_free_pages */, 0 /* first_free_page */};
    writeHeader(header);
  }
}

void File::openIfNeeded(const bool create_new) {
  if (open_counts_.find(filename_) != open_counts_.end()) {	//exists an entry already
    ++open_counts_[filename_];
    stream_ = open_streams_[filename_];
  } else {
    std::ios_base::openmode mode =
        std::fstream::in | std::fstream::out | std::fstream::binary;
    const bool already_exists = exists(filename_);
    if (create_new) {
      // Error if we try to overwrite an existing file.
      if (already_exists) {
        throw FileExistsException(filename_);
      }
      // New files have to be truncated on open.
      mode = mode | std::fstream::trunc;
    } else {
      // Error if we try to open a file that doesn't exist.
      if (!already_exists) {
        throw FileNotFoundException(filename_);
      }
    }
    stream_.reset(new std::fstream(filename_, mode));
    open_streams_[filename_] = stream_;
    open_counts_[filename_] = 1;
  }
}

void File::close() {
	if(open_counts_[filename_] > 0)
  	--open_counts_[filename_];

  stream_.reset();
	assert(open_counts_[filename_] >= 0);

  if (open_counts_[filename_] == 0) {
    open_streams_.erase(filename_);
    open_counts_.erase(filename_);
  }
}

FileHeader File::readHeader() const {
  FileHeader header;
  stream_->seekg(0 /* pos */, std::ios::beg);
  stream_->read(reinterpret_cast<char*>(&header), sizeof(FileHeader));
  return header;
}

void File::writeHeader(const FileHeader& header) {
  stream_->seekp(0 /* pos */, std::ios::beg);
  stream_->write(reinterpret_cast<const char*>(&header), sizeof(FileHeader));
  stream_->flush();
}

PageFile PageFile::create(const std::string& filename) {
  return PageFile(filename, true /* create_new */);
}

PageFile PageFile::open(const std::string& filename) {
  return PageFile(filename, false /* create_new */);
}

PageFile::PageFile(const std::string& name, const bool create_new)
: File(name, create_new)
{
}

PageFile::~PageFile() {
}

PageFile::PageFile(const PageFile& other)
: File(other.filename_, false /* create_new */)
{
}

PageFile& PageFile::operator=(const PageFile& rhs) {
  // This accounts for self-assignment and assignment of a File object for the
  // same file.
  close();	//close my file and associate me with the new one
  filename_ = rhs.filename_;
  openIfNeeded(false /* create_new */);
  return *this;
}

Page PageFile::allocatePage(PageId &new_page_number) {
  FileHeader header = readHeader();
  Page new_page;
  Page existing_page;
  if (header.num_free_pages > 0) {
    new_page = readPage(header.first_free_page, true /* allow_free */);
    new_page.set_page_number(header.first_free_page);
		new_page_number = new_page.page_number();
    header.first_free_page = new_page.next_page_number();
    --header.num_free_pages;

    if (header.first_used_page == Page::INVALID_NUMBER ||
        header.first_used_page > new_page.page_number()) {
      // Either have no pages used or the head of the used list is a page later
      // than the one we just allocated, so add the new page to the head.
      if (header.first_used_page > new_page.page_number()) {
        new_page.set_next_page_number(header.first_used_page);
      }
      header.first_used_page = new_page.page_number();
    } else {
      // New page is reused from somewhere after the beginning, so we need to
      // find where in the used list to insert it.
      PageId next_page_number = Page::INVALID_NUMBER;
      for (FileIterator iter = begin(); iter != end(); ++iter) {
        next_page_number = (*iter).next_page_number();
        if (next_page_number > new_page.page_number() ||
            next_page_number == Page::INVALID_NUMBER) {
          existing_page = *iter;
          break;
        }
      }
      existing_page.set_next_page_number(new_page.page_number());
      new_page.set_next_page_number(next_page_number);
    }

    assert((header.num_free_pages == 0) ==
           (header.first_free_page == Page::INVALID_NUMBER));
  }
	else
	{
    new_page.set_page_number(header.num_pages);
		new_page_number = new_page.page_number();

    if (header.first_used_page == Page::INVALID_NUMBER)
		{
      header.first_used_page = new_page.page_number();
    }
		else
		{
      // If we have pages allocated, we need to add the new page to the tail
      // of the linked list.
      for (FileIterator iter = begin(); iter != end(); ++iter) {
        if ((*iter).next_page_number() == Page::INVALID_NUMBER) {
          existing_page = *iter;
          break;
        }
      }
      assert(existing_page.isUsed());
      existing_page.set_next_page_number(new_page.page_number());
    }
    ++header.num_pages;
  }
  writePage(new_page_number, new_page.header_, new_page);
  if (existing_page.page_number() != Page::INVALID_NUMBER) {
    // If we updated an existing page by inserting the new page into the
    // used list, we need to write it out.
    writePage(existing_page.page_number(), existing_page.header_, existing_page);
  }
  writeHeader(header);

  return new_page;
}

Page PageFile::readPage(const PageId page_number) const {
  FileHeader header = readHeader();

	if (page_number >= header.num_pages)
	{
		throw InvalidPageException(page_number, filename_);
	}
	return readPage(page_number, false /* allow_free */);
}

Page PageFile::readPage(const PageId page_number, const bool allow_free) const {
  Page page;
  stream_->seekg(pagePosition(page_number), std::ios::beg);
  stream_->read(reinterpret_cast<char*>(&page.header_), sizeof(PageHeader));
  stream_->read(reinterpret_cast<char*>(&page.data_[0]), Page::DATA_SIZE);
  if (!allow_free && !page.isUsed()) {
    throw InvalidPageException(page_number, filename_);
  }

  return page;
}

void PageFile::writePage(const PageId new_page_number, const Page& new_page) {
	PageHeader header = readPageHeader(new_page_number);
	if (header.current_page_number == Page::INVALID_NUMBER)
	{
		// Page has been deleted since it was read.
		throw InvalidPageException(new_page_number, filename_);
	}
	// Page on disk may have had its next page pointer updated since it was read;
	// we don't modify that, but we do keep all the other modifications to the
	// page header.
	const PageId next_page_number = header.next_page_number;
	header = new_page.header_;
	header.next_page_number = next_page_number;
	writePage(new_page_number, header, new_page);
}

void PageFile::deletePage(const PageId page_number) {
  FileHeader header = readHeader();

  Page existing_page = readPage(page_number);
  Page previous_page;
  // If this page is the head of the used list, update the header to point to
  // the next page in line.
  if (page_number == header.first_used_page) {
    header.first_used_page = existing_page.next_page_number();
  } else {
    // Walk the used list so we can update the page that points to this one.
    for (FileIterator iter = begin(); iter != end(); ++iter) {
      previous_page = *iter;
      if (previous_page.next_page_number() == existing_page.page_number()) {
        previous_page.set_next_page_number(existing_page.next_page_number());
        break;
      }
    }
  }
  // Clear the page and add it to the head of the free list.
  existing_page.initialize();
  existing_page.set_next_page_number(header.first_free_page);
  header.first_free_page = page_number;
  ++header.num_free_pages;
  if (previous_page.isUsed()) {
    writePage(previous_page.page_number(), previous_page.header_, previous_page);
  }
  writePage(page_number, existing_page.header_, existing_page);
  writeHeader(header);
}

FileIterator PageFile::begin() {
  const FileHeader& header = readHeader();
  return FileIterator(this, header.first_used_page);
}

FileIterator PageFile::end() {
  return FileIterator(this, Page::INVALID_NUMBER);
}

void PageFile::writePage(const PageId page_number, const PageHeader& header,
                     const Page& new_page) {
  stream_->seekp(pagePosition(page_number), std::ios::beg);
  stream_->write(reinterpret_cast<const char*>(&header), sizeof(PageHeader));
  stream_->write(reinterpret_cast<const char*>(&new_page.data_[0]),
                 Page::DATA_SIZE);
  stream_->flush();
}

PageHeader PageFile::readPageHeader(PageId page_number) const {
  PageHeader header;
  stream_->seekg(pagePosition(page_number), std::ios::beg);
  stream_->read(reinterpret_cast<char*>(&header), sizeof(PageHeader));
  return header;
}

BlobFile BlobFile::create(const std::string& filename) {
  return BlobFile(filename, true /* create_new */);
}

BlobFile BlobFile::open(const std::string& filename) {
  return BlobFile(filename, false /* create_new */);
}

BlobFile::BlobFile(const std::string& name, const bool create_new)
: File(name, create_new) {
}

BlobFile::~BlobFile() {
}

BlobFile::BlobFile(const BlobFile& other)
: File(other.filename_, false /* create_new */)
{
}

BlobFile& BlobFile::operator=(const BlobFile& rhs) {
  // This accounts for self-assignment and assignment of a File object for the
  // same file.
  close();	//close my file and associate me with the new one
  filename_ = rhs.filename_;
  openIfNeeded(false /* create_new */);
  return *this;
}

Page BlobFile::allocatePage(PageId &new_page_number) {
  FileHeader header = readHeader();
	Page new_page;

	new_page_number = header.num_pages;

	if (header.first_used_page == Page::INVALID_NUMBER) {
		header.first_used_page = header.num_pages;
	}

	++header.num_pages;

	writePage(new_page_number, new_page);
	writeHeader(header);

	return new_page;
}

Page BlobFile::readPage(const PageId page_number) const {
	Page page;
	stream_->seekg(pagePosition(page_number), std::ios::beg);
	stream_->read(reinterpret_cast<char*>(&page), Page::SIZE);
	return page;
}

void BlobFile::writePage(const PageId new_page_number, const Page& new_page) {
	stream_->seekp(pagePosition(new_page_number), std::ios::beg);
	stream_->write(reinterpret_cast<const char*>(&new_page), Page::SIZE);
	stream_->flush();
}

//delePage should not be called for a blob_file, not supported
void BlobFile::deletePage(const PageId page_number) {
	throw InvalidPageException(page_number, filename_);
}

}

redpajama_set_name: RedPajamaGithub


text:
'Waterloo' by J.T. Welsch
November 4, 2012 Editor Abba, Andrew Bailey, Andrew Motion, Crashaw Prize, ELO, John McAuliffe, JT Welsch, Like This Press, Waterloo
–Reviewed by Andrew Bailey–
Photo taken from http://likethispressblog.blogspot.co.uk/2012/05/jt-welschs-wonderful-waterloo-has.html
I bet it's not just me that can't read the opening of 'Kubla Khan' without hearing ELO, and who finds ignoring that makes it worse. Acknowledging the unhelpful allusion is what lets it dissipate, so here on the one hand is Abba; on the other, here is the utterly separate Waterloo, a town in Illinois in which Welsch grew up, and a sequence of twenty-four ten-line poems very firmly in the town and environs.
The book opens with a funeral resulting in a gathering of the family for a wake and sharing of effects in which Grandma's datebook is discovered, in which "every death and birth is written // as if they all happened in one year." The sequence, spatially precise as it may be, draws on that temporal freedom, so that the poems occur in the right order – Homecoming is before Thanksgiving, Thanksgiving before Christmas – but the years don't seem to matter, allowing the poet to range through time, from the founding of the town, through stories of grandparents and remembered childhoods, to what is figured as now. Later, poems XX and XXI look into an expected future. Welsch's handling of time as a stacked thing, like a pile of year planners, is a very present pleasure of the pamphlet.
The effects of that can be seen in, say, poem XXIII's beginning "The paper was open with a post-it / this morning, asking if I knew a kid // who died over the weekend…"? Which morning? Like the opening of Brazil at "8.49pm, Somewhere in the Twentieth Century" we're offered micro precision in macro uncertainty. It also brings years together, so XIII's explosion may be set "In the early sixties, when natural gas / was still high-tech" but it feels as immediate in the description as that newspaper. Conversely, it can treat precise points as universal – III tells us that, for relative by marriage Billy, "every year is a a chance to show all / the new impressions he's taught their bright // orange haired three-year-old", in which that 'every' is mathematically impossible but does not feel emotionally so.
There are further joys, of course. Welsch's chosen form, five couplets with no line unrhymed, allows him to demonstrate an elegant and generally unobtrusive set of formal skills; the collaging in of newspaper clippings, photos and announcements supports the sense of getting to know the town well. It's also a particularly handsome pamphlet in its clearly hand-printed cover on soft, thick and rough-edged brown paper, so it's a bit of a shame that the version I'm holding has sold out. The contents remain the same in what the publisher calls the 'Standard Version', I'm sure, but I've enjoyed having the object under review in my hands. The publisher, Like This Press, has a range of objects that have equally tangible pleasures, including some that come in boxes, one of which which I was lucky enough to hold at the Free Verse book fair earlier this year.
If I were to register any displeasure, it would be purely that the tone is so resolutely grounded; the quotations so far are demonstrative, and where it flexes a bit of lyrical muscle it's in passing moments such as XII's (admittedly delicious) adjective choice when it sees "The bluff was filthy with orange and gold". If you want jazzy syntax disruptions or dense, chewable rhetoric this may not be the place to look. Yet judging by Welsch's Salt chapbook, Orchids, that's a choice of restraint in this piece – it's harder to imagine the title poem there, for example, passing for overheard speech than the poems here.
Orchids carries quotes from Andrew Motion and John McAuliffe praising its formal grace, cleverness and emotional connection; those qualities are also to be found in the way Waterloo's selection of detail encourages you to care about the townspeople. It's not necessary that the details be true, but it's nice to know that the Wikipedia page for the town seems to back him up on some of the checkable details, and that Welsch's Crashaw Prize shortlist interview affirms the biography parts. "These are my gods, I guess," writes Welsch in that interview, "these layers of place and relation." In those terms, Waterloo offers an appropriate prayer.
← 'Sea Swim' by John Wedgwood Clarke
Armchair/Shotgun: Issue 3 →
'Tusitala of white lies' by Iain Britton
January 4, 2013 Editor Comments Off on 'Tusitala of white lies' by Iain Britton
'Threadbare Fables' by Ian Seed
December 3, 2012 Editor Comments Off on 'Threadbare Fables' by Ian Seed
Albion by Stephen Emmerson
September 20, 2013 Editor Comments Off on Albion by Stephen Emmerson


This is Kayden's third rented exersaucer!!!! This interactive activity center - whose concept is a DJ Console - delights Kady with upbeat music, fun sounds, flashing lights and dance beats. He bounces happily and chuckles!!! This exersaucer is designed with vivd colours 'stations' which interest and captures babies' attention.
A flip of the jukebox page transforms learning activities into musical discoveries! In learn mode, activities help develop fine and gross motor skills while introducing the alphabet, numbers, counting 1 to 5, colours, language development and action/reaction. Music mode features real instrument sounds and various musical styles.
Perfect match as Kady's on Kindermusilk too... and his mommy loves music and dance!
Week 36: SmartBaby > What's On at 8-9 months?
I Won A Combi Coccoro Worth $339!!!
Kindermusik - Village Theme: Zoom Buggy!
Week 35: "Squirt Fun Water Gun"


I'm a brand new member here and I purchased my membership mainly to utilize the training videos plugin on sites to simplify training authors.
"Easily get updates, support, and one-click WPMU DEV plugin/theme installations right from in your dashboard - install the free WPMU DEV Dashboard plugin. (find out more)"
The Dashboard is meant to help members and DEV understand what is going on with plugins and themes on a given site. It is not bloatware and does not slow your site down. Only Super Admins see the notices from the Dashboard.
Hope this helps! Let us know.
I was just about to post the same question. Why would I want to see your promo message if I deleted your dashboard plugin?
Annoying, and just plain dumb.
In case you don't get it, bush league, moronic, overselling like this is counterproductive.
Have a little self respect.
PLEASE STOP OPENING OLD THREADS.
If you have an issue, please open a new thread.


Rebecca Smith loves to travel and learn new skills. She lived for a time in Paris, France, before graduating from Brigham Young University with a Bachelors in Geography and a minor in French. After graduating, she taught English in elementary schools in Taiwan, then French at a private school in Utah while taking more classes at BYU. She now resides in Baker City, Oregon and teaches French for Baker Web Academy.