text:
Agosto 23, 2016	| Marcello Vai	| UK
The county of Northamptonshire, England, has long been renowned for its boots and shoe making; the village of Wollaston just outside of Wellingborough is no exception. Until the latter part of the 19th century, shoes and boots were normally made in homes by individual shoemakers, who were paid only for the work they had ready when the collector came with his barrow to the door. Remuneration was poor and there was little security of employment.
In an attempt to impose some regularity of income, in 1881 five men living in Wollaston banded together to form a co-operative (a company owned and run by the people working in it), called the Northamptonshire Productive Society (NPS). Their premises were based in a dove house located in Thrift Street, Wollaston, and NPS was locally referred to as 'the Duffers'. Luck was with them from the outset as they managed to secure an order for army boots from the Government, an order which would sustain them for the first year.
As industrialisation spread in England during the late nineteenth Century, demand in England and abroad for high-quality boots steadily increased. Accordingly, NPS enjoyed rapid growth and by the turn of the previous century NPS had grown to 80 employees. Consequently, NPS moved to a larger purpose-built factory on South Street, which although modified and expanded, they occupy to this day.
Footwear has been made at NPS with various different construction methods, including riveted and stitched, stuck-on, vulcanised and more recently Goodyear welted which is now used in all our shoe production. In the 1950's Austrian Dr. Maerten (subsequently anglicised to Dr. Marten) and his associate Mr Funck developed a now famous air cushion sole. R. Griggs Group Ltd., who owned the rights to manufacture footwear with this technology, sought out the best local factories to manufacture footwear using this sole. NPS was an obvious choice and in 1959 the first English pair of sample boots with air-cushioned soles was welted in the NPS factory. For 35 years NPS produced Solovair (Sole-of-Air) boots and shoes under license, which were sold under the name "Dr Martens by Solovair".
Times change and NPS no longer produces boots and shoes under license, but we have maintained our independence and high-quality standards. NPS patented the name Solovair in 1995 and our latest range of footwear not only maintains our original manufacturing quality, but our products have been enhanced with a new 'Soft Suspension' sole that improves the comfort and durability.
The famous production standards of NPS has secured Solovair a reputation with retailers and discerning customers, as a premium soft suspension product. Rather than have a continuous production line, which we believe offers the operative no time to notice and correct any errors, NPS is organised in areas according to distinct stages of production. Each pair is only passed from one area to another when the respective operative is satisfied they are ready. In this respect, there is a far slimmer chance that an unsatisfactory shoe or boot will result at the end of the production process. In effect it is a continuous quality control process not employed by many other factories.
NPS continue to remain true to their ideals, combining over 130 years of tradition, the latest technology and materials, in order to produce the best quality shoes and boots. To maintain this undisputed quality, our products will always be hand-made from start ('clicking') to 'finishing' in the UK.


We're excited that you have an opinion about the name Julia. To rate names on Nameberry, please register for an account or log in to an existing account.
Would you like to follow Julia?
You will receive an email (no more than once per day) summarizing any new mentions of Julia on Nameberry. Would you like to follow Julia?
The name Julia is a girl's name of Latin origin meaning "youthful". Julia is ranked #93 on our popularity charts and is often added to lists like Bible Names for Girls and discussed in our forums with posts like "Pick 5 (GIRLS)".
An enduring classic, Julia has a lot going for it: ancient roots but a modern, fashionable feel, simplicity and sophistication, and connections to both saints and celebs, including actress Julia Roberts and Saint Julia of Corsica. The elegant Julia's one of the least problematic choices a parent could make.
Julia was an ancient Roman imperial name given to females in the house of a Julius, as in Caesar. Julia is also Shakespearean, Dickensian, Orwellian, and Harry Potter-related. The ground-breaking 1960s TV show Julia was the first to feature a non-stereotypical African American woman. Celebrity chef Julia Childs is a notable namesake.
Julia has been in the US Top 150 since Social Security records have been kept and is currently the only girls' name starting with J in the US Top 100. She's even more popular internationally, and is highly popular in the Netherlands in Spain, and in Germany, Belgium, France, Norway, and Sweden.
If you think Julia is too simple, you might want to move to Juliet, Juliette, or Juliana, or even the Italian Giulia. Sixties short form Julie has segued from cute to middle-aged. Jules is much more current.
Find other names based on Julia using our baby name generator.
Julia Baskin, American co-author of "The Notebook Girls"
Julia, character in Shakespeare's "The Two Gentlemen of Verona"
Julia, character in George Orwell's "1984"
Julia McNamara, character on TV's "Nip/Tuck"
Julia Cobb, a character on TV's "Cougar Town"
Julia Braverman, character on TV's "Parenthood"
Julia Romano, character in Jodi Picoult's "My Sister's Keeper"
Julia Salinger, character on TV's "Party of Five"
Julia Sugarbaker, character on TV's "Designing Women"
Julia, character in movie "Heart and Souls"
Julia Wilcox, character on TV's "Frasier"
Julia Mendes, character on German soap "Verboten Liebe"
Julia Shumway, main character in the TV show "Under The Dome" based on the Stephen King novel of the same name.
Julia Wicker, character in "The Magicians"
Julia, Muppet with autism on TV's "Sesame Street"
Julia Rusakova Harper, character in film "Oblivion"
Julia Wiles, a character from the Nickelodeon cartoon "Welcome To The Wayne"
Julia, Spike's mysterious old flame in anime "Cowboy Bebop"
Julia Sasaki, character on Netflix's "Atypical"
Julia, character in Shakespeare's "The Two Gentlemen of Verona" Julia, character in George Orwell's "1984" Julia McNamara, character on TV's "Nip/Tuck" Julia Cobb, a character on TV's "Cougar Town" Julia Braverman, character on TV's "Parenthood" Julia Mannering, character in "Guy Mannering" by Sir Walter Scott Julia Romano, character in Jodi Picoult's "My Sister's Keeper" Julia Salinger, character on TV's "Party of Five" Julia Sugarbaker, character on TV's "Designing Women" Julia, character in movie "Heart and Souls" Julia Wilcox, character on TV's "Frasier" Julia Myers, character in Jessica Burkhart's Canterwood Crest series Julia Mendes, character on German soap "Verboten Liebe" Julia, character in manga/anime, 'Rave Master' Julia Jason Andelius, character in "The dung-beetle flies at dusk" by Maria Gripe Julia, character in G. A. Henty's, The Young Carthaginian Julia Shumway, main character in the TV show "Under The Dome" based on the Stephen King novel of the same name. Julia Ingledew, character in Jenny Nimmo's "The Children of the Red King" series Julia Wicker, character in "The Magicians" Julia Grace Poldark, daughter of Ross and Demelza Poldark in the TV show ' Julia, Muppet with autism on TV's "Sesame Street" Julia Rusakova Harper, character in film "Oblivion" "Julie & Julia," memoir by Julie Powell and 2009 movie about Julia Child "Julia," 1977 movie and main character "Julia," 2008 French movie and main character "Julia," song by The Beatles inspired by Julia Lennon Julia Wiles, a character from the Nickelodeon cartoon "Welcome To The Wayne" Julia, Spike's mysterious old flame in anime "Cowboy Bebop" Julia Sasaki, character on Netflix's "Atypical"
My sister is named this. She's adopted from Poland and so it's pronounced Yool-ee-uh or Yool-ah. Her nickname w/ the Polish pronounciation is Julka. In English, we call her Juju, JJ (for Just Julia since she didn't want a nn for a while), Jules, and Jules McFools, christened by our childhood neighbor playfully.
I LOVE this name. There is something so spunky about it! I think it ages beautifully. Classic but not too old. I would use the nicknames Julie or Lia.
I love Julia, it's gorgeous, classic and sounds nice in every language. You can't go wrong with Julia.
So dignified and elegant! I can't wait to use it for my future daughter.
This is my name (also my great, great grandmothers).
I don't like it for me, but it's very pretty. I often get compliments on it. I didn't know very many other Julias growing up, however, at work there is a Yulia, a Yuliana, and when I started, I was the second Julia. I meet a lot of Julies and Julias as a cashier. Before I decided against having children, I was going to name a son Julian (after my great, great, grandfather. He and great, great grandma Julia had the CUTEST names together, and honestly, I'd totes marry a Julian for the name matching). I actually within the past couple years met a (now) really good friend with a small Julian who is super sweet.
Nicknames I've had over the years are Jula (pronounced Joo-Lah), Julz (like Jewels), and Juju (I share this nickname with my friend's Julian). My grandpa calls me Julie, but only he is allowed. xD I feel like Juli is a way cute spelling variation of Julie as a nickname, but I've spent my life telling me not to call me Julie, I can't start saying "Call me Juli without the E."
Love, Love, Love this name! Julia is one of my favorites. It has much charm, beauty and elegance.
I think it's timeless, and a name that I can imagine on someone of any age.
I love Julia and Julie. They are both beautiful and classic, and their simplicity makes them better choices, in my opinion, than Juliet, Juliette, Julianne, etc, although they're all lovely names.
I am a Julia and I love my name. When I was little, I thought the other girls in my class had "cooler" names than me, but now that I'm older I think my name is classic and elegant. I'm a history buff and I love that my name has ancient roots!
I read on multiple websites that Julia means joung one with facial hair..
I currently teach 6 girls named Julia in middle school! Never realized it was so popular!
I don't think this is that common anymore. I've only met two little girls named Julia.
I'm warming up to this name, for the longest time it screamed old woman to me but it's very pretty.
I've always adored this name! I think Julie or Lia as a nickname would be nice.
Always had a WASPy sound to it in my opinion but I've grown to think it's a beautiful name.
Such a lovely name--strong with just the right amount of sparkle. It sounds vibrant, buoyant, just like its meaning.
I know someonme with this name.


When you choose McKee Professional Painting you get more than a painting contractor you get a team of qualified professionals whose driving goal is to provide you with the quality you deserve and expect. Our attention to detail and quality workmanship is what sets McKee Professional Painting apart from the competition. We use the highest quality materials available for our customers. When you choose Mckee Professional Painting you can be assured your project will be our main concern from start to finish. We are passionate about our work and take pride in your project.
I hired Mckee Painting years ago on my first home remodel—– excellent quality work is what I have to say. Cort is very professional and so are his employees. Highly recommend for any painting need or staining or furniture refinish.
They have done projects inside and outside our house. Highly recommend these guys for quality, professional and work done in a timely manner! From our inside walls to our deck refinished, great work!
CORT and his crew are nothing but professional. We had high cathedral ceilings to paint and lots of repairs. The job was spectacular. They clean up like they were never there. They will be back for my next big job. Thank you.
Make Your Home Look Ten Years Younger.


We understand tyres. We should do, we've been around for over 30 years with three tyre depots conveniently located in Sheffield - all offering our renowned drive in – drive out fitting service.
We are also the home of the 'easy tyre quote'. Simply choose your nearest branch – insert your registration number in the yellow box on the right and click 'search' and we'll automatically find you the best tyre at the best price.
Or search by tyre size – just click on 'shop by tyre size' box. And if you can't find exactly what you want give us a call. You'll find our branch telephone numbers at the top of your screen.
Book on line and pay after fitting – how easy is that?
We stock all leading brands to fit all types of vehicles, including vans, light commercials, high performance and 4x4's as well as family cars and bikes. We also offer wheel balancing and tracking, puncture repairs and alignment checks using the latest laser tracking equipment.


Four Paws Pooper Scooper - Small Spade Set. $23.99.
Great for scooping up animal waste around the yard. This spade set is extremely durable and made with a stainless steel collection base that won't rust. Base measures: 6" x 6.5"
The tray of the scooper will arrive unattached.
To attach the tray, simply insert the metal end of the handle into the tray, and secure it with the included Philips head screw.
Four Paws Pooper Scooper - Large Spade Set also available.


