text:
Israeli White Phosporus Terror Attack On Gaza Civilians
How GOP Plans to Defend BushCo on Torture
By Valtin
( – promoted by buhdydharma )
I don't have any special source within inner Republican Party circles. Nor do I have any particular new insight into the dynamics of how the GOP works out their policy. What I do have is the statement of the Republican minority opinion on the Senate Armed Services Committee's "supposedly bipartisan" report, Inquiry into the Treatment of Detainees in U.S. Custody. In the minority's mix of apologia and attack, we see the outlines of the GOP game-plan for any investigations into Bush crimes under an Obama administration and a Democratic-majority Congress.
The minority statement is endorsed by only about half of the Republican Senators on the Armed Services committee: Saxby Chambliss, R-GA, James Inhofe, R-OK, Jeff Sessions, R-AL, John Cornyn, R-TX, John Thune, R-SD, and Mel Martinez, R-FL. As you read what follows, consider that all of the above voted for the unanimously released report. According to a Washington Post article at the time, the SASC report was originally "sent to the Pentagon with no dissenting views."
But then a week later, the above Senators released their statement, which then made its way into the pages of the National Review. What happened in that intervening week to make them feel the necessity to issue their statement? And what a statement! It essentially accuses the SASC of aiding and abetting U.S. enemies, and endangering U.S. troops. It is my contention that this is how Bush, Cheney, Rumsfeld and the whole gang will attempt to "defend" themselves if, and when, any investigations of their crimes are proposed or begun.
The GOP Six begin their aggrieved tirade with a stirring invocation to American ideals:
Throughout our history, even in the gravest of circumstances, the United States has embodied the ideals of individual freedom and liberty. This nation adheres to the principle that all detainees in U.S. custody must be treated humanely and in accordance with applicable law.
Well, as they say, from their mouths to God's ears (so to speak).
Their statement continues (and I want to give them a chance to make their argument here, and thereby hang themselves):
The fallacious assertion, made in recent newspaper editorials and other media outlets, that illegal treatment of detainees was an intentional or necessary result of administration policy is irresponsible and only serves to aid the propaganda and recruitment efforts of extremists dedicated to the murder of innocents and the destruction of our way of life….
The implication, however, that this abuse was the direct, necessary, or foreseeable result of policy decisions made by senior administration officials is false and without merit. It is counter-productive and potentially dangerous to our men and women in uniform to insinuate that illegal treatment of detainees resulted from official U.S. government policies.
Administration officials sought to comply with requests from the field for effective interrogation techniques within the legal constraints in place at the time….
While it is well-documented that the guidelines and orders developed by administration and military officials were not followed in a handful of isolated and well-publicized incidents, and that certain techniques were used in areas and by individuals for which they were not authorized, all credible allegations of abuse by U.S. military personnel were and continue to be taken seriously and investigated in painstaking detail. Where applicable, offenders have been charged, tried, and punished under federal law.
Contrary to the lies and wounded patriotism of the GOP statement, the SASC report painstakingly recounts the timeline whereby President George W. Bush and top officials of his administration, the Pentagon and the CIA, introduced and administered a regime of abusive treatment and torture of prisoners. In order to do so, they had to trash fundamental international law, laws to which the United States was not only a signatory, but formerly a champion.
From the Committee report, released by Senator Carl Levin and Senator John McCain:
On February 7, 2002, President George W. Bush made a written determination that Common Article 3 of the Geneva Conventions, which would have afforded minimum standards for humane treatment, did not apply to al Qaeda or Taliban detainees. Following the President's determination, techniques such as waterboarding, nudity, and stress positions, used in SERE training to simulate tactics used by enemies that refuse to follow the Geneva Conventions, were authorized for use in interrogations of detainees in U.S. custody….
Members of the President's Cabinet and other senior officials participated in meetings inside the White House in 2002 and 2003 where specific interrogation techniques were discussed. National Security Council Principals reviewed the CIA's interrogation program during that period….
The use of techniques similar to those used in SERE resistance training – such as stripping students of their clothing, placing them in stress positions, putting hoods over their heads, and treating them like animals – was at odds with the commitment to humane treatment of detainees in U.S. custody….
[The Pentagon's] Joint Personnel Recovery Agency (JPRA) efforts in support of "offensive" interrogation operations went beyond the agency's knowledge and expertise. JPRA's support to U.S. government interrogation efforts contributed to detainee abuse. JPRA's offensive support also influenced the development of policies that authorized abusive interrogation techniques for use against detainees in U.S. custody….
Secretary of Defense Donald Rumsfeld's authorization of aggressive interrogation techniques for use at Guantanamo Bay was a direct cause of detainee abuse there.
The report also took on the "bad apple" theory of abuse, which was especially relevant to the Abu Ghraib scandal, where the clandestine nature of U.S. abuse was exposed, thanks to a whistleblower, digital photography and the ability to burn CDs. The "bad apple" theory dovetails with more sophisticated psychological research, i.e., that everyday human beings are subject to social pressures and in an abusive context can be easily led to torture. (See articles on Zimbardo's Prisoner experiment, or Milgram's famous obedience experiment, recently replicated.)
As important as these psychological theories are, the abuse at Abu Ghraib was a matter of policy, not character disorder or psychological slippage. The Levin/McCain report concluded that arguments, such as those advanced by the GOP Senators, that the torture was confined to "isolated" incidents, and the perpetrators "charged, tried, and punished," were false:
The abuse of detainees at Abu Ghraib in late 2003 was not simply the result of a few soldiers acting on their own. Interrogation techniques such as stripping detainees of their clothes, placing them in stress positions, and using military working dogs to intimidate them appeared in Iraq only after they had been approved for use in Afghanistan and at GTMO.
The Defense Department had criticized the SASC report, too, at the time of its release. According to a Washington Post story back on December 12, 2008:
A Defense Department spokesman noted that the Pentagon cooperated extensively with the Senate investigation and has taken numerous steps in recent years to ensure the humane treatment of detainees. The steps included a revision of the Army's field manual that establishes the rules for interrogations.
"Any credible allegations of abuse by U.S. military personnel are taken seriously and looked into in painstaking detail," said the spokesman, Bryan Whitman. "If and when applicable, offenders have been punished."
I'd ask my readers to take note of the special place in the Pentagon's narrative of the Army's revision of its interrogation field manual. It's described as one of the "steps" taken "in recent years to ensure the humane treatment of detainees."
The assertion about the Army Field Manual, like those about the adherence to humane standards for treatment of detainees, is a lie. The AFM contains provisions for abusive treatment at variance with humane standards laid down by the Geneva Conventions, including the use of isolation, perceptual deprivation, sleep deprivation, threats, and humiliation. There is not much that separates the AFM in its treatment of prisoners from that proposed by the CIA in its famous KUBARK manual of the early 1960s.
In my next article, I'll dissect further ways in which the struggle against the Pentagon and CIA's use of abusive interrogation techniques now shifts to an assessment of the Army Field Manual, which is being proposed as the new template for all U.S. military and intelligence interrogations.
Also posted at Invictus
Army Field Manual, Carl Levin, Donald Rumsfeld, George W. Bush, GOP, interrogation, petition for a special prosecutor, Senate Armed Services Committee, Torture
Skip to comment form
Valtin on January 6, 2009 at 12:12 am
And to my main subject, and area of expertise. I consider this essay a lead-in to a major article on the Army Field Manual situation later this week. The issue is important, because of pending legislation that will enshrine this AFM as "the" standard for interrogations for the military world-wide.
NLinStPaul on January 6, 2009 at 1:08 am
Do you mind if I add a tag – petition for a special prosecutor – so that this is listed with all of the other essays that have been posted here in support of the petition?
tahoebasha3 on January 6, 2009 at 2:00 am
I think you definitely have a handle on the Rovian-type GOP response for Bush Administration's use of "enhanced interrogation techniques," otherwise known as TORTURE, that will be utilized. Laced throughout is not only "it's just a handful of bad eggs," but more than that that there ARE mitigating or "certain circumstances" for the use of torture. They just don't seem to get it — TORTURE IS TORTURE and there is nothing, but nothing to mitigate its use. There is NO amount of talk-scape that will or can cut it. The supreme law of the land rules — but, of course, they will try anything!
really doesn't belong here — still, I just can't but to mention it. Look at this headline: Analysis: In Gaza fight, Iran lurks in background
I mentioned sometime back that I thought they would try to work this into an Iran this, Iran that thing! Can't really be sure as to how this whole really started — yes, I know that rockets were thrust at Israel, and then, and then, — but do we really know the forces behind all of this? Just a thought!


text:
Game the Game
A Green Horde Awaits You in the Newest 'Zombicide' Standalone Expansion
Posted by Ruel Gaviola on March 12, 2018
We love tabletop games here at Geek & Sundry, and we love to showcase the best games out there. If you want to stay tuned into what's new and exciting in the world of tabletop games, be sure to tune into Game the Game hosted by Becca Scott, with episodes going live each week that you can watch here at GeekandSundry.com.
Undead orcs are ravaging the western border of the kingdom, laying waste to everything in their path. Zombie walkers, runners, and fatties fill the streets and hunger for human flesh, their numbers growing with each passing minute.
Picking up where Black Plague left off, Zombicide: Green Horde is the latest Zombicide experience set in medieval times. Players take on the role of adventurers tasked with ridding the kingdom of the undead. They'll search for weapons and spells to aid in their journey, but the deadly beasts unleashed by the orc necromancer are seemingly around every corner.
Will you and your fellow adventurers survive the undead and rid the land of their threats? Or will the kingdom succumb to the inevitable hordes of zombie orcs swarming the land?
In this cooperative adventure for 1-6 players, each game is dedicated to completing one quest. There are 10 quests included, but you can easily create your own by re-arranging the modular board tiles or even combining tiles with previously released Zombicide titles. (After all, who says zombie orcs couldn't invade a mall or a prison?)
Each player begins with basic equipment and three actions per turn. You'll spend these actions moving through the streets and buildings, searching for helpful items, or attacking zombies. Danger lurks around every corner, though, so players must work together to ensure everybody's safety.
Searching is key to any Zombicide adventure since you'll be able to equip yourself with stronger weapons and spells for the rest of the game. Of course, there may be a surprise or two within that item deck (spoiler alert: they're zombies), but it's usually worth the risk.
When the inevitable showdown with the zombie orcs happens, combat is a simple line-of-sight check and a quick roll of the dice, with players gaining modifiers depending on their weapons or spells. With every kill, characters earn experience points and can level up to gain extra actions, more powers, and special abilities.
After all of the players have completed their turns, the zombies activate, which means they're on their impending march to feast on your character's flesh. Only the strongest and most cunning warriors will survive and complete the quest.
Like previous editions of Zombicide, players will be able to better equip themselves with Green Horde's all-new weapons, spells, and equipment. You'll need all the help you can get, since orc fatties and abominations can deal a single death-blow to the standard adventurer.
The stronger monsters and new game tiles make hiding a more viable option in Green Horde. With hedges blocking line-of-sight and waterholes slowing down movement, you'll be able to maneuver around the undead and even trap them as you duck and dodge your way to completing objectives.
When your group begins to make its way around, the biggest and most tension-filled change in the game happens immediately: the horde. Whenever zombie spawn cards are drawn, most will require you to put additional zombies into the horde located off the board.
The horde grows with each spawn card and when the "Enter the Horde!" card is revealed, the horde is placed on the board. Seeing a dozen or more zombies in a zone is now a regular feature as you try to survive.
Thankfully, your group also has access to the mighty trebuchet. This catapult requires three actions to launch, but it can deal heavy damage to your more powerful foes or to the entire horde itself. It requires no line-of-sight and it can reach the horde as it assembles off the board.
Like the previous entries in the Zombicide franchise, Green Horde is a claustrophobic slugfest through mobs of the undead. It doesn't take long before your group is surrounded and the new horde mechanism increases your chances of being overwhelmed by zombies.
Thankfully, with new weapons, spells, and the way-too-cool trebuchet, you'll have the tools to get out alive. None of the quests are easy, but taming the undead never is. Zombicide: Green Horde is an immersive dungeon-crawl experience that fans will appreciate.
Do you play zombie-themed games? Tell us in the comments! And be sure to check back here on GeekandSundry.com for Game the Game episodes every Thursday morning.
WANT MORE ZOMBICIDE?
Learn more about Zombicide: Black Plague.
Check out these awesome home brew rules for Zombicide!
Go back to where it all started with a look back at the original Zombicide.
Image Credits: Ruel Gaviola
Ruel Gaviola is a writer based in Southern California. He loves board games, books, cooking, traveling, Star Wars, and date nights with his wife. He reviews games and reports news for iSlaytheDragon and his name rhymes with Superman's Kryptonian name. Follow him on Twitter and read his blog here.
board games, CMON Games, cool mini or not, Tabletop games, Zombicide: Green Horde, zombies
This Is the D&D and MY LITTLE PONY Crossover We Need
7 Shops to Spice Up Your Growing Dice Collection

redpajama_set_name: RedPajamaCommonCrawl


text:
Perspective from Amar Agarwal, MS, FRCS, FRCOphth
Source: J Cataract Refract Surg. 2014;40(2):184-191.
Cataract surgery linked to changes in choroidal thickness, study finds
Cataract surgery was associated with changes in choroidal thickness, with axial length and IOP being critical in evaluating those changes, according to a study.
"The choroid may be involved in the pathogenesis of various ocular diseases," the study authors said. "It has been suggested that cataract surgery is associated with the onset of AMD."
The prospective study included 100 eyes of 100 patients with a mean age of 72.5 years and no other ocular disease who underwent cataract surgery. A control group included 20 eyes of 20 age-matched subjects.
Using enhanced-depth imaging optical coherence tomography, investigators evaluated changes over time in corrected distance visual acuity (CDVA), IOP, axial length and choroidal thickness preoperatively.
IOP in the study group decreased significantly at 3 weeks, 3 months and 6 months postoperatively.
Choroidal thickness increased significantly in the foveal and inferior regions for the duration of follow-up. It increased in the nasal region at 3 days, 1 week and 6 months, in the temporal region at 1 week and in the superior region at 6 months. The changes correlated negatively with early postoperative changes in IOP. Changes in choroidal thickness had a negative correlation with axial length in all regions.
Age, CDVA, preoperative IOP and surgical time correlated insignificantly with changes in choroidal thickness.
Mean IOP and choroidal thickness remained unchanged in the control group, the authors said.
Disclosure: The study authors report no relevant financial disclosures.
Amar Agarwal, MS, FRCS, FRCOphth
The preoperative and postoperative clinical evaluations were done methodically. However, the optical coherence tomography (OCT) technical aspects should have been detailed more, so that it can be repeated by the readers. Enhanced-depth imaging OCT has the ability to delineate the choroid by depth enhancement and thereby is more advantageous than conventional spectral-domain OCT, where the wavelength is not long enough to penetrate deep into the choroid. Imaging the entire choroid has been nearly impossible until the introduction of EDI OCT due to the attenuating effects of the retinal pigment epithelium and outer retina. Also, the dense vascular structure of the choroid created light scattering, which interfered with OCT imaging of the choroid.
There have been few reports on the nature of choroidal thickness by OCT in the recent past. Margolis and Spaide found a statistically significant correlation with age and choroidal thickness, in which the choroid thinned with age. Age-related choroidal atrophy is a choroidal condition identified by EDI OCT. Focal choroidal excavation is another entity detected by the OCT evaluation of choroid. EDI OCT has opened the new spectrum of examining the highly vascular structure, which can remove the limitations of conventional imaging system.
The authors noted that postoperative choroidal thickness significantly increased at the foveal and inferior regions throughout follow-up. One limitation is that they mentioned relative choroidal thinning that happened in the nasal and inferior regions but did not discuss it in the results. The grades of cataract in the included eyes were not mentioned. We know that signal transmission is one main factor that affects the OCT output and it is dependent on the grades of cataract. Overall, the study has shown an important observation of fine changes in choroidal thickness after cataract surgery that may affect the onset of age-related macular degeneration.
Margolis R, Spaide RF. A pilot study of enhanced depth imaging optical coherence tomography of the choroid in normal eyes. Am J Ophthalmol. 2009;147:811-815.
Margolis R, Mukkamala SK, Jampol LM, et al. The expanded spectrum of focal choroidal excavation. Arch Ophthalmol. 2011;129:1320-1325.
OSN Asia-Pacific Edition Board Member
Disclosures: Agarwal is a consultant for Staar Surgical.


Comprehensive list of commercial and residential architects in Independence, Missouri offering home, landscape and commercial architecture design services.
Have you spent countless hours touring model homes, viewing websites and plan books, or browsing magazines - never finding your perfect home plan? Look no further Garwood Designs creates custom homes for those who cannot find a readymade home plan any other way. Most of our customers have been home owners for years and are tired of poor quality construction, high maintenance and high utilities.
FIRM HISTORY Stark Wilson Duncan Architects SWD is a complete service architectural company with offices in the historic Country Club Plaza in Kansas City, Missouri. SWD serves a huge array of commercial, domestic and public sector customers throughout Kansas and Missouri, with an emphasis on master planning, multi-family housing, historic restoration, health care, office and restaurant design.
Schools that enrich the learning atmosphere; recreation centers that inspire and encourage physical activity; religious facilities that enhance worship and aid promote a spiritual response: Warner-Nease-Bost is dedicated to producing architecture that improves its environment.
Crawford Architects is a complete-service practice with offices in Sydney, Australia and Kansas City, Missouri. We specialize in the planning and design of complex, mixed-use urban projects encompassing sports, entertainment, retail and commercial office facilities. Our business model is unique in that we provide faster development timelines to our customers.
FS&L Architects, P.C. is a complete architectural company with over 45 years knowledge in architecture, interior design, urban planning, and historical preservation architecture. We have the knowledge, based upon years of practical experience, and the team, comprised of talented specialists with experience in the technical disciplines, necessary to manage all project needs.
Susan Richards Johnson & Associates. is a woman-owned full-service architecture company with extensive knowledge in historic restoration and renovation, adaptive reuse, new construction, and planning for both domestic and commercial construction.
To paraphrase Webster's definition, an expert is one who is certified or licensed to make his livelihood by applying a learned art or skill, with conformance to certain standards of ethics and competence. In that regard, architects are specialists, and Scharhag is an expert architectural company.


So often people enrolling in Italian Cooking Classes at Toscana Mia ask which is our favourite hotel in Chianti, in Tuscany.
We alwLive like a local is a great temptation but the comfort of a hotel is important,too? Let's choose a hotel with local personality and helpful staff.ays sleep at our home so it's difficult to judge which is the most comfortable. Therefore, we decided to base our suggestion on opinions given by other past participants.
We visited these hotels; we met the staff and found out that all of them are so helpful and professional !!!
Why choose a hotel in the countryside ?
Location gorgeous castle, houses built in the XIV-XV century, places with a lot of history ,nowadays restored with all comforts. Upon hills with unforgettable views, set among olive trees and beautiful Chianti vineyards.
Personality Rooms like these, with the character of an ancient and beautiful countryside villas.We're talking about buildings existing when Michelangelo was just starting to draw. Every room has different beds, decoration, architecture.
Getting pampered by the attention that people have for you Country Hotel La Locanda is more an elegant house where the owner Guido will be the most charming and helpful host.
Castello di Spaltenna Exclusive Tuscan Resort & Spa and Villa Campomaggio Hotels in which every member of the staff makes your holiday in Tuscany, a unique and unforgettable one.
At Spaltenna hotel also dinners are unique !!!
Next Next post: Italian First Courses You Can't Miss!


text:
Bonkers Blog November 2014
14 November (Part 1) - Greenwich police move to stage 2 of their enquiries into Bexley's lies
Peter Gussman and Elwyn Bryant were interviewed by Greenwich police at Marlowe House, Sidcup yesterday. They were the last of the complainants against councillor Cheryl Bacon and Co. and they returned as elated as I did. I am not surprised, all you have to do is relate the events exactly as they happened, present what evidence you have - Elwyn has his own correspondence with supportive councillors - contrast it with the statements that came from Bexley council and the truth jumps out at you. Experienced police officers should have no difficulty recognising when interviewees are telling the truth and all the indications are that they have done exactly that.
Elwyn handed in my DVD of former deputy leader Colin Campbell on BBC TV and there really isn't a single one of his assertions that get anywhere near the truth. He and whoever put him up to it ought to be on a charge too. The audio is provided within last Friday's blog.
Pooling the comments made by the police to the four complainants at their interviews it would appear that seven more people are due to be called for interview. It may be more, they are just the names that have slipped out.
Whilst no complainant has any criticism of any of the police officers encountered so far, In all probability they will be leaned on just as Bexley police were during the Craske case. They admitted "political interference", and as a precaution against that eventuality, Mick Barnbrook, Elwyn and I have taken advice on bringing a private criminal prosecution against Cheryl Bacon, Will Tuckley and Mrs. Lynn Tyler. We were very encouraged by what we heard.
News of the investigation into Bexley council's repetitive lying has reached the News Shopper, albeit only in their on line readers' comment section. Click the image for the relevant web page. On a note of pedantry, the deputy leader's wife runs the Members' Code of Conduct Committee, not the Standards Committee.


If you're looking for Vegas spa luxury, look no further than the spa at the Wynn. The first spa in all of Las Vegas to receive a Forbes Travel Guide Five-Star award, expect every service to be just as decadent and flashy as the Vegas strip. Don't feel like blowing cash at the casinos? This is an excellent place to spend your money and reap endless feel-good rewards.


As I told before, I purchased the 4Ocean bracelet in order to help the organization to clean oceans from plastic trash. So today I received a nice little bag with a bracelet made from recycled materials.
And here is the bracelet itself.
I just helped pull a pound of trash from the ocean by purchasing a Sea Turtle Bracelet from the 4Ocean online shop. 4Ocean is fighting against pacific plastic pollution. The amount of plastic in oceans is accumulating, and this progress is persistent if we do nothing. I want to help opening everybody's eyes in this trouble we are having.
These kinds of environmental issues are really important, and we people, countries and societies must change our behavior towards our unique planet. I still believe I can do small things by myself to help and give respect to our environment, and so can you. This is my choice. What is yours?
I am very proud to say I have had growing international traffic on my website lately. I have had readers at least from #India, #Switzerland, #USA, #France, #Kenya and other parts of #Africa, #Indonesia, #Russia, #Sweden, #Norway, #Estonia, #Poland, #Japan, #Brazil, #Ireland, #Luxemburg, #India and so on along with my dear readers from #Finland.
It feels so privileged to see people worldwide being interested and finding something interesting to read or just visiting my website. I try to write my blog in English in the future, and hope to see more and more people becoming interested and even regular visitors on my site. I must also say, that I have learned a lot about blogging and search engine optimizing (SEO) lately, that helps me in widening my blog's audience.
What blogging means to me, then?
Simply, writing my blog is an important way to express myself. I started writing my blog about 1,5 years ago, when I started studying at the Haaga-Helia School of Vocational Teacher Education. To be honest, I have written some blogs earlier, too, but these blogs have been more or less practicing and finding my natural way of writing and publishing texts. I write about topics like #learning, #leadership, #sustainability and #workinglife. There are also topics like #environment and climate change, that are always important to be brought up into discussion.
At the same time I finally feel like finding my own voice in writing. When studying, writing a blog was an excellent way to reflect my own learning. My friend Johanna has been a wonderful supporter in blogging, and I have learned so much from the dialogue we have had. In addition to learning, in a globalizing world it is always important to strengthen my own personal brand in working life. My website is also my personal resume.
International readers mean a lot for a networker like me as well, and hopefully my readers find interesting topics from my blog in the future, too. Writing is an excellent way to get to know people from all parts of our world. I love traveling and getting touch with diverse cultures. Seeing how people live in other parts of the world is interesting and offers mind-opening experiences – and sometimes even everlasting friendships. So for me writing a blog is an excellent way to create an international network. Networking means creating possibilities and security for our own lives, and it is also so much fun.
So I want to say lämmin kiitos, thank you so much, tack så mycket, danke schön, merci beaucoup, asante sana, muito obrigado, muchas gracias, grazie mille, большое спасибо, どうもありがとうございます and so on to all of you for your unique support and visiting my website. I truly hope to see you all soon again.
Against Climate Change: How to Reduce My Ecological Footprint?
Today I signed a climate pledge and I ask you to do it as well. We both know climate is changing and that is harmful for all of us. We see more and more hurricanes, drought, starvation and all kinds of troubles, that cause human suffering and lack of nature diversity. And it's still not sure if we really have time to stop this progress? Is it possible, or did we wake up too late? Paris Agreement is in every case an important step towards doing our best to save our globe. Still, there is much to do in everybody's personal life. And this post tells about my own ecological choices.
My working place belongs to the WWF's Green Office program. At least I try to do ecological choices in my everyday life, like cycling to work (even in the winter time) or using digital materials instead printing them. I would like to insert Green Office logos to all of my learning materials to show my students that I am committed to these important values and hope to see them capturing them as well.
So the first thing I did was doing a counter, that counts my ecological footpring. And here are my results. My ecological footprint according to this counter is 2,58 global hectares (gha) a year, which means, that if everybody lived like me, we'd need 1,25 globes to cover our living costs.
In our household water is used ∼ 7,4 cubic meters a month. I always try to avoid wasting water. In our household electricity is used 182 kWh a month and warming energy is used under 5000 kWh a year. I use bus, tram and metro approximately 30 kilometers and train 10 kilometers a week, although I try to cycle almost all the trips I do. Winter time is a bit challenging season in Finland, and sometimes it's almost impossible to cycle. I don't drive a car, but I travel 9-10 hours a year by airplane. This is very important, because traveling is my hobby. If I didn't fly at all, my overall result would be 2,08 global hectares a year and if everybody lived like me, we'd need only 1,01 globe to cover our living costs.
All in all, I am committed to cut my own ecological footprint, and I am already doing a lot of good things in my life. But there are still some good choices I could do for our environment. Here is a good article (in Finnish) about making effective ecological choices. So here is a challenge for you: what can you do and what are you going to do in your personal life to cut your ecological footprint?


Becoming calm, attentive and interested in the world using sensory play.
Our Sensory Baby Play classes focus on developing your baby's interest in the world through sensory exploration. Stimulating age-appropriate activities such as tummy time, scarf play and auditory exploration help to build trust and security and emotional connections with others. Parent discussion time helps you to connect with other parents in the group and learn more about your child's development.
Hi Esmee , I found your activity on Happity. Is it still running? Sensory Baby Play Tuesday, 15:00 - 15:45 Gymboree Islington, N5 2DJ Thanks!


text:
Q: Mathematical Induction - Is this correct? The question is :
Prove that
$$3 + 6 + 12 + 24 + ... + 3 \cdot 2^{n-1} = 3 \cdot 2^n - 3$$
for all integers $n ≥ 1$
My Solution (I'll skip the basis step and go straight to the inductive step):
II.
Assume that
$$3 + 6 + 12 + 24 + ... + 3 \cdot 2^{k-1} = 3\cdot 2^k - 3$$
Consider $n=k+1$:
$$3 + 6 + 12 + 24 + ... + 3 \cdot 2^{k-1} + 3 \cdot 2^{(k+1)-1}= 3\cdot 2^{k+1} - 3$$
$$3 + 6 + 12 + 24 + ... + 3 \cdot 2^{k-1} + 3 \cdot 2^k= 3\cdot 2^{k+1} - 3$$
$$3\cdot 2^k - 3 + 3\cdot 2^k = 3\cdot 2^{k+1} - 3$$
Cancelling out the $3$, I get:
$$3\cdot 2^k + 3\cdot 2^k = 3\cdot 2^{k+1}$$
Dividing both sides by $3$, I get:
$$2^k + 2^k = 2^{k+1}$$
$$2^{k+k}  = 2^{k+1}$$
$$2^{2k} ≠ 2^{k+1}$$
III. Therefore, $P(n)$ is not true for all integers $n ≥ 1$
Is my solution correct? I find it weird that we were given a problem that isn't true but I guess that's intentional (unless I'm the one who's wrong.)

A: This question has been answered by this user (and others) via the comment. In particular quoting the comment:

$2^k+2^k=2×2^k=2^{k+1}$. This is the part where you made mistake. Otherwise it's fine, and you have actually proved it.

redpajama_set_name: RedPajamaStackExchange


Recently, I wrote a blog post for Remodelers Advantage about how to get more value from Google Analytics. I doubt it was a popular post because most business owners I meet would rather talk about marketing than analytics.
The irony is that you get (much) better marketing results when you put "A" (analytics) before "M" (marketing).
So, I wrote the post on Remodelers Advantage to remind business owners that a) they probably already have Google Analytics installed and tracking their website activity, b) it's worth looking at the data, and c) there are some easy ways you can get started.
Of course, the only thing business owners like doing less than trying to track down their web guy/gal to get their Google Analytics login is reading lengthy blog posts. So, thanks to Blue Corona graphic designer extraordinaire, Edgar Serrano, here's an easy-to-digest infographic of my Remodelers Advantage blog post. Enjoy!
While there are some easy ways to pull data from Google Analytics, analyze, and take action on it, I'm a big believer in only doing what only you can do. If you want to grow your business faster, focus your time on doing the tasks that only you can do. Delegate or outsource the rest. Could I do our payroll? Yes. Do I do our payroll? No. I outsource it to Payroll Network.
Let our team show you the value hidden in your Google Analytics account. We provide analytics consulting as well as do-it-for-me analytics and online marketing services for companies ranging from local 'Mom and Pop' businesses doing less than a million in annual revenue to publicly traded billion dollar companies.


