text:
// Copyright 2015 The Bazel Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//    http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package com.google.devtools.build.lib.skyframe;

import static com.google.common.truth.Truth.assertThat;

import com.google.common.base.Objects;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Sets;
import com.google.common.graph.ImmutableGraph;
import com.google.common.util.concurrent.Callables;
import com.google.devtools.build.lib.actions.AbstractAction;
import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.ActionExecutionContext;
import com.google.devtools.build.lib.actions.ActionExecutionException;
import com.google.devtools.build.lib.actions.ActionKeyContext;
import com.google.devtools.build.lib.actions.ActionLookupData;
import com.google.devtools.build.lib.actions.ActionResult;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.Executor;
import com.google.devtools.build.lib.actions.FileStateValue;
import com.google.devtools.build.lib.actions.util.ActionsTestUtil;
import com.google.devtools.build.lib.actions.util.DummyExecutor;
import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.testutil.TimestampGranularityUtils;
import com.google.devtools.build.lib.util.Fingerprint;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.lib.vfs.PathFragment;
import com.google.devtools.build.lib.vfs.Root;
import com.google.devtools.build.lib.vfs.RootedPath;
import com.google.devtools.build.skyframe.EvaluationProgressReceiver;
import com.google.devtools.build.skyframe.EvaluationProgressReceiver.EvaluationState;
import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.SkyValue;
import com.google.devtools.build.skyframe.ValueOrException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.Callable;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Supplier;
import javax.annotation.Nullable;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.JUnit4;

/** Tests for {@link SkyframeAwareAction}. */
@RunWith(JUnit4.class)
public class SkyframeAwareActionTest extends TimestampBuilderTestCase {
  private Builder builder;
  private Executor executor;
  private TrackingEvaluationProgressReceiver progressReceiver;

  @Before
  public final void createBuilder() throws Exception {
    progressReceiver = new TrackingEvaluationProgressReceiver();
    builder = createBuilder(inMemoryCache, 1, /*keepGoing=*/ false, progressReceiver);
  }

  @Before
  public final void createExecutor() throws Exception {
    executor = new DummyExecutor(fileSystem, rootDirectory);
  }

  private static final class TrackingEvaluationProgressReceiver
      extends EvaluationProgressReceiver.NullEvaluationProgressReceiver {

    public static final class InvalidatedKey {
      public final SkyKey skyKey;
      public final InvalidationState state;

      InvalidatedKey(SkyKey skyKey, InvalidationState state) {
        this.skyKey = skyKey;
        this.state = state;
      }

      @Override
      public boolean equals(Object obj) {
        return obj instanceof InvalidatedKey
            && this.skyKey.equals(((InvalidatedKey) obj).skyKey)
            && this.state.equals(((InvalidatedKey) obj).state);
      }

      @Override
      public int hashCode() {
        return Objects.hashCode(skyKey, state);
      }
    }

    private static final class EvaluatedEntry {
      public final SkyKey skyKey;
      final EvaluationSuccessState successState;
      public final EvaluationState state;

      EvaluatedEntry(SkyKey skyKey, EvaluationSuccessState successState, EvaluationState state) {
        this.skyKey = skyKey;
        this.successState = successState;
        this.state = state;
      }

      @Override
      public boolean equals(Object obj) {
        return obj instanceof EvaluatedEntry
            && this.skyKey.equals(((EvaluatedEntry) obj).skyKey)
            && this.successState.equals(((EvaluatedEntry) obj).successState)
            && this.state.equals(((EvaluatedEntry) obj).state);
      }

      @Override
      public int hashCode() {
        return Objects.hashCode(skyKey, successState, state);
      }
    }

    public final Set<InvalidatedKey> invalidated = Sets.newConcurrentHashSet();
    public final Set<SkyKey> enqueued = Sets.newConcurrentHashSet();
    public final Set<EvaluatedEntry> evaluated = Sets.newConcurrentHashSet();

    public void reset() {
      invalidated.clear();
      enqueued.clear();
      evaluated.clear();
    }

    public boolean wasInvalidated(SkyKey skyKey) {
      for (InvalidatedKey e : invalidated) {
        if (e.skyKey.equals(skyKey)) {
          return true;
        }
      }
      return false;
    }

    public EvaluatedEntry getEvalutedEntry(SkyKey forKey) {
      for (EvaluatedEntry e : evaluated) {
        if (e.skyKey.equals(forKey)) {
          return e;
        }
      }
      return null;
    }

    @Override
    public void invalidated(SkyKey skyKey, InvalidationState state) {
      invalidated.add(new InvalidatedKey(skyKey, state));
    }

    @Override
    public void enqueueing(SkyKey skyKey) {
      enqueued.add(skyKey);
    }

    @Override
    public void evaluated(
        SkyKey skyKey,
        @Nullable SkyValue value,
        Supplier<EvaluationSuccessState> evaluationSuccessState,
        EvaluationState state) {
      evaluated.add(new EvaluatedEntry(skyKey, evaluationSuccessState.get(), state));
    }
  }

  /** A mock action that counts how many times it was executed. */
  private static class ExecutionCountingAction extends AbstractAction {
    private final AtomicInteger executionCounter;

    ExecutionCountingAction(Artifact input, Artifact output, AtomicInteger executionCounter) {
      super(
          ActionsTestUtil.NULL_ACTION_OWNER,
          NestedSetBuilder.create(Order.STABLE_ORDER, input),
          ImmutableSet.of(output));
      this.executionCounter = executionCounter;
    }

    @Override
    public ActionResult execute(ActionExecutionContext actionExecutionContext)
        throws ActionExecutionException, InterruptedException {
      executionCounter.incrementAndGet();

      // This action first reads its input file (there can be only one). For the purpose of these
      // tests we assume that the input file is short, maybe just 10 bytes long.
      byte[] input = new byte[10];
      int inputLen = 0;
      try (InputStream in = getInputs().getSingleton().getPath().getInputStream()) {
        inputLen = in.read(input);
      } catch (IOException e) {
        throw new ActionExecutionException(e, this, false);
      }

      // This action then writes the contents of the input to the (only) output file, and appends an
      // extra "x" character too.
      try (OutputStream out = getPrimaryOutput().getPath().getOutputStream()) {
        out.write(input, 0, inputLen);
        out.write('x');
      } catch (IOException e) {
        throw new ActionExecutionException(e, this, false);
      }
      return ActionResult.EMPTY;
    }

    @Override
    public String getMnemonic() {
      return null;
    }

