text:
package org.deeplearning4j.nn.layers.recurrent;

import org.deeplearning4j.berkeley.Pair;
import org.deeplearning4j.exception.DL4JInvalidInputException;
import org.deeplearning4j.nn.api.Layer;
import org.deeplearning4j.nn.conf.NeuralNetConfiguration;
import org.deeplearning4j.nn.gradient.DefaultGradient;
import org.deeplearning4j.nn.gradient.Gradient;
import org.deeplearning4j.util.Dropout;
import org.nd4j.linalg.api.blas.Level1;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.api.ops.impl.transforms.TimesOneMinus;
import org.nd4j.linalg.api.ops.impl.transforms.arithmetic.MulOp;
import org.nd4j.linalg.api.shape.Shape;
import org.nd4j.linalg.factory.Nd4j;
import org.nd4j.linalg.indexing.NDArrayIndex;

import java.util.Arrays;
import java.util.Map;

import static org.nd4j.linalg.indexing.NDArrayIndex.interval;
import static org.nd4j.linalg.indexing.NDArrayIndex.point;

/**
 *
 * RNN tutorial: http://deeplearning4j.org/usingrnns.html
 * READ THIS FIRST if you want to understand what the heck is happening here.
 *
 * Shared code for the standard "forwards" LSTM RNN and the bidirectional LSTM RNN
 * This was extracted from GravesLSTM and refactored into static helper functions.  The general reasoning for this was
 * so we only have math in one place, instead of two.
 *
 * Based on Graves: Supervised Sequence Labelling with Recurrent Neural Networks
 * http://www.cs.toronto.edu/~graves/phd.pdf
 * See also for full/vectorized equations (and a comparison to other LSTM variants):
 * Greff et al. 2015, "LSTM: A Search Space Odyssey", pg11. This is the "vanilla" variant in said paper
 * http://arxiv.org/pdf/1503.04069.pdf
 *
 * Please note that truncated backpropagation through time (BPTT) will not work with the bidirectional layer as-is.
 * Additionally, variable length data sets will also not work with the bidirectional layer.
 *
 * @author Alex Black (LSTM implementation)
 * @author Benjamin Joseph (refactoring for bidirectional LSTM)
 */
public class LSTMHelpers {

    public static final String SIGMOID = "sigmoid";

    private LSTMHelpers() {
    }

    /**
     * Returns FwdPassReturn object with activations/INDArrays. Allows activateHelper to be used for forward pass, backward pass
     * and rnnTimeStep whilst being reasonably efficient for all
     */
    static public FwdPassReturn activateHelper( final Layer layer,
                                                final NeuralNetConfiguration conf,
                                                final INDArray input,
                                                final INDArray recurrentWeights,      //Shape: [hiddenLayerSize,4*hiddenLayerSize+3]; order: [wI,wF,wO,wG,wFF,wOO,wGG]
                                                final INDArray originalInputWeights,  //Shape: [n^(L-1),4*hiddenLayerSize]; order: [wi,wf,wo,wg]
                                                final INDArray biases,                //Shape: [4,hiddenLayerSize]; order: [bi,bf,bo,bg]^T
                                                final boolean training,
                                                final INDArray originalPrevOutputActivations,
                                                final INDArray originalPrevMemCellState,
                                                boolean forBackprop,
                                                boolean forwards,
                                                final String inputWeightKey) {
        //Mini-batch data format: for mini-batch size m, nIn inputs, and T time series length
        //Data has shape [m,nIn,T]. Layer activations/output has shape [m,nHiddenUnits,T]
        if(input == null || input.length() == 0) throw new IllegalArgumentException("Invalid input: not set or 0 length");

        INDArray inputWeights = originalInputWeights;
        INDArray prevOutputActivations = originalPrevOutputActivations;

        boolean is2dInput = input.rank() < 3;        //Edge case of T=1, may have shape [m,nIn], equiv. to [m,nIn,1]
        int timeSeriesLength = (is2dInput ? 1 : input.size(2));
        int hiddenLayerSize = recurrentWeights.size(0);
        int miniBatchSize = input.size(0);

        INDArray prevMemCellState;
        if (originalPrevMemCellState == null) {
            prevMemCellState = Nd4j.create(new int[]{miniBatchSize, hiddenLayerSize},'f');
        } else {
            prevMemCellState = originalPrevMemCellState.dup('f');
        }

        INDArray recurrentWeightsIFOG = recurrentWeights.get(NDArrayIndex.all(), NDArrayIndex.interval(0,4*hiddenLayerSize)).dup('f');

        //Apply dropconnect to input (not recurrent) weights only:
        if (conf.isUseDropConnect() && training && conf.getLayer().getDropOut() > 0) {
            inputWeights = Dropout.applyDropConnect(layer, inputWeightKey);
        }

        INDArray wFFTranspose = recurrentWeights.get(NDArrayIndex.all(), interval(4 * hiddenLayerSize, 4 * hiddenLayerSize + 1)).transpose(); //current
        INDArray wOOTranspose = recurrentWeights.get(NDArrayIndex.all(), interval(4 * hiddenLayerSize + 1, 4 * hiddenLayerSize + 2)).transpose(); //current
        INDArray wGGTranspose = recurrentWeights.get(NDArrayIndex.all(), interval(4 * hiddenLayerSize + 2, 4 * hiddenLayerSize + 3)).transpose(); //previous

        if (timeSeriesLength > 1 || forBackprop) {
            wFFTranspose = Shape.toMmulCompatible(wFFTranspose);
            wOOTranspose = Shape.toMmulCompatible(wOOTranspose);
            wGGTranspose = Shape.toMmulCompatible(wGGTranspose);
        }

        //Allocate arrays for activations:
        INDArray outputActivations = null;

        FwdPassReturn toReturn = new FwdPassReturn();
        if (forBackprop) {
            toReturn.fwdPassOutputAsArrays = new INDArray[timeSeriesLength];
            toReturn.memCellState = new INDArray[timeSeriesLength];
            toReturn.memCellActivations = new INDArray[timeSeriesLength];
            toReturn.iz = new INDArray[timeSeriesLength];
            toReturn.ia = new INDArray[timeSeriesLength];
            toReturn.fa = new INDArray[timeSeriesLength];
            toReturn.oa = new INDArray[timeSeriesLength];
            toReturn.ga = new INDArray[timeSeriesLength];
        } else {
            outputActivations = Nd4j.create(new int[]{miniBatchSize, hiddenLayerSize, timeSeriesLength},'f');   //F order to keep time steps together
            toReturn.fwdPassOutput = outputActivations;
        }

        Level1 l1BLAS = Nd4j.getBlasWrapper().level1();

        //Input validation: check input data matches nIn
        if(input.size(1) != inputWeights.size(0)){
            throw new DL4JInvalidInputException("Received input with size(1) = " + input.size(1) + " (input array shape = "
                    + Arrays.toString(input.shape()) + "); input.size(1) must match layer nIn size (nIn = " + inputWeights.size(0) + ")");
        }
        //Input validation: check that if past state is provided, that it has same
        //These can be different if user forgets to call rnnClearPreviousState() between calls of rnnTimeStep
        if(prevOutputActivations != null && prevOutputActivations.size(0) != input.size(0)){
            throw new DL4JInvalidInputException("Previous activations (stored state) number of examples = " + prevOutputActivations.size(0)
                + " but input array number of examples = " + input.size(0) + ". Possible cause: using rnnTimeStep() without calling"
                + " rnnClearPreviousState() between different sequences?");
        }

        //initialize prevOutputActivations to zeroes
        if (prevOutputActivations == null) {
            prevOutputActivations = Nd4j.zeros(new int[]{miniBatchSize, hiddenLayerSize});
        }

        for (int iTimeIndex = 0; iTimeIndex < timeSeriesLength; iTimeIndex++) {
            int time = iTimeIndex;

            if (!forwards) {
                time = timeSeriesLength - iTimeIndex - 1;
            }

            INDArray miniBatchData = (is2dInput ? input : input.tensorAlongDimension(time, 1, 0));    //[Expected shape: [m,nIn]. Also deals with edge case of T=1, with 'time series' data of shape [m,nIn], equiv. to [m,nIn,1]
            miniBatchData = Shape.toMmulCompatible(miniBatchData);

            //Calculate activations for: network input + forget, output, input modulation gates. Next 3 lines are first part of those
            INDArray ifogActivations = miniBatchData.mmul(inputWeights);    //Shape: [miniBatch,4*layerSize]
            Nd4j.gemm(prevOutputActivations, recurrentWeightsIFOG, ifogActivations, false, false, 1.0, 1.0);
            ifogActivations.addiRowVector(biases);

            INDArray inputActivations = ifogActivations.get(NDArrayIndex.all(), NDArrayIndex.interval(0,hiddenLayerSize));
            if (forBackprop) toReturn.iz[time] = inputActivations.dup('f');
            Nd4j.getExecutioner().execAndReturn(Nd4j.getOpFactory().createTransform(conf.getLayer().getActivationFunction(), inputActivations));
            if (forBackprop) toReturn.ia[time] = inputActivations;

            INDArray forgetGateActivations = ifogActivations.get(NDArrayIndex.all(), NDArrayIndex.interval(hiddenLayerSize,2*hiddenLayerSize));
            INDArray pmcellWFF = prevMemCellState.dup('f').muliRowVector(wFFTranspose);
            l1BLAS.axpy(pmcellWFF.length(), 1.0, pmcellWFF, forgetGateActivations);   //y = a*x + y i.e., forgetGateActivations.addi(pmcellWFF)
            //Above line: treats matrix as a vector. Can only do this because we're sure both pwcelWFF and forgetGateACtivations are f order, offset 0 and have same strides
            Nd4j.getExecutioner().execAndReturn(Nd4j.getOpFactory().createTransform(SIGMOID, forgetGateActivations));
            if (forBackprop) toReturn.fa[time] = forgetGateActivations;

            INDArray inputModGateActivations = ifogActivations.get(NDArrayIndex.all(), NDArrayIndex.interval(3*hiddenLayerSize,4*hiddenLayerSize));
            INDArray pmcellWGG = prevMemCellState.dup('f').muliRowVector(wGGTranspose);
            l1BLAS.axpy(pmcellWGG.length(), 1.0, pmcellWGG, inputModGateActivations);   //inputModGateActivations.addi(pmcellWGG)
            Nd4j.getExecutioner().execAndReturn(Nd4j.getOpFactory().createTransform(SIGMOID, inputModGateActivations));
            if (forBackprop) toReturn.ga[time] = inputModGateActivations;

            //Memory cell state
            INDArray currentMemoryCellState;
            INDArray inputModMulInput;
            if(forBackprop){
                currentMemoryCellState = prevMemCellState.dup('f').muli(forgetGateActivations);
                inputModMulInput = inputModGateActivations.dup('f').muli(inputActivations);
            } else {
                currentMemoryCellState = forgetGateActivations.muli(prevMemCellState);
                inputModMulInput = inputModGateActivations.muli(inputActivations);
            }
            l1BLAS.axpy(currentMemoryCellState.length(), 1.0, inputModMulInput, currentMemoryCellState);   //currentMemoryCellState.addi(inputModMulInput)

            INDArray outputGateActivations = ifogActivations.get(NDArrayIndex.all(), NDArrayIndex.interval(2*hiddenLayerSize,3*hiddenLayerSize));
            INDArray pmcellWOO = currentMemoryCellState.dup('f').muliRowVector(wOOTranspose);
            l1BLAS.axpy(pmcellWOO.length(), 1.0, pmcellWOO, outputGateActivations);   //outputGateActivations.addi(pmcellWOO)
            Nd4j.getExecutioner().execAndReturn(Nd4j.getOpFactory().createTransform(SIGMOID, outputGateActivations));
            if (forBackprop) toReturn.oa[time] = outputGateActivations;

            //LSTM unit outputs:
            INDArray currMemoryCellActivation = Nd4j.getExecutioner().execAndReturn(Nd4j.getOpFactory().createTransform(conf.getLayer().getActivationFunction(), currentMemoryCellState.dup('f')));
            INDArray currHiddenUnitActivations;
            if(forBackprop){
                currHiddenUnitActivations = currMemoryCellActivation.dup('f').muli(outputGateActivations);    //Expected shape: [m,hiddenLayerSize]
            } else {
                currHiddenUnitActivations = currMemoryCellActivation.muli(outputGateActivations);    //Expected shape: [m,hiddenLayerSize]
            }

            if (forBackprop) {
                toReturn.fwdPassOutputAsArrays[time] = currHiddenUnitActivations;
                toReturn.memCellState[time] = currentMemoryCellState;
                toReturn.memCellActivations[time] = currMemoryCellActivation;
            } else {
                outputActivations.tensorAlongDimension(time, 1, 0).assign(currHiddenUnitActivations);
            }

            prevOutputActivations = currHiddenUnitActivations;
            prevMemCellState = currentMemoryCellState;

            toReturn.lastAct = currHiddenUnitActivations;
            toReturn.lastMemCell = currentMemoryCellState;
        }

        return toReturn;
    }