text:
New Wage Code
BUSINESS & ECONOMY / By CS Hanuman prajapat / July 25, 2022 July 25, 2022
The Code on Wages, 2019, has been notified on 08 August 2019, and the provisions of the Payment of Wages Act, 1936, the Minimum Wages Act, 1948, the Payment of Bonus Act, 1965 and the Equal Remuneration Act, 1976, have been rationalised and subsumed therein. The Code provides for universal minimum wage across employments in organized and unorganized sector. The Code mandates the Central Government to fix floor wage and that the minimum rates of wages fixed by the appropriate Governments shall not be less than the floor wage. The Code prohibits gender discrimination in matters related to wages and recruitment of employees for the same work or work of similar nature done by an employee. Every employee, drawing wages not exceeding a monthly amount as notified by the Central or State Government, and having put in at least 30 days of work in an accounting year, will be entitled to an annual bonus at the rate of 8.33% of wages earned or Rs. 100, whichever is higher.
"Labour" as a subject is in the Concurrent List of the Constitution of India and under the Codes, the power to make rules is vested with the Central Government as well as the State Governments as appropriate Government. As a step towards implementation of the four Labour Codes, the Central Government has pre-published the draft Rules, inviting comments of all stakeholders. As per available information, 31, 26, 25 and 25 States/Union Territories have pre-published the draft Rules under the Code on Wages, 2019, the Industrial Relations Code, 2020, the Code on Social Security, 2020 and the Occupational Safety Health and working Conditions Code, 2020 respectively.
The Labour Codes were drafted after wide consultations including nine tripartite meetings involving employers' and workers' representatives, regional Labour Conferences, inter-Ministerial consultations and based on reports of the Parliamentary Standing Committee on Labour. The endeavor has been to align the Labour Codes with the present economic scenario and technological advancements along with reduction in multiplicity of definitions & authorities. The Codes tend to ease compliance mechanism aiming to promote ease of doing business/setting up of enterprises, attract investment and catalyze creation of employment opportunities while ensuring safety, health and social security of every worker. Use of technology has been introduced in order to ensure transparency & accountability in enforcement. Decriminalization of minor offences has also been provided in the Labour Codes.
This information was given by the Minister of State for Labour & Employment, Shri Rameswar Teli in a written reply in Lok Sabha today.