    @Override
    protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) {
      fp.addString(getPrimaryOutput().getExecPathString());
      fp.addInt(executionCounter.get());
    }
  }

  private static class ExecutionCountingCacheBypassingAction extends ExecutionCountingAction {
    ExecutionCountingCacheBypassingAction(
        Artifact input, Artifact output, AtomicInteger executionCounter) {
      super(input, output, executionCounter);
    }

    @Override
    public boolean executeUnconditionally() {
      return true;
    }

    @Override
    public boolean isVolatile() {
      return true;
    }
  }

  /** A mock skyframe-aware action that counts how many times it was executed. */
  private static class SkyframeAwareExecutionCountingAction
      extends ExecutionCountingCacheBypassingAction implements SkyframeAwareAction<IOException> {
    private final SkyKey actionDepKey;

    SkyframeAwareExecutionCountingAction(
        Artifact input, Artifact output, AtomicInteger executionCounter, SkyKey actionDepKey) {
      super(input, output, executionCounter);
      this.actionDepKey = actionDepKey;
    }

    @Override
    public Object processSkyframeValues(
        ImmutableList<? extends SkyKey> keys,
        Map<SkyKey, ValueOrException<IOException>> values,
        boolean valuesMissing) {
      assertThat(keys).containsExactly(actionDepKey);
      assertThat(values.keySet()).containsExactly(actionDepKey);
      return null;
    }

    @Override
    public ImmutableList<SkyKey> getDirectSkyframeDependencies() {
      return ImmutableList.of(actionDepKey);
    }

    @Override
    public Class<IOException> getExceptionType() {
      return IOException.class;
    }

    @Override
    public ImmutableGraph<SkyKey> getSkyframeDependenciesForRewinding(SkyKey self) {
      throw new UnsupportedOperationException();
    }
  }

  private interface ExecutionCountingActionFactory {
    ExecutionCountingAction create(Artifact input, Artifact output, AtomicInteger executionCounter);
  }

  private enum ChangeArtifact {
    DONT_CHANGE,
    CHANGE_MTIME {
      @Override
      boolean changeMtime() {
        return true;
      }
    },
    CHANGE_MTIME_AND_CONTENT {
      @Override
      boolean changeMtime() {
        return true;
      }

      @Override
      boolean changeContent() {
        return true;
      }
    };

    boolean changeMtime() {
      return false;
    }

    boolean changeContent() {
      return false;
    }
  }

  private enum ExpectActionIs {
    NOT_DIRTIED {
      @Override
      boolean actuallyClean() {
        return true;
      }
    },
    DIRTIED_BUT_VERIFIED_CLEAN {
      @Override
      boolean dirtied() {
        return true;
      }

      @Override
      boolean actuallyClean() {
        return true;
      }
    },

    // REBUILT_BUT_ACTION_CACHE_HIT,
    // This would be a bug, symptom of a skyframe-aware action that doesn't bypass the action cache
    // and is incorrectly regarded as an action cache hit when its inputs stayed the same but its
    // "skyframe dependencies" changed.

    REEXECUTED {
      @Override
      boolean dirtied() {
        return true;
      }

      @Override
      boolean reexecuted() {
        return true;
      }
    };

    boolean dirtied() {
      return false;
    }

    boolean actuallyClean() {
      return false;
    }

    boolean reexecuted() {
      return false;
    }
  }

  /** Sanity check: ensure that a file's ctime was updated from an older value. */
  private static void checkCtimeUpdated(Path path, long oldCtime) throws IOException {
    if (oldCtime >= path.stat().getLastChangeTime()) {
      throw new IllegalStateException(String.format("path=(%s), ctime=(%d)", path, oldCtime));
    }
  }

  private void maybeChangeFile(Artifact file, ChangeArtifact changeRequest) throws Exception {
    if (changeRequest == ChangeArtifact.DONT_CHANGE) {
      return;
    }

    Path path = file.getPath();

    if (changeRequest.changeMtime()) {
      long ctime = path.stat().getLastChangeTime();
      // Ensure enough time elapsed for file updates to have a visible effect on the file's ctime.
      TimestampGranularityUtils.waitForTimestampGranularity(ctime, reporter.getOutErr());
      // waitForTimestampGranularity waits long enough for System.currentTimeMillis() to be greater
      // than the time at the setCommandStartTime() call. Therefore setting
      // System.currentTimeMillis() is guaranteed to advance the file's ctime.
      path.setLastModifiedTime(System.currentTimeMillis());
      // Sanity check: ensure that updating the file's mtime indeed advanced its ctime.
      checkCtimeUpdated(path, ctime);
    }

    if (changeRequest.changeContent()) {
      long ctime = path.stat().getLastChangeTime();
      // Ensure enough time elapsed for file updates to have a visible effect on the file's ctime.
      TimestampGranularityUtils.waitForTimestampGranularity(ctime, reporter.getOutErr());
      appendToFile(path);
      // Sanity check: ensure that appending to the file indeed advanced its ctime.
      checkCtimeUpdated(path, ctime);
    }

    // Invalidate the file state value to inform Skyframe that the file may have changed.
    // This will also invalidate the action execution value.
    differencer.invalidate(
        ImmutableList.of(
            FileStateValue.key(
                RootedPath.toRootedPath(file.getRoot().getRoot(), file.getRootRelativePath()))));
  }

  private void assertActionExecutions(
      ExecutionCountingActionFactory actionFactory,
      ChangeArtifact changeActionInput,
      Callable<Void> betweenBuilds,
      ExpectActionIs expectActionIs)
      throws Exception {
    // Set up the action's input, output, owner and most importantly the execution counter.
    Artifact actionInput = createSourceArtifact("foo/action-input.txt");
    Artifact actionOutput = createDerivedArtifact("foo/action-output.txt");
    AtomicInteger executionCounter = new AtomicInteger(0);

    scratch.file(actionInput.getPath().getPathString(), "foo");

    // Generating actions of artifacts are found by looking them up in the graph. The lookup value
    // must be present in the graph before execution.
    Action action = actionFactory.create(actionInput, actionOutput, executionCounter);
    registerAction(action);

    // Build the output for the first time.
    builder.buildArtifacts(
        reporter,
        ImmutableSet.of(actionOutput),
        null,
        null,
        null,
        null,
        null,
        executor,
        null,
        null,
        options,
        null,
        null,
        /* trustRemoteArtifacts= */ false);

    // Sanity check that our invalidation receiver is working correctly. We'll rely on it again.
    SkyKey actionKey = ActionLookupData.create(ACTION_LOOKUP_KEY, 0);
    TrackingEvaluationProgressReceiver.EvaluatedEntry evaluatedAction =
        progressReceiver.getEvalutedEntry(actionKey);
    assertThat(evaluatedAction).isNotNull();

    // Mutate the action input if requested.
    maybeChangeFile(actionInput, changeActionInput);

    // Execute user code before next build.
    betweenBuilds.call();

    // Rebuild the output.
    progressReceiver.reset();
    builder.buildArtifacts(
        reporter,
        ImmutableSet.of(actionOutput),
        null,
        null,
        null,
        null,
        null,
        executor,
        null,
        null,
        options,
        null,
        null,
        /* trustRemoteArtifacts= */ false);

    if (expectActionIs.dirtied()) {
      assertThat(progressReceiver.wasInvalidated(actionKey)).isTrue();

      TrackingEvaluationProgressReceiver.EvaluatedEntry newEntry =
          progressReceiver.getEvalutedEntry(actionKey);
      assertThat(newEntry).isNotNull();
      if (expectActionIs.actuallyClean()) {
        // Action was dirtied but verified clean.
        assertThat(newEntry.state).isEqualTo(EvaluationState.CLEAN);
      } else {
        // Action was dirtied and rebuilt. It was either reexecuted or was an action cache hit,
        // doesn't matter here.
        assertThat(newEntry.state).isEqualTo(EvaluationState.BUILT);
      }
    } else {
      // Action was not dirtied.
      assertThat(progressReceiver.wasInvalidated(actionKey)).isFalse();
    }

    // Assert that the action was executed the right number of times. Whether the action execution
    // function was called again is up for the test method to verify.
    assertThat(executionCounter.get()).isEqualTo(expectActionIs.reexecuted() ? 2 : 1);
  }

  private RootedPath createSkyframeDepOfAction() throws Exception {
    scratch.file(rootDirectory.getRelative("action.dep").getPathString(), "blah");
    return RootedPath.toRootedPath(Root.fromPath(rootDirectory), PathFragment.create("action.dep"));
  }

  private static void appendToFile(Path path) throws Exception {
    try (OutputStream stm = path.getOutputStream(/*append=*/ true)) {
      stm.write("blah".getBytes(StandardCharsets.UTF_8));
    }
  }

  @Test
  public void testCacheCheckingActionWithContentChangingInput() throws Exception {
    assertActionWithContentChangingInput(/* unconditionalExecution */ false);
  }

  @Test
  public void testCacheBypassingActionWithContentChangingInput() throws Exception {
    assertActionWithContentChangingInput(/* unconditionalExecution */ true);
  }

  private void assertActionWithContentChangingInput(final boolean unconditionalExecution)
      throws Exception {
    // Assert that a simple, non-skyframe-aware action is executed twice
    // if its input's content changes between builds.
    assertActionExecutions(
        new ExecutionCountingActionFactory() {
          @Override
          public ExecutionCountingAction create(
              Artifact input, Artifact output, AtomicInteger executionCounter) {
            return unconditionalExecution
                ? new ExecutionCountingCacheBypassingAction(input, output, executionCounter)
                : new ExecutionCountingAction(input, output, executionCounter);
          }
        },
        ChangeArtifact.CHANGE_MTIME_AND_CONTENT,
        Callables.<Void>returning(null),
        ExpectActionIs.REEXECUTED);
  }

  @Test
  public void testCacheCheckingActionWithMtimeChangingInput() throws Exception {
    assertActionWithMtimeChangingInput(/* unconditionalExecution */ false);
  }

  @Test
  public void testCacheBypassingActionWithMtimeChangingInput() throws Exception {
    assertActionWithMtimeChangingInput(/* unconditionalExecution */ true);
  }

  private void assertActionWithMtimeChangingInput(final boolean unconditionalExecution)
      throws Exception {
    // Assert that a simple, non-skyframe-aware action is executed only once
    // if its input's mtime changes but its contents stay the same between builds.
    assertActionExecutions(
        new ExecutionCountingActionFactory() {
          @Override
          public ExecutionCountingAction create(
              Artifact input, Artifact output, AtomicInteger executionCounter) {
            return unconditionalExecution
                ? new ExecutionCountingCacheBypassingAction(input, output, executionCounter)
                : new ExecutionCountingAction(input, output, executionCounter);
          }
        },
        ChangeArtifact.CHANGE_MTIME,
        Callables.<Void>returning(null),
        unconditionalExecution
            ? ExpectActionIs.REEXECUTED
            : ExpectActionIs.DIRTIED_BUT_VERIFIED_CLEAN);
  }

  @Test
  public void testCacheCheckingActionWithNonChangingInput() throws Exception {
    assertActionWithNonChangingInput(/* unconditionalExecution */ false);
  }

  @Test
  public void testCacheBypassingActionWithNonChangingInput() throws Exception {
    assertActionWithNonChangingInput(/* unconditionalExecution */ true);
  }

  private void assertActionWithNonChangingInput(final boolean unconditionalExecution)
      throws Exception {
    // Assert that a simple, non-skyframe-aware action is executed only once
    // if its input does not change at all between builds.
    assertActionExecutions(
        new ExecutionCountingActionFactory() {
          @Override
          public ExecutionCountingAction create(
              Artifact input, Artifact output, AtomicInteger executionCounter) {
            return unconditionalExecution
                ? new ExecutionCountingCacheBypassingAction(input, output, executionCounter)
                : new ExecutionCountingAction(input, output, executionCounter);
          }
        },
        ChangeArtifact.DONT_CHANGE,
        Callables.<Void>returning(null),
        ExpectActionIs.NOT_DIRTIED);
  }

  private void assertActionWithMaybeChangingInputAndChangingSkyframeDeps(
      ChangeArtifact changeInputFile) throws Exception {
    final RootedPath depPath = createSkyframeDepOfAction();
    final SkyKey skyframeDep = FileStateValue.key(depPath);

    // Assert that an action-cache-check-bypassing action is executed twice if its skyframe deps
    // change while its input does not. The skyframe dependency is established by making the action
    // skyframe-aware and updating the value between builds.
    assertActionExecutions(
        new ExecutionCountingActionFactory() {
          @Override
          public ExecutionCountingAction create(
              Artifact input, Artifact output, AtomicInteger executionCounter) {
            return new SkyframeAwareExecutionCountingAction(
                input, output, executionCounter, skyframeDep);
          }
        },
        changeInputFile,
        new Callable<Void>() {
          @Override
          public Void call() throws Exception {
            // Invalidate the dependency and change what its value will be in the next build. This
            // should enforce rebuilding of the action.
            appendToFile(depPath.asPath());
            differencer.invalidate(ImmutableList.of(skyframeDep));
            return null;
          }
        },
        ExpectActionIs.REEXECUTED);
  }

  @Test
  public void testActionWithNonChangingInputButChangingSkyframeDeps() throws Exception {
    assertActionWithMaybeChangingInputAndChangingSkyframeDeps(ChangeArtifact.DONT_CHANGE);
  }

  @Test
  public void testActionWithChangingInputMtimeAndChangingSkyframeDeps() throws Exception {
    assertActionWithMaybeChangingInputAndChangingSkyframeDeps(ChangeArtifact.CHANGE_MTIME);
  }

  @Test
  public void testActionWithChangingInputAndChangingSkyframeDeps() throws Exception {
    assertActionWithMaybeChangingInputAndChangingSkyframeDeps(
        ChangeArtifact.CHANGE_MTIME_AND_CONTENT);
  }

  @Test
  public void testActionWithNonChangingInputAndNonChangingSkyframeDeps() throws Exception {
    final SkyKey skyframeDep = FileStateValue.key(createSkyframeDepOfAction());

    // Assert that an action-cache-check-bypassing action is executed only once if neither its input
    // nor its Skyframe dependency changes between builds.
    assertActionExecutions(
        new ExecutionCountingActionFactory() {
          @Override
          public ExecutionCountingAction create(
              Artifact input, Artifact output, AtomicInteger executionCounter) {
            return new SkyframeAwareExecutionCountingAction(
                input, output, executionCounter, skyframeDep);
          }
        },
        ChangeArtifact.DONT_CHANGE,
        new Callable<Void>() {
          @Override
          public Void call() throws Exception {
            // Invalidate the dependency but leave its value up-to-date, so the action should not
            // be rebuilt.
            differencer.invalidate(ImmutableList.of(skyframeDep));
            return null;
          }
        },
        ExpectActionIs.DIRTIED_BUT_VERIFIED_CLEAN);
  }

  private abstract static class SingleOutputAction extends AbstractAction {
    SingleOutputAction(@Nullable Artifact input, Artifact output) {
      super(
          ActionsTestUtil.NULL_ACTION_OWNER,
          input == null
              ? NestedSetBuilder.emptySet(Order.STABLE_ORDER)
              : NestedSetBuilder.create(Order.STABLE_ORDER, input),
          ImmutableSet.of(output));
    }

    protected static final class Buffer {
      final int size;
      final byte[] data;

      Buffer(byte[] data, int size) {
        this.data = data;
        this.size = size;
      }
    }

    protected Buffer readInput() throws ActionExecutionException {
      byte[] input = new byte[100];
      int inputLen = 0;
      try (InputStream in = getPrimaryInput().getPath().getInputStream()) {
        inputLen = in.read(input, 0, input.length);
      } catch (IOException e) {
        throw new ActionExecutionException(e, this, false);
      }
      return new Buffer(input, inputLen);
    }

    protected void writeOutput(@Nullable Buffer buf, String data) throws ActionExecutionException {
      try (OutputStream out = getPrimaryOutput().getPath().getOutputStream()) {
        if (buf != null) {
          out.write(buf.data, 0, buf.size);
        }
        out.write(data.getBytes(StandardCharsets.UTF_8), 0, data.length());
      } catch (IOException e) {
        throw new ActionExecutionException(e, this, false);
      }
    }

    @Override
    public String getMnemonic() {
      return "MockActionMnemonic";
    }

    @Override
    protected void computeKey(ActionKeyContext actionKeyContext, Fingerprint fp) {
      fp.addInt(42);
    }
  }

  private abstract static class SingleOutputSkyframeAwareAction extends SingleOutputAction
      implements SkyframeAwareAction<IOException> {
    SingleOutputSkyframeAwareAction(@Nullable Artifact input, Artifact output) {
      super(input, output);
    }

    @Override
    public boolean executeUnconditionally() {
      return true;
    }

    @Override
    public boolean isVolatile() {
      return true;
    }

    @Override
    public Class<IOException> getExceptionType() {
      return IOException.class;
    }
  }

  /**
   * Regression test to avoid a potential race condition in {@link ActionExecutionFunction}.
   *
   * <p>The test ensures that when ActionExecutionFunction executes a Skyframe-aware action
   * (implementor of {@link SkyframeAwareAction}), ActionExecutionFunction first requests the inputs
   * of the action and ensures they are built before requesting any of its Skyframe dependencies.
   *
   * <p>This strict ordering is very important to avoid the race condition, which could arise if the
   * compute method were too eager to request all dependencies: request input files but even if some
   * are missing, request also the skyframe-dependencies. The race is described in this method's
   * body.
   */
  @Test
  public void testRaceConditionBetweenInputAcquisitionAndSkyframeDeps() throws Exception {
    // Sequence of events on threads A and B, showing SkyFunctions and requested SkyKeys, leading
    // to an InconsistentFilesystemException:
    //
    // _______________[Thread A]_________________|_______________[Thread B]_________________
    // ActionExecutionFunction(gen2_action:      | idle
    //   genfiles/gen1 -> genfiles/foo/bar/gen2) |
    // ARTIFACT:genfiles/gen1                    |
    // MOCK_VALUE:dummy_argument                 |
    // env.valuesMissing():yes ==> return        |
    //                                           |
    // ArtifactFunction(genfiles/gen1)           | MockFunction()
    // CONFIGURED_TARGET://foo:gen1              | FILE:genfiles/foo
    // ACTION_EXECUTION:gen1_action              | env.valuesMissing():yes ==> return
    // env.valuesMissing():yes ==> return        |
    //                                           | FileFunction(genfiles/foo)
    // ActionExecutionFunction(gen1_action)      | FILE:genfiles
    // ARTIFACT:genfiles/gen0                    | env.valuesMissing():yes ==> return
    // env.valuesMissing():yes ==> return        |
    //                                           | FileFunction(genfiles)
    // ArtifactFunction(genfiles/gen0)           | FILE_STATE:genfiles
    // CONFIGURED_TARGET://foo:gen0              | env.valuesMissing():yes ==> return
    // ACTION_EXECUTION:gen0_action              |
    // env.valuesMissing():yes ==> return        | FileStateFunction(genfiles)
    //                                           | stat genfiles
    // ActionExecutionFunction(gen0_action)      | return FileStateValue:non-existent
    // create output directory: genfiles         |
    // working                                   | FileFunction(genfiles/foo)
    //                                           | FILE:genfiles
    //                                           | FILE_STATE:genfiles/foo
    //                                           | env.valuesMissing():yes ==> return
    //                                           |
    //                                           | FileStateFunction(genfiles/foo)
    //                                           | stat genfiles/foo
    //                                           | return FileStateValue:non-existent
    //                                           |
    // done, created genfiles/gen0               | FileFunction(genfiles/foo)
    // return ActionExecutionValue(gen0_action)  | FILE:genfiles
    //                                           | FILE_STATE:genfiles/foo
    // ArtifactFunction(genfiles/gen0)           | return FileValue(genfiles/foo:non-existent)
    // CONFIGURED_TARGET://foo:gen0              |
    // ACTION_EXECUTION:gen0_action              | MockFunction()
    // return ArtifactSkyKey(genfiles/gen0)      | FILE:genfiles/foo
    //                                           | FILE:genfiles/foo/bar/gen1
    // ActionExecutionFunction(gen1_action)      | env.valuesMissing():yes ==> return
    // ARTIFACT:genfiles/gen0                    |
    // create output directory: genfiles/foo/bar | FileFunction(genfiles/foo/bar/gen1)
    // done, created genfiles/foo/bar/gen1       | FILE:genfiles/foo/bar
    // return ActionExecutionValue(gen1_action)  | env.valuesMissing():yes ==> return
    //                                           |
    // idle                                      | FileFunction(genfiles/foo/bar)
    //                                           | FILE:genfiles/foo
    //                                           | FILE_STATE:genfiles/foo/bar
    //                                           | env.valuesMissing():yes ==> return
    //                                           |
    //                                           | FileStateFunction(genfiles/foo/bar)
    //                                           | stat genfiles/foo/bar
    //                                           | return FileStateValue:directory
    //                                           |
    //                                           | FileFunction(genfiles/foo/bar)
    //                                           | FILE:genfiles/foo
    //                                           | FILE_STATE:genfiles/foo/bar
    //                                           | throw InconsistentFilesystemException:
    //                                           |     genfiles/foo doesn't exist but
    //                                           |     genfiles/foo/bar does!

    Artifact genFile1 = createDerivedArtifact("foo/bar/gen1.txt");
    Artifact genFile2 = createDerivedArtifact("gen2.txt");

    registerAction(
        new SingleOutputAction(null, genFile1) {
          @Override
          public ActionResult execute(ActionExecutionContext actionExecutionContext)
              throws ActionExecutionException, InterruptedException {
            writeOutput(null, "gen1");
            return ActionResult.EMPTY;
          }
        });

    registerAction(
        new SingleOutputSkyframeAwareAction(genFile1, genFile2) {

          @Override
          public ImmutableList<SkyKey> getDirectSkyframeDependencies() {
            return ImmutableList.of();
          }

          @Override
          public Object processSkyframeValues(
              ImmutableList<? extends SkyKey> keys,
              Map<SkyKey, ValueOrException<IOException>> values,
              boolean valuesMissing) {
            assertThat(keys).isEmpty();
            assertThat(values).isEmpty();
            assertThat(valuesMissing).isFalse();
            return null;
          }

          @Override
          public ImmutableGraph<SkyKey> getSkyframeDependenciesForRewinding(SkyKey self) {
            throw new UnsupportedOperationException();
          }

          @Override
          public ActionResult execute(ActionExecutionContext actionExecutionContext)
              throws ActionExecutionException {
            writeOutput(readInput(), "gen2");
            return ActionResult.EMPTY;
          }
        });

    builder.buildArtifacts(
        reporter,
        ImmutableSet.of(genFile2),
        null,
        null,
        null,
        null,
        null,
        executor,
        null,
        null,
        options,
        null,
        null,
        /* trustRemoteArtifacts= */ false);
  }
}