    static public Pair<Gradient, INDArray> backpropGradientHelper(final NeuralNetConfiguration conf,
                                                                  final INDArray input,
                                                                  final INDArray recurrentWeights,      //Shape: [hiddenLayerSize,4*hiddenLayerSize+3]; order: [wI,wF,wO,wG,wFF,wOO,wGG]
                                                                  final INDArray inputWeights,  //Shape: [n^(L-1),4*hiddenLayerSize]; order: [wi,wf,wo,wg]
                                                                  final INDArray epsilon,
                                                                  final boolean truncatedBPTT,
                                                                  final int tbpttBackwardLength,
                                                                  final FwdPassReturn fwdPass,
                                                                  final boolean forwards,
                                                                  final String inputWeightKey,
                                                                  final String recurrentWeightKey,
                                                                  final String biasWeightKey,
                                                                  final Map<String,INDArray> gradientViews) {

        //Expect errors to have shape: [miniBatchSize,n^(L+1),timeSeriesLength]
        int hiddenLayerSize = recurrentWeights.size(0);    //i.e., n^L
        int prevLayerSize = inputWeights.size(0);    //n^(L-1)
        int miniBatchSize = epsilon.size(0);
        boolean is2dInput = epsilon.rank() < 3; //Edge case: T=1 may have shape [miniBatchSize,n^(L+1)], equiv. to [miniBatchSize,n^(L+1),1]
        int timeSeriesLength = (is2dInput ? 1 : epsilon.size(2));

        INDArray wFFTranspose = recurrentWeights.get(NDArrayIndex.all(), point(4 * hiddenLayerSize)).transpose();
        INDArray wOOTranspose = recurrentWeights.get(NDArrayIndex.all(), point(4 * hiddenLayerSize+1)).transpose();
        INDArray wGGTranspose = recurrentWeights.get(NDArrayIndex.all(), point(4 * hiddenLayerSize+2)).transpose();

        INDArray wIFOG = recurrentWeights.get(NDArrayIndex.all(), NDArrayIndex.interval(0,4*hiddenLayerSize));
        //F order here so that content for time steps are together
        INDArray epsilonNext = Nd4j.create(new int[]{miniBatchSize, prevLayerSize, timeSeriesLength},'f');    //i.e., what would be W^L*(delta^L)^T. Shape: [m,n^(L-1),T]

        INDArray nablaCellStateNext = null;

        INDArray deltaifogNext = Nd4j.create(new int[]{miniBatchSize,4*hiddenLayerSize},'f');
        INDArray deltaiNext = deltaifogNext.get(NDArrayIndex.all(), NDArrayIndex.interval(0,hiddenLayerSize));
        INDArray deltafNext = deltaifogNext.get(NDArrayIndex.all(), NDArrayIndex.interval(hiddenLayerSize,2*hiddenLayerSize));
        INDArray deltaoNext = deltaifogNext.get(NDArrayIndex.all(), NDArrayIndex.interval(2*hiddenLayerSize,3*hiddenLayerSize));
        INDArray deltagNext = deltaifogNext.get(NDArrayIndex.all(), NDArrayIndex.interval(3*hiddenLayerSize,4*hiddenLayerSize));

        Level1 l1BLAS = Nd4j.getBlasWrapper().level1();
        int endIdx = 0;

        if (truncatedBPTT) {
            endIdx = Math.max(0, timeSeriesLength - tbpttBackwardLength);
        }

        //Get gradients. Note that we have to manually zero these, as they might not be initialized (or still has data from last iteration)
        //Also note that they are in f order (as per param initializer) so can be used in gemm etc
        INDArray iwGradientsOut = gradientViews.get(inputWeightKey);
        INDArray rwGradientsOut = gradientViews.get(recurrentWeightKey);    //Order: {I,F,O,G,FF,OO,GG}
        INDArray bGradientsOut = gradientViews.get(biasWeightKey);
        iwGradientsOut.assign(0);
        rwGradientsOut.assign(0);
        bGradientsOut.assign(0);

        INDArray rwGradientsIFOG = rwGradientsOut.get(NDArrayIndex.all(), NDArrayIndex.interval(0,4*hiddenLayerSize));
        INDArray rwGradientsFF = rwGradientsOut.get(NDArrayIndex.all(), NDArrayIndex.point(4 * hiddenLayerSize));
        INDArray rwGradientsOO = rwGradientsOut.get(NDArrayIndex.all(), NDArrayIndex.point(4 * hiddenLayerSize + 1));
        INDArray rwGradientsGG = rwGradientsOut.get(NDArrayIndex.all(), NDArrayIndex.point(4 * hiddenLayerSize + 2));

        for (int iTimeIndex = timeSeriesLength - 1; iTimeIndex >= endIdx; iTimeIndex--) {
            int time = iTimeIndex;
            int inext = 1;

            if (!forwards) {
                time = timeSeriesLength - iTimeIndex - 1;
                inext = -1;
            }

            //First: calclate the components of nablaCellState that relies on the next time step deltas, so we can overwrite the deltas
            INDArray nablaCellState;
            if(iTimeIndex != timeSeriesLength -1){
                nablaCellState = deltafNext.dup('f').muliRowVector(wFFTranspose);
                l1BLAS.axpy(nablaCellState.length(), 1.0, deltagNext.dup('f').muliRowVector(wGGTranspose), nablaCellState);
            } else {
                nablaCellState = Nd4j.create(new int[]{miniBatchSize,hiddenLayerSize},'f');
            }

            INDArray prevMemCellState = (iTimeIndex == 0 ? null : fwdPass.memCellState[time - inext]);
            INDArray prevHiddenUnitActivation = (iTimeIndex == 0 ? null : fwdPass.fwdPassOutputAsArrays[time - inext]);
            INDArray currMemCellState = fwdPass.memCellState[time];

            //LSTM unit output errors (dL/d(a_out)); not to be confused with \delta=dL/d(z_out)
            INDArray epsilonSlice = (is2dInput ? epsilon : epsilon.tensorAlongDimension(time, 1, 0));        //(w^{L+1}*(delta^{(L+1)t})^T)^T or equiv.
            INDArray nablaOut = Shape.toOffsetZeroCopy(epsilonSlice, 'f'); //Shape: [m,n^L]
            if (iTimeIndex != timeSeriesLength - 1) {
                //if t == timeSeriesLength-1 then deltaiNext etc are zeros
                Nd4j.gemm(deltaifogNext, wIFOG, nablaOut, false, true, 1.0, 1.0);
            }

            //Output gate deltas:
            INDArray sigmahOfS = fwdPass.memCellActivations[time];
            INDArray ao = fwdPass.oa[time];
            INDArray sigmaoPrimeOfZo = Nd4j.getExecutioner().execAndReturn(Nd4j.getOpFactory().createTransform("timesoneminus", ao.dup('f')));    //Equivalent to sigmoid deriv on zo
            //Normally would use zo.dup() in above line, but won't be using zo again (for this time step). Ditto for zf, zg, zi
            INDArray deltao = deltaoNext;
            Nd4j.getExecutioner().exec(new MulOp(nablaOut,sigmahOfS,deltao));
            deltao.muli(sigmaoPrimeOfZo);

            //Memory cell error:
            INDArray sigmahPrimeOfS = Nd4j.getExecutioner().execAndReturn(Nd4j.getOpFactory().createTransform(conf.getLayer().getActivationFunction(), currMemCellState.dup('f')).derivative());//	shape: [m,n^L]
            l1BLAS.axpy(nablaCellState.length(), 1.0, ao.muli(nablaOut).muli(sigmahPrimeOfS), nablaCellState);
            INDArray deltaMulRowWOO = deltao.dup('f').muliRowVector(wOOTranspose);
            l1BLAS.axpy(nablaCellState.length(), 1.0, deltaMulRowWOO, nablaCellState); //nablaCellState.addi(deltao.mulRowVector(wOOTranspose));
            if (iTimeIndex != timeSeriesLength - 1) {
                INDArray nextForgetGateAs = fwdPass.fa[time + inext];
                int length = nablaCellState.length();
                l1BLAS.axpy(length, 1.0, nextForgetGateAs.muli(nablaCellStateNext), nablaCellState);       //nablaCellState.addi(nextForgetGateAs.mul(nablaCellStateNext))
            }
            nablaCellStateNext = nablaCellState;    //Store for use in next iteration

            //Forget gate delta:
            INDArray af = fwdPass.fa[time];
            INDArray deltaf = null;
            if (iTimeIndex > 0) {
                deltaf = deltafNext;
                Nd4j.getExecutioner().exec(new TimesOneMinus(af,deltaf));
                deltaf.muli(nablaCellState);
                deltaf.muli(prevMemCellState);
            }
            //Shape: [m,n^L]

            //Input modulation gate delta:
            INDArray ag = fwdPass.ga[time];
            INDArray ai = fwdPass.ia[time];
            INDArray deltag = deltagNext;
            Nd4j.getExecutioner().exec(new TimesOneMinus(ag,deltag));   //Equivalent to sigmoid deriv on zg
            deltag.muli(ai);
            deltag.muli(nablaCellState);
            //Shape: [m,n^L]

            //Network input delta:
            INDArray zi = fwdPass.iz[time];
            INDArray deltai = deltaiNext;
            Nd4j.getExecutioner().exec(Nd4j.getOpFactory().createTransform(conf.getLayer().getActivationFunction(), zi, null, deltai).derivative());
            deltai.muli(ag);
            deltai.muli(nablaCellState);
            //Shape: [m,n^L]

            INDArray prevLayerActivationSlice = Shape.toMmulCompatible(is2dInput ? input : input.tensorAlongDimension(time, 1, 0));
            if(iTimeIndex > 0){
                //Again, deltaifog_current == deltaifogNext at this point... same array
                Nd4j.gemm(prevLayerActivationSlice, deltaifogNext, iwGradientsOut, true, false, 1.0, 1.0);
            } else {
                INDArray iwGradients_i = iwGradientsOut.get(NDArrayIndex.all(), NDArrayIndex.interval(0,hiddenLayerSize));
                Nd4j.gemm(prevLayerActivationSlice, deltai, iwGradients_i, true, false, 1.0, 1.0);
                INDArray iwGradients_og = iwGradientsOut.get(NDArrayIndex.all(), NDArrayIndex.interval(2*hiddenLayerSize, 4*hiddenLayerSize));
                INDArray deltaog = deltaifogNext.get(NDArrayIndex.all(), NDArrayIndex.interval(2*hiddenLayerSize,4*hiddenLayerSize));
                Nd4j.gemm(prevLayerActivationSlice, deltaog, iwGradients_og, true, false, 1.0, 1.0);
            }

            if (iTimeIndex > 0) {
                //If t==0, then prevHiddenUnitActivation==zeros(n^L,n^L), so dL/dW for recurrent weights will end up as 0 anyway
                //At this point: deltaifog and deltaifogNext are the same thing...
                //So what we are actually doing here is sum of (prevAct^transpose * deltaifog_current)
                Nd4j.gemm(prevHiddenUnitActivation, deltaifogNext, rwGradientsIFOG, true, false, 1.0, 1.0);

                //Shape: [1,n^L]. sum(0) is sum over examples in mini-batch.
                //Can use axpy here because result of sum and rwGradients[4 to 6] have order Nd4j.order(), via Nd4j.create()
                INDArray dLdwFF = deltaf.dup('f').muli(prevMemCellState).sum(0);    //mul not mmul because these weights are from unit j->j only (whereas other recurrent weights are i->j for all i,j)
                l1BLAS.axpy(hiddenLayerSize,1.0,dLdwFF,rwGradientsFF);     //rwGradients[4].addi(dLdwFF);    //dL/dw_{FF}
                INDArray dLdwGG = deltag.dup('f').muli(prevMemCellState).sum(0);
                l1BLAS.axpy(hiddenLayerSize,1.0,dLdwGG,rwGradientsGG);     //rwGradients[6].addi(dLdwGG);
            }

            INDArray dLdwOO = deltao.dup('f').muli(currMemCellState).sum(0);    //Expected shape: [n^L,1]. sum(0) is sum over examples in mini-batch.
            l1BLAS.axpy(hiddenLayerSize,1.0,dLdwOO,rwGradientsOO); //rwGradients[5].addi(dLdwOO);    //dL/dw_{OOxy}

            if(iTimeIndex > 0){
                l1BLAS.axpy(4*hiddenLayerSize,1.0, deltaifogNext.sum(0), bGradientsOut);
            } else {
                l1BLAS.axpy(hiddenLayerSize,1.0,deltai.sum(0),bGradientsOut);    //Sneaky way to do bGradients_i += deltai.sum(0)
                INDArray ogBiasToAdd = deltaifogNext.get(NDArrayIndex.all(), NDArrayIndex.interval(2*hiddenLayerSize,4*hiddenLayerSize)).sum(0);
                INDArray ogBiasGrad = bGradientsOut.get(NDArrayIndex.point(0), NDArrayIndex.interval(2*hiddenLayerSize,4*hiddenLayerSize));
                l1BLAS.axpy(2*hiddenLayerSize,1.0,ogBiasToAdd,ogBiasGrad);
            }

            //Calculate epsilonNext - i.e., equiv. to what would be (w^L*(d^(Lt))^T)^T in a normal network
            //But here, need to add 4 weights * deltas for the IFOG gates
            INDArray epsilonNextSlice = epsilonNext.tensorAlongDimension(time, 1, 0);   //This slice: f order and contiguous, due to epsilonNext being defined as f order.
            if(iTimeIndex > 0){
                Nd4j.gemm(deltaifogNext, inputWeights, epsilonNextSlice, false, true, 1.0, 1.0);
            } else {
                //No contribution from forget gate at t=0
                INDArray wi = inputWeights.get(NDArrayIndex.all(), NDArrayIndex.interval(0,hiddenLayerSize));
                Nd4j.gemm(deltai, wi, epsilonNextSlice, false, true, 1.0, 1.0);
                INDArray deltaog = deltaifogNext.get(NDArrayIndex.all(), NDArrayIndex.interval(2*hiddenLayerSize,4*hiddenLayerSize));
                INDArray wog = inputWeights.get(NDArrayIndex.all(), NDArrayIndex.interval(2*hiddenLayerSize,4*hiddenLayerSize));
                Nd4j.gemm(deltaog, wog, epsilonNextSlice, false, true, 1.0, 1.0);   //epsilonNextSlice.addi(deltao.mmul(woTranspose)).addi(deltag.mmul(wgTranspose));
            }
        }

        Gradient retGradient = new DefaultGradient();
        retGradient.gradientForVariable().put(inputWeightKey, iwGradientsOut);
        retGradient.gradientForVariable().put(recurrentWeightKey, rwGradientsOut);
        retGradient.gradientForVariable().put(biasWeightKey, bGradientsOut);

        return new Pair<>(retGradient, epsilonNext);
    }

}