The Center for the Humanities in Practice promotes career diversity among graduate students at Ohio State University.
The Center for the Humanities in Practice offers semester-long fellowships for graduate students in the Arts and Humanities interested in building skills and exploring opportunities for employment beyond traditional tenure-track academic positions. For further information about the fellowship and how to apply, visit our CHiP Fellowships page.
As part of the Humanities Without Walls consortium, Ohio State University nominates graduate students to attend a 3-week summer workshop for pre-doctoral graduate students in Chicago. Facilitated by the Chicago Humanities Festival, the workshop brings together cohorts of thirty graduate students from across the country for skills-building, networking, and intensive discussions with organizers of public humanities projects, leaders of university presses and learned societies, experts in the various domains of the digital humanities, representatives of governmental and non-governmental organizations, and holders of important non-faculty positions in colleges and universities (academic administrators, student services professionals, librarians and archivists, development officers, and others). For more information about the program, please consult the HWW website. The deadline for the 2019 Workshop was September 30, 2019.
The OSU Graduate School maintains a page dedicated to career development for graduate students. This includes access to The Versatile Ph.D., an on-line community for those interested in exploring non-academic career opportunities, and Imagine Ph.D., a career development and exploration tool for the humanities and social sciences.
The ASC's Center for Career and Professional Success is open to graduate students: contact Jessamyn Cox (Cox.1195@osu.edu) for more information.
The OSU Alumni Association provides access to AlumniFire, a networking community that connects you with OSU Alums, including Ph.D's, willing to provide informational interviews, mentoring and other forms of career guidance.


text:
/* This file is ALSO:
 * Copyright 2001-2004 David Abrahams.
 * Copyright 2007 Rene Rivera.
 * Distributed under the Boost Software License, Version 1.0.
 * (See accompanying file LICENSE_1_0.txt or copy at
 * http://www.boost.org/LICENSE_1_0.txt)
 */

