Brief Summary This study evaluates ADCT-402 in patients with Relapsed or Refractory B-cell Lineage Non Hodgkin Lymphoma (B-NHL). Patients will participate in a dose-escalation phase (Part 1) and dose expansion (Part 2). In Part 2, patients will receive the dose level identified in Part 1.
Detailed Description Study ADCT-402-101 is the first clinical study with ADCT-402 in patients with B-cell non-Hodgkin Lymphoma (NHL). ADCT-402 is an antibody drug conjugate (ADC) composed of a humanized antibody directed against human cluster of differentiation 19 (CD19), stochastically conjugated via a valine-alanine cleavable, maleimide linker to a pyrrolobenzodiazepine (PBD) dimer cytotoxin. The study will be conducted in 2 parts. In Part 1 (dose escalation) patients will receive an infusion of ADCT-402, at escalating doses. Part 1 will continue until the maximum tolerated dose is determined. In Part 2 (expansion), all patients will be assigned to the recommended dose level of ADCT-402 identified in Part 1 by the Dose Escalation Steering Committee. For each patient, the study will include a screening period (up to 28 days), a treatment period (until withdrawal), and a follow-up period to assess disease progression and survival for up to 12 months after the last dose of study drug. The total study duration will be dependent on overall patient tolerability to the study drug and response to treatment. It is anticipated that the duration of the entire study (Parts 1 and 2) could be approximately 3 years from first patient treated to last patient completed.
Primary Outcome Measure † Assessment of Dose Limiting Toxicities (DLT) and Determination of the Maximum Tolerated Dose (MTD) of ADCT-402.
Study Arms / Comparison Groups ADCT-402 In Part 1 (dose escalation) patients will receive an IV infusion of ADCT-402, at escalating doses. Part 1 will continue until the maximum tolerated dose is determined. In Part 2 (expansion), all patients will be assigned to the recommended dose level of ADCT-402 identified in Part 1 by the Dose Escalation Steering Committee.
Eligibility Criteria † Inclusion Criteria: - Male or female patients, ages 18 years or older with pathologically confirmed relapsed or refractory B-cell lineage NHL who have failed or are intolerant to established therapy, or for whom no other treatment options are available. Refractory or relapsed B-cell NHL (per World health Organization [WHO] Classification system) - Availability of formalin-fixed paraffin-embedded (FFPE) tumor tissue block. - Measurable disease, as defined by the 2014 Lugano Classification. - Eastern Cooperative Oncology Group (ECOG) performance status 0 to 2. - Absolute neutrophil count (ANC) ≥1000/μL. - Platelet count of ≥75000/μL. - Hemoglobin ≥9.0 g/dL without transfusion within the 2 weeks prior to Day 1. - Serum creatinine ≤1.5 mg/dL. - Serum alkaline phosphatase, alanine aminotransferase (ALT), and aspartate aminotransferase (AST) ≤2 times the upper limit of normal (ULN); ≤ 5 times ULN if there is liver or bone involvement. - Total serum bilirubin ≤1.5 times ULN. - Negative serum or urine beta-human chorionic gonadotropin (β- HCG) pregnancy test within 7 days prior to Day 1 for women of childbearing potential. - Males, and female patients who are biologically capable of having children, must agree to use a medically acceptable method of birth control. Exclusion Criteria: - Patients who have any option for other treatment for B-cell NHL at the current state of disease. - Active graft-versus-host disease. - Autologous or allogenic transplant within the 60 days prior to the Screening visit. - Known history of immunogenicity or hypersensitivity to a CD19 antibody. - Evidence of myelodysplasia or myeloid leukemia by morphology, immunostains, flow cytometry, or cytogenetics on a bone marrow aspirate or biopsy. - Known history of positive serum human ADA. - Active autoimmune disease, motor neuropathy considered of autoimmune origin, and other central nervous system (CNS) autoimmune disease. - Known seropositive for human immunodeficiency (HIV) virus, hepatitis B surface antigen (HbsAg), or antibody to hepatitis C virus (anti-HCV). - History of Steven's Johnson's syndrome or toxic epidermal necrolysis syndrome. - Pregnant or breastfeeding women. - Significant medical comorbidities, including uncontrolled hypertension (diastolic blood pressure greater than 115 mm Hg), unstable angina, congestive heart failure (greater than New York Heart Association class II), severe uncontrolled ventricular arrhythmias, or electrocardiographic evidence of acute ischemia, poorly controlled diabetes, severe chronic pulmonary disease, coronary angioplasty, or myocardial infarction within 6 months prior to screening, or uncontrolled atrial or ventricular cardiac arrhythmias. - Use of any other experimental medication(s) within 21 days prior to start of study treatment on Day 1. - Steroid use equivalent to greater than 20 mg of prednisone within 4 weeks (28 days) prior to Day 1. - Major surgery, chemotherapy, systemic therapy (excluding steroids), radiotherapy, or biotherapy targeted therapies within 21 days prior to Cycle 1, Day 1 treatment. - Failure to recover from acute non hematologic toxicity (except alopecia), due to previous therapy, prior to Screening. - Congenital long QT syndrome or a corrected QTc interval ≥450 ms at the Screening visit. - Active second primary malignancy other than non-melanoma skin cancers, non-metastatic prostate cancer, in situ cervical cancer, ductal or lobular carcinoma in situ of the breast, or other malignancy determined not be exclusionary. - Any other significant medical illness, abnormality, or condition that would make the patient inappropriate for study participation or put the patient at risk.


text:
Pfizer Invites Public to View and Listen to Webcast of April 28 Conference Call with Analysts
By: Pfizer Inc. via Business Wire News Releases
March 17, 2020 at 10:00 AM EDT
Pfizer Inc. (NYSE:PFE) invites investors and the general public to view and listen to a webcast of a conference call with investment analysts at 10 a.m. EDT on Tuesday, April 28, 2020. The purpose of the call is to provide an update on Pfizer's results, as reflected in the company's First Quarter 2020 Performance Report, to be issued that morning.
To view and listen to the webcast and view the Performance Report, visit our web site at www.pfizer.com/investors. Information on accessing and pre-registering for the webcast will be available at www.pfizer.com/investors beginning today. Participants are advised to pre-register in advance of the conference call.
You can also listen to the conference call by dialing either (866) 669-8582 in the United States and Canada or (702) 495-1304 outside of the United States and Canada. The password is "First Quarter Earnings".
Visitors to www.pfizer.com/investors will be able to view and listen to an archived copy of the webcast of the conference call.
Disclosure Notice: The webcast may include forward-looking statements about, among other things, our anticipated operating and financial performance, business plans and prospects, expectations for our product pipeline, in-line products and product candidates, including anticipated regulatory submissions, data read-outs, study starts, approvals, revenue contribution, growth, performance, timing of exclusivity and potential benefits, strategic reviews, capital allocation objectives, plans for and prospects of our acquisitions and other business-development plans, benefits anticipated from the reorganization of our commercial operations in 2019, plans for and prospects of our acquisitions and other business development activities, including our proposed transaction with Mylan N.V. (Mylan) to combine Upjohn and Mylan to create a new global pharmaceutical company, Viatris, our acquisition of Array BioPharma Inc. and our transaction with GSK which combined our respective consumer healthcare businesses into a new consumer healthcare joint venture, our ability to successfully capitalize on growth opportunities or prospects, manufacturing and product supply and plans relating to share repurchases and dividends, among other things, that are subject to substantial risks and uncertainties that could cause actual results to differ materially from those expressed or implied by such statements. A description of these risks and uncertainties can be found in Pfizer's Annual Report on Form 10-K for the fiscal year ended December 31, 2019 and in its subsequent reports on Form 10-Q, including in the sections thereof captioned "Risk Factors" and "Forward-Looking Information and Factors That May Affect Future Results", as well as in its subsequent reports on Form 8-K, all of which are filed with the U.S. Securities and Exchange Commission and available at www.sec.gov and www.pfizer.com.
The forward-looking statements in the webcast speak only as of the original date of the webcast. Pfizer assumes no obligation to update forward-looking statements contained in the webcast as the result of new information or future events or developments.
About Pfizer: Breakthroughs That Change Patients' Lives
At Pfizer, we apply science and our global resources to bring therapies to people that extend and significantly improve their lives. We strive to set the standard for quality, safety and value in the discovery, development and manufacture of health care products, including innovative medicines and vaccines. Every day, Pfizer colleagues work across developed and emerging markets to advance wellness, prevention, treatments and cures that challenge the most feared diseases of our time. Consistent with our responsibility as one of the world's premier innovative biopharmaceutical companies, we collaborate with health care providers, governments and local communities to support and expand access to reliable, affordable health care around the world. For more than 150 years, we have worked to make a difference for all who rely on us. We routinely post information that may be important to investors on our website at www.Pfizer.com. In addition, to learn more, please visit us on www.Pfizer.com and follow us on Twitter at @Pfizer and @Pfizer News, LinkedIn, YouTube and like us on Facebook at Facebook.com/Pfizer.
Patricia.Kelly@Pfizer.com

redpajama_set_name: RedPajamaCommonCrawl


text:
package com.github.fakemongo.impl;