redpajama_set_name: RedPajamaGithub


This contemporary styled and amazing modern house offers ultra luxurious accommodation with partial sea views. It has an open plan living area, large wooden decking for entertainment and a spectacular water feature and garden. The kitchen is fully fitted with state of the art appliances, including a coffee machine and dishwasher and a separate laundry area with washing machine and tumble dryer.
The four beautifully furnished bedrooms, all en-suite, are spacious with two master bedrooms, each with a king size bed and bath with jets. This is a one of a kind home with superb finishes and an exotic appeal. The house is serviced daily, except Sundays and Public Holidays.
A breakage deposit of R5000 applies.
The house keys and access cards are to be collected at the ZEMA Welcome Centre.
The check in time is 3 pm and check out time is strictly 10 am.


This outdoor celebration also features a variety of food and beverage options, as well as an outdoor licensed area. Enjoy magnificent fireworks launched from the Niagara Gorge at midnight to bring in the new year! The stage will feature top notch entertainment featuring Niagara's Own Avenue Inn, The Sheepdogs, Walk Off The Earth and Burton Cummings.


text:
Sources: Rangers give Eovaldi 2-year, $34M deal
Sources: Eovaldi's deal with Rangers for 2 years, $34 million
Free-agent pitcher Nathan Eovaldi agreed to a contract on Tuesday with the Texas Rangers, the team announced late in the day.
The deal is for two years and $34 million, and it includes a third-year vesting player option, sources told ESPN's Jeff Passan earlier in the day. Performance bonuses in the contract can take the total value even higher for the veteran.
If Eovaldi reaches 160 innings pitched per season, which he did in 2021, the bonuses could get up to $3 million a year. And the player option features a clause indicating that if he throws 300 innings from 2023 to 2024, a $20 million option in 2025 could kick in, with another $3 million in bonuses. All told, the maximum for his deal is three years and $63 million.
Eovaldi has potential for multiple roles, as he both started and came out of the bullpen last season for the Boston Red Sox. He was Boston's Opening Day starter, in fact, and finished the season at 6-3, with a 3.87 ERA and 103 strikeouts.
Eovaldi, who will turn 33 in February, broke in with the Los Angeles Dodgers in 2011, going 1-2 with a 3.63 ERA. He pitched for the Miami Marlins, New York Yankees and Tampa Bay Rays before landing with the Red Sox in 2018, helping them win the World Series that fall.
How Jacob deGrom decided to ditch New York and become a Texas Ranger
57dBuster Olney
Stock(ing) Watch: Where all 30 MLB teams stand now that the big free agents are off the board
27dBradford Doolittle
Last season was his fifth in Boston, and it was interrupted by injury. He left the active roster on June 9 with lower back inflammation and didn't return until mid-July. The right-hander was 4-2 with a 3.16 ERA in 12 starts before getting hurt.
His best season with Boston came in 2021, when he was 11-9 with a 3.75 ERA and 195 strikeouts. His career high for wins (14) came with the Yankees in 2015.
Even before Eovaldi's deal, the Rangers had remade their rotation this offseason. Earlier this month, they agreed to terms on a two-year deal with free-agent starter Andrew Heaney not long after striking a five-year deal with Jacob deGrom. The staff also includes holdovers Jon Gray, Jake Odorizzi and Martin Perez.
Last season, Texas went in a different direction and added high-profile offense to its mix. The Rangers spent a combined $500 million on middle infielders Corey Seager and Marcus Semien only to finish 68-94 in the American League West.

redpajama_set_name: RedPajamaCommonCrawl


Those holding this position are expected to provide guidance and community stakeholder input on the vision and direction of CCCS, and to provide a liaison between the Board and the community of Paradise.
Serve as liaison between CCCS Governing Board and community stakeholders and businesses.
Assist in establishing grant funding opportunities with foundations and corporations.
To provide guidance and support in the establishment and implementation of strategic goals.
Serve as an ambassador for CCCS and the charter schools movement.


Robert E. Sanders | Shaw Law Ltd.
Robert E. Sanders joined SHAW LAW LTD. in 2010. Mr. Sanders is an experienced trial lawyer with an extensive background in criminal and civil litigation for nearly 35 years. Mr. Sanders received his J.D. from Northern Illinois University College of Law. Mr. Sanders is a Medal of Honor recipient for Civil Service and an Honor Award recipient from the U.S. Department of the Treasury. Mr. Sanders previously worked at the U.S. Bureau of Alcohol, Tobacco, Firearms and Explosives as a Chief Executive Officer, Regional Director, and Special Agent in Charge of the Chicago Office.


Wish you happy Diwali with Exclusive Diwali gifts. We have presenting to you the premium collection of Diwali Gifts Hampers for make surprised to your love ones, family, friends, relatives, colleagues and clients on auspicious occasion of Diwali. Awesome and unique Diwali gifts will makes your dear and near ones happy and feels special on Festival of Light. This Gift Hamper Includes: Chocolate Dates Almonds Pack (Weight : 140 Gms), Hershey's Cocoa with Almond Spreads (Weight : 350 gms), Almonds (Weight : 150 Gms), Gold Plated Laxmi Kuber on 1000 Rupees Currency Note, Pair Tealight Wax Candles along with Diwali Greeting Card.


Which RegKeys – Collections Management for Dynamics® GP?
Valid Registration Keys (RegKeys) are needed to operate Collections Management for Microsoft Dynamics® GP. However, with the transition of the Collections Management business from Microsoft to Professional Advantage (PA), I thought this blog might be useful to unravel the RegKey puzzle.
With Business Connectivity Services in SharePoint 2010, you are able to use Microsoft SharePoint 2010 Search to connect to external data, such as your Microsoft Dynamics CRM 2011 database.


