1. I seriously love to eat.
2. I seriously love my birthday.
3. I seriously love my dogs.
4. I am otherwise rarely serious about anything.
5. I have a lot of feelings.
And while I actually do have something to post about that falls in line with points 1 & 2 (because, you know, I haven't posted enough about all the ridiculous amounts of food I've been consuming lately or anything), today, I shall be addressing points 3 & 5. Thus, recapping the grand birthday dinner I had with my family on Friday will simply have to wait (my mom has been out of town for the past month, so we waited to celebrate until she got back) because I have other things to report.
SO! Let's start things off with Saturday night and the first time I cried that night. (I told you: FEELINGS.) My wonderful sister texted me earlier when I was out with Sean, asking me when I'd be home because she wanted to Facetime. Given that there is very little that we sisters cannot communicate via our wicked fast texting fingers (honestly, I think between Jenny and me we could probably beat some kinda record), I was already slightly suspicious that something was afoot. I was a little worried that perhaps my older and wiser sister had befallen the myth that you can't get pregnant while breastfeeding and my perfect little niece Mia would be getting an Irish twin.
My suspicions arose further when Jenny proceeded to Facetime me within 60 seconds of walking back in the door of my house, all but proving the fact that she had been stalking me via the "Find My Friends" app. And yes, there was indeed a reason for the call, though it was nothing like what I expected. My sister proceeded to put Mia on the phone (for lack of a better image), and, in a voice that sounded suspiciously like my sister's, just 3 octaves higher, "Mia" asked me if I would do her the honor of being her godmother.
I mean, c'mon. Do I even need to tell you that this is when the waterworks started?
I managed to utter a garbled "Yes!" between sobs of happiness, and then proceeded to watch my sister feed Mia prune juice through an eyedropper 1,400 miles away (TECHNOLOGY!). It was really a very special moment… up until the part where, y'know, she spit up prune juice. Which, coincidentally, also happened to be the part of the evening where I discovered the remnants of a VERY THOROUGHLY DESTROYED packet of Orbit gum on the stairs of my house. Which brings us to our second emotional point of the evening.
Oh, the joys of dog ownership. On a routine basis, you might find your dirty underwear strewn about the house, food wrappers fished out from the garbage, or a panic poop in the basement. At least they generally have the decency to act guilty/apologetic about it, although in this particular case Harry didn't seem to think anything was amiss. Daxter's guilt, on the other hand, was evident–he does this automatic ears-back rollover thing that is so cute you automagically forget why you're mad (see above picture). I didn't think too much of the incident, seeing as how my dogs have eaten a lot worse things than a couple sticks of gum, IMO (like the time Harry ate half a FILET MIGNON off my end table, or when Daxter polished off half a bag of Fizzing Whizbees from Harry Potter World…). In fact, I thought it was funny, and so I posted about it on Instagram and Facebook.
And it was kinda funny. That is, until I started getting flooded with messages about how sugarfree gum–like Orbit–contains an artificial sweetener called xylitol. And xylitol, unbeknownst to me, is really, REALLY toxic to dogs. Like, not just like "Oh, you probably shouldn't feed that pizza crust to your dog because they don't digest wheat as well as humans"-bad, but "Well, now your dog's blood is being flooded with a huge amount of insulin and his organs are probably going to start failing within the next thirty minutes and HE WILL DIE"-bad.
Yeah… so, in hindsight, I'm gonna go ahead and say that Googling "xylitol dogs" really didn't do much to help the situation. Enter: Phase 2 of crying (and this is, clearly, not the good kind of crying).
Anyway, needless to say, at this point I am FREAKING THE EFF OUT. Harry and Daxter weren't exhibiting any strange behavior, but since we didn't know A) how much gum they actually ate or B) which dog even did the eating, I knew it was better safe than sorry and there was no question as to what to do. Sean and I threw both dogs in the car and zoomed off to the emergency vet. Which, of course, considering my dogs' proclivity for bad things happening to them, is a route I know all too well at this point.
We got to the vet, I explained the situation (in tears), and they immediately took both dogs into the back to check them out. Meanwhile, I learned that there is an animal poison control hotline that I needed to call (still in tears). They asked me a bunch of questions as to exactly what was ingested, and what the worst-case scenario was in terms of how much gum they ate. Thankfully–THANKFULLY–it turns out that Orbit as a brand has low xylitol amounts, and even if one of my dogs <25 lb. dogs had eaten half a pack (7 pieces), they likely would have been okay. At this point, the vet had already made both dogs throw up, so I did find out that Harry was the sole culprit in terms of actually consuming the gum (though Daxter had a field day with the cardboard wrapper, which I guess explains why he was acting guilty?) but I could take them home that night. I would just have to monitor them for signs of hypoglycemia and my regular vet would likely follow up and want to run some blood tests.
And nobody at the clinic even commented on the fact that Daxter is still pink.
All in all, I realize I got pretty lucky: There were only a few pieces of gum left in the pack, and I have some VERY thoughtful friends and blog readers who alerted me to the danger quickly. Because, honestly, if they hadn't told me, I might never have known! Although I guess if we're going that route, I also would not have known if I didn't constantly exploit my dogs via my various social media channels. So clearly the lesson here is: Post everything about your life to social media!
Oh, c'mon, I kid, I kid. In truth, I really have learned a valuable lesson about the dangers of anything that contains xylitol (which is mainly sugarfree gum, but also some jams, jellies, and baked goods) when it comes to my pets. And to me, the peace of mind in knowing that both my furbabies are okay was worth the outrageously high vet bill… and I say that only, like, 40% begrudgingly.
So there you have it. One Saturday night, MORE than enough emotional roller-coastering to last me until at least the end of the week. Whew. I am emotionally drained just having rehashed the experience for you guys.
Have you ever had a pet medical scare? I feel like at this point I have had more than my fair share with both dogs… It's all worth it, obviously, but still. Oy.


A place of tradition and extraordinary coziness. Which makes the Stube the ideal setting for a delightful lunch with Austrian specialties or an unforgettable evening with one of nine refined fondue creations. Guests enjoy the relaxed and warm atmosphere, the elaborate decorations and the high level of table and service culture. Ski boots and families for lunch are therefore just as welcome as elegant evening wear during late hours. Reclaimed wood, family portraits and beautiful antiques are bathed in soft candlelight and convey unparalleled charm and elegance. An experience not to be missed. External guests are very welcome.
Due to a small number of tables, reservations are strongly recommended.
For preparation purposes, fondue orders must be placed before 10 a.m. on the day of reservation. Thank you.


text:
Watch the "Repatriation of Museum Objects" Webinar Recording
Moderated by Esra Akcan
Held on October 19th, 2020, this panel was organized to bring together museum directors, curators, architects, and scholars to comment on the recent discussions on repatriation and restitution as a form of reparation to colonized and looted lands. Over 500 participants attended from 52 different countries.
While museums in Europe and North America have occasionally returned objects to their native communities or lands of arrival, the issue of repatriation gained an accelerated epistemological and ethical momentum at the end of 2018. What is the responsibility of museums to objects taken into their collections by violence or deceit during the colonial times or wars? What is the role of museum-object-repatriation in the recognition of colonial and military violence? What are the legal structures that prohibit or allow deaccession in the museums of different countries? Once the objects are parted from their communities and no longer serve their original sacred functions, where are they to be returned? What determines how far back museums consider repatriation claims legitimate and why? What is the future of "universal museums" around the world?"
Speakers each made a 15-minute presentation, commenting on the contemporary debates from the perspectives of their own work and study area. A question and answer session followed the presentations.
Souleymane Bachir Diagne | Columbia University | New York
Jonathan Fine | Humboldt Forum | Berlin
Cecile Fromont | Yale University | New Haven
Esra Akcan | Cornell University | Ithaca

redpajama_set_name: RedPajamaCommonCrawl