import com.github.fakemongo.FongoException;
import com.mongodb.BasicDBList;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.bson.types.BSONTimestamp;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class UpdateEngine {
  final static Logger LOG = LoggerFactory.getLogger(UpdateEngine.class);

  private final ExpressionParser expressionParser = new ExpressionParser();

  void keyCheck(String key, Set<String> seenKeys) {
    if (!seenKeys.add(key)) {
      throw new FongoException("attempting more than one atomic update on on " + key);
    }
  }

  abstract class BasicUpdate {

    private final boolean createMissing;
    final String command;

    public BasicUpdate(String command, boolean createMissing) {
      this.command = command;
      this.createMissing = createMissing;
    }

    abstract void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated);

    public DBObject doUpdate(DBObject obj, DBObject update, Set<String> seenKeys, DBObject query, boolean isCreated) {
      DBObject updateObject = (DBObject) update.get(command);
      HashSet<String> keySet = new HashSet<String>(updateObject.keySet());

      LOG.debug("KeySet is of length {}", keySet.size());

      for (String updateKey : keySet) {
        LOG.debug("\tfound a key {}", updateKey);

        keyCheck(updateKey, seenKeys);
        doSingleKeyUpdate(updateKey, obj, updateObject.get(updateKey), query, isCreated);
      }
      return obj;
    }

    void doSingleKeyUpdate(final String updateKey, final DBObject objOriginal, Object object, DBObject query, boolean isCreated) {
      List<String> path = Util.split(updateKey);
      String subKey = path.get(0);
      DBObject obj = objOriginal;
      boolean isPositional = updateKey.contains(".$");
      if (isPositional) {
        LOG.debug("got a positional for query {}", query);
      }
      for (int i = 0; i < path.size() - 1; i++) {
        if (!obj.containsField(subKey)) {
          if (createMissing && !isPositional) {
            obj.put(subKey, new BasicDBObject());
          } else {
            return;
          }
        }
        Object value = obj.get(subKey);
        if ((value instanceof List) && "$".equals(path.get(i + 1))) {
          handlePositionalUpdate(updateKey, object, (List) value, obj, query, objOriginal);
        } else if (value instanceof DBObject) {
          obj = (DBObject) value;
        } else if (value instanceof List) {
          BasicDBList newList = Util.wrap((List) value);

          obj = newList;
        } else {
          throw new FongoException("subfield must be object. " + updateKey + " not in " + objOriginal);
        }
        subKey = path.get(i + 1);
      }
      if (!isPositional) {

        LOG.debug("Subobject is {}", obj);
        mergeAction(subKey, obj, object, objOriginal, isCreated);
        LOG.debug("Full object is {}", objOriginal);

      }
    }

    public void handlePositionalUpdate(final String updateKey, Object object, List valueList, DBObject ownerObj, DBObject query, DBObject objOriginal) {
      int dollarIndex = updateKey.indexOf("$");
      String postPath = (dollarIndex == updateKey.length() - 1) ? "" : updateKey.substring(dollarIndex + 2);
      String prePath = updateKey.substring(0, dollarIndex - 1);
      //create a filter from the original query
      Filter filter = null;
      for (String key : query.keySet()) {
        if (key.startsWith(prePath)) {
          String matchKey = prePath.equals(key) ? key : key.substring(prePath.length() + 1);
          filter = expressionParser.buildFilter(new BasicDBObject(matchKey, query.get(key)));
        }
      }
      if (filter == null) {
        throw new FongoException("positional operator " + updateKey + " must be used on query key " + query);
      }

      // find the right item
      for (int i = 0; i < valueList.size(); i++) {
        Object listItem = valueList.get(i);
        if (LOG.isDebugEnabled()) {
          LOG.debug("found a positional list item " + listItem + " " + prePath + " " + postPath);
        }
        if (!postPath.isEmpty()) {
          if (!(listItem instanceof DBObject)) {
            throw new FongoException("can not update \"" + postPath + "\" field of non-DBObject object");
          }

          BasicDBList listWithSingleItem = new BasicDBList ();
          listWithSingleItem.add(listItem);
          if (filter.apply((DBObject) listItem) ||
                //Case of a nested $elemMatch
                  filter.apply(new BasicDBObject (prePath, listWithSingleItem))) {
            doSingleKeyUpdate(postPath, (DBObject) listItem, object, query, false);
            break;
          }
        } else {
          //this is kind of a waste
          DBObject o = listItem instanceof DBObject ? (DBObject) listItem : new BasicDBObject(prePath, listItem);
          if (filter.apply(o)) {
            BasicDBList newList = new BasicDBList();
            newList.addAll(valueList);
            //do not put any data on ownerObj, because the prePath can be composed of different parts
            mergeAction(String.valueOf(i), newList, object, objOriginal, false);
            //repopulate the valueList
            valueList.clear();
            valueList.addAll(newList);
            break;
          }
        }
      }
    }
  }

  Number genericAdd(Number left, Number right) {
    if (left instanceof Float || left instanceof Double || right instanceof Float || right instanceof Double) {
      return left.doubleValue() + right.doubleValue();
    } else if (left instanceof Integer) {
      return left.intValue() + right.intValue();
    } else {
      return left.longValue() + right.longValue();
    }
  }

  // http://docs.mongodb.org/manual/faq/developers/#faq-developers-multiplication-type-conversion
  Number genericMul(Number left, Number right) {
    if (left instanceof Float || left instanceof Double || right instanceof Float || right instanceof Double) {
      return left.doubleValue() * (right.doubleValue());
    } else if (left instanceof Integer && right instanceof Integer) {
      return left.intValue() * right.intValue();
    } else {
      return left.longValue() * right.longValue();
    }
  }

  Number genericMax(Number left, Number right) {
    if (left instanceof Float || left instanceof Double || right instanceof Float || right instanceof Double) {
      return Math.max(left.doubleValue(), right.doubleValue());
    } else if (left instanceof Integer) {
      return Math.max(left.intValue(), right.intValue());
    } else {
      return Math.max(left.longValue(), right.intValue());
    }
  }

  Date genericMax(Date left, Date right) {
    if (left == null) {
      return right;
    }
    if (right == null) {
      return left;
    }
    return left.after(right) ? left : right;
  }

  Number genericMin(Number left, Number right) {
    if (left instanceof Float || left instanceof Double || right instanceof Float || right instanceof Double) {
      return Math.min(left.doubleValue(), right.doubleValue());
    } else if (left instanceof Integer) {
      return Math.min(left.intValue(), right.intValue());
    } else {
      return Math.min(left.longValue(), right.intValue());
    }
  }

  Date genericMin(Date left, Date right) {
    if (left == null) {
      return right;
    }
    if (right == null) {
      return left;
    }
    return left.before(right) ? left : right;
  }

  BasicDBList asDbList(Object... objects) {
    BasicDBList dbList = new BasicDBList();
    Collections.addAll(dbList, objects);
    return dbList;
  }

  final List<BasicUpdate> commands = Arrays.<BasicUpdate>asList(
      new BasicUpdate("$set", true) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          subObject.put(subKey, object);
        }
      },
      new BasicUpdate("$setOnInsert", true) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          if (isCreated) {
            subObject.put(subKey, object);
          }
        }
      },
      new BasicUpdate("$max", true) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          if (object instanceof Number) {
            Number updateNumber = expressionParser.typecast(command + " value", object, Number.class);
            Object oldValue = subObject.get(subKey);
            if (oldValue == null) {
              subObject.put(subKey, updateNumber);
            } else {
              Number oldNumber = expressionParser.typecast(subKey + " value", oldValue, Number.class);
              subObject.put(subKey, genericMax(oldNumber, updateNumber));
            }
          } else if (object instanceof Date) {
            Date updateNumber = expressionParser.typecast(command + " value", object, Date.class);
            Object oldValue = subObject.get(subKey);
            if (oldValue == null) {
              subObject.put(subKey, updateNumber);
            } else {
              Date oldNumber = expressionParser.typecast(subKey + " value", oldValue, Date.class);
              subObject.put(subKey, genericMax(oldNumber, updateNumber));
            }
          } else {
            throw new FongoException(subKey + " expected to be of type Date/Number but is " + (object != null ? object.getClass() : "null") + " toString:" + object);
          }
        }
      },
      new BasicUpdate("$min", true) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          if (object instanceof Number) {
            Number updateNumber = expressionParser.typecast(command + " value", object, Number.class);
            Object oldValue = subObject.get(subKey);
            if (oldValue == null) {
              subObject.put(subKey, updateNumber);
            } else {
              Number oldNumber = expressionParser.typecast(subKey + " value", oldValue, Number.class);
              subObject.put(subKey, genericMin(oldNumber, updateNumber));
            }
          } else if (object instanceof Date) {
            Date updateNumber = expressionParser.typecast(command + " value", object, Date.class);
            Object oldValue = subObject.get(subKey);
            if (oldValue == null) {
              subObject.put(subKey, updateNumber);
            } else {
              Date oldNumber = expressionParser.typecast(subKey + " value", oldValue, Date.class);
              subObject.put(subKey, genericMin(oldNumber, updateNumber));
            }
          } else {
            throw new FongoException(subKey + " expected to be of type Date/Number but is " + (object != null ? object.getClass() : "null") + " toString:" + object);
          }
        }
      },
      new BasicUpdate("$inc", true) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          Number updateNumber = expressionParser.typecast(command + " value", object, Number.class);
          Object oldValue = subObject.get(subKey);
          if (oldValue == null) {
            subObject.put(subKey, updateNumber);
          } else {
            Number oldNumber = expressionParser.typecast(subKey + " value", oldValue, Number.class);
            subObject.put(subKey, genericAdd(oldNumber, updateNumber));
          }
        }
      },
      new BasicUpdate("$mul", true) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          Number updateNumber = expressionParser.typecast(command + " value", object, Number.class);
          Object oldValue = subObject.get(subKey);
          if (oldValue == null) {
            subObject.put(subKey, genericMul(0, updateNumber));
          } else {
            Number oldNumber = expressionParser.typecast(subKey + " value", oldValue, Number.class);
            subObject.put(subKey, genericMul(oldNumber, updateNumber));
          }
        }
      },
      new BasicUpdate("$unset", false) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          subObject.removeField(subKey);
        }
      },
      new BasicUpdate("$rename", true) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          Object objValue = subObject.removeField(subKey);
          String newKey = (String) object;
          Util.putValue(objOriginal, newKey, objValue);
        }
      },
      new BasicUpdate("$push", true) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          BasicDBList currentValue;
          if (subObject.containsField(subKey)) {
            currentValue = expressionParser.typecast(subKey, subObject.get(subKey), BasicDBList.class);
          } else {
            currentValue = new BasicDBList();
          }

          if (object instanceof DBObject && (((DBObject) object).get("$each") != null)) {
            DBObject dbObject = (DBObject) object;
            Object eachObject = dbObject.get("$each");
            BasicDBList eachList = expressionParser.typecast(command + ".$each value", eachObject, BasicDBList.class);

            // position
            int pos = currentValue.size();
            Object positionObject = dbObject.get("$position");
            if (positionObject != null) {
              pos = expressionParser.typecast(command + ".$position value", positionObject, Number.class).intValue();
              if (pos >= currentValue.size()) {
                pos = currentValue.size();
              }
            }
            currentValue.addAll(pos, eachList);

            // sort
            Object sortObj = dbObject.get("$sort");
            if (sortObj != null) {
              if (sortObj instanceof Number) {
                int sortDirection = ((Number) sortObj).intValue();
                Collections.sort(currentValue, expressionParser.objectComparator(sortDirection));
              } else if (sortObj instanceof DBObject) {
                Collections.sort(currentValue, expressionParser.sortSpecificationComparator((DBObject) sortObj));
              }
            }

            // slice
            Object sliceObject = dbObject.get("$slice");
            if (sliceObject != null) {
              int slice = expressionParser.typecast(command + ".slice value", sliceObject, Number.class).intValue();
              if (slice == 0) {
                currentValue.clear();
                currentValue.trimToSize();
              } else if (slice > 0) {
                BasicDBList subList = new BasicDBList();
                subList.addAll(currentValue.subList(0, Math.min(slice, currentValue.size())));
                currentValue = subList;
              } else if (slice < 0 && currentValue.size() + slice >= 0) {
                BasicDBList subList = new BasicDBList();
                subList.addAll(currentValue.subList(Math.max(currentValue.size() + slice, 0), currentValue.size()));
                currentValue = subList;
              }
            }
          } else {
            currentValue.add(object);
          }

          subObject.put(subKey, currentValue);
        }
      },
      new BasicUpdate("$pushAll", true) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          List newList = expressionParser.typecast(command + " value", object, List.class);
          if (!subObject.containsField(subKey)) {
            subObject.put(subKey, newList);
          } else {
            BasicDBList currentValue = expressionParser.typecast(subKey, subObject.get(subKey), BasicDBList.class);
            currentValue.addAll(newList);
            subObject.put(subKey, currentValue);
          }
        }
      },
      new BasicUpdate("$addToSet", true) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          boolean isEach = false;
          BasicDBList currentValue = expressionParser.typecast(subKey, subObject.get(subKey), BasicDBList.class);
          currentValue = (currentValue == null) ? new BasicDBList() : currentValue;
          if (object instanceof DBObject) {
            Object eachObject = ((DBObject) object).get("$each");
            if (eachObject != null) {
              isEach = true;
              BasicDBList newList = expressionParser.typecast(command + ".$each value", eachObject, BasicDBList.class);
              if (newList == null) {
                throw new FongoException(command + ".$each must not be null");
              }
              for (Object newValue : newList) {
                if (!currentValue.contains(newValue)) {
                  currentValue.add(newValue);
                }
              }
            }
          }
          if (!isEach) {
            if (!currentValue.contains(object)) {
              currentValue.add(object);
            }
          }
          subObject.put(subKey, currentValue);
        }
      },
      new BasicUpdate("$pop", false) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          BasicDBList currentList = expressionParser.typecast(command, subObject.get(subKey), BasicDBList.class);
          if (currentList != null && currentList.size() > 0) {
            int direction = expressionParser.typecast(command, object, Number.class).intValue();
            if (direction > 0) {
              currentList.remove(currentList.size() - 1);
            } else {
              currentList.remove(0);
            }
          }
        }
      },
      new BasicUpdate("$pull", false) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          BasicDBList currentList = expressionParser.typecast(command + " only works on arrays", subObject.get(subKey), BasicDBList.class);
          if (currentList != null && currentList.size() > 0) {
            BasicDBList newList = new BasicDBList();
            if (object instanceof DBObject) {
              Filter filter = expressionParser.buildFilter((DBObject) object);
              for (Object item : currentList) {
                if (!(item instanceof DBObject) || !filter.apply((DBObject) item)) {
                  newList.add(item);
                }
              }
            } else {
              for (Object item : currentList) {
                if (!object.equals(item)) {
                  newList.add(item);
                }
              }
            }
            subObject.put(subKey, newList);
          }
        }
      },
      new BasicUpdate("$pullAll", false) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          BasicDBList currentList = expressionParser.typecast(command + " only works on arrays", subObject.get(subKey), BasicDBList.class);
          if (currentList != null && currentList.size() > 0) {
            Set pullSet = new HashSet(expressionParser.typecast(command, object, List.class));
            BasicDBList newList = new BasicDBList();
            for (Object item : currentList) {
              if (!pullSet.contains(item)) {
                newList.add(item);
              }
            }
            subObject.put(subKey, newList);
          }
        }
      },
      new BasicUpdate("$bit", false) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          Number currentNumber = expressionParser.typecast(command + " only works on integers", subObject.get(subKey), Number.class);
          if (currentNumber != null) {
            if (currentNumber instanceof Float || currentNumber instanceof Double) {
              throw new FongoException(command + " only works on integers");
            }
            DBObject bitOps = expressionParser.typecast(command, object, DBObject.class);
            for (String op : bitOps.keySet()) {
              Number opValue = expressionParser.typecast(command + "." + op, bitOps.get(op), Number.class);
              if ("and".equals(op)) {
                if (opValue instanceof Long || currentNumber instanceof Long) {
                  currentNumber = currentNumber.longValue() & opValue.longValue();
                } else {
                  currentNumber = currentNumber.intValue() & opValue.intValue();
                }
              } else if ("or".equals(op)) {
                if (opValue instanceof Long || currentNumber instanceof Long) {
                  currentNumber = currentNumber.longValue() | opValue.longValue();
                } else {
                  currentNumber = currentNumber.intValue() | opValue.intValue();
                }
              } else {
                throw new FongoException(command + "." + op + " is not valid.");
              }
            }
            subObject.put(subKey, currentNumber);
          }
        }
      },
      new BasicUpdate("$currentDate", true) {
        @Override
        void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
          if (Boolean.TRUE.equals(object)) {
            subObject.put(subKey, new Date());
          } else if ((objOriginal != null) && (object instanceof DBObject)) {
            Object typeObject = ((DBObject) object).get("$type");
            String type = expressionParser.typecast(command, typeObject, String.class);
            if ("date".equals(type)) {
              subObject.put(subKey, new Date());
            } else {
              throw new FongoException(command + " called with unsupported type");
            }
          } else {
            throw new FongoException(command + " parameters should be either a boolean true or a document specifying a type");
          }
        }
      }
  );
  final Map<String, BasicUpdate> commandMap = createCommandMap();
  private final BasicUpdate basicUpdateForUpsert = new BasicUpdate("upsert", true) {
    @Override
    void mergeAction(String subKey, DBObject subObject, Object object, DBObject objOriginal, boolean isCreated) {
      subObject.put(subKey, object);
    }
  };

  private Map<String, BasicUpdate> createCommandMap() {
    Map<String, BasicUpdate> map = new HashMap<String, BasicUpdate>();
    for (BasicUpdate item : commands) {
      map.put(item.command, item);
    }
    return map;
  }

  public DBObject doUpdate(final DBObject obj, final DBObject update) {
    return doUpdate(obj, update, new BasicDBObject(), true);
  }

  /**
   * @param obj
   * @param update
   * @param query
   * @param isCreated true if it's a new object.
   * @return
   */
  public DBObject doUpdate(final DBObject obj, final DBObject update, DBObject query, boolean isCreated) {
    boolean updateDone = false;
    Set<String> seenKeys = new HashSet<String>();
    for (String command : update.keySet()) {
      BasicUpdate basicUpdate = commandMap.get(command);
      if (basicUpdate != null) {
        if (LOG.isDebugEnabled()) {
          LOG.debug("Doing update for command {}", command);
        }
        basicUpdate.doUpdate(obj, update, seenKeys, query, isCreated);
        updateDone = true;
      } else if (command.startsWith("$")) {
        throw new FongoException("unsupported update: " + update);
      }
    }
    if (!updateDone) {
      for (Iterator<String> iter = obj.keySet().iterator(); iter.hasNext(); ) {
        String key = iter.next();
        if (!key.equals("_id")) {
          iter.remove();
        }
      }
      obj.putAll(update);
    }
    return obj;
  }

  public void mergeEmbeddedValueFromQuery(BasicDBObject newObject, DBObject q) {
    basicUpdateForUpsert.doUpdate(newObject, new BasicDBObject(basicUpdateForUpsert.command, q), new HashSet<String>(), q, false);
  }
}