fit in with the crowd?
You follow after. Instead you should lead.
How many are there? Where is your place in this world?
I was just placed in this world.
You look at me in the eye with judgment.
I am shamed for not being the same.
What is it that you seek after?
If you see haveing eyes, haveing sight yet you can not see.
You follow a path in to darkness led by no light.
You hide in clothes made from whool. A wolf in a cotton coat.
Your mask will slip someday, when your eyes are closed, when it does let the sun seep in.
So true, very true. The world is full of wolves.
Great work I found it quite profound.


text:
Cambs Times > Things to do
Wisbech's newest theatre plays host to The Rat Pack tribute show
Elaine King
Published: 11:47 AM May 5, 2013 Updated: 9:30 PM October 31, 2020
The Rat Pack is Back - Credit: Archant
DIRECT from London's Leicester Square Theatre, The Rat Pack is Back is to be performed at Wisbech's newest entertainment venue, The Act Theatre, later this month.
Based at the Thomas Clarkson Academy, the 452-seat theatre will host David Alacey's Rat Pack tribute on Saturday May 18, starting at 7.30pm.
Applauded by audiences around the world, the show is Britain's longest running tribute to Frank Sinatra, Dean Martin and Sammy Davis Junior.
The tribute show not only perfectly captures the wonderful music and comedy of the original legends, but also the remarkable personalities of the Hollywood stars.
Featuring classic songs such as My Way, Amore and Mr Bojangles The Rat Pack stars David Alacey as Frank Sinatra, former Eastenders star Des Colemen as Sammy Davis Jr, and Paul Drakely as Dean Martin.
Tickets cost £15, and £12 concessions. To book call 01945 474447 or online at www.act-theatre.co.uk

redpajama_set_name: RedPajamaCommonCrawl


The TrikleTrade Foundation challenged members to share stories, video, and pictures of what they were grateful for over the Thanksgiving Holiday. In return, the Foundation paid forward care packages to the Covenant House in Michigan.
To see what TrikleTrade members were grateful for click here.


