text:
Box Full of Letters from Issue #34
Gram Parsons:
Grievous grievances
A little iconoclasm is no bad thing, but I hope No Depression isn't going down the road of so many inferior music magazines by seeking to trash its former heroes for merely sensational reasons. First there was the frankly inadequate response to the Byrds' late reissues [ND #25, Jan.-Feb. 2000], then the mean-spirited review of Emmylou Harris' bold and moving Red Dirt Girl [ND #29, Sept.-Oct. 2000], and now we have John Morthland's revisionist assault on Gram Parsons [ND #33, May-June 2001].
Morthland is entitled to his taste, but much of what he says is puzzling, to say the least. If he really can't find a Gram Parsons fan who knows the melody to "Hickory Wind" then I suggest he's talking to the wrong people — as it happens, it's not my favorite Parsons tune, but I don't know anyone with even a glancing acquaintance with his body of work who doesn't know it intimately. As to what it's about, well, frankly who cares? I'm ignorant of the meaning of a lot of Dylan and Neil Young tunes, but it doesn't stop me enjoying many of their songs at various levels. As to "Luxury Liner" or "Older Guys" sounding like the Monkees, well, there are some of us who wouldn't think that such a bad thing, even if it were true.
More importantly, Morthland basically accuses Parsons of being a "self-absorbed folkie singer-songwriter" somehow smuggling his (by implication worthless) preoccupations into another form of music. Apart from being utterly bewildering (can anyone seriously find any musical evidence on either GP or Grievous Angel to support that charge?), this smacks of a rigid form of musical puritanism which suggests that only "authentic" roots-based music (whatever that may be) is of any value. I thought the whole point of Parsons' work was that he mixed together a whole string of different musical sensibilities into his songs to make something that felt new and exciting.
Back in 1971 I was a rock 'n' roller with no interest in country of any description — yet within one listen of GP I was hooked forever on what I'm still comfortable with calling country rock (and later alt.country). Parsons, among others, distilled the pain, heartbreak and authenticity of country music into a rock-based contemporary form that I could feel comfortable with, and I don't think I'm alone in that. And frankly if there is folk music in the mix it doesn't bother me one bit.
There's no point arguing about Parsons' voice — either it moves you or it doesn't. For me the imperfection is simply part of the magic, just as it is with Dylan, Robert Johnson, Ryan Adams and countless other innovators. That Morthland can only find it pathetic is his loss, just as my failure to get, say, Ray Price or Lee Ann Womack is probably mine.
What is less subjective is Parsons' important place in the creation of a dynamic and living form of music. Without him it's arguable that much of the music your magazine covers simply wouldn't exist in the same form — and who knows, No Depression itself might not even be around either. Parsons' legacy is a vital one, and in my opinion it deserves far better than such a cursory and perversely argued dismissal.
— Adrian Hodges
Oxfordshire, U.K.
Not god, just good
John Morthland's barbs against the late Gram Parsons are typical of the kind of flippant cattiness that passes for music criticism these days. Dismissing Parsons as "a privileged, artsy folkie who confuse[d] his own James-Taylor-like misery with the hard working-class truths of country music" is a particularly cheap shot, given that the subject is no longer around to defend himself. Parsons was not the first musician to have more money than was good for him, and I doubt he gave any more of a damn about it than I do. His demons — the suicide of his father, his mother's drinking herself to death, and his own drug addiction — were as real as those of Hank Williams and George Jones, and they're right there in his music for anyone to hear. Even at his worst ("Train Song", "Lazy Days"), he had more soul than certain of today's alt-country poseurs (e.g., Ryan Adams).
Morthland charges that Parsons "institutionalized some of the worst attributes of bands that followed in his wake and were accused of betraying him with those very traits." A few specific examples might have helped support his case. Blaming Gram Parsons for the Eagles is a little like holding Joni Mitchell responsible for Jewel. I fail to see the relationship.
Parsons was not a god. Nor do I believe that he was the self-absorbed hippie and trust-fund brat that Morthland makes him out to be — at least, that's not all he was. If it were, would any of us still be talking about him today?
Whether Parsons was a true "country-rock" pioneer is beside the point. Like the music of The Band and Emmylou Harris, his work transcends genres and labels. He was what he was, and that's good enough for those of us who have come to appreciate his legacy.
"Gram was the person who brought me to life musically," Harris once said of her mentor. "I never heard things in music, the things I can hear now, until I worked with him."
If nothing else, we are indebted to the man for that.
— Shawn Cote
Fort Fairfield, Maine
Blind lemon Morthland?
Considering that most of your readers consider Gram Parsons to be something of a deity (myself included), it seems rather perverse to have John Morthland review the new Parsons release. I like John's writing, but he has always had a blind spot towards Parsons and his work. Seems like a strange choice
Otherwise, the new issue is excellent.
— Ron Frankl
On crap and criticism
I'm responding to the disrespectful article on Gram Parsons written by John Morthland.
He refers to Gram as a "self-absorbed folkie" and a "privileged, artsy folkie." He also states that he only liked Parsons for a short while in the early 1980s when he "put a clothespin on his crap detector."
Well, one obvious sign of a crappy journalist is a person who writes harsh or inflammatory articles just to hopefully become noticed. This is certainly the case here with Morthland, as he mounts his high horse in order to hurl condescendsions at the memory of a flawed but charismatic innovator in the realm of country rock.
The rambling, bitingly critical article is chock-full of cranky, judgmental comments. Morthland describes Parsons' vocals as "pathetic" and "flat," and elsewhere as "out of tune" and "rhythmically bereft." Again, concerning Gram's vocals, Morthland says he hears "little beyond narcissism." There are further whines and moans about Parsons as the article continues with much emphasis aimed at trying to point out over and over that Parsons was not perfect.
About 75% into the article, Morthland decides that he likes a few of Gram's songs. Then, to conclude, he spends the last paragraph pandering to the memory of Billie Holiday and, somehow uses this moment to throw one last jab at the memory of Parsons.
First of all, nobody that I know has ever told me that they thought Gram Parsons was perfect. His many fans realize that he played music that he loved, that he was friendly, charismatic, reckless, persistent and possessed other qualities for the better and for the worse. He didn't become famous during his lifetime. He just did what he enjoyed, and he had a vision of bringing the country world and rock world together. Nobody that I know thought that his vocals were perfect, either. But many were and are touched by the emotion he conveyed in his singing. This could be examined even more closely. Emmylou Harris, who has gone on to fame, sang duets with Gram and was a close friend of his. Many times through the years Emmylou has spoken with praise and respect concerning Parsons the person and Parsons the performer.
Certainly everyone has a right to his or her own opinion. But Morthland is over the top in this article concerning disrespectful comments toward the late Gram Parsons. It reeks of a personal attack, in fact. Without wasting much more ink let me say that my crap detector is working just fine, and this putrid article by John Morthland is sending the needle off the graph.
— Chris Roschbach
Blowin' in the Hickory Wind
In response to John Morthland's review of Sacred Hearts And Fallen Angels: it may be true that Gram Parsons has been unjustifiably deified; but much of this hostile, goofy review seems so deliberately provocative that I suspect it of being little more than an attention-seeking ploy. I am sure Morthland is eagerly awaiting the inevitable deluge of outraged Gram-fanatic hate mail.
This review betrays a remarkable lack of insight. To illustrate with one particularly glaring example: Morthland tersely dismisses "Hickory Wind" as meaningless artsiness. This is just misinformed. The lyrics to this song retell with simple elegance the Bible story told by Jesus of the Prodigal Son, who leaves behind the old family homestead and squanders his wealth, his youth and his soul in a faraway city. He comes to his senses in the gutter, his innocence lost, and longs for the sound of the wind in the trees in the simpler days of childhood, full of regret for his folly and the hardness of the world.
The imagery is simple, the references obvious to anyone who knows their Bible, and quite relevant to almost anyone — especially anyone with a rural background rooted in traditional morality and religion who finds themselves far from their geographic and spiritual roots. (I grew up listening to this song on Sweetheart Of The Rodeo, and even as a child its message and melody stirred me.) Even from a purely technical viewpoint, this is an example of nearly perfect songwriting, minimal, profound, accessible, memorable, and personal. No wonder Emmylou Harris, Joan Baez, and Gillian Welch have all recorded it.
Equally baffling is Morthland's sneering at Gram's singing, which he call "braying" and "out of tune." Has Morthland heard much country music? Early records by George Jones, Ray Price, Conway Twitty? The Carter Family? All gifted vocalists; and the flaws in their voices and performances, the margin of error in those recordings, is part of what makes them great. (Incidentally, it is true that Gram is occasionally out of tune on his solo albums — but in fact Emmylou is usually much more out of tune. Check her out on "Hearts On Fire" and "$1,000 Wedding". Still, the beauty and truth in both their voices shines through.)
It all makes me wonder what perspective — what high horse — Morthland is writing from. To use his phrase, how much does he really know about "the hard working-class truths of country music"? I was raised by a single mother on a working farm in Virginia. Both my parents came from troubled but deeply traditional, religious Southern families. Both my parents had turned their backs on this heritage, and immersed themselves in the world of rock 'n' roll and the 1960s counterculture. By the time I was born (1971), they had split, and were reaping the results of that era's hedonism, and trying to find a way to reconcile the old and the new, the traditions of rural family life and Christian religion with all the revelations and revolutions of the '60s.
This is also the backdrop to Parsons' work. Finding yourself rootless is a very painful experience, and it is one our whole nation continues to confront. By deliberately and self-consciously choosing the idiom of country music, Parsons was trying to throw down roots again, to bridge the past and the future, the cosmic and the colloquial. His life and death show that in the end, he was unable to do this. But to reject his efforts, his music, seems to me to be rejecting all that is most important about music and life. He had faith, and he had believing, he led all the people together in singing. Hallelujah.
— Shilough Hopwood
Lone Star songwriters:
O Texas, where art thou?
Thank you Rob Patterson for having the intestinal fortitude to take on an escaping, yet prouder than ever, tradition of Texas music [ND #33, May-June 2001]. I too have had the misfortune of seeing acts like Robert Earl Keen and Charlie Robison and Pat Green in the Greek-laden comforts of my own Oxford, Mississippi, and the results have been much the same, beer, whoops, vulgarities, and "Hook 'em Horns" or "Gig 'em Aggies" signs all spewing at the most opportune times. I love the Texas music tradition, Guy, Townes, Alejandro, Rodney, et al., but the recent lack of creativity and the growing disdain for audiences for the lyrics, as Patterson points out via Pat Green and Corry Morrow, are causing at least one outsider to think twice about going to Texas music shows — anywhere. The article was made complete by the misplacing of Pat Green's and Corry Morrow's names under their pictures. Classic. [Ed. note: Our fault there, not Patterson's.]
Thanks Rob for saying what a lot of us have thought.
— Chase Farmer
Blood Oranges:
Thanks so much for your review of the Blood Oranges [ND #31, Jan.-Feb. 2001]. I had never heard of them until then.
Just one week ago I found their last album The Crying Tree, used. How could anyone in their right mind have ever gotten rid of this CD?
I really had no idea how good it would be, or the impact this band would have on me. I've played it every day since and let me tell everyone: It just doesn't get any better than this. I haven't been this excited in quite some time. When I heard the first cut, "Halfway Around The World", I wasn't quite sure what to think of the latest addition to my CD collection. But after that it was uphill all the way. A rollercoaster ride (if you will) of all that I've heard throughout my entire life and even more! What a truly wonderful band!
The thing that separates the Blood Oranges from the majority is that they don't sound like they are trying to be different. What they are doing differently is definitely coming to them naturally. Everyone should most definitely grab ahold of this band. They really are that good. I'll say it one more time: I haven't been this excited about a band since NRBQ, and let me tell you all that's been a mighty long time! Thanks ND for the review, as well as for your fine, fine magazine.
— Paul R. Jancsik
Yarnell, Arizona
Jimmy LaFave:
Underappreciated
There are two artists I consider the most criminally underappreciated in any genre of music I listen to: Alejandro Escovedo and Jimmy LaFave. So it was extremely disappointing to read Steven Rosen's review of LaFave's newest release Texoma [ND #33, May-June 2001], and to see LaFave inexplicably left out of both Rob Patterson's article about contemporary Texas troubadours as well as Peter Blackstock's ode to subscribers ["Hello Stranger"] discussing possible breakout artists in the genre of alt-whatever-that-is country.
LaFave is, in my not at all humble opinion and that of many friends, the foremost singer-songwriter working today, from Austin or anywhere else. A good friend of mine is the programmer on the most highly rated show on Minneapolis community radio KFAI. He claims he's never yet played LaFave that a listener hasn't called in to ask who the artist was. He was recently stopped in the street and thanked for turning a listener on to LaFave.
While Rosen's review was not uncomplimentary, it shortchanged LaFave as a songwriter and was way off the mark in its description of LaFave's cover of Bob Dylan's "Emotionally Yours" as 'icky'. Ah, well, one person's icky is another's sublime. I've described LaFave's cover of "Emotionally Yours" as so beautifully done it's almost painful to listen to. Which reminds me, Rosen failed to point out that LaFave is the greatest ballad singer alive. If he, or anyone else at No Depression, has an argument with that I'd like to hear it.
Patterson is harder to figure out. His article is a wonderful snapshot of a number of Texas artists, all of them deserving. I mean, I like Michael Fracasso — a lot — but he's no Jimmy LaFave, and he would be the first to agree. So why the snub?
As for No Depression — LaFave may not have the same cachet of cool as Lucinda Williams or Ryan Adams, but when all is said and done he may yet leave a greater musical legacy. As many homes as have Car Wheels On A Gravel Road should surely have at least one record by Jimmy LaFave.
My fantasy is for No Depression to do in the future what I hoped they'd do on the release of Texoma: a feature article. Tell people what essential records to their collections Trail and Austin Skyline are; tell them how much they'll love Highway Trance and Buffalo Return To The Plains. And tell them to buy Texoma in spite of what they might have read in their favorite alt-country rag.
Jimmy LaFave is a national, though undiscovered, treasure. Do the right thing by him.
— Mark Perron
Hazel Dickens:
For old-timey's sake
I am writing about the article on Hazel Dickens in the January-February issue of this year [ND #31]. I am a big fan of Hazel Dickens but I don't like the way they compare her to the Lonesome River Band or IIIrd Tyme Out as if they were pop bands. They are very good traditional bluegrass bands. I don't think Hazel Dickens would approve of being compared to them in that manner. Her music definitely has an edge, and that is because it tends to be toward "old-timey." I do not think that Geoffrey Himes is actually a bluegrass fan. Anyhow if he likes Hazel Dickens, he should listen to Dry Branch Fire Squad. They too tend toward "old-timey," and I have heard their lead singer, Ron Thomasen, sing Hazel Dickens "Black Lung" and he did a superb job.
— Nancy Preston


text:
Home / articles / Portable Solar Generator Sparks
Portable Solar Generator Sparks
Portable Solar Generator Sparks – The United States of America (the U.S.A. or the USA), commonly referred to as the United States (U.S. or US) or America, is a country primarily situated in North America. It consists of 50 states, a federal district, five main unincorporated territories, 326 Indian reservations, and some minor possessions. At 3.8 million sq. miles (9.8 million square kilometers), it is the world's third- or fourth-largest country by complete space. With a population of greater than 331 million folks, it is the third most populous country in the world. The national capital is Washington, D.C., and essentially the most populous city is New York City.
Final Words Portable Solar Generator Sparks
Sparks is essentially the most populous city in the US state of Nevada. With an estimated 2019 population of 105,006 distributed over about 35.9 sq mi (93.0 km2), Sparks City is also essentially the most densely populated major metropolis in the United States. Located at 39.55°N 119.73°W, with population density nearly 2,810/sq mi (1,080/km2) individuals in its metropolitan statistical space and its change +16.33% statistical.
The US electricity system is often described as the world's largest machine. It is also incredibly numerous, reflecting the coverage preferences, needs, and accessible pure resources of every state.
The U.S. electric grid is so old and outdated it can't handle the influx of wind power and other intermittent renewable sources. Integrating such sources requires adapting a system that's finely tuned to stability the amount of electrical energy getting used with the quantity of electrical energy being generated with fickle winds.
But there may be an much more urgent problem, based on this article within the New York Times: the grid isn't large enough. The wind tends to blow strongest in locations, reminiscent of North and South Dakota, which might be removed from the place individuals dwell and use electricity. And nobody desires to spend the hundreds of thousands of dollars it will take to place in a new transmission line (to not point out the legal headache of getting all those rights of means). Read more here.
It is one of the commonest recurring pure disasters within the United States and worldwide. Earthquakes, tornadoes, floods, power outages, fires, and many other natural disasters can occur, however hurricanes are among the most prolific natural disasters we have now to deal with. I personally have been by way of hurricanes, floods, earthquakes, and power outages and know firsthand how necessary it is to have a conveyable power generator for a home.
Emergencies caused by disasters similar to earthquakes, floods, and even terrorism can go away you in complete darkness and disconnected from the rest of the world. When the grid is gone, your communication tower is likely to observe swimsuit in a wide-scale catastrophe. You can't name! You can't watch TV! You can't listen to the radio! All you can do is really feel vulnerable and helpless. But wait a minute, what about if you had a conveyable solar-powered generator?
It is that one gadget that may put you one step ahead of emergencies when there is a power shortage. You can charge your cellphone and receive news out of your radio or TV, power fridges and freezers, run followers and lights, and so on.
During emergencies, Solar Generator can be the most important lifesaver. It can help you communicate to make ensure your family or mates are secure and safe. Back in 2017 Hurricane Maria hit Puerto Rico extremely laborious. Over 3,000 individuals died and the power was out for 11 months. Almost a whole 12 months!
Solar backup makes use of solar power which is dependable,100% renewable, and fully free. In case of emergencies, you'll be able to power your devices or gear instantly and save your self.
Diesel/fuel generators don't store vitality. They solely convert the diesel into an electrical present when you ignite it. To maintain the power supply on, you might want to refuel your generator with diesel regularly. Once the source of diesel has depleted, you'll remain stuck.
Portable solar generators are pieces of equipment that may generate electrical energy from the sunlight. They have develop into more and more standard for quite a few reasons. They might help you in a pure catastrophe, resembling a hurricane, flood, tornado, or harsh storm. As nicely, they can support in power outages and EMP assaults that may knock out the traditional power grid.
Now that we know slightly bit extra about what to look for in a photovoltaic generator, let's start evaluating a few of the many choices out there. There is a wide range of generators available from quite a lot of manufacturers, however some stand nicely above others when it comes to their quality and lifespan. Thankfully, we've gone over 5 of probably the most revered photovoltaic generators available on the market to determine which one we think is the absolute best.
The Titan is made by Point Zero and supported by Powered Portable Solar, which is an incredibly reputable firm in the case of preparedness and survival supplies. They've made plenty of solar generators up to now, but the Titan blows all previous models out of the water. The Titan makes use of all of Point Zero's data of moveable power in one spectacular package deal.
The Bluetti AC200P is one other solar generator, this time from Maxoak. While Maxoak may not carry the identical status as Point Zero, they put collectively an admirable product with the Bluetti AC200P. For those who can't spring for the Titan, or who merely have extra modest wants, the Bluetti should serve you greatly.
The Explorer 2000 comes from Jackery, and it's the most spectacular solar generator that the company has made up to now. Still, it is no match for the Titan or even the Bluetti. Despite this, it has a slight advantage in being light-weight and more cheap.
The Safari ME comes from Lion Energy, which is a fairly new firm when it comes to preparedness supplies. If the Safari ME is the perfect they've to supply, then the company nonetheless has a methods to go earlier than they're rating alongside Titan. However, the Safari ME nonetheless has some methods up its sleeves.
Lion Safari ME 5000wH Solar Generator 4 x 100W
One of the amazing things it's able to doing is it could run the 1,260wh battery at 1,800w output for your complete capability of the battery. Most batteries won't push out more power than their whole capacity. That implies that a 1,260wh battery usually won't push out greater than 1,260w of steady power from the inverter. But the EcoFlow Delta 1300 can.
EcoFlow Delta 1800W Solar Generator Eclipse Kit
Ecoflow Delta Pro EV Recharge Bundle
DELTA Max Extra Battery
$1,599.00 Notify Me
Dual DELTA PRO Hex Kit
COMBO BLUETTI AC200MAX & 1×B230 (4096WH)
A conveyable solar-powered generator for the house is a superb choice for a clean and dependable source of energy. They are the best various source of vitality when there's a power outage. Better yet, solar-powered generators are an affordable source of power that you can use to run most of your private home appliances and considerably scale back problems during emergencies.
Portable Solar Generator Sparks – If you may have any questions about the Kodiak or every other objects please feel free to contact me here.

redpajama_set_name: RedPajamaCommonCrawl


text:
Citing coronavirus concerns, a federal judge blocks the Trump administration's food stamp cuts
A new Trump administration rule could have stripped 700,000 people of access to SNAP.
By Zeeshan Aleem@ZeeshanAleem Mar 14, 2020, 11:59am EDT
Share All sharing options for: Citing coronavirus concerns, a federal judge blocks the Trump administration's food stamp cuts
Goods line the shelves of a food bank in Colorado.
Hyoung Chang/Denver Post/Getty Images
A federal judge blocked a new Trump administration rule on Friday that would have kicked at least 700,000 people off of food stamps in the next month — and she cited the coronavirus pandemic as part of the reason for her ruling.
Despite indications that the outbreak of the novel coronavirus is slowing the global economy and the fact that it has already resulted in job losses, US Agriculture Secretary Sonny Perdue declined to delay the implementation of the rule, which tightens work requirements for access to the Supplemental Nutrition Assistance Program (SNAP) among able-bodied people without dependents.
Federal regulations on SNAP benefits have long required "work-eligible" adults to meet a 20-hour-a-week work requirement in order to be eligible for the program. But states have had the ability to waive that requirement, which has proved particularly helpful for individuals in areas where meeting that work requirement is difficult, if not impossible, due to high unemployment, poor infrastructure, or other issues.
The new Trump rule puts restrictions on states' ability to issue those waivers, meaning the roughly 700,000 people who currently receive SNAP benefits under the waivers would no longer be eligible to do so.
On Friday, Chief Judge Beryl Howell, of the US District Court for the District of Columbia, granted a preliminary injunction against the rule, a measure requested by several Democratic attorneys general, and pointed to the increased social vulnerability caused by coronavirus in her ruling.
"Especially now, as a global pandemic poses widespread health risks, guaranteeing that government officials at both the federal and state levels have flexibility to address the nutritional needs of residents and ensure their well-being through programs like SNAP, is essential," Howell wrote, according to HuffPost.
It is important to note that the injunction does not kill the new rule: it merely means that as the case moves through the court system, the rule cannot take effect.
The rule puts many vulnerable Americans in a rough position
The rule that the Trump administration had been planning on implementing in April is one of a number of the administration's efforts to make cuts to SNAP.
In February, when it first proposed the rule change, the US Department of Agriculture initially estimated that the new rule would kick 750,000 people off of SNAP. It later revised that number to 688,000 on Wednesday. But those estimates have been contested.
Lauren Bauer, a fellow at the Brookings Institution who specializes in the social safety net, estimated the number of people losing assistance would be between 1.3 million and 1.5 million, based on her own analysis of the data.
But both analyses were conducted before the effects of the coronavirus and Covid-19, the disease the virus causes, began to rapidly reshape forecasts about the global economy and consumer behavior in the coming months.
As Catherine Kim has written for Vox, there are now even more concerns about cutting programs like SNAP amid fears the coronavirus pandemic will put additional strain on the social safety net:
A growing concern is that those who work in low-wage service industries, particularly bars and restaurants, won't be able to take on enough shifts, or may even get laid off, as people practice social distancing and avoid going out to eat and drink in crowded areas. Yet without a job, they'll be unable to stay eligible for SNAP, even though they'll need the assistance the most during their unemployment, [Georgetown public policy professor Don] Moynihan pointed out.
The work requirement could also force employees to continue going to their public-facing jobs, even when they are sick, because they cannot afford to stay at home when they have little job stability, he added. This could further spread the disease, contrary to what the government wants.
Overall, Moynihan described the government's plan to move ahead with the rule changes as a "poor choice" driven by conservative aides who have long opposed government assistance programs.
"It certainly seems to be a self-defeating addiction to an ideological agenda," he said. "You have a group of policymakers in the Trump administration, who really believe that the social safety net is too large, and have been finding a way to reduce it any way that they can. And right now, that priority of cutting the social safety net remains more important for them than helping people and producing economic stimulus at a time of economic downturn."
Agriculture Secretary Perdue has defended the rule change despite fears over how the coronavirus might affect US employment, pointing to the fact that "good cause" waivers allow people who miss work due to health problems or a disruption in the workplace to remain eligible for SNAP.
But public policy experts like Moynihan have criticized "good cause" waivers as ineffective, arguing they introduce more administrative work and red tape for both individuals and states in a time when bureaucratic resources are spread thin and policy decisions must be made quickly. It's also unclear whether states would — or even could — consider the coronavirus as meeting "good cause" requirements, since there's no modern precedent for this kind of public health crisis.
For now, at least, that will remain an open question, due to the injunction. And Democrats celebrated that fact Friday: "Millions rely on SNAP to eat and this ruling is a huge victory for our entire nation," tweeted New York Attorney General Letitia James's office.
Coronavirus pandemic: News and updates on new cases and its spread
This is what long-term immunity to Covid-19 might look like
Drive-through testing for coronavirus, explained by an expert
Next Up In Politics & Policy


.We have various sizes and styles of solid 2 door storage freezers.
Williams, Skope and Gastronorm as main suppliers of our range of quality solid door storage freezers.
Our quality freezers come with fan forced evaporative cooling, low noise compressors, auto defrost and self evaporating drainage. Interiors and exteriors are stainless steel or white. Interior lighting, lockable castors or adjustable legs, easy clean surfaces and LED temperature display mounted on exterior of cabinet are convenient.
Larger solid door storage freezers in double door styles or (4 x ½) half door styles are available.
These have top mounted refrigeration or top mounted in self contained cabinets and come with fan forced evaporative cooling, auto defrost, self evaporating drainage and external temperature display depending on the model. Shelving is adjustable with 3 or 4 levels plus the stainless steel floor. Interior and exterior finish options are stainless steel.
These freezers come with top quality compressors with low noise, self evaporating drainage and fast temperature control features. Temperature control mounted on the exterior of the freezer is an option on some models.
Doors have easy clean handles and self tilting door closers. They come with adjustable shelving, and brake castors. You can choose finish in stainless steel or white exterior for some models. Interiors come in stainless steel with stainless steel floor.


The guard gated section of Lake Las Vegas is known as the South Shore. The South Shore is home to the first private Jack Nicklaus golf course in Nevada, and is mostly comprised of custom homes. The custom home communities are divided into small subdivisions such as Capri, Biarritz, Siena, Barcelona, Marseilles, etc, but there are some condos (Mantova) and Golf Villas. There are also some detached single family homes from the $500K range in a community called Bella Vivante. South Shore is where Celine Dion and Nigel Lythgoe resided in Vegas!
HOA dues to live in Lake Las Vegas are $375/Quarter & South Shore Residents pay an additional $875/Quarter for the guard gate, security (which is top notch), roving patrol, maintenance of the common areas, etc.
Walking around in the South Shore feels almost fairy tale like – it is so beautiful!
Discover Guard Gated Homes for sale in South Shore at Lake Las Vegas below. Contact The Stark Team to for all your Lake Las Vegas Real Estate Needs.


text:
package dagger

import (
	"fmt"
	"net"
	"strings"
	"sync"
	"time"

	log "github.com/Sirupsen/logrus"

	"github.com/cenkalti/backoff"
	"github.com/hashicorp/consul/api"
)

const (
	// JobPrefix is the key prefix for tasks
	taskPrefix        = "dagger/tasks/"
	subscribersPrefix = "dagger/subscribers/"
	publishersPrefix  = "dagger/publishers/"
)

// ConsulConfig is used to configure the Consul coordinator
type ConsulConfig struct {
	Address   string
	TTL       string
	LockDelay time.Duration
}

func defaultConfig() *ConsulConfig {
	return &ConsulConfig{
		Address:   "localhost:8500",
		TTL:       "10s",
		LockDelay: 100 * time.Millisecond,
	}
}

// Coordinator implementation based on Consul.io
type consulCoordinator struct {
	client *api.Client
	config *ConsulConfig
	addr   net.Addr

	sessionID    string
	sessionRenew chan struct{}
	stopCh       chan struct{}

	subscribers     map[string]*subscribersList
	subscribersLock sync.RWMutex
}

// NewConsulCoordinator creates a new instance of Consul coordinator
func NewConsulCoordinator(customizeConfig func(*ConsulConfig)) Coordinator {
	apiconf := api.DefaultConfig()
	conf := defaultConfig()
	if customizeConfig != nil {
		customizeConfig(conf)
	}
	apiconf.Address = conf.Address
	client, _ := api.NewClient(apiconf)
	c := &consulCoordinator{
		client:          client,
		config:          conf,
		stopCh:          make(chan struct{}),
		subscribers:     make(map[string]*subscribersList),
		subscribersLock: sync.RWMutex{},
	}
	return c
}

func (c *consulCoordinator) Start(addr net.Addr, errCh chan error) error {
	if addr == nil {
		addr = &net.TCPAddr{}
	}
	c.addr = addr
	session := c.client.Session()
	// set session to delete our keys on invalidation
	sessionOptions := &api.SessionEntry{
		Behavior:  api.SessionBehaviorDelete,
		LockDelay: c.config.LockDelay,
		TTL:       c.config.TTL,
	}
	var sessionID string
	var err error
	err = backoff.RetryNotify(func() error {
		sessionID, _, err = session.Create(sessionOptions, nil)
		return err
	}, backoff.NewExponentialBackOff(), func(err error, t time.Duration) {
		log.Println("Cannot create session, retrying in", t, ". Error:", err)
	})
	if err != nil {
		return fmt.Errorf("failed to create consul session: %v", err)
	}

	// set up a long-running goroutine for renewing the session
	c.sessionRenew = make(chan struct{})
	c.sessionID = sessionID
	log.Println("[coordinator] Coordinator ready")

	go func() {
		errCh <- session.RenewPeriodic("5s", sessionID, nil, c.sessionRenew)
	}()
	return nil
}

// Stop destroys the Consul session, deleting all our keys
func (c *consulCoordinator) Stop() {
	close(c.sessionRenew)
	c.sessionRenew = nil
	close(c.stopCh)

	session := c.client.Session()
	log.Printf("[coordinator] Destroying session %s", c.sessionID)
	session.Destroy(c.sessionID, nil) // ignoring error, session will expire anyway
}

func (c *consulCoordinator) RenewSession(session string) error {
	_, _, err := c.client.Session().Renew(session, nil)
	return fmt.Errorf("error renewing session: %s", err)
}

func (c *consulCoordinator) RegisterSession() (string, error) {
	sessionOptions := &api.SessionEntry{
		Behavior:  api.SessionBehaviorDelete,
		LockDelay: c.config.LockDelay,
		TTL:       c.config.TTL,
	}
	session := c.client.Session()
	sessionID, _, err := session.Create(sessionOptions, nil)
	return sessionID, err
}

func (c *consulCoordinator) WatchTasks(stop chan struct{}) (chan []string, chan error) {
	newc, errc := c.watchSet(taskPrefix, stop)
	return stripPrefix(taskPrefix, newc), errc
}

func (c *consulCoordinator) AcquireTask(task StreamID) (bool, error) {
	log.Println("[coordinator] Trying to take task: ", task)
	kv := c.client.KV()
	pair := &api.KVPair{
		Key:     string(task),
		Session: c.sessionID,
	}
	acquired, _, err := kv.Acquire(pair, nil)
	return acquired, err
}

func (c *consulCoordinator) TaskAcquired(task StreamID) error {
	log.Println("[coordinator] Task acquired, deleting: ", task)
	kv := c.client.KV()
	_, err := kv.Delete(string(task), nil)
	return err
}

func (c *consulCoordinator) ReleaseTask(task StreamID) (bool, error) {
	log.Println("[coordinator] Releasing task: ", task)
	kv := c.client.KV()
	pair := &api.KVPair{
		Key:     string(task),
		Session: c.sessionID,
	}
	released, _, err := kv.Release(pair, nil)
	return released, err
}

// SubscribeTo subscribes to topics with global coordination
func (c *consulCoordinator) SubscribeTo(topic StreamID, from Timestamp) error {
	kv := c.client.KV()
	pair := &api.KVPair{
		Key:     c.constructSubscriberKey(topic),
		Value:   []byte(fmt.Sprintf("%d", from)),
		Session: c.sessionID,
	}
	// ignore bool, since if it's false, it just means we're already subscribed
	_, _, err := kv.Acquire(pair, nil)
	return err
}

func (c *consulCoordinator) EnsurePublisherNum(topic StreamID, n int, stop chan struct{}) chan error {
	prefix := fmt.Sprintf("dagger/publishers/%s", topic)
	lastNumPublishers := -1
	kv := c.client.KV()
	new, errc := c.watchSet(prefix, nil)
	go func() {
		for {
			select {
			case <-stop:
				return
			case keys := <-new:
				// if there are no publishers registered, post a new job
				if len(keys) != lastNumPublishers && len(keys) < 2 {
					log.Printf("[coordinator] Number of publishers of %s is %d, posting a job.", topic, len(keys))
					// log.Println("Publishers: ", keys)
					pair := &api.KVPair{
						Key: taskPrefix + string(topic),
					}
					_, err := kv.Put(pair, nil)
					if err != nil {
						errc <- fmt.Errorf("consul error: %s", err)
					}
				} else { // FIXME: do this more elegantly
					if len(keys) == 2 {
						log.Printf("[coordinator] Number of publishers of %s is %d, not posting a job.", topic, len(keys))
						// log.Println("Publishers: ", keys)
					}
				}
				lastNumPublishers = len(keys)
			}
		}
	}()
	return errc
}

func tagsAreSubset(a Tags, b Tags) bool {
	log.Println("[coordinator][tags] a:", a, ", b:", b)
	for k, v := range a {
		if b[k] != v {
			return false
		}
	}
	return true
}

func (c *consulCoordinator) CheckpointPosition(topic StreamID, from Timestamp) error {
	log.Println("[TRACE] checkpointing position", topic, from)
	kv := c.client.KV()
	pair := &api.KVPair{
		Key:     c.constructSubscriberKey(topic),
		Value:   []byte(fmt.Sprintf("%d", from)),
		Session: c.sessionID,
	}
	_, err := kv.Put(pair, nil)
	if err != nil {
		log.Println("[checkpoint] error", err)
	}
	return err
}

// UnsubscribeFrom unsubscribes from topics with global coordination
func (c *consulCoordinator) UnsubscribeFrom(topic StreamID) error {
	kv := c.client.KV()
	key := c.constructSubscriberKey(topic)
	_, err := kv.Delete(key, nil)
	return err
}

func (c *consulCoordinator) WatchSubscribers(streamID StreamID, stop chan struct{}) (chan string, chan string, chan error) {
	topic := StripTags(streamID)
	publisherTags := ParseTags(streamID)
	added, dropped, errc := c.watchSetDiff(subscribersPrefix+string(topic), stop)
	filtered := make(chan string)
	filteredDropped := make(chan string)
	go func() {
		for {
			select {
			case <-stop:
				return
			case sub := <-added:
				subTags := ParseTags(StreamID(sub))
				if tagsAreSubset(subTags, publisherTags) {
					idx := strings.LastIndex(sub, "/")
					filtered <- sub[idx+1:]
				}
			case sub := <-dropped:
				idx := strings.LastIndex(sub, "/")
				filteredDropped <- sub[idx+1:]
			}
		}
	}()
	return filtered, filteredDropped, errc
}

func (c *consulCoordinator) GetSubscriberPosition(topic StreamID, subscriber string) (Timestamp, error) {
	pair, _, err := c.client.KV().Get(subscribersPrefix+string(topic)+"/"+subscriber, nil)
	if err != nil {
		return Timestamp(0), err
	}
	return TSFromString(string(pair.Value)), nil
}

func (c *consulCoordinator) WatchSubscriberPosition(topic StreamID, subscriber string, stop chan struct{}) (chan Timestamp, chan error) {
	new, errc := c.watchValue(subscribersPrefix+string(topic)+"/"+subscriber, stop)
	posc := make(chan Timestamp)
	go func() {
		for {
			select {
			case <-stop:
				return
			case v := <-new:
				posc <- TSFromString(string(v))
			}
		}
	}()
	return posc, errc
}

func (c *consulCoordinator) WatchTagMatch(streamID StreamID, addedRet chan string, droppedRet chan string, errcRet chan error) {
	topic := StripTags(streamID)
	subTags := ParseTags(streamID)
	added, dropped, errc := c.watchSetDiff(publishersPrefix+string(topic), make(chan struct{}))
	go func() {
		for {
			select {
			case pub := <-added:
				pubTags := ParseTags(StreamID(pub))
				if tagsAreSubset(subTags, pubTags) {
					log.Println("adding", pub)
					idx := strings.LastIndex(pub, "/")
					addedRet <- pub[len(publishersPrefix):idx]
				}
			case pub := <-dropped:
				droppedRet <- pub
			case err := <-errc:
				errcRet <- err
			}
		}
	}()
}

// RegisterAsPublisher registers us as publishers of this stream and
func (c *consulCoordinator) RegisterAsPublisher(compID StreamID) error {
	return c.registerAsPublisher(c.sessionID, compID)
}

// RegisterAsPublisherWithSession registers us as publishers of this stream and
func (c *consulCoordinator) RegisterAsPublisherWithSession(session string, compID StreamID) error {
	return c.registerAsPublisher(session, compID)
}

func (c *consulCoordinator) registerAsPublisher(session string, compID StreamID) error {
	log.Println("[coordinator] Registering as publisher for: ", compID)
	kv := c.client.KV()
	pair := &api.KVPair{
		Key:     fmt.Sprintf("dagger/publishers/%s/%s", compID, session),
		Session: session,
	}
	_, _, err := kv.Acquire(pair, nil)
	if err != nil {
		log.Println("[coordinator] Error registering as publisher: ", err)
		return err
	}
	return nil
}

// DeregisterAsPublisher deregisters us as publishers of this stream and
func (c *consulCoordinator) DeregisterAsPublisher(compID StreamID) error {
	log.Println("[coordinator] Deregistering as publisher for: ", compID)
	kv := c.client.KV()
	key := fmt.Sprintf("dagger/publishers/%s/%s", compID, c.sessionID)
	_, err := kv.Delete(key, nil)
	if err != nil {
		log.Println("[coordinator] Error registering as publisher: ", err)
	}
	return nil
}

// ------------- OLD --------------

// JoinGroup joins the group that produces compID computation
func (c *consulCoordinator) JoinGroup(compID StreamID) (GroupHandler, error) {
	gh := &groupHandler{
		compID: compID,
		c:      c,
		stopCh: make(chan struct{}),
		errCh:  make(chan error),
	}
	err := gh.contend()
	go func() {
		for {
			select {
			case <-gh.stopCh:
				return
			default:
				err := gh.contend()
				if err != nil {
					gh.errCh <- err
				}
			}
		}
	}()
	return gh, err
}

type groupHandler struct {
	compID StreamID
	c      *consulCoordinator

	areWeLeader   bool
	currentLeader string

	lastIndex uint64
	stopCh    chan struct{}
	errCh     chan error

	sync.RWMutex
}

// GetStatus returns whether we're the leader and the address of the current leader
func (gh *groupHandler) GetStatus() (bool, string, error) {
	for {
		select {
		case err := <-gh.errCh:
			return false, "", err
		default:
			gh.RLock()
			currentLeader := gh.currentLeader
			gh.RUnlock()
			if currentLeader == "" {
				// wait until a leader is elected
				time.Sleep(time.Second)
				continue
			}
			gh.RLock()
			defer gh.RUnlock()
			return gh.areWeLeader, gh.currentLeader, nil
		}
	}
}

func (gh *groupHandler) contend() error {
	key := fmt.Sprintf("dagger/%s/publishers_leader", string(gh.compID))
	if gh.currentLeader == "" {
		pair := &api.KVPair{
			Key:     key,
			Session: gh.c.sessionID,
			Value:   []byte(gh.c.addr.String()),
		}
		kv := gh.c.client.KV()
		log.Println("[coordinator][groupHandler] Trying to acquire leadership of ", gh.compID)
		_, _, err := kv.Acquire(pair, nil)
		if err != nil {
			log.Println("Error acquiring leadership", err)
			return err
		}
	}
	return gh.fetch()
	// return nil
}

func (gh *groupHandler) fetch() error {
	key := fmt.Sprintf("dagger/%s/publishers_leader", gh.compID)
	kv := gh.c.client.KV()

	qOpts := &api.QueryOptions{WaitIndex: gh.lastIndex}
	// determine if we should do a short poll in case a leader's not chosen yet
	gh.RLock()
	if gh.currentLeader == "" {
		qOpts.WaitTime = time.Second
	}
	gh.RUnlock()
	pair, queryMeta, err := kv.Get(key, qOpts)
	log.Println("[coordinator][groupHandler] Fetch returned new data")
	if err != nil {
		log.Println("FETCH ERROR")
		return err
	}
	gh.Lock()
	gh.lastIndex = queryMeta.LastIndex
	if pair == nil || pair.Session == "" {
		gh.currentLeader = ""
		gh.areWeLeader = false
	} else {
		gh.currentLeader = string(pair.Value)
		gh.areWeLeader = (gh.currentLeader == gh.c.addr.String())
	}
	gh.Unlock()

	log.Println("[coordinator] New leader:", gh.currentLeader)

	return nil
}

// LEGACY ONLY, TO BE REMOVED

// GetSubscribers returns the addresses of subscribers interested in a certain topic
func (c *consulCoordinator) GetSubscribers(topic StreamID) ([]string, error) {
	tags := ParseTags(topic)
	log.Println("Publisher tags:", tags, topic)
	topic = StripTags(topic)
	prefix := fmt.Sprintf("dagger/subscribers/%s/", topic)

	c.subscribersLock.RLock()
	subsList := c.subscribers[prefix]
	c.subscribersLock.RUnlock()
	if subsList == nil {
		c.subscribersLock.Lock()
		subsList = c.subscribers[prefix]
		// check again, otherwise someone might have already acquired write lock before us
		if subsList == nil {
			subsList = &subscribersList{prefix: prefix, tags: tags, c: c}
			err := subsList.fetch()
			if err != nil {
				return nil, err
			}
			c.subscribers[prefix] = subsList
			// keep subscribers updated and clean up if unused
			go subsList.sync()
		}
		c.subscribersLock.Unlock()
	}
	return subsList.get(), nil
}

func (c *consulCoordinator) constructSubscriberKey(topic StreamID) string {
	return fmt.Sprintf("dagger/subscribers/%s/%s", topic, c.addr.String())
}

type subscribersList struct {
	subscribers []string
	prefix      string
	tags        Tags
	lastAccess  time.Time
	lastIndex   uint64
	c           *consulCoordinator
	sync.RWMutex
}

func (sl *subscribersList) get() []string {
	sl.Lock()
	sl.lastAccess = time.Now()
	sl.Unlock()
	return sl.subscribers
}

func (sl *subscribersList) sync() {
	for {
		// check if this list is expired
		sl.RLock()
		lastAccess := sl.lastAccess
		sl.RUnlock()
		if time.Since(lastAccess) >= 15*time.Second {
			log.Printf("[coordinator] TTL expired for subscribers of '%s'", sl.prefix)
			sl.c.subscribersLock.Lock()
			defer sl.c.subscribersLock.Unlock()
			delete(sl.c.subscribers, sl.prefix)
			return
		}

		// do a blocking query for when our prefix is updated
		err := sl.fetch()
		if err != nil {
			log.Fatal("[coordinator][WARNING] Problem syncing subscribers for prefix:", sl.prefix)
		}
	}
}

func (sl *subscribersList) fetch() error {
	kv := sl.c.client.KV()
	// fmt.Println("Executing blocking consul.Keys method, lastIndex: ", sl.lastIndex)
	keys, queryMeta, err := kv.Keys(sl.prefix, "", &api.QueryOptions{WaitIndex: sl.lastIndex})
	log.Println("[coordinator] Subscribers updated in ", sl.prefix)
	// fmt.Println("consul.Keys method returned, New LastIndex: ", queryMeta.LastIndex)
	if err != nil {
		return err
	}
	sl.lastIndex = queryMeta.LastIndex
	filtered := make([]string, 0, len(keys))
	for _, sub := range keys {
		subTags := ParseTags(StreamID(sub))
		if tagsAreSubset(subTags, sl.tags) {
			idx := strings.LastIndex(sub, "/")
			if idx > 0 {
				filtered = append(filtered, sub[idx+1:])
			}
		}
	}
	log.Println("[coordinator] new subscribers ", filtered)
	sl.subscribers = filtered
	return nil
}

// WATCHES IMPLEMENTATIONS

type consulFunc func(*api.KV, string, uint64) (interface{}, *api.QueryMeta, error)

func (c *consulCoordinator) watch(key string, cf consulFunc, stop chan struct{}) (chan interface{}, chan error) {
	new := make(chan interface{})
	errc := make(chan error)
	go func() {
		kv := c.client.KV()
		var lastIndex uint64
		for {
			select {
			case <-stop:
				return
			default:
				// do a blocking query
				ret, queryMeta, err := cf(kv, key, lastIndex)
				log.Println("[consul] value updated at", key, ret)
				if err != nil {
					log.Println(err)
					errc <- err
					return
				}
				if ret != nil {
					new <- ret
				}
				lastIndex = queryMeta.LastIndex
			}
		}
	}()
	return new, errc
}

func consulGet(kv *api.KV, key string, lastIndex uint64) (interface{}, *api.QueryMeta, error) {
	return kv.Get(key, &api.QueryOptions{WaitIndex: lastIndex})
}

func consulKeys(kv *api.KV, prefix string, lastIndex uint64) (interface{}, *api.QueryMeta, error) {
	return kv.Keys(prefix, "", &api.QueryOptions{WaitIndex: lastIndex})
}

func (c *consulCoordinator) watchValue(key string, stop chan struct{}) (chan []byte, chan error) {
	new, errc := c.watch(key, consulGet, stop)
	vals := make(chan []byte)
	go func() {
		for {
			select {
			case <-stop:
				return
			case s := <-new:
				kvpair, ok := s.(*api.KVPair)
				if ok && kvpair != nil {
					vals <- kvpair.Value
				}
			}
		}
	}()
	return vals, errc
}

func (c *consulCoordinator) watchSet(prefix string, stop chan struct{}) (chan []string, chan error) {
	new, errc := c.watch(prefix, consulKeys, stop)
	sets := make(chan []string)
	go func() {
		for {
			select {
			case <-stop:
				return
			case s := <-new:
				keys := s.([]string)
				if keys == nil {
					sets <- []string{}
				} else {
					sets <- keys
				}
			}
		}
	}()
	return sets, errc
}

func (c *consulCoordinator) watchSetDiff(prefix string, stop chan struct{}) (chan string, chan string, chan error) {
	new, errc := c.watchSet(prefix, stop)
	added := make(chan string)
	dropped := make(chan string)
	go func() {
		var oldKeys []string
		for {
			select {
			case <-stop:
				return
			case newSet := <-new:
				// prepare a diff set so we can know which keys are newly
				// added and which are dropped
				diffSet := make(map[string]struct{})
				for _, s := range oldKeys {
					diffSet[s] = struct{}{}
				}
				oldKeys = make([]string, 0)
				for _, key := range newSet {
					_, exists := diffSet[key]
					if exists {
						delete(diffSet, key)
					} else {
						log.Println("[consul] new key ", key)
						added <- key
					}
					oldKeys = append(oldKeys, key)
				}
				for s := range diffSet {
					dropped <- s
				}
			}
		}
	}()
	return added, dropped, errc
}

func stripPrefix(prefix string, newc chan []string) chan []string {
	newcStripped := make(chan []string)
	go func() {
		for {
			select {
			case new := <-newc:
				stripped := make([]string, len(new))
				for i := range new {
					stripped[i] = new[i][len(prefix):]
				}
				newcStripped <- stripped
			}
		}
	}()
	return newcStripped
}

redpajama_set_name: RedPajamaGithub


text:
Thermal Analyzers
PerkinElmer Showcases Latest ...
PerkinElmer Showcases Latest Advancements in Thermal Instrumentation at Materials Research Society Meeting
Tue Nov 27 2012
By PerkinElmer
New, unique offerings enable scientists to analyze environmental and industrial samples with greater specificity
PerkinElmer Inc., a global leader focused on the health and safety of people and the environment, will showcase two new hyphenated thermal analysis solutions at the Materials Research Society Meeting that are designed for the accurate characterization and analysis of inorganic materials, polymers, geological materials and oils. The TL-9000 and Simultaneous Thermal Analyzer (STA) 8000 will be debuted at PerkinElmer booth 1100 from November 25-30, 2012 in Boston.
The TL-9000 offers an innovative accessory that enables hyphenation which facilitates the collection of evolved gases from a thermogravimetric analysis (TGA) or STA and then transfers sequentially to both a Fourier Transform Infrared Spectrometer (FTIR) and Mass Spectrometer (MS) or Gas Chromatography/Mass Spectrometer (GCMS). The testing capability of this solution is unique in that it combines the power of thermal analysis with the specificity of separation and the sensitivity of detection available in spectroscopic and chromatographic methods. The capability of hyphenating the TGA or STA to an FTIR, MS, or GCMS, provides scientists the ability to identify and study low levels of materials in highly complex matrices such as oil contamination in soil, and trace impurities in foods and leachable materials from pharmaceutical packaging not previously possible.
Controlled by PerkinElmer's Pyris™ software, the new Simultaneous Thermal Analyzer (STA) 8000 is a compact and rugged instrument that delivers high performance thermal analysis and is used for compositional analysis and kinetic studies. It enables high temperature thermal analysis up to 1600° C, enabling the study of transitions in materials as well as calibration with palladium standards for fuel cell, ceramics, catalysis applications, coal and challenging academic research.
"For more than 50 years, PerkinElmer has been at the forefront of highly precise and exceedingly sensitive thermal analysis," said Dusty Tenney, president, Environmental, PerkinElmer. "Both the STA 8000 and the TL-9000 offer increased specificity for enhanced materials characterization. This specificity is essential for researchers in key application areas to meet regulations across a variety of segments, including environmental, food, consumer product and pharmaceutical testing."


text:
Q: Measure width of numbers in Bitmaps I created a texture (bitmap) that is used for drawing arbitrary numbers
The texture contains the text: 0123456789.-

Now I need the coordinates of each character.
TextRenderer.MeasureText(c.ToString(), m_font, new Size(1, 1), TextFormatFlags.NoPadding);
...returns is 16x17
g.MeasureString(c.ToString(), m_font);
...returns is 11.9x17.7
The actual size is 8x11
My workaround for now is a manual measurement of each character which yields the following table:

coords.Add('0', new RectangleF(1, 3, 8, 11));
coords.Add('1', new RectangleF(9, 3, 7, 11));
coords.Add('2', new RectangleF(15, 3, 8, 11));
coords.Add('3', new RectangleF(22, 3, 8, 11));
coords.Add('4', new RectangleF(29, 3, 8, 11));
coords.Add('5', new RectangleF(36, 3, 8, 11));
coords.Add('6', new RectangleF(43, 3, 8, 11));
coords.Add('7', new RectangleF(50, 3, 8, 11));
coords.Add('8', new RectangleF(57, 3, 8, 11));
coords.Add('9', new RectangleF(64, 3, 8, 11));
coords.Add('.', new RectangleF(72, 3, 3, 11));
coords.Add('-', new RectangleF(75, 3, 6, 11));
I would like to use a dynamic font, so a programmatic way to measure the size is required.

A: Tell the MeasureString method to work with the generic typographic StringFormat.
static void Main(string[] args)
        {
            var image = new Bitmap(1000, 500);

            var g = Graphics.FromImage(image);
            g.FillRectangle(System.Drawing.Brushes.White, 0, 0, 1000, 500);

            var stringFormat = new StringFormat(StringFormat.GenericTypographic) {
                 Alignment = StringAlignment.Near,
                 FormatFlags = System.Drawing.StringFormatFlags.LineLimit | System.Drawing.StringFormatFlags.NoClip | StringFormatFlags.DirectionRightToLeft
            };

            var font = new Font(new System.Drawing.FontFamily("Times New Roman"), 72.0f,FontStyle.Regular, GraphicsUnit.Point);
            var point = new PointF { X = 10, Y = 10 };

            SizeF[] outputs = new SizeF[7];
            SizeF[] total = new SizeF[7];
            outputs[0] = g.MeasureString("T", font, point, stringFormat);
            outputs[1] = g.MeasureString("e", font, point, stringFormat);
            outputs[2] = g.MeasureString("s", font, point, stringFormat);
            outputs[3] = g.MeasureString("t", font, point, stringFormat);
            outputs[4] = g.MeasureString("S", font, point, stringFormat);
            outputs[5] = g.MeasureString("t", font, point, stringFormat);
            outputs[6] = g.MeasureString("r", font, point, stringFormat);

            total[0] = g.MeasureString("T", font, point, stringFormat);
            total[1] = g.MeasureString("Te", font, point, stringFormat);
            total[2] = g.MeasureString("Tes", font, point, stringFormat);
            total[3] = g.MeasureString("Test", font, point, stringFormat);
            total[4] = g.MeasureString("TestS", font, point, stringFormat);
            total[5] = g.MeasureString("TestSt", font, point, stringFormat);
            total[6] = g.MeasureString("TestStr", font, point, stringFormat);

            stringFormat.FormatFlags = System.Drawing.StringFormatFlags.LineLimit | System.Drawing.StringFormatFlags.NoClip;

            g.DrawString("TestStr", font, System.Drawing.Brushes.Red, new PointF { X = 10, Y = 10 }, stringFormat);
            g.DrawRectangle(new System.Drawing.Pen(System.Drawing.Brushes.Blue, 1.0f), GetOutputPositionX(total,outputs, 0), 10.0f, outputs[0].Width, outputs[0].Height);
            g.DrawRectangle(new System.Drawing.Pen(System.Drawing.Brushes.Blue, 1.0f), GetOutputPositionX(total,outputs, 1), 10.0f, outputs[1].Width, outputs[1].Height);
            g.DrawRectangle(new System.Drawing.Pen(System.Drawing.Brushes.Blue, 1.0f), GetOutputPositionX(total,outputs, 2), 10.0f, outputs[2].Width, outputs[2].Height);
            g.DrawRectangle(new System.Drawing.Pen(System.Drawing.Brushes.Blue, 1.0f), GetOutputPositionX(total,outputs, 3), 10.0f, outputs[3].Width, outputs[3].Height);
            g.DrawRectangle(new System.Drawing.Pen(System.Drawing.Brushes.Blue, 1.0f), GetOutputPositionX(total,outputs, 4), 10.0f, outputs[4].Width, outputs[4].Height);
            g.DrawRectangle(new System.Drawing.Pen(System.Drawing.Brushes.Blue, 1.0f), GetOutputPositionX(total,outputs, 5), 10.0f, outputs[5].Width, outputs[5].Height);
            g.DrawRectangle(new System.Drawing.Pen(System.Drawing.Brushes.Blue, 1.0f), GetOutputPositionX(total,outputs, 6), 10.0f, outputs[6].Width, outputs[6].Height);

            image.Save(@"c:\Temp\bla.png");

        }
        private static float GetOutputPositionX(SizeF[] total, SizeF[] outputs, int p)
        {
            return 10.0f + total[p].Width - outputs[p].Width;
        }

To get the Position exactly, because of these overlapping characters you have to calculate the width of "e" and the total width of "Te".
Plus there is obviously a bug in the MeasureString function. If you call MeasureString without the StringFormatFlags.DirectionRightToLeft the overlap of the characters "Te" is ignored.

redpajama_set_name: RedPajamaStackExchange


text:
ASA Hall of Fame Stadium
USA Softball Hall of Fame Stadium
ASA Hall of Fame Stadium Please selectASA Hall of Fame StadiumUSA Softball Hall of Fame Stadium
2801 NE 50th St, Oklahoma City, OK 73111
ASA Hall of Fame Stadium has been renamed the USA Softball Hall of Fame Stadium
Please visit our USA Softball Hall of Fame Stadium pages for information, show schedules and tickets.


Peconic Pediatrics Gives Back - Peconic Pediatrics is committed to our community and we're proud to give back to charities and organizations that are near and dear to your hearts and ours. Each month we will choose a local non-profit organization to receive our $250 donation.
Is the charity a 501(c)3?


text:
Home > For Students > Course Description and Career Prospects
Course Description and Career Prospects
Ceramic Technology
Information Technology / Information Systems
Health Care Administration / Management
MBA - Finance / Accounting
MBA - International Business
Supply Chain Management / Logistics
"Introduction to Public Health" introduces the many areas of the public health system, and the work in measuring health, disease and illness, and its endeavors to promote population health.
This course provides a history of public health. It offers learners a methodology for understanding populations and population health through multiple disciplines.
It provides an overview of five core disciplines: epidemiology, biostatistics, environmental health, social and behavioral health, and health policy and management. Students analyze contemporary public health issues such as threats to the nation's food supply, health promoting behaviours in the prevention of disease, the burden and distribution of infectious diseases on a global population, public health's role in disaster preparedness and management, and bioterrorism. This engages issues of public health administration and the public health workforce. Students learn about public health nursing and public health education. They explore the role of law and government (local, state, national, and international) in public health and challenging public health policy issues related to spiraling healthcare costs and addressing the aging population. Students examine environmental and occupational health, and they learn about future challenges for public health.
Course Objective:
Module 1: Overview and Basic Principles
Module 2: Epidemiological Principles
Module 3: Population Health
Module 4: Disease and Disabilities: Determinants, Burdens, and Interventions
Module 5: Healthcare and Public Health Systems
Module 6: Emerging Topics in Public Health (One Health; Infectious Disease / Zoonosis; Food Safety, Security, and Defence - Food Chain Security; Public Health Nutrition and Physical Activity)
Module 7: Careers and Future Directions in Public Health
Identify and describe key challenges facing public health workers in the early 21st century
Identify and explain how various occupations, professions, and careers contribute to carrying out public health's core functions and essential services.
Career Prospects:
In a public health job, you'll work to improve the health and quality of life for entire communities-not just individuals. You'll increase awareness of public health and safety issues in order to prevent illnesses and injuries-not just treat them. Public health is a career field that encompasses a wide variety of jobs. So whether you want to track down the causes of disease as an epidemiologist or teach the public how to avoid getting sick as a health educator, there is a public health career that will fit your goals and aspirations.


The Border Security Force (BSF) in a report to the Union Home Ministry has said that Pakistan is trying to strengthen its security deployment along the International Border with India. As per the report, Pakistan has built two ammunition depot in Rahim Yar Khan across Jaisalmer to ensure that its forces receive arms on the border in no time.
As per sources, Pakistan has also built helipads in the premisis of the ammunition depot to further assist its soldiers along the border. The depot is merely 37 kilometres away from the Indian border. In another depot in Bahawalpur, Pakistan has built many bunkers to save their ammunition in case of an attack by the Indian Air Force. The bunkers would also allow Pakistan to place its missiles in close proximity to the border.
From building bunkers to missiles and even warships, China has been assisting Pakistan in mordenising its military. Through the Pakistan-China Fiber Optic Project, China has been setting up 820-kilometre long optical fibre cable between the Khunjerab Pass on the China-Pakistan border and Rawalpindi. The optical fibre being laid as a part of the China-Pakistan Economic Corridor has improved the communication capabilities of the Pakistani Army to a huge extent.
Intelligence reports suggest that Pakistan's ISI has given anti-thermal jackets to terrorists so that they can evade detection by thermal imaging devices installed by India near the LoC and International Border. Security forces are on alert after the intelligence report of terrorists trying to enter India by wearing these jackets.
Indian agencies had received information about such jackets when Pakistani Rangers had violated the ceasefire and fired at the BSF. The action could not be captured by the night devices but when the video footage was minutely observed, it was found that the firing had been from an extremely close range.


text:
Q: What is the best approach of writing redux actions that need data from other actions I have made some research about possible ways to do it, but I can't find one that uses the same architecture like the one in the app I'm working on. For instance, React docs say that we should have a method which makes the HTTP request and then calls actions in different points (when request starts, when response is received, etc). But we have another approach. We use an action which makes the HTTP call and then dispatches the result. To be more precise, my use case is this:
// action to get resource A
getResourceA () {
  return dispatch => {
    const result = await axios.get('someLink');
    dispatch({
      type: GET_RES_A,
      payload: result
    });
  };
}

// another action which needs data from resource A
getSomethingElseByIdFromA (aId) {
  return async dispatch => {
    const result = await axiosClient.get(`someLink/${aId}`);
    dispatch({
      type: GET_SOMETHING_BY_ID_FROM_A,
      payload: result
    });
  };
}

As stated, the second action needs data from the first one.
Now, I know of two ways of doing this:

*

*return the result from the first action

getResourceA () {
  return async dispatch => {
    const result = await axios.get('someLink');
    dispatch({
      type: GET_RES_A,
      payload: result
    });
    return result;
  };
}

// and then, when using it, inside a container
async foo () {
  const {
    // these two props are mapped to the getResourceA and
    // getSomethingElseByIdFromA actions
    dispatchGetResourceA,
    dispatchGetSomethingElseByIdFromA
  } = this.props;

  const aRes = await dispatchGetResourceA();
  // now aRes contains the resource from the server, but it has not
  // passed through the redux store yet. It's raw data
  dispatchGetSomethingElseByIdFromA(aRes.id);
}

However, the project I'm working on right now wants the data to go through the store first - in case it must be modified - and only after that, it can be used. This brought me to the 2nd way of doing things:

*make an "aggregate" service and use the getState method to access the state after the action is completed.

aggregateAction () {
  return await (dispatch, getState) => {
    await dispatch(getResourceA());
    const { aRes } = getState();
    dispatch(getSomethingElseByIdFromA(aRes.id));
  };
}

And afterward simply call this action in the container.
I am wondering if the second way is all right. I feel it's not nice to have things in the redux store just for the sake of accessing them throughout actions. If that's the case, what would be a better approach for this problem?

A: I think having/using an Epic from redux-observable would be the best fit for your use case. It would let the actions go throughout your reducers first (unlike the mentioned above approach) before handling them in the SAME logic. Also using a stream of actions will let you manipulate the data throughout its flow and you will not have to store things unnecessary. Reactive programming and the observable pattern itself has some great advantages when it comes to async operations, a better option then redux-thunk, sagas etc imo.

A: I would take a look at using custom midleware (https://redux.js.org/advanced/middleware).  Using middleware can make this kind of thing easier to achieve.
Something like :
 import {GET_RESOURCE_A, GET_RESOURCE_B, GET_RESOURCE_A_SUCCESS, GET_RESOURCE_A_ERROR  } from '../actions/actionTypes'

    const actionTypes = [GET_RESOURCE_A, GET_RESOURCE_B, GET_RESOURCE_A_SUCCESS, GET_RESOURCE_A_ERROR ]

    export default ({dispatch, getState}) => {

        return next => action => {

            if (!action.type || !actionTypes.includes(action.type)) {

                return next(action)

            }

            if(action.type === GET_RESOURCE_A){
              try{
                // here you can getState() to look at current state object
                // dispatch multiple actions like GET_RESOURCE_B and/ or
                // GET_RESOURCE_A_SUCCESS
                // make other api calls etc....
               // you don't have to keep stuff in global state you don't
               //want to you could have a varaiable here to do it
              }
             catch (e){

              }  dispatch({type:GET_RESOURCE_A_ERROR , payload: 'error'})
            }

        }

    }


text:
Vue 3 Fundamentals Composition API
The "Composition API" Lesson is part of the full, Vue 3 Fundamentals course featured in this preview video. Here's what you'd learn in this lesson:
Ben discusses that composition API, when used with Vue, is vanilla JavaScript and allows custom code organization at the cost of having no default option. A brief overview of the experimental feature Suspense and a demonstration of rendering data from an API is also covered in this segment.
Transcript from the "Composition API" Lesson
>> Alright, we're here, took us a little while, but we're here at composition API. And it's time to talk about the brand new thing that is with view three. The first thing I want to caveat when it comes to the composition API is that even though it was introduced in view three, there actually are ways to use it on view two.
[00:00:14] So that is one of the things that the team has tried to work really hard on is that,even though there are certain performance optimizations and sort of like type Script enhancements that have come with view three. As a whole, when it comes to feature parity, the team has actually worked really hard to try to keep it as basically cross compatible as humanly.
[00:00:31] Be possible because they know, a lot of times people when they're working on enterprise apps, as much as developers would love to be on the cutting edge tool ,the reality is that most of time there's just no time to do that. And so rather than have developers be kind of feeling left out of the fact that they might want to rewrite their components using composition API.
[00:00:49] We basically have plugins that allow you to plug in the composition API interview too. So again, while this is a view three feature, just know that you can use this in view two, you just need to look into the plugin. All right, so, composition API, let's talk about it.
[00:01:04] So remember this lifecycle, diagram that we talked about earlier? Up here, you'll notice in blue, there's a very special lifecycle hook. That's called setup. And so setup has a very special meaning for us in view because why? Anytime you basically see the setup keyword, the lifecycle hook, you're basically ensured that you're using composition API.
[00:01:24] I think that's one reason why the diagram here actually has it in parentheses. This is because as we can see here, prior to the setup function, there is nothing else. So this is what's interesting with the composition API is that it happens before the options API. So what does that really mean?
[00:01:41] So we take a look at our code. I'm not hoping into the playground, so that we can just kind of code some stuff without messing up Scylla view, go into the playground. And then NPM run Dev. Boom, okay, we have a Pokedex ACC app and it's running. Alright, so let's go ahead and see what is going on here.
[00:02:04] For whatever reason, it did not open it. The actual folder,there we go. Okay, so close this,close this, we're in playground right now. If we take a look at our app dot view, you'll notice here that we're running a fetch and we're doing all this stuff inside of created.
[00:02:23] Now, I mentioned that the set of function actually happens before and knit. So actually if you think about asynchronous, they really should be run in the setup function, because that's its earliest point of starting sort of like the component lifecycle. So how that might look is that we, actually would have a setup function that's up here at the top.
[00:02:43] And the reason I think it's important to organize your code this way and putting set up at the top is because everything else below does not exist. And it's useful to kind of think of it this way Is that this is what I'm doing inside of here. Now the thing that makes the composition API particularly unique when it comes to view is that everything inside of here is truly vanilla JavaScript.
[00:03:04] So in other words there's, we can't just go like data, function, return, Pokedex like all this stuff is gone because why,composition API is about I guess some call it freedom and flexibility. One of the advantages of options API is that, it provides a very consistent way for you to add stuff.
[00:03:24] Here's where my data goes, here's where my methods go, here's where my computer properties go. But over time, as people have scaled their applications and components, there are times where people found that they wanted to actually group things according to their concerns. And maybe find ways to organize their codes in different ways.
[00:03:38] The composition API lets you do that. But what that means though, is that it's a free for all in that you have to organize everything yourself. So in the instance of setup, let's have a reactive named variable, in this case for the region of Pokemon that this is tracking.
[00:03:54] So the first thing is to remember this is vanilla JavaScript so we actually have to declare the variables manually now. So, const, region name equals kanto, great. Now here's the thing though, when we actually look at this. So, let's look inside the Dev tools, and look at our app.
[00:04:15] We'll see here that nothing exist right now, only the Pokedex is showing up. And the reason for that is because once you're inside of setup view, is not doing any magic for you, you have to actually start being very explicit about what's happening. So the thing about the composition API is that inside of here, view is not doing any magic for you.
[00:04:34] So unlike when we're inside the data and methods where you can just call this context and it knows to like this. That Pokedex knows to go inside of data to go get the Pokedex, like, inside of here, everything is like, okay, you want the freedom here's freedom. And so what does that mean?
[00:04:49] That means that at the end of setup, we actually have to manually return anything we want to expose. And at first, that might sound a little bit redundant, right? You're like, wait, why would I want to do that? Well, because what you'll see now inside the Dev tools is that, check it out, the region name is appearing.
[00:05:05] And the reason for that is because when you're writing the JavaScript up here, you probably don't want everything being exposed to your component. There are times certain things might be called private, and there are things where you're running calculations that aren't relevant to the template and to the rest of the component.
[00:05:18] And so that you can keep all up here. And what you're doing here is that you're returning it. And so when you return it now it's actually something that you can actually access. So let's say inside of this created method, now it can be like log, this dot region name.
[00:05:35] And so we'll see now inside of here, there you go. The created lifecycle hook now has access to the data that we set up inside of setup. Didn't mean to do that, but that's how it worked out, okay. So the question here is, I want the ability to run an async function at this point, right?
[00:05:55] And so your first instinct might be like, well, okay, this makes sense. What we're gonna do here is we're gonna create a, Const of Pokedex, and we'll just copy over this await function and then we'll just make sure that setup is async because this isn't a await. And then we'll return the Pokedex here and let's keep that actually alphabetical.
[00:06:21] And then since we're returning it anyways, you don't need to define the data twice, so there we go. And then we actually don't even need this method anymore, right? Cause we've just refactored it. And then, we're running this inside of here. So actually now that I think about it, we could just say, we just need to delete this and then ideally we could then just say this dot Pokedex.
[00:06:45] So we just see the region name and the Pokedex show up but you're gonna see view yelling at you in a pretty big way. And I wanted to show this error because most of the time this is not gonna be something you run into but especially when you're getting started and you see this error it's probably gonna be a bit confusing.
[00:07:02] Because you're gonna look at this and if we read it, it says that set a function returned a promise, but no suspense boundary has been defined and that's a lot of words, right? You're like what the heck is going on? Well, so just to let what is suspense?
[00:07:15] So we look inside of the docks. Suspense is another built in component that is experimental currently with view. And the idea behind this is that, it's trying to help us better offload performance when it comes to asynchronous option. So in the sense of like when you're loading something asynchronously, you can have a fallback.
[00:07:33] So the way that code works as you can see here, is that you can see here, so you would drop in your suspense component. And okay, this is my dashboard that I'm loading a bunch of async stuff happening, but in case that fails, or frankly, it's not ready for me yet, I'm gonna go ahead and fall back to this template.
[00:07:54] This syntax should look familiar to you, because earlier, we talked about slots. And so here's that V slot fallback. And this is already defined on the suspense component. And so what you'll end up seeing on the pages you'll see loading first, and whenever it's ready, view will automatically switch it over to the dashboard.
[00:08:13] And so this is actually really useful. But the key thing here though, to understand though especially at this point in the recording, is that it is experimental. So this is why at this moment we're not gonna go into depth regarding how to use it and that kind of thing.
[00:08:24] Keep an eye on the dock if you wanna play around with it, but know that this will probably be a pretty key part of a lot of framework approaches going forward. As a lot of frameworks are trying to figure out better ways of server-side rendering different things, and how to improve performance when it comes to loading JavaScript on a page and so forth.
[00:08:42] Now, when it comes to our error though, the reason this is a problem at this particular point in time is because if we think about it from the tree itself, the app dot view is the root component of everything. So you can really suspend your root component in a state of nothingness, that does not work.
[00:09:03] And so what you actually have to do is that, in the case that you really do need to do asynchronous operations in composition API. This is where you need to put it into a component, because the app dot view basically needs to be in a stable state. That's like, Okay, I know where everything is and then this component over here is going to do some stuff.
[00:09:17] I'm gonna hang on to it and give it a backup. And then I can do other stuff over here. But we spend app dot view the whole thing, basically, because of how asynchronous operations work, it just runs the risk of corrupting it right? So this is why we don't run async setup at the root level at app View.
[00:09:33] So to show how this works then is, we're gonna go ahead and create a component called Pokedex. And this is where we're gonna go ahead and then we'll have our script tag and we'll have our template, if it would auto complete sometime Emette is uncooperative with me. Okay, great.
[00:09:54] So let's go ahead and blow this up into two columns, so that's easier to follow. We'll go ahead and bring over this asynchronous request right here. Actually, we can bring over the whole script blog. What am I talking about? Bring over the whole thing, which is great. And then this means that this script block is actually no longer needed on this app.
[00:10:15] Otherwise we do need a script block because why, we need to import our Pokedex. So Pokedex from components Pokedex Dot View, and then we can register it on the components. And then we have Pokedex like that.
>> We've got a case mix-up in the--
>> We have a case mix-up?
[00:10:38] With you, I did that again. Thank you for catching that. This is sometimes the trouble with the context switch. Okay, so inside of here, we'll have our template here for the pre-fetch. We don't even need this anymore, this button. So all this is gonna do is render that as a pre block and mean we can take this here and then we get the Pokedex like this okay.
[00:11:01] So let's take a look and see if this worked out the way we wanted it to, okay. So, first thing first, we'll see that when we're taking a look at this right now, it's still yelling at us, but we actually are seeing something rendered unlike before. And it's because in this particular case, it's true we still need to actually suspense Component at this point.
[00:11:23] And so like I said, we're just going to cover a high level uses of it. We're not going to dive deep into suspense as a component. Because again, if we think about it from a view perspective is that view, is saying, I don't know what to do with this yet.
[00:11:34] So please give me some sort of fallback so that in case this thing completely crashes, we don't have this hanging component that's not going to do anything. So we bring in our suspense component. And we say, Okay, this is what I want you to render. But in case things don't work, here's the fallback where we say loading Pokedex data, just like that.
[00:11:57] Suspense, suspense, suspense ,bom bom. Yes, I already know that, okay. So why? Let's restart the server real quick, just to make sure that's not anything weird getting botched.
>> You don't have to import suspense?
>> No import, It's kind of like the global component. It's just a global component that's registered.
[00:12:22] Now What's weird? I forgot, yeah. Okay, so inside of here you're thinking I did the suspense right, right? I did it inside of my component because I gave it a fallback. But this approach doesn't work because if we think about it another way, it's happening at the child level.
[00:12:40] And if we look at the error messages again, it actually says that the suspense boundary needs to be found at the parent tree. Because if you think about it another way, remember how we used to do the VF? This is the same kinda concept where you want the VF actually happening at the top for something like suspense, because it knows what to handle.
[00:12:56] So, if I go ahead and delete this stuff again,this time we can actually say we'll have a suspense component here. That will then render out the Pokedex component when it's ready otherwise fallback to this text that's actually what's happening here. And once we do that, now everything is working as expected.
[00:13:16] So again the API for suspense is experimental but this mental model now of having the ability to suspend your component and then have it switch out with some sort of fallback is something that is going to be more popular with frameworks, not just view. And so something that I wanted you all to keep in mind when it came to that.


text:
Q: Error when checking input: expected lstm_1_input to have 3 dimensions I have an x_test data:
x_test.shape
Out[11]: (13096, 30)

x_test.size
Out[16]: 392880

When I launch the prediction it return an error:
ValueError: Error when checking input: expected lstm_1_input to have 3 dimensions, but got array with shape (13096, 30)
My code is very simple, I'm trying to run the predict function:
test_df= pd.read_csv("Path_data")
model = load_model.("path_model")
Xnew = np.array(test_df)

# make a prediction

predictions = model.predict_classes(Xnew)

Model summary:
Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #
=================================================================
lstm_1 (LSTM)                (None, 50, 100)           50400
_________________________________________________________________
dropout_1 (Dropout)          (None, 50, 100)           0
_________________________________________________________________
lstm_2 (LSTM)                (None, 50)                30200
_________________________________________________________________
dropout_2 (Dropout)          (None, 50)                0
_________________________________________________________________
dense_1 (Dense)              (None, 1)                 51
=================================================================
Total params: 80,651
Trainable params: 80,651
Non-trainable params: 0

Someone please can tell me how can I resolve this issue ?
Thank you

A: Your variable x_test should have the input dimensions required by the LSTM layer which is a 3D tensor with shape [batch, timesteps, feature]

A: This is dimension mismatch, the model expect to have a data record itself as an array of arrays, ie, if you have an image i, it expects, np.array([i]), Try :
x_train = np.array([ [i] for i in x_train])

This will increment the dimension by 1


The PIEPS iPROBE Carbon is an avalanche probe with integrated digital technology. It provides a hit and proximity reading for every standard beacon transmitter and enables a brief deactivation of the detected transmitter (for transceivers with iPROBE support).
So PIEPS provides the first truly 100% perfect safety solution for multiple avalanche burials!


text:
import { expect } from "chai";
import * as fs from "fs";
import "mocha";
import * as path from "path";

import { Gls } from "../lib/Gls";
import { LanguagesBag } from "../lib/Languages/LanguagesBag";

/**
 * Test runner for comparing converted .gls files and expected output.
 */
export class ComparisonTestsRunner {
    /**
     * Friendly directory path to read tests under.
     */
    private section: string;

    /**
     * Command groups to run, if not all.
     */
    private commandsToRun?: Set<string>;

    /**
     * Disk root path for the section.
     */
    private rootPath: string;

    /**
     * Command tests to be run within the section.
     */
    private commandTests: Map<string, string[]>;

    /**
     * Initializes a new instance of the ComparisonTestsRunner class.
     *
     * @param section   Friendly directory path to read tests under.
     * @param commandsToRun   Command groups to run, if not all.
     */
    public constructor(section: string, commandsToRun?: Set<string>) {
        this.section = section;
        this.commandsToRun = commandsToRun;
        this.rootPath = path.resolve(section);
        this.commandTests = this.readTestsUnderPath(this.rootPath, this.commandsToRun);
    }

    /**
     * Runs tests under the directory path.
     */
    public run(): void {
        describe(this.section, () => {
            this.commandTests.forEach((tests: string[], command: string): void => {
                describe(command, () => this.runCommandTests(command, tests));
            });
        });
    }

    /**
     * Runs command tests for the given command.
     *
     * @param command   Name of the command to test.
     * @param tests   Tests under the command
     */
    public runCommandTests(command: string, tests: string[]): void {
        const languagesBag = new LanguagesBag();

        for (const test of tests) {
            describe(test, () => {
                for (const language of languagesBag.getLanguageNames()) {
                    it(language, () => this.runCommandTest(command, test, language));
                }
            });
        }
    }

    /**
     * Runs a test for a single command in a language.
     *
     * @param command   A GLS command to be tested, such as "ArrayInitialize".
     * @param test   A test to be run for the command, such as "no values".
     * @param language   The language the test is running as.
     */
    public runCommandTest(command: string, test: string, language: string): void {
        const gls = new Gls().setLanguage(language);
        const extension = gls.getLanguage().properties.general.extension;

        const source = this.readCommandFile(command, test + ".gls");
        const expected = this.readCommandFile(command, test + extension);

        expect(gls.convert(source)).to.be.deep.equal(expected);
    }

    /**
     * Retrieves, for each command in a directory, tests under that command.
     *
     * @param rootPath   An absolute path to a command's tests folder.
     * @param commandsToRun   Command groups to run, if not all.
     * @returns Tests for each command in a directory.
     */
    private readTestsUnderPath(rootPath: string, commandsToRun?: Set<string>): Map<string, string[]> {
        const tests = new Map<string, string[]>();
        let childrenNames = fs.readdirSync(rootPath);

        if (commandsToRun && commandsToRun.size > 0) {
            childrenNames = childrenNames.filter(child => commandsToRun.has(child.toLowerCase()));
        }

        for (const childName of childrenNames) {
            tests.set(
                childName,
                fs.readdirSync(path.resolve(rootPath, childName))
                    .filter(testFileName => testFileName.indexOf(".gls") !== -1)
                    .map(testFileName => testFileName.substring(0, testFileName.indexOf(".gls"))));
        }

        return tests;
    }

    /**
     * Reads the code contents of a test file.
     *
     * @param command   The command this file is under.
     * @param name   The name of the file.
     * @returns   Lines of code in the file.
     */
    private readCommandFile(command: string, name: string): string[] {
        const filePath = path.resolve(this.rootPath, command, name);
        const lines = fs.readFileSync(filePath).toString().replace(/\r/g, "").split("\n");

        return lines.slice(lines.indexOf("-") + 1, lines.lastIndexOf("-"));
    }
}


text:
Q: Why "Error: Subreport could not be shown" for some reports and not others? I'm using VS2010 and the built-in visual Report Designer to create RDLC templates for rendering reports with sub-reports as PDF files in an ASP.NET application using a ReportViewer control and the .LocalReport member. The code iterates over a set of records, producing one report (with its sub-reports) for each record.
I noticed recently that for a small number of the reports, one of the sub-reports was failing and giving the "Error: Subreport could not be shown" message. What's puzzling me about this case, in contrast to the many posts about this error that I've read (and previous times I've wrestled with it myself), is that it is only occurring for a subset of cases; from what I've seen elsewhere, the problem is usually all-or-nothing -- this error always appears until a solution is found, then this error never appears.
So... what could cause this error for only a subset of records? I can run the offending sub-report directly without errors; I can open the .xsd file and preview the DataSet for the offending records without errors; I can run the query behind the DataSet in SQL Server Mgt Studio without errors... I'm not sure where else to look for the cause(s) of this problem which only appears when I run the report-with-subreports?

A: I tracked this down to an out-of-date .xsd file (DataSet) -- somewhere along the way a table column string width was increased, but the DataSet was not updated or regenerated, so it still had the old width limit on that element, e.g., <xs:maxLength value="50" /> in the .xsd XML instead of the new width of 125 characters. The error was being thrown for those cases where at least one record in the subreport had a data value (string) in that column that exceeded the old width of 50.
An important clue came from adding a handler for the DataSet's .Selected event; I was already using the .Selecting event to set the sub-report's parameter (to tie it to the parent record), but I couldn't see anything useful when breaking in that event. However, examining the event args variable in the .Selected event, after the selection should have occurred, I found an Exception ("Exception has been thrown by the target of an invocation") with an InnerException ("Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints"). There was also a stack trace which indicated the point of failure was executing Adapter.Fill(dataTable).
While this turned out to be pretty misleading -- I had no such constraints in place on the tables involved in the query behind the DataSet -- it at least got me focusing on the specific records in the subreports. After much fruitless searching for anomalies in the subreport record data SQL Server Mgt Studio, I eventually started removing the records one-by-one from one of the offending subreport cases, re-running the report each time to see if I had fixed the error. Eventually I removed a subreport record and the report worked -- the remaining subreport records appeared!
Now I had a specific sub-report record to examine more closely. By chance (wish I could call it inspired intuition...), I decided to edit that record in the web app instead of looking at it as I had been in SQL Server. One of the fields was flagged with an alert saying the string value was too long! That was a mystery to me for a moment: if the string value was too long, how could it already be saved in the database?! I double-checked the column definition in the table, and found it was longer than what the web-app front-end was trying to enforce. I then realized that the column had been expanded without updating the app UI, and I suspected immediately that the .xsd file also had not been updated... Bingo!
There are probably a number of morals to this story, and it leaves me with a familiar and unwelcome feeling that I'm not doing some things as intelligently as I ought. One moral: always update (or better and usually simpler, just re-build) your .xsd DataSet files whenever you change a query or table that its based on... easier said than remembered, however. The queasy feeling I have is that there must be some way that I haven't figured out to avoid building brittle apps where a column width that's defined in the database is also separately coded into the UI and/or code-behind to provide user feedback and/or do data validation... suggestions on how to manage that more robustly are welcome!