redpajama_set_name: RedPajamaGithub


Metro: Last Light is just one of many titles not coming to the Wii U, a platform that is struggling to keep up with its console competitors with regards to its ability to render games.
Beynon may have been more diplomatic about it, but those are nonetheless wounding words. Do you agree with Shishkovtsov?


The Max Planck Institute for Informatics celebrates its 25th anniversary. On this occasion, we will hold a scientific symposium on September 24 and 25. The program features thirteen world-leading scientists, including several Turing Award winners, Leibniz Prize winners, Humboldt Prize winners, ERC Grant winners, and chief scientists of high-tech companies.


text:
KASPER BJORKE
DARKNESS FALLS
REPTILE YOUTH
Welcome to Reptile Youth, the bastard sons of psychedelic Sixties Soul, Post Punk and Synth Pop, stirred into a lookbook-approved vodka cocktail of sweaty, high-energy post-modern pop. Smart, but not too clever that they won't make you seriously lose your shit watching them live, the band are worshipped by almost every show critic, or indeed gig-goer out there.
Reptile Youth is a post pop/punk/electronic duo from Denmark. The band was founded in 2009 by Mads Damsgaard Kristiansen and Esben Valløe. In 2010 the band received fame after doing the longest China Tour ever for a Danish band. In the following year the band expanded with the drummer Emil Vissing Christiensen and build up an even bigger hype by playing their intense live show at big festivals and venues as the only band without an actual release: Iceland Airwaves (IS), Reeperbahn Festival (Hamburg, Germany), Montreux Jazz Festival (Switzerland), Wavves Vienna (Austria), Sonic Visions (Luxembourg), Unit Tokyo (Japan), CMJ (New York), Eurosonic (Groningen), SPOT Festival and Roskilde Festival (Denmark).
In 2012 the band transmogrified into a new form, under the name of Reptile Youth. Expanding their stage presence with guitarist Mads Bergland and Emil Vissing on drums, the band continues to tour out of their Copenhagen headquarters - a city with a well known high-octane live band scene.
2012 has also seen Reptile Youth's hotly anticipated debut album released to the world. Capturing the raucous kinetics of their live shows, the LP is set to stun. The album has been produced in London with star producers Dave M. Allen & Mark Ralph. Allen famously produced legendary bands like The Cure, Sisters of Mercy and Human League, while Ralph sat behind the desk for the Filthy Dukes, remixed Lady Gaga and produced the new Hot Chip album.
A stunning debut album released about a year ago, followed by an extensive tour schedule and numerous radio singles, a massive remix album rounding things off from May 2013 onwards, unveiling more, and mostly electronic, variations of the Reptile Youth trademark sound.
But still this is not the end of the story as Reptile Youth can't stand keeping all this for themselves. Mads and Esben are starving for reflections of their own world and so they've been curious to see what impact their music left on other creatives.
This attitude in mind they've been curating what has been filed under the name of The Reptile Youth Video Project within the last months and asked different video directors to shoot videos for every song from their highly acclaimed debut album. After almost one year in the making we are proud to present The Reptile Youth Video Project on youtube.com/hfnmusicTV and the brilliant Remix album released which got released in Mai 2013.
In the near future Reptile Youth will continue to tour all over the world and focus on the production of their second album.
http://www.reptileyouth.com/
Acapella Records
Maillefer 3
hello@acapellarecords.com