text:
November 29, 2018 Nelson Ruiz No Comments
The Eco-Friendly Bacteria That Live Within Termite Mounds Absorb The Harmful Methane Gases Produced By The Insects
Climate change is widely understood to be driven by the air pollution that results from burning fossil fuels. While fossil fuel emissions account for most forms of air pollution, there also exists several natural sources of air pollution. For example, cattle are well known for contributing to climate change by releasing digestive gas that is rich in methane. Methane is a greenhouse gas that is 30 times more potent than carbon dioxide. Surprisingly, termites emit far more methane into the atmosphere than cows. This is due, in part, to termite abundance, but the unique wood-digesting bacteria in termite guts is the primary reason for the relatively methane-rich digestive gas emitted by the insects. Experts estimate that termites are responsible for 1 to 3 percent of all methane emissions. This seemingly insignificant amount actually equals 20 million tons of methane. However, the amount of methane emitted by termites may be less significant than previously thought, as researchers have recently learned that termite nesting mounds contain bacterial microorganisms that absorb the methane gas released by termites.
Considering that mounds contain entire colonies that are composed of thousands of individual termites, methane emissions are particularly thick and concentrated around mounds. Since mounds are methane hotspots, Dr. Philipp Nauer from the School of Ecosystem and Forest Sciences at the University of Melbourne measured methane emissions within mounds to gain a more accurate idea of how much methane is released into the atmosphere.
Dr. Nauer did not expect to discover methane-consuming bacteria within termite mound-soil. This group of soil bacteria are known as methanotrophs, and they consume methane gas as their primary energy source. The researchers measured the amount of methane consumed by methanotrophs in 29 mounds from 3 termite species. It turns out that 50 percent of the methane released by termites within a mound is consumed by the bacteria. The methods Dr. Nauer developed for measuring the amount of gas that is released by termite mounds, and the amount of gas consumed by methanotrophs within mounds can also be used to measure termite population size within each mound.
Do you think that some forms of termite activity could be environmentally harmful despite the fact that termites are an ecologically essential insect species?
Gilbert Termite Control, Mesa Termite Control, Phoenix Termite Control, Termite Control	Gilbert Termite Control, Phoenix Termite Control
Residents From 48 States Sent Brown Recluse Spiders To A Researcher Who Claimed That Their Habitat Is Limited To Only A Few States
Brown recluse spiders are among the most well known of all arachnids, which is understandable considering the deadly reputation that the spiders have generated during the past several decades. The brown recluse group of spiders started to become well known in America during the late 1950s when the first medical reports describing this spider's potentially deadly bite became available to the public. These early medical reports, as well as several subsequent reports, described how brown recluse bites can sometimes lead to necrotizing infections at the site of the bite wound. Although many Americans have heard of brown recluse spiders, very few are able to recognize them. A study in the Journal of Entomology clearly demonstrated that a vast majority of Americans are convinced that they know what brown recluse spiders look like, despite identifying the wrong spiders as brown recluses. For one thing, brown recluse spiders are only endemic within a handful of American states. Despite this fact, residents of 48 states sent the author of the study brown recluse specimens in order to prove that they can accurately identify the spiders within their home state. Consequently, the researcher received spider specimens that were not brown recluses, and many of the specimens did not even resemble the notorious spiders.
Considering the numerous studies that have been published on brown recluse spiders in America, researchers are certain that this spider's distribution only lies within the southernmost states as well as a few midwestern states. Although the study's author claimed that brown recluse spiders do not exist within states located in America's northern, northeastern or northwestern territories, residents of all the states located within these regions attempted to prove him wrong by sending their own captured brown recluse specimens. Of course, the participants sent the wrong spiders, but this was a part of the study.
The researcher challenged Americans in each state to locate and submit brown recluse specimens that they had captured. The lead researcher did this in order to determine if any brown recluse species migrated to any new states. Based on the submissions, the answer to this question was "no." The second question that the study's lead researcher was attempting to answer was where the brown recluse is perceived to exist by the American public, and the answer to this question is "everywhere." Despite the fear many americans have toward brown recluse spiders, it turns out that Americans are surprisingly ignorant of the brown recluse spiders' distribution and appearance.
Do you think that you would be able to accurately identify a brown recluse species?
Gilbert Spider Control, Mesa Spider Control, Phoenix Spider Control, Queen Creek Spider Control, Spider Control, Tempe Spider Control	Gilbert Spider Control, Phoenix Spider Control, Spider Control Gilbert
Researchers Discover Three New Scorpion Species That Make "Hissing" Sounds To Scare Away Predators
During the summer of 2017, a group of researchers discovered three new species of club-tailed scorpions in South America and the Caribbean. Two of these new species, Ischnotelson peruassu and Physoctonus striatus, were discovered in Brazil, and the third, Rhopalurus ochoai, was found in Venezuela. All club-tailed scorpions, including the three newly discovered species, are notable for having large bodies, striking colors and the ability to intimidate enemies by making a "hissing" sound.
The three new scorpion species were described in a recent study authored by Lauren Esposito, curator of archaeology at the California Academy of Sciences in San Francisco. Considering the rapid rate of deforestation and other environmental issues affecting arthropod habitats in South America and the Caribbean, Esposito is determined to protect club-tailed scorpions from further population declines. Finding the three new species was not easy, as Esposito and her colleagues had to search for club-tailed specimens at night with the assistance of ultraviolet lights. Club-tailed scorpions, like the vast majority of scorpion species, are active at night, which is why the team used UV lights to track the creatures down. When scorpions are exposed to UV light, their exoskeletons produce a bright blue-green glow. The research team spent weeks looking beneath rocks, within caves and near rivers for new bush-tailed species. GPS coordinates marked every location where new specimens were discovered, which allowed the researchers to trace the specimens back to their home environment.
Although most bush-tailed scorpion species are rarely encountered in the wild, they are, nevertheless, well known for their disturbing ability to "hiss" at their enemies. It is important to note that bush-tailed scorpions do not produce this hissing sound in the same way that Madagascar hissing cockroaches produce their signature hissing sounds. Rather than emitting sounds by releasing air through spiracles, bush-tailed scorpions produce hissing sounds in a manner similar to how crickets and cicadas produce their signature sounds. Bush-tailed scorpions rub specialized body parts together in order to produce an audible hiss, which sounds quite similar to the hiss produced by Madagascar hissing cockroaches. The scorpion species that is most well-known for producing a hissing sound is the Opistophthalmus glabrifrons species. This species is more commonly known as the shiny burrowing scorpion or the yellow-legged creeping scorpion, and they dwell within several African countries.
Have you ever heard an arachnid produce an audible sound of any kind?
Gilbert Scorpion Control, Mesa Scorpion Control, Phoenix Scorpion Control, Queen creek Scorpion Control, Scorpion Control	Gilbert Scorpion Control, Mesa Scorpion Control, Phoenix Scorpion Control, Scorpion Control
Researchers Found 650 Bee Species In A National Park Monument
When it comes to bees, honey bees get all of the attention. Humans have been raising honey bees for thousands of years, and many people wrongly assume that honey bees are the only types of bees that pollinate flowers and much of the world's crops. However, scientists have documented more than 20,000 bee species, and only a few of these species produce honey, and some do not even possess stingers. North America alone is home to 4,000 bee species and most of these species dwell within relatively dry climates. Since bee populations are decreasing dramatically, researchers are frantically trying to locate as many bee hotspots as possible in order to preserve their most valued natural habitats. Amazingly, one researcher discovered 650 different bee species inhabiting one small area of a national park in Utah.
Experts have documented around 1,000 bee species that dwell within the state of Utah, but finding all of these species inhabiting one single location is impossible. Despite this, an independent bee researcher, Olivia Carril, recently discovered 650 of these 1,000 bee species inhabiting the well known Grand-Staircase Escalante National Monument in southern Utah. Carril found 660 native bees within the borders of the Grand Staircase-Escalante National Monument, which accounts for around 60 percent of Utah's native bee population. A few years ago, a similar study determined that 770 bee species were discovered east of the Mississippi River. To put this in perspective, the total amount of bee species existing in one half of the United States is just 100 more than the amount of bee species found within one National Park monument in Utah.
Due to Carril's research, there is now an interest in preserving this region's ecosystem, as it provides a safe zone for more than half of America's bee species during the winter season. This region of Utah is a preferred dwelling ground for bees due to the area's diversity of plant life and long growing season.
Have you ever encountered an active bee nest within a desert landscape?
Bee Control, Gilbert Bee Control, Mesa Bee Control, Phoenix Bee Control, Tempe Bee Control	Bee Exterminator in Gilbert, Bee Removal in Gilbert, Gilbert Bee Control, Gilbert Bee Removal
Bed Bugs Or Fleas?
Some people find joy in locating and handling certain insects, but nobody finds joy in handling insects that suck blood in order to survive. There exists a plethora of insect and arachnid species that suck blood. These arthropods include ticks, mosquitoes, fleas and bed bugs. Surprisingly, bed bugs are unique among blood-sucking insects in that they do not transmit any diseases to humans, but they do leave visible welts that itch like crazy. Generally, people have no problem discerning a mosquito bite from a flea or bed bug bite, but it can be hard to tell the difference between flea bites and bed bug bites. Both fleas and bed bugs inflict numerous bites on humans, but they are rarely caught in the act of sucking blood due to their tiny body size and nocturnal feeding habits. Fleas and bed bugs both inflict welts that look identical, and the bites that each insect leaves result in similar degrees of itchiness. Waking up with bug bites all over one's body is unpleasant enough without having to stress over not knowing which type of bug caused the itchy welts. Bed bug bites are commonly mistaken for flea bites and vice verse, but there does exist notable differences between the types of injuries that each insect inflicts.
Bed bugs and fleas are similar in that they both survive solely by feeding on the blood of mammals. Bed bugs prefer to feed on human blood while fleas prefer the blood of furry mammals. However, fleas find human blood perfectly acceptable and they will not pass up an easy source of blood just because it comes from a human. Fleas and bed bugs are nocturnal, which means that both prefer to bite humans while they sleep. This makes it very difficult for a person to determine which insect is responsible for bite injuries. However, a sharp observer can spot differences between fleas and bed bugs easily by watching how the insects infesting their home move about. Fleas can jump long distances while bed bugs slowly crawl. Bed bugs are also larger than fleas. Flea bites also tend to be clustered together in one area of the body while bed bug bites are more scattered across the body. Of course, the most important difference between fleas and bed bugs is that only fleas can transmit disease to humans. These diseases include the plague, typhus, and cat scratch disease.
Have you ever discovered several bug bites that you had no memory of receiving?
Bed Bug Control, Gilbert Bed Bug Control, Mesa Bed Bug Control, Phoenix Bed Bug Control, Tempe Bed Bug Control	Bed Bug Control, Gilbert Bed Bug Control, Gilbert Bed Bug Inspection
Researchers Have Created The Most Reliable Evolutionary Tree Of Scorpion Species By Analyzing Their Venom
As far as most people are concerned, scorpion species generally look the same. They all have pincers and a stinger that is attached to the end of a menacing looking tail. The only variance between scorpion species may be body size and color, but beyond these two features, what other physical traits vary across scorpion species? As it happens, this question is still being asked by many entomologists and evolutionary biologists working today. This is because a reliable evolutionary tree detailing scorpion evolution has never been accurately mapped out. Creating a family tree of existing scorpion species is difficult because very little phenotypic variation exists between the more than 2,000 scorpion species that have been documented and described by scientists. This is surprising considering that scorpions have adapted to living in a variety of different types of environments in all continents in the world except for Antarctica. Most other arthropods that are species-rich and widely distributed have developed unique physical traits in order to adapt to new environments, but scorpions have maintained a similar physical appearance for the 300 to 400 million years in which they have existed. However, one determined researcher recently created the first accurate and comprehensive evolutionary tree of scorpion species by analyzing the molecular shape of different venoms.
A postdoctoral researcher at the University of Wisconsin in Madison created an evolutionary tree of scorpion species by using available genetic information. However, genetic data was not sufficient for creating a comprehensive family tree of scorpions. This inadequate first map led Lopez to analyze the 3D structure of the molecules in the venom of different scorpion species. Basically, Lopez created a second tree that mapped out different venoms and their relative similarities and differences to one another. By applying this second map to the first map of genetic relatedness between available scorpion DNA samples, Lopez succeeded in mapping out the evolutionary family tree of scorpions. The shape of different venom molecules also indicates the particular prey-animals that each scorpion species is adapted to hunt. This information could be used to geographically map-out various scorpion habitats around the world.
Did you know that scorpions are one of the oldest arachnid species known to humankind?
How To Know If The Wood In Your Home Was Damaged By Termites Or Ants
How To Know If The Wood In Your Home Was Damaged By Termites Or Ants | Phoenix Pest Control Experts
Termite damage is not always easy to recognize, and they are not the only wood-boring insects that exist. Upon noticing unexplained damage to areas of structural wood, you should first have a termite inspection conducted immediately in order to prevent irreparable damage from occurring. When it comes to wood-boring insects, termites are the last insects that you want infesting your home. When compared to other wood-boring insects, termites cause the greatest degree of structural damages. When a home's structural damages become extensive enough to clearly indicate a termite infestation, the damage can sometimes be irreversible. Although termites are destructive creatures, they cannot render a home unlivable within a few days; instead, homes become structurally compromised only after long periods of destructive termite activity. Many people whose homes are protected by termite barriers and insecticides may still notice structural damage that indicates a termite presence. When this occurs, many homeowners may assume that they had been ripped-off by a shady exterminator who failed to install effective anti-termite barriers. However, it is far more likely that another type of wood-destroying insect is responsible. Termite poisons and repellents may not be as effective at killing other types of wood-boring insects, this is why it is important to understand the difference between termite damage and damage caused by other forms of destructive insects.
In addition to termites, carpenter ants can also cause damage to the wood in people's homes. However, only termites are capable of causing damage that is extensive enough to render a home unlivable. No other type of insect can destroy a home's structural integrity. One difference between the two insects is the type of wood that they are attracted to. Termites excavate wood that is intact and free from rot, such as timber and tree stumps. Carpenter ants, on the other hand, are attracted to wood that has already sustained damage, whether it be from rot or fungus. Carpenter ants, like termites, leave behind noticeable amounts of wood-shavings since they do not consume the wood that they excavate. Although termites consume the wood that they excavate, they can also leave behind wood shavings, albeit far less. In cases where wood destruction makes it hard to determine the type of insect pest responsible, you can instead attempt to locate the insect culprit yourself. Termites and carpenter ants are the same size, and they both swarm. These similarities can make the two different insects hard to discern, but termite workers are pale-colored, and nearly translucent, while carpenter ant workers are reddish or dark in color. Since termites consume wood, they often remain unseen within hollowed sections of wood, but carpenter ants can often be spotted foraging for food within people's homes, as they do not consume the wood that they excavate from structural timber.
Do you know of any other type of insect species, besides termites and ants, that are capable of inflicting damage to timber structures?
Gilbert Termite Control, Mesa Termite Control, Phoenix Termite Control, Termite Control	pest control, termite control
Tips For Pest Prevention | Phoenix Pest Control Experts
What makes homes attractive to pests?
Pests are attracted to food, water and shelter. Exclusion techniques and removing food and water sources will help deter pests. Simple measures such as keeping food in sealed containers and cleaning up after each meal to avoid leaving crumbs can help. Fix leaky pipes and drains to ensure that if pests do get in, they won't have ideal conditions in which they can thrive.
How do pests get into homes?
Pests enter structures through cracks and crevices around windows, doors, along foundations, ripped screens, uncapped chimneys, and also through holes where utilities enter a structure. Firewood, groceries, and other deliveries can carry pests in, too. Seal any openings with silicone caulk or steel wool, and to avoid hitchhiking pests, examine packages thoroughly before bringing them inside.
Where are pests most likely to settle in?
Pests have direct access to basements and attics through roofs and foundations, so they should be kept well ventilated, dry, and clutter-free. Also, because of the concentration of food and water, kitchens and bathrooms are other common areas.
What should I do if I have an infestation?
Despite even the best efforts, pests can still find their way inside. If you have a pest problem or need advice on how to better pest-proof your home, contact a qualified and licensed pest control professional.
Chandler Pest Control, Gilbert Pest Control, Mesa Pest Control, Phoenix Pest Control	Chandler Pest Control, Gilbert Pest Control, Mesa Pest Control, Phoenix Pest Control
November 15, 2018 Kandice Linwright No Comments
The Most Common Winter Pests
Most common winter pests in Phoenix, Arizona
It might not feel like winter outside, but we're still in the thick of the winter season. And while temperatures are rising above 80 degrees, winter pests are still invading your home getting ready for the warm weather and influx of food.
Some of the most common winter pests are mice, spiders, rats and scorpions.
Mice – A mouse can act like a contortionist, squeezing and bending their bodies to get into houses through openings as small as 1/4 of an inch. Once inside mice reproduce quickly, and before you know it – your house can be overrun with mice. Not only are they destructive to property, building nests and chewing on wood and furniture, but mice present a health hazard through their bites, urine, and feces.
Rats – Slightly larger than the common house mouse, rats are rodents that destroy property by chewing electrical wires and building nests in walls and under appliances and leave a trail of potentially hazardous excrement. Both mice and rats thrive in the many nooks and unused spaces a house offers for nesting.
Spiders – While spiders are often thought of as beneficial pests because they eat other household pests, most people don't want to share their homes with a bunch of creepy, crawly spiders. One of the most unfortunate things about spiders is that they often enter homes while hunting other pests that have come before them.
Stink bugs – Another nuisance pest, stink bugs don't transmit diseases to humans or pets, nor do they cause damage in homes. Still, they are unsightly, and like their name suggests, can cause quite a nasty odor in your home. Stink bugs will sometimes leave stains on curtains and walls and can invade your home in large numbers, which they do simply to survive the low temperatures.
So, how can you prevent winter pests from invading your home? First of all, get yourself a reliable pest control professional, like Magic Pest Control. A great relationship with an expert in pest control can make all the difference.
Secondly, get those pest control professionals out to your home once a month. Have our experts seal up your home to keep winter pests away. All cracks, holes and soft wood needs to be patched and replace. All carpeting that doesn't attach needs to be placed down correctly. All ceiling fans that do not fully cover the hole needs to be repaired.
Thirdly, keep a mindful eye on the floors at night when scorpions roam, and during the day when spiders and cockroaches invade.
Blog	gilbert, pest control, termite control, termites
Termite Behavior Can Be Altered By Various Types Of Wood Fungus
Termites mostly feed on natural sources of wood and dead plant matter located in regions that are largely uninhabited. Although termites are ecologically important for clearing land of dead wood and plant matter, numerous fungal species are also essential for wood degradation. Termites and fungi both thrive within hot, wet and humid conditions, and both compete for nutritional and water resources. In fact, termites and fungi have been known to partition their mutual habitat in order to fairly divide resources, and some termites have evolved symbiotic relationships with fungi. Not surprisingly, different species of wood-degrading fungi can alter termite behavior, which may play a part in facilitating their mutually cooperative relationship. Some species of wood-degrading fungi can even repel termites or slow their feeding. These forms of wood-degrading fungi could be used for developing new termite control strategies.
The species of wood-degrading fungus known as G. trabeum contains a chemical that is identical to a trail-pheromone that is emitted by termites. This fungus has also been found to influence the manner in which termites construct their tube shelters and select their food. Pest control researchers once created a bait-trap for termites by mixing G. trabeum with a slow acting poison that termite workers acquire before spreading the poison to the rest of their colony. A 2002 study had researchers expose termites to three different types of fungi. When eastern subterranean termites and Formosan subterranean termites were given a choice between a fungus-free sawdust pile and three other piles that had been colonized with white rot, brown rot and litter rot fungi, both termite species preferred all three of the fungal sawdust piles over the fungus-free sawdust pile. Both species preferred white rot and litter rot fungi over brown rot fungi. Also, all three of the fungal sawdust piles caused Formosan termites to increase their tunneling speeds while untreated sawdust had no effect on tunneling speed. It has been suggested that some wood-degrading fungi allows termites to absorb more nutrients in wood, which may increase their energy levels. Several different types of wood-degrading fungi have shown promise as bait components in termite traps.
Do you think that some types of wood-degrading fungi that could attract termites to bait-traps could be harmful to humans?
Gilbert Termite Control, Mesa Termite Control, Phoenix Termite Control, Termite Control	Gilbert Termite Control, Phoenix Termite Control, termite control


text:
Q: How to translate the cast of a memory address in C into python ctypes call? Sorry if the title isn't accurate, I am not 100% sure it describes the situation correctly:
I am attempting to interface with the FreeTDS C-library using Python's ctypes module.  I have some code running surprisingly well, but have run into one snag.  I am not sure how to to translate the last parameter of the dbbind() call below into ctypes.
The C example I am following is:
  /* these variable types are defined in the FreeTDS library */
  DBINT customer_id;
  DBCHAR company_name[255];
  DBFLT8 avg_income;

  /* <snip> */

  /* Now bind the returned columns to the variables */
  /* BYTE is defined in the FreeTDS library */
  dbbind(dbconn, 1, INTBIND, 0, (BYTE *)&customer_id);
  dbbind(dbconn, 2, NTBSTRINGBIND, 0, (BYTE *)&company_name);
  dbbind(dbconn, 3, FLT8BIND, 0, (BYTE*)&avg_income);

So, A) how do I define my variables in Python as variable types from the library and B) how do I translate "(BYTE *)&company_name" etc. into ctypes calls?
Thank you!
Solution: thanks to Zuljin, I was able to work out the following:
import ctypes as ct

#<snip>

cid = ct.c_int()
cname = ct.create_string_buffer(256)
cavgincome = ct.c_float()
dtlib.dbbind(cdbconn, 1, INTBIND, 0, ct.byref(cid))
dtlib.dbbind(cdbconn, 2, NTBSTRINGBIND, 0, cname)
dtlib.dbbind(cdbconn, 3, REALBIND, 0, ct.byref(cavgincome))

while dtlib.dbnextrow(cdbconn) != NO_MORE_ROWS:
    print '%s | %s | %s' % (cid, cname.value, cavgincome)