WHILE everyone awaits what President Trump has in store for resolving the Afghan crisis, a flurry of diplomatic activity has begun for commencing follow-up actions as soon as Trumps utters the word Afghanistan. While everyone is hoping for the best from Trump, not hearing from him so far indicates that Afghanistan is a low priority item on its agenda. Candidate Trump had articulated the necessity of keeping around 100000 troops in Afghanistan. President Trump's address to the US troops stationed in Kabul point towards continuation of same mindset. And these days he is demonstrating that he would implement his all campaign rhetoric, no matter how silly those might be. If that be so, then Afghanistan is poised to simmer during Trump Presidency as well. However, Pakistani policymakers feel that change in Washington could offer an opportunity to address some of the issues positively. Pakistan has the highest stakes in peace and stability in Afghanistan.Afghan chief executive Abdullah Abdullah has expressed hope that the United States would continue its support for the Afghan government after American President Donald Trump publicly spoke with US troops stationed in Afghanistan after his inauguration. "I want to congratulate the US president on behalf of myself, the Afghan government and the people of Afghanistan," Abdullah said. Abdullah, interpreted Trump's comments to the troops as a positive sign. "I watched the U.S. president's message to their soldiers… and he announced his support for them, which is a good and graceful step and I am sure that cooperation will continue in all aspects." A former cabinet member of the Afghan Taliban regime, Mullah Agha Jan Mutasim, has appealed to the Afghan government and the Taliban on January 24: "not to miss the chance of peace negotiations, as I foresee heavy fighting this year… The chances of holding a dialogue decrease with the rise in violence; therefore, it is necessary for all sides to the conflict to act now and take advantage of the lull in the fighting during winter."Mutasim is of the view that start of peace talks depends mainly on the Afghan government, and the Taliban could come up with a positive response if officials adopt a serious approach to the peace process. "The Afghan government should also involve influential personalities who have contacts with the Taliban rather than looking towards other countries," the Taliban leader said. "Afghan rulers should have a mechanism and political will, in addition to taking some confidence-building measures, to encourage the Taliban to come to the negotiating table," he added. Possibility of the political process to succeed was strong if the new American administration shifted its focus from using force to accommodating the peace process. Improved relations between the US and Russia could also have a positive impact on the peace efforts in Afghanistan.Afghan Taliban have urged President Trump to review his predecessors' policies towards Afghanistan, as the US and its allies policies had failed to achieve anything in the war in Afghanistan: "The people of Afghanistan … are hopeful that Trump and his cabinet will not follow the wrong policies of their predecessors and keep the US away from Afghanistan…If he follows in the footsteps of Obama and Bush, and continue illegal aggression in our country without reviewing US policies, then American troops will be facing more deaths under Trump. Earlier Obama had admitted in December that the situation in Afghanistan was "still tough". In preparation of next spring offensive, Taliban chief, Mullah Hibtuallah, has changed most of the shadow governors. One of the objectives is to give tough time to government forces during the upcoming fighting season. Governors who did well during last year's combat have been retained including thee governors of Helmand, Kunduz and Kabul.At bilateral level, Pakistan is preparing for 'tough talk' with Afghanistan in coming weeks when Army Chief General Qamar Javed Bajwa travels to Kabul. He is waiting for the 'appropriate time' for the visit. Army chief is expected to visit Kabul after President Trump announces its policy on the Afghanistan. Afghan president has stated that his country now wanted 'serious talks' with Pakistan on the future of ties between the two countries. Pakistan also wants 'serious discussions' with Afghanistan. Pakistan's intention for serious and meaningful discussions was meant to sort out differences between the two countries. Army Chief would provide 'compelling evidence' of how some elements within the Afghan government are supporting terrorist groups that are launching attacks in Pakistan. He would also renew Pakistan's commitment to support efforts aimed at ending lingering instability in Afghanistan. At political level, the American and Afghan leadership are accustomed to blaming Pakistan for their own failures in Afghanistan. Mere rhetoric of blaming others is not likely to solve the problem. Former Afghan President Hamid Karzai after returning from India has urged President Trump to take action against safe havens of terrorists in Pakistan. Like a true opportunist has turned his back on President Obama just few moments after he left White House and has declared his Afghan policy a failure.
Despite an unending smear campaign launched by Afghan leadership against Pakistan, ostensibly to appease the Indians, Pakistan has always shown goodwill towards Afghan people. Adviser on Foreign Affairs Sartaj Aziz while talking to EU Special Representative on Afghanistan Franz Michael Mellbin on January 23, reaffirmed Pakistan's desire for meaningful dialogue with Afghan leadership on matters of bilateral relations. Both Pakistan and Afghanistan are faced with common challenges. Given the geographical proximity, the two countries can effectively overcome most of these difficulties. Afghan leadership while ignoring ground realities is often seen accusing Pakistan of all wrong things happening on its own territory ignoring the fact that Pakistan cannot do the task which falls within the domain of Afghan government or NATO forces.
However, foul language against Pakistan by foreign installed political leadership cannot reduce warmth and affection that is found between the peoples of two countries. Afghan leadership should engage positively with Pakistan and find ways and means to revive the stalled peace process. Since the beginning of Afghan crisis, many countries and entities are undertaking efforts for peace and stability in Afghanistan. Heart of Asia Conference and a multitude of other bilateral and multilateral initiatives are a manifestation in this regard. In all such efforts. Pakistan has sincerely contributed and will continue to play such role. Peace and stability in Afghanistan is crucial for regional peace and is in the interest of Pakistan; but peace and stability in Afghanistan may not be Trump's priority.


The state House and Senate return to the state Capitol this month for a pre-election voting sessions that's so short it would be funny, were it not such a ridiculous waste of the taxpayers' time and money.
The majority-GOP House reconvenes Wednesday for a mere 13 session days - four of which are non-voting. The Republican-controlled Senate makes its even more leisurely return on Sept. 24, holding just 10 session days. Both chambers will pack it in for the year in mid-November.
While some readers may reasonably point out that the government that governs best is that which governs least, Pennsylvania's 253 elected legislators, among the best paid in the country, have no shortage of pressing issues facing them upon their return.
We've already called for lawmakers to enact fixes to Pennsylvania's civil and criminal statute of limitations for the victims of childhood sexual abuse. The need for the long overdue fix has been made all the more pressing by last month's blockbuster release of a grand jury report detailing decades of abuse within Pennsylvania's Roman Catholic dioceses.
Killion's bill, which was part of a larger, seven-bill domestic violence package, further bans domestic abusers from storing their weapons with friends and families. Gov. Tom Wolf has said he will sign the bill when it reaches his desk.


text:
import { expect } from 'chai';
import gql from 'fake-tag';
import { describe, it } from 'mocha';
import sinon from 'sinon';

import roles from '../../../../server/constants/roles';
import models from '../../../../server/models';
import * as utils from '../../../utils';

let host, user1, collective1, event1;
let sandbox;

describe('server/graphql/v1/updates', () => {
  /* SETUP
     - collective1: host, user1 as admin
       - event1: user1 as admin
  */

  before(() => {
    sandbox = sinon.createSandbox();
  });

  after(() => sandbox.restore());

  before(() => utils.resetTestDB());

  before(async () => {
    user1 = await models.User.createUserWithCollective(utils.data('user1'));
  });

  before(async () => {
    host = await models.User.createUserWithCollective(utils.data('host1'));
  });

  before(async () => {
    collective1 = await models.Collective.create(utils.data('collective1'));
  });
  before(() => collective1.addUserWithRole(host, roles.HOST));
  before(() => collective1.addUserWithRole(user1, roles.ADMIN));

  before('create an event collective', async () => {
    event1 = await models.Collective.create(
      Object.assign(utils.data('event1'), {
        CreatedByUserId: user1.id,
        ParentCollectiveId: collective1.id,
      }),
    );
  });
  before(() => event1.addUserWithRole(user1, roles.ADMIN));

  describe('query updates', () => {
    const allUpdatesQuery = gql`
      query AllUpdates($CollectiveId: Int!, $limit: Int, $offset: Int) {
        allUpdates(CollectiveId: $CollectiveId, limit: $limit, offset: $offset) {
          id
          slug
          title
          publishedAt
        }
      }
    `;

    before(() => {
      return models.Update.destroy({ where: {}, truncate: true }).then(() =>
        models.Update.createMany(
          [
            {
              title: 'draft update 1',
              createdAt: new Date('2018-01-11'),
              publishedAt: null,
            },
            { title: 'update 1', publishedAt: new Date('2018-01-01') },
            { title: 'update 2', publishedAt: new Date('2018-01-02') },
            { title: 'update 3', publishedAt: new Date('2018-01-03') },
            { title: 'update 4', publishedAt: new Date('2018-01-04') },
            { title: 'update 5', publishedAt: new Date('2018-01-05') },
            { title: 'update 6', publishedAt: new Date('2018-01-06') },
            { title: 'update 7', publishedAt: new Date('2018-01-07') },
            { title: 'update 8', publishedAt: new Date('2018-01-08') },
            { title: 'update 9', publishedAt: new Date('2018-01-09') },
            { title: 'update 10', publishedAt: new Date('2018-01-10') },
          ],
          { CreatedByUserId: user1.id, CollectiveId: collective1.id },
        ),
      );
    });

    it('get all the updates that are published', async () => {
      const result = await utils.graphqlQuery(allUpdatesQuery, {
        CollectiveId: collective1.id,
        limit: 5,
        offset: 2,
      });
      const updates = result.data.allUpdates;
      expect(result.errors).to.not.exist;
      expect(updates).to.have.length(5);
      expect(updates[0].slug).to.equal('update-8');
    });

    it('get all the updates that are published and unpublished if admin', async () => {
      const result = await utils.graphqlQuery(
        allUpdatesQuery,
        { CollectiveId: collective1.id, limit: 5, offset: 0 },
        user1,
      );
      const updates = result.data.allUpdates;
      expect(result.errors).to.not.exist;
      expect(updates).to.have.length(5);
      expect(updates[0].slug).to.equal('draft-update-1');
    });
  });
});

redpajama_set_name: RedPajamaGithub


Ramblers will enjoy Kastellaun and the surrounding area. Natural paths, dreamy small woods and enchanted brooks wait to be explored.
You can chose among numerous distances around Kastellaun and you have connections to a variety of premium hiking paths. We provide information for you and would be pleased to assist you in planning your trips. Bring and pick-up service is possible according to agreement.