text:
Oshkosh's quarterly profits rise 31 percent
But the parent of Manatee's Pierce Manufacturing lowers forecast for the next quarter.
MATTHEW SAUER
The parent of Manatee County's Pierce Manufacturing said its quarterly profits rose 31 percent, but Oshkosh Truck Corp. lowered its expectations for the next quarter.
The maker of firetrucks and military vehicles said its first quarter income rose to $11.3 million, or 65 cents per share, from $8.6 million, or 50 cents per share, in the same period a year ago.
Oshkosh was expected to earn 48 cents per share on average, within a range of 45 cents to 50 cents, according to four analysts polled by Thomson First Call.
But the Oshkosh, Wis.-based company said it expects profits for the second quarter to be $13.5 million, or 77 cents per share, compared with an earlier estimate of 83 cents per share.
The company estimates third-quarter net income of $18.5 million, or $1.05 per share, and fourth-quarter net income of $22 million, or $1.22 per share. The company's second quarter ends March 31.
Oshkosh's shares, which trade on the New York Stock Exchange, were selling for $60.71 at the close of regular trading Thursday, down 97 cents.
The company is guardedly optimistic about the global economy, but still expects 2003 earnings of about $3.70 per share. The average analyst earnings estimate for 2003 is $3.89 per share.
In the most recent quarter, the company's fire and emergency division had operating income of $10 million, a 29.3 percent increase when compared to the same period a year ago. Sales rose 17.8 percent to $113 million.
Sales of defense vehicles rose 8.8 percent to $148.6 million.
The company makes both firetrucks and military trailers at its plant in Manatee County.


These are some lies we made up about Ossian.
The alien pilot of an extraterrestrial spacecraft has frequently been spotted by an old woman hunting in a forest next to Ossian.
The phantom of a guy dressed as a janitor is rumored to have been seen on a few instances in Calmar City Park late at night dining on a cookie.
A lady with a somewhat see-through body can repeatedly be perceived taking a rest in a beanbag in a trailer in Ossian.
The phantom of a security guard with a bullet hole in his forehead can be perceived very often at Lake Meyer Dam very late at night smoking a cigar. A man who lives here says that this ghost is the stressed spirit of a long departed Ossian local resident.
A space alien from Venus has from time to time been noticed reading a newspaper under a streetlamp in Ossian.


Winter was mild and dry. Spring too was characterized by a low rainfall. The vines sprouted slightly sooner than usual but growth was regular and healthy. A very hot summer led to an earlier veraison and harvest. We started with the Cabernet Franc at the beginning of September and concluded with the Petit Verdot on the 20th of the month. A severe selection was applied both in the field and on the sorting tables leading to a very low yield per hectare.
Of a deep ruby red, Monteti 2012 emanates notes of mediterranean woodland, blackberry, leather, rose and graphite. Full bodied and enveloping, a very fine tannic structure leads to a long-lasting finale.
VARIETIES: 55% Petit Verdot, 25% Cabernet Sauvignon, 20% Cabernet Franc.
VINIFICATION: temperature-controlled spontaneous fermentation with indigenous yeasts. The vinification of the grapes from the various plots of our vineyards takes place separately in open tapered steel vats. Each plot is kept classified separately also along all the wood ageing process, up to the moment of the blend composition.
MACERATION: up to 21 days depending on the variety. Long contact with lees to drastically reduce the use of sulphites.
MATURING: 18 months in medium-toasted French oak barriques (70% new and 30% of second passage). This is followed by further 24 months of bottle ageing. No fining or filtering.


A visit to the Postal Museum followed by a mail ride and a visit to Charterhouse.
In the afternoon a visit to the Monet Exhibition at the National Gallery. Tickets are not on sale yet and if they are unavailable we will visit another London Gallery.
A guided tour of John Milton's sixteenth-century cottage. In the afternoon a visit to Chenies Manor, a Tudor Manor House and Grade I listed building.
A city and village tour of London's French quarter followed by a visit to the V&A's new European Gallery or the Wallace Collection.


text:
export default class IconError extends Error {
  constructor (msg) {
    super(msg)
    this.name = this.constructor.name
  }
}


text:
"I expose slavery in this country, because to expose it, is to kill it. Slavery is one of those monsters of darkness, to whom the light of truth, is death"
~ Frederick Douglass
CURRENT STORIES FROM AROUND THE WORLD:
Trafficking from Google News
Other stories may added, by any of our members, to our Meetup site Message Board discussion: In The News
Highlighted Stories of Interest:
Legislators Work to Improve Laws on Runaways By Ian Urbina, NY Times, January 4, 2010
WASHINGTON — State and federal lawmakers from around the country are pressing a variety of new laws that would make sweeping changes in the way runaways and prostituted children are handled by police officers and social workers.
Forced hair braiding, Newark NJ by Joe Ryan, Star Ledger, March 18, 2009
From the West African country Togo, they were promised normal jobs. 20 girls in total, between the ages of 10 – 19, had to work 7 days a week, for 16 hours a day, subject to beatings.
Girls on Our Streets by Nicholas D. Kristof for NY Times Op-Ed, May 6, 2009
For many years Atlanta, Georgia has been highlighted as a place where 14 year old girls sell themselves on the street.
Sex Trafficking of Children in America 2008
The FBI is still confronted with the very real problem of domestic sex trafficking.
Teen Girls Stories of Sex Trafficking in the U.S. 2006
Several stories of girls kidnapped from our backyards and forced into prostitution.
Jessica Neuwirth: Women of the Year 2003, by Stephanie Goldberg
Whether lobbying against sex tours in or judging genocide in Rwanda, Jessica Neuwirth makes women's rights a legal priority. For six years one woman tried to persuade prosecutors to get involved in a local tourism agency that arranged sex tours for men from New York City.


Previously nominated for both a Grammy and an Ivor Novello for his CamelPhat collab 'Cola', Elderbrook has switched the focus back to his skills as a purveyor of innovative dance blended with leftfield pop. His recent tracks 'Sleepwalking' and 'Capricorn' are now approaching 10 million streams, while support has included airplay from airplay from Annie Mac, Pete Tong, Diplo and MistaJam. His credentials have been further underlined by a dream list of remixers in the shape of Claude VonStroke, Jamie Jones and Skream.
Now Elderbrook continues his upwards momentum by sharing his new EP 'Old Friend'. The title track (and new single) finds Elderbrook focusing on the immediately addictive element of his sound, with an insistent melody and his charismatically delivered lyrics making for an infectious leftfield pop track. It's supported by his production, which builds layers of sound until it reaches a thumping crescendo.
This entry was posted	on Thursday, February 28th, 2019 at 9:41 am	and is filed under cutTheNoize. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.
Powered by WordPress v 5.1.1. Page in 1.664 seconds.


A California couple raised US$27 million from at least 50 Chinese investors seeking US immigration visas but misused two-thirds of the money, instead of building a cancer treatment center they had proposed, the US Securities and Exchange Commission (SEC) said on Thursday.
Charles C Liu and Xin "Lisa" Wang, both of Laguna Niguel, California, promoted the facility as a project that would help the Chinese investors obtain permanent US immigration visas through a federal program known as EB-5, the SEC said.
But Liu transferred US$11.8 million of the funds to three firms in China, including one in which he is chief executive and chairman, according to the SEC's civil complaint, unsealed in a Los Angeles federal court on Thursday.
Liu also diverted another US$7 million to personal accounts for him and Wang, the SEC said. No construction has started at the proposed facility site more than 18 months after the couple began taking investments, the SEC said.


That's right fellow BABYs, your #1 head over feels rookie fangirl (aka me) is pleased to announce that the six aliens of B.A.P just might be coming your way! As recently announced on the official B.A.P Facebook page, this whistle blowing, noona-shaming, often blonde powerhouse group is plunging into the next leg of their B.A.P Live on Earth concerts with the B.A.P Live on Earth Pacific Tour!
Though previously TS had only announced Live on Earth Japan, scheduled for May 24, it seems as though they are going to test the waters a bit more with a go big or go home mentality. Hopefully in the mean time the boys are able to get some rest and pull themselves together, as they have been almost continuously promoting since their debut in January 2012. In my opinion, member Himchan, who has been out of the promotional circuit due to an injury sustained during a car accident before the "One Shot" promo cycle started, will most likely return to the stage for this overseas endeavor.
Now, now, calm your ugly sobbing and your piercing screams! I don't know whether the US tour dates say 7 ~ 17 because they have yet to negotiate an exact date or because the groups plans on actually being here for ten days, which is probably unlikely, but in the event that it is only date, it will most likely be in Los Angeles. To which I say, screw you Los Angeles why do you get to hog all the K-pop. But either way, I know I for one am going to max out a credit card for this concert, because the Lord knows I need more Yong-guk in my life.