A: I think you should just check what is behind these DBINT,DBCHAR,DBFLT8 types. Probably this is int, char and double. And for those basic types you can find ctypes - probably c_int, c_char, c_double.
So you can now create python instances that will hold values returned by function. To pass these values as a pointer parameter you need to use byref() function. Something like this:
customer_id = c_int()
dbbind(dbconn, 1, INTBIND, 0, byref(customer_id))

EDIT: For name you have to create empty character buffer. To do that ctypes provide 2 functions create_string_buffer and create_unicode_buffer. Output object from these functions can be directly passed to your function. Here is example (in Python 3) of normal and unicode scanf function call on Windows.
from ctypes import *
libc = cdll.msvcrt

buf = create_string_buffer(256)
buf_u = create_unicode_buffer(256)

libc.scanf(b"%s",  buf)
libc.wscanf("%s",  buf_u)

print(buf.value)
print(buf_u.value)

redpajama_set_name: RedPajamaStackExchange


CUNA is Providing You With Quantivate's Regulatory Compliance Module: Now What?
This is huge for a variety of reasons. For starters, it unites all credit unions under the same platform to navigate the complex waters of compliance. Now both auditors and the teams responsible for compliance will be able to accomplish it with the help of a common, familiar lens. We can expect this to expedite the entire process and cut down on miscommunications and discrepancies due to variances in data presentation.
Second, Quantivate's platform can significantly reduce the cost of regulatory compliance, and this advanced and efficient technology introduces the idea of using a virtual CISO to supplement an existing security program.
Quantivate is already immensely popular in the financial realm, and many credit unions already use their software platform, or at least familiar with what it offers. But, despite this popularity, many credit unions are asking the same question: Once I have this great technology accessible to my organization, how will I use it to really magnify the value of Quantivate provides?
Purchase more of the Quantivate software modules. Yes, we understand it is an added cost, but consider it a worthwhile investment in the future of your company's governance, risk, and compliance program. Quantivate's ability to seamlessly integrate all the components of your GRC environment is unparalleled, giving you more visibility into the effectiveness of your program.
While running the risk of sounding self-righteous, we say simply; look to Quantivate's preferred cybersecurity partner to populate your software and use as a consultant.
We here at Rivial have been partners with Quantivate since our inception. Not only do we have a very close working relationship, but we also designed key aspects of their IT Risk Management module.
Regarding the cybersecurity compliance portion of the Quantivate software, Rivial can take over the entire administration process, and add our own custom features to the software, allowing your team to effectively wash your hands of compliance. We call this Managed Compliance, and we're very excited about how it works.
Rivial leverages the Quantivate IT Risk Management module and customizes it to your specific organization. All tasks and reminders become automated, we handle the organization and set up of your evidence repository, and we provide peace of mind by independently reviewing everything going on in the back end (like an IT Audit but without the pain and suffering).
To give you maximum visibility into the compliance process, we add another dimension to your Quantivate software in the form of an IT compliance dashboard. This identifies all your security control requirements, tracks control progress, collects evidence, and audits your security program compliance for you – effectively shedding the stress associated with your traditional IT Audit. When examiners come around for your IT audit, all you have to do is click print and your report is ready to be reviewed.
If you'd like to hear more about the methodology and process embedded into this IT audit report, see a more in-depth look here.
Limiting your upcoming relationship with Quantivate to only Regulatory Compliance would be wasteful. If you're not ready to invest in their entire suite, we recommend taking a look into their ITRM module. It fully integrates with your Regulatory Compliance module, giving your organization its greatest potential to be both compliant and secure this upcoming year.
Rivial is here to make that integration far easier. We provide all the content that goes into the ITRM module – this means you don't have to manually enter in all your security controls, threats, IT risks, or even policies. With our content, all of that gets populated for you. We even link all of your controls to your risks, allowing you to know exactly what controls mitigate the IT risks you face. We honestly feel this is where we really magnify the value of the service Quantivate provides.
If you're looking to receive this content for your ITRM module, click here. Do you want look into an expert-managed approach to mitigating risk and keeping your credit union safe? We've got that information for you too.
2019 will undoubtedly be an eventful year in cybersecurity. We hope that with Quantivate and Rivial Data Security, those events won't be the ones covered in headlines.


Peter and Barbara will be pleased to welcome you to our recently refurbished cosy Holiday Homes number 28,42,& 245 Freshwater Bay Holiday Village,(also known as Trewent Park).
Freshwater Bay Holiday Village in the Pembrokeshire Coast National Park is a very short walk from the beautiful safe, sand dune backed beach of Freshwater East.
The homes are 'open plan' downstairs with living, dining and kitchen area.
The fully fitted kitchen includes a full size electric cooker with oven,(No.28 has a dishwasher), fridge with small freezer compartment, microwave and toaster etc.
The lounge/dining area has a table and chairs seating six, comfy sofas, TV with Sky freesat and a DVD player.
Upstairs there are two bedroom and a bathroom with bath with shower over.
Bedroom one in all three properties has a double bed, chest of drawers and wardrobe.
Bedroom two No.28 has twin beds,(2ft.6ins. x 6ft.3ins).
Bedroom two No.245 has bunk beds,(3ft.x 6ft.3ins).
The bedrooms and bathroom have fixed wall heaters and a fixed hairdryer on the landing.
There is parking in numbered bays outside the property.
Please note the site is 'dog free' so unfortunately pets are not allowed in the accommodation or on the site.
The Longhouse is a restaurant/bar on site which is open during the main holiday season,there is also a small shop on site, also open during the holiday season. At other times there is very good food to be found at the local pubs.
Freshwater Bay Holiday Village in the Pembrokeshire Coast National Park is a short walk from a beautiful, safe, sand dune backed beach of Freshwater East, the beach slopes gently making it safe for children,there are many rock pools to explore and large area's of sand for beach games, in certain weather conditions the sea is ideal for body boarding or surfing,and as the sun sets you will find fishermen trying to catch their supper.
The Pembrokeshire Coastal Path passes the front of the site which afford good walking or short strolls with fantastic views.
The local Coastal Cruiser bus stops by the beach and will take you to many local beaches and villages.
South,and the wonderful beach at Freshwater West.
is 4 miles both by car.
Other local places to visit include Bosherston Lily Ponds, Caldy Island, Lamphey Palace, Folly Farm Adventure Park, Ritec Valley Quad Bike Centre, Manor House Wildlife and Leisure Park and many historic castles.
Pembrokeshire is a wonderful place to get away from it all, unwind and enjoy the natural beauty of the area.
Short walk to a wonderful sand dune backed beach.
Good for walking the Coastal Path, for long or short walks. .
We provide all bed linen,duvets and pillows,all you need to bring your own towels. We also provide you with washing up liquid,tea towel and cleaning products.
The site is dog free so unfortunatly pets are not allowed in the accommodation or on the site.
Please no smoking within the property.
Well maintained lawned area's for quiet relaxing.Parking right outside the Holiday Home.
Local Services: Local Coastal Cruiser bus service passes the park entrance.
From Camarthern take A40 west bound to Pembroke Dock at end of duel carriagway turn left onto A477 towards Pembroke Dock. Next two roundabouts straight over, next roundabout straight over on the A477, at village of Milton you need to turn left on a minor road,(by the farm shop) towards Lamphey, follow until 'T'junction turn right follow to Lamphey village, at 'T' junction turn left go past church,over bridge, take a right turn on the bend then immediatley left on to the B4584 to Freshwater East. In Freshwater East just past bus shelter (on your right) turn right down Trewent Hill at the bottom past car parks go over small bridge, Freshwater Bay Holiday Village is on your right,(also known as Trewent Park), go past wooden coloured house our holiday homes are the white properties. .
Please ring for special Christmas/New year offer.
Our Holiday Homes are available Saturday to Saturday, from 3.00pm on your first day and depart by 10.00am on your last day.
We offer special prices for couples at certain times please ring 01989 562836 for details.


text:
#include <string.h>

#include "py/runtime.h"
#include "py/mphal.h"
#include "lib/oofatfs/ff.h"
#include "extmod/vfs_fat.h"

#include "sdcard.h"
#include "pin.h"
#include "pin_static_af.h"
#include "bufhelper.h"
#include "dma.h"
#include "irq.h"

#if MICROPY_HW_ENABLE_SDCARD || MICROPY_HW_ENABLE_MMCARD

#if defined(STM32F7) || defined(STM32H7) || defined(STM32L4)

// The F7 has 2 SDMMC units but at the moment we only support using one of them in
// a given build.  If a boards config file defines MICROPY_HW_SDMMC2_CK then SDMMC2
// is used, otherwise SDMMC1 is used.

#if defined(MICROPY_HW_SDMMC2_CK)
#define SDIO SDMMC2
#define SDMMC_IRQHandler SDMMC2_IRQHandler
#define SDMMC_CLK_ENABLE() __HAL_RCC_SDMMC2_CLK_ENABLE()
#define SDMMC_CLK_DISABLE() __HAL_RCC_SDMMC2_CLK_DISABLE()
#define SDMMC_IRQn SDMMC2_IRQn
#define SDMMC_DMA dma_SDMMC_2
#else
#define SDIO SDMMC1
#define SDMMC_IRQHandler SDMMC1_IRQHandler
#define SDMMC_CLK_ENABLE() __HAL_RCC_SDMMC1_CLK_ENABLE()
#define SDMMC_CLK_DISABLE() __HAL_RCC_SDMMC1_CLK_DISABLE()
#define SDMMC_IRQn SDMMC1_IRQn
#define SDMMC_DMA dma_SDIO_0
#define STATIC_AF_SDMMC_CK STATIC_AF_SDMMC1_CK
#define STATIC_AF_SDMMC_CMD STATIC_AF_SDMMC1_CMD
#define STATIC_AF_SDMMC_D0 STATIC_AF_SDMMC1_D0
#define STATIC_AF_SDMMC_D1 STATIC_AF_SDMMC1_D1
#define STATIC_AF_SDMMC_D2 STATIC_AF_SDMMC1_D2
#define STATIC_AF_SDMMC_D3 STATIC_AF_SDMMC1_D3
#endif

// The F7 & L4 series calls the peripheral SDMMC rather than SDIO, so provide some
// #defines for backwards compatability.

#define SDIO_CLOCK_EDGE_RISING              SDMMC_CLOCK_EDGE_RISING
#define SDIO_CLOCK_EDGE_FALLING             SDMMC_CLOCK_EDGE_FALLING

#define SDIO_CLOCK_BYPASS_DISABLE           SDMMC_CLOCK_BYPASS_DISABLE
#define SDIO_CLOCK_BYPASS_ENABLE            SDMMC_CLOCK_BYPASS_ENABLE

#define SDIO_CLOCK_POWER_SAVE_DISABLE       SDMMC_CLOCK_POWER_SAVE_DISABLE
#define SDIO_CLOCK_POWER_SAVE_ENABLE        SDMMC_CLOCK_POWER_SAVE_ENABLE

#define SDIO_BUS_WIDE_1B                    SDMMC_BUS_WIDE_1B
#define SDIO_BUS_WIDE_4B                    SDMMC_BUS_WIDE_4B
#define SDIO_BUS_WIDE_8B                    SDMMC_BUS_WIDE_8B

#define SDIO_HARDWARE_FLOW_CONTROL_DISABLE  SDMMC_HARDWARE_FLOW_CONTROL_DISABLE
#define SDIO_HARDWARE_FLOW_CONTROL_ENABLE   SDMMC_HARDWARE_FLOW_CONTROL_ENABLE

#if defined(STM32H7)
#define SDIO_TRANSFER_CLK_DIV               SDMMC_NSpeed_CLK_DIV
#define SDIO_USE_GPDMA                      0
#else
#define SDIO_TRANSFER_CLK_DIV               SDMMC_TRANSFER_CLK_DIV
#define SDIO_USE_GPDMA                      1
#endif

#else

// These are definitions for F4 MCUs so there is a common macro across all MCUs.