/*
 * execnt.c - execute a shell command on Windows NT
 *
 * If $(JAMSHELL) is defined, uses that to formulate the actual command. The
 * default is: cmd.exe /Q/C
 *
 * In $(JAMSHELL), % expands to the command string and ! expands to the slot
 * number (starting at 1) for multiprocess (-j) invocations. If $(JAMSHELL) does
 * not include a %, it is tacked on as the last argument.
 *
 * Each $(JAMSHELL) placeholder must be specified as a separate individual
 * element in a jam variable value.
 *
 * Do not just set JAMSHELL to cmd.exe - it will not work!
 *
 * External routines:
 *  exec_check() - preprocess and validate the command
 *  exec_cmd()   - launch an async command execution
 *  exec_wait()  - wait for any of the async command processes to terminate
 *
 * Internal routines:
 *  filetime_to_seconds() - Windows FILETIME --> number of seconds conversion
 */

#include "jam.h"
#include "output.h"
#ifdef USE_EXECNT
#include "execcmd.h"

#include "lists.h"
#include "output.h"
#include "pathsys.h"
#include "string.h"

#include <assert.h>
#include <ctype.h>
#include <errno.h>
#include <time.h>

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <process.h>
#include <tlhelp32.h>

/* get the maximum shell command line length according to the OS */
static int maxline();
/* valid raw command string length */
static long raw_command_length( char const * command );
/* add two 64-bit unsigned numbers, h1l1 and h2l2 */
static FILETIME add_64(
    unsigned long h1, unsigned long l1,
    unsigned long h2, unsigned long l2 );
/* */
static FILETIME add_FILETIME( FILETIME t1, FILETIME t2 );
/* */
static FILETIME negate_FILETIME( FILETIME t );
/* record the timing info for the process */
static void record_times( HANDLE const, timing_info * const );
/* calc the current running time of an *active* process */
static double running_time( HANDLE const );
/* terminate the given process, after terminating all its children first */
static void kill_process_tree( DWORD const procesdId, HANDLE const );
/* waits for a command to complete or time out */
static int try_wait( int const timeoutMillis );
/* reads any pending output for running commands */
static void read_output();
/* checks if a command ran out of time, and kills it */
static int try_kill_one();
/* is the first process a parent (direct or indirect) to the second one */
static int is_parent_child( DWORD const parent, DWORD const child );
/* */
static void close_alert( PROCESS_INFORMATION const * const );
/* close any alerts hanging around */
static void close_alerts();
/* prepare a command file to be executed using an external shell */
static char const * prepare_command_file( string const * command, int slot );
/* invoke the actual external process using the given command line */
static void invoke_cmd( char const * const command, int const slot );
/* find a free slot in the running commands table */
static int get_free_cmdtab_slot();
/* put together the final command string we are to run */
static void string_new_from_argv( string * result, char const * const * argv );
/* frees and renews the given string */
static void string_renew( string * const );
/* reports the last failed Windows API related error message */
static void reportWindowsError( char const * const apiName, int slot );
/* closes a Windows HANDLE and resets its variable to 0. */
static void closeWinHandle( HANDLE * const handle );
/* Adds the job index to the list of currently active jobs. */
static void register_wait( int job_id );

/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */

/* CreateProcessA() Windows API places a limit of 32768 characters (bytes) on
 * the allowed command-line length, including a trailing Unicode (2-byte)
 * nul-terminator character.
 */
#define MAX_RAW_COMMAND_LENGTH 32766

/* We hold handles for pipes used to communicate with child processes in two
 * element arrays indexed as follows.
 */
#define EXECCMD_PIPE_READ 0
#define EXECCMD_PIPE_WRITE 1

static int intr_installed;

/* The list of commands we run. */
static struct _cmdtab_t
{
    /* Temporary command file used to execute the action when needed. */
    string command_file[ 1 ];

    /* Pipes for communicating with the child process. Parent reads from (0),
     * child writes to (1).
     */
    HANDLE pipe_out[ 2 ];
    HANDLE pipe_err[ 2 ];

    string buffer_out[ 1 ];  /* buffer to hold stdout, if any */
    string buffer_err[ 1 ];  /* buffer to hold stderr, if any */

    PROCESS_INFORMATION pi;  /* running process information */

    HANDLE wait_handle;

    int flags;

    /* Function called when the command completes. */
    ExecCmdCallback func;

    /* Opaque data passed back to the 'func' callback. */
    void * closure;
} * cmdtab = NULL;
static int cmdtab_size = 0;

/* A thread-safe single element queue.  Used by the worker threads
 * to signal the main thread that a process is completed.
 */
struct
{
    int job_index;
    HANDLE read_okay;
    HANDLE write_okay;
} process_queue;

/*
 * Execution unit tests.
 */

void execnt_unit_test()
{
#if !defined( NDEBUG )
    /* vc6 preprocessor is broken, so assert with these strings gets confused.
     * Use a table instead.
     */
    {
        typedef struct test { char * command; int result; } test;
        test tests[] = {
            { "", 0 },
            { "  ", 0 },
            { "x", 1 },
            { "\nx", 1 },
            { "x\n", 1 },
            { "\nx\n", 1 },
            { "\nx \n", 2 },
            { "\nx \n ", 2 },
            { " \n\t\t\v\r\r\n \t  x  \v \t\t\r\n\n\n   \n\n\v\t", 8 },
            { "x\ny", -1 },
            { "x\n\n y", -1 },
            { "echo x > foo.bar", -1 },
            { "echo x < foo.bar", -1 },
            { "echo x | foo.bar", -1 },
            { "echo x \">\" foo.bar", 18 },
            { "echo x '<' foo.bar", 18 },
            { "echo x \"|\" foo.bar", 18 },
            { "echo x \\\">\\\" foo.bar", -1 },
            { "echo x \\\"<\\\" foo.bar", -1 },
            { "echo x \\\"|\\\" foo.bar", -1 },
            { "\"echo x > foo.bar\"", 18 },
            { "echo x \"'\"<' foo.bar", -1 },
            { "echo x \\\\\"<\\\\\" foo.bar", 22 },
            { "echo x \\x\\\"<\\\\\" foo.bar", -1 },
            { 0 } };
        test const * t;
        for ( t = tests; t->command; ++t )
            assert( raw_command_length( t->command ) == t->result );
    }

    {
        int const length = maxline() + 9;
        char * const cmd = (char *)BJAM_MALLOC_ATOMIC( length + 1 );
        memset( cmd, 'x', length );
        cmd[ length ] = 0;
        assert( raw_command_length( cmd ) == length );
        BJAM_FREE( cmd );
    }
#endif
}

/*
 * exec_init() - global initialization
 */
void exec_init( void )
{
    if ( globs.jobs > cmdtab_size )
    {
        cmdtab = BJAM_REALLOC( cmdtab, globs.jobs * sizeof( *cmdtab ) );
        memset( cmdtab + cmdtab_size, 0, ( globs.jobs - cmdtab_size ) * sizeof( *cmdtab ) );
        cmdtab_size = globs.jobs;
    }
    if ( globs.jobs > MAXIMUM_WAIT_OBJECTS && !process_queue.read_okay )
    {
        process_queue.read_okay = CreateEvent( NULL, FALSE, FALSE, NULL );
        process_queue.write_okay = CreateEvent( NULL, FALSE, TRUE, NULL );
    }
}

/*
 * exec_done - free resources.
 */
void exec_done( void )
{
    if ( process_queue.read_okay )
    {
        CloseHandle( process_queue.read_okay );
    }
    if ( process_queue.write_okay )
    {
        CloseHandle( process_queue.write_okay );
    }
    BJAM_FREE( cmdtab );
}

/*
 * exec_check() - preprocess and validate the command
 */

int exec_check
(
    string const * command,
    LIST * * pShell,
    int * error_length,
    int * error_max_length
)
{
    /* Default shell does nothing when triggered with an empty or a
     * whitespace-only command so we simply skip running it in that case. We
     * still pass them on to non-default shells as we do not really know what
     * they are going to do with such commands.
     */
    if ( list_empty( *pShell ) )
    {
        char const * s = command->value;
        while ( isspace( *s ) ) ++s;
        if ( !*s )
            return EXEC_CHECK_NOOP;
    }

    /* Check prerequisites for executing raw commands. */
    if ( is_raw_command_request( *pShell ) )
    {
        int const raw_cmd_length = raw_command_length( command->value );
        if ( raw_cmd_length < 0 )
        {
            /* Invalid characters detected - fallback to default shell. */
            list_free( *pShell );
            *pShell = L0;
        }
        else if ( raw_cmd_length > MAX_RAW_COMMAND_LENGTH )
        {
            *error_length = raw_cmd_length;
            *error_max_length = MAX_RAW_COMMAND_LENGTH;
            return EXEC_CHECK_TOO_LONG;
        }
        else
            return raw_cmd_length ? EXEC_CHECK_OK : EXEC_CHECK_NOOP;
    }

    /* Now we know we are using an external shell. Note that there is no need to
     * check for too long command strings when using an external shell since we
     * use a command file and assume no one is going to set up a JAMSHELL format
     * string longer than a few hundred bytes at most which should be well under
     * the total command string limit. Should someone actually construct such a
     * JAMSHELL value it will get reported as an 'invalid parameter'
     * CreateProcessA() Windows API failure which seems like a good enough
     * result for such intentional mischief.
     */

    /* Check for too long command lines. */
    return check_cmd_for_too_long_lines( command->value, maxline(),
        error_length, error_max_length );
}

/*
 * exec_cmd() - launch an async command execution
 *
 * We assume exec_check() already verified that the given command can have its
 * command string constructed as requested.
 */

void exec_cmd
(
    string const * cmd_orig,
    int flags,
    ExecCmdCallback func,
    void * closure,
    LIST * shell
)
{
    int const slot = get_free_cmdtab_slot();
    int const is_raw_cmd = is_raw_command_request( shell );
    string cmd_local[ 1 ];

    /* Initialize default shell - anything more than /Q/C is non-portable. */
    static LIST * default_shell;
    if ( !default_shell )
        default_shell = list_new( object_new( "cmd.exe /Q/C" ) );

    /* Specifying no shell means requesting the default shell. */
    if ( list_empty( shell ) )
        shell = default_shell;

    if ( DEBUG_EXECCMD )
        if ( is_raw_cmd )
            out_printf( "Executing raw command directly\n" );
        else
        {
            out_printf( "Executing using a command file and the shell: " );
            list_print( shell );
            out_printf( "\n" );
        }

    /* If we are running a raw command directly - trim its leading whitespaces
     * as well as any trailing all-whitespace lines but keep any trailing
     * whitespace in the final/only line containing something other than
     * whitespace).
     */
    if ( is_raw_cmd )
    {
        char const * start = cmd_orig->value;
        char const * p = cmd_orig->value + cmd_orig->size;
        char const * end = p;
        while ( isspace( *start ) ) ++start;
        while ( p > start && isspace( p[ -1 ] ) )
            if ( *--p == '\n' )
                end = p;
        string_new( cmd_local );
        string_append_range( cmd_local, start, end );
        assert( cmd_local->size == raw_command_length( cmd_orig->value ) );
    }
    /* If we are not running a raw command directly, prepare a command file to
     * be executed using an external shell and the actual command string using
     * that command file.
     */
    else
    {
        char const * const cmd_file = prepare_command_file( cmd_orig, slot );
        char const * argv[ MAXARGC + 1 ];  /* +1 for NULL */
        argv_from_shell( argv, shell, cmd_file, slot );
        string_new_from_argv( cmd_local, argv );
    }

    /* Catch interrupts whenever commands are running. */
    if ( !intr_installed )
    {
        intr_installed = 1;
        signal( SIGINT, onintr );
    }

    cmdtab[ slot ].flags = flags;

    /* Save input data into the selected running commands table slot. */
    cmdtab[ slot ].func = func;
    cmdtab[ slot ].closure = closure;

    /* Invoke the actual external process using the constructed command line. */
    invoke_cmd( cmd_local->value, slot );

    /* Free our local command string copy. */
    string_free( cmd_local );
}