A set of hand-sewn pocket notebooks featuring pencil drawings inspired by a vintage-style orangerie. Each design is handmade by the artist and sewn with a traditional bookbinding stitch.
The front of each notepad features a tiny sketch. To bring you that special touch of detail, the inside covers are also subtly illustrated with life-sized ladybirds to delight and surprise the curious.
No bigger than your hand, at A6 size, these neat little notebooks can be tucked safely away in a pocket ready for your next thought, memory or brilliant idea. The empty pages inside are a treat for doodlers and dreamers - they are made with smooth satin-finish paper, and are blank as new snow, so your imagination can be free to make its mark!


For years, our financial staff at Beverly Hills BMW has offered expert advice for those seeking a great BMW car loan or lease. Our service doesn't stop there. Los Angeles customers can come in and take advantage of our knowledgeable BMW car repair technicians and a fully-stocked inventory of BMW car parts.
Beverly Hills BMW is proud to partner with Blind Children's Center Golf Tournament, St. Judes Hospital and Wilshire Crest Elementary School.
Take A Virtual Tour Of Our Dealership!


text:
Tetraphase Pharmaceuticals and AcelRx Pharmaceuticals Enter into Definitive Merger Agreement
AcelRx to Acquire Tetraphase in an all-stock transaction
Tetraphase equity holders to own 14.6% of the combined company and receive Contingent Value Rights worth up to $12.5 Million
Acquisition Expected to Close in Q2 2020
Companies Enter into a Co-Promotion Agreement
March 16, 2020 07:30 AM Eastern Daylight Time
WATERTOWN, Mass.--(BUSINESS WIRE)--Tetraphase Pharmaceuticals, Inc. (Nasdaq: TTPH), a biopharmaceutical company focused on commercializing its novel tetracycline XERAVA to treat serious and life-threatening infections, today announced the execution of a definitive merger agreement pursuant to which AcelRx Pharmaceuticals (Nasdaq: ACRX) would acquire Tetraphase in a stock for stock transaction. Under the terms of the agreement, Tetraphase stockholders will receive, for each share of Tetraphase common stock, 0.6303 of a share of AcelRx common stock, valued at approximately $14.4 million as of the close of trading on March 13, 2020, and one contingent value right (CVR), which would entitle the holders to receive aggregate payments of up to $12.5 million for the achievement of future XERAVA™ net sales milestones starting in 2021. The transaction was unanimously approved by both the AcelRx and Tetraphase boards of directors and is expected to close in the second quarter of 2020. Select Tetraphase stockholders and warrant holders, including Armistice Capital, LLC, holding in the aggregate approximately 31% of Tetraphase's outstanding common stock, have signed voting agreements in favor of the transaction.
Concurrently with signing the merger agreement, Tetraphase and AcelRx entered into a co-promotion agreement to market and promote XERAVA™ for the treatment of complicated intra-abdominal infections (cIAI) and DSUVIA® for the treatment of acute pain in medically supervised settings. The co-promotion agreement will allow the AcelRx and Tetraphase teams to benefit immediately from the promotion of multiple products, leverage each company's customer relationships, and create efficiencies among commercial teams. The combined sales team will cover in excess of 70% of each company's originally targeted hospitals.
"This transaction is an important move forward for Tetraphase and more importantly, for XERAVA and the patients who need this treatment," said Larry Edwards, President and Chief Executive Officer of Tetraphase. "We are excited to collaborate with AcelRx, a partner whose strategic goals complement our own. We continue to believe that XERAVA is a key addition to the hospital anti-infective armamentarium, and believe that together with AcelRx we will be able to more effectively bring new treatments to patients in healthcare institutions."
"We are excited to have reached agreement with Tetraphase, a company with a well-established U.S. salesforce and a high-growth hospital product that complements AcelRx's commercial strategy," said Vince Angotti, Chief Executive Officer of AcelRx. "This transaction highlights our focus on efficiently commercializing DSUVIA with a salesforce promoting multiple products and is the first step in our plan to create a growth platform to further consolidate hospital-focused pharmaceutical companies and products. We look forward to integrating XERAVA and the existing Tetraphase commercial infrastructure with our own as we strengthen our position on promoting innovative products to healthcare institutions allowing patients access to new and improved treatments."
Based on the closing price of AcelRx stock on March 13, 2020, the stock consideration to be received by Tetraphase equityholders is valued at approximately $14.4 million, with approximately $7.4 million of this amount allocated to the Company's outstanding common stock warrants. In the merger, Tetraphase stockholders would also be entitled to receive, for each share of Tetraphase common stock, one non-tradeable CVR, the holders of which will be entitled to receive payments of up to an additional $12.5 million in the aggregate upon the achievement of net sales of XERAVA™ in the United States of at least (i) $20 million during 2021, (ii) $35 million during any year ending on or before December 31, 2024 and (iii) $55 million during any year ending on or before December 31, 2024. The total cost synergy expectation from the combined company exceeds 90% of the Tetraphase operating expenses and are expected to be fully realized in 2021.
Closing of the transaction is subject to specified closing conditions, including Tetraphase having a minimum amount of net cash as of the closing and approval by Tetraphase stockholders. Upon the closing of the transaction, Tetraphase will become a privately held company and shares of Tetraphase's common stock will no longer be listed on any public market. Subject to certain limited exceptions, the CVRs will be non-transferable.
Janney Montgomery Scott is acting as financial advisor to Tetraphase and has rendered a fairness opinion to Tetraphase's board of directors in connection with the transaction. Wilmer Cutler Pickering Hale and Dorr LLP is acting as legal advisor to Tetraphase in connection with the transaction.
About XERAVATM
XERAVA (eravacycline for injection) is a tetracycline class antibacterial indicated for the treatment of complicated intra-abdominal infections (cIAI) in patients 18 years of age and older. XERAVA was investigated for the treatment of cIAI as part of the Company's IGNITE (Investigating Gram-Negative Infections Treated with Eravacycline) Phase 3 program. In the first pivotal Phase 3 trial in patients with cIAI, twice-daily intravenous (IV) XERAVA met the primary endpoint by demonstrating statistical non-inferiority of clinical response compared to ertapenem and was well-tolerated. In the second Phase 3 clinical trial in patients with cIAI, twice-daily IV XERAVA met the primary endpoint by demonstrating statistical non-inferiority of clinical response compared to meropenem and was well-tolerated. In both trials, XERAVA achieved high cure rates in patients with Gram-negative pathogens, including resistant isolates.
XERAVATM Important Safety Information
XERAVA is a tetracycline class antibacterial indicated for the treatment of complicated intra-abdominal infections in patients 18 years of age and older.
XERAVA is not indicated for the treatment of complicated urinary tract infections.
To reduce the development of drug-resistant bacteria and maintain the effectiveness of XERAVA and other antibacterial drugs, XERAVA should be used only to treat or prevent infections that are proven or strongly suspected to be caused by susceptible bacteria.
XERAVA is contraindicated for use in patients with known hypersensitivity to eravacycline, tetracycline-class antibacterial drugs or to any of the excipients. Life-threatening hypersensitivity (anaphylactic) reactions have been reported with XERAVA.
The use of XERAVA during tooth development (last half of pregnancy, infancy and childhood to the age of eight years) may cause permanent discoloration of the teeth (yellow-gray-brown) and enamel hypoplasia.
The use of XERAVA during the second and third trimester of pregnancy, infancy and childhood up to the age of eight years may cause reversible inhibition of bone growth.
Clostridium difficile associated diarrhea (CDAD) has been reported with use of nearly all antibacterial agents and may range in severity from mild diarrhea to fatal colitis.
The most common adverse reactions observed in clinical trials (incidence ≥ 3%) were infusion site reactions, nausea, and vomiting.
XERAVA is structurally similar to tetracycline-class antibacterial drugs and may have similar adverse reactions. Adverse reactions including photosensitivity, pseudotumor cerebri, and anti-anabolic action which has led to increased blood urea nitrogen, azotemia, acidosis, hyperphosphatemia, pancreatitis, and abnormal liver function tests, have been reported for other tetracycline-class antibacterial drugs, and may occur with XERAVA. Discontinue XERAVA if any of these adverse reactions are suspected.
To report SUSPECTED ADVERSE REACTIONS, contact Tetraphase Pharmaceuticals Inc., at 1-833-7-XERAVA (1-833-793-7282) or FDA at 1‑800‑FDA-1088 or www.fda.gov/medwatch.
Please see full prescribing information for XERAVA.
About Tetraphase Pharmaceuticals, Inc.
Tetraphase Pharmaceuticals, Inc., is a biopharmaceutical company using its proprietary chemistry technology to create novel tetracyclines for serious and life-threatening conditions, including infections caused by many of the multidrug-resistant bacteria highlighted as urgent public health threats by the World Health Organization and the Centers for Disease Control and Prevention. The Company has created more than 3,000 novel tetracycline compounds using its proprietary technology platform. Tetraphase's lead product XERAVA™ is approved for the treatment of complicated intra-abdominal infections by the U.S. Food and Drug Administration and the European Medicines Agency. The Company's pipeline also includes antibiotics TP-271 and TP-6076, which are Phase 2 ready, and TP-2846, which is in preclinical testing for acute myeloid leukemia. The Company intends to out license its pipeline candidates. Please visit www.tphase.com for more company information.
Important Information for Investors and Stockholders
This communication does not constitute an offer to sell or the solicitation of an offer to buy any securities or a solicitation of any vote or approval. It does not constitute a prospectus or prospectus equivalent document. In connection with the proposed transaction between AcelRx and Tetraphase, AcelRx and Tetraphase will file relevant materials with the Securities and Exchange Commission (the "SEC"), including an AcelRx registration statement on Form S-4 that will include a proxy statement of Tetraphase that also constitutes a prospectus of AcelRx, and a definitive proxy statement/prospectus will be mailed to stockholders of Tetraphase. INVESTORS AND SECURITY HOLDERS OF TETRAPHASE ARE URGED TO READ THE PROXY STATEMENT/PROSPECTUS AND OTHER DOCUMENTS THAT WILL BE FILED WITH THE SEC CAREFULLY AND IN THEIR ENTIRETY WHEN THEY BECOME AVAILABLE BECAUSE THEY WILL CONTAIN IMPORTANT INFORMATION. Investors and security holders will be able to obtain free copies of the registration statement and the proxy statement/prospectus (when available) and other documents filed with the SEC by AcelRx or Tetraphase through the website maintained by the SEC at www.sec.gov. Copies of the documents filed with the SEC by Tetraphase will be available free of charge on the "Investors—Financials and Filings" portion of Tetraphase's internet website at www.tphase.com.
Tetraphase and its directors and executive officers may be deemed to be participants in the solicitation of proxies in respect of the transactions contemplated by the merger agreement. Information regarding Tetraphase's directors and executive officers is contained in Tetraphase's Annual Report on Form 10-K for the year ended December 31, 2019, filed with the SEC on March 12, 2020. Additional information regarding the direct and indirect interests of Tetraphase's directors and executive officers in the proposed transaction will be included in the proxy statement when it is filed with the SEC.
Statements in this press release regarding the proposed transaction between AcelRx and Tetraphase, the expected timetable for completing the transaction, future financial and operating results, benefits and synergies of the transaction, future opportunities for the combined company and any other statements about Tetraphase management's future expectations, beliefs, goals, plans or prospects constitute forward‑looking statements within the meaning of the Private Securities Litigation Reform Act of 1995. Any statements that are not statements of historical fact (including statements containing "believes," "anticipates," "plans," "expects," "may," "will," "would," "intends," "estimates" and similar expressions) should also be considered to be forward‑looking statements. There are a number of important factors that could cause actual results or events to differ materially from those indicated by such forward‑looking statements, including the risk that the proposed merger may not be completed in a timely manner, or at all, which may adversely affect Tetraphase's business and the price of its common stock; the failure to satisfy all of the closing conditions of the proposed merger, including the adoption of the merger agreement by Tetraphase's stockholders; the occurrence of any event, change or other circumstance that could give rise to the termination of the merger agreement; the effect of the announcement or pendency of the proposed merger on Tetraphase's business, operating results and relationships with customers, suppliers, competitors and others; risks that the proposed merger may disrupt Tetraphase's current plans and business operations; potential difficulties retaining employees as a result of the proposed merger; risks related to the diverting of management's attention from Tetraphase's ongoing business operations; the outcome of any legal proceedings that may be instituted against Tetraphase related to the merger agreement or the proposed merger; risks relating to product development and commercialization, demand for Tetraphase's products and limited number of customers; risks associated with competition and other commercial and other risk factors discussed in the "Risk Factors" section of our annual report on Form 10-K for the year ended December 31, 2019, filed with the SEC on March 12, 2020. In addition, the forward-looking statements included in this press release represent our views as of March 16, 2020. We anticipate that subsequent events and developments will cause our views to change. However, while we may elect to update these forward-looking statements at some point in the future, we specifically disclaim any obligation to do so. These forward-looking statements should not be relied upon as representing Tetraphase's views as of any later date.
Media and Investor Contact:
Argot Partners
Maeve Conneighton
maeve@argotpartners.com