#define SDMMC_CLK_ENABLE() __SDIO_CLK_ENABLE()
#define SDMMC_CLK_DISABLE() __SDIO_CLK_DISABLE()
#define SDMMC_IRQn SDIO_IRQn
#define SDMMC_IRQHandler SDIO_IRQHandler
#define SDMMC_DMA dma_SDIO_0
#define SDIO_USE_GPDMA 1
#define STATIC_AF_SDMMC_CK STATIC_AF_SDIO_CK
#define STATIC_AF_SDMMC_CMD STATIC_AF_SDIO_CMD
#define STATIC_AF_SDMMC_D0 STATIC_AF_SDIO_D0
#define STATIC_AF_SDMMC_D1 STATIC_AF_SDIO_D1
#define STATIC_AF_SDMMC_D2 STATIC_AF_SDIO_D2
#define STATIC_AF_SDMMC_D3 STATIC_AF_SDIO_D3

#endif

// If no custom SDIO pins defined, use the default ones
#ifndef MICROPY_HW_SDMMC_CK

#define MICROPY_HW_SDMMC_D0 (pin_C8)
#define MICROPY_HW_SDMMC_D1 (pin_C9)
#define MICROPY_HW_SDMMC_D2 (pin_C10)
#define MICROPY_HW_SDMMC_D3 (pin_C11)
#define MICROPY_HW_SDMMC_CK (pin_C12)
#define MICROPY_HW_SDMMC_CMD (pin_D2)

#endif

#define PYB_SDMMC_FLAG_SD       (0x01)
#define PYB_SDMMC_FLAG_MMC      (0x02)
#define PYB_SDMMC_FLAG_ACTIVE   (0x04)

static uint8_t pyb_sdmmc_flags;

// TODO: I think that as an optimization, we can allocate these dynamically
//       if an sd card is detected. This will save approx 260 bytes of RAM
//       when no sdcard was being used.
static union {
    SD_HandleTypeDef sd;
    #if MICROPY_HW_ENABLE_MMCARD
    MMC_HandleTypeDef mmc;
    #endif
} sdmmc_handle;

void sdcard_init(void) {
    // Set SD/MMC to no mode and inactive
    pyb_sdmmc_flags = 0;

    // configure SD GPIO
    // we do this here an not in HAL_SD_MspInit because it apparently
    // makes it more robust to have the pins always pulled high
    // Note: the mp_hal_pin_config function will configure the GPIO in
    // fast mode which can do up to 50MHz.  This should be plenty for SDIO
    // which clocks up to 25MHz maximum.
    #if defined(MICROPY_HW_SDMMC2_CK)
    // Use SDMMC2 peripheral with pins provided by the board's config
    mp_hal_pin_config_alt_static(MICROPY_HW_SDMMC2_CK, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_UP, STATIC_AF_SDMMC2_CK);
    mp_hal_pin_config_alt_static(MICROPY_HW_SDMMC2_CMD, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_UP, STATIC_AF_SDMMC2_CMD);
    mp_hal_pin_config_alt_static(MICROPY_HW_SDMMC2_D0, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_UP, STATIC_AF_SDMMC2_D0);
    #if MICROPY_HW_SDMMC_BUS_WIDTH == 4
    mp_hal_pin_config_alt_static(MICROPY_HW_SDMMC2_D1, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_UP, STATIC_AF_SDMMC2_D1);
    mp_hal_pin_config_alt_static(MICROPY_HW_SDMMC2_D2, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_UP, STATIC_AF_SDMMC2_D2);
    mp_hal_pin_config_alt_static(MICROPY_HW_SDMMC2_D3, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_UP, STATIC_AF_SDMMC2_D3);
    #endif
    #else
    // Default SDIO/SDMMC1 config
    mp_hal_pin_config_alt_static(MICROPY_HW_SDMMC_CK, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_UP, STATIC_AF_SDMMC_CK);
    mp_hal_pin_config_alt_static(MICROPY_HW_SDMMC_CMD, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_UP, STATIC_AF_SDMMC_CMD);
    mp_hal_pin_config_alt_static(MICROPY_HW_SDMMC_D0, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_UP, STATIC_AF_SDMMC_D0);
    #if MICROPY_HW_SDMMC_BUS_WIDTH == 4
    mp_hal_pin_config_alt_static(MICROPY_HW_SDMMC_D1, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_UP, STATIC_AF_SDMMC_D1);
    mp_hal_pin_config_alt_static(MICROPY_HW_SDMMC_D2, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_UP, STATIC_AF_SDMMC_D2);
    mp_hal_pin_config_alt_static(MICROPY_HW_SDMMC_D3, MP_HAL_PIN_MODE_ALT, MP_HAL_PIN_PULL_UP, STATIC_AF_SDMMC_D3);
    #endif
    #endif

    // configure the SD card detect pin
    // we do this here so we can detect if the SD card is inserted before powering it on
    #if defined(MICROPY_HW_SDCARD_DETECT_PIN)
    mp_hal_pin_config(MICROPY_HW_SDCARD_DETECT_PIN, MP_HAL_PIN_MODE_INPUT, MICROPY_HW_SDCARD_DETECT_PULL, 0);
    #endif
}

STATIC void sdmmc_msp_init(void) {
    // enable SDIO clock
    SDMMC_CLK_ENABLE();

    #if defined(STM32H7)
    // Reset SDMMC
    #if defined(MICROPY_HW_SDMMC2_CK)
    __HAL_RCC_SDMMC2_FORCE_RESET();
    __HAL_RCC_SDMMC2_RELEASE_RESET();
    #else
    __HAL_RCC_SDMMC1_FORCE_RESET();
    __HAL_RCC_SDMMC1_RELEASE_RESET();
    #endif
    #endif

    // NVIC configuration for SDIO interrupts
    NVIC_SetPriority(SDMMC_IRQn, IRQ_PRI_SDIO);
    HAL_NVIC_EnableIRQ(SDMMC_IRQn);

    // GPIO have already been initialised by sdcard_init
}

void sdmmc_msp_deinit(void) {
    HAL_NVIC_DisableIRQ(SDMMC_IRQn);
    SDMMC_CLK_DISABLE();
}

#if MICROPY_HW_ENABLE_SDCARD
void HAL_SD_MspInit(SD_HandleTypeDef *hsd) {
    sdmmc_msp_init();
}

void HAL_SD_MspDeInit(SD_HandleTypeDef *hsd) {
    sdmmc_msp_deinit();
}
#endif

#if MICROPY_HW_ENABLE_MMCARD
void HAL_MMC_MspInit(MMC_HandleTypeDef *hsd) {
    sdmmc_msp_init();
}

void HAL_MMC_MspDeInit(MMC_HandleTypeDef *hsd) {
    sdmmc_msp_deinit();
}
#endif

bool sdcard_is_present(void) {
    #if MICROPY_HW_ENABLE_MMCARD
    if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
        return false;
    }
    #endif
    #if defined(MICROPY_HW_SDCARD_DETECT_PIN)
    return HAL_GPIO_ReadPin(MICROPY_HW_SDCARD_DETECT_PIN->gpio, MICROPY_HW_SDCARD_DETECT_PIN->pin_mask) == MICROPY_HW_SDCARD_DETECT_PRESENT;
    #else
    return true;
    #endif
}

#if MICROPY_HW_ENABLE_SDCARD
STATIC HAL_StatusTypeDef sdmmc_init_sd(void) {
    // SD device interface configuration
    sdmmc_handle.sd.Instance = SDIO;
    sdmmc_handle.sd.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
    #ifndef STM32H7
    sdmmc_handle.sd.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
    #endif
    sdmmc_handle.sd.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_ENABLE;
    sdmmc_handle.sd.Init.BusWide = SDIO_BUS_WIDE_1B;
    sdmmc_handle.sd.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
    sdmmc_handle.sd.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV;

    // init the SD interface, with retry if it's not ready yet
    HAL_StatusTypeDef status;
    for (int retry = 10; (status = HAL_SD_Init(&sdmmc_handle.sd)) != HAL_OK; retry--) {
        if (retry == 0) {
            return status;
        }
        mp_hal_delay_ms(50);
    }

    #if MICROPY_HW_SDMMC_BUS_WIDTH == 4
    // configure the SD bus width for 4-bit wide operation
    status = HAL_SD_ConfigWideBusOperation(&sdmmc_handle.sd, SDIO_BUS_WIDE_4B);
    if (status != HAL_OK) {
        HAL_SD_DeInit(&sdmmc_handle.sd);
        return status;
    }
    #endif

    return HAL_OK;
}
#endif

#if MICROPY_HW_ENABLE_MMCARD
STATIC HAL_StatusTypeDef sdmmc_init_mmc(void) {
    // MMC device interface configuration
    sdmmc_handle.mmc.Instance = SDIO;
    sdmmc_handle.mmc.Init.ClockEdge = SDIO_CLOCK_EDGE_RISING;
    #ifndef STM32H7
    sdmmc_handle.mmc.Init.ClockBypass = SDIO_CLOCK_BYPASS_DISABLE;
    #endif
    sdmmc_handle.mmc.Init.ClockPowerSave = SDIO_CLOCK_POWER_SAVE_ENABLE;
    sdmmc_handle.mmc.Init.BusWide = SDIO_BUS_WIDE_1B;
    sdmmc_handle.mmc.Init.HardwareFlowControl = SDIO_HARDWARE_FLOW_CONTROL_DISABLE;
    sdmmc_handle.mmc.Init.ClockDiv = SDIO_TRANSFER_CLK_DIV;

    // Init the SDIO interface
    HAL_StatusTypeDef status = HAL_MMC_Init(&sdmmc_handle.mmc);
    if (status != HAL_OK) {
        return status;
    }

    // As this is an eMMC card, overwrite LogBlockNbr with actual value
    sdmmc_handle.mmc.MmcCard.LogBlockNbr = 7469056 + 2048;

    #if MICROPY_HW_SDMMC_BUS_WIDTH == 4
    // Configure the SDIO bus width for 4-bit wide operation
    #ifdef STM32F7
    sdmmc_handle.mmc.Init.ClockBypass = SDIO_CLOCK_BYPASS_ENABLE;
    #endif
    status = HAL_MMC_ConfigWideBusOperation(&sdmmc_handle.mmc, SDIO_BUS_WIDE_4B);
    if (status != HAL_OK) {
        HAL_MMC_DeInit(&sdmmc_handle.mmc);
        return status;
    }
    #endif

    return HAL_OK;
}
#endif

bool sdcard_power_on(void) {
    if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_ACTIVE) {
        return true;
    }

    #ifdef MICROPY_BOARD_SDCARD_POWER
    MICROPY_BOARD_SDCARD_POWER
    #endif

    HAL_StatusTypeDef status = HAL_ERROR;
    switch (pyb_sdmmc_flags) {
        #if MICROPY_HW_ENABLE_SDCARD
        case PYB_SDMMC_FLAG_SD:
            if (sdcard_is_present()) {
                status = sdmmc_init_sd();
            }
            break;
        #endif
        #if MICROPY_HW_ENABLE_MMCARD
        case PYB_SDMMC_FLAG_MMC:
            status = sdmmc_init_mmc();
            break;
        #endif
    }

    if (status == HAL_OK) {
        pyb_sdmmc_flags |= PYB_SDMMC_FLAG_ACTIVE;
        return true;
    } else {
        return false;
    }
}

void sdcard_power_off(void) {
    switch (pyb_sdmmc_flags) {
        #if MICROPY_HW_ENABLE_SDCARD
        case PYB_SDMMC_FLAG_ACTIVE | PYB_SDMMC_FLAG_SD:
            HAL_SD_DeInit(&sdmmc_handle.sd);
            break;
        #endif
        #if MICROPY_HW_ENABLE_MMCARD
        case PYB_SDMMC_FLAG_ACTIVE | PYB_SDMMC_FLAG_MMC:
            HAL_MMC_DeInit(&sdmmc_handle.mmc);
            break;
        #endif
    }
    pyb_sdmmc_flags &= ~PYB_SDMMC_FLAG_ACTIVE;
}