text:
Le carrefour de la Pyramide est une voie située dans le  de Paris, en France.

Situation et accès

Origine du nom
Le carrefour tire son nom de la pyramide du bois de Vincennes qui s'élève en son centre.

Historique

Annexes

Articles connexes
 Liste des voies du bois de Vincennes
 Liste des voies du 12e arrondissement de Paris

Notes, sources et références

Pyramide
Pyramide

redpajama_set_name: RedPajamaWikipedia


Sleep Machines.com offers you Fast, Easy, Convenient and Affordable White Noise Download MP3s!
We offer your favorite Sleep Machines.com White Noise sounds online in a convenient MP3 instant download format. You can quickly download our White Noise MP3s to your computer to play them through your computer speakers, MP3 player, iPod, Zune, or burn a CD to play in any CD player.
Order now and enjoy your Sleep Machines.com White Noise in minutes! Oh yeah, and no shipping!
28 High quality original sound atmosphere MP3s to choose from !
Excellent quality at an affordable price!


text:
Published On: Fri, Oct 3rd, 2014
Abians in diaspora urged to grow economy through political participation
From Suleiman Idris, Lagos
A former President of the Umuahia Development Association (UDA) in the United States of America (USA), Sir Chudi Onyeama yesterday advised indigenes of Abia state abroad to return home and contribute to the development of the state through active participation in politics.
The development expert, told journalists in Lagos that the state need the expertise of its elites in various endeavour to actively get involve in the running of the government of the eastern state explaining that charlatans had been allowed to dominate the political sphere over the past years.
He said most policies of the government had made it impossible to re-position the state and make it viable economically.
According to him, the lack of quality representation and poor governance has been the bane of Abia state leaving the state at the bottom of the development ladder in the country.
Onyeama, who had worked at the Maryland State Governor's Office for many years, said he was back home to the seek the mandate of his Umuahia-Ikwuano Federal Constituency to represent them at the House of Representatives.
"Nigerian egg-heads such as Philip Emeagwali and other talented people should return home to be part of the effort to find lasting solutions to the myriad of problems plaguing Nigeria, It is obvious that Nigeria's problem is not a lack of resources or manpower, our problem is our inability to put round pegs in round holes in issues of leadership
"The best approach to take Nigeria out of the doldrums was for its citizens including those in the Diaspora to return home to contribute their knowledge," he added.