How does a Pacemaker Implant work?
Pacemaker implantation is a common surgery and it significantly improves the quality of life led by the patient. The blood-pumping organ, heart, is essentially made of a few groups of muscles. These muscles are controlled by electrical signals to ensure that the heart beats naturally and effectively to circulate blood to all parts of the body. When this electrical signal gets disrupted due to some reason, then an individual may experience tachycardia (where hear beats abnormally slow), heart block, arrhythmia (irregular heartbeat), or a cardiac arrest (abrupt and sudden stopping of the heartbeat).
Sick sinus syndrome: It is characterized by a slow heartbeat (bradycardia) or fast heartbeat (tachycardia) or a combination of both. It can happen due to age, a previous history heart attack, and thyroid problem, too much of potassium accumulation in blood, heart surgery, or sleep apnea.
In this case, the impulse is either delayed or absent.
The heart can stop beating. It may result because of the presence of coronary artery disease and muscle problems in the heart, which can happen after the age of 35.
A pacemaker implant is a small device that weighs around 20 g to 50 g and is the size of a matchbox. It has a pulse generator with a battery, a tiny computer circuit and a few wires called pacing leads. This system is attached to the heart and it emits signals through the wires. The pacing rate or the rate of electrical impulses can be adjusted as per the requirement of the body and be accordingly programmed. It can sense if a heartbeat is missed or if the heart is beating too slow. Accordingly, it starts sending a steady signal to normalize the beating of the heart. If the beats are normal, then it simply does not send any signal.
Electrocardiogram: Electrodes, which are basically sensor pads, are attached to the chest or limbs at times to measure the heart impulses.
Ambulatory or Holter monitor records the rhythm of heart for a period of 24 hours. Wires go from the chest to a battery-operated recording device, which is carried in the pocket or worn as a belt or a shoulder strap. A diary is kept with the patient. The doctor compares the diary with the recordings to figure out the cause.
Harmless sound waves are employed to allow the doctor to see the heart functioning. Without incision, a transducer is placed in the chest to collect the waves from the heart and it transmits it to a machine. The sound wave patterns are interpreted to compose an image of the beating heart on a placed monitor.
An electrocardiogram is taken before and after a patient walks on a treadmill and then nuclear imaging is done.
Insertion of a permanent pacemaker is a minimally invasive procedure. Access to heart chambers takes place as transvenous access to local anaesthesia. The most common method is via the subclavian vein or the cephalic vein. In rare cases, it is through femoral vein or the internal jugular vein. Either in an operating room or in a cardiac catheterization laboratory, the pacemaker implant procedure is performed.
In the infraclavicular region, the pacing generator is placed subcutaneously. Via thoracotomy, the pacemaker leads are implanted surgically. The pacing generator is then placed in the abdominal area. Either via left or right pectoral sites, single chamber and dual chamber insertion can be accomplished. The chest is then prepared. Sterile drapes are applied to the incision area to keep it as sterile as possible. Antibiotic prophylaxis is nowadays employed for the implantation. Preoperative antibiotic can reduce the chances of any infection by almost 80 percent. Cefazolin 1g is administered intravenously one hour prior to the procedure. Other antibiotics can be administered if the patient is allergic to cephalosporins, vancomycin, or penicillins.
The central vein is accessed percutaneously. Due to skeletal landmarks being deviated in some patients, there will be a need of fluoroscopic examination to reduce the time and complications in access. At the junction of first rib and the clavicle, the subclavian vein is typically accessed. For the confirmation of deep vein thrombosis, a phlebography is required for visualization of the vein.
Now a guide wire is advanced through the access needle and tip of the guide wire in placed in the right atrium or venacaval area under fluoroscopy. The guide wire is kept in place after the needle is withdrawn. If required, a second guide wire is also placed. Double wire technique may be employed through a sheath which is then withdrawn. Two separate sheaths can be manoeuvred over the two guide wires. During the lead advancement, some friction can be felt.
An incision of one to two inches is made in the area of the infraclavicle, which is parallel to the middle third of the clavicle and a subcutaneous pocket is made with both sharp and blunt dissection. This is for the implantation of the pacemaker generator. In many cases, surgeons prefer the access later and pocket first.
A peel-like special sheath and dilator are advanced over the guide wire. The guide wire and dilator are withdrawn keeping the sheath in place. A stylet is then inserted in the center channel of the pacemaker lead making it more rigid. This lead-stylet combination is then inserted into the sheath and advanced to the concerned heart chamber under fluoroscopy. In order to prevent dislodgement, the ventricular lead is positioned before the atrial lead. For the positioning in the tricuspid valve, a small curve at the tip of the stylet make it more mobile to reach the right ventricular apex. The introducing sheath is peeled once the lead is secured. With a pacing system analyser, the lead impedances are measured after the pacing lead stylet is removed. To prevent diaphragmatic stimulation, the pacing is performed at 10V.
After the confirmation of thresholds and lead position, the proximal end of the lead is secured to the pectoralis tissue with the help of a non-absorbable suture. This suture is sewn to a sleeve which is located on the lead. This is placed in the right atrium is a second lead is required. For patients who have already had a cardiac surgery, the lead tip is positioned medially or in the free lateral wall of right atrium. Same process of stylet withdrawal is followed after this. After positioning and testing of leads, the pacemaker pocket is fed with antimicrobial solution and the pulse generator is connected to the leads. To prevent migration or twiddler syndrome, many surgeons secure the generator to the underlying tissue with non-absorbable suture.
Before final confirmation of lead positioning, a look is taken under the fluoroscope. With the help of adhesive strips and absorbable sutures, the incision is closed. A sterile dressing is then applied on the surface. To limit movement for 12 to 24 hours, an immobilizer or arm restraint is applied. The chances of pneumothorax are ruled out with the help of a postoperative chest radiograph.
Usually, a patient is kept under observation for more than a day after the pacemaker implantation surgery. It takes around six weeks before the patient to get used to the implanted device. Heavy works must be avoided initially. One should ensure that the concerned arm is not rendered immobile during this time to prevent a frozen shoulder. A physiotherapist can exactly show the movements that you need to perform to keep your arm healthy. Carry the duly filled pacemaker implant card for emergency to avoid any unwanted situation.
Pacemaker implantation is a common procedure, which is performed across the globe. However, there is a drastic variation in the cost of pacemaker surgery in India and abroad despite the fact that the same technology, equipment, and technique are used to conduct it. This is because of the difference in the hospital charged and the pacemaker cost in India and abroad. The price of pacemaker in India is just a fraction of what it costs in other regions, including the Western countries. This has a huge impact on the total pacemaker surgery cost in India.
Q: What is the cost of pacemaker implant?
A: The cost of pacemaker implant varies from one country to the other. There are a variety of implants available and the cost may vary among different manufacturers.
Q: Do I feel heavy with a pacemaker Implant?
A: Initially yes, but slowly you get use to it.
Q: Is a pacemaker cost covered under insurance?
A: Usually insurances do cover pacemaker cost.
Q: What are the risks of pacemaker implantation?
A: Patients rarely experience complications during or after pacemaker implantation. Infection, perforation in the cardiac muscle, leakage of air around the lungs, and problems with the pacing leads are some of the complications associated with this procedure.
Q: How soon can I drive after pacemaker surgery?
A: You can start driving within a week as long as you do not experience any discomfort such as dizziness and fainting. You should start driving only after consulting your doctor.
Q: How long does a pacemaker battery last?
A: A pacemaker battery may last anywhere between 6 to 10 years. Another surgery to replace the battery is required after that.