uint64_t sdcard_get_capacity_in_bytes(void) {
    switch (pyb_sdmmc_flags) {
        #if MICROPY_HW_ENABLE_SDCARD
        case PYB_SDMMC_FLAG_ACTIVE | PYB_SDMMC_FLAG_SD: {
            HAL_SD_CardInfoTypeDef cardinfo;
            HAL_SD_GetCardInfo(&sdmmc_handle.sd, &cardinfo);
            return (uint64_t)cardinfo.LogBlockNbr * (uint64_t)cardinfo.LogBlockSize;
        }
        #endif
        #if MICROPY_HW_ENABLE_MMCARD
        case PYB_SDMMC_FLAG_ACTIVE | PYB_SDMMC_FLAG_MMC: {
            HAL_MMC_CardInfoTypeDef cardinfo;
            HAL_MMC_GetCardInfo(&sdmmc_handle.mmc, &cardinfo);
            return (uint64_t)cardinfo.LogBlockNbr * (uint64_t)cardinfo.LogBlockSize;
        }
        #endif
        default:
            return 0;
    }
}

STATIC void sdmmc_irq_handler(void) {
    switch (pyb_sdmmc_flags) {
        #if MICROPY_HW_ENABLE_SDCARD
        case PYB_SDMMC_FLAG_ACTIVE | PYB_SDMMC_FLAG_SD:
            HAL_SD_IRQHandler(&sdmmc_handle.sd);
            break;
        #endif
        #if MICROPY_HW_ENABLE_MMCARD
        case PYB_SDMMC_FLAG_ACTIVE | PYB_SDMMC_FLAG_MMC:
            HAL_MMC_IRQHandler(&sdmmc_handle.mmc);
            break;
        #endif
    }
}

void SDMMC_IRQHandler(void) {
    IRQ_ENTER(SDMMC_IRQn);
    sdmmc_irq_handler();
    IRQ_EXIT(SDMMC_IRQn);
}

STATIC void sdcard_reset_periph(void) {
    // Fully reset the SDMMC peripheral before calling HAL SD DMA functions.
    // (There could be an outstanding DTIMEOUT event from a previous call and the
    // HAL function enables IRQs before fully configuring the SDMMC peripheral.)
    SDIO->DTIMER = 0;
    SDIO->DLEN = 0;
    SDIO->DCTRL = 0;
    SDIO->ICR = SDMMC_STATIC_FLAGS;
}

STATIC HAL_StatusTypeDef sdcard_wait_finished(uint32_t timeout) {
    // Wait for HAL driver to be ready (eg for DMA to finish)
    uint32_t start = HAL_GetTick();
    for (;;) {
        // Do an atomic check of the state; WFI will exit even if IRQs are disabled
        uint32_t irq_state = disable_irq();
        #if MICROPY_HW_ENABLE_MMCARD
        if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
            if (sdmmc_handle.mmc.State != HAL_MMC_STATE_BUSY) {
                enable_irq(irq_state);
                break;
            }
        } else
        #endif
        {
            if (sdmmc_handle.sd.State != HAL_SD_STATE_BUSY) {
                enable_irq(irq_state);
                break;
            }
        }
        __WFI();
        enable_irq(irq_state);
        if (HAL_GetTick() - start >= timeout) {
            return HAL_TIMEOUT;
        }
    }

    // Wait for SD card to complete the operation
    for (;;) {
        uint32_t state;
        #if MICROPY_HW_ENABLE_MMCARD
        MP_STATIC_ASSERT((uint32_t)HAL_SD_CARD_TRANSFER == (uint32_t)HAL_MMC_CARD_TRANSFER);
        MP_STATIC_ASSERT((uint32_t)HAL_SD_CARD_SENDING == (uint32_t)HAL_MMC_CARD_SENDING);
        MP_STATIC_ASSERT((uint32_t)HAL_SD_CARD_RECEIVING == (uint32_t)HAL_MMC_CARD_RECEIVING);
        MP_STATIC_ASSERT((uint32_t)HAL_SD_CARD_PROGRAMMING == (uint32_t)HAL_MMC_CARD_PROGRAMMING);
        if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
            state = HAL_MMC_GetCardState(&sdmmc_handle.mmc);
        } else
        #endif
        {
            state = HAL_SD_GetCardState(&sdmmc_handle.sd);
        }

        if (state == HAL_SD_CARD_TRANSFER) {
            return HAL_OK;
        }
        if (!(state == HAL_SD_CARD_SENDING || state == HAL_SD_CARD_RECEIVING || state == HAL_SD_CARD_PROGRAMMING)) {
            return HAL_ERROR;
        }
        if (HAL_GetTick() - start >= timeout) {
            return HAL_TIMEOUT;
        }
        __WFI();
    }
    return HAL_OK;
}

mp_uint_t sdcard_read_blocks(uint8_t *dest, uint32_t block_num, uint32_t num_blocks) {
    // check that SD card is initialised
    if (!(pyb_sdmmc_flags & PYB_SDMMC_FLAG_ACTIVE)) {
        return HAL_ERROR;
    }

    HAL_StatusTypeDef err = HAL_OK;

    // check that dest pointer is aligned on a 4-byte boundary
    uint8_t *orig_dest = NULL;
    uint32_t saved_word;
    if (((uint32_t)dest & 3) != 0) {
        // Pointer is not aligned so it needs fixing.
        // We could allocate a temporary block of RAM (as sdcard_write_blocks
        // does) but instead we are going to use the dest buffer inplace.  We
        // are going to align the pointer, save the initial word at the aligned
        // location, read into the aligned memory, move the memory back to the
        // unaligned location, then restore the initial bytes at the aligned
        // location.  We should have no trouble doing this as those initial
        // bytes at the aligned location should be able to be changed for the
        // duration of this function call.
        orig_dest = dest;
        dest = (uint8_t *)((uint32_t)dest & ~3);
        saved_word = *(uint32_t *)dest;
    }

    if (query_irq() == IRQ_STATE_ENABLED) {
        // we must disable USB irqs to prevent MSC contention with SD card
        uint32_t basepri = raise_irq_pri(IRQ_PRI_OTG_FS);

        #if SDIO_USE_GPDMA
        DMA_HandleTypeDef sd_dma;
        dma_init(&sd_dma, &SDMMC_DMA, DMA_PERIPH_TO_MEMORY, &sdmmc_handle);
        #if MICROPY_HW_ENABLE_MMCARD
        if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
            sdmmc_handle.mmc.hdmarx = &sd_dma;
        } else
        #endif
        {
            sdmmc_handle.sd.hdmarx = &sd_dma;
        }
        #endif

        // make sure cache is flushed and invalidated so when DMA updates the RAM
        // from reading the peripheral the CPU then reads the new data
        MP_HAL_CLEANINVALIDATE_DCACHE(dest, num_blocks * SDCARD_BLOCK_SIZE);

        sdcard_reset_periph();
        #if MICROPY_HW_ENABLE_MMCARD
        if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
            err = HAL_MMC_ReadBlocks_DMA(&sdmmc_handle.mmc, dest, block_num, num_blocks);
        } else
        #endif
        {
            err = HAL_SD_ReadBlocks_DMA(&sdmmc_handle.sd, dest, block_num, num_blocks);
        }
        if (err == HAL_OK) {
            err = sdcard_wait_finished(60000);
        }

        #if SDIO_USE_GPDMA
        dma_deinit(&SDMMC_DMA);
        #if MICROPY_HW_ENABLE_MMCARD
        if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
            sdmmc_handle.mmc.hdmarx = NULL;
        } else
        #endif
        {
            sdmmc_handle.sd.hdmarx = NULL;
        }
        #endif

        restore_irq_pri(basepri);
    } else {
        #if MICROPY_HW_ENABLE_MMCARD
        if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
            err = HAL_MMC_ReadBlocks(&sdmmc_handle.mmc, dest, block_num, num_blocks, 60000);
        } else
        #endif
        {
            err = HAL_SD_ReadBlocks(&sdmmc_handle.sd, dest, block_num, num_blocks, 60000);
        }
        if (err == HAL_OK) {
            err = sdcard_wait_finished(60000);
        }
    }

    if (orig_dest != NULL) {
        // move the read data to the non-aligned position, and restore the initial bytes
        memmove(orig_dest, dest, num_blocks * SDCARD_BLOCK_SIZE);
        memcpy(dest, &saved_word, orig_dest - dest);
    }

    return err;
}

mp_uint_t sdcard_write_blocks(const uint8_t *src, uint32_t block_num, uint32_t num_blocks) {
    // check that SD card is initialised
    if (!(pyb_sdmmc_flags & PYB_SDMMC_FLAG_ACTIVE)) {
        return HAL_ERROR;
    }

    HAL_StatusTypeDef err = HAL_OK;

    // check that src pointer is aligned on a 4-byte boundary
    if (((uint32_t)src & 3) != 0) {
        // pointer is not aligned, so allocate a temporary block to do the write
        uint8_t *src_aligned = m_new_maybe(uint8_t, SDCARD_BLOCK_SIZE);
        if (src_aligned == NULL) {
            return HAL_ERROR;
        }
        for (size_t i = 0; i < num_blocks; ++i) {
            memcpy(src_aligned, src + i * SDCARD_BLOCK_SIZE, SDCARD_BLOCK_SIZE);
            err = sdcard_write_blocks(src_aligned, block_num + i, 1);
            if (err != HAL_OK) {
                break;
            }
        }
        m_del(uint8_t, src_aligned, SDCARD_BLOCK_SIZE);
        return err;
    }

    if (query_irq() == IRQ_STATE_ENABLED) {
        // we must disable USB irqs to prevent MSC contention with SD card
        uint32_t basepri = raise_irq_pri(IRQ_PRI_OTG_FS);

        #if SDIO_USE_GPDMA
        DMA_HandleTypeDef sd_dma;
        dma_init(&sd_dma, &SDMMC_DMA, DMA_MEMORY_TO_PERIPH, &sdmmc_handle);
        #if MICROPY_HW_ENABLE_MMCARD
        if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
            sdmmc_handle.mmc.hdmatx = &sd_dma;
        } else
        #endif
        {
            sdmmc_handle.sd.hdmatx = &sd_dma;
        }
        #endif

        // make sure cache is flushed to RAM so the DMA can read the correct data
        MP_HAL_CLEAN_DCACHE(src, num_blocks * SDCARD_BLOCK_SIZE);

        sdcard_reset_periph();
        #if MICROPY_HW_ENABLE_MMCARD
        if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
            err = HAL_MMC_WriteBlocks_DMA(&sdmmc_handle.mmc, (uint8_t *)src, block_num, num_blocks);
        } else
        #endif
        {
            err = HAL_SD_WriteBlocks_DMA(&sdmmc_handle.sd, (uint8_t *)src, block_num, num_blocks);
        }
        if (err == HAL_OK) {
            err = sdcard_wait_finished(60000);
        }

        #if SDIO_USE_GPDMA
        dma_deinit(&SDMMC_DMA);
        #if MICROPY_HW_ENABLE_MMCARD
        if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
            sdmmc_handle.mmc.hdmatx = NULL;
        } else
        #endif
        {
            sdmmc_handle.sd.hdmatx = NULL;
        }
        #endif

        restore_irq_pri(basepri);
    } else {
        #if MICROPY_HW_ENABLE_MMCARD
        if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
            err = HAL_MMC_WriteBlocks(&sdmmc_handle.mmc, (uint8_t *)src, block_num, num_blocks, 60000);
        } else
        #endif
        {
            err = HAL_SD_WriteBlocks(&sdmmc_handle.sd, (uint8_t *)src, block_num, num_blocks, 60000);
        }
        if (err == HAL_OK) {
            err = sdcard_wait_finished(60000);
        }
    }

    return err;
}

/******************************************************************************/
// MicroPython bindings
//
// Expose the SD card or MMC as an object with the block protocol.

// There are singleton SDCard/MMCard objects
#if MICROPY_HW_ENABLE_SDCARD
const mp_obj_base_t pyb_sdcard_obj = {&pyb_sdcard_type};
#endif
#if MICROPY_HW_ENABLE_MMCARD
const mp_obj_base_t pyb_mmcard_obj = {&pyb_mmcard_type};
#endif

