SANTA CLARA, Calif. (AP) Frank Gore carries a heavy load every week for the 49ers and it will be more of the same when San Francisco hosts the Miami Dolphins on Sunday.
Gore, who gained 58 yards on 23 carries last Sunday against the Rams, and cornerback Tarell Brown took a little time off to heal nagging injuries this week - but both insisted they will be ready for the Dolphins.
Gore is nursing a wrist problem, while Brown's hamstring has been problematic.
San Francisco will be trying to rebound from a 16-13 overtime loss to St. Louis.
Harbaugh said there were two ways to respond after a loss.
Wide receiver Mario Manningham remains doubtful with a shoulder injury, and several other players are listed as probable.
Manningham's absence could clear the way for rookie A.J. Jenkins to make an impact.
Gore, who went to the University of Miami, needs 28 yards rushing against the Dolphins to reach 1,000 for the sixth time. Only the Rams' Steven Jackson has more 1,000-yard seasons (seven) among active players.
Gore also needs one touchdown to match Roger Craig and Joe Perry (50) for most in franchise history.
Harbaugh did say the coaching staff has been talking about ways to share the load at running back.
The 49ers have won nine consecutive home games in December, second only to the New England Patriots (19). The Dolphins have won the past two meetings between the teams, the last on Dec. 14, 2008, in Miami. The Dolphins also won in San Francisco in 2004.
The 49ers last beat Miami at home in 2001.
NOTES: Dolphins OT Jonathan Martin played for Harbaugh at Stanford. ... The 49ers' defense has allowed 23 opposing drives to reach the red zone, the fewest in the NFL.


text:
India's Government Must 'Stop Treating Critics as Criminals,' Rights Group Says
Activists during a protest demanding the release of Kanhaiya Kumar, a Jawaharlal Nehru University students'-union leader accused of sedition, in New Delhi on March 2, 2016
K Asif—The India Today Group/Getty Images
By Rishi Iyengar
India must do away with laws that allow its government to silence dissent and impugn freedom of speech in the country, international advocacy group Human Rights Watch said in a report released Tuesday.
The report, entitled Stifling Dissent: The Criminalization of Peaceful Expression in India, examines the Indian Penal Code and details several laws against sedition, hurting religious sentiments, defamation and hate speech that the group says belie India's status as a vibrant democracy.
"Putting critics in prison or even forcing them to defend themselves in lengthy and expensive court proceedings undermines the government's efforts to present India as a modern country in the Internet age committed to free speech and the rule of law," Meenakshi Ganguly, Human Rights Watch's South Asia director, said in a statement.
The report cites specific examples such as the recent controversy at New Delhi's Jawaharlal Nehru University, where a student president was jailed under the colonial-era sedition law for allegedly shouting anti-India slogans. Freedom of expression has repeatedly become a matter of debate in India over the past year, with many accusing the right-wing administration of Prime Minister Narendra Modi of intolerance toward dissenters and religious minorities.
Write to Rishi Iyengar at rishi.iyengar@timeasia.com.

redpajama_set_name: RedPajamaCommonCrawl


text:
Q: Unable to correctly parse JSON object to a JavaScript Object I have the following Json data that I am trying to transform to a Javascript object. Initially I tried using JSON.parse but it was saying an error so I figured the Json object was incorrectly configured. I did the following to resolve the issue.
The JSON is given in the following form:
{}{}{}...

But I wanted to change it to the following format:
[{},{},{}...]

So I did the following
var news = fs.readFileSync("data.json", "utf8")

//Stringified data
var newsdata = JSON.stringify(news)

// add comma in between
data = newsdata.replace('}{', '},{')

// The resulting data doesn't have a comma between individual objects
parsedNews = JSON.parse(data)

The str.replace() command isn't changing it to a desired format. How should I resolve the issue?

redpajama_set_name: RedPajamaStackExchange


Jon Levine is an actor that lives in Atlanta, Georgia. He's appeared in numerous films, TV shows and commercials throughout his career. Currently, Jon is represented by the Aligned Stars Agency.
Before acting, Jon spent several years as a standup comedian. He has performed in a multitude of standup shows across the country as the host, guest, and featured comedian, as well as numerous corporate and private events. He's also served as the host/emcee at Belushi's Comedy Club in Fort Myers, the Comedy Zone Sunny Isles Beach, and the Improv in West Palm Beach.
Personally, Jon moved from Fort Lauderdale, Florida to Atlanta in 2016. He's been a grocery bagger, a movie usher, a waiter, a bartender, a producer, a reporter, a sportscaster, an internet entrepreneur, a director of marketing, a comedian, and now an actor.
Jon purchased JonLevine.com in 1999 and this is the sixth iteration of the site. So, read, enjoy, comment, participate, love, hate… just do whatever it is you like to do. It's cool.


Giving to a charity is a great idea, but it can sometimes be daunting to find one to donate to. Currently, there are are over 1.5 million nonprofit organizations in the United States, which is pretty overwhelming if you are starting from scratch when determining who to give to. If you at least know what type of charity you want to give to, you can search by category using Charity Navigator. Websites like Give Well can help too. Give Well is a nonprofit that researches charities and ways to give, then provides details on their research. The research is based on how much good a program does (lives saved or improved, for example) per dollar spent. The first two charities on our list belong to Give Well's list of top charities, and the last three are just three additional charities we think are worth your consideration.
GiveDirectly helps many people in poverty, which is one of the criteria that Give Well considers for a good charity. The staff identify needy people in Uganda and Kenya. They determine who needs the donation by electronic data capture, digital mapping, and remote sensing. Their average recipient lives on just sixty-five cents per day.
When a donor provides a donation, the donation is transferred electronically to the recipient's cell phone. They put at least 90 percent of each donated dollar directly into "the hands of the poor." The money goes directly to the person in need, and they must set their own priorities, instead of having someone from the organization tell them what to do (many buy food, invest, or save for their children's education.) You can donate here.
Led by Evidence Action, the Deworm the World Initiative includes the belief that mass treatment at schools is a safe, simple, and cost-effective way to make a difference, which also impacts education and future health. Research has shown that students who are part of the treatment group have 4 percent more total years of schooling, as well as a 6 percent higher chance of being in very good health as adults (according to their own reporting.) The total cost per child of deworming is less than fifty cents per year.
Currently, over 600 million children are at risk of parasitic worm infections, and this charity is fighting against that high number. The infections can interfere with nutrient uptake, as well as lead to anemia, malnourishment, impaired development, and more. One study found that deworming children in Kenya reduced their absenteeism by 25 percent. Giving to this charity can make a direct impact on children's ability to be healthy and to do well in school. Donate here.
Project C.U.R.E. (Commission on Urgent Relief and Equipment) is the largest provider of medical supplies and equipment. It has received several awards, including the GuideStar Exchange Silver Seal, the Charity Navigator Four-Star Rating, and it was ranked as one of the 20 Most Efficient Large U.S. Charities by Forbes. Project C.U.R.E. directly helps the health of people all over the world. Staff deliver various tools that help fight disease along with vaccines, provide surgeries, and help with childbirth. Hospitals, clinics, and also health centers are given assistance as well. The charity offers several programs, including several cargo kit delivery programs. They accept donations of supplies or money, and also utilize volunteers. You can give here.
If you love animals, you've probably heard of the Humane Society. There are many organizations that try to help animals, and you can pick from any of them. However, the Humane Society is the largest animal protection organization in America. Staff and volunteers advocate for better laws to protect animals, campaign for reform, provide shelter and emergency care, investigate cruelty, and also have sanctuaries and wildlife rehabilitation centers.
You can do something as simple as signing a pledge not to harm an animal, or you can volunteer your time, and of course, you can give your money as well. One of the benefits of the Humane Society is that they have locations all over the nation, and you can see what your money is actually doing. However, there are many different agencies that help animals. Here is a list.
This group analyzes policies, and attempts to create cost-effective solutions. They work with the public, as well as private and nonprofit sectors. They also provide data and research to policymakers and elected officials to help them make informed decisions, as well as to help inform the public on issues. They are fighting to end homelessness, starting with communities.
They also offer several solutions to combat homelessness, including providing people who are homeless with homes as quickly as possible; prioritizing permanent housing solutions; helping families, youth, and veterans; and creating community plans. They also provide training to help communities fight homelessness. You can donate here.
If you are interested in fighting homelessness but are looking for a different organization, here is a list of some of the other charities that fight homelessness.
There are so many charities that it is difficult to determine which are the "best." There are many good ones out there, so take your time, research, and if you don't choose one of these five, choose one that has the mission and values that you are looking for.


text:
3 Easy Ways To Improve Your Pickleball Game
As fun as it is, Improving can be hard because it may take longer than you would like. You have to learn new skills and then drill them in to your muscle memory over long periods of time. However some fixes can be quick and have a big impact on your game. Here are 3 easy ways to improve your game today!
The #1 Way to Improve Your Game In 2019
Welcome to PrimeTime Pickleball, my name is Jordan Briones and in today's video we just want say Happy New Year and thank you and also at the end of this video I'm gonna tell you the number one way that you can improve your game and take your game to the next level. I...
How To Be Competitive Even When You Start At A Disadvantage with Daniel J Howard
We're very lucky to be joined in this video by our guest pro, Daniel J Howard. Daniel shows us a great game that levels the playing field even with one player starting at a significant disadvantage. This is a great game to rotate through both roles that will work all...
Improve your Pickleball Backhand with this fun game
In this video we're going to be introducing you to a Doubles Game played cross court only on the odd side in which you will have the opportunity to work on all your skills using mostly the backhand side. The game is called Skinny Singles from the "odd side".
Pickleball Forehand | "Skinny Singles" Cross-Court Doubles Game
In today's video we're going to be introducing you to a Doubles Game played cross court only on the even side in which you will have the opportunity to work on all your skills using mostly the forehand side. The game is called Skinny Singles from the "even...
Ultimate 2-Person Pickleball Doubles Drill | How to work on your doubles game with only 2 people
In today's video, we will show the Ultimate 2-person Doubles Game. It's a game that most closely resembles a doubles game played with 4 people but that can be done with just two. With it you can work all the skills that you will need for a full doubles game:...
The 5 Minute Warm Up | A quick pre-game pickleball warm up when you have limited time
Have you ever been in a tournament situation when your match was called leaving you only a few minutes to warm up? Well this video is for you. Today we're going to go over a series of drills that we like to do that cover almost all the shots you're going to need in a...
Dingles Dink Consistency Game with Simone Jardim
If you've been in the pickleball community for any amount of time, you have probably heard of Simone Jardim. Simone is currently regarded as THE top player in the women's game. She has won every major tournament in pickleball in singles, doubles and mixed doubles. In...
3 Keys To A Killer 3rd Shot Drop
© Copyright 2020 - All rights reserved | Site Map | Privacy Policy
AFFILIATE DISCLOSURE TERMS OF SERVICE DISCLAIMERS PRIVACY POLICY