redpajama_set_name: RedPajamaCommonCrawl


text:
Ratold (ur. ok. 889, zm. po 896 roku) – król-koregent Włoch, rządzący przez około miesiąc jesienią 896 roku.

Był nieślubnym synem Arnulfa z Karyntii, również pozamałżeńskiego syna króla wschodniofrankijskiego Karlomana. Być może jego rodzonym (ewentualnie przyrodnim) bratem był Zwentibold (Świętopełk), książę Lotaryngii. Na podstawie imienia przypuszcza się, że matka Ratolda pochodziła z Lombardii. Został wskazany przez ojca jako współwładca przed wyprawą do Niemiec w 896 roku i pozostawiony w Mediolanie. Wkrótce potem Włochy zaatakował Lambert II ze Spoleto, konkurent Arnulfa do korony, a Ratold został zmuszony do ucieczki. Nic nie wiadomo o jego dalszych losach.

Bibliografia
 Biografia na stronie FMG.ac

Urodzeni w 889
Zmarli w X wieku
Władcy włoscy


text:
For Divorced Parents
For Allies
Grant FAQ
Ohio organizations & services for affirming parents
TransOhio - "TransOhio serves the Ohio transgender and ally communities by providing services, education, support, and advocacy, which promotes and improves the health, safety and life experience of the Ohio transgender individual and community."
ACLU Ohio - "The ACLU of Ohio is an affiliate of the national ACLU. Founded in 1920, the national ACLU includes more than 500,000 members in all 50 states, making it our country's foremost advocate of individual rights."
Equality Ohio - "Equality Ohio advocates and educates to achieve fair treatment and equal opportunity for all Ohioans regardless of their sexual orientation or gender identity or expression."
HRC Columbus - "The Human Rights Campaign represents a force of more than 3 million members and supporters nationwide. As the largest national lesbian, gay, bisexual, transgender and queer civil rights organization, HRC envisions a world where LGBTQ people are ensured of their basic equal rights, and can be open, honest and safe at home, at work and in the community."
Stonewall Columbus - "Stonewall Columbus was founded in 1981. Our goal then was to fight for tolerance, acceptance, and basic human rights for our LGBTQ community. Today, we proudly celebrate Columbus as one of the most LGBTQ friendly cities in the United States."
PFLAG Columbus - " We seek to change attitudes and to create an environment of understanding so that our LGBTQ family members and friends can live with dignity and respect. "
Kaleidoscope Youth Center - "Our vision is for youth across the spectrums of sexual orientation and gender identity to live healthy, whole lives with acceptance and freedom from oppression."
THRIVE Program at Nationwide Children's Hospital in Columbus - "THRIVE is a program that specializes in care for differences/ disorders of sex development (DSD), complex urological conditions, and gender concerns."
Equitas Health - "Equitas Health is a regional not-for-profit community-based healthcare system and federally qualified community health center look-alike. Its expanded mission has made it one of the nation's largest HIV/AIDS, lesbian, gay, bisexual, transgender, and queer/questioning (LGBTQ) healthcare organizations."
Ohio support groups for affirming parents
Family of Trans Youth Support & Discussion Group at Kaleidoscope Youth Center
Online support groups for affirming parents
Ohio Parents of Transgender Children*
* Please note this is a closed Facebook group, but not a secret one.
Parenting Transgender Children*
Please note this is a worldwide, secret Facebook group
National organizations and services
National Center for Transgender Equality
LAMBDA Legal
National Council of Juvenile and Family Court Judges
Affirming professional organizations and studies
Helpful publications:
American Academy of Pediatrics Publication: Supporting and Caring for Transgender Children, September 2016
Substance Abuse and Mental Health Services Administration, US Department of Health and Human Services Publication: Ending Conversion Therapy: Supporting and Affirming LGBTQ Youth, October 2015
PFLAG Publication: Our Trans Loved Ones, 2008
American Psychological Association Publication: Guidelines for Psychological Practice with Transgender and Gender Nonconforming People, adopted in 2016
American Academy of Pediatrics Policy Statement: Office-Based Care for Lesbian, Gay, Bisexual, Transgender, and Questioning Youth, 2013
Other relevant studies
National Association of Social Workers
American Academy of Child and Adolescent Psychiatry
The Pediatric Endocrinology Nursing Society
National Association of Pediatric Nurse Practitioners
The National Association of School Psychologists
Association of Title IX Administrators
American School Counselor Association
This is How it Always Is by Laurie Frankel
She's Not There: A Life in Two Genders by Jennifer Finney Boylan
The Transgender Child: A handbook for families and professionals by Brill & Pepper
Raising My Rainbow by Lori Duron
The Gender Creative Child by Diane Ehrensaft, PhD
Rethinking Normal by Katie Rain Hill
Being Jazz by Jazz Jennings
Beyond Magenta by Susan Kuklin
Becoming Nicole by Amy Ellis Nutt
What Makes a Baby by Cory Silverberg
Sex is a Funny Word by Cory Silverberg
The Gender Quest Workbook by Rylan Jay Testa, PhD, et al
Raising Ryland by Hillary Whittington & Kristine Gasbarre
Picture books:
10,000 Dresses by Marcus Ewert
Red: A Crayon's Story by Michael Hall
My Name is Jazz by Jazz Jennings and Jessica Herthel
Middle Grade:
The Pants Project by Cat Clarke
Lily & Dunkin by Donna Gephart
The Other Boy by M.G. Hennessey
Gracefully Grayson by Ami Polonsky
Lumberjanes by Noelle Stevenson & Grace Ellis
Wandering Son by Shimura Takako
Young Adult:
Freakboy by Kristin Elizabeth Clark
Jess, Chunk, & the Roadtrip to Infinity by Kristin Elizabeth Clark
Look Past by Eric Devine
Girl Mans Up by M-E Girard
When the Moon was Ours by Anna-Marie McLemore
Lizard Radio by Pat Schmatz
The Art of Being Normal by Lisa Williamson
Parrotfish by Ellen Wittlinger
This website is an educational and informational resource for parents and allies of transgender and gender expansive youth. It is not a substitute for working with medical and legal experts. We cannot guarantee the outcome of following the recommendations provided and any statements made regarding the potential outcome are expressions of opinion only.


QA Travel has been providing quality assured travel services globally for over 20 years.
Established in 1996, QA Travel, a Travel Management Company (TMC), provides a quality service with a level of expertise that can be trusted and relied upon at all times, whilst offering outstanding value and efficiency through technology innovation.
In today's cost conscious business environment, our objective is to work as a partner to our clients by fully aligning our business to their specific needs, in order to develop a tuned travel management programme that delivers maximum value on every transaction. We are a partner in the Advantage Focus Partnership, the largest independent travel management organisation in the UK, and as a result all our supported travellers enjoy a range of benefits that are sourced from £1.1bn worth of buying power.
Our reach is not restricted to the UK as we have through our WIN (Worldwide International Network) partnership, the global reach of a multinational with the expertise and customer care of a local business. With Representation in over 70 countries and combining more than 6,000 travel agency locations worldwide, WIN is recognised as one of the most successful, innovative and respected travel networks in the world, with its members delivering high-performance services and products.
Couple this with our access to the largest fare database in the UK, and our unique internationally based global fare quoting technology, QA Travel can offer the widest choice of airline and airfares, getting you where you need to be, whilst maximising client savings on every trip.
As a specialist travel company supporting a range of industry markets encompassing marine, oil & gas, finance, consulting, technology, law and media we are able to source tuned and discounted air fares appropriate to each individual business market.
The use of smart technology is absolutely vital to how we as an organisation operate, evolve and improve our added value benefits and service offering.
We appointed Amadeus as our Technology partner and GDS reservation system provider as it hosts the inventory of the majority of airlines and offers direct access to last seat availability on these carriers. In short, we see what the airline sees as it happens (real-time), whilst other GDS providers have to access Amadeus to obtain the same information.
However, we are not confined to Amadeus and can source and book airlines, low cost airlines, hotels, lounges, chauffeurs and other services across the world. QA Travel also utilise the support tool that the Advantage Focus Partnership developed (airfare comparison software - Fare Checker), which has the added functionality of comparing our fares against alternatives available on Expedia, Opodo, Lastminute.com and the airline's own websites.
Technology powers QA Travel but it's the passion, quality and expertise of our people that drives and differentiates us.
Our people are our greatest asset. Their talent shines through in the value they consistently provide to our clients. We weave ourselves into the fabric of our client's organizations to the point that our understanding of their corporate travel needs is intuitive.
We go above and beyond to meet and exceed our clients expectations by providing the very best in travel management service.
That's the QA way ….
All I can say so far is, it is myself who has directly dealt with the QA team and I must say they have been brilliant. It is a breath of fresh air to have a travel company who are prompt in their replies, gives you various options, and actually looks at alternatives if something is not available, or provides recommendations for an alternative route/option.
Dealing with QA Travel has made my job so much easier and I cannot thank them all enough.
We go above and beyond our clients expectations by bringing you the best in business travel management. You can always rely on our expertise and know-how to ensure you're getting the best deal and that your journeys are seamless. Check out our latest survey by clicking the link below.
We are a growing firm, developing and opening opportunities as we build.
We are always keen to talk to like-minded, talented people who will thrive in a hard-working, collegial environment and deliver excellence.