#if MICROPY_HW_ENABLE_SDCARD
STATIC mp_obj_t pyb_sdcard_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
    // check arguments
    mp_arg_check_num(n_args, n_kw, 0, 0, false);

    #if MICROPY_HW_ENABLE_MMCARD
    if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
        mp_raise_ValueError(MP_ERROR_TEXT("peripheral used by MMCard"));
    }
    #endif

    pyb_sdmmc_flags |= PYB_SDMMC_FLAG_SD;

    // return singleton object
    return MP_OBJ_FROM_PTR(&pyb_sdcard_obj);
}
#endif

#if MICROPY_HW_ENABLE_MMCARD
STATIC mp_obj_t pyb_mmcard_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *args) {
    // check arguments
    mp_arg_check_num(n_args, n_kw, 0, 0, false);

    #if MICROPY_HW_ENABLE_SDCARD
    if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_SD) {
        mp_raise_ValueError(MP_ERROR_TEXT("peripheral used by SDCard"));
    }
    #endif

    pyb_sdmmc_flags |= PYB_SDMMC_FLAG_MMC;

    // return singleton object
    return MP_OBJ_FROM_PTR(&pyb_mmcard_obj);
}
#endif

STATIC mp_obj_t sd_present(mp_obj_t self) {
    return mp_obj_new_bool(sdcard_is_present());
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(sd_present_obj, sd_present);

STATIC mp_obj_t sd_power(mp_obj_t self, mp_obj_t state) {
    bool result;
    if (mp_obj_is_true(state)) {
        result = sdcard_power_on();
    } else {
        sdcard_power_off();
        result = true;
    }
    return mp_obj_new_bool(result);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_2(sd_power_obj, sd_power);

STATIC mp_obj_t sd_info(mp_obj_t self) {
    if (!(pyb_sdmmc_flags & PYB_SDMMC_FLAG_ACTIVE)) {
        return mp_const_none;
    }
    uint32_t card_type;
    uint32_t log_block_nbr;
    uint32_t log_block_size;
    #if MICROPY_HW_ENABLE_MMCARD
    if (pyb_sdmmc_flags & PYB_SDMMC_FLAG_MMC) {
        card_type = sdmmc_handle.mmc.MmcCard.CardType;
        log_block_nbr = sdmmc_handle.mmc.MmcCard.LogBlockNbr;
        log_block_size = sdmmc_handle.mmc.MmcCard.LogBlockSize;
    } else
    #endif
    {
        card_type = sdmmc_handle.sd.SdCard.CardType;
        log_block_nbr = sdmmc_handle.sd.SdCard.LogBlockNbr;
        log_block_size = sdmmc_handle.sd.SdCard.LogBlockSize;
    }
    // cardinfo.SD_csd and cardinfo.SD_cid have lots of info but we don't use them
    mp_obj_t tuple[3] = {
        mp_obj_new_int_from_ull((uint64_t)log_block_nbr * (uint64_t)log_block_size),
        mp_obj_new_int_from_uint(log_block_size),
        mp_obj_new_int(card_type),
    };
    return mp_obj_new_tuple(3, tuple);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_1(sd_info_obj, sd_info);

// now obsolete, kept for backwards compatibility
STATIC mp_obj_t sd_read(mp_obj_t self, mp_obj_t block_num) {
    uint8_t *dest = m_new(uint8_t, SDCARD_BLOCK_SIZE);
    mp_uint_t ret = sdcard_read_blocks(dest, mp_obj_get_int(block_num), 1);

    if (ret != 0) {
        m_del(uint8_t, dest, SDCARD_BLOCK_SIZE);
        mp_raise_msg_varg(&mp_type_Exception, MP_ERROR_TEXT("sdcard_read_blocks failed [%u]"), ret);
    }

    return mp_obj_new_bytearray_by_ref(SDCARD_BLOCK_SIZE, dest);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_2(sd_read_obj, sd_read);

// now obsolete, kept for backwards compatibility
STATIC mp_obj_t sd_write(mp_obj_t self, mp_obj_t block_num, mp_obj_t data) {
    mp_buffer_info_t bufinfo;
    mp_get_buffer_raise(data, &bufinfo, MP_BUFFER_READ);
    if (bufinfo.len % SDCARD_BLOCK_SIZE != 0) {
        mp_raise_msg_varg(&mp_type_ValueError, MP_ERROR_TEXT("writes must be a multiple of %d bytes"), SDCARD_BLOCK_SIZE);
    }

    mp_uint_t ret = sdcard_write_blocks(bufinfo.buf, mp_obj_get_int(block_num), bufinfo.len / SDCARD_BLOCK_SIZE);

    if (ret != 0) {
        mp_raise_msg_varg(&mp_type_Exception, MP_ERROR_TEXT("sdcard_write_blocks failed [%u]"), ret);
    }

    return mp_const_none;
}
STATIC MP_DEFINE_CONST_FUN_OBJ_3(sd_write_obj, sd_write);

STATIC mp_obj_t pyb_sdcard_readblocks(mp_obj_t self, mp_obj_t block_num, mp_obj_t buf) {
    mp_buffer_info_t bufinfo;
    mp_get_buffer_raise(buf, &bufinfo, MP_BUFFER_WRITE);
    mp_uint_t ret = sdcard_read_blocks(bufinfo.buf, mp_obj_get_int(block_num), bufinfo.len / SDCARD_BLOCK_SIZE);
    return mp_obj_new_bool(ret == 0);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_3(pyb_sdcard_readblocks_obj, pyb_sdcard_readblocks);

STATIC mp_obj_t pyb_sdcard_writeblocks(mp_obj_t self, mp_obj_t block_num, mp_obj_t buf) {
    mp_buffer_info_t bufinfo;
    mp_get_buffer_raise(buf, &bufinfo, MP_BUFFER_READ);
    mp_uint_t ret = sdcard_write_blocks(bufinfo.buf, mp_obj_get_int(block_num), bufinfo.len / SDCARD_BLOCK_SIZE);
    return mp_obj_new_bool(ret == 0);
}
STATIC MP_DEFINE_CONST_FUN_OBJ_3(pyb_sdcard_writeblocks_obj, pyb_sdcard_writeblocks);

STATIC mp_obj_t pyb_sdcard_ioctl(mp_obj_t self, mp_obj_t cmd_in, mp_obj_t arg_in) {
    mp_int_t cmd = mp_obj_get_int(cmd_in);
    switch (cmd) {
        case MP_BLOCKDEV_IOCTL_INIT:
            if (!sdcard_power_on()) {
                return MP_OBJ_NEW_SMALL_INT(-1); // error
            }
            return MP_OBJ_NEW_SMALL_INT(0); // success

        case MP_BLOCKDEV_IOCTL_DEINIT:
            sdcard_power_off();
            return MP_OBJ_NEW_SMALL_INT(0); // success

        case MP_BLOCKDEV_IOCTL_SYNC:
            // nothing to do
            return MP_OBJ_NEW_SMALL_INT(0); // success

        case MP_BLOCKDEV_IOCTL_BLOCK_COUNT:
            return MP_OBJ_NEW_SMALL_INT(sdcard_get_capacity_in_bytes() / SDCARD_BLOCK_SIZE);

        case MP_BLOCKDEV_IOCTL_BLOCK_SIZE:
            return MP_OBJ_NEW_SMALL_INT(SDCARD_BLOCK_SIZE);

        default: // unknown command
            return MP_OBJ_NEW_SMALL_INT(-1); // error
    }
}
STATIC MP_DEFINE_CONST_FUN_OBJ_3(pyb_sdcard_ioctl_obj, pyb_sdcard_ioctl);

STATIC const mp_rom_map_elem_t pyb_sdcard_locals_dict_table[] = {
    { MP_ROM_QSTR(MP_QSTR_present), MP_ROM_PTR(&sd_present_obj) },
    { MP_ROM_QSTR(MP_QSTR_power), MP_ROM_PTR(&sd_power_obj) },
    { MP_ROM_QSTR(MP_QSTR_info), MP_ROM_PTR(&sd_info_obj) },
    { MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&sd_read_obj) },
    { MP_ROM_QSTR(MP_QSTR_write), MP_ROM_PTR(&sd_write_obj) },
    // block device protocol
    { MP_ROM_QSTR(MP_QSTR_readblocks), MP_ROM_PTR(&pyb_sdcard_readblocks_obj) },
    { MP_ROM_QSTR(MP_QSTR_writeblocks), MP_ROM_PTR(&pyb_sdcard_writeblocks_obj) },
    { MP_ROM_QSTR(MP_QSTR_ioctl), MP_ROM_PTR(&pyb_sdcard_ioctl_obj) },
};

STATIC MP_DEFINE_CONST_DICT(pyb_sdcard_locals_dict, pyb_sdcard_locals_dict_table);

#if MICROPY_HW_ENABLE_SDCARD
const mp_obj_type_t pyb_sdcard_type = {
    { &mp_type_type },
    .name = MP_QSTR_SDCard,
    .make_new = pyb_sdcard_make_new,
    .locals_dict = (mp_obj_dict_t *)&pyb_sdcard_locals_dict,
};
#endif

#if MICROPY_HW_ENABLE_MMCARD
const mp_obj_type_t pyb_mmcard_type = {
    { &mp_type_type },
    .name = MP_QSTR_MMCard,
    .make_new = pyb_mmcard_make_new,
    .locals_dict = (mp_obj_dict_t *)&pyb_sdcard_locals_dict,
};
#endif

void sdcard_init_vfs(fs_user_mount_t *vfs, int part) {
    pyb_sdmmc_flags = (pyb_sdmmc_flags & PYB_SDMMC_FLAG_ACTIVE) | PYB_SDMMC_FLAG_SD; // force SD mode
    vfs->base.type = &mp_fat_vfs_type;
    vfs->blockdev.flags |= MP_BLOCKDEV_FLAG_NATIVE | MP_BLOCKDEV_FLAG_HAVE_IOCTL;
    vfs->fatfs.drv = vfs;
    #if MICROPY_FATFS_MULTI_PARTITION
    vfs->fatfs.part = part;
    #endif
    vfs->blockdev.readblocks[0] = MP_OBJ_FROM_PTR(&pyb_sdcard_readblocks_obj);
    vfs->blockdev.readblocks[1] = MP_OBJ_FROM_PTR(&pyb_sdcard_obj);
    vfs->blockdev.readblocks[2] = MP_OBJ_FROM_PTR(sdcard_read_blocks); // native version
    vfs->blockdev.writeblocks[0] = MP_OBJ_FROM_PTR(&pyb_sdcard_writeblocks_obj);
    vfs->blockdev.writeblocks[1] = MP_OBJ_FROM_PTR(&pyb_sdcard_obj);
    vfs->blockdev.writeblocks[2] = MP_OBJ_FROM_PTR(sdcard_write_blocks); // native version
    vfs->blockdev.u.ioctl[0] = MP_OBJ_FROM_PTR(&pyb_sdcard_ioctl_obj);
    vfs->blockdev.u.ioctl[1] = MP_OBJ_FROM_PTR(&pyb_sdcard_obj);
}

#endif // MICROPY_HW_ENABLE_SDCARD || MICROPY_HW_ENABLE_MMCARD

redpajama_set_name: RedPajamaGithub


When education PR Ruth Sparkes chatted to her teenage son about his career plans, little did she realise that his experience of careers guidance would prompt her to launch a careers magazine for secondary schools.
"I launched Future in anger really," explains Ruth, "to fill a big gap. My son wanted to study maths at uni but nobody mentioned he'd have to do further maths at A-level to get to the university he wanted to go to.
Ruth's story is a common one; raise the issue of careers guidance with most young people and at best you can expect a shrug of the shoulders.
Older generations are more likely to unleash a shower of expletives.
"Provision has been very patchy and it's still patchy," says Ruth.
So just why does careers guidance have such a bad name, and is it warranted? To an extent, says Chris Webb, careers lead at Ruth Gorse Academy in Leeds and passionate CEIAG advocate – whose views expressed here are very much his own.
"Context is important," he points out. "Once the duty for the provision of careers information, advice and guidance was removed from the Connexions service in 2012 and the onus put on schools, none of the funding previously attached was passed on.
Progress has arguably been made: in December 2017 the DfE announced it would adopt the recommendations of Sir John Holman, a former headteacher commissioned by The Gatsby Foundation to come up with practical steps to bring provision up to international standards.
But forging links with business – as recommended by Gatsby – has proved controversial.
For Jason Smith, careers lead at East London Science School, joining up with business is easier said than done.
"I've had companies – PR firms, engineering firms, marketing companies etc – come in to school to do workshops with pupils, and the issue is always the same," he starts.
"The company is motivated to get involved in the community, often to help solve the 'crisis in education'. As such they don't ask teachers how to plan sessions or what might work with pupils, largely because they see teachers as part of the problem. So, they make rookie mistakes and leave having a negative view of schools and teachers.
"There's a cultural problem with work experience, volunteering and interacting with school-age pupils," suggests Jason.
The clunky fit experienced by those trying to bolt real-world skills onto the current curriculum shouldn't be overlooked, says Chris Webb.
"In an ideal world they're not two different topics, they're one and the same," he suggests.
"The provision of education and careers education work much better when they're symbiotic. The issue with that being that teachers are incredibly time poor and are bound by whatever directives from above.
Not that Chris is suggesting subject teachers deserve an extra ball to juggle.
"It's almost going to take a restructuring of how we look at education," he explains.
"A huge number of employability careers guidance theorists – and also employers – have reached the end of their tether with the education system. They really don't believe it's fit for purpose in terms of the skills it's providing young people.
"I always knew I wanted to be a journalist or write on a magazine.
In Year 10 my school set up mock interviews with people invited in from relevant industries; I chose 'features editor' from a list of options.
The school made a big thing of it – we had to do lots of prep – so I was a bit nervous.
Afterwards the feedback wasn't great, my interviewer said he didn't like my outfit, but I got the chance to ask his advice on getting into journalism.
He told me 'Well you'll have to study English at a Russell Group university, of course." That seemed odd; I'd read that there were other routes. I didn't want to go to university – I just felt it wasn't for me and it would be really expensive.
The event really affected me; I decided to abandon journalism and follow drama for my A-levels, though when I struggled to get into drama school I ended up working in John Lewis.
Moaning to a friend one day she mentioned that her dad, a publishing director, was looking for a trainee journalist who'd learn on the job. As soon as started I loved it so much and realised it was what I always wanted to do.
I worked on a trade magazine for 18 months – and learned so much from it – and then did a six-month NCTJ diploma.
The Education Act 2011 comes into force, moving responsibility for careers guidance from the local authority to schools, whilst removing statutory duties for careers education at KS4.
Ofsted publishes damning report Careers Guidance: Going In The Right Direction? As a result the Gatsby Charitable Foundation commissions Sir John Holman to research pragmatic actions to improve careers guidance until considered good by international standards.
The DfE launches a new careers strategy requiring schools to provide independent careers guidance and implement the eight Gatsby benchmarks.
September brings the deadline by which all schools should have a named careers leader and publish details of their careers programme.
By December of this year all schools are required to meet all eight of the Gatsby benchmarks, and provide pupils from years 7 to 13 with at least one encounter with employers per year.


Are you tired of seeing the Gravatar's default image?
Are your members to lazy to upload their profile pic?
Spice up your website by generating a different default user image upon registration. Image generated is different from each users because the algorithm is based on the email address.
If you are interested, you can get this plugin for a minimal fee of $5.
Download link will be provided instantly after the payment is settled.
if you run into some problem installing, don't hesitate to contact me here or check the about me page for the contact info.
2. This is a self hosted wavatar and not hosted in Gravatar site, image are processed and cached in your server, so it might consume server resource but will serve the image faster than the typical wavatar generated image from Gravatar site.
This entry was posted on Monday, November 7th, 2011 at 1:24 pm and is filed under Vanilla Forum Tips & Tricks. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.


Coco, all 18 years and 10 months of him, is a partially blind Shih Tzu who just started his first ever medication due to an enlarged heart. Coco belonged to my wife, Ann Marie until I came into her life in 2013. I grew up with big dogs, so this little fellar took some getting used. Somehow, he decided to adopt me. Due to his blindness, I became his "seeing eye human". He followed me everywhere. It was easy to hear my size 14 boots clomping along in front of him. Soon after I met Ann Marie, she was diagnosed with Stage 4 Metastatic Breast Cancer, a merciless disease that is terminal. Ann Marie fought this disease with grace for 5 1/2 years. Coco never left her side, always sleeping at her feet, always wanting to sleep in her lap, always ever vigilante and eager to watch over the woman who raised him. Ann Marie passed away in December 2018, at age 55. The last two years were extraordinarily difficult for her. During this time I took over more and more responsibility for Coco, and we became inseparable. Ann Mare would refer to Coco as "Robs therapy dog." She recognized the toll her illness was taking on me, and how much I needed Coco to ease my way through the difficult times. Before she died she made a deal with Coco to watch out for me. She knew how difficult her passing would be for both of us. Imagine someone 6′ 4″ and 240 lbs carrying around a little blind 10 lb. doggy. We are best friends, he saves me every day, and I have no doubt he has the biggest heart imaginable.


Georgians for Immigration Reduction is a grassroots group formed in 2002. Our mission is to inform the public of the many costs of mass immigration. We also lobby our elected representatives—both state and federal—for immigration law enforcement and a return to more traditional levels (around 230,000/year) of immigration.
We urge sincere persons of all ethnic backgrounds and political persuasions to join us. We hold a variety of political beliefs and take no stand on any issues except those related to immigration. We are not a soapbox for persons who believe their race to be superior to others. If this is your point of view, please do not contact us.
Unlike our opposition, we receive no support from any corporations, government agencies, or (so far) wealthy donors. All we expect from the cheap-labor folks is abuse. We rely on voluntary contributions from people like you.
You can work for immigration reform in large ways or small ones, depending on the amount of time and resources at your disposal. Even if you don't have much time, please get in touch with us. There are important things that you can do in just a few minutes per month. See our contact information below.
Georgians for Immigration Reduction is a member of Diversity Alliance for a Sustainable America. We are also a member of the Southeast Alliance for Sensible Immigration Policy. The Southeast Alliance includes members from Arkansas, Florida, North and South Carolina, Tennessee and Virginia.


text:
Q: Senecajs | app esponded with result that was not an object or array: Promise Trying to integrate promises into my seneca modules.
Firstly, we have the server.js file which exposes a route:
var express = require('express');
var app = express();
var Promise = require('bluebird');

var seneca = require('seneca')();
var act = Promise.promisify(seneca.act, {context: seneca});

var payroll = require ('./app/payroll');
seneca.use(payroll);

var router = express.Router();

router.route('/')
  .get(function(req, res) {

    act({role:'payroll', cmd:'generate-weekly-report-data', wc: 1489363200})
      .then(function (data) {
       res.json(data)
      })
      .catch(function (err) {
        res.send(err)
      });

  })
app.use('/payroll', router);

app.listen(3000);
console.log("Magic happens at port 3000");

And then we've got the payroll module (payroll.js) which contains the start of some accounting features:
module.exports = function(options) {
  var Promise = require('bluebird');
  var seneca = this;
  var act = Promise.promisify(seneca.act, {context: seneca});

  var payStructure = require ('../plugins/pay-structure');
  seneca.use(payStructure);

  seneca.add({role:'payroll', cmd:'generate-weekly-report-data'}, function (args, done) {
    act({role:'pay-structure', cmd:'get'})
      .then(function (pay_structure) {
        var referralPayRate = pay_structure.referralPayRate
        var stylistPayRate = pay_structure.stylistPayRate

        done( null, act({role:'transactions', cmd:'get_week', wc: args.wc, condense: true, totals: true }) )
      })
      .catch(function (err) {
        done(err)
      });
  });

}

Any help appreciated.

A: Why does it all make sense as soon as you make a post? -_-''
ANSWER:
Problem is that I am returning a promise through my done callback to a function that isn't expecting a promise, it just wants some JSON data.
Instead, I need to add an additional chain to get the result from the promise, and then pass the json through the done.
So NOT:
act({role:'pay-structure', cmd:'get'})
  .then(function (pay_structure) {
    var referralPayRate = pay_structure.referralPayRate
    var stylistPayRate = pay_structure.stylistPayRate

    done( null, act({role:'transactions', cmd:'get_week', wc: args.wc, condense: true, totals: true }) )
  })
  .catch(function (err) {
    done(err)
  });

But YES to:
act({role:'pay-structure', cmd:'get'})
  .then(function (result) {
    pay_structure = result

    return act({role:'transactions', cmd:'get_week', wc: args.wc, condense: true, totals: true })
  }).then(function( transactions ) {
    done(transactions)
  })
  .catch(function (err) {
    done(err)
  });


text:
2 more arrested in deadly Enid home invasion; both charged with murder
Posted 2:25 pm, September 21, 2019, by Kaylee Douglas, Updated at 10:20PM, September 21, 2019
ENID, Okla. - The Enid Police Department says they made two additional arrests Friday night in connection to a violent home invasion that left a 41-year-old mother of five dead.
Corey Mike Sanchez, 31, and Michael Anthony Huerta, 31, were both booked on charges of Murder in the First Degree and Conspiracy to Commit a Felony.
Just before 3 a.m. on Sept. 11, emergency crews were called to a home invasion in the 400 block of Vine St. in Enid.
Investigators learned that masked assailants broke into the home and attacked 41-year-old Diana Baez in front of her own children.
Three days after the attack, officials with the Enid Police Department confirmed that Baez died from her injuries.
On September 19, officers arrested six in connection to her attack and subsequent death.
Leoncio "Leo" Hernandez, age 33 of Enid, booked on a complaint of Accessory to Murder.
Luis "Chapo" Macias, age 26 of Enid, booked on a complaint of Accessory to Murder.
Eva Meraz-Corral, age 47 of Enid, booked on a complaint of Accessory to Murder.
Lindsey Marie Nash, age 37 of Enid, booked on complaints of Child Abuse and Possession of Methamphetamine with Intent to Distribute.
Blaine Allen Coleman, age 42 of Enid, booked on a complaint of Child Abuse.
An unnamed juvenile, age 15, booked on a complaint of Obstructing an Officer.
Enid Police arrested Huerta on September 13, during a traffic stop in Enid. At that time he was wanted for a Grady County warrant charging Domestic Battery in an unrelated to this case. He is currently in the custody of the Grady County Jail where the murder warrant was served today.
Please report any information to 580-242-7000 or call Crime Stoppers at 233-6233, visit enid.org/CrimeStoppers, or text 274637 and enter keyword ENID. You may earn a reward up to $1,000.00, remain anonymous, and won't be required to testify.
Enid police arrest 9 car burglary suspects, recover large amount of stolen property
Two arrested in connection to deadly home invasion
Jury selection scheduled for man connected to Oklahoma teen's murder
Man found guilty of murdering Oklahoma teenager
Court documents reveal new details in deadly home invasion in NW OKC
OSBI identifies suspect, victim in Wetumka murder
Woman held captive for two days, suspect's mom says it's all a misunderstanding
Bond set for violent Enid home invasion suspect
Ft. Towson woman charged with husband's murder
Woman arrested after man found shot to death in northwest Oklahoma City
Norman woman accused of first-degree murder in OKC after husband dies from shooting injuries
Seven years later: Enid police still searching for clues in missing persons case
A mother is charged with murder after delivering a stillborn baby with meth in its system


"The next one is set in the '90s,".
Previous movies took place in the 70's and 80's, it makes sense to keep moving forward and it was in the 90's that the X-Men went mainstream with a hit animated series (I used to set my video recorder every Saturday morning for it).
What Marvel TV Shows Are Coming In 2018?
The Aftermath of War! Your First Look at CIVIL WAR II: THE OATH!