Be generous with your sunscreen. It's important to use a sunscreen that has at least SPF 30, in order to protect your skin from harmful UV rays. Instead of purchasing this at your local grocery store, check the dollar store first. You'll likely find the same quantity and SPF for a fraction of the price!
Invest in a water filter. Staying hydrated throughout a warm, humid summer is necessary. But instead of purchasing a case of bottled water each week, invest $15-$25 in a water filter than can attach directly to your sink. By using filtered water from your own tap, you'll save a significant amount of money each summer!
Skip the store bought smoothies, and enjoy a cool drink at home. Healthy fruit smoothies can be tempting on a hot summer day, but instead of spending $7 for blended fruit – do it yourself! Combine ice, almond milk (or soy milk,) and your favorite fruit – blend and enjoy. Click here for some inexpensive summer smoothie recipes.
Get wet. Summer is the perfect time of year to get wet! Instead of paying almost $40 per ticket to enjoy a day at the water park, visit your local beach or rent a pair of kayaks. Pack a lunch, some beach games, and make a day out of it!
Take up a new hobby. This is the best time of year to try out some new hobbies and get some cardio in! Outdoor activities like gardening, hiking, swimming and bicycling are fun and inexpensive ways for you to enjoy beautiful weather.


The president delivered a State of the Union that suggested an alternate political reality.
President Donald Trump stood before Congress and the nation Tuesday night and invited people to imagine an alternate universe.
Think of it as the what-if presidency.
What if he had not spent a year compulsively lashing his opponents and taking steel wool to the country's cultural, ideological and racial wounds? What if a special prosecutor did not have his sights locked on the administration over possible electoral collusion with Russia and obstruction of justice?
And what if—perhaps the biggest stretch of all—Trump somehow brought to heel the impulsiveness and improvisation that define his politics and replaced these, even partly, with strategic purpose?
The 80 minutes Trump stood at the House speaker's lectern suggest an answer: He would be in a commanding position in American politics after one year in power, with his own party firmly locked down and Democrats on the defensive.
The speech also illuminated how well-positioned he would be to fortify his standing in the year ahead.
Whether by accident or design, Trump is presiding over a strong economy — the kind that has historically rewarded incumbents lavishly — and his recent legislative victory overhauling the tax code has made him the toast of C-suites on Wall Street and beyond. Through a mix of intimidation and accommodation, a man who spent most of his adult life with no consistent partisan allegiances has turned the Republican Party into his tool, as GOP cheers during Tuesday's speech and cable TV air kisses afterward indicated.
With some artful deal-cutting, Trump also would have a strong chance to expand his base with an agreement on immigration and an even more potent trillion-dollar-plus infrastructure program that would power jobs and likely deepen support in the Midwestern industrial states that Trump snatched from the Democratic column in 2016 to claim the presidency.
Okay, now. Time to snap out of it.
The upbeat view of Trump's potential — as demonstrated by a flag-waving, pep rally-esque State of the Union that slathered praise on a long roster of constituencies and target groups but seemed to avoid (at least by Trump standards) gratuitously offending others — requires willfully ignoring other political and psychological realities.
The political reality is that the vision of Trump and Trumpism on display in the State of the Union is not one voters see more than occasionally. If it were the norm, rather than the exception, it is hard to imagine Republicans losing big in Virginia and Alabama as they did late last year, or that Trump's average approval rating would be 40.1 percent, or that many of the same Republicans who were clapping along in the House chamber would be privately saying they pray Trump is somehow not again on the ballot in 2020.
The psychological reality, as many of the Republicans tied most closely to Trump well know, is that he could not stay in State of the Union mode — or stay away from Twitter tirades — if he tried.
The question to be answered in coming days is whether the State of the Union speech represents a passing rhetorical shift — some speechwriter's notion of the appropriate tone for this occasion — or a more significant shift in strategy.
Trump mentioned the word "together" — Americans coming together, the two parties coming together, and so on — 13 times.
And while some Democrats rolled their eyes at appeals for bipartisanship from a president who insults opponents with such ease, the reality is that party leaders, including Senate Minority Leader Chuck Schumer, have repeatedly signaled their willingness to strike bargains with Trump on immigration and infrastructure.
Yet Schumer can't compromise without worrying about backlash on the left as his party tries to recapture one or both chambers of Congress, and House Speaker Paul Ryan can't negotiate a deal on immigration and the status of "Dreamers" without potentially enraging his right flank.
Tevi Troy, who served in George W. Bush's administration and has written two books on the presidency, said the State of the Union speech not only highlighted a presidency that might have been but what could still be.
Americans may change their minds, and Trump may sometimes change his tone, but if there is one lesson of history it is that presidents do not change the fundamental character that shapes their politics. Pondering a what-if presidency is like speculating on what Richard Nixon's presidency would have been like if he had been less obsessive and paranoid — traits closely linked with the careful plotting and ceaseless ambition that carried him to the White House in the first place.
Or like speculating on Bill Clinton's presidency if he could have tamed his weakness of the flesh — a side of him that always seemed to reside in close proximity with the part of his psyche that hungered for approval and made him a deft politician.
Burgess Everett, Seung Min Kim and Brent Griffiths contributed to this report.


text:
Florida law requires minors who cause a murder, or who intended to kill, to serve a minimum of 40 years and a maximum of life, with a review after 25 years. For Ashe, that's 2022.
Neuroscientific understanding of the adolescent brain greatly influenced the courts' decisions. U.S. Supreme Court cases in 2010 and 2012 held that minors' brains are not yet fully developed, are not as culpable as adults and have a greater capacity for change.
More: Meet the 2 dozen teen killers who could go free
A changed life?
After her arrest, Ashe confessed to shooting Hussain during a robbery attempt at the neighborhood convenience store the Pakastani native owned with his brother, Ozzie Hussain, a realtor who attended Ashe's 1996 trial.
Before Tariq Hussain was fatally shot in the neck, he shot Ashe in the chest with his own gun that he kept under the counter. She was not badly injured.
This week, Ashe's supporters are expected to say she's rehabilitated, court records show. She's backed by specially trained attorneys who claim she's remorseful and ready for a lawful life outside prison. Defense records include a GED she obtained in prison and proof she's attended Bible college and trained as a law clerk.
In March, clinical psychologist Steven Gold reported she's been successfully rehabilitated, despite manifesting chronic post-traumatic stress disorder. Her PTSD, Gold noted, is rooted in witnessing her father fatally shoot her mother.
Ashe's attorneys will present evidence through Tuesday before state prosecutors are expected to argue why Ashe should be resentenced to life in prison.
It could take Sweet several weeks to prepare his ruling and impose Ashe's new sentence.
The hearing resumes on Tuesday.
Last month, Brooks Bellay, 52, was resentenced to life in prison for murdering a 4-year-old girl in 1979 when he was 14.
In June, former Brevard County resident Dennis Creamer was released after 49 years in prison for a murder he committed at age 15.


text:
Weak Wii U Sales Hurt Nintendo Earnings
Posted by Laura Dobbins at 4:57 pm on January 30, 2013
In an admission that the launch of its new Wii U console has been slower than hoped, Nintendo slashed its earnings forecast on Wednesday.The Japanese gaming giant said its revenue for the fiscal year ending March 31 would be about $7.35 billion, down from a previous estimate of $8.883 billion. And instead of an anticipated $219 million in operating income, Nintendo predicted that it will end the year with a $219-million operating loss.
In a statement to investors, the company attributed the changes to "sales performance in the year-end sales season and afterward."
On the weekend before Thanksgiving, Nintendo launched its new Wii U console, a successor device to the Wii, which was a huge success when it launched in 2006 but has slowed significantly. In recent years, sales of the Wii and games for it have dropped from first place to third, behind Microsoft's Xbox 360 and Sony's Playstation 3.
The Wii U features high-definition graphics and online capabilities similar to those competing devices, along with a controller with its own screen, similar to a tablet. Wii U also includes a number of online video options, including interactive television and access to Netflix and Hulu.
The company previously predicted that it would sell 5 million Wii U's by March 31, but now says it will sell 4 million. It also slashed its estimate of the number of Wii U games it will sell during the same period from 24 million to 16 million. Nintendo cut forecasts for its handheld 3DS device as well. It now expects to sell 15 million by March 31, instead of 17.5 million, and 50 million games, instead of 70 million.


text:
Q: How to calculate monthly mean of a time seies data and substract the monthly mean with the values of that month of each year? Dataset is a daily time series of 9 variables on a daily scale
I have extracted the dataset
Data = pd.read_csv('city10.csv', header = None)
Data['Date'] = pd.date_range(start='1/1/1951', periods=len(Data), freq='D')
Data.set_index('Date', inplace=True)

It looks like this
 Date         0    1       2       3  ...       5       6         7        8
1951-01-01  28.361  0.0  131.24  405.39  ...  405.39  38.284  0.187010 -1.23550
1951-01-02  27.874  0.0  113.74  409.56  ...  409.56  49.834  0.066903 -1.44770
           ...  ...     ...     ...  ...     ...     ...       ...      ...
2005-12-16  27.921  0.0  104.99  429.78  ...  429.78  47.529 -1.814300 -5.47720
2005-12-17  27.918  0.0  112.11  425.32  ...  425.32  46.541 -3.314000 -4.02050

After this I found the month mean of the entire dataet i.e.
Data.groupby(Data.index.month).mean()

The result is
              0         1           2  ...          6         7         8
1     29.619322  0.215978  108.621532  ...  45.868395 -0.234236 -1.865947
2     32.404500  0.290335   95.270385  ...  43.443624  0.554149 -2.360776
3     35.131266  0.364438   78.907920  ...  42.065113  1.458203 -2.636451
4     36.631282  0.998401   53.663939  ...  44.239469  3.146849 -2.193416
5     36.823308  2.113330   37.917831  ...  54.287356  5.241153 -0.694375
6     34.444513  2.195926   35.315554  ...  67.840239  6.393643  0.689087
7     32.951826  3.567160   32.466668  ...  82.347247  6.583195  1.183262
8     32.644236  4.053641   36.379228  ...  85.056697  5.102383  0.005426
9     32.205442  4.885259   50.595568  ...  80.335829  2.413891 -0.578568
10    30.448266  5.748111   79.575731  ...  67.582589 -0.769297 -0.614057
11    28.748315  4.350384  100.293532  ...  53.418955 -1.258580 -1.023143
12    28.155611  1.524177  109.510292  ...  51.317731 -0.936495 -1.549105

Now,how to subtract the mean of each month with the respective values of that month of each year.
For e.g.
January month mean for time-series 1951-2005 is 20.25
This mean has to be subtracted from daily values of all January month.
How to do this?

A: Original answer -- difference between data and this month's average
I would use pandas to complete this task, as it makes it easy to aggregate by date.
First, let's make an example data frame and add a month .
In [45]: import pandas as pd

In [46]: import numpy as np

In [47]: start = datetime.datetime(2011, 1, 1)

In [48]: end = datetime.datetime(2012, 1, 1)