FIFA 19 Running Slow On Switch? Use Our FIFA 19 Frame Rate Switch Guide.
For any and All questions that your may have regarding the FIFA 19 Frame Rate on Switch. Some ways in which you can improve it and boost your Game Play.
Despite it not being as powerful as other current consoles. The Nintendo Switch can still pack a punch when it comes to smooth game play. Although if you experience your FIFA 19 Frame Rate for Switch Dropping then use the guide below to help prevent and improve that.
How can you tell if FIFA 19 is dropping FPS for your Nintendo Switch?
At Chaos Hour we have not yet encountered any issues with FIFA 19 running sluggish or dropping frames. However if you have – be sure to reach out to EA Sports and inform them of the situation.
When contacting EA Sports be sure to give them details regarding the FPS Issue your having on switch.
Follow EA Sports on Facebook and Twitter so you can stay current with any and all press releases they may make.
Boosting FIFA 19 Frame Rate on Switch.
Nintendo release an abundance of firmware and software updates to ensure that games run smooth and without cause for concern. However if certain games are struggling like FIFA 19 on frame drops then it may require a console restart or update.
Overtime Switch Developers will release software updates in order for FIFA 19 to remain stable and optimised. It's imperative that if you have run into any problems. Before you reach out ensure you're running the latest Update for the Game.
Sometimes games will have an option in which you can Force an Update. If no option exists then when you boot the Switch up and before you play FIFA 19. It will ask you if you wish to update.
If you're running on the Latest FIFA 19 Patch and your FPS is still dropping then it maybe a corrupt install.
Although the Switch is smaller and much more nimble than it's mainstream competition. The Switch may still suffer overheating problems while your playing FIFA 19.
4: Latency Fix for FIFA 19 on Switch While Playing.
Sometimes poor connection to the internet or slow download and upload speed can create lag. Lag will then cause your FIFA 19 to stutter, drop frames, pause and worse.
To Identify if Lag is causing you to drop frames we highly recommend trying to play FIFA 19 offline. If no issues present them self then be sure to check your internet connection.
If you have connected your Switch Dock up to a Capture Card or Capture Device so you can both Stream and Record FIFA 19. You may run into problems if your capture device hardware is not up to the job.
Like we expressed earlier – We have yet to have any issues or faults with FIFA 19 dropping frames. However if you have feel free to reach out and we may be able to provide a fix.
Also be sure to reach out to EA Sports with any fixes you find.
Unless the Developers action this issue then sadly that is the nature of the beast when it comes to console gaming. However you can inform the EA Sports by reaching out to them on their social networks.


It's tempting to leave the running shoes and exercise gear at home when you're traveling. But after working hard to fit exercise into your day-to-day life, you don't want to let a trip derail a good habit.
The key, says Asuris health coach Michelle Hill, is to come up with a plan for how you will work out while on the road. "It's just like anything, if you tell your brain something ahead of time, it's in there and loaded and you are more likely to follow through with it."
With that in mind, here are seven simple ways to stay in shape on the road.
Set realistic goals. Maintaining your normal workout schedule while traveling is great! But it's OK to scale back if your trip simply is too busy. Instead of your normal 30-minute cardio workout, consider squeezing in 10 minutes of high-intensity exercise instead, like a HIIT workout, Hill says.
Walk or run around town. There's no better way to get to know a new city than on foot. So lace up and hit the pavement. Apps like Map My Run can help you plan a route that lets you fit in your miles and your sightseeing, Hill recommends.
Hit the hotel gym or pool. If you can, book a room at a hotel with a gym or pool for easy access to exercise equipment. If the hotel does have a gym, look online or call and ask about the equipment available so you can plan a workout if needed, says Hill.
Work out in your room. Is your hotel light on amenities? Pack stretch bands, light weights or a yoga mat, so you can do strength-training in your hotel room. Or do pushups, sit-ups, lunges and light stretching. You also can download a fitness app or stream a video that can guide you through some exercise, like Pilates moves or compound exercise workouts.
Drop into a local gym. If you belong to a national chain of gyms, see if you can get into one where you are visiting. As an Asuris member, you can also get a guest pass at a gym or join one through the Active&Fit Direct™ Program, which lets you choose from over 9,000 fitness centers nationwide. Or, try something new. Traveling is a great time to try something different, Hill says. Curious about AcroYoga? Want to finally try a spin class? Kickboxing, anyone? Now's your chance.
Get deals on fun and healthy activities. Whether you love to bike, ski or take yoga classes, the CHP Active and Healthy Program offers significant discounts at thousands of local and national businesses. Break into a sweat—without breaking your budget.
Check for nearby fitness and wellness events. From fun runs to big, convention center-worthy wellness events, many cities have activities that could get you moving and having fun, Hill says.


text:
Doubters and Bitcoin
Bitcoin is becoming sufficiently well known that people on reddit post topics like I believe that BitCoin will be a spectacular failure (granted, this was in the Change My View subreddit). Here's my response : Bitcoin is the same kind of "bubble" as gold. A comparison between the two: Gold has ornamental use, and niche technology uses, neither of which contribute much to its perceived value. Gold is valuable because everyone thinks it is - because other people use it as a store of value. Despite its relative lack of inherent value, gold served as an economically stable medium of exchange for thousands of years. Gold is inappropriate as a medium of exchange in an online economy. It's impractical to trade at a distance without relying on third parties. Bitcoin lacks ornamental value and niche industry use, but is even better suited as a store of value. Bitcoin is extremely easy to send to anyone, at any distance, anywhere. The value of Bitcoin will stabilize
New Relationship Insanity
LoL. :) I definitely suffer from this.
Windows 8.1 upgrade blues
I wouldn't say my upgrade to Windows 8.1 was smooth. The laptop first crashed soon after the upgrade. When I connected my external HDMI screen, Windows blue screened and pointed out the NVIDIA display driver as the culprit. I disconnected HDMI and updated NVIDIA drivers to the latest version, but now blue screens started to occur when attempting to open the NVIDIA Control Panel. When it didn't cause the computer to crash, it still failed to open with an error stating that no NVIDIA graphics card is currently active. I checked the Device Manager, but all it said was that NVIDIA GeForce GTX 780M is operating correctly. That's even though it clearly didn't: I tried starting a game to make sure, and the frame rate, which should be about 100, was between 1 and 2. I didn't even try HDMI at this point. It turned out the problem was that the upgrade to 8.1 disabled the Intel HD Graphics 4600 driver. I had to download a new one from the Intel Download Center . After inst
I just love Kimchi Cuddles. It started earlier this year, and there's already hours worth of it to read. If you're trying to wrap your mind around poly - if you're looking for insight into what it's like as a mindset - then this is it. Follow this link to read it from the beginning.
The cost of giving birth in Costa Rica, and more photos
So, the bills are in: Surgeon USD 1,600 Assistant USD 400 Anesthesiologist USD 400 Pediatrician USD 400 Hospital (24 hour stay) USD 1,980 Total USD 4,780 Not too bad, for no insurance, and a C-section. I've seen reports of total costs such as $25k in the US. We were happy with the quality of service, and found the professionalism comparable to what we would expect in the US. Why no insurance? Folks have asked why we don't have medical insurance. Well, we sort of do. We have access to the public system, we just pay out of pocket for private health care. Costa Rica has one of the best health care systems, in my opinion. There's a system of public hospitals that's available to everyone through social security. We pay a significant amount for social security every month, so we have access to that. However, we prefer to use the services of private hospitals. Private hospitals charge rates much more reasonable than in the US, so we can afford to pay out of poc
Dan Savage on (non)monogamy
Hear, hear. Dan Savage makes an appearance in The Guardian: Why is non-monogamy such a dangerous idea? I don't follow his writing, exactly, but I've so far read nothing from him I didn't like.
People who can't use lifts
More specifically - people who: Press both the up and down button when they call the lift. As if they're going to go both directions. Board a lift going the wrong direction, even when the direction is clearly signaled before they enter the lift. Fail to notice that the lift refused to register their floor selection, because it's going the opposite way. Grumble when they need to select their floor again, once the lift has reached bottom. Our parking is in the bottom basement of our building. When I call a lift, and it arrives with a person already in it, and that person doesn't disembark, I immediately know: They're a dumb fuck who pressed both the up and down buttons when they called the lift, causing the lift to stop on their floor when it didn't have to. This wastes my time waiting for the lift. They're a dumb fuck who entered the lift going the wrong way. This wastes their time, because now they're going with the lift, all the way the wrong direc
The cost of giving birth in Costa Rica, and more p...


text:
2016 Cities of Migration Conference: Prosperity through Diversity
By Rebecca W17 March 2016 No Comments
"Cities rarely shrink to greatness. They get better by growing and to grow they must welcome migrants." – Ambassador William Lacy Swing, International Organization for Migration
The Third International Cities of Migration Conference was an exciting prelude to Metropolis 2016, Canada's most heavily attended annual conference on immigration and settlement. Cities of Migration showcased bright ideas and new ways of thinking about immigrant integration not just in Canada, but throughout the world. This year's theme focused on the role of diversity in driving socioeconomic prosperity, an important ideal in an increasingly globalized and interconnected world.
As the day went on, we learned that diversity means much more than the movement of migrants; here, diversity represents a paradigm shift in how we approach social and economic progress. Diversity includes not just ethnic and gender inclusion, but considerations for new ways of thinking about social innovation.
There was perhaps no better way to kick start the day than with John Tory, Mayor of the world's most multicultural city. The recently elected Mayor of Toronto was quick to remind the jam-packed Westin Harbour Castle audience of the city's prosperity as one of the global north's major centres of migration. In Toronto's case, diversity has brought more trade, more talent and more innovation that have made the city a global hub for culture and economic growth.
The next 90 minutes featured an opening keynote on diversity and social innovation in the new economy, as well as a plenary panel on defining what constitutes a welcoming city. The global panel featured participants from Vancouver, Toronto, New York and Kreis Duren (Germany).
The morning session quickly moved to the topic of talent and workforce diversity, including the impact of diversity on innovation. The speakers, which represented organizations including Siemens Canada, RBC Royal Bank, Agenda 360 and KPMG, used an evidence-based approach to highlight the return on investment of diversity in the workplace. More and more, researchers are learning that diversity in teams and in the boardroom leads to greater financial performance and more innovative ideas.
ICTC has certainly documented this phenomenon as it has expanded its diversity and inclusion research over the past five years to focus more on women, youth, internationally educated professionals (IEPs), Indigenous people and persons with disabilities. While many of these groups – especially women, youth and Indigenous people – remain under-represented in the digital economy, their workforce prospects improve considerably when they choose a high-demand career in information technology. For example, the unemployment rate of women in ICT professions is just 3.2%, a fraction of their national average. The unemployment rate for immigrants is only 3.3%, compared with their national average of 7.5%.
The impact of gender and cultural shifts on the boardroom – dubbed return on diversity by many in the research community – was a main discussion point in the final plenary panel of the morning. Here, representatives from London, New York and Toronto talked about the need for promoting diversity and inclusion at all levels of society, including government.
The afternoon session featured a keynote address on practical solutions to manage mobility, followed by concurrent workshops on social innovation and competition for talent.
The Issues Panel closed the day with a roundtable discussion on welcoming refugees, a timely topic amid the waves of Syrian refugees making their way to other Middle Eastern states, Europe and North America. The conversation focused on how welcoming refugees has become a key socioeconomic initiative for cities of migration looking to build strong communities and a steady pipeline of diverse talent.
While the impact of diversity on social and economic prosperity has been long established, the Cities of Migration event offered new ways of thinking about social innovation. The timing of the event was particularly notable given the growing politicization of the Syrian refugee crisis in many parts of the world.
To learn more about ICTC's diversity and inclusion research, be sure to check out the recently released the ICTC National Digital Talent Strategy, in partnership with Microsoft Canada.
For latest trends on diversity and inclusion in the digital economy and ICT workforce, visit ICTC's Talent Programs and monthly Labour Market Intelligence data.
Globe and Mail: In the digital economy, SMEs must be fast followers