/*
 * exec_wait() - wait for any of the async command processes to terminate
 *
 * Wait and drive at most one execution completion, while processing the I/O for
 * all ongoing commands.
 */

void exec_wait()
{
    int i = -1;
    int exit_reason;  /* reason why a command completed */

    /* Wait for a command to complete, while snarfing up any output. */
    while ( 1 )
    {
        /* Check for a complete command, briefly. */
        i = try_wait( 500 );
        /* Read in the output of all running commands. */
        read_output();
        /* Close out pending debug style dialogs. */
        close_alerts();
        /* Process the completed command we found. */
        if ( i >= 0 ) { exit_reason = EXIT_OK; break; }
        /* Check if a command ran out of time. */
        i = try_kill_one();
        if ( i >= 0 ) { exit_reason = EXIT_TIMEOUT; break; }
    }

    /* We have a command... process it. */
    {
        DWORD exit_code;
        timing_info time;
        int rstat;

        /* The time data for the command. */
        record_times( cmdtab[ i ].pi.hProcess, &time );

        /* Removed the used temporary command file. */
        if ( cmdtab[ i ].command_file->size )
            unlink( cmdtab[ i ].command_file->value );

        /* Find out the process exit code. */
        GetExitCodeProcess( cmdtab[ i ].pi.hProcess, &exit_code );

        /* The dispossition of the command. */
        if ( interrupted() )
            rstat = EXEC_CMD_INTR;
        else if ( exit_code )
            rstat = EXEC_CMD_FAIL;
        else
            rstat = EXEC_CMD_OK;

        /* Call the callback, may call back to jam rule land. */
        (*cmdtab[ i ].func)( cmdtab[ i ].closure, rstat, &time,
            cmdtab[ i ].buffer_out->value, cmdtab[ i ].buffer_err->value,
            exit_reason );

        /* Clean up our child process tracking data. No need to clear the
         * temporary command file name as it gets reused.
         */
        closeWinHandle( &cmdtab[ i ].pi.hProcess );
        closeWinHandle( &cmdtab[ i ].pi.hThread );
        closeWinHandle( &cmdtab[ i ].pipe_out[ EXECCMD_PIPE_READ ] );
        closeWinHandle( &cmdtab[ i ].pipe_out[ EXECCMD_PIPE_WRITE ] );
        closeWinHandle( &cmdtab[ i ].pipe_err[ EXECCMD_PIPE_READ ] );
        closeWinHandle( &cmdtab[ i ].pipe_err[ EXECCMD_PIPE_WRITE ] );
        string_renew( cmdtab[ i ].buffer_out );
        string_renew( cmdtab[ i ].buffer_err );
    }
}

/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */

/*
 * Invoke the actual external process using the given command line. Track the
 * process in our running commands table.
 */

static void invoke_cmd( char const * const command, int const slot )
{
    SECURITY_ATTRIBUTES sa = { sizeof( SECURITY_ATTRIBUTES ), 0, 0 };
    SECURITY_DESCRIPTOR sd;
    STARTUPINFO si = { sizeof( STARTUPINFO ), 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0 };

    /* Init the security data. */
    InitializeSecurityDescriptor( &sd, SECURITY_DESCRIPTOR_REVISION );
    SetSecurityDescriptorDacl( &sd, TRUE, NULL, FALSE );
    sa.lpSecurityDescriptor = &sd;
    sa.bInheritHandle = TRUE;

    /* Create output buffers. */
    string_new( cmdtab[ slot ].buffer_out );
    string_new( cmdtab[ slot ].buffer_err );

    /* Create pipes for communicating with the child process. */
    if ( !CreatePipe( &cmdtab[ slot ].pipe_out[ EXECCMD_PIPE_READ ],
        &cmdtab[ slot ].pipe_out[ EXECCMD_PIPE_WRITE ], &sa, 0 ) )
    {
        reportWindowsError( "CreatePipe", slot );
        return;
    }
    if ( globs.pipe_action && !CreatePipe( &cmdtab[ slot ].pipe_err[
        EXECCMD_PIPE_READ ], &cmdtab[ slot ].pipe_err[ EXECCMD_PIPE_WRITE ],
        &sa, 0 ) )
    {
        reportWindowsError( "CreatePipe", slot );
        return;
    }

    /* Set handle inheritance off for the pipe ends the parent reads from. */
    SetHandleInformation( cmdtab[ slot ].pipe_out[ EXECCMD_PIPE_READ ],
        HANDLE_FLAG_INHERIT, 0 );
    if ( globs.pipe_action )
        SetHandleInformation( cmdtab[ slot ].pipe_err[ EXECCMD_PIPE_READ ],
            HANDLE_FLAG_INHERIT, 0 );

    /* Hide the child window, if any. */
    si.dwFlags |= STARTF_USESHOWWINDOW;
    si.wShowWindow = SW_HIDE;

    /* Redirect the child's output streams to our pipes. */
    si.dwFlags |= STARTF_USESTDHANDLES;
    si.hStdOutput = cmdtab[ slot ].pipe_out[ EXECCMD_PIPE_WRITE ];
    si.hStdError = globs.pipe_action
        ? cmdtab[ slot ].pipe_err[ EXECCMD_PIPE_WRITE ]
        : cmdtab[ slot ].pipe_out[ EXECCMD_PIPE_WRITE ];

    /* Let the child inherit stdin, as some commands assume it is available. */
    si.hStdInput = GetStdHandle( STD_INPUT_HANDLE );

    if ( DEBUG_EXECCMD )
        out_printf( "Command string for CreateProcessA(): '%s'\n", command );

    /* Run the command by creating a sub-process for it. */
    if ( !CreateProcessA(
        NULL                    ,  /* application name                     */
        (char *)command         ,  /* command line                         */
        NULL                    ,  /* process attributes                   */
        NULL                    ,  /* thread attributes                    */
        TRUE                    ,  /* inherit handles                      */
        CREATE_NEW_PROCESS_GROUP,  /* create flags                         */
        NULL                    ,  /* env vars, null inherits env          */
        NULL                    ,  /* current dir, null is our current dir */
        &si                     ,  /* startup info                         */
        &cmdtab[ slot ].pi ) )     /* child process info, if created       */
    {
        reportWindowsError( "CreateProcessA", slot );
        return;
    }

    register_wait( slot );
}

/*
 * For more details on Windows cmd.exe shell command-line length limitations see
 * the following MSDN article:
 *     http://support.microsoft.com/default.aspx?scid=kb;en-us;830473
 */

static int raw_maxline()
{
    OSVERSIONINFO os_info;
    os_info.dwOSVersionInfoSize = sizeof( os_info );
    GetVersionEx( &os_info );

    if ( os_info.dwMajorVersion >= 5 ) return 8191;  /* XP       */
    if ( os_info.dwMajorVersion == 4 ) return 2047;  /* NT 4.x   */
    return 996;                                      /* NT 3.5.1 */
}

static int maxline()
{
    static int result;
    if ( !result ) result = raw_maxline();
    return result;
}

/*
 * Closes a Windows HANDLE and resets its variable to 0.
 */

static void closeWinHandle( HANDLE * const handle )
{
    if ( *handle )
    {
        CloseHandle( *handle );
        *handle = 0;
    }
}

/*
 * Frees and renews the given string.
 */

static void string_renew( string * const s )
{
    string_free( s );
    string_new( s );
}

/*
 * raw_command_length() - valid raw command string length
 *
 * Checks whether the given command may be executed as a raw command. If yes,
 * returns the corresponding command string length. If not, returns -1.
 *
 * Rules for constructing raw command strings:
 *   - Command may not contain unquoted shell I/O redirection characters.
 *   - May have at most one command line with non-whitespace content.
 *   - Leading whitespace trimmed.
 *   - Trailing all-whitespace lines trimmed.
 *   - Trailing whitespace on the sole command line kept (may theoretically
 *     affect the executed command).
 */

static long raw_command_length( char const * command )
{
    char const * p;
    char const * escape = 0;
    char inquote = 0;
    char const * newline = 0;

    /* Skip leading whitespace. */
    while ( isspace( *command ) )
        ++command;

    p = command;

    /* Look for newlines and unquoted I/O redirection. */
    do
    {
        p += strcspn( p, "\n\"'<>|\\" );
        switch ( *p )
        {
        case '\n':
            /* If our command contains non-whitespace content split over
             * multiple lines we can not execute it directly.
             */
            newline = p;
            while ( isspace( *++p ) );
            if ( *p ) return -1;
            break;

        case '\\':
            escape = escape && escape == p - 1 ? 0 : p;
            ++p;
            break;

        case '"':
        case '\'':
            if ( escape && escape == p - 1 )
                escape = 0;
            else if ( inquote == *p )
                inquote = 0;
            else if ( !inquote )
                inquote = *p;
            ++p;
            break;

        case '<':
        case '>':
        case '|':
            if ( !inquote )
                return -1;
            ++p;
            break;
        }
    }
    while ( *p );

    /* Return the number of characters the command will occupy. */
    return ( newline ? newline : p ) - command;
}

/* 64-bit arithmetic helpers. */

/* Compute the carry bit from the addition of two 32-bit unsigned numbers. */
#define add_carry_bit( a, b ) ((((a) | (b)) >> 31) & (~((a) + (b)) >> 31) & 0x1)

/* Compute the high 32 bits of the addition of two 64-bit unsigned numbers, h1l1
 * and h2l2.
 */
#define add_64_hi( h1, l1, h2, l2 ) ((h1) + (h2) + add_carry_bit(l1, l2))

/*
 * Add two 64-bit unsigned numbers, h1l1 and h2l2.
 */

static FILETIME add_64
(
    unsigned long h1, unsigned long l1,
    unsigned long h2, unsigned long l2
)
{
    FILETIME result;
    result.dwLowDateTime = l1 + l2;
    result.dwHighDateTime = add_64_hi( h1, l1, h2, l2 );
    return result;
}

static FILETIME add_FILETIME( FILETIME t1, FILETIME t2 )
{
    return add_64( t1.dwHighDateTime, t1.dwLowDateTime, t2.dwHighDateTime,
        t2.dwLowDateTime );
}

static FILETIME negate_FILETIME( FILETIME t )
{
    /* 2s complement negation */
    return add_64( ~t.dwHighDateTime, ~t.dwLowDateTime, 0, 1 );
}