In [49]: df = pd.DataFrame({'date':pd.date_range(start, periods=1000, freq='D'), 'x':np.random.normal(5,1,1000)})
In [84]: df = pd.DataFrame({'date':pd.date_range(start, periods=1000, freq='D'), 'x':np.random.normal(5,1,1000)})

In [86]: df['month'] = df.date.dt.month

In [87]: df.head()
Out[87]:
        date         x  month
0 2011-01-01  5.139113      1
1 2011-01-02  3.774586      1
2 2011-01-03  6.095986      1
3 2011-01-04  5.037072      1
4 2011-01-05  5.871760      1
2011-01-05 2011-01-05  6.308203

Now we can create a new data frame that contains the monthly averages using resample and mean.
In [58]: monthly_mean = df.resample('M').mean()

In [59]: monthly_mean.head()
Out[59]:
                   x
date
2011-01-31  4.702853
2011-02-28  5.088545
2011-03-31  5.261777
2011-04-30  4.982984
2011-05-31  4.791729

We can compute the o
Next, we need to join the two data frames together to line up the data with the monthly averages.  To make this easier, I will create a year and month column in each data frame that will be used in the join/merge.
In [60]: df['month'] = df.index.month

In [61]: monthly_mean['month'] = monthly_mean.index.month

In [62]: df['year'] = df.index.year

In [63]: monthly_mean['year'] = monthly_mean.index.year

In [64]: df_joined = pd.merge(df, monthly_mean, how='left', on=('year', 'month'))

In [65]: df_joined.head()
Out[65]:
        date       x_x  month  year       x_y
0 2011-01-01  5.388197      1  2011  4.702853
1 2011-01-02  6.442878      1  2011  4.702853
2 2011-01-03  5.979076      1  2011  4.702853
3 2011-01-04  2.846689      1  2011  4.702853
4 2011-01-05  5.103524      1  2011  4.702853

Finally, the new column can be constructed by subtracting columns.
In [66]: df_joined['month_diff'] = df_joined.x_x - df_joined.x_y

In [67]: df_joined.head()
Out[67]:
        date       x_x  month  year       x_y  month_diff
0 2011-01-01  5.388197      1  2011  4.702853    0.685344
1 2011-01-02  6.442878      1  2011  4.702853    1.740025
2 2011-01-03  5.979076      1  2011  4.702853    1.276223
3 2011-01-04  2.846689      1  2011  4.702853   -1.856164
4 2011-01-05  5.103524      1  2011  4.702853    0.400670

EDIT:  If you want the difference with the historic monthly averages, make the following changes.
Add the month, group by, and aggregate to get the monthly averages.
In [88]: monthly_mean = df.groupby('month').agg('mean')

Now the process proceed as before, join, this time just by 'month', and compute the difference.
In [90]: df_joined = pd.merge(df, monthly_mean, how='left', on='month')

In [91]: df_joined.head()
Out[91]:
        date       x_x  month       x_y
0 2011-01-01  5.139113      1  4.972604
1 2011-01-02  3.774586      1  4.972604
2 2011-01-03  6.095986      1  4.972604
3 2011-01-04  5.037072      1  4.972604
4 2011-01-05  5.871760      1  4.972604

In [92]: df_joined['month_diff'] = df_joined.x_x - df_joined.x_y

In [93]: df_joined.head()
Out[93]:
        date       x_x  month       x_y  month_diff
0 2011-01-01  5.139113      1  4.972604    0.166509
1 2011-01-02  3.774586      1  4.972604   -1.198018
2 2011-01-03  6.095986      1  4.972604    1.123382
3 2011-01-04  5.037072      1  4.972604    0.064468
4 2011-01-05  5.871760      1  4.972604    0.899156

A: Thank you, everyone. I am able to solve the problem.
I hope it is right.
Anomaly_Values = Data.sub(Data.groupby([Data.index.month]).transform('mean'))

Let me know if there is any problem in the solution.

redpajama_set_name: RedPajamaStackExchange