text:
Now Is the Time for Battle
Peter Souza
Stephen Herreid - published on 04/23/14
Conservatives are shrinking when their courage is needed the most.
"What are the elements of conservative rhetoric that repel the Left?"
I hear this question more and more from college-age conservatives. I admire the few of them who earnestly muster their powers of articulation in an effort to better witness to the unpopular principles of conservatism and Christianity. But all too many of them are simply on a witch-hunt for the truths that have become anathema in today's left-leaning public square. Rather than look for the best ways to express the timeless truths that they've inherited, they're really just engaging in a new and bloodless calculus, seeking to delete from their public discourse those truths which are least likely to be embraced by the enemies of the truth.
What will this tactic lead to? Well, if they keep it up, we may expect that this rising generation of conservatives will win the hearts of the Left. But this victory will be a victory of cowards.
It should also be remembered that the Left, which has successfully fought its way into near-invincibility, has never shied away from strong language. My fellow conservative "millennials" often hush my "conspiracy-theory" language, warning that I will only embarrass the Right and be ridiculed by the Left. I would remind them of Hillary Clinton, who may be our next president, and who wasn't afraid to coin the alarming phrase "vast Right-Wing conspiracy." When I'm warned against speaking in "sharp" or "moralistic language," I remind my friends of Barack Obama's recent speech at the National Action Committee, where he said that Republicans were engaged in an attack on voter rights "just out of political spite," and that "there was no good reason for it … [it's] wrong!"
While the Left continues its offensive in full, spitting, biting force, too many of our conservative and Christian leaders merely bite their nails in the upper room. Romney was very gentle in his debates with Obama. He couldn't even muster the guts to mention the Benghazi cover-up (because he would have seemed like a "conspiracy theorist?"), or call Obama out on his horrendous track-record with the working class (he would have turned voters of with his "moralizing?").
The result? An unprecedented number of demoralized conservatives didn't even show up to vote. And so here we are the second presidential term of a partial-birth abortion advocate. My young friends think that we must be gentler in our public speech because that's the "Christian" thing to do. But what about the many Christian constituents who are as fighting mad as they are underrepresented by their leaders? Who will do the "Christian thing" and come to the aid of these poor souls? I was roused and encouraged when I attended a recent lecture by the gutsy, devoutly Christian Tony Perkins. He observed that Barack Obama has "lots of supporters" because "he stands for something. Unfortunately, [some Republicans] don't seem to stand for much at all."
I'm reminded of the great, saintly journalist and author George Bernanos. Faced with the ominous cultural shifts that preceded the Second World War, he abhorred the pandering attitude that many Christians had toward their cultural enemies. He recognized that the many efforts to "attract" rather than "repel" the Church's enemies operated on the assumption that his generation of Christians could save a truth-hating people by peddling its own wonderfully original arrangements of the truth. He believed this rhetorical approach rendered all who used it it "secret accomplices":
"They believe in everything for the same reason they believe in nothing. If you went to the bottom of their apparent credulousness, you would find that it is only a form of the refusal to judge and that these people are suffering from a paralysis of their conscience."
Bernanos continues, "At this point I know of no system or party to which one could entrust a true idea with the least hope of finding it intact or even recognizable on the following day." While many did their best to apologize for the truth, he held it close and intact.


text: export { FishMultiple24 as default } from "../../";

redpajama_set_name: RedPajamaGithub