/*
 * filetime_to_seconds() - Windows FILETIME --> number of seconds conversion
 */

static double filetime_to_seconds( FILETIME const ft )
{
    return ft.dwHighDateTime * ( (double)( 1UL << 31 ) * 2.0 * 1.0e-7 ) +
        ft.dwLowDateTime * 1.0e-7;
}

static void record_times( HANDLE const process, timing_info * const time )
{
    FILETIME creation;
    FILETIME exit;
    FILETIME kernel;
    FILETIME user;
    if ( GetProcessTimes( process, &creation, &exit, &kernel, &user ) )
    {
        time->system = filetime_to_seconds( kernel );
        time->user = filetime_to_seconds( user );
        timestamp_from_filetime( &time->start, &creation );
        timestamp_from_filetime( &time->end, &exit );
    }
}

#define IO_BUFFER_SIZE ( 16 * 1024 )

static char ioBuffer[ IO_BUFFER_SIZE + 1 ];

#define FORWARD_PIPE_NONE 0
#define FORWARD_PIPE_STDOUT 1
#define FORWARD_PIPE_STDERR 2

static void read_pipe
(
    HANDLE   in,  /* the pipe to read from */
    string * out,
    int      forwarding_mode
)
{
    DWORD bytesInBuffer = 0;
    DWORD bytesAvailable = 0;
    int i;

    for (;;)
    {
        /* check if we have any data to read */
        if ( !PeekNamedPipe( in, NULL, IO_BUFFER_SIZE, NULL,
            &bytesAvailable, NULL ) || bytesAvailable == 0 )
            return;

        /* we only read in the available bytes, to avoid blocking */
        if ( !ReadFile( in, ioBuffer, bytesAvailable <= IO_BUFFER_SIZE ?
            bytesAvailable : IO_BUFFER_SIZE, &bytesInBuffer, NULL ) || bytesInBuffer == 0 )
            return;

        /* Clean up some illegal chars. */
        for ( i = 0; i < bytesInBuffer; ++i )
        {
            if ( ( (unsigned char)ioBuffer[ i ] < 1 ) )
                ioBuffer[ i ] = '?';
        }
        /* Null, terminate. */
        ioBuffer[ bytesInBuffer ] = '\0';
        /* Append to the output. */
        string_append( out, ioBuffer );
        /* Copy it to our output if appropriate */
        if ( forwarding_mode == FORWARD_PIPE_STDOUT )
            out_data( ioBuffer );
        else if ( forwarding_mode == FORWARD_PIPE_STDERR )
            err_data( ioBuffer );
    }
}

#define EARLY_OUTPUT( cmd ) \
    ( ! ( cmd.flags & EXEC_CMD_QUIET ) )

#define FORWARD_STDOUT( c )                                 \
    ( ( EARLY_OUTPUT( c ) && ( globs.pipe_action != 2 ) ) ? \
        FORWARD_PIPE_STDOUT : FORWARD_PIPE_NONE )
#define FORWARD_STDERR( c )                                 \
    ( ( EARLY_OUTPUT( c ) && ( globs.pipe_action & 2 ) ) ?  \
        FORWARD_PIPE_STDERR : FORWARD_PIPE_NONE )

static void read_output()
{
    int i;
    for ( i = 0; i < globs.jobs; ++i )
        if ( cmdtab[ i ].pi.hProcess )
        {
            /* Read stdout data. */
            if ( cmdtab[ i ].pipe_out[ EXECCMD_PIPE_READ ] )
                read_pipe( cmdtab[ i ].pipe_out[ EXECCMD_PIPE_READ ],
                    cmdtab[ i ].buffer_out, FORWARD_STDOUT( cmdtab[ i ] ) );
            /* Read stderr data. */
            if ( cmdtab[ i ].pipe_err[ EXECCMD_PIPE_READ ] )
                read_pipe( cmdtab[ i ].pipe_err[ EXECCMD_PIPE_READ ],
                    cmdtab[ i ].buffer_err, FORWARD_STDERR( cmdtab[ i ] ) );
        }
}

static void CALLBACK try_wait_callback( void * data, BOOLEAN is_timeout )
{
    struct _cmdtab_t * slot = ( struct _cmdtab_t * )data;
    WaitForSingleObject( process_queue.write_okay, INFINITE );
    process_queue.job_index = slot - cmdtab;
    assert( !is_timeout );
    SetEvent( process_queue.read_okay );
    /* Okay.  Non-blocking. */
    UnregisterWait( slot->wait_handle );
}

static int try_wait_impl( DWORD timeout )
{
    int job_index;
    int timed_out;
    int res = WaitForSingleObject( process_queue.read_okay, timeout );
    if ( res != WAIT_OBJECT_0 )
        return -1;
    job_index = process_queue.job_index;
    SetEvent( process_queue.write_okay );
    return job_index;
}

static void register_wait( int job_id )
{
    if ( globs.jobs > MAXIMUM_WAIT_OBJECTS )
    {
        HANDLE ignore;
        RegisterWaitForSingleObject( &cmdtab[ job_id ].wait_handle,
            cmdtab[ job_id ].pi.hProcess,
            &try_wait_callback, &cmdtab[ job_id ], INFINITE,
            WT_EXECUTEDEFAULT | WT_EXECUTEONLYONCE );
    }
}

/*
 * Waits for a single child process command to complete, or the timeout,
 * whichever comes first. Returns the index of the completed command in the
 * cmdtab array, or -1.
 */

static int try_wait( int const timeoutMillis )
{
    if ( globs.jobs <= MAXIMUM_WAIT_OBJECTS )
    {
        int i;
        HANDLE active_handles[ MAXIMUM_WAIT_OBJECTS ];
        int job_ids[ MAXIMUM_WAIT_OBJECTS ];
        DWORD num_handles = 0;
        DWORD wait_api_result;
        for ( i = 0; i < globs.jobs; ++i )
        {
            if( cmdtab[ i ].pi.hProcess )
            {
                job_ids[ num_handles ] = i;
                active_handles[ num_handles ] = cmdtab[ i ].pi.hProcess;
                ++num_handles;
            }
        }
        wait_api_result = WaitForMultipleObjects( num_handles, active_handles, FALSE, timeoutMillis );
        if ( WAIT_OBJECT_0 <= wait_api_result && wait_api_result < WAIT_OBJECT_0 + globs.jobs )
        {
            return job_ids[ wait_api_result - WAIT_OBJECT_0 ];
        }
        else
        {
            return -1;
        }
    }
    else
    {
        return try_wait_impl( timeoutMillis );
    }

}

static int try_kill_one()
{
    /* Only need to check if a timeout was specified with the -l option. */
    if ( globs.timeout > 0 )
    {
        int i;
        for ( i = 0; i < globs.jobs; ++i )
            if ( cmdtab[ i ].pi.hProcess )
            {
                double const t = running_time( cmdtab[ i ].pi.hProcess );
                if ( t > (double)globs.timeout )
                {
                    /* The job may have left an alert dialog around, try and get
                     * rid of it before killing the job itself.
                     */
                    close_alert( &cmdtab[ i ].pi );
                    /* We have a "runaway" job, kill it. */
                    kill_process_tree( cmdtab[ i ].pi.dwProcessId,
                        cmdtab[ i ].pi.hProcess );
                    /* And return its running commands table slot. */
                    return i;
                }
            }
    }
    return -1;
}

static void close_alerts()
{
    /* We only attempt this every 5 seconds or so, because it is not a cheap
     * operation, and we will catch the alerts eventually. This check uses
     * floats as some compilers define CLOCKS_PER_SEC as a float or double.
     */
    if ( ( (float)clock() / (float)( CLOCKS_PER_SEC * 5 ) ) < ( 1.0 / 5.0 ) )
    {
        int i;
        for ( i = 0; i < globs.jobs; ++i )
            if ( cmdtab[ i ].pi.hProcess )
                close_alert( &cmdtab[ i ].pi );
    }
}

/*
 * Calc the current running time of an *active* process.
 */

static double running_time( HANDLE const process )
{
    FILETIME creation;
    FILETIME exit;
    FILETIME kernel;
    FILETIME user;
    if ( GetProcessTimes( process, &creation, &exit, &kernel, &user ) )
    {
        /* Compute the elapsed time. */
        FILETIME current;
        GetSystemTimeAsFileTime( &current );
        return filetime_to_seconds( add_FILETIME( current,
            negate_FILETIME( creation ) ) );
    }
    return 0.0;
}

/*
 * Not really optimal, or efficient, but it is easier this way, and it is not
 * like we are going to be killing thousands, or even tens of processes.
 */

static void kill_process_tree( DWORD const pid, HANDLE const process )
{
    HANDLE const process_snapshot_h = CreateToolhelp32Snapshot(
        TH32CS_SNAPPROCESS, 0 );
    if ( INVALID_HANDLE_VALUE != process_snapshot_h )
    {
        BOOL ok = TRUE;
        PROCESSENTRY32 pinfo;
        pinfo.dwSize = sizeof( PROCESSENTRY32 );
        for (
            ok = Process32First( process_snapshot_h, &pinfo );
            ok == TRUE;
            ok = Process32Next( process_snapshot_h, &pinfo ) )
        {
            if ( pinfo.th32ParentProcessID == pid )
            {
                /* Found a child, recurse to kill it and anything else below it.
                 */
                HANDLE const ph = OpenProcess( PROCESS_ALL_ACCESS, FALSE,
                    pinfo.th32ProcessID );
                if ( ph )
                {
                    kill_process_tree( pinfo.th32ProcessID, ph );
                    CloseHandle( ph );
                }
            }
        }
        CloseHandle( process_snapshot_h );
    }
    /* Now that the children are all dead, kill the root. */
    TerminateProcess( process, -2 );
}

static double creation_time( HANDLE const process )
{
    FILETIME creation;
    FILETIME exit;
    FILETIME kernel;
    FILETIME user;
    return GetProcessTimes( process, &creation, &exit, &kernel, &user )
        ? filetime_to_seconds( creation )
        : 0.0;
}

/*
 * Recursive check if first process is parent (directly or indirectly) of the
 * second one. Both processes are passed as process ids, not handles. Special
 * return value 2 means that the second process is smss.exe and its parent
 * process is System (first argument is ignored).
 */