text:
Peel Mining Raises $6m To Advance Southern Nights
November 9, 2017 /in Resources Roadhouse, The Bourse Whisperer /by Wally Graham
THE BOURSE WHISPERER: Peel Mining (ASX: announced a placement of 15 million fully paid ordinary shares at an issue price of 40 cents each, raising $6 million.
Peel Mining announced the placement saying it was priced at an 11.1 per cent discount to the company's last traded price of 45 cents.
The company said the placement had been oversubscribed, which it deemed to reflect support and attention it has been receiving from major shareholders and new sophisticated and institutional investors.
The company will use the proceeds from the placement for exploration activities at its 100 per cent-owned Wagga Tank project, south of Cobar in New South Wales, along with funding pre-development activities at the 50 per cent-owned Mallee Bull polymetallic project, also in the Cobar Basin.
The placement is timely given the further evaluation of the exceptionally high-grade zinc-lead-silver massive sulphide mineralisation recently identified at the Southern Nights prospect at Wagga Tank has become a priority for Peel.
Following completion of the placement, the company will embark on a drilling program of up to 30,000 metres on the tenements.
"We are extremely pleased with the level of interest in the placement from both existing shareholders and new investors as it has ensured we have the funding to properly test Southern Nights and the broader Wagga Tank area," Peel Mining managing director Rob Tyson said in the company's announcement to the Australian Securities Exchange
"Early indications are that the project has the potential to host a major mineralised system."
Email: info@peelmining.com.au
Website: www.peelmining.com.au
https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png 0 0 Wally Graham https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png Wally Graham2017-11-09 13:16:152017-11-11 01:22:53Peel Mining Raises $6m To Advance Southern Nights
Corazon Mining Receives Cobalt Ridge Drill Results
November 9, 2017 /in Resources Roadhouse, The Drill Sergeant /by Wally Graham
THE DRILL SERGEANT: Corazon Mining (ASX: CZN) released new assay results from the current phase of drilling underway at the Cobalt Ridge deposit within the company's Mt Gilmore project in New South Wales.
Results have now been returned for 12 of the 15 holes completed to date, which the company said have continued to deliver highly encouraging results, with 10 holes intersecting notable mineralisation.
Source: Company announcement
Corazon Mining explained results are currently pending for an additional three completed holes which targeted the high- grade Cobalt Ridge Main Lode.
The company anticipates these results to be ready soon, and drilling remains ongoing.
"The current phase of exploration at Mt Gilmore has focused on the Cobalt Ridge prospect area and includes drilling and surface sampling," Corazon Mining said in its ASX announcement.
"Drilling for the program at Cobalt Ridge has to date focused on stepping out and testing new areas of potential mineralisation.
"Results have been extremely encouraging with multiple of sulphidic lodes identified in addition to the Main Cobalt Ridge Lode.
"Drilling at the Main Lode has intersected strong mineralisation in line with Corazon's previous drilling results, and the maiden holes into the Flintoff's target, has supported the presence of cobalt-copper-gold sulphide mineralisation.
"The results to date provide encouragement for the potential extension of the project's target area."
Email: info@corazon.com.au
Website: www.corazon.com.au
https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png 0 0 Wally Graham https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png Wally Graham2017-11-09 11:12:252017-11-11 01:23:22Corazon Mining Receives Cobalt Ridge Drill Results
Sayona Mining Signs Chinese Mou
THE BOURSE WHISPERER: Sayona Mining (ASX: SYA) has signed a non-binding Memorandum of Understanding (MoU) with leading China based battery manufacturer, Huan Changyuan Lico Co Ltd.
Changyuan, a subsidiary of the Fortune 500 Company, China Minmetals Group, is a battery research, development, and production company.
According to Sayona Mining Changyuan produced more than 16,000 tonnes of battery cathode materials in 2016 and is expanding its production capacity to 36,000 tonnes in 2018.
The main products produced by Changyuan include, lithium cobalt oxide and lithium manganese oxide batteries, and ternary composite lithium-ion cathode materials.
Sayona declared the MoU provides and avenue for advancing discussions to facilitate a development alliance exploring marketing, technical and financial opportunities for the company's Authier project located in Quebec, Canada.
Changyuan purchasing up to 100,000 tonnes of spodumene concentrate per annum;
Development partnerships for the value-adding of the concentrates into lithium carbonate and/or lithium hydroxide in either China or Canada; and
Funding and investment opportunities for Sayona and the Authier project.
"The company has been exploring a number of options on how it best realises value from the Authier project," Sayona Mining chief executive officer Corey Nolan said in the company's announcement to the Australian Securities Exchange.
"The alliance with Changyuan represents a timely, exciting path forward as the company moves towards completing its Definitive Feasibility and meeting its objective of producing first concentrates in 2019/2020, and capitalising on the projected high price environment for spodumene concentrates."
Email: info@sayonamining.com.au
Website: www.sayonamining.com.au
https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png 0 0 Wally Graham https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png Wally Graham2017-11-09 10:05:502017-11-11 01:24:06Sayona Mining Signs Chinese Mou
Blackstone Minerals Quadruples Little Gem Target Zone
THE BOURSE WHISPERER: Blackstone Minerals (ASX: BSX) announced the acquisition of extensive land holdings along strike from the company's high-grade Little Gem cobalt-gold project in Canada.
Blackstone Minerals said the acquisition provides the company with a land position over a mineralised belt proven to host very high-grade gold and cobalt.
By doing so, Blackstone has increased its target strike zone from 12 kilometres to over 48 kilometres of strike, taking the Little Gem project tenure to now cover some 335 square kilometres.
Blackstone made the purchase following its first phase of exploration at Little Gem, where the company previously announced confirmation of high-grade cobalt (up to 6.2 per cent) and gold (up to 137 grams per tonne) mineralisation it says is associated with the contact between serpentinized ultramafics and granodiorites.
The company claims this style of mineralisation to be analogous to the world class Bou-Azzer District of Morocco, which has produced over 100,000 tonnes of cobalt metal and tens of tons of gold.
Recent rock chip sample from historical adits at Little Gem returned 6.2 per cent cobalt and 46g/t gold.
Surface channel samples of massive sulphides returned assays up to 0.4m at 5.7 per cent cobalt and 1,574g/t (≈50 oz) gold and 1.8m at 5.1 per cent cobalt and 17.8g/t gold.
Underground adit channel sampling of massive sulphides returned multiple high-grade intersections including 1.8m at 4.4 per cent cobalt and 73g/t gold and 2m at 3.1 per cent cobalt and 76g/t gold.
Blackstone has also claimed discovery of a new prospect – Roxey, located 1.5km along strike from Little Gem hosting surface mineralisation of up to 24g/t gold and 1.9 per cent copper.
"Having only recently secured the acquisition, the company is delighted to have been able to substantially grow Little Gem, into a project with real scale, particularly in a district which hosts such compelling high-grade cobalt and gold mineralisation," Blackstone Minerals managing director Hamish Halliday said in the company's announcement to the Australian Securities Exchange.
"Blackstone looks forward to an aggressive exploration campaign over the coming year."
Email: admin@blackstoneminerals.com.au
Website: www.blackstoneminerals.com.au
https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png 0 0 Wally Graham https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png Wally Graham2017-11-09 10:03:512017-11-11 01:24:33Blackstone Minerals Quadruples Little Gem Target Zone
Kin Mining Extends Cardinia Gold Zones
THE DRILL SERGEANT: Kin Mining (ASX: KIN) declared RC drilling has extended mineralisation at the company's Leonora Gold Project (LGP) in Western Australia.
Kin Mining is conducting the drilling targeting high-grade extensions at two key deposits; Helens and Lewis, both located within the Cardinia Mining Centre.
The company announced the RC drilling has confirmed in excess of 100 metres of high-grade gold mineralisation along strike at both Helens and Helens East deposits.
The mineralisation now extends at depth well below the proposed open pits and the system remains open.
HE17RC128
2 metres at 18.5 grams per tonne gold from 5m, including 1m at 35g/t gold, and 2m at 3.34g/t gold from 88m to End of Hole;
5m at 5g/t gold from 80m, including 1m at 15g/t gold; and
3m at 3.7g/t gold from 72m, including 1m at 8g/t gold.
Assay results from drilling at the Fiona prospect immediately north of HE17RC128 are awaited.
Further RC Drilling is currently underway at the nearby East Lynne deposit, designed to test bonanza results intersected in hole EL17RC003 of 3m at 209g/t gold, from surface, which included o 1m at 551g/t gold.
"Current drilling is designed to test open extensions of mineralised ore shoots at Cardinia," Kin Mining said in its ASZX announcement.
"Our team is extremely pleased to announce that initial results from the current drilling campaign at the Helens Resource area have intersected significant mineralisation that confirms gold mineralisation outside the current pit designs."
Email: info@kinmining.com.au
Website: www.kinmining.com.au
https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png 0 0 Wally Graham https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png Wally Graham2017-11-08 09:30:062017-11-11 01:24:50Kin Mining Extends Cardinia Gold Zones
Alloy Resources Begins RC Drilling At Ophara
THE DRILL SERGEANT: Alloy Resources (ASX: AYR), with all approvals in place, has commenced RC drilling at the company's Ophara project located 50 kilometres west of Broken Hill in New South Wales.
Alloy Resources explained the drilling is targeting discrete bedrock EM anomalies of moderate to strong conductance defined by the recent helicopter-borne VTEM survey.
Alloy is testing its concept that the conductors are likely to represent moderate to shallowly dipping 'stratabound' sulphide mineralisation, which it claims is similar to the geometry and geology of mineralisation observed by drilling at the Great Goulburn prospect and also at the very large Thackaringa cobalt deposits which contain 50,000 tonnes of cobalt in a 54.9 million tonne Mineral Resource.
"The conductance of the targets is much greater than the Thackaringa deposits and the Great Gouburn prospect and drilling is required to explain the source of the targets," Alloy Resources said in its ASX announcement.
"Five priority conductor targets have been selected for initial drill testing by nine RC drill holes.
"As depth of weathering in the area is generally 20 to 60 metres, drilling will aim to intersect the conductive body at approximately 100 metres depth."
Email: info@alloyres.com
Website: www.alloyres.com
https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png 0 0 Wally Graham https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png Wally Graham2017-11-08 09:00:102017-11-11 01:25:07Alloy Resources Begins RC Drilling At Ophara
Sayona Mining Lodges Authier Drilling Permits
THE DRILL SERGEANT: Sayona Mining (ASX: SYA) announced the lodgement of drilling permits for a Phase 3 resource expansion drilling program to be undertaken at the company's Authier lithium project in Quebec, Canada.
Sayona Mining indicated it is planning a diamond drilling program of up to 3,000 metres commencing in early November.
The objectives of the drilling program, include:
Collecting up to 5 tonnes of drill core for a pilot metallurgical testing program. The pilot program data will be used for inputs into the process plant design in the Definitive Feasibility Study (DFS);
Infill definition drilling within the main resource zone where the mineralisation is not well defined and is currently treated as waste. This has the potential to reduce the waste to ore ratio;
Potential expansion of the northern pegmatite zone which intersected 7 metres at 1.36 per cent lithium oxide from 15 metres in the last drilling program; and
Completion of geotechnical drilling to enable finalisation of the pit wall slopes for the DFS.
"The drilling and pilot metallurgy programs will be the last major work programs before completion of the DFS in early 2018," Sayona Mining said in its ASX announcement.
https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png 0 0 Wally Graham https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png Wally Graham2017-11-08 08:58:392017-11-11 01:25:27Sayona Mining Lodges Authier Drilling Permits
Mincor Resources Updates Widgiemooltha Gold Resources
THE DRILL SERGEANT: Mincor Resources (ASX: MCR) updated the gold Mineral Resources at the company's Widgiemooltha gold project (WGP) in Western Australia.
Mincor Resources said the update was part of the progress the company is making with its plans to bring the 100 per cent-owned Widgiemooltha gold project into production in early 2018.
The company has received key regulatory approvals from the Department of Mines, Industry Regulation and Safety (DMIRS) allowing the commencement of mining operations at the WGP and the Mineral Resources have been updated to incorporate the results from two drilling programs.
Gold Mineral Resources at Widgiemooltha now stand at 267,100 ounces of gold, an increase of 29,070 ounces at a discovery cost of $9.60 per ounce.
Mincor's global Gold Resources inventory sits at approximately 328,660 ounces of gold.
"The updated Gold Mineral Resources show how the Widgiemooltha project rewards drilling, with a respectable discovery cost of less than $10 per ounce achieved," Mincor Resources managing director Peter Muccilli said in the company's announcement to the Australian Securities Exchange.
"The Flinders West discovery could underpin an improved mining schedule with enhanced start-up economics. Importantly, the mineralisation trends around Flinders remain open.
"Results from the latest drilling program will give further insight into this potential.
"On the nickel front, we have also been very encouraged with the recent rises in the nickel price and we are closely monitoring the fundamentals behind the growing positive sentiment for the commodity.
"Mincor has a high-quality nickel sulphide asset base in a Tier-1 nickel province.
"Our pipeline for growth is quite exceptional for a junior company."
Website: www.mincor.com.au
https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png 0 0 Wally Graham https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png Wally Graham2017-11-07 10:56:132017-11-11 01:26:04Mincor Resources Updates Widgiemooltha Gold Resources
Metalicity Conducting Lithium Review
THE DRILL SERGEANT: Metalicity (ASX: MCT) is conducting a geological review of its four lithium projects in Western Australia.
Metalicity has appointed CSA Global to conduct the review charged with the aim of generating new targets and prioritising existing targets for future drilling.
Metalicity has put together a sizeable landholding in Australia's two key lithium producing districts, the Greenbushes district and the Wodgina-Pilgangoora district.
Previous targeting work conducted by Metalicity has focussed on mapping of pegmatites at its Pilgangoora North project and the Stannum prospect within its Wodgina South project.
This area represents approximately 20 per cent of the company's lithium-prospective land package and it believes there to be potential to generate new targets for drilling within these two hard rock lithium producing regions.
From recent field work at the Pilgangoora North project, Metalicity confirmed that pegmatites interpreted from satellite imagery, are present; some of which host anomalous lithium values.
An initial four-hole 600m reverse circulation percussion (RCP) drill program was undertaken aimed at testing pegmatites in the southern portion of the project area the company had interpreted to be extensions of the Lynas Find deposit pegmatite system.
Although this was a very limited drill program, pegmatites were intersected in every hole.
No significant levels of lithium were encountered in this program, however Metalicity said it had been encouraged by the continuity and thickness of the pegmatites, which it determined to be comparable to the Pilgangoora deposits to the south.
"The initial four-hole drill program at Pilgangoora North targeted the most accessible pegmatites which represent a small fraction of the mapped or interpreted pegmatites that have been identified at the project, some of which are confirmed from rock chip sampling as lithium bearing," Metalicity managing director Matt Gauci said in the company's announcement to the Australian Securities Exchange.
"Given the size of the company's lithium portfolio and interest from end users in the sector, we believe this is a right time to appoint lithium experts from CSA Global to conduct a targeting review of our entire lithium portfolio and determine the best strategy to progress these assets."
Website: www.metalicity.com.au
https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png 0 0 Wally Graham https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png Wally Graham2017-11-07 09:52:162017-11-11 01:26:16Metalicity Conducting Lithium Review
Azure Completes Inital Mexican Drill Program
THE DRILL SERGEANT: Azure Minerals (ASX: AZS) completed the first drilling program on the company's 100 per cent-owned Sara Alicia gold-cobalt project, located in the northern Mexican state of Sonora.
Azure Minerals said the reconnaissance drilling was designed to test a zone of high-grade gold and cobalt mineralisation, which was historically exploited by small-scale underground mining in the 1930s.
The area was further outlined by Azure's sampling of surface outcrop and underground exposures which returned high-grades up to maximum values of 39 grams per tonne gold and 7 per cent cobalt.
The company explained the initial drilling program comprised six holes of diamond core designed to test around the old mine workings and beneath the outcropping gold and cobalt mineralisation to determine potential grade, width and orientation of the mineralised zone.
"Core logging identified carbonate rocks intruded by a granodiorite porphyry, causing strong alteration and mineralising reactions in the limestones, forming a skarn horizon enriched with garnets, magnetite and sulphides," Azure Minerals said in its ASX announcement.
"Each drill hole was sampled in its entirety and dispatched to the Bureau Veritas laboratories in Hermosillo, Mexico, and Vancouver, Canada for precious metal and base metal analyses respectively.
"Due to a very busy northern hemisphere field season, the turnaround time for sample analysis in Vancouver is currently between four and six weeks.
"Assay results for the Sara Alicia holes are expected between late November and early December."
Website: www.azureminerals.com.au
https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png 0 0 Wally Graham https://resourcesroadhouse.com.au/wp-content/uploads/2017/06/logo-finalized4.png Wally Graham2017-11-07 08:50:202017-11-11 01:26:37Azure Completes Inital Mexican Drill Program
Page 120 of 126«‹118119120121122›»


GlassX Pure Liquid Glass is designed to be the only screen protection you will ever need. GlassX is the only true liquid glass protection on the market. Our liquid glass consists of almost pure silicon dioxide; a silica that is the normal compound found in glass extracted from quartz sand.


Business tends to slow down during the summer months as executives take vacation and the wait for fall programs and projects begins. It is important to stay motivated to combat negative effects on workplace morale and productivity. The slow period can be put to good use. While everyone is in relaxation mode, you can work behind the scenes to push your business forward.
This is the ideal time to make schedule adjustments and see what works best for you. Try going to the office earlier so you can leave earlier. If you work best later in the day, go in a little later. If you could use a day off, put in a few extra hours early in the week so you can have Friday to yourself. Schedule your meetings and project-based tasks for your most productive hours. Shift things around as you see fit. As a small business owner, you can give yourself a certain degree of flexibility.
Sometimes running a small business can feel like a one-person show. While things are a bit slower, test out your options. Delegate tasks to your employees. Try outsourcing some of your work to save time. Consider hiring virtual staff for the things you never seem to get around to doing. Shorten your to-do list by making use of resources available to you. This practice will reward you with more free time or the ability to engage in more profitable activities.
Technology gives you the freedom to work from anywhere. Take your tablet or smartphone to a nearby park. The change of scenery will boost your morale, and may even help you tap into your own creativity. Remember that you don't have to be stuck in the office, staring at the same walls. Working from other locations may be just what you need to increase productivity.
4. Focus on one to-do item.
Sometimes small business owners get bogged down in a never-ending list of tasks. One item can often get pushed further and further down the list of things to do. Choose that items and set aside time to focus on it. The summer slowdown provides a great opportunity to take on the looming tasks of updating the company website, creating a how-to guide, or taking a certification course. Take advantage of the downtime by making it productive.
You may not want to take two weeks off, but a few long weekends may be just what you need. Remember that relaxation is a necessity. It can be tempting to overwork when you run a small business, but it's better for you and the business if you enjoy some time off. It's great for your health, creativity, and morale. Disconnect from your business and leave it in someone else's capable hands so you time off is not spent worrying about what is going on at the office.
The slow summer period often seems like a bad thing, but you can use it to your advantage. Make it a time for experimentation, growth, and finding balance.


text:
Q: Custom User attributes values not stored in Azure AD B2C I have created some custom attributes in Azure AD B2C. When i signup usign userflow , i am noticing that the custom attribute values are not stored in Active directory. I am checking the active directory in Users -> user profile.
Only the built in values are available. Custom attributes are not even mentioned in it. Can anyone help me with this?
User Option I opted to check

A: Only basic user attributes appear in the Azure Portal. Find the full attribute set using MS Graph API beta /users endpoint.
https://learn.microsoft.com/en-us/graph/api/user-list?view=graph-rest-beta&tabs=http


text:
namespace ThesesSystem.Web.ViewModels.Messages
{
    using System;
    using ThesesSystem.Models;
    using ThesesSystem.Web.Infrastructure.Mapping;

    public class MessageViewModel : IMapFrom<Message>, IHaveCustomMappings
    {
        public string Text { get; set; }

        public DateTime CreatedOn { get; set; }

        public bool IsSeen { get; set; }

        public string FromUserId { get; set; }

        public string ToUserId { get; set; }

        public string ToUserName { get; set; }

        public string FromUserName { get; set; }

        public void CreateMappings(AutoMapper.IConfiguration configuration)
        {
            configuration.CreateMap<ThesesSystem.Models.Message, MessageViewModel>()
             .ForMember(u => u.FromUserName, opt => opt.MapFrom(u => u.FromUser.FirstName + " " + u.FromUser.LastName))
             .ForMember(u => u.ToUserName, opt => opt.MapFrom(u => u.ToUser.FirstName + " " + u.ToUser.LastName));
        }
    }
}


text:
Varuso, Anthony
Early Life Becoming a PT-Boat Sailor Combat Duty on a PT boat Attacks on Japanese Shipping and Sinking an Enemy Submarine PT Boat Patrols in the South Pacific Returning Home and Combat Memories Reflections
Prewar life\"" Reaction to Pearl Harbor Feelings toward enemies \"Enlistment \"Personal/family relationships
Military training and instruction\""" Military service stateside Personal/family relationships War production Weather conditions Performance of equipment Friendships \"Overseas deployment Clothing and equipment Performance of troops \""Interactions with superiors
Interactions with local populations\"" Race relations Performance of equipment Performance of troops Combat decisions Terrain Experiencing enemy fire Experience with death Dog fights Aerial bombardment Experiencing combat Air warfare Survival at sea \"Life in the Field/aboard ship \"Feelings toward enemies
Submarine warfare\""",Combat decisions" Experiencing combat War production Feelings toward enemies Performance of equipment \""Performance of troops
Survival at sea\"" Interactions with superiors Combat decisions Experiencing combat Experiencing enemy fire \"Returning home Experience with death \"Friendships
Liberty and Leave\""" Postwar career Postwar life Returning home Military service stateside Combat decisions Food/mess Interactions with Allied troops Experience with death Experiencing friendly fire Reflections Service discharge Foxholes Experiencing enemy fire Air warfare Aerial bombardment \"USO activities Personal/family relationships \"VJ-Day" Bailing out/loss of plane \"Feelings toward enemies
Reflections\"" Military decorations Postwar career \"Postwar life Returning home \"Games and entertainment Education Tropical diseases \"Veteran's Affairs
Becoming a PT-Boat Sailor
Combat Duty on a PT boat
Attacks on Japanese Shipping and Sinking an Enemy Submarine
PT Boat Patrols in the South Pacific
Returning Home and Combat Memories
Anthony Varuso grew up in New Orleans, Louisiana where his father had a food store. As a child, Varuso delivered groceries to the home of his future wife. Following their marriage, they were together for 65 years. His wife passed on about a year prior to the interview. Varuso worked for Quaglino Tobacco Company for 37 years after the war. With his work, he became familiar with the streets of New Orleans. He enjoyed his job. He was in the service for slightly over three years following his enlistment. He initially joined the Marines, but, after talking with his mailman, he changed to the Navy. Varuso was angry at the Japs [Annotator's Note: a period derogatory term used to refer to Japanese] for bombing Pearl Harbor. Varuso and his brother joined the service together in January 1942 as a result of his negative feelings toward the Japanese.
Anthony Varuso left New Orleans for his basic training at Naval Station Great Lakes [Annotator's Note: near North Chicago, Illinois]. It was a warm day when he departed home, but snow was on the ground when he arrived. Following issuance of uniforms, the recruits were made to march in the snow. Their shoes were muddy but the drill instructor told them to go into their barracks without cleaning the mud off the footwear. Then, the instructor told them to clean the mud from their barracks. It was a lesson in following orders. Varuso selected PT boats [Annotator's Note: patrol torpedo boats] to serve on because of his familiarity with them in New Orleans. PT boats were built there by Higgins Industries. Varuso's brother, Joe, had previously worked on PTs prior to his service. Joe rode the boats in Lake Pontchartrain to prove their seaworthiness. Varuso was assigned to an ELCO boat. It, like the Higgins built PT, was a good boat. The ELCO had ten men and two officers aboard. Varuso volunteered for PT boats even though a friend cautioned him that it was dangerous duty. Varuso was Gunner's Mate on the boat. He was in charge of all the weapons. The armament included .50 caliber machine guns, 20mm cannon, torpedoes and a smoke screen generator. His PT boat training was on the Great Lakes. Afterward, he was deployed to New Guinea.
Anthony Varuso thought highly of the natives on the island of New Guinea. Even though their clothing was minimal, they were good people. They helped the Americans in many ways. Varuso chastised a buddy who had showed anger toward them. The natives did far more good than bad while helping the Americans. The PT boat [Annotator's Note: patrol torpedo boat] that Varuso manned [Annotator's Note: PT-144, Motor Torpedo Boat Squadron 8 (MTBRon 8)] often did patrol duty along the coastline. The enemy had a difficult time hitting the small vessel because of its speed and the masking smoke that was provided by its smoke screen generator. One sailor, however, was killed right next to Varuso. That showed Varuso how our freedom had to be earned. Enemy aircraft attacked American ships in the harbor until friendly planes came and shot some of the enemy down. Souvenirs were collected from one of the downed planes. Varuso had a pair of Japanese ears handed to him. It was terrible, but the young sailors wanted to whip the bastards. [Annotator's Note: Varuso's words, he laughs]. Patrols usually consisted of six boats working together. They followed each other in shallow water in order not to generate excessive wakes. When his boat ran aground, it had to be destroyed with Varuso's souvenirs left aboard. The Niagara [Annotator's Note: USS Niagara (AGP-1)] was the tender for the PTs. The enemy bombed it and cut the ship in half. The six PTs picked up the 120 crewmen from the tender. The Japs [Annotator's Note: a period derogatory term used to refer to Japanese] were attempting to bomb any Allied ships or boats they could locate.
Anthony Varuso and the PT boats [Annotator's Note: patrol torpedo boats] in his squadron [Annotator's Note: Motor Torpedo Boat Squadron 8 (MTBRon 8)] made attack runs on Japanese shipping. Some were successful and others not. A Japanese submarine was sunk by Varuso's boat [Annotator's Note: PT-144]. It fired a torpedo on the enemy boat to destroy it. There were four torpedoes on the PT boat. Each torpedo had 900 pounds of TNT in the warhead. It was quite an accomplishment for Varuso to fire the torpedo and hit the Japanese submarine. His boat was fast. It departed the scene of the submarine's destruction at about 40 miles an hour. That was with all the armament loaded aboard. Without the weaponry, the boat could make even faster speed as was proven in tests on Lake Pontchartrain. [Annotator's Note: Although assigned to an ELCO boat, Varuso's brother Joe had tested Higgins Industry built PT boats on Lake Pontchartrain near New Orleans, Louisiana before he entered the service.]
Anthony Varuso and his squadron of PT boats [Annotator's Note: Motor Torpedo Boat Squadron 8 (MTBRon 8)] tied their boats up along the Marobi River [Annotator's Note: unsure of spelling] in New Guinea. He went on many patrols during his service. He moved to different places in New Guinea. He also passed through the Solomon Islands but did not patrol them. The worst situation he encountered was the death of his buddy right next to him. It could have been Varuso if the round had shifted a few inches. The ten men and two officers aboard the PT [Annotator's Note: PT-144] were just like brothers. Varuso enjoyed his time with them. The officers were nice to the crew. Varuso knew Kennedy [Annotator's Note: then Ensign John F. Kennedy was skipper of PT-109]. He was a nice guy and friendly with everyone. He saved his crewmen when his PT was sunk. Kennedy would go on to be president. He was assassinated while in a motorcade with his wife. Every PT boat had a crew which seemed bonded together. The bunks they slept in were adjacent to each other in the boat. Sometimes the bunk would get loose and the sleeper would fall out. [Annotator's Note: Varuso laughs.] There was enough berthing for the full crew. They had to observe dark-out conditions while on patrol. The PT fired on a submarine as well as against enemy troops ashore. [Annotator's Note: Varuso converses with an inaudible voice from someone other than the interviewer off-screen.]
Anthony Varuso served in the Navy for three years and eight months. He had rotated back to the United States by the time the war ended. He was stationed at a base on Lake Pontchartrain. He observed a telephone operator there and learned to operate the switchboard. That enabled him to return home every night after work. Transition back to stateside life was not difficult because Varuso was well supplied in the Pacific and had not experienced many hardships with food or ammunition. He experienced friendly support from troops he met. One pilot was going to give Varuso and ride in his plane, but he was shot down beforehand. All branches of the service were friendly in the Pacific. Varuso managed on one occasion to barter a couple of his sandwiches for liberty from two Marines. [Annotator's Note: Varuso laughs.] Varuso also met fine people when he went to Australia. Varuso saw lights on the beach during one patrol and thought it to be the enemy. When he fired on them, he discovered differently. It was another PT boat crew that shouted that he should cease fire. Varuso's time in the service taught him to obey the orders from his officers. They were good men. He was happy that the Japanese had been defeated. He was discharged soon after the war. Life in the service was good. Our nation's military is good. [Annotator's Note: Varuso's son talks off-screen.] The gunners on Varuso's boat [Annotator's Note: PT-144] shot down some enemy aircraft. During an enemy strafing run, Varuso could not make it to a foxhole so he successfully camouflaged himself with a sack pulled over his body. After so many missions, the crew received liberty. They met USO [Annotator's Note: United Service Organizations] ladies who were nice to them. Varuso spent time on Tulagi and Guadalcanal.
Anthony Varuso has visited The National WWII Museum and finds it a wonderful place to educate the populace about the Second World War. Varuso knows that our freedom did not come free. Varuso's squadron [Annotator's Note: Motor Torpedo Boat Squadron 8 (MTBRon 8)] received the Presidential Unit Citation. Varuso receives a pension from the Navy for the malaria he contracted while in service. He was assigned to Ron 8, PT-144. When it sank, he went to PT-147 and MTBRon 12. People he met were friendly. Some officers had fun racing their boats. The boats were painted for camouflage to hide them from the enemy. Varuso fished in a dingy with hand grenades. The cook discarded the poisonous fish and cooked the others. After the war, Varuso became a commander of an American Legion post. He was also president of a Lion's Club.
Copyright © 2015 National World War II Museum. All rights reserved.
All oral histories featured on this site are available to license. The videos will be delivered via mail as Hi Definition video on DVD/DVDs or via file transfer. You may receive the oral history in its entirety but will be free to use only the specific clips that you requested. Please contact the Museum at digitalcollections@nationalww2museum.org if you are interested in licensing this content. Please allow up to four weeks for file delivery or delivery of the DVD to your postal address.


Style: A gastro pub that puts a twist on bar staples and features the best beer menu in the region.
Don't Miss: The Pour House nachos ($7.99) aren't really nachos. They're thick potato chips topped with an avocado relish and tomato salsa. The combination creates a salty-sweet flavor instead of just the fat and salt you'll usually find in bar nachos—and the chips don't get soggy. We like the grilled three cheese sandwich ($6.49), which tops fontina, Jarlsberg, and havarti cheeses with caramelized onions to created a textured mix of flavors instead of a gooey cheese mess. The Southwest chicken sandwich ($7.99) has an added kick of salsa and Vermont white cheddar, though the salsa, like on the nachos, is sweet instead of salty to give an old classic a new twist. If you're an oyster fan, check out the raw bar—we're a fan of the Cape May salts (market price).
Heads Up: While the dinner crowd is subdued, the Pour House can become rambunctious after 9 pm. They often have live music and a bar crowd that follows.
The Scoop: The Pour House, formerly known as Dock Hoppers, is the latest stab at a viable bar/restaurant on the stretch of Haddon Avenue between dry Haddonfield and Collingswood. The biggest change from Dock Hoppers is that they hope to become a craft-beer bar—they have nearly 100 kinds—which the area sorely needs.


text:
From Observer to Activist - How Photographing Raptors Changed My Path
Chance Encounters
When I went to a presentation on wildlife photography by Tom Mangelsen, at the invitation of a friend, I had no idea how it would change me, but if anything is testament to how photography can move a person, my experience following that class is.
The short story is this - I had never heard of Tom Mangelsen. I was a photographer, but wildlife photography wasn't even on my radar.
I had always supported nonprofits that work to protect wildlife, had dreamed of helping big cats in Africa when I was a kid. (I had even written to the "Born Free" folks, George and Joy Adamson, about helping them. I remember the disappointment I felt as a 12-year-old when they wrote back and suggested I donate money.) So, I had a burning interest in wildlife conservation early on, but like many childhood dreams, I had long since set it aside.
So I attended Tom Mangelsen's Creative Live class in person, with my friend Kamriell Welty. At the end of his presentation he casually mentioned that he was one of the instructors in an upcoming wildlife photography workshop being offered by Photography at The Summit in Jackson Hole, WY. Kami and I discussed it and decided to go. When the time came, she was unable to go, so I went alone.
That was a few years ago, and I enjoyed it so much I returned one more time to repeat the workshop. Classes are taught by some very impressive National Geographic and conservation photographers, including Michael Forsberg, who has used his photography to raise awareness about the environmental threats to the great plains. As much as anyone, Michael got me thinking about my own backyard when he gave a compelling presentation about the sandhill cranes of the Platte River in Nebraska. His clear love for the place where he grew up lent an authenticity to his presentation that was deeply moving. Seeing it through his eyes forever changed how I think about the great plains.
After that first workshop, I set out to learn more about our local wildlife - particularly the birds. I took a class from Bud Anderson, who is our local raptor expert, and learned that we have an extraordinary variety of raptors in our area each winter. Through his deep knowledge and his own passion for birds, Bud has moved many a person to become involved in raptor research and observation. I have also repeated that class.
I started taking more bird photos. Short Eared OwlClose encounters with raptors, such as this short-eared owl, gave me new appreciation for the challenges they face.
Northern Harrier HuntingThis male northern harrier, also known as a gray ghost due to its gray color, will spend hours hovering low over open fields to hunt, and then often must fight other raptors to keep its meal.
Northern Hawk Owl HuntingA northern hawk owl bolts from its perch while keeping eyes on its prey.
I got to know a few amazing wildlife/bird photographers. I took more photos.
I started getting attached to the birds I was photographing and worrying about their survival. It's hard to be a detached observer when one is privy to intimate moments in a creature's life.
I learned that one of the greatest threats to raptors is the widespread use of anticoagulant rodenticides, which impact not only raptors but other wildlife that feed on rodents - even cougars - and kills them. It's a hideous way to die - slowly bleeding internally. I learned this because one of my friends lost an entire family of barn owls due to eating poisoned rodents.
Everybody Loves Owls
Since I started taking photos, friends who are lifelong birders have begun reaching out to me - sharing locations of birds they would like to see photographed. There's an amazing network of people who share a passion for birds and I am grateful to have so many patient teachers. I am still not good at identifying birds. I have so much to learn.
This year I was invited to photograph a great horned owl nest in a friend's yard. When I first visited the mom was just sitting on the nest. Within a few weeks there were little fuzzballs poking their heads up. I went by every few days to watch and photograph. At some point, after they had hatched, the father stopped appearing, which left all the feeding to mom.
There were three owlets. One fell out of the tree, as is common, and hopped away. We never saw it return. We don't know what happened to that owlet, but the nest was in a neighborhood that borders rural housing and fields - places where people often use rodenticides.
Great Horned Owl watching her owletsI watched and photographed these great horned owlets for a few weeks before a third baby popped its head up.
I shared photos of the owlets and their story as it unfolded. People seem to universally love owls. My baby owlets had fans-people who wanted updates. It occurred to me if I could share what I have learned about the way humans endanger their lives, maybe, just maybe I could make a small difference.
And then there were threeHow could anyone resist these muppet faces? I became emotionally attached to these owlets as I watched them grow. That attachment is partially responsible for my wanting to find a path toward ending the use of anticoagulant rodenticides to kill their prey, as it will also kill them.
Great Horned Owlets Starting to BranchWatching these owlets grow up and branch has been a joy and a wonder. One fell from the tree and was never seen again. The remaining two are now flying and are seen occasionally in the same area.
Missing Piece of the Puzzle
I am a purpose-driven person. I really want to contribute to the greater good. I always have.
When I read that California had recently passed a bill banning anticoagulant rodenticides this year (it's not yet a law), I started asking around to find out if anyone was working on this in Washington state. What I learned is that a lot of people are gathering data - doing necropsies and collecting information on how many of our raptors are killed by rodenticides, or have them in their systems. But no one has made a serious effort to get the law changed.
What could I do? I'm just one person. My friend Melissa Groo, who gently and persistently uses her photography to advocate for wildlife, directed me to the people behind the California bill - Raptors Are The Solution a.k.a "R.A.T.S.". When I talked to Lisa Owens-Viani, the co-founder of R.A.T.S., she told me they had been wanting to open a Washington chapter. And that's where we are today.
I am wading in to unfamiliar territory with my eyes wide open. I believe with enough support, we can make a change, but I am not naive enough to think that I can do it alone, or that it will happen overnight. I am not a National Geographic nature photographer. I am a writer and former magazine editor, but I have never written about wildlife. I don't have a biology degree. I'm just a person who loves where she lives and would like to protect our existing wildlife.
I am reaching out to all the people I know who have been working for so long to help raptors in our state survive. Through the main organization in Berkeley, CA, I have access to excellent educational materials to distribute. I know there is a long road ahead, but I'm willing to follow it. If I can stop one person from using anticoagulant rodenticides, that person may stop another.
I have created a Facebook page for people to connect with us, so please go like our page. I will post updates to the page as the story unfolds. For now, I am just starting to work on awareness and education. It takes a long time to create change, and I know that. But I think people fall into two camps - those who wring their hands in frustration, and those who step up and try to do something. I land in the second camp. I hope you will join me.
Keywords: banning rodenticides in Washington, eagles, falcons, owls, R.A.T.S., raptors, rodenticide, saving wildlife, threats to raptors, wildlife threats
A Photographer's Guide to the Skagit Valley and Surrounds From Observer to Activist - How Photographing Raptors Changed My Path Good Bye 2018! Costa Rica - A Photographer's First Visit The Joys and Perils of Bird Photography Eclipse 2017 - Chasing Totality The Summit Nature Workshop Experience Do Photos Limit Memories? Becoming a Master Gardener Quick Tips - Take Better Portraits
Crowell Photography tulips Skagit Valley flowers calendar owls Photography fields wheat photo tips
January (8) February (8) (9) March (9) (3) April (3) (3) May (3) June (1) July (1) August September (1) October (1) November December
January (2) February (2) March (2) April (2) May (2) June (2) July August (1) September (1) October (2) November (2) December
January February (1) March (1) April May June July August (1) September (1) October (1) November (1) (3) December (3)
(3) January (3) February (1) March (1) April May June July (1) August (1) September (1) October (1) November December
©Nancy K. Crowell, all rights reserved, Crowell Photography, LLC


text:
Люксембург принимал участие в Летних Олимпийских играх 2004 года в Афинах (Греция) в двадцать первый раз за свою историю, но не завоевал ни одной медали. Сборная страны состояла из 10 спортсменов (6 мужчин, 4 женщины).

Состав и результаты

Велоспорт

Шоссе
Мужчины

Лёгкая атлетика

Мужчины
 Беговые дисциплины

Плавание

Мужчины

Женщины

Стрельба из лука

Мужчины

Теннис

Женщины

Триатлон

Женщины

Ссылки
 База МОК
 Официальные олимпийские отчёты
 www.sports-reference.com
 Итоговые результаты сборной Люксемург

2004
Страны на летних Олимпийских играх 2004 года

redpajama_set_name: RedPajamaWikipedia


Dasha Ziborova is a graphic novelist, picture book illustrator and a muralist. On her list are five children's picture books including the award-winning Crispin the Terrible published by Callaway Editions, and In English, of Course and The Numbers Dance by Gingerbread House.
Awards include Children's Choice from the International Reading Association, finalist for ForeWord magazine's Book of the Year, and ABA Book Sense's Pick of the Lists.
Besides writing and illustrating books, Dasha has also designed and painted a series of large-scale murals for The Peninsula Hotel's New York and Chicago locations; Plaza Hotel, NY; designs for reliefs for the Waldorf Astoria, NY and designs for over 30 murals for Atlantic Center in Brooklyn.
Dasha Ziborova is represented by Literary Counsel.
Real Time In Ink is a serie of graphic diary entries which cover a broad range of topics from NYC life, people, parenting, art, music, cats, food, travel, to occasional politics and scary crazy Russians.