text:
Q: Missing Client Certificate Chain Issue while connecting with Service There is a spring boot application that connects with a SOAP-based service. Our application has an MQ listener that receives messages from a local queue. Once a message is dequeued from that queue, it makes an API call to service.
All the communication to SOAP-based service is done via 2 way SSL.
Now we're facing a problem while connecting with the SOAP-based service. There is a missing client certificate chain error received intermittently at the SOAP-based service end.
In our JmsConfig class, we've set concurrency on listener factory to 10 as highlighted below for having concurrent executions and parallel processing of messages from queue.
 @Bean
 public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(){
   DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
   try {
          factory.setConnectionFactory(cachingConnectionFactory(jmsConnectionFactoryX20()));
          factory.setConcurrency("10");
   } catch (JMSException e) {
          e.printStackTrace();
   }
   return factory;
 }

When we further call SOAP service from spring boot application once messages are consumed, missing client certificate chain error is coming in SOAP service logs for most of the messages. In a bulk load of 1k messages in the queue and with concurrent executions thereafter, around 850 messages failed at SOAP service end and only 150 passed.
Error is coming only while concurrency is set programmatically as shown via the above code snippet. If I comment out the setConcurrency call, all 1k messages get processed at SOAP service end without any certificate chain error.
Could you please have a look at our configuration and share some thoughts on why the concurrency is causing this error.
ApplicationWebServiceImpl.java (Calling callWebService() method from JMS listener method)
  import org.springframework.beans.factory.annotation.Autowired;
  import org.springframework.beans.factory.annotation.Value;
  import org.springframework.stereotype.Service;
  import org.springframework.util.StringUtils;
  import org.springframework.ws.client.core.WebServiceTemplate;
  import org.springframework.ws.soap.SoapMessage;

  @Service
  public class ApplicationWebServiceImpl implements ApplicationWebServices {

  @Autowired
  private WebServiceTemplate wsTemplate;

  @Value("${soap.clientEndpoint}")
  private String clientEndpoint;

  @Value("${soap.action}")
  private String soapAction;

  @Override
  public Object callWebService(Object request, String serviceName) throws ClientApplicationException {

      return wsTemplate.marshalSendAndReceive(clientEndpoint + serviceName, request, message -> {
          SoapMessage msg = (SoapMessage) message;
          msg.setSoapAction(soapAction + StringUtils.capitalize(serviceName));
      });
  }
}

ClientApplication (Spring boot main class)
@SpringBootApplication
@ComponentScan("com.abc.ca")
public class ClientApplication {

  @Value(value = "${cert.keyStoreFileName}")
  private String keyStoreFileName;

  @Value(value = "${cert.trustStoreFileName}")
  private String trustStoreFileName;

  @Value(value = "${cert.disabledAlgorithms}")
  private String disabledAlgorithms;

  @PostConstruct
  public void getKeyTrustStore() {
      Security.setProperty("jdk.certpath.disabledAlgorithms", disabledAlgorithms);
      String filePath = Thread.currentThread().getContextClassLoader().getResource(keyStoreFileName).getFile();

      System.setProperty("javax.net.ssl.keyStore", filePath);
      System.setProperty("javax.net.ssl.keyStorePassword", "changeme");
      filePath = Thread.currentThread().getContextClassLoader().getResource(trustStoreFileName).getFile();

      System.setProperty("javax.net.ssl.trustStore", filePath);
      System.setProperty("javax.net.ssl.trustStorePassword", "changeme");
  }

  public static void main(String[] args) {
      SpringApplication.run(ClientApplication.class, args);
  }
}

A: Just to update, I've resolved above problem by explicitly calling setMessageSender on wsTemplate and setting HttpsUrlConnectionMessageSender.
Thanks @chughts for giving me a pointer.
Cheers!
 wsTemplate.setMessageSender(httpsUrlConnectionMessageSender());

 @Bean
 public HttpsUrlConnectionMessageSender httpsUrlConnectionMessageSender() throws Exception {
     HttpsUrlConnectionMessageSender httpsUrlConnectionMessageSender = new
                HttpsUrlConnectionMessageSender();

    httpsUrlConnectionMessageSender.setTrustManagers(
            loadDefaultTrustStore());

    httpsUrlConnectionMessageSender.setKeyManagers(
            loadKeyStore());

    httpsUrlConnectionMessageSender.setHostnameVerifier(new HostnameVerifier() {
       @Override
       public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) {
          if ("localhost".equals(hostname)) {
            return true;
          }
          return false;
       }
    });
    return httpsUrlConnectionMessageSender;
}

private KeyManager[] loadKeyStore() throws KeyStoreException,
     FileNotFoundException, IOException, NoSuchAlgorithmException,
     CertificateException, UnrecoverableKeyException {

     KeyStore keyStore = KeyStore.getInstance("jks");

     FileInputStream fileInputStreamKeyStore = new FileInputStream("/ca/appKeystore.jks");
     keyStore.load(fileInputStreamKeyStore,"changeme".toCharArray());

     KeyManagerFactory keyFactory = KeyManagerFactory.getInstance(KeyManagerFactory
            .getDefaultAlgorithm());
     keyFactory.init(keyStore,"changeme".toCharArray());
     return keyFactory.getKeyManagers();
}

private TrustManager[] loadDefaultTrustStore() throws NoSuchAlgorithmException,
                KeyStoreException {
     TrustManagerFactory trustFactory =
     TrustManagerFactory.getInstance(TrustManagerFactory
        .getDefaultAlgorithm());
     trustFactory.init((KeyStore)null);
     return trustFactory.getTrustManagers();
}


text:
https://www.thehour.com/stamford/article/Stamford-seeks-62M-from-state-to-build-magnet-8092798.php
Stamford seeks $62M from state to build magnet school
By MIRANDA ZHANG Times Staff Writer
Published 12:21 pm EDT, Tuesday, March 24, 2015
Hour photo / Erik Trautmann Stamford Mayor David Martin and Sister Susan Cunningham, President of The Sisters of St. Joseph Corporation, take part in a presentation of the keys ceremony at the former Sacred Heart Academy which the city purchased Thursday as members of the Planning Board, Board of Finance, Board of Representatives and Board of Education look on.
Hour photo / Erik Trautmann Stamford Mayor David Martin and Sister Susan Cunningham, President of The Sisters of St. Joseph Corporation, take part in a presentation of the keys ceremony at the former Sacred
STAMFORD — The city has begun to review the architectural design of a new inter-district magnet school on Strawberry Hill Avenue as it awaits state funding for the $77 million project.
The overcrowding situation at Stamford Public Schools has prompted the city to turn the former Sacred Heard Academy building at 200 Strawberry Hill Ave. into a Rogers International School's magnet branch. City and school district officials testified for a House bill last Thursday to expedite state funding for the project. They asked the state to kick in $62 million, or 80 percent of the total estimated cost.
"Signs are positive for receiving the funding even though its very difficult revenue year," Mayor David Martin said after the testimony. "And that's partly why we went to testify for the bill. We'll probably be receiving the absolute assurance in July or early August."
State representatives have brought up the five-year-old moratorium on interdistrict magnet schools in Connecticut, according to Board of Education member Jackie Heftman, who was in Hartford with Martin and Superintendent Winifred Hamilton.
The moratorium was an attempt to limit magnet school costs by delaying planned enrollment increases.
But Heftman, Martin and Hamilton have stressed that the new school is going to be a branch of the existing magnet school as opposed to a different school.
The Board of Representatives approved $65 million last June for the project. On top of that, the city has purchased the property at $10 million from Sacred Heart Academy last September. A group of city officials and board of education members have looked at more than a dozen architect proposals.
Martin said the city spent the money with risk so as not to waste additional time to put shovels in the ground while it awaits the state funding.
No construction work will be started until the city gets the state money, Heftman said.
Among the 30 some projects that the state is considering for grant commitments, Stamford is its second priority after a South Winsor elementary school project, according to the bill.
According to the House bill, the state should develop a standard checklist for construction projects of school buildings by October 1; the state should also set up a clearinghouse to collect and distribute school building project plans.
Stamford hopes to speed up the process of getting the funding, state Rep. Gail Lavielle, ranking member of the General Assembly's Education Committee, said.
Lavielle said the bill will come back to the Education Committee and a final vote on the bill should happen before this legislation session closes in early June.