static int is_parent_child( DWORD const parent, DWORD const child )
{
    HANDLE process_snapshot_h = INVALID_HANDLE_VALUE;

    if ( !child )
        return 0;
    if ( parent == child )
        return 1;

    process_snapshot_h = CreateToolhelp32Snapshot( TH32CS_SNAPPROCESS, 0 );
    if ( INVALID_HANDLE_VALUE != process_snapshot_h )
    {
        BOOL ok = TRUE;
        PROCESSENTRY32 pinfo;
        pinfo.dwSize = sizeof( PROCESSENTRY32 );
        for (
            ok = Process32First( process_snapshot_h, &pinfo );
            ok == TRUE;
            ok = Process32Next( process_snapshot_h, &pinfo ) )
        {
            if ( pinfo.th32ProcessID == child )
            {
                /* Unfortunately, process ids are not really unique. There might
                 * be spurious "parent and child" relationship match between two
                 * non-related processes if real parent process of a given
                 * process has exited (while child process kept running as an
                 * "orphan") and the process id of such parent process has been
                 * reused by internals of the operating system when creating
                 * another process.
                 *
                 * Thus an additional check is needed - process creation time.
                 * This check may fail (i.e. return 0) for system processes due
                 * to insufficient privileges, and that is OK.
                 */
                double tchild = 0.0;
                double tparent = 0.0;
                HANDLE const hchild = OpenProcess( PROCESS_QUERY_INFORMATION,
                    FALSE, pinfo.th32ProcessID );
                CloseHandle( process_snapshot_h );

                /* csrss.exe may display message box like following:
                 *   xyz.exe - Unable To Locate Component
                 *   This application has failed to start because
                 *   boost_foo-bar.dll was not found. Re-installing the
                 *   application may fix the problem
                 * This actually happens when starting a test process that
                 * depends on a dynamic library which failed to build. We want
                 * to automatically close these message boxes even though
                 * csrss.exe is not our child process. We may depend on the fact
                 * that (in all current versions of Windows) csrss.exe is a
                 * direct child of the smss.exe process, which in turn is a
                 * direct child of the System process, which always has process
                 * id == 4. This check must be performed before comparing
                 * process creation times.
                 */
                if ( !stricmp( pinfo.szExeFile, "csrss.exe" ) &&
                    is_parent_child( parent, pinfo.th32ParentProcessID ) == 2 )
                    return 1;
                if ( !stricmp( pinfo.szExeFile, "smss.exe" ) &&
                    ( pinfo.th32ParentProcessID == 4 ) )
                    return 2;

                if ( hchild )
                {
                    HANDLE hparent = OpenProcess( PROCESS_QUERY_INFORMATION,
                        FALSE, pinfo.th32ParentProcessID );
                    if ( hparent )
                    {
                        tchild = creation_time( hchild );
                        tparent = creation_time( hparent );
                        CloseHandle( hparent );
                    }
                    CloseHandle( hchild );
                }

                /* Return 0 if one of the following is true:
                 *  1. we failed to read process creation time
                 *  2. child was created before alleged parent
                 */
                if ( ( tchild == 0.0 ) || ( tparent == 0.0 ) ||
                    ( tchild < tparent ) )
                    return 0;

                return is_parent_child( parent, pinfo.th32ParentProcessID ) & 1;
            }
        }

        CloseHandle( process_snapshot_h );
    }

    return 0;
}

/*
 * Called by the OS for each topmost window.
 */

BOOL CALLBACK close_alert_window_enum( HWND hwnd, LPARAM lParam )
{
    char buf[ 7 ] = { 0 };
    PROCESS_INFORMATION const * const pi = (PROCESS_INFORMATION *)lParam;
    DWORD pid;
    DWORD tid;

    /* We want to find and close any window that:
     *  1. is visible and
     *  2. is a dialog and
     *  3. is displayed by any of our child processes
     */
    if (
        /* We assume hidden windows do not require user interaction. */
        !IsWindowVisible( hwnd )
        /* Failed to read class name; presume it is not a dialog. */
        || !GetClassNameA( hwnd, buf, sizeof( buf ) )
        /* All Windows system dialogs use the same Window class name. */
        || strcmp( buf, "#32770" ) )
        return TRUE;

    /* GetWindowThreadProcessId() returns 0 on error, otherwise thread id of
     * the window's message pump thread.
     */
    tid = GetWindowThreadProcessId( hwnd, &pid );
    if ( !tid || !is_parent_child( pi->dwProcessId, pid ) )
        return TRUE;

    /* Ask real nice. */
    PostMessageA( hwnd, WM_CLOSE, 0, 0 );

    /* Wait and see if it worked. If not, insist. */
    if ( WaitForSingleObject( pi->hProcess, 200 ) == WAIT_TIMEOUT )
    {
        PostThreadMessageA( tid, WM_QUIT, 0, 0 );
        WaitForSingleObject( pi->hProcess, 300 );
    }

    /* Done, we do not want to check any other windows now. */
    return FALSE;
}

static void close_alert( PROCESS_INFORMATION const * const pi )
{
    EnumWindows( &close_alert_window_enum, (LPARAM)pi );
}

/*
 * Open a command file to store the command into for executing using an external
 * shell. Returns a pointer to a FILE open for writing or 0 in case such a file
 * could not be opened. The file name used is stored back in the corresponding
 * running commands table slot.
 *
 * Expects the running commands table slot's command_file attribute to contain
 * either a zeroed out string object or one prepared previously by this same
 * function.
 */

static FILE * open_command_file( int const slot )
{
    string * const command_file = cmdtab[ slot ].command_file;

    /* If the temporary command file name has not already been prepared for this
     * slot number, prepare a new one containing a '##' place holder that will
     * be changed later and needs to be located at a fixed distance from the
     * end.
     */
    if ( !command_file->value )
    {
        DWORD const procID = GetCurrentProcessId();
        string const * const tmpdir = path_tmpdir();
        string_new( command_file );
        string_reserve( command_file, tmpdir->size + 64 );
        command_file->size = sprintf( command_file->value,
            "%s\\jam%d-%02d-##.bat", tmpdir->value, procID, slot );
    }

    /* For some reason opening a command file can fail intermittently. But doing
     * some retries works. Most likely this is due to a previously existing file
     * of the same name that happens to still be opened by an active virus
     * scanner. Originally pointed out and fixed by Bronek Kozicki.
     *
     * We first try to open several differently named files to avoid having to
     * wait idly if not absolutely necessary. Our temporary command file names
     * contain a fixed position place holder we use for generating different
     * file names.
     */
    {
        char * const index1 = command_file->value + command_file->size - 6;
        char * const index2 = index1 + 1;
        int waits_remaining;
        assert( command_file->value < index1 );
        assert( index2 + 1 < command_file->value + command_file->size );
        assert( index2[ 1 ] == '.' );
        for ( waits_remaining = 3; ; --waits_remaining )
        {
            int index;
            for ( index = 0; index != 20; ++index )
            {
                FILE * f;
                *index1 = '0' + index / 10;
                *index2 = '0' + index % 10;
                f = fopen( command_file->value, "w" );
                if ( f ) return f;
            }
            if ( !waits_remaining ) break;
            Sleep( 250 );
        }
    }

    return 0;
}

/*
 * Prepare a command file to be executed using an external shell.
 */

static char const * prepare_command_file( string const * command, int slot )
{
    FILE * const f = open_command_file( slot );
    if ( !f )
    {
        err_printf( "failed to write command file!\n" );
        exit( EXITBAD );
    }
    fputs( command->value, f );
    fclose( f );
    return cmdtab[ slot ].command_file->value;
}

/*
 * Find a free slot in the running commands table.
 */

static int get_free_cmdtab_slot()
{
    int slot;
    for ( slot = 0; slot < globs.jobs; ++slot )
        if ( !cmdtab[ slot ].pi.hProcess )
            return slot;
    err_printf( "no slots for child!\n" );
    exit( EXITBAD );
}

/*
 * Put together the final command string we are to run.
 */

static void string_new_from_argv( string * result, char const * const * argv )
{
    assert( argv );
    assert( argv[ 0 ] );
    string_copy( result, *(argv++) );
    while ( *argv )
    {
        string_push_back( result, ' ' );
        string_push_back( result, '"' );
        string_append( result, *(argv++) );
        string_push_back( result, '"' );
    }
}

/*
 * Reports the last failed Windows API related error message.
 */

static void reportWindowsError( char const * const apiName, int slot )
{
    char * errorMessage;
    char buf[24];
    string * err_buf;
    timing_info time;
    DWORD const errorCode = GetLastError();
    DWORD apiResult = FormatMessageA(
        FORMAT_MESSAGE_ALLOCATE_BUFFER |  /* __in      DWORD dwFlags       */
        FORMAT_MESSAGE_FROM_SYSTEM |
        FORMAT_MESSAGE_IGNORE_INSERTS,
        NULL,                             /* __in_opt  LPCVOID lpSource    */
        errorCode,                        /* __in      DWORD dwMessageId   */
        0,                                /* __in      DWORD dwLanguageId  */
        (LPSTR)&errorMessage,             /* __out     LPTSTR lpBuffer     */
        0,                                /* __in      DWORD nSize         */
        0 );                              /* __in_opt  va_list * Arguments */

    /* Build a message as if the process had written to stderr. */
    if ( globs.pipe_action )
        err_buf = cmdtab[ slot ].buffer_err;
    else
        err_buf = cmdtab[ slot ].buffer_out;
    string_append( err_buf, apiName );
    string_append( err_buf, "() Windows API failed: " );
    sprintf( buf, "%d", errorCode );
    string_append( err_buf, buf );

    if ( !apiResult )
        string_append( err_buf, ".\n" );
    else
    {
        string_append( err_buf, " - " );
        string_append( err_buf, errorMessage );
        /* Make sure that the buffer is terminated with a newline */
        if( err_buf->value[ err_buf->size - 1 ] != '\n' )
            string_push_back( err_buf, '\n' );
        LocalFree( errorMessage );
    }

    /* Since the process didn't actually start, use a blank timing_info. */
    time.system = 0;
    time.user = 0;
    timestamp_current( &time.start );
    timestamp_current( &time.end );

    /* Invoke the callback with a failure status. */
    (*cmdtab[ slot ].func)( cmdtab[ slot ].closure, EXEC_CMD_FAIL, &time,
        cmdtab[ slot ].buffer_out->value, cmdtab[ slot ].buffer_err->value,
        EXIT_OK );

    /* Clean up any handles that were opened. */
    closeWinHandle( &cmdtab[ slot ].pi.hProcess );
    closeWinHandle( &cmdtab[ slot ].pi.hThread );
    closeWinHandle( &cmdtab[ slot ].pipe_out[ EXECCMD_PIPE_READ ] );
    closeWinHandle( &cmdtab[ slot ].pipe_out[ EXECCMD_PIPE_WRITE ] );
    closeWinHandle( &cmdtab[ slot ].pipe_err[ EXECCMD_PIPE_READ ] );
    closeWinHandle( &cmdtab[ slot ].pipe_err[ EXECCMD_PIPE_WRITE ] );
    string_renew( cmdtab[ slot ].buffer_out );
    string_renew( cmdtab[ slot ].buffer_err );
}

#endif /* USE_EXECNT */

redpajama_set_name: RedPajamaGithub


The BlowHole TM pumps by ReeFlo feature a unique 3-speed AdjustaFlow switch that allows you to instantly choose flow rates, pressure and watt draw from three different settings. Cut the flow and watt draw in half during the night or at feeding time and then instantly switch back when desired. Very low heat transfer The BlowHole TM pumps feature a FlowThru design that prevents the water from picking up motor heat while churning inside the pump head. The BlowHole TM uses an aluminum cast motor which dissipates heat before it can reach the water. Nearly Silent Operation The BlowHole TM pumps employ graphite motor bearings to ensure the quietest operation. You will have to put your ear near it to hear it.
Blowhole BH 850 High Water Pump...more info.
Blowhole BH 1100 High Water Pump...more info.
Blowhole BH 1450 High Water Pump...more info.