text:
Google Pay-Per-Click (PPC) Advertising
Social Media Marketing Tips
Content Creation Tips
Business Updates & News
Company director raises £1000 for National Rheumatoid Arthritis Society by running London Marathon
Longman Media Co. company director and founder Jack Longman ran the Virgin Money London Marathon on the 3rd of October 2021 and has now successfully raised the target goal of £1000 for UK charity NRAS - The National Rheumatoid Arthritis Society. Here's what Jack had to say about the whole experience:
"When I was first accepted into the ballot in late 2019, I couldn't believe it. I know runners who have tried to enter that way for almost a decade with no success, so to get in first try... I knew I was lucky.
Completing the marathon was a huge personal goal for me in my life, as I had watched my father do it 6 times whilst growing up in the 1990's and always dreamt of following in his footsteps running it myself one day.
However, I started to feel like I shouldn't just run it for personal reasons and choose a smaller /lesser known charity or cause that would benefit from the support.
I started conversations with the lovely folk at NRAS in late 2019. They were pleased to hear that I was going to run for them, as apparently I was one of 5 runners on the track! They sent me an awesome care/fundraising package complete with an awesome vest with my name printed on!
Jack's marathon kit courtesy of NRAS!
The reason I chose this charity is mainly because Rheumatoid Arthritis is the illness that my wife's grandfather John Game, suffered with most of his life. It is a vicious disease that causes many side effects and complications that John suffered with for most of his later life.
Jack ran in memory of his wife's grandfather. A long time suffer of Rheumatoid Arthritis.
John was a kind and loving man who would always talk to me about business, having goals and aspirations in life.
I set myself the goal of a £1000, which being honest I didn't know if I could reach or not, but I knew that anything would help this charity as it's not a massive organisation with a huge team.
I started training in November 2019, as I was originally meant to run it in March 2020, but of course that event was postponed until October, and then postponed until this race.
This caused a few issues. In the initial lockdown, I carried on training and kept my fitness at Marathon level pretty much throughout, then when the race was postponed for a second time in September 2020, I lost motivation and my mental health suffered greatly. Training fell by the wayside and as a result my fitness did too. I ended up becoming injured and had to go through physio with the fantastic Dr Annie Bass at Optimal Spine & Sports Dimensions in Blackfriars.
As the newly scheduled race drew closer, I was feeling nervous both about my fitness (due to injury) and hitting the goal for the charity. So I decided to reach out to my personal and professional network both in person and on LinkedIn to raise awareness for my fundraising page and gather donations.
I was absolutely blown away by the support I received, it really helped me get round the course on the day, knowing that I had the support of so many friends, contacts, clients and family behind me. As I crossed the finish line on the day, the wave of emotion and achievement was like nothing I had felt before.
View from the finish line of London Marathon 2021
So I wanted to thank everyone who donated to the fundraising campaign in any way, on behalf of Longman Media Co, my family and NRAS! This money will make a great difference to a charity that does fantastic work for a relatively unknown disease, that affects so many people.
Longman media Co. director/director Jack Longman after completing London Marathon 2021
Thanks guys!" - Jack xo
To find out more about National Rheumatoid Arthritis Society, click the links below:
NRAS: https://nras.org.uk/
Donate: https://nras.org.uk/donate-now/
IG: @nras_uk
LI: https://www.linkedin.com/company/nras/
Tw: https://twitter.com/NRAS_UK
Longman Media Co.
© 2020 Longman Media Co.


text:
How Boston 2024 Used the 'Miracle on Ice' to Sell Its Doomed Bid
The United States' improbable victory over the Soviets turns 36 today.
By Kyle Scott Clauss·	 2/22/2016, 5:05 p.m.
Get a compelling long read and must-have lifestyle tips in your inbox every Sunday morning — great with coffee!
Photo via AP
Thirty-six years ago today, the United States men's ice hockey team defeated a heavily favored juggernaut of a Soviet squad at the 1980 Winter Olympics in Lake Placid, on the way to their first gold medal in 20 years. It was David and Goliath. It was a proxy war for a Cold War growing colder by the day.
It was precisely the kind of narrative Boston 2024 organizers were looking to cash in on. Unbeknownst to them, however, they would soon land on the wrong side of another miracle.
The folks behind the bid to bring the 2024 Summer Olympics to Boston—and for a brief time, across the entire commonwealth—sought to tap into the same patriotism aroused with every replay of Al Michaels' legendary call of the game's final moments, or rerun of Disney's Miracle. Mike Eruzione and Dave Silk, both Boston University alums and heroes of the 1980 team, were among the Olympians on the guestlist for Boston 2024's soiree at Blazing Paddles in October 2014, as well as their teammate and Braintree native Ralph Cox. (Mayor Marty Walsh and Governor Deval Patrick were in attendance as well, and free parking was provided by the Red Sox.)
Around this time last year, vice president of strategic initiatives Amy Sennett reached out to fellow organizers with a list of tweaks for an upcoming presentation, detailed in emails obtained via public records request. It includes avoiding "mentioning volunteers positions in the same answer as jobs," as well as a canned answer to any questions regarding transit, which contained a curious bit of foreshadowing, given what the Brattle Report determined would be the public's role in bearing responsibility for the Boston 2024's financials.
Director of Sport and the Community Ingrid Oelschlager reminded the team that the South Shore's own Dave Silk, winger for the Miracle on Ice team, would be speaking at that night's presentation, and wondered if they could add a little stars-and-stripes razzle-dazzle.
"Should we have a slide up with a picture of the 1980 US Hockey Team's winning moment while he is at the mic?" Oelschlager wrote. "See the attached example, in which you can see the back of Silk's jersey."
"Agree that we should use the Dave Silk image but reminder that we need to use images for which we have a legal license," Sennet replied. "We have [a] Getty image contract so contact me if you need images. I have a very similar Miracle on Ice image for you."
The following night, Silk held aloft his gold medal and told the crowd: "What struck me more than anything was this [Lake Placid] is where dreams came true. This is where miracles happened. This is a hallowed ground. For generations to come, this isn't just a winter wonderland. This is an Olympic village that spawned dreams and careers and made lives and changed lives. Through sports, incredible things can happen, personally collectively and to whole communities."
In June, Eruzione appeared in a promotional video for Boston 2024, speaking over footage of children playing a not-at-all-staged game of street hockey on a rooftop somewhere in Boston. "Local kids who were given opportunities at a young age to play a game that led to something that was incredible. That's what the Olympic Games are. It's the stories about those types of athletes, and people feel a part of it. That's what's so special about the Games," Eruzione says.
But by the following month, the bid would be dead, with millions and millions of debt. The grand irony here is that a seemingly unbeatable Boston 2024, with all its power and experience, was felled by a rag-tag band of amateurs.
A Minimalist Kitchen in the South End
What's In Season Right Now?
An Open Concept Kitchen in Needham
Boston Picnic Guide: Where to Order, and Where to Eat
Our Day Trip Guide to Rockport


At ATI, we're different. Other schools talk about student success, but at ATI it's our mandate. We are held to standards by our accrediting body, which means student success is what we do. Make an appointment today to see if ATI is a match for you, and if you are a match for ATI and our network of employers.
You want something new, a better path for the future but you may not know exactly how to make it happen… Finding a new career path can be a difficult task, but at ATI, we want to help. Our staff understands our prospective students' needs and recognizes the difficulty in pursuing a new or more advanced career. Our professional and knowledgeable Admissions Representatives know it is a huge decision and will take the time to listen to your needs and goals.
At ATI, our knowledgeable Admissions Representatives are always available to answer your questions on life goals and new careers. Admissions Representatives can help prospective students find the right program based on interests and career objectives. We want every student to find the path that is right for them; our goal is for every student to graduate.
ATI's Admissions Representatives are also available to assist with the admissions process, helping prospective students to understand the admissions requirements, procedures, and deadlines. ATI's Admissions staff will then continue to be a resource to students throughout their time at ATI.
ATI is committed to our student's success. ATI offers many programs- one that might be right for you! The best way to learn more about ATI is to schedule an appointment with an Admissions Representative and take a no-obligation tour of our modern campus. Let us help you by scheduling a personal interview and tour. Click here to schedule your tour now!
The first step is to apply. After acceptance, students will receive information about orientation activities. ATI hosts a comprehensive orientation, at which time students receive information regarding class schedules.
YOU CAN MAKE A DIFFERENCE WITH ATI! Get started today!