text:
Review: Lady in Waiting by Susan Meissner
by Susan Meissner
2010 Waterbrook Press
Softcover Edition: 340 Pages
Source: Local Library
Content in her comfortable marriage of twenty-two years, Jane Lindsay had never expected to watch her husband, rad, pack his belongings and walk out the door of their Manhattan home. But when it happens, she feels powerless to stop him and the course of events that follow Brad's departure.
Jane finds an old ring in a box of relics from a British jumble sale and discovers a Latin inscription in the band along with just one recognizable word: Jane. Feeling an instant connection to the mysterious ring bearing her namesake, Jane begins a journey to learn more about the ring—and perhaps about herself.
In the sixteenth-century, Lucy Day becomes the dressmaker to Lady Jane Grey, an innocent young woman whose fate seems to be controlled by a dangerous political and religious climate, one threatening to deny her true love and pursuit of her own interests.
As the stories of both Janes dovetail through the journey of one ring, it becomes clear that each woman has far more infl uence over her life than she once imagined. It all comes down to the choices each makes despite the realities they face.
I have always been a fan of fiction novels that can weave an historical thread throughout the novel, but still keep the present moving along without interruption or unforgiving breaks in the flow of the story. Susan Meissner's Lady in Waiting is able to flow back and forth effortlessly from the sixteenth century to modern day without interrupting the flow of the story or creating huge headaches for the reader. I enjoyed this novel from start to finish, enjoying the sense of suspense and intrigue that built throughout.
The present day Jane finds a ring tucked into a sixteenth-century prayer book and immediately feels a connection with it, especially when she discovers her name inscribed in the ring. She is going through her own problems as her own husband recently walked out on her, and her story is one of self-reflection and growth, and the realization that she has always has choices in her life, that no one has ever forced her to make the decisions she has made in life. I enjoyed taking Jane's road to self-discovery and watching her grow and develop self-worth and it made me reflect on my own life as well. I had been showing "The Bucket List" to my class at this same time and I couldn't help but feel the connection between this novel and the movie and as Jane started making her own list of things to do in her life, so did I. It was certainly rejuvenating.
The sixteenth-century Lady Jane Grey has a tragic story, but I found myself looking at her decisions and choices in a new light in this novel. I had always looked upon her as being a tragic pawn in a big chess game, but Ms. Meissner reminds us that everyone has choices and Jane made her choices as well, despite her limitations and the seeming control of everyone around her. It's so easy to blame everyone else for our problems and situations, but we only have to look at ourselves for everything that is created. Jane certainly had other choices, and I definitely admire her tenacity and her faith. She had to be someone special to inspire loyalty in those around her.
I also really enjoyed the interaction between the Janes and their mothers. It was interesting to note the different relationships and to be truly thankful for my own mother. I sometimes felt that modern-day Jane needed to be more forceful with her mother, but was forced to rethink certain things in light of events and how they played out. I wish I could say more, but I would give away some spoilers and I don't want to do that. Suffice it to say that maybe we need to remember that everyone has a history and a story and we should never judge one another too harshly, especially our mothers.
Lucy Day, the seamstress to Lady Jane Grey, was a breath of fresh air. She was loyal, strong, and a good friend, providing a shoulder for Jane to cry on when things became difficult or uncertain. Because she was around many of the gentry, she was able to help Jane make informed decisions about what she should do about certain situations, always encouraging her to be true to herself. I liked that she never told Jane what to do, which would have earned her reprimands anyways, but remained loyal despite everything. I also liked how the novel showed how women and men could be independent and find other work if they did not like where they were working. Too often, novels focus mainly on the gentry and forget about the commoners, but I liked how this novel focused equally on both. I would have actually liked to have learned more.
Lady in Waiting was an interesting novel, suspenseful at times, and definitely full of intrigues, especially if you do not know the history of Lady Jane Grey. It touched me personally on many levels, causing me to reflect on my own marriage and on my own life. I am definitely looking forward to reading another novel by this author in the future.
Labels: Review - Historical
danya September 28, 2010 at 10:14 PM
Oooh, I really like the idea of a book highlighting Jane Grey's story through the eyes of her seamstress. I'm adding this to my tbr list!
Liz @ Cleverly Inked September 29, 2010 at 5:38 PM
WHat a unique read, I need to check it out!
Review: Discord's Apple by Carrie Vaughn
WOW: The Anatomy of Ghosts & The Bone House
Upcoming Releases: September 27 - October 3
Tuesday Teaser: The Geneva Deception by James Twining
It's MONDAY!!!! And it's raining!
CSN Stores Review: Wall Sculpture
Welcome Scott Nicholson! Win a Kindle!
Book Blogger Hop - It's Friday!!!
My Obsession With Castles: Heidelberg Castle
Review: Dark Road to Darjeeling by Deanna Raybourn
WOW: Unbound and Ghosting
Blogmania Winners!
Upcoming Releases - September 20 - 26
Blogmania Contest!
Blogfest Giveaway Winners!
Blogmania Sponsors: Lorilee35 and Silk n Lights De...
I Love Mondays!!!
Blog Fest!!!
Review: The Thyssen Affair by Mozelle Richardson
WOW: Jean M. Auel Returns!!!
Review: Extraordinary by Nancy Werlin
Upcoming Releases - September 6 - 12
Teaser Tuesday - The Thyssen Affair
Blog Hop and Follow Friday!
Review: Velocity by Alan Jacobson
RIP Challenge
WOW: The Back Door of Midnight


WASHINGTON – The FBI gave inaccurate information to Congress and the public when it claimed a possible terrorism link to justify surveilling an anti-war rally in Pittsburgh, the Justice Department's inspector general said Monday in a report on the bureau's scrutiny of domestic activist groups.
Inspector General Glenn Fine said the FBI had no reason to expect that anyone of interest in a terrorism investigation would be present at the 2002 event sponsored by the Thomas Merton Center, a nonviolent anti-war and anti-discrimination group.
The surveillance was "an ill-conceived project on a slow work day," the IG stated in a study of several FBI domestic terrorism probes of people affiliated with organizations such as Greenpeace and the Catholic Worker.
Earlier, in statements to Congress and in a press release, the FBI had described the Pittsburgh rally surveillance by one agent as related to a terrorism investigation.
In a letter to the IG, FBI Deputy Director Timothy Murphy said the FBI regrets that inaccurate information was provided to the FBI director and Congress regarding the basis for the agent's presence at the rally.
Speaking generally of the FBI probes it studied, the IG said a domestic terrorism classification has far-reaching impact because people who are subjects of such investigations are normally placed on watchlists and their travels and interactions with law enforcement may be tracked.
The FBI has broad definitions that enable it to classify matters as domestic terrorism that actually are trespassing or vandalism, the inspector general said.
The IG said the evidence did not indicate that the FBI targeted individuals involved with the groups on the basis of their free-speech activities protected by the Constitution's First Amendment, but rather due to concerns about potential criminal acts.
The IG also concluded that the factual basis for opening some investigations was factually weak and that in several instances there was little indication of any possible federal crime, as opposed to state crimes. In some cases, the IG found that the FBI extended the duration of probes without adequate basis and in a few cases the FBI improperly retained information about the groups in its files, classifying some probes relating to nonviolent civil disobedience under its "Acts of Terrorism" classification.
Regarding the Pittsburgh rally, controversy erupted in 2006 over whether the FBI had spied on protesters at the event several years earlier because of their anti-war views.
At the time, the FBI issued a news release saying the surveillance had been based on an ongoing investigation.
FBI Director Robert Mueller told a Senate hearing that the bureau had been trying to identify a particular individual believed to be in attendance.
The FBI's statements to Congress and the public were not true, said the IG, who found no evidence that the FBI had any information at the time of the event that any terrorism subject would be present.
According to the IG, the Office of the Chief Division Counsel in the FBI Pittsburgh Field Division created a document that said the surveillance was supposedly directed at an individual living in Pittsburgh who was of interest to the FBI based on evidence developed in a terrorism probe.
"We determined this version of events was not true," said the IG.
The inaccurate statements may have been inadvertent, but the IG said it is more likely that the document reflected an effort to state a stronger justification for the surveillance.


Scooter Braun ENDS Troy Carter, Gets 10M!
Can he sue for ARTPOP ACT II?
I mean the title is kinda misleading. There is going to be no lawsuit because they settled the issue.
Do we really want artpoop act II though?
Gaga cursed Ariana and bumped her song off the top of the Hot 100. The curse passed through Ariana's body to Scooter Braun, but Scooter was able to harness the curse's power to defeat Troy. A true Reverse Curse Expedition.


These would be heady days for Jim Flood were it not for some health issues from which he is recovering. They're exciting ones nonetheless. Tiger Shark Golf this week began selling Flood's latest driver design, the PowerPod II.
First some background. Flood, 78, founded Aldila, the first major graphite shaft company, and Odyssey. He also designed the Basakwerd putter that was used by several players on the PGA Tour, including Johnny Miller and Gene Littler.
Yet none of it compares on his personal list of projects to the PowerPod II.
"The Basakwerd putter, I thought it was great," he said. "It its heyday it was successful. The graphite shaft had the greatest impact, because it was so different and was a new innovation. The insert putter came along at the right time, Odyssey, which was very successful. But I'd rate the PowerPod II number one right now, just because it's been a dream of mine to make it so it does work."
He introduced his original PowerPod in the mid '80s. "We probably made a million-six-hundred-thousand of them," he said. "About a third came back broken." The head was made from polyurethane and was fragile, eventually spelling the demise of the company.
"So I designed a model, made out of titanium, and the feedback I got was that it hits phenomenal, that it's easy to hit, you can't slice it, you can't hook it, and it's very hard to top because the face is so deep. I'm very enthused and excited."