I wrote this poem last year at the end of the April Challenge. It had been a time of extremely intense connections as a poetic community. This year there are many new voices and "The Street" has been bustling sometimes with so many poems that it has been difficult to comment. There has also been a new platform, which I for one, consider as the kindest statement I can make – a "mixed blessing." Nevertheless, I thought that I would share the poem from last year as a reminder to all of the sense of collective community that so connected us one to the other and to include those who are now new voices to understand how wonderful this community can be… Thank you Robert for another wonderful April… and thank you to all .. the talent has exploded here and I am thrilled to stand in the center watching the sparks shoot like comets across the night sky.
We are not at the end – but we are close – Goodnight to all!
I missed last year's PAD. Thank you for sharing!


text:
Anyone following Submer knows that we are fervent supporters of OCP. Join us together with Lesya Dymyd and Steve Helvie of OCP to discuss the roadmap and how the foundation will continue to promote innovation and standardisation.
Among the topics we will cover:
- OCP in the world: how the integration and the adoption of OCP standards vary from one continent to another.
- The current challenges with OCP adoption and OCP organization.
- The path from innovation to standardization.
- The contemporary scenario: who's innovating and who's not?
- What are the hottest upcoming tech areas?
- Planning and executing: how a big organization should embrace innovation?
Title: What Open Compute Project has in store for us all in 2020!
Time: 9:00 PDT, 12:00pm EDT, 18:00 CET
Next Webinar: What Open Compute Project has in store for us all in 2020!
*By clicking 'Submit' you accept our Privacy Policy
Thank you! Your submission has been received.
Steve Helvie
VP at Open Compute Project
Everywhere Steve goes, be sure he will find a way to go for a run. And truth is that Steve has seen his fair share of world: from US (BS in Agriculture Economics and MA in Economics) to Asia (acting first as a Manager and then as a Director at Microsoft for almost 10 years) and then to Europe (London) where he started his career as an evangelist of IT modernization and open-source software platform for cloud computing.
Steve is the VP of the Open Compute Project Foundation: if you'd like to join OCP, he's the (big) guy you want to talk to. Probably while running, so you better be prepared.
Lesya Dymyd
Innovation Engineer at 2CRSi, R&D and a EU Regional Lead at OCP
With a Ph.D in management, a solid background in economics and technological innovation, Lesya is a EU Regional Lead at the Open Compute Project Foundation and a Strategic Innovation Engineer at 2CRSi, R&D.Lesya has acted in various roles, including research, corporate analysis, industry analysis, new process and project management.Lesya is known to be a voracious reader… at least 30 books during the past 2019!
We use cookies to enhance your experience. By continuing to browse this site you agree. More Info


text:
Official Trailer Released For 'The Good Liar' Starring Helen Mirren, Ian McKellen
By The Movie God | @ | June 27th, 2019 at 2:00 pm
Warner Brothers has released an official trailer for The Good Liar from Academy Award winner Bill Condon, who previously directed everything from Gods and Monsters, Kinsey, and Dreamgirls to Candyman: Farewell to the Flesh, both parts of The Twilight Zone: Breaking Dawn, and Disney's live-action Beauty and the Beast.
The movie stars fellow Academy Award winner Helen Mirren and nominee Ian McKellen. It's based on author Nicholas Searle's novel of the same name, with the screenplay written by Jeffrey Hatcher (The Duchess, Casanova). It once again re-unites McKellen and Condon, who previously worked together on Gods and Monsters, Beauty and the Beast, and Mr. Holmes, which was also written by Hatcher.
You can find a synopsis for The Good Liar and watch the trailer below.
Topics: Movies, News, Trailers
Tags: Aaron L. Gilbert, Andrea Johnston, Anjay Nagpal, Bill Condon, Carter Burwell, Greg Yolen, Helen Mirren, Ian McKellen, Jack Morrissey, Jason Cloth, Jeffrey Hatcher, Jim Carter, John Stevenson, Keith Madden, Nicholas Searle, Richard Brener, Russell Tovey, The Good Liar, Tobias Schliessler, Virginia Katz
Restricted Trailer Released For New 'Shaft' Movie Starring Samuel L. Jackson
By The Movie God | @ | June 6th, 2019 at 6:55 pm
Back in February we saw an official trailer for Shaft starring Samuel L. Jackson as the title character.
Now Warner Bros. has released a restricted trailer for the movie, which is the fifth in the franchise which began in 1971 and the second starring Jackson as Shaft. You can find a lengthy synopsis for the movie and check out the NSFW restricted trailer below.
Topics: Movies, News, Sequels, Trailers
Tags: Alex Barnow, Alexandra Shipp, Christopher Lennertz, Cliff Smith, Dave Jorden, Ira Napoliello, Jessie T. Usher, John Davis, Josh Mack, Kenya Barris, Larry Blanford, Marc S. Fischer, Matt Lauria, Method Man, Olivia Miles, Peter S. Elliot, Regina Hall, Richard Brener, Richard Roundtree, Samuel L. Jackson, SHAFT, Tim Story, Titus Welliver, Wynn Thomas
'Annabelle Comes Home': New Trailer For Latest 'Conjuring' Universe Movie Released
By The Movie God | @ | May 28th, 2019 at 1:00 pm
Warner Bros. Pictures has released a second official trailer for Annabelle Comes Home, the third entry in the Annabelle franchise which is part of The Conjuring Universe.
Click on over to the other side for a lengthy synopsis and to give the new trailer for Annabelle Comes Home a watch.
Tags: Annabelle, Annabelle 3, Annabelle Comes Home, Dave Neustadter, Gary Dauberman, James Wan, Jennifer Spence, Joseph Bishara, Judson Scott, Katie Sarife, Kirk Morri, Leah Butler, Madison Iseman, McKenna Grace, Michael Burgess, Michael Clear, Michelle Morrissey, Patrick Wilson, Peter Safran, Richard Brener, The Conjuring Universe, Vera Farmiga, Victoria Palmeri, Warner Brothers
Watch: Official Trailer For New 'Shaft' Starring Samuel L. Jackson
By The Movie God | @ | February 7th, 2019 at 1:00 pm
Warner Bros. Pictures has released an official trailer for Shaft, the latest entry in the franchise which once again sees Samuel L. Jackson playing the title character.
In the movie, Shaft's son is trying to figure out the truth behind his best friend's death and looks to his father for help. You can find a full synopsis and check out the trailer below.
New Trailer/TV Spot For DC's 'Shazam!' Released
By The Movie God | @ | January 21st, 2019 at 6:00 pm
Warner Bros. Pictures released a short new trailer for the latest DC Films title Shazam! last night. Or maybe it's a long TV spot. They don't really specify what exactly it is.
The new preview is longer than the usual 15 to 30-second TV spot at just under a minute in length, but shorter than most trailers. But this is Shazam! we're talking about. The teaser trailer we saw back in July was longer than most official trailers at nearly three minutes. So this one is doing its own thing at this point, and we're just along for the ride.
You can find the video below along with a synopsis.
Tags: Asher Angel, Bill Parker, C.C. Beck, Christopher Godsick, Cooper Andrews, Dany Garcia, Darren Lemke, Dave Neustadter, David F. Sandberg, DC Films, Djimon Hounsou, Dwayne Johnson, Faithe Herman, Geoff Johns, Grace Fulton, Henry Gayden, Hiram Garcia, Ian Chen, Jack Dylan Grazer, Jeffrey Chernov, Jovan Armand, Mark Strong, Marta Milans, Peter Safran, Richard Brener, Shazam, Walter Hamada, Warner Brothers, Zachary Levi


text:
Strange Bedfellows? Big Oil And Environmentalists Team Up Against Trump
Posted at 6:00 pm on June 13, 2019 by Joe Cunningham
The Trump Administration has been a big supporter of corn farmers and the ethanol industry, most recently by keeping a promise the President made a year ago to lift restrictions on E15 – a blend of 15% ethanol and 85% gasoline.
It's a big win for a heavily-subsidized industry (farmers, in general, are arguably the biggest beneficiaries of government handouts next to the poor, and corn farmers get a huge chunk of that), though it's a bit worrisome that a Republican administration would be choosing winners and losers in the energy industry much like the Obama administration did before.
However, there are two groups that are never, ever, ever on the same side of anything who have decided that, for this one moment in American history, they must work together. Those two groups are oil companies and environmentalists.
Yeah, things have gotten strange.
Here's what's happening: The Clean Air Act specifically permitted E10 – like the blend above, except at 10/90 – but outlawed any blend above that because it could have an impact on the environment. That's where the environmentalists come in. They are not happy about the impact this is going to have.
Specifically, the environmental law exempts E10—and not E15—from its standard for Reid vapor pressure, a measure of how clean the fuel burns, and how much smog it creates. (Lewis says the question of whether environmental groups would sue was "still up in the air.")
The Clean Air Task Force and other non-profits oppose corn ethanol production on the basis that its expansion would convert more acres from habitat to farmland, polluting the air and water, and releasing more greenhouse gases into the atmosphere—ultimately, unleashing the worst outcomes of climate change.
Surprisingly, Big Oil has chimed in and said, yeah, "this is unlawful."
The largest oil refiner group in the country filed a petition with the U.S. Court of Appeals to block the Trump administration's rule just this week, claiming the EPA overstepped its authority in revoking the restrictions. "A waiver for E15 is unlawful, plain and simple," Chet Thompson, president and chief executive officer of the American Fuel & Petrochemical Manufacturers, said on Tuesday.
On this point of critique, the oil refiners align with environmental groups, which have made similar charges against E15 in the past. Jonathan Lewis, senior counsel for the environmental non-profit Clean Air Task Force, says the oil groups' comments filed in April echo conservationists' complaints. "Their interpretation of the relevant Clean Air Act provisions and why those provisions prohibit the EPA from taking this step were accurate," he says.
And, to be fair, it is unlawful. The EPA is making changes to legislation – in effect, re-writing it – to suit its needs. The EPA is not elected to do that – in fact, it's not elected at all. The kind of thing we've railed against for years, this non-legislated rule-making, goes against everything stated in the Constitution. So, why would a Republican administration go for it?
Joe Biden, Dazed and Confused, Promises If You Like Your Health Insurance, You Can Keep Your Health Insurance
For the money. The ethanol industry props up quite a few politicians, and President Trump, in particular, wants to ensure he keeps conservative farmers on his side so that he doesn't have to deal with threats from the far right (except, of course, providing handouts and demanding handouts are both as far from the far right as it gets). It's not, as Trump tells farmers "more energy", but "more money".
There's another concern for oil and gas companies: This is probably going to require a major infrastructure overhaul from plants on down to gas stations.
You see, E10 is corrosive, and E15 is even more so. In fact, it's corrosive enough that in all likelihood pumps, storage tanks, and a lot of other infrastructure making up your basic gas stations will have to be replaced. That type of overhaul isn't cheap, and the consumer is definitely going to feel it. In fact, you'll feel it all sorts of ways as it's likely that our current penchant for starting trade wars will affect the cost of the materials needed to make these infrastructure upgrades.
You're looking at a time when the economy is great up until the price of gas eats up more and more of your paycheck. Then, things will start going south.
So, whether you're looking at is as un-Constitutional or as something that will negatively effect your financial status, you may find that you are just as strangely aligned with environmentalists and Big Oil, too.
Tags: big oil Donald Trump E15 Energy environmentalism ethanol
Socialism And The Welfare State In Nordic Nations
A New Home At Bearing Arms
Kellyanne Conway to reporter who asked which countries the Squad should go back to: "What's your ethnicity?"
Chicago Mayor Says the City Will Permanently Ban ICE from Accessing Police Databases