text:
come on-a my house
I had a very weird experience at a Waffle House almost 20 years ago. It was so weird — so very surreal — that I shied away from the iconic restaurant chain on countless family road trips over the years. Somewhere along the southern portion of Interstate 95, my family (Me, Mrs. P and our young son) had stopped for the evening at a midway point on our drive to Walt Disney World in central Florida. After one night's stay at one of the many motels that dot the off-ramps of the interstate, I loaded the car with our luggage and we set out for the last leg of our journey. Just across the access road from our evening's accommodations was a small, narrow, yellow-topped building adorned with a single line of sans serif type identifying the place as "WAFFLE HOUSE" — plain and simple. Seeing the establishment, I thought I'd grab a couple of cups of coffee for me and the Mrs. to perk us up for the next 300 or so miles. Mrs. P set our son up with a pre-pack bowl of cereal on his molded plastic car tray (that doubled as a play surface for a variety of "Thomas the Tank Engine" toy trains when he wasn't eating) and I popped in to the Waffle House.
It was as though I had stepped into The Twilight Zone. A hunched row of coverall-clad men lined the gold-flecked Formica counter. Some had heavy ceramic mugs poised at their mouths. Others shoveled forkfuls of breakfast into their maws, while still others worked their jaws to chew and digest what they had already eaten. On the other side of the counter, a large man wrapped in a grease-stained apron was bent over a smoking, open grill. His meaty fist clenched a metal spatula that he used to poke and prod a massive pile of hash-browned potatoes. No one said a word. The only sound was made by the spatula clinking against the griddle. (I expected the cook to turn around and reveal himself to be Rod Serling.) I stood by the counter waiting to be noticed. A waitress approached. Her stringy hair was pulled up and tucked under a droopy doily holding the mess in place. She wore a stained apron that matched that of the cook. (Perhaps it was the official Waffle House uniform.)
"Wut kin I getcha?," she asked with a tone that implied she was doing me a favor.
"Two cups of coffee to go, please.," I requested.
She looked at me as though I just spoke to her in a rare Swahili dialect. "Wuuuut?," she lolled in a lazy Southern drawl. I repeated my order, this time more slowly, trying to enunciate each word. She shook her head and fumbled under the counter for a minute. When she brought her hand back into view, her fingers were laced through the handles of two off-white ceramic mugs.
"We got theeese.," she said, gesturing at the mugs with her head, "We ain't go no other kinda cups."
"You don't have a cardboard cup with a lid?," I asked incredulously.
"Nuh-uh.," she replied as she frowned and shook her head. "Jes' theeese." She was interrupted by a ringing telephone which now took her full attention.. She lifted the receiver and asked, "Huh-lo?" A tinny, electronic voice chattered something unintelligible through the connection. The waitress dropped her hand holding the phone to her side and she hollered something unintelligible toward a man seated at the counter munching on a twisted strip of bacon. Still chewing, the man rose from his seat, dragged himself over to the waitress and took the phone from her hand. He spoke a stream of garbled words that were thick and muddled in Southern vernacular. I swear I could not understand a single word this guy was saying. When he had finished his conversation, he stared at the phone as though he had never seen nor held anything like it in his life. He pushed the brim of his mesh trucker hat back and said, "This phone don't got no hang up button on it. How do I hang it up if'n it don't got th' button?," he said mournfully. He examined the phone more closely, turning it over to various angles and narrowing his eyes as if to discover a secret hidden switch or lever.
Totally spooked by the entire scenario presented before me, I offered my thanks to the waitress and backed away towards to the door. I jumped back into the passenger's side of my car and asked my wife to just find a Dunkin Donuts, relating the otherworldly episode as she drove.
And that was it. That was the only time I ever set foot in a Waffle House. We have driven to Florida numerous times over the years, and we have passed many, many Waffle Houses (there is one at nearly every single exit on I-95 between Philadelphia and Orlando), but we have always turned our noses up at them as a meal option.
Until today.
Last Saturday, Mrs. Pincus and I embarked on another drive to Florida, again with our son — now 28 years old — and his girlfriend. Recently, I had seen some social media posts from a few touring bands (specifically President Obama favorite Low Cut Connie and national pastime rockers The Baseball Project) featuring late-night stops at Waffle House, with its kitschy, Americana charm on full display. As we made our way down the interstate, I suggested we stop for dinner (breakfast served anytime and what's more fun than breakfast for dinner!) at a Waffle House. According to our GPS and Google maps, we had many nearby locations from which to choose. I was rebuffed. As a matter of fact, I was triple rebuffed. I was willing to give Waffle House a shot at redemption, but I was out-voted and we pulled into a Sonic Drive-In near Walterboro, South Carolina. Now, I'm okay with Sonic, but, I really wanted Waffle house.
After a week at the Walt Disney World Resort and not a mention of Waffle House, we packed up the car for the ride home. We decided to call it a night at a creepy little Quality Inn in Lumberton, North Carolina. Surrounding ours and the other hotels, our food options included Subway, Cracker Barrel, McDonald's and Waffle House. My fellow travelers opted to order a pizza from a local Domino's. My suggestion of Waffle House was not even acknowledged.
Early this morning, we decided to forgo the complimentary breakfast to a.) get the hell away from the strange atmosphere of the Lumberton Quality Inn* and b.) get out on the homeward-bound road. Once again, I suggested Waffle House and, once again, I was dismissed.
We headed north and, approximately fifty miles from our morning starting point, we all began to feel a little hungry. We briefly drove through the desolate and sketchy-looking town of Dunn, quickly making our way back to the highway. Approaching Benson, we exited I-95 and immediately found ourselves staring at — you guessed it! — a Waffle House. Mrs. P turned to my boy and his girl crammed into the back seat of my RAV 4 and plaintively offered up Waffle House with a "let's just pacify Dad" tone in her voice. I detected a collective sigh of defeat as they nodded in reluctant agreement. We parked next to a big, maroon Harley and entered the joint, my son muttering "Are you happy now?," as he walked past me in the parking lot.
Where the magic happens.
We were greeted at the door by a smiling young man in a "Waffle House" cap and bow tie, who proudly and warmly afforded a toothy "Good Morning." We seated ourselves at the counter and scanned the colorful laminated menus. A cheerful waitress, whose name tag identified her as "Jaz," provided some of the best coffee I ever had. We each placed our order and watched with fascination as the well-rehearsed assembly line pumped out platter after platter with automated factory-like efficiency. Each person at the grill was tasked with a specific job. One guy manned the five smoking waffle irons. One guy oversaw four multi-slice toasters. One young lady flattened sizzling sausage patties and bacon strips. Another guy prepared the much-storied hash browns, meticulously adding each of the famous supplemental ingredients. The last guy had six frying pans simultaneously cooking eggs. It was truly a spectacle!
Scattered, smothered, covered, peppered.
My coffee was refilled by the smiling greeter after nearly every sip I took. Soon, Jaz flicked our platters to us like she was dealing cards in blackjack. They were welcoming, traditional American breakfasts and they were beautiful! I got two eggs — sunny-side up — a couple slices of buttered toast and a side of world-famous hash browns that were "scattered, smothered, covered and peppered." That's Waffle House lingo for "spread across the grill with onions, cheese and jalapeno peppers." I enhanced the dish with some of their own brand (the humorously named Casa de Waffle) of picante sauce from a fully-stocked condiment caddy, along with a few spicy splashes of Tabasco and I was in business. Everything was de-lish-ous! My travelling party was enjoying their choices as well. We ate and watched the grill-side "entertainment." Several staff members (including the happy crew at the grill) asked how we were enjoying our meal and, of course, my coffee cup was filled again and again. It was comfort food at its best, we didn't want to leave.
When we finally finished every last crumb on our plates, I did my best to hold back a few "I told you so"s, as my family sheepishly admitted that Waffle House was a pretty good choice for this and future travels.
Oh, we'll be back all right. Maybe next time I'll even try the waffles.
*If you find yourself in the vicinity of Lumberton, North Carolina... first of all, I feel sorry for you, but, if you are seeking a place for an overnight stay, I'd avoid the Quality Inn. I would suggest any of the other hotels at the Exit 20 complex. The Days Inn and the Howard Johnson's both looked nice. Hell, the parking lot of the Burger King looked nice in comparison to the Quality Inn (a misnomer if I ever heard one).
Labels: breakfast, driving, food, josh pincus is crying, JPiC, redemption, road trip, vacation, waffles
cool for cats
There are two kinds of people in the world — those who like cats and everyone else. I have had cats in my life ever since I was a little kid. One Saturday afternoon, my dad took me to the local SPCA to pick out a pet. I have always had a natural fear and dislike of dogs, so I gravitated towards the cages on the "cat side" of the building. I wandered in and out of the aisles that were stacked high with small, cage-front kennels each containing a tiny, mewing kitty — their small, fuzzy faces pressed to the thin bars. I smiled at each one, poking my finger through the openings between the metal shafts to touch their soft fur. One little cat, a dapper black and white tuxedo kitty, licked my finger and I was sold. "That's the one!," I announced to my father. He called an attendant over and forked over five dollars, for which we received two cans and one box of food, in addition to the cat itself. They placed the cat in a small, elaborately folded cardboard carrier and we made our way home in the car, the carrier perched on my lap, my fingers again, poking through the holes in the side of the cardboard. Later that evening, we purchased a litter box and a collar with little silver bells on it. I named our new cat "Tinker."
Tinker, as it turned out, was a vicious little shit. That whole "licking my finger" act at the SPCA was an obvious ploy just to get her sprung from the feline hoosegow. Once she got herself fully ensconced in the Pincus household, her true personality came out. She was nasty! She hissed and bit and scratched. She didn't like to be held and she didn't like to play. Who the hell needed a cat then? Luckily, after a year or so of this bullshit, my brother came home with a sweet little kitten with the nicest, most affectionate disposition. We named him "Jingle" and we were very happy. So was Tinker, because now everyone would leave her alone.
When I met my wife, she owned the first in a long line of cats with Grateful Dead-inspired names. "Cassidy" was a beautiful tabby with unusual markings and a disposition so foul, it made me long for bad temperament of Tinker. Cassidy, in addition to her standoffish attitude, liked to climb up on shelves and knock things off to watch them fall and shatter. Cassidy came with us to our newlywed apartment, where she was soon joined by "China*," a sweet-natured little creature that we affectionately called "Kidden." Kidden was the perfect "yin" to the acerbic "yang" that was Cassidy.
Over the many years, we owned many cats. We had as many as three at one time. That meant regular purchases of cat food and, in turn, regular cleaning and changing of cat litter. I remember a friend of mine called one evening to tell me of his recent scuba-diving excursion in the crystal blue waters of Cancun. I listened on the phone as he detailed the underwater sights and his exotic experiences. When he called, I was in the middle of taking the trash out. As he described the clear, azure depths and the colorful schools of fish, I looked down at my hands. One was gripping a bag of soiled disposable diapers from my son's room and the other was heavy with shit-spiked clumps of used cat litter. Was this what my life had been reduced to?
Having cats, while thoroughly enjoyable, can be a burden at times. We often arranged for someone to come over and feed them when we went away on vacations. We would leave detailed instructions for food distribution and procedure for cleaning the litter box (a job my father-in-law absolutely detested). Our cats broke numerous knick-knacks in our house. They threw up on carpets and beds and, at various times, pissed on the floor. But, don't get me wrong! They also played and purred and brought us a little bit of joy.
However, my favorite thing about cats is: if you want to play, they'll play. If you want to just sit, they are happy to find something to do themselves. With a cat, you can have a pet when you want to and they are fine with that as long as you and your thumbs are around to operate the can opener for feeding time. You can't say that for dogs. Dogs need constant attention and care, like a sick child.
When our last cat, Maggie**, died, my wife and I (mostly me) decided that we were through with pets. That was eight years ago and it was quite liberating. We gave away the remaining, unopened cans of cat food and bags of cat litter to friends who were still deep in the throes of pet-raising. Suddenly, we could come and go as we pleased — no longer concerned about rushing home to feed a cat or worse, cleaning up vomit. We could go away for an extended weekend without making a frantic phone call to get someone to look in on our cat. I still liked cats, I just didn't need to own one.
Kitteh.
My son and his girlfriend bought a house recently. After unpacking the boxes and arranging the rooms and hanging the pictures, they did the next logical, domestic thing they could think of — they got a cat. It's a cute, playful little guy that my wife refers to as our "grandkitty." I find it funny that my son, who never changed a litter box in his life and only fed our cats a handful of times, is now tasked with the responsibility of full-time caregiver to his four-pawed roommate. And while I love to see that little guy (the cat, I mean), I am quite happy to be permanently retired from the cat business. Occasionally, my wife has suggested getting another cat, but I quickly remind her of how accustomed we have become to our freedom.
Plus, we no longer have a box of shit in our house.
* short for "China Cat Sunflower"
** short for "Sugar Magnolia"
Labels: cat, cats, home, josh pincus is crying, JPiC, kitty
my shit's fucked up
Medicated!
In 1857, Joseph Gayetty introduced the public to "Gayetty's Medicated Paper for the Water-Closet." Prior to Mr. Gayetty's invention, people used some of the most primitive, unsanitary and barbaric methods of... of... well, cleaning up after themselves after using the bathroom. I'll skip the gory details and say that Mr. Gayetty doesn't nearly get the credit he deserves. His name, in my opinion should be spoken with the same reverence as Benjamin Franklin and that lying, thieving, claim-jumping bastard Thomas Edison. Gayetty's folded sheets of aloe-enhanced disposable cloths were the standard in bathroom cleanliness, remaining relatively unchanged for nearly four decades. Obviously, it was a vast improvement from the previous way of taking care of business and the public was duly satisfied.
We're on a roll now!
Just before the turn of the twentieth century, paper manufacturing brothers Clarence and Irwin Scott made a slight improvement on Gayetty's medicated paper. Instead of neatly folded stacks, the Scotts put 1000 perforated sheets on a continuous roll. Once again, the bathroom tissue industry was revolutionized. The Scotts made a fortune and a new market standard was achieved. Over the years, many attempted improvements were developed and introduced, but they never caught on and were dismissed as fads and novelties.
In early 2001, paper giant Kimberly-Clark (who, six years earlier had acquired competitor Scott Paper), decided that it would try to improve upon the unimprovable commodity of toilet paper, despite extensive market research telling them otherwise. Against better judgement, they launched a product called "Cottonelle Fresh Rollwipes" in a very aggressive, nationwide campaign. They flooded every available advertising outlet — newspapers, television, magazines. They even got Jay Leno to give a live plug on the Tonight Show. Kimberly-Clark anticipated $150 million in sales the first year and America to change its collective approach to lavatory tidiness. Not surprisingly, it didn't pan out to the company's expectations. The $35 million media blitz was a bust, when a planned goodwill tour by a mobile restroom was cut short when the public's focus turned to personal safety rather than personal hygiene after the attacks on September 11th. However, Kimberly-Clark was determined to make this thing work goddammit! and production of Cottonelle Fresh Rollwipes continued, although company executives revealed that "sales are so small they aren't financially material."* (Cottonelle Fresh Rollwipes have since been reimagined and no longer come on a roll. They come in a tub and are known as Cottonelle Fresh. They are marketed the same as baby wipes. Sales are light.)
So, things stayed pretty much the same as they had been. People were satisfied with the post-number two cleaning process and all was good in the world. Other companies (oh, I'm looking at you, Nabisco!), not content with the unwavering success of their products, looked for unnecessary improvements, But, as far as the bathroom was concerned, it was business as usual.
W A R N I N G !
I was pretty discreet and restrained in the first part of this blog entry, but the gauntlet has been thrown, the gloves are off and — pardon my all-too-obvious pun — the shit is about to hit the fan.
Now, all of a sudden, someone thinks humans have been shitting the wrong way and they are determined to correct our misguided elimination process. Look, no one has to be taught how to shit. Cavemen shit. Primitive tribes shit. Babies shit without instruction. As they get older, they only have to be taught where to shit, not how to shit. Shitting is an instinct, like breathing. It's something we just do. And if we didn't, we'd die. See? It is a lot like breathing.
I got an email from Bed Bath and Beyond the other day. I get emails from them frequently because I bought a box of Keurig K-Cups from them four years ago and now I'm stuck on their mailing list. Actually, they were the inspiration of a blog entry, so I don't unsubscribe in hopes I can be inspired/pissed off again. Bingo! Payoff! This particular email touted a product called "Squatty Potty," a footstool that, evidently, the human race should have been using all along because we have no idea how to shit. Really? Really? According to the ad, the shrewd entrepreneurs on the show Shark Tank loved this. I guess, as smart as they are, they don't know the correct way to shit either. So, now they're shitting correctly and making even more money by investing in a combination footstool/shitting aid. No wonder I'm not rich.
I can understand a garden hose that coils itself up after the water is turned off as an improvement on the standard green hose we've been sold for for years. I certainly understand the need for a microwave oven that can cook food faster than that big, bulky oven that takes up so much floor space your the kitchen. Phones without cords — great! A GPS over a road map or stopping to ask directions — absolutely! But, come on! Convincing me that, after thousands and thousands of years, someone has determined that people require a change in the way they shit? And that information doesn't come from the Surgeon General or some similar official? Instead, it comes from a couple of guys with a website, four rich investors with dollar signs in their eyes and a chain store that proudly accepts their own expired coupons?!?
You gotta be shittin' me!
*quote from an article in The Wall Street Journal
Labels: accomplishment, bathroom, business, josh pincus is crying, JPiC, marketing, people, products, rant, shit, stupidity
angst in my pants
I have been going to concerts for forty years. Starting with my first show (Alice Cooper with special guest Suzi Quatro), concerts have been a pretty big deal. I saw most of them at Philadelphia's self-proclaimed "America's Showplace," The Spectrum, an 18,000 seat area with some of the worst, sound-killing acoustics you ever heard. It was a multi-purpose facility, home to the Philadelphia Flyers and Philadelphia 76ers, much better suited for sporting events than concerts. I saw performances by Elton John, Jethro Tull, Queen, Fleetwood Mac and a dozen or so of the Grateful Dead's record-setting 53 shows.
I saw a few shows at the smaller Tower Theater, a converted movie theater resurrected in the 70s as Philadelphia's answer to Bill Graham's famed Fillmore East. The Tower hosted acts that, while popular, couldn't possibly fill the massive Spectrum. I saw Warren Zevon, The Boomtown Rats and The Jerry Garcia Band there. Philadelphia also presented indoor shows at the sprawling, yet clunky, Civic Center and outdoor, festival-like shows at JFK Stadium, the crumbling deathtrap, now the site of the 21,000-seat, schizophrenically-named* Wells Fargo Center.
I regularly attended concerts through my teens and they were exciting events. They were the culmination of weeks (sometimes months) of planning. There was coordination of purchasing tickets and securing transportation. There was decisions on what to wear and speculation and discussion about possible song selections. On the evening of the actual show, I'd be seated in a section that seemed to be miles from the action. Although it was thrilling and enjoyable, there was a noticeable, cold, untouchable distance between me and the band. Even when I sat in the third row and Queen's flamboyant Freddie Mercury tossed carnations in my direction, there was still an unseen barrier that kept me in my place and the the band in theirs... and never the twain shall meet.
My concert-going took a brief pause when my son was born. However, as he grew, and since music played such a major part in our lives, my wife and I took him to kid-friendly shows. We started with the venerable Trout Fishing in America, whose fun mix of folk-rock and silliness was the perfect jumping off point. We slowly graduated to the pop sounds of Canada's Barenaked Ladies and another Canadian quartet Moxy Fruvous. Soon, as he made his own musical discoveries, our boy was ready for the real adult world of concerts. We began to frequent an unassuming club in Philadelphia's western suburbs called The Point, which rose from the ashes of the legendary Main Point, early stomping grounds for Billy Joel, Jackson Browne, Joni Mitchell and Bruce Springsteen. It was a small venue, serving coffee and light snacks along with lesser-known, but powerful acts like Michael Penn and the mighty (though now defunct) Asylum Street Spankers. We also attended the Tin Angel, a tiny, narrow club in Philadelphia's historic Old City, where we witnessed performances by Graham Parker, Jill Sobule and an intimate set by one-time pop-darlings Fountains of Wayne. In later years, my son began working at a Philadelphia radio station that shares a building with a popular concert venue. I have lost count of the number of shows — by a wide variety of performers and genres — we have seen there.
The cool and most interesting aspect of my recent concert experiences is meeting the bands. That is something that was unheard of and just never ever happened when I was a kid. In these days of social media and more person-to-person connectivity, it is actually commonplace. (It sort of helps if you are related to someone that works in the media.) That invisible barricade between audience and performer has gotten thinner and thinner, sometimes to the point of nonexistence. Sure, it's still virtually impossible to have a "close up and personal" encounter with a Taylor Swift or some "flavor-of-the month" boy band, but most bands at smaller venues will offer a formal "meet-and-greet." Some like to mingle with the lingering crowds as they exit a show. If you're patient, some can be caught as they exit the venue themselves... and they are usually very friendly and appreciative. Meeting bands after a show has become such a common occurrence that it's almost taken as rude if a band doesn't put in a post-show appearance. Some bands have even learned to cash in on the "meet the fans" experience, but that's a despicable practice in my opinion.
Photo by Russell Mael, from
the back steps of the Electric Factory.
Ron Mael, my son and me are right up front.
A few nights ago, my son and I saw FFS, a so-called "supergroup" comprised of the chameleon-like Mael brothers — quirky Russell and enigmatic Ron — founders of the indescribable Sparks and Scottish art-rockers Franz Ferdinand. The pairing has produced one of the best albums of 2015, a self-titled release combining an original amalgam of the music and lyrics of both bands. Despite the age difference among the members (Franz Ferdinand are in their early 40s; Sparks are well into their AARP years), the collaboration works and it works well (no matter what that song says)! After the show, my son and I waited behind the venue by the tour bus, like a couple of giddy teenagers. Along with a gathering of about fifty die-hard fans, we braved the brisk night air as each member of the band filed through the crowd, shaking hands, signing albums and posing for pictures. It was a lot of fun and an experience that was approximately forty years in the making.
But, I'm making up for lost time.
*It has had no less than five names in its nineteen-year existence.
Labels: bands, concert, family, famous, FFS, Franz Ferdinand, josh pincus is crying, JPiC, music, reminiscing, Sparks
smiling faces, smiling faces sometimes
I have as much authority as the pope, I just don't have as many people who believe it. — George Carlin
Unless you have been in solitary confinement, or perhaps (ironically) deeply sequestered in an isolated religious sect, you know that Pope Francis visited the United States last week. Specifically, Washington, DC, New York City and, my hometown, Philadelphia. While I cannot speak for the other cites on the papal itinerary, I can attest to the preparations and subsequent atmosphere in Philadelphia.
As the summer concluded, Philadelphia began to slowly reveal plans for the pope's forty-seven hour stay in the city. An open-air mass was planned for Sunday afternoon, to be held on the Benjamin Franklin Parkway with the famed Philadelphia Art Museum steps* serving as an altar. Projected attendance was estimated in the millions. That's right - millions! Shortly after the official announcement was made, banners (like the ones pictured above) began appearing on lamp posts through the city. As the late September date approached, SEPTA (the provider of public transportation in the City of Brotherly Love) announced extremely limited train station availability on the weekend of the pope's visit and monthly train passes would be invalid during that time period. Special passes would need to be purchased. City officials jumped on the "special restrictions" bandwagon, alerting everyone that a physical fence would be erected around an eight-block area of the Parkway, with metal detectors and other security devices to be put in place as well. A few days after those jarring announcements, a plan was divulged for clearing the streets of parked cars on a day-by-day, neighborhood-by-neighborhood schedule. Residents would have to pay an additional fee for off-site, remote parking of their "required-to-be-moved" vehicle. Traffic would be limited, and in turn, deliveries to businesses would be curtailed or altogether eliminated. It was as though the city had a job interview and was putting on its best suit to make a good impression.
The faithful - gumming up the works.
Tensions mounted and complaints increased as the pope's arrival grew nearer. But also, there was a noticeable electricity in the air. It was an historical event (religious aspect aside) and it would bring excitement to an awfully large amount of people (myself, however, not remotely included). Many people were angered by the inconvenience they'd experience, but in reality, it was just one day (Friday) that affected most people. Center-city dwellers, used to walking anyway, trekked around as usual. Those who had no interest just skipped town for an extended weekend. All in all, complaints and praise aside, the whole thing made the city look pretty good in the eyes of the rest of the country. We couldn't ask for more than that.
When lift plus thrust
is greater than load plus drag
I admit that I watched a certain amount of the festivities on television. I watched a little of the pope's speech at Independence Hall. I watched a bit of the mass at the historic Basilica of Saints Peter and Paul. I watched less of the mass on the Parkway. The city looked great. The people looked happy. The local news went on a little too long and got a little too ecclesiastical, but they got the feelgood story they were after. But, I eventually got bored and turned the channel to a rerun of The Flying Nun. For a minute there, I wasn't sure if I had, indeed, changed the channel.
On Sunday night, the pope left and Philadelphia, basking in the afterglow of a job well done, slowly got itself back to normal. The local news was rife with pictures and video of the pope smiling and waving and kissing babies and laughing and waving some more. He exuded cheer and warmth and goodwill.
A few days later, the bane of a progressive-thinking modern society, Kim Davis — the Rowan County, Kentucky clerk who defiantly denied same-sex couples legal marriage licences (just days after the Supreme Court's landmark ruling made same-sex marriage legal in all 50 states) because it contradicted her personal Apostolic Christian** beliefs — claimed to have met with Pope Francis during his brief stop in the nation's capital. She further claimed that the Pontiff alleged presented her with rosaries and encouraged her to "stay strong." (It should be noted that, at first, the Vatican denied this, then backpedaled and confirmed the meeting. In a blatant example of even more backpedaling, the Vatican also said that the pope met with a former student who "happens to be gay." See? The pope is still cool.... right? But, let's not forget that the Vatican still does shit like this.)
Suddenly, the population was up in arms. The new "cool pope" had disappointed! How could he take a step backward from his reformist views? His radical ideals?
Reformist views? Radical ideas? What? Are you kidding me? The guy's the leader of the Catholic Church — staunch opponents of divorce, birth control, abortion and homosexuality. Why does this sentiment come as a surprise? It's not like the surprise we got when we learned that Bill Cosby — wise and lovable ol' Dr. Huxtable — turned out to be a loathsome sexual predator. Of course that shocked us! It's not like the bombshell that hit us when O.J. Simpson was brought to trial for killing his ex-wife! He was a Heisman Trophy winner and wacky "Officer Nordberg" in the Naked Gun movie franchise, for goodness sake! We never saw that coming! But, really??? The spiritual leader of the Catholic religion, teacher of Catholic dogma and Catholic beliefs was actually proliferating those beliefs! Why is this shocking and, more to the point, why is this news? Remember when Pope Francis famously questioned "Who am I to judge?" Oh, I think we know.
Philadelphia got what it expected out of the pope's visit. And, if you think about it... I mean really think about it.... so did everyone else.
www.joshpincusicrying.com
* yeah, yeah - the same ones that Sylvester Stallone's punch-drunk boxer ran up 40 years ago. Fuck you, Sly, for ruining the dignity of one of the most beautiful and iconic buildings in Philadelphia.
** not a Catholic
Labels: Catholic, city, josh pincus is crying, JPiC, Philadelphia, pope, rant, religion


Looking for the best organic potting soil mix for herbs?
It is Spring on the Islands. Orchard Bees are buzzing, The Lilacs and apple trees are in full bloom. It's time to get your organic potting soil and pot up your herbs. If you're just getting started buy herb plants from local farmers markets and local farms. On Salt Spring Island, I recommend purchasing strong, healthy herb starts from the Saturday Market or local farms like Chorus Frog Farm and Eco Reality.
Our group of blueberry bandits and rewilding wizards are meeting to trade cuttings of Hyssop, Rosemary, Sage and lavender, gifting friends with lemon balms, mints, and oregano. The soil mix I use is key to my success. Today I'd like to share with you my all time favorite soil mix for herbs. This is my secret sauce to growing seven (7) ft tomatoes outdoors – watering only once a week! I'd love for you to have an amazing experience growing fresh organic herbs. Try this soil mix out. I guarantee you'll be pleasantly surprised with how much you grow.
1/2 Wheelbarrow of Chicken Manure.
+ Secret Sauce. 1 Teaspoon of Myco Grow sprinkled on the roots.
Large Wheelbarrow, Shovel, Hoe, Teaspoon, Water, Large pot.
First, set your potted herbs in a container with water to reduce transplanting shock. Remember to transplant when roots are out of direct sunlight for best results.
Mix your soil base by adding 50% Sunshine Mix and 50% Chicken Manure. In my wheelbarrow this is about five shovels of The Sunshine Mix (Peat & Perlite Mix) mixed with two bags of organic chicken manure. Approximate mix is fine.
Then add your Amendments. Add two generous yogurt containers of Worm Castings to one yogurt container of an organic mixed fertilizer. I like Gaia Green's 4-4-4 fertilizer. Then add half of a yogurt container of the Azomite trace minerals. Mix the soil mix thoroughly in the wheelbarrow with a shovel or hoe. Add the Soil mix to the Largest pot you can find. Larger pots mean more nutrients for bigger plants. Bigger pots also save you time because they dry out slower and you to water them less often.
Next, grab your potted plant. It should be thoroughly watered on the bottom. Gently remove from the container to expose the roots. Apply one half of teaspoon of Myco Grow by sprinkling it directly on the roots of the plant. Myco Grow is a Mychorrizae fungi blend designed Paul Stamets, a world leading Mycologist and founder of Fungi.com – Myco Grow builds a symbiotic relationship with the plant leading to faster plant and root growth by protecting it from pathogens, and increasing the plant's ability to absorb water and essential nutrients.
Finally, plant your herbs in a large pot using your organic potting soil mix. Gently press around the plant to remove any large air pockets just outside the roots. Place the plant in a great spot; full sun, easy watering access, and close to the kitchen. Water well. Smile. I look forward to seeing you grow.


text:
import { DisposableStore, Disposable, IDisposable } from 'vs/base/common/lifecycle';
import { ExtHostContext, ExtHostTerminalServiceShape, MainThreadTerminalServiceShape, MainContext, TerminalLaunchConfig, ITerminalDimensionsDto, ExtHostTerminalIdentifier } from 'vs/workbench/api/common/extHost.protocol';
import { extHostNamedCustomer, IExtHostContext } from 'vs/workbench/services/extensions/common/extHostCustomers';
import { URI } from 'vs/base/common/uri';
import { StopWatch } from 'vs/base/common/stopwatch';
import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation';
import { ILogService } from 'vs/platform/log/common/log';
import { IProcessProperty, IShellLaunchConfig, IShellLaunchConfigDto, ProcessPropertyType, TerminalExitReason, TerminalLocation } from 'vs/platform/terminal/common/terminal';
import { TerminalDataBufferer } from 'vs/platform/terminal/common/terminalDataBuffering';
import { ITerminalEditorService, ITerminalExternalLinkProvider, ITerminalGroupService, ITerminalInstance, ITerminalInstanceService, ITerminalLink, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal';
import { TerminalProcessExtHostProxy } from 'vs/workbench/contrib/terminal/browser/terminalProcessExtHostProxy';
import { IEnvironmentVariableService, ISerializableEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariable';
import { deserializeEnvironmentVariableCollection, serializeEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariableShared';
import { IStartExtensionTerminalRequest, ITerminalProcessExtHostProxy, ITerminalProfileResolverService, ITerminalProfileService, ITerminalQuickFixService } from 'vs/workbench/contrib/terminal/common/terminal';
import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService';
import { withNullAsUndefined } from 'vs/base/common/types';
import { OperatingSystem, OS } from 'vs/base/common/platform';
import { TerminalEditorLocationOptions } from 'vscode';
import { Promises } from 'vs/base/common/async';
import { CancellationToken } from 'vs/base/common/cancellation';
import { ITerminalCommand } from 'vs/platform/terminal/common/capabilities/capabilities';
import { ITerminalOutputMatch, ITerminalOutputMatcher, ITerminalQuickFixOptions } from 'vs/platform/terminal/common/xterm/terminalQuickFix';

@extHostNamedCustomer(MainContext.MainThreadTerminalService)
export class MainThreadTerminalService implements MainThreadTerminalServiceShape {

	private _proxy: ExtHostTerminalServiceShape;
	/**
	 * Stores a map from a temporary terminal id (a UUID generated on the extension host side)
	 * to a numeric terminal id (an id generated on the renderer side)
	 * This comes in play only when dealing with terminals created on the extension host side
	 */
	private _extHostTerminals = new Map<string, Promise<ITerminalInstance>>();
	private readonly _toDispose = new DisposableStore();
	private readonly _terminalProcessProxies = new Map<number, ITerminalProcessExtHostProxy>();
	private readonly _profileProviders = new Map<string, IDisposable>();
	private readonly _quickFixProviders = new Map<string, IDisposable>();
	private _dataEventTracker: TerminalDataEventTracker | undefined;
	/**
	 * A single shared terminal link provider for the exthost. When an ext registers a link
	 * provider, this is registered with the terminal on the renderer side and all links are
	 * provided through this, even from multiple ext link providers. Xterm should remove lower
	 * priority intersecting links itself.
	 */
	private _linkProvider: IDisposable | undefined;

	private _os: OperatingSystem = OS;

	constructor(
		private readonly _extHostContext: IExtHostContext,
		@ITerminalService private readonly _terminalService: ITerminalService,
		@ITerminalQuickFixService private readonly _terminalQuickFixService: ITerminalQuickFixService,
		@ITerminalInstanceService readonly terminalInstanceService: ITerminalInstanceService,
		@IInstantiationService private readonly _instantiationService: IInstantiationService,
		@IEnvironmentVariableService private readonly _environmentVariableService: IEnvironmentVariableService,
		@ILogService private readonly _logService: ILogService,
		@ITerminalProfileResolverService private readonly _terminalProfileResolverService: ITerminalProfileResolverService,
		@IRemoteAgentService remoteAgentService: IRemoteAgentService,
		@ITerminalGroupService private readonly _terminalGroupService: ITerminalGroupService,
		@ITerminalEditorService private readonly _terminalEditorService: ITerminalEditorService,
		@ITerminalProfileService private readonly _terminalProfileService: ITerminalProfileService
	) {
		this._proxy = _extHostContext.getProxy(ExtHostContext.ExtHostTerminalService);

		// ITerminalService listeners
		this._toDispose.add(_terminalService.onDidCreateInstance((instance) => {
			this._onTerminalOpened(instance);
			this._onInstanceDimensionsChanged(instance);
		}));

		this._toDispose.add(_terminalService.onDidDisposeInstance(instance => this._onTerminalDisposed(instance)));
		this._toDispose.add(_terminalService.onDidReceiveProcessId(instance => this._onTerminalProcessIdReady(instance)));
		this._toDispose.add(_terminalService.onDidChangeInstanceDimensions(instance => this._onInstanceDimensionsChanged(instance)));
		this._toDispose.add(_terminalService.onDidMaximumDimensionsChange(instance => this._onInstanceMaximumDimensionsChanged(instance)));
		this._toDispose.add(_terminalService.onDidRequestStartExtensionTerminal(e => this._onRequestStartExtensionTerminal(e)));
		this._toDispose.add(_terminalService.onDidChangeActiveInstance(instance => this._onActiveTerminalChanged(instance ? instance.instanceId : null)));
		this._toDispose.add(_terminalService.onDidChangeInstanceTitle(instance => instance && this._onTitleChanged(instance.instanceId, instance.title)));
		this._toDispose.add(_terminalService.onDidInputInstanceData(instance => this._proxy.$acceptTerminalInteraction(instance.instanceId)));

		// Set initial ext host state
		this._terminalService.instances.forEach(t => {
			this._onTerminalOpened(t);
			t.processReady.then(() => this._onTerminalProcessIdReady(t));
		});
		const activeInstance = this._terminalService.activeInstance;
		if (activeInstance) {
			this._proxy.$acceptActiveTerminalChanged(activeInstance.instanceId);
		}
		if (this._environmentVariableService.collections.size > 0) {
			const collectionAsArray = [...this._environmentVariableService.collections.entries()];
			const serializedCollections: [string, ISerializableEnvironmentVariableCollection][] = collectionAsArray.map(e => {
				return [e[0], serializeEnvironmentVariableCollection(e[1].map)];
			});
			this._proxy.$initEnvironmentVariableCollections(serializedCollections);
		}

		remoteAgentService.getEnvironment().then(async env => {
			this._os = env?.os || OS;
			this._updateDefaultProfile();
		});
		this._terminalProfileService.onDidChangeAvailableProfiles(() => this._updateDefaultProfile());
	}

	public dispose(): void {
		this._toDispose.dispose();
		this._linkProvider?.dispose();
	}

	private async _updateDefaultProfile() {
		const remoteAuthority = withNullAsUndefined(this._extHostContext.remoteAuthority);
		const defaultProfile = this._terminalProfileResolverService.getDefaultProfile({ remoteAuthority, os: this._os });
		const defaultAutomationProfile = this._terminalProfileResolverService.getDefaultProfile({ remoteAuthority, os: this._os, allowAutomationShell: true });
		this._proxy.$acceptDefaultProfile(...await Promise.all([defaultProfile, defaultAutomationProfile]));
	}

	private async _getTerminalInstance(id: ExtHostTerminalIdentifier): Promise<ITerminalInstance | undefined> {
		if (typeof id === 'string') {
			return this._extHostTerminals.get(id);
		}
		return this._terminalService.getInstanceFromId(id);
	}

	public async $createTerminal(extHostTerminalId: string, launchConfig: TerminalLaunchConfig): Promise<void> {
		const shellLaunchConfig: IShellLaunchConfig = {
			name: launchConfig.name,
			executable: launchConfig.shellPath,
			args: launchConfig.shellArgs,
			cwd: typeof launchConfig.cwd === 'string' ? launchConfig.cwd : URI.revive(launchConfig.cwd),
			icon: launchConfig.icon,
			color: launchConfig.color,
			initialText: launchConfig.initialText,
			waitOnExit: launchConfig.waitOnExit,
			ignoreConfigurationCwd: true,
			env: launchConfig.env,
			strictEnv: launchConfig.strictEnv,
			hideFromUser: launchConfig.hideFromUser,
			customPtyImplementation: launchConfig.isExtensionCustomPtyTerminal
				? (id, cols, rows) => new TerminalProcessExtHostProxy(id, cols, rows, this._terminalService)
				: undefined,
			extHostTerminalId,
			isFeatureTerminal: launchConfig.isFeatureTerminal,
			isExtensionOwnedTerminal: launchConfig.isExtensionOwnedTerminal,
			useShellEnvironment: launchConfig.useShellEnvironment,
			isTransient: launchConfig.isTransient
		};
		const terminal = Promises.withAsyncBody<ITerminalInstance>(async r => {
			const terminal = await this._terminalService.createTerminal({
				config: shellLaunchConfig,
				location: await this._deserializeParentTerminal(launchConfig.location)
			});
			r(terminal);
		});
		this._extHostTerminals.set(extHostTerminalId, terminal);
		const terminalInstance = await terminal;
		this._toDispose.add(terminalInstance.onDisposed(() => {
			this._extHostTerminals.delete(extHostTerminalId);
		}));
	}

	private async _deserializeParentTerminal(location?: TerminalLocation | TerminalEditorLocationOptions | { parentTerminal: ExtHostTerminalIdentifier } | { splitActiveTerminal: boolean; location?: TerminalLocation }): Promise<TerminalLocation | TerminalEditorLocationOptions | { parentTerminal: ITerminalInstance } | { splitActiveTerminal: boolean } | undefined> {
		if (typeof location === 'object' && 'parentTerminal' in location) {
			const parentTerminal = await this._extHostTerminals.get(location.parentTerminal.toString());
			return parentTerminal ? { parentTerminal } : undefined;
		}
		return location;
	}

	public async $show(id: ExtHostTerminalIdentifier, preserveFocus: boolean): Promise<void> {
		const terminalInstance = await this._getTerminalInstance(id);
		if (terminalInstance) {
			this._terminalService.setActiveInstance(terminalInstance);
			if (terminalInstance.target === TerminalLocation.Editor) {
				await this._terminalEditorService.revealActiveEditor(preserveFocus);
			} else {
				await this._terminalGroupService.showPanel(!preserveFocus);
			}
		}
	}

	public async $hide(id: ExtHostTerminalIdentifier): Promise<void> {
		const instanceToHide = await this._getTerminalInstance(id);
		const activeInstance = this._terminalService.activeInstance;
		if (activeInstance && activeInstance.instanceId === instanceToHide?.instanceId && activeInstance.target !== TerminalLocation.Editor) {
			this._terminalGroupService.hidePanel();
		}
	}

	public async $dispose(id: ExtHostTerminalIdentifier): Promise<void> {
		(await this._getTerminalInstance(id))?.dispose(TerminalExitReason.Extension);
	}

	public async $sendText(id: ExtHostTerminalIdentifier, text: string, addNewLine: boolean): Promise<void> {
		const instance = await this._getTerminalInstance(id);
		await instance?.sendText(text, addNewLine);
	}

	public $sendProcessExit(terminalId: number, exitCode: number | undefined): void {
		this._terminalProcessProxies.get(terminalId)?.emitExit(exitCode);
	}

	public $startSendingDataEvents(): void {
		if (!this._dataEventTracker) {
			this._dataEventTracker = this._instantiationService.createInstance(TerminalDataEventTracker, (id, data) => {
				this._onTerminalData(id, data);
			});
			// Send initial events if they exist
			this._terminalService.instances.forEach(t => {
				t.initialDataEvents?.forEach(d => this._onTerminalData(t.instanceId, d));
			});
		}
	}

	public $stopSendingDataEvents(): void {
		this._dataEventTracker?.dispose();
		this._dataEventTracker = undefined;
	}

	public $startLinkProvider(): void {
		this._linkProvider?.dispose();
		this._linkProvider = this._terminalService.registerLinkProvider(new ExtensionTerminalLinkProvider(this._proxy));
	}

	public $stopLinkProvider(): void {
		this._linkProvider?.dispose();
		this._linkProvider = undefined;
	}

	public $registerProcessSupport(isSupported: boolean): void {
		this._terminalService.registerProcessSupport(isSupported);
	}

	public $registerProfileProvider(id: string, extensionIdentifier: string): void {
		// Proxy profile provider requests through the extension host
		this._profileProviders.set(id, this._terminalProfileService.registerTerminalProfileProvider(extensionIdentifier, id, {
			createContributedTerminalProfile: async (options) => {
				return this._proxy.$createContributedProfileTerminal(id, options);
			}
		}));
	}

	public $unregisterProfileProvider(id: string): void {
		this._profileProviders.get(id)?.dispose();
		this._profileProviders.delete(id);
	}

	public async $registerQuickFixProvider(id: string, extensionId: string): Promise<void> {
		this._quickFixProviders.set(id, this._terminalQuickFixService.registerQuickFixProvider(id,
			{
				provideTerminalQuickFixes: async (terminalCommand: ITerminalCommand, lines: string[], option: ITerminalQuickFixOptions, token: CancellationToken) => {
					if (token.isCancellationRequested) {
						return;
					}
					if (option.outputMatcher?.length && option.outputMatcher.length > 40) {
						option.outputMatcher.length = 40;
						this._logService.warn('Cannot exceed output matcher length of 40');
					}
					const commandLineMatch = terminalCommand.command.match(option.commandLineMatcher);
					if (!commandLineMatch) {
						return;
					}
					const outputMatcher = option.outputMatcher;
					let outputMatch;
					if (outputMatcher) {
						outputMatch = getOutputMatchForLines(lines, outputMatcher);
					}
					if (!outputMatch) {
						return;
					}
					const matchResult = { commandLineMatch, outputMatch, commandLine: terminalCommand.command };

					if (matchResult) {
						const result = await this._proxy.$provideTerminalQuickFixes(id, matchResult, token);
						if (result && Array.isArray(result)) {
							return result.map(r => {
								return {
									id,
									source: extensionId,
									...r
								};
							});
						} else if (result) {
							return {
								id,
								source: extensionId,
								...result
							};
						}
					}
					return;
				}
			})
		);
	}

	public $unregisterQuickFixProvider(id: string): void {
		this._quickFixProviders.get(id)?.dispose();
		this._quickFixProviders.delete(id);
	}

	private _onActiveTerminalChanged(terminalId: number | null): void {
		this._proxy.$acceptActiveTerminalChanged(terminalId);
	}

	private _onTerminalData(terminalId: number, data: string): void {
		this._proxy.$acceptTerminalProcessData(terminalId, data);
	}

	private _onTitleChanged(terminalId: number, name: string): void {
		this._proxy.$acceptTerminalTitleChange(terminalId, name);
	}

	private _onTerminalDisposed(terminalInstance: ITerminalInstance): void {
		this._proxy.$acceptTerminalClosed(terminalInstance.instanceId, terminalInstance.exitCode, terminalInstance.exitReason ?? TerminalExitReason.Unknown);
	}

	private _onTerminalOpened(terminalInstance: ITerminalInstance): void {
		const extHostTerminalId = terminalInstance.shellLaunchConfig.extHostTerminalId;
		const shellLaunchConfigDto: IShellLaunchConfigDto = {
			name: terminalInstance.shellLaunchConfig.name,
			executable: terminalInstance.shellLaunchConfig.executable,
			args: terminalInstance.shellLaunchConfig.args,
			cwd: terminalInstance.shellLaunchConfig.cwd,
			env: terminalInstance.shellLaunchConfig.env,
			hideFromUser: terminalInstance.shellLaunchConfig.hideFromUser
		};
		this._proxy.$acceptTerminalOpened(terminalInstance.instanceId, extHostTerminalId, terminalInstance.title, shellLaunchConfigDto);
	}

	private _onTerminalProcessIdReady(terminalInstance: ITerminalInstance): void {
		if (terminalInstance.processId === undefined) {
			return;
		}
		this._proxy.$acceptTerminalProcessId(terminalInstance.instanceId, terminalInstance.processId);
	}

	private _onInstanceDimensionsChanged(instance: ITerminalInstance): void {
		this._proxy.$acceptTerminalDimensions(instance.instanceId, instance.cols, instance.rows);
	}

	private _onInstanceMaximumDimensionsChanged(instance: ITerminalInstance): void {
		this._proxy.$acceptTerminalMaximumDimensions(instance.instanceId, instance.maxCols, instance.maxRows);
	}

	private _onRequestStartExtensionTerminal(request: IStartExtensionTerminalRequest): void {
		const proxy = request.proxy;
		this._terminalProcessProxies.set(proxy.instanceId, proxy);

		// Note that onResize is not being listened to here as it needs to fire when max dimensions
		// change, excluding the dimension override
		const initialDimensions: ITerminalDimensionsDto | undefined = request.cols && request.rows ? {
			columns: request.cols,
			rows: request.rows
		} : undefined;

		this._proxy.$startExtensionTerminal(
			proxy.instanceId,
			initialDimensions
		).then(request.callback);

		proxy.onInput(data => this._proxy.$acceptProcessInput(proxy.instanceId, data));
		proxy.onShutdown(immediate => this._proxy.$acceptProcessShutdown(proxy.instanceId, immediate));
		proxy.onRequestCwd(() => this._proxy.$acceptProcessRequestCwd(proxy.instanceId));
		proxy.onRequestInitialCwd(() => this._proxy.$acceptProcessRequestInitialCwd(proxy.instanceId));
		proxy.onRequestLatency(() => this._onRequestLatency(proxy.instanceId));
	}

	public $sendProcessData(terminalId: number, data: string): void {
		this._terminalProcessProxies.get(terminalId)?.emitData(data);
	}

	public $sendProcessReady(terminalId: number, pid: number, cwd: string): void {
		this._terminalProcessProxies.get(terminalId)?.emitReady(pid, cwd);
	}

	public $sendProcessProperty(terminalId: number, property: IProcessProperty<any>): void {
		if (property.type === ProcessPropertyType.Title) {
			const instance = this._terminalService.getInstanceFromId(terminalId);
			instance?.rename(property.value);
		}
		this._terminalProcessProxies.get(terminalId)?.emitProcessProperty(property);
	}

	private async _onRequestLatency(terminalId: number): Promise<void> {
		const COUNT = 2;
		let sum = 0;
		for (let i = 0; i < COUNT; i++) {
			const sw = StopWatch.create(true);
			await this._proxy.$acceptProcessRequestLatency(terminalId);
			sw.stop();
			sum += sw.elapsed();
		}
		this._getTerminalProcess(terminalId)?.emitLatency(sum / COUNT);
	}

	private _getTerminalProcess(terminalId: number): ITerminalProcessExtHostProxy | undefined {
		const terminal = this._terminalProcessProxies.get(terminalId);
		if (!terminal) {
			this._logService.error(`Unknown terminal: ${terminalId}`);
			return undefined;
		}
		return terminal;
	}

	$setEnvironmentVariableCollection(extensionIdentifier: string, persistent: boolean, collection: ISerializableEnvironmentVariableCollection | undefined): void {
		if (collection) {
			const translatedCollection = {
				persistent,
				map: deserializeEnvironmentVariableCollection(collection)
			};
			this._environmentVariableService.set(extensionIdentifier, translatedCollection);
		} else {
			this._environmentVariableService.delete(extensionIdentifier);
		}
	}
}

/**
 * Encapsulates temporary tracking of data events from terminal instances, once disposed all
 * listeners are removed.
 */
class TerminalDataEventTracker extends Disposable {
	private readonly _bufferer: TerminalDataBufferer;

	constructor(
		private readonly _callback: (id: number, data: string) => void,
		@ITerminalService private readonly _terminalService: ITerminalService
	) {
		super();

		this._register(this._bufferer = new TerminalDataBufferer(this._callback));

		this._terminalService.instances.forEach(instance => this._registerInstance(instance));
		this._register(this._terminalService.onDidCreateInstance(instance => this._registerInstance(instance)));
		this._register(this._terminalService.onDidDisposeInstance(instance => this._bufferer.stopBuffering(instance.instanceId)));
	}

	private _registerInstance(instance: ITerminalInstance): void {
		// Buffer data events to reduce the amount of messages going to the extension host
		this._register(this._bufferer.startBuffering(instance.instanceId, instance.onData));
	}
}

class ExtensionTerminalLinkProvider implements ITerminalExternalLinkProvider {
	constructor(
		private readonly _proxy: ExtHostTerminalServiceShape
	) {
	}

	async provideLinks(instance: ITerminalInstance, line: string): Promise<ITerminalLink[] | undefined> {
		const proxy = this._proxy;
		const extHostLinks = await proxy.$provideLinks(instance.instanceId, line);
		return extHostLinks.map(dto => ({
			id: dto.id,
			startIndex: dto.startIndex,
			length: dto.length,
			label: dto.label,
			activate: () => proxy.$activateLink(instance.instanceId, dto.id)
		}));
	}
}

export function getOutputMatchForLines(lines: string[], outputMatcher: ITerminalOutputMatcher): ITerminalOutputMatch | undefined {
	const match: RegExpMatchArray | null | undefined = lines.join('\n').match(outputMatcher.lineMatcher);
	return match ? { regexMatch: match, outputLines: outputMatcher.multipleMatches ? lines : undefined } : undefined;
}

redpajama_set_name: RedPajamaGithub


Luxury accommodations throughout the Land of Origins. Join us as you explore the cradle of civilization.
Our resort offers high-end luxury in an Ethiopian paradise setting. Breathtaking landscapes encompass the resort as guests enjoy the natural wonders of Lake Kuriftu.
After taking in the natural beauty of the wildlife and countryside, our organic spa and gourmet restaurants are the perfect places to relax as you prepare to continue your getaway experience.
Your Ethiopian adventure is not complete until you make way to Lake Tana, the source of the legendary Blue Nile.
Located in Bahir Dar, immerse yourself in the history of Ethiopia with landscapes of native architecture and cool shore side weather all year round.
Kuriftu Resort & Spa Adama is located in the heart of the alluring city of Adama. Upon entering this charming resort, you will immediately sense its intimate atmosphere that is brought about by its beautifully-decorated pool with white topped cabanas.
This luxury resort is the perfect getaway for couples from the hustle and bustle of Addis Ababa.


text:
Q: connection error on running nginx with multi php-fpm server instance on ec2 I'm trying to run php5 on AmazonEC2 with multi separated php-fpm servers load balanced by upstream block on nginx.conf. I'm testing with two t1.micro instances, but getting 502 Bad Gateway error on my browser when I try loading php files. (Static html files are working fine, but cant get php files to work.)
Here is my nginx error logs.

2012/07/11 12:28:21 [error] 18626#0: *1 recv() failed (104: Connection
  reset by peer) while reading response header from upstream, client:
  xxx.xxx.xxx.xxx, server: www.example.com, request: "GET / HTTP/1.1",
  upstream: "fastcgi://10.xxx.xxx.xxx:9000", host: "www.example.com"

and sometimes I get this.

2012/07/11 13:25:51 [error] 1157#0: *4 upstream prematurely closed
  connection while reading response header from upstream,
  client:xxx.xxx.xxx.xxx, server: www.example.com, request: "GET /
  HTTP/1.1", upstream: "fastcgi://10.xxx.xxx.xxx:9000", host:
  "www.example.com"

I spent time on opening 9000 port from ec2 sequrity groups/iptables and also declaring local ip addresses on both nginx and php-fpm so I'm thinking that's not a problem. (I used to have connection refused error logs)
Could anyone help me out??
Below are my server settings and preferences.
[instance 1]

*

*t1.micro  CentOS 6.2.2

*nginx/1.2.2

[instance 2]

*

*t1.micro  CentOS 6.2.2

*PHP 5.3.14 (fpm-fcgi) Zend Engine v2.3.0 with eAccelerator v0.9.6

[nginx.conf]
user  nginx nginx;
worker_processes  1;
worker_rlimit_nofile 1024;
worker_priority -5;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    multi_accept on;
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    server_tokens   off;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  0;

    gzip  on;

    upstream apserver {
        ip_hash;
        server ip-10-xxx-xxx-xxx.ap-northeast-1.compute.internal:9000;
    }

    include /etc/nginx/conf.d/*.conf;
}

[example.conf]
server {
    listen       80;
    server_name  www.example.com;

    charset utf-8;
    access_log  /var/log/nginx/www.example.com.access.log  main;
    error_log   /var/log/nginx/www.example.com.error.log  debug;
    root    /var/www;

    location / {
        index   index.php index.html index.html;
        if (-f $request_filename) {
            expires max;
            break;
        }

        if (!-e $request_filename) {
            rewrite ^(.+)/index\.php/(.*)$ $1/index.php?q=$2 last;
        }
    }

        location ~ \.php$ {
        fastcgi_send_timeout  10m;
            fastcgi_read_timeout 10m;
        fastcgi_connect_timeout 10m;
        fastcgi_pass    apserver;
        fastcgi_index   index.php;
        fastcgi_param   SCRIPT_FILENAME     $document_root$fastcgi_script_name;
        fastcgi_param   PATH_INFO       $fastcgi_script_name;
        include     /etc/nginx/fastcgi_params;
    }
}

[php-fpm.d/www.conf]
[www]
listen = ip-10-xxx-xxx-xxx.ap-northeast-1.compute.internal:9000
listen.backlog = -1
listen.allowed_clients = ip-10-yyy-yyy-yyy.ap-northeast-1.compute.internal

; Tried testing with below and got the same error
;listen = 9000
;listen.allowed_clients = any

listen.owner = prod
listen.group = prod
listen.mode = 0666
user = prod
group = prod

pm = dynamic
pm.max_children = 10
pm.start_servers = 5
pm.min_spare_servers = 3
pm.max_spare_servers = 8
pm.max_requests = 500

request_terminate_timeout = 30
request_slowlog_timeout = 2
slowlog = /var/log/php-fpm/www-slow.log

php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_admin_flag[expose_php] = off

A: Finally I've figured this out!!
I'm still not sure why but by allocating elastic ip's on each of my instances, and using the Private IP instead of Private DNS Addresses solved my problem.
so my conf files now looks like this just in case.
[nginx.conf]
upstream apserver {
    ip_hash;
    server 10.xxx.xxx.xxx:9000;
}

[php-fpm.d/www.conf]
[www]
listen = 10.xxx.xxx.xxx:9000
listen.backlog = -1
listen.allowed_clients = 10.yyy.yyy.yyy

Thanks!


2. If I got lost during the race or accidental injuries, which person should I contact?
A: During the event, our emergency telephone number is +86 18610030360. As a precaution, we recommend that you carry mobile phones during the race.
A:Nordic Ways provides bike rental (including helmets) service from July 1 to July 3. If you need one, remember to choose the bike size and rent dates when registering online. The number of rental bikes is not unlimited: first come, first serve.
Please note that we always highly recommend to bring your own bike to the event. You will feel much more comfortable on your own material in the grasslands.
BIKE RENTAL PRICE: 100 RMB per day. The deposit of each rented bike is 500 RMB. Pay the deposit in cash when you pick up the bike at the Xiwuqi Hotel. The deposit will be refunded upon the return of the bike.
A: Travel documents and Passport/ID. Long-sleeved jacket (The temperature might be as low as 16 degrees Celsius during the night and up to 30 degrees Celsius during the day). Helmet (if you participate in MTB race), Sun block, Sun glasses, Mosquito repellent, Aspirin and other medicine, Hygiene articles etc. Flashlight (if you are staying at yurt).
5.Where can I get the participant bag & number bib when I arrive at Xiwuqi?
A: The race office will be located in the lobby of the Xiwuqi Hotel, all the participants are required to go to and receive their participant bag there. The bag includes: bike plate (for MTB), number bibs, pins, timing chip, event T-shirt (runners) , the event brochure and sponsor gifts. The deposit of the marathon chip is 100 RMB. After the marathon race, our staff will be at the finish to collect the chip. Alternatively, you return it afterwards at the Race Office. For the biker, there is no need to pay MTB chip deposit. Race office opening times are coming soon.
A:We do not suggest you take the night flight in case of delay and which also give you less time to have rest for the race the next day. We offer airport shuttle service, you can find it when you are registering online. Airport shuttle bus will drop people off at Xiwuqi Hotel(event hotel), there you can pick up your race bag.
Reminding: If you arrive late at night due to flight delays, you can also back to your hotel to have a rest first, then come to race office to get your race bag on the marathon day during 6 am – 6:30 am, our staff will be there to service you. About 10 minutes walk from race office to race start.
7. This is my first race, how do I prepare for it?
If you are a biker you need a MTB bike (full suspension is best but for this event is not a must), helmet, riding glasses, short gloves, sun protection, inner tubes, a small airpump, and tire repair tools. We will provide basic mechanical assistance on-site, but always best to come prepared yourself. In case of colder or wet weather, also consider bringing loose sleeves and leg warmers, even a lightweight rainjacket. Specific bike shorts with padding sit and feel better than unpadded shorts. Also, even though we have several refreshments station on each stage, always bring some snack or energy food (bar or gel) by yourself.
If you are a runner, you could prepare a pair of off-road running shoes & a pair of standard running shoes, quick-drying short-sleeved T-shirt, quick-drying shorts, hats, sun protection, wrist strap , MP3/iPod (if you like music on your run), running pocket (which can hold small water bottle), energy food (gels or bars) .
8. Does the organizing committee provide bike repair service? When is the service time and where could I find it?
A: We are very sorry we will not provide bicycle repair services. We strongly recommend that you bring own simple maintenance tools. However, there are two Xiwuqi local bike shops, one of which - the Java store - is specialised in MTB bikes. if there is a problem with your bike, you can go there and ask for help.
9. Are we mainly racing offroad on grassland?
A: Yes. Participants will start from the city centre (except MTB stage 1, which starts at Nadamu Arena on the grassland proper), but after riding / running about 2 km you will go off road.
The course in the grasslands is mainly flat, but does feature some rolling hills and a handful of steeper slopes. Mountainbikers will negotiate over 500 Hm on stage 1 and stage 3 of the long distance. In dry conditions, stage 3 also has a few sand sections, where you may wish to take it easy or even walk a bit. Participants may encounter sheep, cows, horses and other cattle, but ideally they will not affect your race, so just enjoy the beauty of the grassland.
10.Where can I find my result? Will the participants who finish the race get a medal and certificate? Where can I see event pictures afterwards?
A. The race results will be published at the race office and first unofficial results will also be hung up at the event arena. They will of course also be published on the Genghis Khan website. All participants who finish the race will receive a medal and personalized certificate. To support environmental protection, the certificate is a digital one, you can download it on the Genghis Khan website after the race. Also your race photos will be published on the website.
11. Which rules should I need to pay attention to during the race?
②Environmental rules: We support the initiative of Leave No Trace (LNT) and will strictly implement this concept. During the Genghis Khan Festival competitions, there will be specifically marked zones around the food & drinking stations in which people can dump their garbage and wastepaper. People who are spotted littering outside these zones are running the risk of being disqualified from that day's competition. Environmental protection concerns and benefits us all, so let's keep the grasslands green!
③Water station: will be set every five km along the marathon track. We will provide first aid kit (to deal with minor injuries), water, functional drinks, Snickers, fruit and other food. MTB refreshment stations are marked on the track maps. Typically they occur every 20 to 25 km.
④ Clothes deposit for runners: at the start at Cultural Square. All runners can deposit personal items except mobile phone, wallet and other valuables, and pick it up after the finish. Might be useful to deposit and extra T-shirt, there will be benches and tables at the finish arena to share experiences and a beer with people, as more runners are coming into the finish.
⑤Chip: MTB chip needs to be attached to the left side of the helmet, no need to return it after the race. Marathon chip need to be tied to the upper part of your shoe, need to be returned at the finish after the race.
⑥ Bathroom. We will have mobile toilets at Cultural Square. However, we cannot install toilets in the grasslands. Thank you in advance for your understanding.


Would you like to execute a project?
The requested page "/ja/galeria" could not be found.
The patented Modulogreen® vertical solutions enable the installation of both indoor and outdoor green walls and columns.


As viewers spend more time online watching live and on-demand video content, broadcasters and content distributors are under increasing pressure to deliver an exceptional low-latency live video streaming and on-demand experience, on any device.
Join the video delivery experts from Limelight Networks when they share strategies for implementing a cost-effective solution at global scale, without sacrificing the quality your audiences expect.
REGISTER NOW to receive a Link to the FREE web event on 25th of July 2018 3pm (UK) titled Overcoming the Latency Hurdle in Delivering Streaming Video.


CHICAGO — R. Kelly has pleaded not guilty on all 10 counts of aggravated sexual abuse against him. His attorney Steve Greenberg entered the plea for the R&B singer in a Chicago courtroom.
Kelly, 52, was charged Friday with 10 counts of aggravated criminal sexual abuse after allegations surfaced that he sexually abused a woman and three girls over the course of 12 years. A Cook County judge Saturday set bail at $1 million, calling the accusations against Kelly "disturbing."


The North Dakota Public Service Commission (PSC) has approved a siting permit for the expansion of the Bear Creek Gas Plant in Dunn County. The permit was approved during the commission's April 11 meeting.
ONEOK Rockies Midstream is planning to expand the capacity of its existing Bear Creek Gas Plant from 80 million standard cubic feet per day to 175 million standard cubic feet per day. The plant will process wellhead natural gas from local crude oil production wells. Once processed, the Natural Gas Liquids (NGL) product will be sold and transported via NGL pipelines. Residue gas, largely methane and ethane, will be transferred to the Northern Border Pipeline. The full expansion, including the costs to build the existing plant, will result in a total investment of approximately $250 million.
All construction activities will occur within the previously developed footprint of the facility. The project is located approximately five miles north of Killdeer on a 76-acre site.
The North Dakota Public Service Commission is a constitutionally created state agency with authority to permit, site and regulate certain business activities in the state including electric and gas utilities, telecommunications companies, power plants, electric transmission lines, pipelines, railroads, grain elevators, auctioneers, commercial weighing devices, pipeline safety and coal mine reclamation.
For more information, contact the Public Service Commission at (701) 328-2400 or www.psc.nd.gov.


This entry was posted in productivity and tagged calendar integration, evernote integration, GTD, productivity, to do app, zendone by Gilbert Van Hoeydonck. Bookmark the permalink.
I am Jorge, from the zendone team. Thank you so much for this wonderful review about zendone. We really feel honored :D.
We do intend to improve the recurring options for actions in zendone. We started with a simple implementation but it's certainly too simple. We also love the ipad and we'd like to develop a beautiful, ipad-specific app. We have a native iphone app pretty advanced, and it will work in the iPad too (as any other iphone app), but an ipad-specific app would be awesome.
Are you planning an Ipad version?


A Bomber Command veteran who flew 34 missions over France during the Second World War has been appointed a Chevalier in the Ordre National de la Legion d'Honneur in September, writes Melody Foreman. Flt Lt Colin Deverell DFM, 94, from east Kent, was a 19-year-old flight engineer when he was aboard a Lancaster taking part in raids from May to December 1943.
In January 1944 he joined a crew flying Stirling bombers from RAF Tuddenham in Suffolk to assist the Special Operations Executive. The aircraft carried tanks of fuel and flew overnight to Lyons and onto the Swiss border to parachute-drop wireless equipment, weapons and food to the French Resistance.
Colin revealed how the return journey to England was perilous as the flak from German gunners on the ground was intense. During one flight he had to tackle a cockpit fire with a blanket. The crew faced extreme danger on every trip.


text:
{% load bootstrap3 %}

<form method="POST" action="{% url 'thoughts:create' %}">

How're you feeling?

    {% csrf_token %}

        {% bootstrap_form form %}
        {% buttons submit='Record' %}{% endbuttons %}

</form>