S (Scripture): 1 Samuel 13:9 So Saul said, "Bring me the burnt offering and the peace offerings." Then he offered a burnt offering. 13:10 Just when he had finished offering the burnt offering, Samuel appeared on the scene. Saul went out to meet him and to greet him.
O (Observation): Saul's job was to rule the people of Israel, as their king. Samuel's was to be the priest/prophet. Samuel was the one passing along messages from God to the people. In this case, when Samuel didn't return when expected, instead of waiting and trusting in the Lord, Saul (the King of Israel, not the lawyer from Breaking Bad) took matters into his own hands by making a sacrifice to the Lord, on his own.
And what's more, he felt this offering was an obligation rather than a joy – based on fear, rather than faith.
Better call Saul…and tell him to just wait a minute.
A (Application): We all have a tendency to want to act on fear rather than faith. We wait for a sign, but feel like we haven't received one. So we go forward anyway with our own plans (kind of like Saul).
When we start taking leadership roles, whether it's in church or business, we tend to confuse God's will with our own will. We don't want to do this. In fact, we even pray that God's will be done and not ours, when we pray the Lord's Prayer.
Waiting on the Lord can be scary. It can even cause you to lose face. When moments like these come, and they will, seek wisdom and counsel from your friends and brothers and sisters in Christ.
I've been on both sides of this issue before. I've taken steps that I thought were God's will, but it truly was my own (and thus fell flat on my face). And I've also sought counsel and used that wisdom to make a decision.
When we are wise enough to hear God's will and do it, let us be thankful. When we go our own way and follow our own will, let us seek God's grace and mercy.
In what area of your life are you awaiting God's presence? Where are some places that God has definitely showed up?
P (Prayer): Lord, why is it so hard to discern your will? Please continue to send us prophets who can remind us of your will in this place, in this time. Amen.
This entry was posted in Digging Daily and tagged King, Prophet, Samuel, Saul. Bookmark the permalink.


I'm a single white male, 34, no kids needing a place to stay until I can gain enough money to get me something small. I do have a job in concrete construction. I'm very clean, a gentleman, help around the property and will supply groceries and amenities as well.


text:
Fox n Forests Launches May 17 ~ PC, PS4, Xbox One & Switch
Action Platformer Fox n Forests Brings Retro Bliss to PC, Consoles May 17
Fox n Forests, the retro action platformer from Developer Bonus Level Entertainment and publisher EuroVideo will spring worldwide onto Nintendo Switch, PlayStation 4, Xbox One, PC, Mac and Linux on May 17th, 2018.
The announcement comes with a brand-new gameplay video, showcasing one of the beautifully designed levels inspired by the classic SNES-era.
Rick the Fox, armed with a magical crossbow, must master its powerful ability to change between two seasons within each level. Create new platforms out of falling leaves in autumn, freeze surroundings in winter, and use other powers at his disposal. Only by mastering the seasons will Rick be able to outfox his enemies, explore the mystic forest, solve brain-teasing puzzles, claim victory against colossal bosses, and bring the mystery of the fifth season to light.
Inspired by timeless classics such as the Castlevania and Zelda series, Fox n Forests will be both accessible and challenging. The game combines modern game design and retro charm accentuated with glorious 16-Bit graphics and a chiptune soundtrack.
Successfully funded via Kickstarter in 2016, Fox n Forests will be the first title from EuroVideo's new games label Wild River. For more information on the title, please visit the official website.


text:
EPA Announces People, Prosperity, Planet Winners
Joanna Schroeder April 28, 2014
Seven winners of the People, Prosperity and Planet (P3) competition were announced as part of the U.S. Environmental Protection Agency's (EPA) 10th annual National Sustainable Design Expo recently held in Washington, D.C. The phase II awards are for innovative and sustainable designs created to help solve today's environmental problems.
"As we mark the 10th year of the National Sustainable Design Expo and P3 competition, we continue to be inspired by the next generation of scientists and engineers shaping the future of our country," said Bob Perciasepe, U.S. EPA Deputy Administrator. "These students support a vision for the future that encourages a prosperous economy while seeking sustainable and creative solutions to some of the most pressing environmental and health challenges facing our world."
EPA's P3 Program challenges student teams to create designs for a sustainable future while offering quality hands-on experience that brings science, technology, engineering and math (STEM) classroom learning to life. This year's winners were selected from 35 competing teams following two days of judging by a panel of national experts convened by the American Association for the Advancement of Science. Each award-winning team is recommended for a grant of up to $90,000 to further develop their design, apply it to real world situations, and bring it to the marketplace.
Winners of this year's awards are:
Cornell University, New York, for designing a low-cost monitor for measuring water quality.
Embry-Riddle Aeronautical University, Florida, for designing an innovative air conditioning system that runs on solar power.
Iowa State University for designing a new kind of fabric made with fibers from bacteria and yeast grown in tea and polymers of corn and soy.
Purdue University, Indiana, for researching how to improve indoor air quality by using plants grown in the air filter of a home HVAC system.
SUNY Stony Brook, New York, for designing and building Poseidon, an ocean energy harvester that converts wave motion into electrical energy.
University of Tennessee, Knoxville, for exploring ways to use green oak or "heart centers," the low-quality part of hardwood logs in U.S. building construction.
University of Wisconsin, Madison, for implementing a campus recycling program for expanded polystyrene packaging thereby diverting almost 2000 boxes and other polystyrene material from landfills in 6 months of operation.
In addition to the seven winning team, 17 teams were recognized as Honorable Mentions for their project quality inspiring innovation for environmental solutions.
bioenergy, biomaterials, Environment, Renewable Energy


text:
Q: Selenium Webdrive Chrome - Sometimes it hangs I come with a problem regarding Selenium I'm using it in a python application.
I created a simple code that opens the --headless browser, selects the chrome profile, and gets the OAUTH2 code from the URL.
The code works fine, but sometimes it freezes completely and hangs on the landing page and won't download the code from the url.
I don't get any feedback other than errors about DEV USB etc.
I'm using Selenium 4.8.0
I tried using selenium stealth but it didn't help.
Before starting I call a subprocess which kills chrome.exe.
Once out of 4 launches, it freezes.
The entire function in the code below.
async def allegroCODE(status):
        status.update(status="[bold green]Zdobywanie kodu...",spinner="bouncingBall", spinner_style="yellow")
        authorization_redirect_url = CODE_URL + '?response_type=code&client_id=' + CLIENT_ID + \
                                    '&redirect_uri=' + REDIRECT_URL
        try:
            FNULL = open(os.devnull, 'w')
            subprocess.call("taskkill /F /IM chrome.exe",stdout=FNULL,stderr=subprocess.STDOUT)
        except:
            pass
        await asyncio.sleep(5)
        options = webdriver.ChromeOptions()
        # options.add_argument("--log-level=3")
        options.add_argument("--headless=new")
        options.add_argument("user-data-dir=C:\\Users\\crepe\\AppData\\Local\\Google\\Chrome\\User Data\\")
        options.add_argument("profile-directory=Profile 1")
        options.add_experimental_option('excludeSwitches', ['enable-logging'])
        ser = Service(r"C:\chromedriver.exe")
        driver = webdriver.Chrome(service=ser, options=options, service_log_path=os.path.devnull)
        driver.set_page_load_timeout(15)
        # stealth(driver,
        #         languages=["en-US", "en"],
        #         vendor="Google Inc.",
        #         platform="Win32",
        #         webgl_vendor="Intel Inc.",
        #         renderer="Intel Iris OpenGL Engine",
        #         fix_hairline=True,
        #         )

        driver.get(authorization_redirect_url)
        code = driver.current_url
        driver.quit()
        code = code.split('=')
        code_ex = code[1]
        console.log(f"[bold green]✅ Udało się zdobyć kod: {code_ex}")
        authorization_code = code_ex
        return authorization_code

Pls ignore my Polish logs : )
P.S. I saw a similar problem already on the forum, but unfortunately nothing solved my problem.
Therefore, I am writing with a separate question.
EDITED:
Logs:
DevTools listening on ws://127.0.0.1:1059/devtools/browser/0497f13c-2bc0-439d-8a8f-2d5c2a597cb7
[17848:12192:0214/231451.183:ERROR:device_event_log_impl.cc(215)] [23:14:51.183] USB: usb_device_handle_win.cc:1046 Failed to read descriptor from node connection: Urz╣dzenie do│╣czone do komputera nie dzia│a. (0x1F)

[17848:12192:0214/231451.183:ERROR:device_event_log_impl.cc(215)] [23:14:51.183] Bluetooth: bluetooth_adapter_winrt.cc:1074 Getting Default Adapter failed.
[17848:12192:0214/231451.185:ERROR:device_event_log_impl.cc(215)] [23:14:51.184] USB: usb_device_handle_win.cc:1046 Failed to read descriptor from node connection: Urz╣dzenie do│╣czone do komputera nie dzia│a. (0x1F)

A: For people who experienced a similar problem.
I dropped the get() function and replaced it with execute_script().
That is, instead of going to the landing page using get(), it calls the JS code that takes me there without crashing.
Note that this is just the way I handled the problem, I still don't know why get() freezes so often.
#my webdrive settings
options = webdriver.ChromeOptions()
options.add_argument("--headless=new")
options.add_argument("user-data-dir=C:\\Users\\**USER_NAME**\\AppData\\Local\\Google\\Chrome\\User Data\\")
options.add_argument("profile-directory=Default")
options.add_argument("--no-sandbox")
options.add_experimental_option('excludeSwitches', ['enable-logging'])
            ser = Service(r"C:\chromedriver_win32\chromedriver.exe")

try:
  #run chrome
  driver = webdriver.Chrome(service=ser, options=options)
  driver.set_window_size(800, 600)
  driver.set_page_load_timeout(30)

  try:
    #execute js script
    #This code takes me to the landing page. Then I check if I arrived
    #by comparing the domain name **END_URL**, e.g. https://facebook.com/.
    driver.execute_script('''
    var callback = arguments[arguments.length - 1];
    var targetUrl = '**END_URL**';

    if (window.location.href.indexOf(targetUrl) === 0) {
        callback();
    } else {
    window.location.href = '**WHERE_YOU_WANT_TO_GO**';
    }
    ''')
    #By using WebDriverWait, wait for the page to load the element.
    wait = WebDriverWait(driver, 30)
    wait.until(EC.presence_of_element_located((By.ID, '**ELEMENT_ID**')))
  except Exception as err:
    print(err)
  finally:
    #Do what you want with the data, I collect the information from the url.
    code = driver.current_url
    #close driver
    driver.quit()

except Exception as err:
    print(err)

redpajama_set_name: RedPajamaStackExchange


This Agile Lean Leadership Executive course is for those who want a quick introduction to the whole concept and pattern.
The heart of Agile and Lean.
Primary focus on serving the customers, decision making and escalation, cross-cutting concerns.