text:
Aggiungi dire il suo nome e
utenti: 197
Nome - 64719
Cerca corrispondenza esatta parole partita l`inizio della parola
Caramuscia
Valore:Recorded in several spellings including Caramuscia, Caramussa, and Caramusso, this is a surname of Italian origins. According to Fucilla's dictionary of Italian Surnames, it is one of a large group of what have to be described as medieval surname nicknames, which originate from insects and reptiles. However it is thought likely that most, if not all, have some heraldic pedigree. Almost every creature known to man was used in the Middle Ages when heraldry was at its height, as a 'charge' on the relevant coats of arms. The reptile group for instance, was used as a sign for prudence and sublety, although a snake, particularly a poisoned one, would have described an angry or malicious person! In this case the surname would seem to be Neopolitan, and one of the words for a green lizard, otherwise known in Italian as a lucertola. This reptile is also found in the surnames Lacerda, Certa, Sarica (Puglise), and Tammaro, from Caserta. From this it can be seen that Italian surnames are at best difficult to describe accurately, and often almost impossible. Furthermore centralised recordings of surnames as have existed in most European countries for at least five hundred years, were usually non existent, mainly because the state of Italy did not exist as a unified country before 1860.
Programmi di tutto il mondo


text:
Congressional Members Urge EPA to Crack Down on Chicago Manganese Polluter
Alex Ruppenthal | May 9, 2019 4:14 pm
An overhead view of Watco's storage terminal at 2926 E. 126th St. in Chicago. (Google)
Illinois congressional members are calling on the U.S. Environmental Protection Agency to take "immediate action" against Southeast Side industrial facilities for emitting potentially harmful levels of brain-damaging manganese dust.
U.S. Sens. Dick Durbin and Tammy Duckworth and U.S. Rep. Robin Kelly sent a letter to the agency Monday urging it to "seek injunctive relief and secure civil penalties" from any facilities that are in violation of federal pollution standards.
Named in the letter are two companies, Watco Transloading and S.H. Bell Co., both of which have been required to install air monitors at their facilities after being cited for violations by the EPA related to elevated levels of manganese emissions.
More: Read our full series on manganese on Chicago's Southeast Side
Watco announced in February that it plans to stop handling bulk amounts of manganese at its Chicago facility along the Calumet River, where data from air monitors has shown consistently high levels of manganese emissions. At the time, a Watco executive told WTTW News there was no timeline in place for the change, but that it was working on a transition plan.
Late last year, EPA air monitoring data showed that average manganese concentrations near Watco's storage terminal were nearly twice the federal limit. The most recently available data shows that in March, emissions near the facility were still in excess of the federal health safety limit for manganese.
Manganese is a heavy metal used in steelmaking that can cause brain damage at high exposures and is especially harmful for children. A recently published study of children in Ohio found a significant link between higher concentrations of manganese in hair samples and declines in IQ, mental processing speed and working memory.
According to the EPA, 3,780 people live within a mile of Watco's facility, including nearly 1,000 residents under the age of 18, and 234 children ages 5 and younger.
"EPA should require Watco to address any remaining manganese on its site built up from years if not decades of handling the material to ensure the material does not continue blowing into the surrounding area," Durbin, Duckworth and Kelly wrote in their letter to the EPA.
Watco representatives could not immediately be reached for comment.
An aerial image showing the location air monitors at Watco's Chicago storage facility (U.S. Environmental Protection Agency)
The EPA is in the process of collecting soil samples from homes near Watco's facility to analyze them for levels of manganese and other metals, according to the agency's website.
EPA staff will hold an open house for residents next week to provide information about the soil collection and obtain access agreements from homeowners interested in having their yards sampled. The event is scheduled for 5 to 7 p.m. May 16 at the Chicago Public Library's Hegewisch Branch, 3048 E. 130th St.
For more information, visit the EPA's website.
Contact Alex Ruppenthal: @arupp | aruppenthal@wttw.com | (773) 509-5623
EPA to Remove Manganese-Contaminated Soil on Southeast Side
Southeast Side Facility to Stop Handling Bulk Amounts of Brain-Damaging Manganese
Chicago Adopts Stricter Rules for Manganese, Other Pollutants
Southeast Side
EPA Plans $1.3M Cleanup of Manganese-Contaminated Soil on Southeast Side
Federal Bill Seeks Comprehensive Health Study on Petcoke


Brussels' Summer Festival 2011 has plenty of music concerts along with some side shows and accessible museums. Ten days in a row, the city will buzz with the energy of performances on various open-air stages - complemented by special events (including a burlesque show!) in selected indoor venues (BIP, Cafe Central, Cinematek, ...). And all of these events are accessible with a single 30 Euro pass - so you really can't go wrong (you an also buy a four (4) day pass for just 20 Euro).
The first night (Friday, 12) of the city festival showed a very good organisation (and almost no rain). Only item to be improved: way too few trashbins, resulting in empty cans and bottles just about everywhere outside the stage areas. I hope they'll fix this before the second night !
Hooverphonic at 7:30pm on a Friday was a bit early, but by Ozark Henry at 9pm the crowd at "The Paleizenplein" was complete. Note that even without buying a ticket you have a good view on the stage and the videoscreens from just outside the official festival area - and the sound is just fine ! Plenty of cocktail bars and not-so-typical snackbars (cupcakes, spring rolls, ...) are available between the podiums at the Kunstberg and WarandePark - enjoy !
Submitted by jblanckaert on August 30, 2011 - 11:55.
30 euro en de Vlamingen maar belasting betalen zodat Brussel stad het aan events kan besteden . Zolang je maar waarde voor je belasting geld krijgt zullen we maar zwijgen zeker ?
Submitted by Jonas Lison on September 3, 2011 - 20:55.
Hey Jan... If Brussels becomes its own little country... Then all these Flemish people who come and work in Brussels will have to pay taxes in Brussels... That will be much more expensive than the 500m yearly settlement - of which only 60% would be paid by Flanders anyhow... So, my point: the Flemish people should do more than just visiting Brussels to work and make money. They should come and enjoy the cultural events, the many events, visit Brussels like they do Paris - and enjoy their tax Euros at work ! When are you visiting Me (Jonas) in Brussels ? This weekend: Belgian Beer Festival and Brussels historic F1 Grand Prix.
Submitted by Jürgen on August 20, 2011 - 16:39.
Fridaynight August 19th at the festival... K's Choice started with one minute silence to remember the sad turn of events at Pukkelpop on Thursday... almost scary to have 3000+ people, no sounds, no lights, no nothing... one minute al of a sudden seems like a long time... Afterwards we went to Burlesque Star Performance at the Magic Mirror venue in the Warande park - a very diverse set of performers: some seasoned Burlesque performers with elaborate costumes, some real good talent... and some mishaps, like blonde "Christel"... Strange casting, entertaining show - you can go and see it one more time this evening (Saturday).
Picture copyright by Olivier Lestoquoit, 2011.


Could geologic events in Hawaii wipe out LA? Could another volcanic eruption shut down our airways? Biologist Liz Bonin and Geologist Martin Pepper travel to tropical paradises, remote glaciers and super volcanoes to reveal evidence of past catastrophic events and investigate the dangers that lie just below the Earth's surface.
Martin and Liz investigate a giant asteroid impact that may have wiped out the Dinosaurs 65 million years ago.Martin experiences the power of a NASA supergun and Liz follows the geological clues to Mexico where she dives an underground river.
Will Iceland Poison the Skies?
Martin and Liz explore Iceland to see if its volcanoes could spread global chaos in the future. Martin samples an insane motorsport on ashy slopes and Liz has the dive of a lifetime between the continental plates of North America and Europe.
Liz and Martin travel to the tropical paradise of Hawaii to investigate how evidence of catastrophic events in its geological past reveal a pattern of destruction that stretches back millions of years.
Will Europe Burn in Hell?
Ice Age or Hell Fire?


Sand Washing Plants, Benefication Plants, Conveyors Silos, Artificial Sand Making 3 What is the raw material required for manufacturing Artificial sand?
The quality of sand determines the quality of construction. A superior The artificial sand produced by proper machines can be a better substitute to river sand.
The artificial sand produced by proper machines can be a better substitute to . such fine aggregate is not suitable for concreting and other construction work.
Mar 3, 2016 Construction on the Victoria Square precinct in the inner city suburb of won the manufacturing, construction and innovation category award furnace slag GGBS, 80 aggregates such as gravel and sand, and 7 water.
2 Artificial materials The materials which are produced in the industries by Soil terminology sand, silt, clay and their suitability in construction work.
In 2000, construction sand and gravel production was 1.12 billion tons, about manmade lakes. Nation in the production of construction sand and gravel with.
Synthetic sand: mixed plastics materials for use in the construction industry. Maintenance Increased productivity Greater continuity of production Versatility.
May 12, 2014 Manufactured sand is sand produced by crushing rocks, quarry stones or quality aspects before it is deemed fit as a construction aggregate.
May 12, 2017 the production of M Sand artificial sand in place of river sand, considering the demand for sand in construction work, the government said.
Manufactured sand, aggregate production, concrete mix design develop advanced materials, efficient construction techniques and new .. Artificial sand.
An enormous quantity of concrete is consumed by the construction industry. the natural sand can be replaced with the artificial sand to produce concrete and.
Many products used in everyday life are made from sand. to develop a deposit to produce sand products to be used for construction and industrial uses. Dredges, often as large as a threestory house, floats in a natural or artificial pond.


text:
homemarket News
Positive on Cipla, L&T and Zee Ent; book profit on ONGC: Centrum Broking's Nischal Maheshwari
market | Dec 14, 2020 4:13 PM IST
By Sonia Shenoy | Surabhi Upadhyay | Dec 14, 2020 4:15 PM IST (Updated)
Nischal Maheshwari of Centrum Broking spoke to CNBC-TV18 to talk about some stocks that have been the big gainers lately.
On ONGC Maheshwari said, "We were positive on ONGC at around Rs 60, but at around Rs 95-98, I think it is good time to take away some profits from the stock."
"The upside in ONGC from the oil price increase is capped and beyond a point basically the subsidy also starts kicking in, so you will not be able to capture the full oil price increase."
He observed that it is a good time to take away some profits from ONGC. Maheshwari said it is not a long-term investment kind of a bet basically which one can take in one's portfolio.
On Cipla, he said, "We have been positive on Cipla for some time. We continue to believe there is more legs to it."
On Zee Entertainment, Maheshwari said, "We like Zee Entertainment Enterprises in this space, I believe Zee is not gone anyway, that is a stock basically one can look in this space."
On Larsen & Toubro (L&T), he said, "I would be adding L&T, around these prices also I continue to add L&T, we have been positive on the stock. The press release what it says is basically about the bullet train where they had been the largest contractors to get the maximum amount of orderbook. That is a significant win which they have had, so L&T is like a mirror to the economy and that is one of the best plays as far as the recovery is concerned."
: The views and investment tips expressed by investment experts on CNBCTV18.com are their own and not that of the website or its management. CNBCTV18.com advises users to check with certified experts before taking any investment decisions.
(Edited by : Bivekananda Biswas)
First Published: Dec 14, 2020 4:13 PM IST
Larsen Toubro
Zee Entertainment


It has just been announced that Wireless Mystery Theatre's adaptation of Orson Welles' The 39 Steps has been picked up to be performed as part of the first ever Belfast Fringe Festival.
The show went down a storm when it played in the Chillifest this month, with the performance tent overflowing with viewer, and the good word that spread from the performance was what inspired the organisers to book us.
It will be performed in No Alibis Book Store, Botanic Avenue on October 22nd, with tickets available now at £5.
As mentioned above, this is the first Belfast Fringe, but I'm sure that with the good organisation that has been evident so far, it could be on a par with Edinburgh in the decades to come.


What can I say- love the show, can't stand Barbie...... but how do we feel about Mad Men Barbies?
A Barbie story, our daughters where given some Barbies ( despite our objections-yes grandma that was you), we were concerned about the image they portrayed to our young girls. They played with them for a while and then decided to throw them out their bedroom window onto the porch roof below. For months afterwords we would suddenly see a naked Barbie lying on the ground in the yard after a perilous fall. I guess we won the Barbie debate.


In a nutshell, a joint account is a bank account with two account holders. Joint accounts are often used by couples to combine some or all of their finances to help manage household expenses or to save together.
What are some of the benefits of having a joint account?
A joint account is typically either an everyday transaction account (suited for managing everyday expenses) or a savings account (as the name suggests, designed with saving in mind).
Having a joint transaction account can make it easier to manage joint household expenses. Many couples decide to deposit a set amount to cover the expenses and bills such as mortgage repayments or rent, power and gas. These payments can then be set up as direct debits that are taken out from the account automatically when they're due.
A joint savings account can be an ideal way to work towards a common savings goal. Ideally both account holders should agree on what they're savings towards as well as decide upfront how much they should both contribute and under what circumstances money can be withdrawn.
Do both account holders need to give permission to take money out?
Most joint accounts allow either account holder to get money out at any time (more likely for an everyday transaction account), whereas some accounts require both account holders to approve any withdrawals.
As a rule of thumb, most accounts will generally allow both account holders to access the account at their discretion rather than requiring both account holders to agree. That means if you want a joint account and you want both of you to have to agree when money can be taken out, you'll likely need to arrange to have this set up.
There can be downsides to opening a joint account, particularly if either account holder can get cash out without needing the permission of the other person. That means in a worst case scenario either account holder could withdraw the entire balance of the account without the knowledge of the other person. It's important you only open a joint account with someone you trust.
What's the reason for the account - to pay household bills, set up an emergency fund or save towards a goal?
Will you both deposit the same amount or will you each put in a different figure? Or will you both decide to have your salary paid into the one account?
Will you keep separate accounts still or will you just have the one joint account? If so, will you both get an allowance from the account or will you both withdraw money when either of you sees fit?
Will you both need to give permission to withdraw from the account or will you both have full authority to access the account when you wish?
There are no right or wrong answers to these questions, but what is important is that you set the ground rules upfront. An open conversation can go a long way to avoiding any confusion and disagreements later and can help make a joint account a way of managing everyday expenses as well as helping to work towards common financial goals.


Please Specifiy the font you would like used, Most Common is Club Font. If you already have had a hood name made please include details on that in the box below. Also include who made the hood name.
The "Names" section is for adding a your Jeeps Name to the back of the shirt. The color may not be an exact match because the shirts are printed with ink and the names are done with HTV Vinyl.


Reckon is an Australian software company that provides accountants and Bookkeepers of small and medium businesses desktop and cloud based accounting software. Today it becomes the choice of more than 4 million businesses across Australia and New Zealand that helps managing finances easier than ever. Reckon one can possibly win noteworthy market share as it offers a really cutting edge modular and reasonable way to deal with managing with the majority of a private company's bookkeeping needs.
Bookkeepers can be sure they are suggesting a trusted accounting software brand with a fantastic reputation. Reckon has worked with accountants for more than 20 years and comprehends their requirements. Reckon also provides its Help and Support for its clients through Reckon Support Helpline Number New Zealand or Reckon Toll Free Number +64-09889-2002, by its expert technical staff available 24 x7 hours all around the year. Apart from toll free number, Reckon Customer Services Help Number can also be reached through live chat where Reckon technicians directly chat to its customers online on software related issues and provide instant solutions by taking remote support. Customers have the option to send email also, by writing their problems and get contacted when available.
A one-stop shop that gives a large number of effective bookkeeping arrangements incorporates accountants, bookkeepers, and clerks to get close by bundles of the solutions around the globe. Call Reckon New Zealand Phone Number +64-09889-2002.


text:
News	> Latin America
Mexico: 43 Months Since Kidnapping of 43 Ayotzinapa Students
A mother of one of the kidnapped students protests in front of the military barracks in Chilpancingo, Guerrero. April 20, 2018. | Photo: Twitter / @lezam_saavedra
The students were kidnapped by local police on Sept. 26, 2014. Their families are still looking for them.
Families, relatives and friends of the 43 rural students, known as the Ayotzinapa 43 and kidnapped by local police in the state of Guerrero, in Mexico, were holding protests and actions this week to mark 43 months since the disappearance of the students as they demand real answers and investigations from the government.
UN Accuses Mexico of Torture in 43 Ayotzinapa Students Case
The National Popular Assembly (ANP), a discussion platform organized by the parents of the missing students and local organizations in Guerrero, decided to carry out a series of protests to demand actions from the government and inform people about their struggle. The actions will take place until April 26, the day marking exactly 43 months since they went missing.
"The government has made no progress in our case, but they're stubborn, presenting their historic lie despite the scientific and factual inconsistencies of that theory," the parents declared during a protest earlier this week in reference to the government's controversial theory about what happened.
With the support of their children's colleagues from the Raul Isidro Burgos Rural Teachers' College in Ayotzinapa, the parents of the missing students protested at the monument of the fallen in Chilpancingo, Guerrero's capital, and painted on the walls of the 35th military unit barracks, which is accused by the families of collaborating with the police and a local drug cartel on the night the students went missing, in an event called "43 x 43 In the Heart."
Padres de los 43 y estudiantes de la Escuela Normal Rural de Ayotzinapa, Guerrero, protestaron en Chilpancingo y realizaron pintas en la sede de la 35 Zona Militar pic.twitter.com/nRoGSpuinJ
— ReporTorres (@ReporTorres) 20 de abril de 2018
"Parents of the 43 and students of the Rural Teachers' College of Ayotzinapa, Guerrero, protested in Chilpancingo and painted on the walls of the 35 Military Zone."
"We want the Mexican government to follow the four lines of investigation proposed by the Interdisciplinary Group of Independent Experts (GIEI). It has now been confirmed that there's a drug traffic route between Iguala and Chicago, and we demand that line be investigated," said Meliton Ortega, spokesperson for the We're Missing 43 (Nos faltan 43) collective.
The Federal Government's investigation concluded that the students had been handed in by local police authorities to the United Warriors (Guerreros Unidos) drug cartel, which executed and burned them in a landfill.
But the parents of the missing students and the GIEI refuse to believe this theory, arguing it must have been impossible for the criminal group to burn such a quantity of bodies in one night in a small landfill.
IN PICTURES:
3 Years of Protests for Mexico's Ayotzinapa 43
Also, survivors and witnesses claim the military participated in the events, and the parents have for years demanded that the federal government investigate the military barracks.
Rafael Lopez Catarino, father of Julio Cesar Lopez, claims his son's mobile phone was last located at the 27th military barracks in Iguala, the city where the students were kidnapped, according to the GPS record.
Students and parents took over the Tierras Pietras tolling booth, letting drivers pass without paying and handing them information sheets about their struggle. Another group did the same on the highway connecting Mexico City with Acapulco, one of the country's most famous beach resorts.
The students might have been victims of shady agreements between the military, the local authorities and drug cartels regarding the production and transportation of drugs. Guerrero is one of the greatest producers of opium poppy in the world, and local organizations use private buses to transport loads undercover. Independent investigations reveal that the students might have been using the wrong bus at the wrong time.
Mexico 43 Ayotzinapa Guerrero
Desinformémonos - Sin Embargo
by teleSUR / rfpl-MH
Mexico 'Ready to Make Arrests' in Case of Missing 43 Students
IACHR Demands Mexico Prove Progress in Ayotzinapa Student Case
Parents of Disappeared Ayotzinapa Students Protest Court


text:
Source: QB Mitchell Trubisky has dislocated left shoulder and slight labrum tear, but won't need surgery
An MRI on the injured shoulder of Chicago Bears quarterback Mitchell Trubisky revealed that he has a dislocated left shoulder with a slight labrum tear, but he does not need surgery, sources told ESPN's Adam Schefter Monday.
A source said that the QB should be back "sooner rather than later." Trubisky will travel with the team to London for its game against the Raiders but is unlikely to play.
Bears coach Matt Nagy did not provide an update on the injury Monday, insisting the team will "know more throughout the day."
"It's his left shoulder," Nagy said. "And so we'll know more here throughout the day. I think the biggest thing is making sure that he feels good and then doctor-wise and all that stuff, he's OK. We'll keep an eye on it. I'll know more later on here today."
Trubisky injured the shoulder early in the first quarter against the Vikings on Sunday and missed the majority of his team's 16-6 victory.
The Vikings knocked Trubisky out of the game on the Bears' sixth offensive play when Minnesota defensive end Danielle Hunter sacked the 25-year-old quarterback for a 10-yard loss.
On the play, Trubisky's body twisted and his left shoulder hit the ground violently as Hunter pulled him down, causing the quarterback to fumble. Minnesota's Everson Griffen scooped up the ball, although a defensive holding penalty on Vikings safety Anthony Harris gave the ball back to Chicago.
Trubisky immediately went to the blue injury tent before being escorted to the locker room for further medical attention. He returned to the sideline with his left arm in a sling, watching a good portion of the game from there, and was in the locker room congratulating teammates after the game.
Veteran backup Chase Daniel replaced Trubisky and tossed a first-quarter touchdown pass to running back Tarik Cohen. Daniel managed Sunday's game without any turnovers and finished 22 of 30 for 195 yards and the one touchdown as the Bears improved to 3-1.
"That's the one luxury that we have is having Chase," Nagy said. "He knows the offense really, really well. He's really like a coach out there. He can fix any mistakes that I have, even if it's just communication, he's able to handle hat. He did that a couple times yesterday. If he's who ends up playing, then we feel very comfortable. We ran into this last year, right? If Chase is your guy, we'll have a plan and then same thing with Mitch. So I just -- I feel comfortable, I know the other teammates feel comfortable with him as well. We're fortunate to be in this position."
The Bears are likely to elevate veteran backup quarterback Tyler Bray from the practice squad to the active roster in advance of Sunday's game against Oakland.
Tight end Trey Burton and Cohen are among the team's emergency quarterback options.
Information from ESPN's Jeff Dickerson was used in this report.
Clark confident in Daniel replacing Trubisky
Ryan Clark is confident that Chase Daniel will keep the Bears competitive while Mitchell Trubisky is injured.
Trubisky exits with shoulder injury
Mitchell Trubisky is sacked and lands awkwardly on his left shoulder, forcing him out of the game against the Vikings.
sportsespnnflchicago bearsmitchell trubisky


text:
Ukrainian crisis a threat to Europe and democracy, local leaders say
Prayer service celebrating Dr. King set for Jan. 17
Local pro-lifers doing 'amazing things' for life at all stages
Digital archives show local Catholic life from generations past
Tech firm donates $50K to archdiocesan hunger relief agency, with matching gift challenge
Local News • Papal Visit
Like others in city, Pope Francis visits knotted prayers near cathedral
A volunteer ties inside the "Knotted Grotto" ribbons containing written intentions for which people have prayed on Friday night, Sept. 25. (Photo by Bob Kelly)
By Matthew Gambino • Posted September 27, 2015
In an unplanned gesture before the papal Mass on Sunday, Sept. 27, Pope Francis stopped his motorcade in front of the Cathedral Basilica of SS. Peter and Paul on 18th and the Benjamin Franklin parkway to visit the "Knotted Grotto" devotion.
For the past month a 10-foot-high wooden lattice-work dome built in front of the cathedral's chapel has invited people to write a prayer intention on a white ribbon and tie it in a knot onto nearby fences, then untie another ribbon, pray for that person's intention, and tie it inside the dome.
It is all under the patronage of Mary, Untier of Knots, a personal devotion of Pope Francis, and he paused to pray before a painting of Mary hung on a cathedral wall.
He also met there with Sister Mary Scullion, who conceived the project as a way for people to remember each other, especially the unfortunate, in their prayers by the example of Pope Francis.
The Sister of Mercy is cofounder of Project HOME, one of the most successful organizations serving homeless people in the city, and a well-known advocate on the issue of homelessness.
Many of the prayer ribbons refer to people recovering or struggling with addictions, dealing with joblessness or mourning the death or sickness of loved ones.
Since its installation by artist and designer Meg Saligman, 100,000 ribbons have been tied in a burgeoning tapestry of knotted ribbons, more than 10,000 a day since the World Meeting of Families began in Philadelphia Sept. 22.
Long after the papal Mass had ended, people still flowed to the cathedral and prayed over the knotted intentions, physically untying them and devoutly relying on Mary's aid.
Artist Meg Saligman, who designed the "Knotted Grotto," works Sept. 25 to add more tied ribbons to open spaces around the grotto. (Bob Kelly)
PREVIOUS: Mass by Pope Francis inspires silent prayer, joyful praise from massive crowd
NEXT: Faces of joy and devotion mark unforgettable papal Mass


text:
The English Historical Review is a bimonthly peer-reviewed academic journal that was established in 1886 and published by Oxford University Press (formerly Longman). It publishes articles on all aspects of history – British, European, and world history – since the classical era. It is the oldest surviving English language academic journal in the discipline of history.

Six issues are published each year, and typically include four articles from a broad chronological range (roughly, medieval, early modern, modern and twentieth century) and around sixty book reviews. Review Articles are commissioned by the editors. A summary of international periodical literature published in the previous twelve months is also provided, and an annual summary of editions, reference works and other materials of interest to scholars is also produced.

The journal was established in 1886 by John Dalberg-Acton, 1st Baron Acton, Regius professor of modern history at Cambridge, and a fellow of All Souls College, Oxford. The first editor was Mandell Creighton. The current editors are Nandini Chatterjee, Stephen Conway, Peter Marshall, Jan Rüger, Hannah Skoda, and Alice Taylor.

List of editors
Editors of The English Historical Review:
 1886–1891: Mandell Creighton
 1891–1894: Samuel Rawson Gardiner, assisted by Reginald Lane Poole
 1895–1901: S. R. Gardiner and Reginald Lane Poole
 1902–1920: Reginald Lane Poole, assisted (1920) by George Norman Clark
 1921–1925: G. N. Clark assisted (1924-5) by E. Stanley Cohn
 1926: G. N. Clark and Charles William Previté-Orton
 1927–1938: C. W. Previté-Orton
 1938–1939: C. W. Previté-Orton and G. N. Clark
 1939–1958: John Goronwy Edwards and Richard Pares
 1958–1959: J. G. Edwards and Denys Hay
 1959–1965: Denys Hay
 1965–1967: John Michael Wallace-Hadrill
 1967–1974: J. M. Wallace-Hadrill and John Morris Roberts
 1974–1978: J. M. Roberts and George Arthur Holmes
 1978–1981: G. A. Holmes and Angus Donald Macintyre
 1982–1986: A. D. Macintyre and Penry Herbert Williams
 1986–1990: P. H. Williams and Robert John Weston Evans
 1991–1995: R. J. W.  Evans and John Maddicott
 1996–1999: J. H. Maddicott and John Stevenson
 1999–2001: J. H. Maddicott and Jean Dunbabin
 2001: Jean Dunbabin and John Rowlatt
 2001–2004: Jean Dunbabin and George W. Bernard
 2004–2006: G. W. Bernard and Philip Waller
 2007–2012: G. W Bernard and Martin Conway
 2012–2013: Martin Conway and Catherine Holmes
 2013–2016: Martin Conway, Catherine Holmes, and Peter Marshall
 2017–?: Catherine Holmes, Peter Marshall, Stephen Conway, and Hannah Skoda

See also
 Historiography
 Historiography of the United Kingdom

References

Further reading

External links

1886 establishments in England
English-language journals
History journals
Bimonthly journals
Oxford University Press academic journals
Publications established in 1886