With the rising electricity costs and the need to move towards sustainability and fight climate change; most businesses as well as individuals are interested in going solar. However, because of the increased resources on the internet concerning going solar; it can be daunting to figure out the best way of how to go solar to maximize the benefits associated with solar energy.
Switchingtosolarpv.com provides online users with information about online solar tools such as checklists as well as concepts that have been developed with the consumer in mind to help them go solar. Online solar tools such as online solar calculators, solar checklists, online solar marketplaces and other useful concepts such as the green button data can help you decide whether solar energy panels are worth the investment or answer the question: Are solar panels worth it?
How to go solar is made simple and faster when an interested solar buyer utilizes today's available technology such as online solar tools and expert advice available in online solar energy platforms like the EnergySage or Geostellar.
Available roof space useful for installing solar panels.
Determining how many solar energy panels they need to utilize the available solar energy potential available on their rooftop space.
Determine the best types of solar panels available to them based on solar panels efficiency and solar panel financing available to them.
Compare solar panel quotes from multiple solar contractors or installers and sell the best available solar quote that will help a solar buyer save even more money based on the various deals provided to them.
Determine tax incentives and rebates offered to them by the government.
With online solar tools providing the above unbiased information about going solar; how to go solar has now become a more simplified process than it was a decade ago and a solar buyer is provided with useful information that will enable them to take the next step towards going solar when they are more informed. Actually, online solar tools were created to help reduce the cost of solar since a customer online based approach reduces customer acquisition costs since sales costs are reduced using online platforms like the EnergySage or Geostellar.
When a solar buyer is not certain about certain questions or aspects of deciding to go solar, they can register online with these online solar platforms like the EnergySage or Geostellar and access expert advice that is unbiased. Expert advice provided is more customer focussed to ensure the solar buyer makes a decision that is practically fit based on the data that is generated from these online solar tools.
Online solar checklists like the Interstate Renewable Energy Council (IREC's) consumer solar checklist is great checklist to consider when considering to know how to go solar.
Online solar checklists are a good starting point for new potential solar buyers who may not have any knowledge about potential risks and opportunities that are available for them when they are interested in going solar.
Is your roof suitable for solar energy? Is it shaded by trees or will trees grow to shade your roof?
Find out more about this consumer solar checklist to secure a more safe, reliable and a fair solar installation. Also you can learn more about the list of questions or considerations through online solar tools provided on the EnergySage or Geostellar online Solar Energy Platforms that apply LIDAR technology.
Such online solar platforms use online solar tools that help to tell you the hours of usable sunlight per year based on day-to-day analysis of weather patterns and the total area available for solar energy panels based on a 3D modeling of your roof as well as nearby trees and thus help you to calculate the estimated net savings based on your current energy consumption.
How to go solar is therefore informed on the above information which online solar tools can help you get started to estimate your costs and savings and eventually the mode of financing i.e. is it cash, loan, solar power purchase agreement (solar PPA) or solar leasing.
The mode of solar panel financing will depend on what you are able to afford at the time of signing the solar installation contract. However, how to go solar will depend on whether you want to adopt solar as an individual or as a community especially if you do not have enough space on your roof or perhaps you may want to contribute a small amount towards a community solar through crowd-funding based on your current circumstances.
Solar energy online platforms like EnergySage or Geostellar are a great resource and would provide you with expert advice when it comes to you specific needs and requirements and hence a great place to start your process of solar adoption.
Through the cash/loan option you can find or select a solar contractor of your choice and pay the whole amount cash or enter into an arrangement with a financial institution through a loan and install solar panels in your rooftop while been guided in the process by online solar tools as well as solar checklist tools and expert advice from online solar energy platforms like the EnergySage or Geostellar.
Through solar leasing/solar PPA is great for individuals or businesses that may not have upfront, the finance to install their solar energy panels. In this case, the solar buyer enters into a leasing or PPA agreement with a solar contractor with little or no money down and agrees to be making monthly solar payments that are slightly lower than their current monthly utility bills. Online solar tools as well as solar checklists from online solar energy platforms can provide you with specific details regarding the different options available to you as well as expert advice on how much you can save with solar lease or solar PPA if you decide to go solar using this type of solar panel financing.
Through community based solar/crowd-funding especially for well organized communities that may be interested to go solar, but don't have enough available rooftop space on their properties or the financing to go solar on their own. This may work for apartments or communities that are interested to go solar, but want to share the solar benefits associated with this arrangement such as low cost solar as this will involve a bigger system size. Community based solar helps each member to pay less as compared to owning the system as an individual. According to the EnergySage, in the community-based solar, project participants benefit from the power generated by the community solar farm that costs less than the price they would ordinarily pay to their utility.
Find out more from online solar marketplaces like the EnergySage and Geostellar that have considerable experience in helping communities adopt community based solar projects.
Using such online solar platforms/tools, users can compare and contrast different solar energy plans and determine all the key solar deciding aspects as captured on the consumer solar checklists while getting solar expert advice through an online based platform.


text:
<?php

require_once "dal/dal_helper.php";

function dal_payment_check_able_to_process($user_id, $amount)
{
    $balance = dal_payment_fetch_balance($user_id);
    if (!$balance)
        return false;
    return $balance - $amount > 0;
}

function dal_payment_fix_last_perform_transaction($performer_id)
{
    $last_tx_id = dal_payment_get_last_user_tx_id($performer_id);
    if ($last_tx_id === false) {
        on_payment_failure();
        return;
    }
    if (is_null($last_tx_id)) {
        $unprocessed_tx = dal_payment_fetch_transactions_after($performer_id, $last_tx_id, false);
        if ($unprocessed_tx) {
            $tx = dal_payment_get_transaction_by_participants($unprocessed_tx['id_from'], $performer_id, 'p');
            $task = dal_task_fetch($unprocessed_tx['id_from']);
            if (!$task) {
                render_internal_server_error();
                return;
            }
            if (!$tx) {
                $tx_id = dal_payment_init_pay_transaction($unprocessed_tx['id_from'], $performer_id, $task[PRICE]);
                $tx = [];
                $tx[ID] = $tx_id;
                $tx[PROCESSED] = false;
            }
            if (!$tx[PROCESSED]) {
                $tx[PROCESSED] = dal_payment_process_pay_transaction($tx[ID], $task[CUSTOMER_ID], $performer_id, $task[PRICE], $task[COMMISSION]);
            }
            if ($tx[PROCESSED]) {
                set_task_paid($task);
                on_payment_success($task);
            } else {
                on_payment_failure();
            }
        }
    }
}

function dal_payment_get_last_user_tx_id($user_id)
{
    $connection = get_account_connection();
    $stmt = mysqli_prepare($connection, "SELECT last_tx_id FROM " . get_account_db_name() . ".account WHERE user_id=?");
    if (!$stmt) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_bind_param($stmt, 'i', $user_id)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_execute($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_store_result($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (mysqli_stmt_num_rows($stmt) < 1) {
        mysqli_stmt_close($stmt);
        return null;
    }
    if (!mysqli_stmt_bind_result($stmt, $id)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_fetch($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_close($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (mysqli_errno($connection) !== 0) {
        return false;
    }
    return $id;
}

function dal_payment_fetch_transactions_after($tx_id, $user_id, $is_customer)
{
    $connection = get_payment_connection();
    $query = $is_customer ? "id_from=$user_id" : "id_to = $user_id";
    $mysqli_result = mysqli_query($connection, "SELECT id,id_from,amount,processed,type FROM " . get_payment_db_name() . ".tx WHERE $query AND id>=$tx_id AND NOT processed", MYSQLI_ASSOC);
    $result = mysqli_fetch_array($mysqli_result);
    mysqli_free_result($mysqli_result);
    return $result;
}

function dal_payment_lock_balance($user_id, $tx_id, $amount)
{
    $connection = get_account_connection();
    $stmt = mysqli_prepare($connection, "UPDATE " . get_account_db_name() . ".account SET locked_balance = locked_balance + $amount, last_tx_id=? WHERE user_id=? AND $amount < account.balance - account.locked_balance");
    if (!$stmt) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    /** @noinspection PhpMethodParametersCountMismatchInspection */
    if (!mysqli_stmt_bind_param($stmt, 'ii', $tx_id, $user_id)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_execute($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (mysqli_stmt_affected_rows($stmt) != 1) {
        mysqli_stmt_close($stmt);
        return null;
    }
    mysqli_stmt_close($stmt);
    return true;
}

function dal_payment_pay($tx_id, $customer_id, $performer_id, $price, $commission)
{
    $db_errors = initialize_dal_errors();
    $connection = get_account_connection();
    mysqli_autocommit($connection, false);
    $result = mysqli_query($connection, "UPDATE " . get_account_db_name() . ".account SET balance = balance + $price, last_tx_id=$tx_id WHERE user_id=$performer_id AND (last_tx_id is NULL or last_tx_id < $tx_id)");
    if (!$result) {
        add_dal_error($connection, $db_errors);
        mysqli_rollback($connection);
        mysqli_autocommit($connection, true);
        return false;
    }
    $result = mysqli_query($connection, "UPDATE " . get_account_db_name() . ".account SET locked_balance = locked_balance - $price - $commission, balance = balance - $price - $commission WHERE user_id=$customer_id AND locked_balance - $price - $commission > 0 AND balance - $price - $commission > 0");
    if (!$result) {
        add_dal_error($connection, $db_errors);
        mysqli_rollback($connection);
        mysqli_autocommit($connection, true);
        return false;
    }
    return mysqli_commit($connection);
}

function dal_payment_unlock_balance($user_id, $amount)
{
    $connection = get_account_connection();
    $stmt = mysqli_prepare($connection, "UPDATE " . get_account_db_name() . ".account SET locked_balance = locked_balance - $amount WHERE user_id=?");
    if (!$stmt) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    /** @noinspection PhpMethodParametersCountMismatchInspection */
    if (!mysqli_stmt_bind_param($stmt, 'i', $user_id)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_execute($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (mysqli_stmt_affected_rows($stmt) != 1) {
        mysqli_stmt_close($stmt);
        return null;
    }
    mysqli_stmt_close($stmt);
    return true;
}

function dal_payment_refill_balance($user_id, $amount)
{
    $connection = get_account_connection();
    $stmt = mysqli_prepare($connection, "UPDATE " . get_account_db_name() . ".account SET balance = balance + $amount WHERE user_id=?");
    if (!$stmt) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    /** @noinspection PhpMethodParametersCountMismatchInspection */
    if (!mysqli_stmt_bind_param($stmt, 'i', $user_id)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_execute($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (mysqli_stmt_affected_rows($stmt) != 1) {
        mysqli_stmt_close($stmt);
        return null;
    }
    mysqli_stmt_close($stmt);
    return true;
}

function dal_payment_create_account($user_id, $balance = DEFAULT_BALANCE)
{
    $db_errors = initialize_dal_errors();
    $connection = get_account_connection();
    if (!$connection) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    $stmt = mysqli_prepare($connection, "INSERT INTO " . get_account_db_name() . ".account (user_id, balance, last_tx_id, locked_balance) VALUES (?, ?, -1, 0.00)");
    if (!$stmt) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    /** @noinspection PhpMethodParametersCountMismatchInspection */
    if (!mysqli_stmt_bind_param($stmt, 'id', $user_id, $balance)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_execute($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_close($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (mysqli_errno($connection) !== 0) {
        return false;
    }
    return true;
}

/**
 * @param $task_id
 * @param $customer_id
 * @param $amount
 * @return bool|mysqli_result
 */
function dal_payment_retry_lock_transaction($task_id, $customer_id, $amount)
{
    $lock_tx_id_processed = dal_payment_get_transaction_by_participants($customer_id, $task_id, 'l');
    if (is_null($lock_tx_id_processed) || $lock_tx_id_processed[PROCESSED] === false) {
        $tx_id = is_null($lock_tx_id_processed) ? $lock_tx_id_processed[ID] : null;
        $tx_lock_processed = _dal_lock($customer_id, $task_id, $amount, $tx_id);
        return $tx_lock_processed;
    } else {
        $tx_lock_processed = true;
        return $tx_lock_processed;
    }
}

function _dal_lock($user_id, $task_id, $amount, $tx_id)
{
    if (is_null($tx_id)) {
        $tx_id = dal_payment_init_lock_transaction($user_id, $task_id, $amount);
    }
    if (is_null($tx_id) || !$tx_id)
        return false;
    return dal_payment_process_lock_transaction($tx_id, $user_id);
}

function _dal_payment_init_transaction($id_from, $id_to, $amount, $type)
{
    $db_errors = initialize_dal_errors();
    $connection = get_payment_connection();
    if (!$connection) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    $stmt = mysqli_prepare($connection, "INSERT INTO " . get_payment_db_name() . ".tx (id_from, id_to, amount, type) VALUES (?, ?, ?, ?)");
    if (!$stmt) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    /** @noinspection PhpMethodParametersCountMismatchInspection */
    if (!mysqli_stmt_bind_param($stmt, 'idss', $id_from, $id_to, $amount, $type)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_execute($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_close($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (mysqli_errno($connection) !== 0) {
        return false;
    }
    $id = mysqli_insert_id($connection);
    return $id;
}

function dal_payment_init_lock_transaction($id_from, $id_to, $amount)
{
    return _dal_payment_init_transaction($id_from, $id_to, $amount, 'l');
}

function dal_payment_init_pay_transaction($task_id, $performer_id, $amount)
{
    return _dal_payment_init_transaction($task_id, $performer_id, $amount, 'p');
}

function dal_payment_process_lock_transaction($tx_id, $id_from, $amount = null)
{
    if ($amount == null) {
        $connection = get_payment_connection();
        $result = mysqli_query($connection, "SELECT amount from " . get_payment_db_name() . ".tx WHERE id=$tx_id", MYSQLI_STORE_RESULT);
        if (!$result || mysqli_num_rows($result) < 1) {
            return false;
        }
        $amount_array = mysqli_fetch_array($result, MYSQLI_ASSOC);
        mysqli_free_result($result);
        if (!$amount_array) {
            return false;
        } else {
            $amount = $amount_array[AMOUNT];
        }
    }
    if (dal_payment_lock_balance($id_from, $tx_id, $amount)) {
        return _dal_payment_transaction_set_processed($tx_id);
    } else {
        return false;
    }
}

function dal_payment_process_pay_transaction($tx_id, $customer_id = null, $performer_id = null, $price = null, $commission = null)
{
    if (is_null($price) || is_null($commission)) {
        $payment_connection = get_payment_connection();
        $result = mysqli_query($payment_connection, "SELECT id_from FROM " . get_payment_db_name() . ".tx WHERE id=$tx_id");
        if (!$result) {
            mysqli_free_result($result);
            return false;
        }
        $task_id = mysqli_fetch_array($result, MYSQLI_ASSOC)['id_from'];
        mysqli_free_result($result);
        $task = dal_task_fetch($task_id);
        if ($task)
            return false;
        $price = $task[PRICE];
        $commission = $task[COMMISSION];
    }
    $result = mysqli_query(get_payment_connection(), "SELECT processed FROM " . get_payment_db_name() . ".tx WHERE id=$tx_id");
    if (mysqli_num_rows($result) < 1) {
        if (dal_payment_pay($tx_id, $customer_id, $performer_id, $price, $commission)) {
            return _dal_payment_transaction_set_processed($tx_id);
        } else {
            return false;
        }
    }
    if (!$result) {
        mysqli_free_result($result);
        return false;
    }
    $processed = mysqli_fetch_array($result, MYSQLI_ASSOC);
    mysqli_free_result($result);
    if (is_null($processed)) {
        return false;
    } else if (!$processed[PROCESSED]) {
        if (dal_payment_pay($tx_id, $customer_id, $performer_id, $price, $commission)) {
            return _dal_payment_transaction_set_processed($tx_id);
        } else {
            return false;
        }
    } else {
        return _dal_payment_transaction_set_processed($tx_id);
    }
}

function dal_payment_get_transaction_by_participants($entity_id_from, $entity_id_to, $type)
{
    $db_errors = initialize_dal_errors();
    $connection = get_payment_connection();
    if (!$connection) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    $stmt = mysqli_prepare($connection, "SELECT id, processed FROM " . get_payment_db_name() . ".tx WHERE id_from=? AND id_to=? AND type=?");
    if (!$stmt) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    /** @noinspection PhpMethodParametersCountMismatchInspection */
    if (!mysqli_stmt_bind_param($stmt, 'iis', $entity_id_from, $entity_id_to, $type)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_execute($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_store_result($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (mysqli_stmt_num_rows($stmt) < 1) {
        mysqli_stmt_close($stmt);
        return null;
    }
    if (!mysqli_stmt_bind_result($stmt, $id, $processed)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_fetch($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_close($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (mysqli_errno($connection) !== 0) {
        return false;
    }
    return [
        ID => $id,
        PROCESSED => $processed
    ];
}

function _dal_payment_transaction_set_processed($id)
{
    $connection = get_payment_connection();
    $mysqli_result = mysqli_query($connection, "UPDATE " . get_payment_db_name() . ".tx SET processed=TRUE WHERE id=$id");
    $success = false;
    if ($mysqli_result)
        $success = true;
    return $success;
}

function dal_payment_fetch_balance($user_id)
{
    $db_errors = initialize_dal_errors();
    $connection = get_account_connection();
    if (!$connection) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    $stmt = mysqli_prepare($connection, "SELECT balance-locked_balance FROM " . get_account_db_name() . ".account WHERE user_id=?");
    if (!$stmt) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_bind_param($stmt, 'i', $user_id)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_execute($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_store_result($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (mysqli_stmt_num_rows($stmt) < 1) {
        mysqli_stmt_close($stmt);
        return null;
    }
    if (!mysqli_stmt_bind_result($stmt, $balance)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_fetch($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (!mysqli_stmt_close($stmt)) {
        add_dal_error($connection, $db_errors);
        return false;
    }
    if (mysqli_errno($connection) !== 0) {
        return false;
    }
    return $balance;
}


NMD80 is a detergent based solution designed for the express purpose of safe but effective cleaning of new masonry structures. The detergent boost to the product enables you to use fewer applications than normal and work comfortably around other people as there is little to no odor or sting with the product. NMD80 is also milder to your equipment because it is less corrosive in nature. Used as described, in the directions, there should be no significant impact on the plants or soils of the job site but protecting landscape should be taken. NMD80 is safe for virtually any type of brick, block, stone, or pre-cast. Always use a test patch to determine dilutions and appropriateness. NMD80 will solve a host of problems including efflorescence, lime putty, and most mineral stains.
* Reduce labor cost per square foot.
* Will not harm anodized.
This product is very mild but may be corrosive to certain woods, metals, and plants so covering them may be required.
Avoid elevator doors, the coating will be affected by the chemical.
Cover any building hardware, including brass, stainless steel or mild steel.
Care must be taken when used on surface dyed substrates.
Do not use on lime-face brick.
Protect: Test and protect adjacent and surrounding building hardware surfaces not intended to be cleaned from exposure to the cleaning solution.
Always test prior to beginning full-scale cleaning operations. Testing should confirm cleaning effectiveness on each type of surface and stain designated to be cleaned. Test also to determine the desired surface contact time and any cleanup of new potential for adverse reactions with adjacent materials. Allow test panels to dry thoroughly before evaluating final appearance and results.
Note: Dilutions will vary based on application and surface to be cleaned. In most cases use 4:1 on all surfaces except limestone, synthetic stones and pre-cast use 6:1 to 10:1, S Type mortar use 3:1, Tilt-Up concrete: 15:1 to 30:1.
Coverage rates will vary from 100-200 sq. ft. /gal depending on the surface porosity, texture and severity of staining.
Heavy clumps should be removed prior to application of chemical. Use a steel garden edger, carbide blocks, or bricks when required, use the scraper very lightly just to remove chunks. That area would be scraped down before detergent application. Hold the edger at a very narrow angle to the wall and very lightly graze it along the wall until contacting an obstruction, then use a quick chop to the blob, not the wall, to release it. Work in small 5-6 foot sections at a time and work back and forth in both directions very quickly. Scrape only the amount to be cleaned in a day, which is normally 3000 square feet per man. This should be a very quick process normally. Labor and time must always be balanced against benefits returned and the detergent provides far better evenness and release than scraping.
Apply NMD80 to a pre-wet wall by applying water using low pressure or apply to a dry wall. Begin spraying NMD80 with a low pressure sprayer at pressures between 40 to 100 psi, from the top down. Pre-wet the wall with your pressure washer by applying water using low pressure. Begin spraying from the bottom up, use long even passes while spraying and make sure the surface is completely covered. You will see white foam on the wall that does not turn green like raw hydrochloric acid. After initial foam collapse, reapply product without rinsing until you no longer see foam. When cleaning sand faced brick, use more applications of cut NMD80 and scrape more, then rinse carefully. Dwell time and repeated applications are the most critical aspect to increase production and profitability. To see if you are ready to rinse, use the rub test. Using heavy rubber gloves rub lightly on a mortar smear or blob. If it crumbles easily you are ready to rinse. Generally this occurs in seconds because of the penetrating surfactants in NMD80. If there are problems with one application cleaning you may want to use one of these options; decrease the dilution, scrape more thoroughly, or use two applications. The whole idea here is to keep production up and rinsing is the most time consuming aspect of the clean up. Spray the detergent on only as much surface area as you can rinse comfortably without the surface drying. If you are working off a scaffold, swing stage, or ladders you will generally work in a much larger area from the top down because the water running down the wall will keep the wall below you wet and rinse the detergent down and off the wall as you work above. I would like to give two cautions here: 1) allowing the product to dry on the wall may not harm anything but is never recommended, 2) you always should rinse from top down to prevent drying.
An advance in detergent application that has merit is the downstream high volume projection units. These allow you to shoot the detergent great distances with relative ease using high concentrations so it will be effective at cleaning. This will be useful in situations like tilt up concrete where evenness of the surface appearance and removal of the construction dirt is the primary goals. The job is not properly done if not properly rinsed. That means gaining access to all areas and using rinsing techniques is still required. The use of extension poles following this type of detergent application would be appropriate in limited circumstances such as certain chimney and roof structures. It would not be recommended for large scale cleaning as it is very difficult to maintain the required overlap of passes from a distance. Always make sure your dilution is set appropriately for maximum clean and productivity savings.
Tilt up concrete cleaning is generally accomplished with the NMD80 at high dilution levels. The range of dilutions will vary according to the surface finish, but the range should be within, 15:1 to 30:1. This is an area where a projection downstream nozzle might be appropriate for chemical application. The usual cleanup only entails removing surface dirt from the construction project and not removing heavy bits of mortar or smears. The main goal of the cleaning project here is to make the face of the building appear uniform without causing any further surface changes. This makes it important not to use restoration detergents as they may whiten and/or streak the building. Apply a light coat of water to the surface just to the point of run from top to bottom. Follow this with a quick even application of NMD80 at the dilutions recommended above. You may apply this from the top or bottom but except in the case of very tall structures of multiple levels you should clean one whole section at a time.
Apply a solvent-based product to remove most form releases and to allow standard cleaning practices to work. Either C-Tar Melt or Stripsol are very effective pretreatments before NMD80 cleaning in order to remove work dirt or to even out the appearance of the surface.
Rinsing determines much of the quality of the job. By varying tip width and distance from the wall you can have as little pressure as a garden hose or enough to blow out mortar joints. Generalized rules of rinsing would include, 1) using a wide tip of not less than 25 degrees, 2) using overlap while rinsing, 3) allowing chemical time to do the melting job, 4) 2000 psi is a good pressure to use. Operator fatigue, workers release the trigger a lot less often when using 2000 psi all day long. 2000 psi is also much safer in unbalanced situations like a ladder or reaching on scaffolds. Generally 2000-psi machines use less water, which may or may not be an issue on certain job sites. Any pressure from 500 psi to 3000 psi is generally acceptable in the hands of a trained worker. More chemical will be used with the lower pressure and greater care will be taken with the higher pressure on certain types of special brick finishes. Let the chemical do the work instead of the pressure. Experienced professionals understand that the biggest expense is not the detergent, but the labor. Always use overlapping passes to achieve a uniform appearance to the job. A 40-degree nozzle tip to get wider coverage and increased speed is recommended. A two or one and a half brick overlap is easily achieved with this nozzle and is definitely recommended on sand faced or other special brick surfaces. This also decreases the potential for surface damage. Finally, take great care when using rotating zero degree nozzles. They can do great harm to mortar joints and masonry surfaces, such as leaving swirl marks in the surface. To prevent this keep the nozzle well back from the masonry surface.
Note: Synthetic masonry and surface dyed substrates need to be rinsed at low pressures (example: water from standard garden hose with a nozzle), high pressure rinsing is not recommended.
Precautionary Measures: Always wear goggles and rubber gloves when handling this product. Keep off of skin and clothing. If material comes in contact with clothing, wash before re-use. Do not dilute NMD80 with any other product except water. Do not use for any other applications other than specified. Do not remove label. Avoid elevator doors, the coating will be affected. Read Material Safety Data Sheet for additional safety and health hazard information prior to use. Do not get in eyes, on skin or clothing. Avoid breathing fumes. Keep container closed when not in use. Use with adequate ventilation. Applicators should wear rain suit of plastic, rubber or PVC, boots and gloves, face shields and/or goggles to avoid splash to bare skin or eyes. Use a MIOSH/MSHA approved respiration for use with acids if adequate ventilation is unavailable. Though the potential for fuming NMD80 is minimal, take precautions to avoid exposing building occupants to fumes. Dispose of empty containers according to federal, state, and local requirements. Avoid drifting of material or rinse water onto autos and pedestrians by protecting or diverting such traffic.
Eyes: Flood with water 15 minutes and seek medical attention. Remove contact lenses immediately.
Skin: Wash off with soap and water, use good skin emollient. If irritation develops, seek medical attention.
Ingestion: Drink lots of water to dilute. Seek immediate medical attention. Do not induce vomiting.
Waste Disposal Method: Check state, local, or federal regulations for your area. Steps to be taken if material is released or spilled: Provide adequate ventilation or respirators where needed. Large spill; dike and contain for intended use. Small spill; absorb on oil dry and place in approved container for disposal.


text:
BackHome Explore Explore Categories Partner Content Jamming Out at the Hard Rock Cafe Saigon
Jamming Out at the Hard Rock Cafe Saigon
Published on Friday, 26 April 2019 11:00
"Let's get loud, let's get loud, turn the music up, let's do it!" singer Noiichan roared while standing atop a table in the middle of the spacious Hard Rock Cafe Saigon.
On the stage at the back of the room, her band, Jogadanz, provided furious drums and impassioned guitar licks. They ran through a string of decade-spanning hits including songs by Metallica, Shania Twain, Ed Sheeran, Neil Diamond and more. The Indonesian band's versatility was as impressive as their technical skill and enthusiasm for interacting with the crowd. Between sets they walked around the room chatting with guests, who they then called out in songs and invited onto the stage to sing along, resulting in a raucous, inclusive evening.
Many people are unaware this space even exists. Walking into the main level of the Hard Rock Saigon on Le Duan Street, guests first encounter a retail space and a bar/restaurant, while they may miss the small staircase to the left entirely. But if you walk down and go past a row of memorabilia, including guitars from bands like The Cure and Scorpions and clothing worn by John Bon Jovi and Madonna, one arrives at the surprisingly spacious venue.
Surrounded by iconic musical artifacts, two levels of tables and chairs face a large stage where a band performs two nightly sets between 8:30 and 11 pm. For the next several months, Jogadanz will be the resident band. Having just arrived from a stint in Thailand, Jogadanz's vocalist, Ollie, tells Saigoneer that he loves playing here so far thanks to the enthusiasm of the crowds and how they are open to such a variety of music, including his favorite, Nirvana.
Every Friday night the Hard Rock throws themed nights that include tributes to bands like Madionna, Queen, Lincoln Parrk, Imagine Dragons and Ariana Grande. Jogadanz ratles through through each bands prolific catelogues of hits and familiar songs.
The Hard Rock Cafe Saigon is part of a historic legacy. In 1971 two Americans opened the first Hard Rock in London, and now hamburger-selling, music obsessed cafes bearing the name operate in 68 countries, including such famous cities as Paris, New York, Berlin and Hong Kong. It has thus become popular for globetrotters to stop into the Hard Rock in whatever city they visit to purchase a souvenir shirt to show where they've been. The brand has even expanded to hotels and casinos, as well as stadiums.
Of course, not all locations are the same, and a certain degree of localization occurs at each venue. So while the Saigon location serves the cafe's classic build-your-own hamburgers, the menu also includes Asian dishes such as chicken and rice and pad thai. Beer prices are also tailored to local tastes, with a draught Heineken costing only VND35,000.
Even in a city as dynamic as Saigon, it's easy to find oneself frequently asking "what should we do tonight?" The Hard Rock Cafe has an answer for that every night of the week thanks to their live music. One is guaranteed a lively show accompanied by easy-flowing beer and delicious food in a large, comfortable venue.
Hard Rock Cafe's website
Hard Rock Cafe's Facebook
Hard Rock Cafe's Email
39 Lê Duẩn, D1, Ho Chi Minh City


New Delhi, Feb 22 (UNI) The Congress has nothing to do with the taped phone controversy involving Samajwadi Party leader Amar Singh, Parliamentary Affairs Minister Priya Ranjan Dasmunsi said today.
Regarding Mr Amar Singh's allegations that the tapes were distributed by the Congress and a Mumbai-based industrialist, Mr Dasmunsi said: ''The Congress does not indulge in such activities.'' Mr Amar Singh had told NDTV that there was nothing objectionable in his telephone talks with party President Mulayam Singh Yadav, film personalities and industrialists.
NDTV disclosed that it is in possession of a CD, entitled ''Amar Singh Ki Amar Kahani,'', containing his taped conversations, including the ones with Anil Dhirubhai Ambani Group (ADAG) chief Anil Ambani and some film personalities.


T hanks to a grant from the Phelps County Community Foundation's Roy W. & Mary L. Pearson Charitable Fund, we were able to purchase the equipment we need to have students broadcast games on Striv.tv. We are going to be streaming varsity Football, Volleyball, Basketball, and Wrestling on our new Striv channel: striv.tv/channel/holdrege.
Striv (pronounced strive) offers students the opportunity to gain skills in broadcasting live events. We have already had student involvement by having a DusterVision logo contest. Thanks to Mr. Stevens, Mrs. Edgren, and Mrs. Wiese, the entries were narrowed down to four and then all 9-12 students had the opportunity to vote for their favorite. Parker Ellis was the winner and received a Duster blanket as a prize. Parker Hamling came in 2nd.
We look forward to bringing you student led broadcasts as this is an educational opportunity that cannot be duplicated in the classroom. Students will be running the scoreboard app on Striv so it may not always be exact, but they will get better with more experience. So far, Josh Reed and Chandler Whetstine have signed up to broadcast games. We do need more students to broadcast volleyball and basketball games, so if you are interested, please email Mr. James Reed at james.reed@dusters.org.
If you are having issues with the live stream, please refer to the Striv Viewer Information link to help troubleshoot any issues you may experience.


For historical reasons, the IP system and IP laws, compared to other civil law regimes, were relatively late to develop in all countries of the world.
Humming the theme song of the 11th Asian Games Beijing, Wang Ju, executive vice president and secretary general of China Audio-Video Association, has too much to say.
However, when approaching him, you will find that his vigor is not less than that of a youth, and seldom does he slow down, always holding a mobile phone rapidly handling the business.
As a business mode, "content for traffic and traffic for ads" has become fairly commonplace. Copyrights and commercials have never been closer.
Internet piracy has become "a leading killer" of copyright protection on Chinese films and videos in the new media environment.
The issue of the case is how to determine the criterion of infringement liabilities of e-commerce service providers.
Beijing courts accepted in recent years a large number of lawsuits with copyright holders suing manufacturers and sellers of electric learning machines.
Music piracy is a function of many elements and circumstances. The technological capability is the driving force in music piracy.
In 2008, the No. 1 Intermediate People's Court accepted the complaints of seven record labels against Baidu Inc., Sohu Company and Sougou Company for audio copyright infringement.
Once the government cracks down the Internet piracy, the free resources will disappear, and you can not foresee the future of shanzhai e-books. This is similar with the legalization of Internet video.


It should be no mystery to you that we are in a lot of trouble. Earth-shaking, civilization destroying, trouble. And, the news this week – and over the past few weeks – has emphasized this like we have rarely seen. Conventional oil production has been declining since 2005. Emerging market countries are experiencing financial collapse. We are entering a Grand Solar Minimum that might be worse than the one that launched the Dark Ages. The war against free speech has begun in earnest. Societies in the developed world teeter on the brink of open strife.
We are staring into the Abyss, and I just don't like the view.


text:
Q: Nginx logging configuration and how to get it working I have configured the nginx.conf for logging as follows. However, after running the client request, I still do not see anything in my log file. I am just starting to learn nginx module development.
#user  nobody;
worker_processes  1;

pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    error_log     logs/error.log debug;

    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  logs/access.log  combined;

    sendfile        on;
    #tcp_nopush     on;

In one of the module code, I am calling the logging function as below.
ngx_log_debug0(NGX_LOG_INFO, r->connection->log, 0, "Calling ngx_http_hello_world_handler");

After I restart the nginx server process (sudo ../nginx-1.12.1-install/sbin/nginx), I do a HTTP GET using this command:
wget http://localhost/test
--2017-09-05 19:28:30--  http://localhost/test
Resolving localhost... ::1, 127.0.0.1
Connecting to localhost|::1|:80... failed: Connection refused.
Connecting to localhost|127.0.0.1|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 12 [text/plain]
Saving to: 'test'

test                                                       100%[======================================================================================================================================>]      12  --.-KB/s    in 0s

2017-09-05 19:28:30 (1.91 MB/s) - 'test' saved [12/12]

I see the error.log file contains as below, but the log I am printing is not coming out.
2017/09/05 21:53:02 [debug] 94100#0: accept on 0.0.0.0:80, ready: 1
2017/09/05 21:53:02 [debug] 94100#0: posix_memalign: 00007FA982D00EA0:512 @16
2017/09/05 21:53:02 [debug] 94100#0: *4 accept: 127.0.0.1:55276 fd:11
2017/09/05 21:53:02 [debug] 94100#0: *4 event timer add: 11: 60000:1504673642557
2017/09/05 21:53:02 [debug] 94100#0: *4 reusable connection: 1
2017/09/05 21:53:02 [debug] 94100#0: *4 kevent set event: 11: ft:-1 fl:0025
2017/09/05 21:53:02 [debug] 94100#0: *4 http wait request handler
2017/09/05 21:53:02 [debug] 94100#0: *4 malloc: 00007FA983823000:1024
2017/09/05 21:53:02 [debug] 94100#0: *4 recv: eof:0, avail:143, err:0
2017/09/05 21:53:02 [debug] 94100#0: *4 recv: fd:11 143 of 1024
2017/09/05 21:53:02 [debug] 94100#0: *4 reusable connection: 0
2017/09/05 21:53:02 [debug] 94100#0: *4 posix_memalign: 00007FA983819000:4096 @16
2017/09/05 21:53:02 [debug] 94100#0: *4 http process request line
2017/09/05 21:53:02 [debug] 94100#0: *4 http request line: "GET /test HTTP/1.1"
2017/09/05 21:53:02 [debug] 94100#0: *4 http uri: "/test"
2017/09/05 21:53:02 [debug] 94100#0: *4 http args: ""
2017/09/05 21:53:02 [debug] 94100#0: *4 http exten: ""
2017/09/05 21:53:02 [debug] 94100#0: *4 http process request header line
2017/09/05 21:53:02 [debug] 94100#0: *4 http header: "User-Agent: Wget/1.19.1 (darwin15.6.0)"
2017/09/05 21:53:02 [debug] 94100#0: *4 http header: "Accept: */*"
2017/09/05 21:53:02 [debug] 94100#0: *4 http header: "Accept-Encoding: identity"
2017/09/05 21:53:02 [debug] 94100#0: *4 http header: "Host: localhost"
2017/09/05 21:53:02 [debug] 94100#0: *4 http header: "Connection: Keep-Alive"
2017/09/05 21:53:02 [debug] 94100#0: *4 http header done
2017/09/05 21:53:02 [debug] 94100#0: *4 event timer del: 11: 1504673642557
2017/09/05 21:53:02 [debug] 94100#0: *4 rewrite phase: 0
2017/09/05 21:53:02 [debug] 94100#0: *4 test location: "/"
2017/09/05 21:53:02 [debug] 94100#0: *4 test location: "test"
2017/09/05 21:53:02 [debug] 94100#0: *4 using configuration "=/test"
2017/09/05 21:53:02 [debug] 94100#0: *4 http cl:-1 max:1048576
2017/09/05 21:53:02 [debug] 94100#0: *4 rewrite phase: 2
2017/09/05 21:53:02 [debug] 94100#0: *4 post rewrite phase: 3
2017/09/05 21:53:02 [debug] 94100#0: *4 generic phase: 4
2017/09/05 21:53:02 [debug] 94100#0: *4 generic phase: 5
2017/09/05 21:53:02 [debug] 94100#0: *4 access phase: 6
2017/09/05 21:53:02 [debug] 94100#0: *4 access phase: 7
2017/09/05 21:53:02 [debug] 94100#0: *4 post access phase: 8
2017/09/05 21:53:02 [debug] 94100#0: *4 posix_memalign: 00007FA98380D400:4096 @16
2017/09/05 21:53:02 [debug] 94100#0: *4 http cleanup add: 00007FA983819FC8
2017/09/05 21:53:02 [debug] 94100#0: *4 HTTP/1.1 200 OK
Server: nginx/1.12.1
Date: Wed, 06 Sep 2017 04:53:02 GMT
Content-Type: text/plain
Content-Length: 12
Connection: keep-alive

2017/09/05 21:53:02 [debug] 94100#0: *4 write new buf t:1 f:0 00007FA98380D528, pos 00007FA98380D528, size: 148 file: 0, size: 0
2017/09/05 21:53:02 [debug] 94100#0: *4 http write filter: l:0 f:0 s:148
2017/09/05 21:53:02 [debug] 94100#0: *4 http output filter "/test?"
2017/09/05 21:53:02 [debug] 94100#0: *4 http copy filter: "/test?"
2017/09/05 21:53:02 [debug] 94100#0: *4 http postpone filter "/test?" 00007FFF56B2F458
2017/09/05 21:53:02 [debug] 94100#0: *4 write old buf t:1 f:0 00007FA98380D528, pos 00007FA98380D528, size: 148 file: 0, size: 0
2017/09/05 21:53:02 [debug] 94100#0: *4 write new buf t:0 f:0 0000000000000000, pos 0000000109173528, size: 12 file: 0, size: 0
2017/09/05 21:53:02 [debug] 94100#0: *4 http write filter: l:1 f:0 s:160
2017/09/05 21:53:02 [debug] 94100#0: *4 http write filter limit 0
2017/09/05 21:53:02 [debug] 94100#0: *4 writev: 160 of 160
2017/09/05 21:53:02 [debug] 94100#0: *4 http write filter 0000000000000000
2017/09/05 21:53:02 [debug] 94100#0: *4 http copy filter: 0 "/test?"
2017/09/05 21:53:02 [debug] 94100#0: *4 http finalize request: 0, "/test?" a:1, c:2
2017/09/05 21:53:02 [debug] 94100#0: *4 http request count:2 blk:0
2017/09/05 21:53:02 [debug] 94100#0: *4 http run request: "/test?"
2017/09/05 21:53:02 [debug] 94100#0: *4 http reading blocked

Can someone tell me what I am missing?

A: Chances are this is because you log to NGX_LOG_INFO, r->connection->log, but you've enabled the error_log ... debug directive only in the http section.
But as per docs, error_log can be placed in these contexts:

Context: main, http, mail, stream, server, location

I think NGX_LOG_INFO is main, so try adding error_log logs/error.log debug; also at the top level, outside of http, like this:
...

error_log     logs/error.log debug;

http {
    include       mime.types;
    default_type  application/octet-stream;
    error_log     logs/error.log debug;
    ...

This also explains why your log messages appeared when you changed from NGX_LOG_INFO to NGX_LOG_DEBUG_HTTP.

A: You can try to delete the logfile and restart nginx to see whether a new logfile will be created. I start it in nginx folder, maybe the path is not correct. nginx may find in current folder not nginx folder. Maybe it's useful

A: I got my log messages working by modifying the log arguments as below.
ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0, "Calling ngx_http_hello_world_handler");

I changed from NGX_LOG_INFO to NGX_LOG_DEBUG_HTTP. I am not sure what are these components are, but something I need work on and understand.
2017/09/05 22:06:03 [debug] 98383#0: *2 post access phase: 8
2017/09/05 22:06:03 [debug] 98383#0: *2 Calling ngx_http_hello_world_handler
2017/09/05 22:06:03 [debug] 98383#0: *2 Calling ngx_http_hello_world_process_request
2017/09/05 22:06:03 [debug] 98383#0: *2 Calling ngx_http_create_cookie_state
2017/09/05 22:06:03 [debug] 98383#0: *2 posix_memalign: 00007FBA4980E400:4096 @16
2017/09/05 22:06:03 [debug] 98383#0: *2 Calling search_headers_in
2017/09/05 22:06:03 [debug] 98383#0: *2 Calling search_headers_in

For now, I will keep using the same log message in all my application code.

redpajama_set_name: RedPajamaStackExchange


text:
Space Force to Establish Acquisitions Command in 2021
The Space Force has announced plans to establish a new command dedicated to overseeing the service's acquisitions in 2021.
In June, the Space Systems Command was announced alongside the Space Operations Command and the Space Training and Readiness Command.
"We anticipate standing that up in 2021, probably sooner rather than later. We're working on those final details," said Lt. Gen. David Thompson, Space Force vice commander and past Potomac Officers Club event speaker.
SSC will oversee both the Space and Missile Systems Center, which currently handles most of the service's procurement of space platforms, and the Space Rapid Capabilities Office.
According to Thompson, the new command will serve as a central hub that would prevent duplication between organizations while fostering healthy competition.
The consolidation of space acquisitions and other functions was one of the main justification for the establishment of the Space Force in 2019.
However, there have been few announcements on which organizations, functions and platforms will be absorbed. Discussions among the Department of Defense and the services are currently ongoing.
"We're not going to duplicate, but we're certainly interested in the energy that comes from competing ideas and competing designs and competing approaches to a problem," Thompson added.
He added that the Space Force has largely finalized what Air Force capabilities it will take under its wing, with 23 units or functions selected for transition to the new service.
In accordance with orders from DoD leaders, the Space Force is scheduled to execute transition plans in fiscal year 2021 and begin facilitating moves in 2022, Thompson said.
Tags: acquisitions command C4ISRNET David Thompson Department of Defense FY2021 Space and Missile Systems Center Space Development Agency Space Rapid Capabilities Office Speaker News U.S. Air Force U.S. Space Force
ICF Lands $25M Contract for HHS Child Welfare Data Management Support
Five Executives Keeping Their Eyes on GovCon Logistics
DIU Seeks to Sustain Prototype-to-Capability Transition Streak in 2023
SDA Renames National Defense Space Architecture Satellite Constellation
Military Space Acquisitions Official Frank Calvelli Discusses 2023 Agenda


Submissions are now open for Motor City Comedy Festival 2019!
All comedians accepted for showcase performances will be given at least two showcase spots and the option to perform in other shows if they chose to volunteer to be considered for inclusion (i.e. roast battle, movie critique, storytelling) as well as entry to workshops on topics important to working comedians and a variety of comedian exclusive events. Comedians selected for the festival each get a free festival shirt, free admission to all showcases, discount advance tickets to headliners (or the option to see them for free when venue capacity and contracts allow), entertainment and some food. All comedians can also elect to lodge with local Detroit comics to save a little extra money.
Submissions will be judged on the strength of a 5 minute clip by a blind panel of 8 judges, five scores per clip, the highest scores will be invited to the festival. Clips longer than 5 minutes will likely not be viewed in their entirety. At this time we are only accepting clips of stand up comedy, not groups, sketch or podcasts.
Early Submissions will be open from January 21-March 10($20). Regular submissions will be open March 11-April 29($25). Late Submissions will be April 30-May 31($30). Responses will be sent out by early June.
Motor City Comedy Festival is a 501(c)3 nonprofit dedicated to educating the community on comedy and performance meaning your donations for submissions fees are tax-deductible.
So get those submissions in now before it's too late!


If you are a toy or comic collector, I know you know about this expo. If you are not a collector I am sure you are think why would I go to this? I am not a collector and here is why I will be going. First, just walk down memory lane of toys my past. Second, recently I have been helping my mother move and we now have boxes of old toys from her youth and mine raising questions are they worth anything, who would buy something like this, I can't find anything like this on ebay to compare, etc. My plan is to go with pictures of my old toys to compare, ask questions, browse, and just have fun.


"We will continue to vigorously pursue and identify sites and suitable projects for social housing in order to help alleviate Ireland's current housing and homelessness crisis," says Respond! CEO Declan Dunne.
We are committed to the creation and development of resourced communities to enable and empower people to fulfil their potential – Albert Perris, CEO of Respond Support.


In cooperation with the San Francisco Arts Commission, the children of some of the original Coit Tower artists recently participated in interview sessions in San Francisco for the NPR StoryCorps Oral History project. Jayne Blatchly Oldfield, daughter of Coit Tower oil painter Otis Oldfield, Bruce Chesse, son of Coit Tower muralist Ralph Chesse, and Ruth Gottstein, daughter of Coit Tower muralist Bernard Zakheim, all recorded 30 minute interviews earlier this year at the StoryCorps recording booth located inside the Contemporary Jewish Museum in San Francisco. Hopefully, some or all of the interviews will be made available through the StoryCorps project in the months ahead.
For the first time in the 80 year history of Coit Tower, the second floor roof of the Tower has been fully repaired to fix systemic water leaks that have allowed rainwater and moisture to seep in and damage the historic building and its murals for decades. This project was needed for years but only finally happened because of the clear mandate by San Francisco voters who approved the Coit Tower Preservation Policy on the June 5, 2012 ballot to make the protection of Coit Tower and its historic murals a priority.
Thanks to Toks Ajike and Matt Jasmin with the Capital Division of the Department of Recreation and Parks for carefully shepherding this important project to completion.
Next up is the larger series of Coit Tower renovations, building repairs, and mural restoration and preservation work mandated by the voters and funded in part by a $1.7 million Coit Tower repair fund created by Mayor Lee and Board of Supervisors President Chiu. Protect Coit Tower has requested that the Historic Preservation Commission hold a public hearing on the proposed Coit Tower renovation project this spring to ensure the public is fully informed and that all of the recommendations for Coit Tower fixes contained in the 2012 city-commissioned report by the Architectural Resources Group are incorporated into the renovation and preservation plans.
A proposed contract for a new concession company to take over the management of the Coit Tower gift shop, elevator, and related services remains in the process of negotiation between the Recreation and Parks Department and the proposed new vendor it selected over 10 months ago, with the outcome of the negotiations uncertain.
A story in the San Francisco Examiner earlier this year reported that the Department of Public Health rejected the initial plans for expanded food operations at Coit Tower for public health reasons, and voters last year rejected the Recreation and Parks Department's plans for monthly private events that close off Coit Tower to the public.
The Recreation & Parks Department states that it is "diligently working towards a lease agreement" with the selected vendor, Terry Grimm, and that if they are able to mutually agree on lease terms will present the proposed plans to the public for input and review and then to the Recreation & Parks Commission and Board of Supervisors for approval.


As an anthropologist having spent more than a decade working in the field of international humanitarian development, Kristina has traveled to some of the most exotic and remote parts of the world.
After sleeping in mud huts and living without potable water, Kristina truly appreciates more comfortable travel experiences now. These adventures have given Kristina insight into traveling to places off-the-beaten track and a special interest in unique cultural experiences around the globe. As a Fellow in the Explorer's Club, she loves pushing the boundaries of travel through expedition and adventure experiences for her clients. Kristina plans vacations all over the world; from the most remote corners of Africa on safari to active trips across Europe, she helps clients put together the entire trip from start to finish. She is here to help you plan the most luxurious of adventures.
Kristina also focuses on family travel as she travels around the world with her two young children. As a parent, she believes that travel teaches kids to be global citizens and they learn from an early age to be flexible, good travelers. Kids help us to see places in new ways and many cultures around the world are very welcoming of children..
I've had too many to count, but my most memorable recent travel experience was in the Costa del Sol, Spain. Sitting on the patio of my new favorite hotel in the world, Finca Cortesin, having just had a divine spa treatment, listening to the most beautiful Spanish music, a fabulous Rioja in hand, and thinking I'm one of the luckiest people alive!
I have three destinations at the top of my wish list: Bhutan, Papua New Guinea, and Myanmar. To me these are some of the most exotic destinations around the world and their cultures intrigue me. I'd like a mix of trekking, nature, cultural experiences, and to throw in some fabulous hotel stays when available!
Global Entry! As you breeze through the immigration and customs and the added bonus of TSA Precheck, it's worth every penny.


text:
from __future__ import division

"""
A memory-efficient script for validating mates in paired-end FASTQ files.

This actually came to be because of a help request thread in /r/bioinformatics:

https://www.reddit.com/r/bioinformatics/comments/owed06/a_tool_to_verify_paired_end_files/

Tested against headers conventions like this:

@SN7001163:145:C36LWACXX:4:1101:1178:2099 1:N:0:TTAGGCA
@SN7001163:145:C36LWACXX:4:1101:1178:2099 2:N:0:TTAGGCA

@61JCNAAXX100503:5:100:10001:18267/1
@61JCNAAXX100503:5:100:10001:18267/2

Assumptions:

Input reads can be in raw FASTQ format or compressed with a .gz extension.  If
passing paired-end data, all pairwise entries must be in the same order within
their files (this is very common.)

Author:
Joshua Orvis
"""

import argparse
import gzip
import os
import re

def main():
    parser = argparse.ArgumentParser( description='Mate validation in paired-end FASTQ files')

    ## output file to be written
    parser.add_argument('-l', '--left', type=str, required=True, help='Comma-separated list of left reads in an paired set' )
    parser.add_argument('-r', '--right', type=str, required=True, help='Comma-separated list of right reads in an paired set' )
    args = parser.parse_args()

    check_input_options(args)
    left_files = args.left.split(',')
    right_files = args.right.split(',')

    lindex = 0

    for lpath in left_files:
        if lpath.endswith('.gz'):
            ifh = gzip.open(lpath, 'rb')
            left_is_compressed = True

            if args.right is not None:
                ifh_right = gzip.open(right_files[lindex], 'rb')
        else:
            ifh = open(lpath, 'rU')
            left_is_compressed = False
            if args.right is not None:
                ifh_right = open(right_files[lindex], 'rU')

        while True:
            line1 = ifh.readline().replace("\n", '')
            print("line1: ({0})".format(line1))
            rline1 = ifh_right.readline()

            # Check if either file ended early
            if not line1:
                if not rline1:
                    # expected, matching end of both files
                    break
                else:
                    raise Exception("ERROR: Left file ended before right file")

            if not rline1:
                raise Exception("ERROR: Right file ended before left file")

            # We don't actually need these for now.  Could just read to advance the cursor
            line2 = ifh.readline()
            line3 = ifh.readline()
            line4 = ifh.readline()
            rline2 = ifh_right.readline()
            rline3 = ifh_right.readline()
            rline4 = ifh_right.readline()

            print(line1)

            if len(line1):
                print("line1 is ({0})".format(line1))
                lread_base = line1.split()[0]
            else:
                lread_base = False

            if len(rline1):
                rread_base = rline1.split()[0]
            else:
                rread_base = False

            ## did we reach the natural ending?
            if not lread_base and not rread_base:
                break

            ## Let's first check the easy case that they match:
            if lread_base == rread_base:
                pass
            else:
                if lread_base[-2:] == '/1' and rread_base[-2:] == '/2':
                    # compare without the mate info then
                    if lread_base[:-2] != rread_base[:-2]:
                        raise Exception("Mismatch found: left:{0} right:{1}".format(lread_base, rread_base))
                else:
                    raise Exception("Mismatch found: left:{0} right:{1}".format(lread_base, rread_base))

            ## Now those with file names with ids ending like /1 and /2 to denote mate pairs
            print("Comparing {0} with {1}".format(lread_base, rread_base))

    lindex += 1

def check_input_options(args):
    left_files = args.left.split(',')
    right_files = args.right.split(',')

    if len(left_files) != len(right_files):
        raise Exception("ERROR: Count of left files ({0}) must be the same as right files ({1})".format(
            len(left_files), len(right_files)))

if __name__ == '__main__':
    main()


Museums are agents for social change and shapers of cultural content in their communities. We have an obligation to positively shape local and national agendas, and thus our children's futures. While businesses, municipalities, and community groups increasingly embrace sustainability, there has been little synergy or cohesion regarding sustainable practices within the museum community. Museums are in a unique position to lead by example and proactively address these challenges in a non-threatening, educational, and public way--through the topics we choose for exhibits, and, more importantly, through the way we do business.
Many children's museums are already doing so, leading the way based on their long history with recycled arts programs, old building renovation, working with less, and refurbishing old components. Our young visitors force us to consider their futures.