text:
A New World Order: Liverpool v. Stoke Preview and Thread
By SamFels Feb 2, 2011, 6:16pm GMT
Share All sharing options for: A New World Order: Liverpool v. Stoke Preview and Thread
Well, whatever it's going to be, it starts today. I said that when Dalglish was hired, and it feels appropriate now too. The new look Reds, though really they'll only be without a player we're actually quite accustomed to them being without. The big news is Luis Suarez has been registered and cleared and can make his debut. However, I doubt he's in the first 11 as he hasn't played two months, small matter of being suspended for biting a player, as you do. But then again, he's fresh, right? Andy Carroll will have to wait, he still has a thigh strain and it could be weeks before we see him.
So who gets the first call up top? The easy choice is David Ngog, but I think I'd rather see Kuyt return to his former role. Yes, his touch is akin to that of a rapist at the moment, and he has no pace to open up space for others. But he can finish if presented the chance, and he'll work hard, two things we can't always count on from Ngog. Also, Kuyt's hold-up play is simply better than Ngog's at the moment. Dalglish hasn't yet appeared to be very big on the Frenchman, so the guess here is the Albino goes up top.
What other changes could that mean? Perhaps Pool trot out the 4-3-3 formation we assume is coming, with Maxi and someone to be named later flanking Kuyt, possibly Suarez. Meireles, Lucas, and Gerrard will form an axis of destruction behind that. Jamie Carragher could return today too, and he'd partner Daniel Agger. I'd love to see Fabio Aurelio return to the left back spot, but considering the threat of Stoke maybe Dalglish just goes with all the tallest defenders he has.
As for Stoke, they could be fielding an entire second string defense with Ryan Showcross suspended, Danny Higginbotham injured, as well as Andy Wilkinson. Over the window, Stoke sold two of their players who could actually, y'know, play football in Eidur Gudjohnsson and Tuncay and brought in another battering ram in John Carew. Combined with Kenwye Jones and Ricardo Fuller (who I still think sucks despite scoring against us last time), couth would not be a word associated with Stoke's tactics. Get fouled, get a throw, and dump it into the mixer is the detailed, intricate plan Tony Pulis has weaved. That said, they're only two points behind us with a game in hand, so a win today is vital to create separation from another member of the midtable blob. This will be Stoke's fourth straight away date including the Cup, and they've won two of the previous three, last out beating Wolves 1-0.
It won't be pretty, or probably any fun. A performance like we saw against Fulham would get us beat. One we saw against Wolves would get us a win. It's obvious which is preferred.


text:
#ifndef AERON_IMAGE_H
#define AERON_IMAGE_H

#include <concurrent/AtomicBuffer.h>
#include <concurrent/logbuffer/LogBufferDescriptor.h>
#include <concurrent/logbuffer/FrameDescriptor.h>
#include <concurrent/logbuffer/Header.h>
#include <concurrent/logbuffer/TermReader.h>
#include <concurrent/logbuffer/TermBlockScanner.h>
#include <concurrent/status/UnsafeBufferPosition.h>
#include <algorithm>
#include <array>
#include <atomic>
#include <cassert>
#include "LogBuffers.h"

namespace aeron {

using namespace aeron::concurrent;
using namespace aeron::concurrent::logbuffer;
using namespace aeron::concurrent::status;

static UnsafeBufferPosition NULL_UNSAFE_BUFFER_POSITION;

enum class ControlledPollAction : int
{
    /**
     * Abort the current polling operation and do not advance the position for this fragment.
     */
    ABORT = 1,

    /**
     * Break from the current polling operation and commit the position as of the end of the current fragment
     * being handled.
     */
    BREAK,

    /**
     * Continue processing but commit the position as of the end of the current fragment so that
     * flow control is applied to this point.
     */
    COMMIT,

    /**
     * Continue processing taking the same approach as the in fragment_handler_t.
     */
    CONTINUE
};

/**
 * Callback for handling fragments of data being read from a log.
 *
 * @param buffer containing the data.
 * @param offset at which the data begins.
 * @param length of the data in bytes.
 * @param header representing the meta data for the data.
 * @return The action to be taken with regard to the stream position after the callback.
 */
typedef std::function<ControlledPollAction(
    concurrent::AtomicBuffer &buffer,
    util::index_t offset,
    util::index_t length,
    Header &header)> controlled_poll_fragment_handler_t;

/**
 * Represents a replicated publication {@link Image} from a publisher to a {@link Subscription}.
 * Each {@link Image} identifies a source publisher by session id.
 *
 * Is an overlay on the LogBuffers and Position. So, can be effectively copied and moved.
 */
class Image
{
public:
    typedef Image this_t;

    Image() :
        m_header(0, 0, this),
        m_subscriberPosition(NULL_UNSAFE_BUFFER_POSITION)
    {
    }

    /**
     * Construct a new image over a log to represent a stream of messages from a {@link Publication}.
     *
     * @param sessionId                  of the stream of messages.
     * @param initialPosition            at which the subscriber is joining the stream.
     * @param subscriberPosition         for indicating the position of the subscriber in the stream.
     * @param logBuffers                 containing the stream of messages.
     * @param correlationId              of the image with the media driver.
     * @param subscriptionRegistrationId of the Subscription.
     * @param exceptionHandler           to call if an exception is encountered on polling.
     */
    Image(
        std::int32_t sessionId,
        std::int64_t correlationId,
        std::int64_t subscriptionRegistrationId,
        const std::string& sourceIdentity,
        UnsafeBufferPosition& subscriberPosition,
        std::shared_ptr<LogBuffers> logBuffers,
        const exception_handler_t& exceptionHandler) :
        m_header(
            LogBufferDescriptor::initialTermId(logBuffers->atomicBuffer(LogBufferDescriptor::LOG_META_DATA_SECTION_INDEX)),
            logBuffers->atomicBuffer(0).capacity(),
            this),
        m_subscriberPosition(subscriberPosition),
        m_logBuffers(std::move(logBuffers)),
        m_sourceIdentity(sourceIdentity),
        m_isClosed(false),
        m_exceptionHandler(exceptionHandler),
        m_correlationId(correlationId),
        m_subscriptionRegistrationId(subscriptionRegistrationId),
        m_sessionId(sessionId)
    {
        for (int i = 0; i < LogBufferDescriptor::PARTITION_COUNT; i++)
        {
            m_termBuffers[i] = m_logBuffers->atomicBuffer(i);
        }

        const util::index_t capacity = m_termBuffers[0].capacity();

        m_joinPosition = subscriberPosition.get();
        m_finalPosition = m_joinPosition;
        m_termLengthMask = capacity - 1;
        m_positionBitsToShift = BitUtil::numberOfTrailingZeroes(capacity);
        m_isEos = false;
    }

    Image(const Image& image) :
        m_termBuffers(image.m_termBuffers),
        m_header(image.m_header),
        m_subscriberPosition(image.m_subscriberPosition),
        m_logBuffers(image.m_logBuffers),
        m_sourceIdentity(image.m_sourceIdentity),
        m_isClosed(image.isClosed()),
        m_exceptionHandler(image.m_exceptionHandler),
        m_correlationId(image.m_correlationId),
        m_subscriptionRegistrationId(image.m_subscriptionRegistrationId),
        m_joinPosition(image.m_joinPosition),
        m_finalPosition(image.m_finalPosition),
        m_sessionId(image.m_sessionId),
        m_termLengthMask(image.m_termLengthMask),
        m_positionBitsToShift(image.m_positionBitsToShift),
        m_isEos(image.m_isEos)
    {
    }

    Image& operator=(const Image& image)
    {
        m_termBuffers = image.m_termBuffers;
        m_header = image.m_header;
        m_subscriberPosition = image.m_subscriberPosition;
        m_logBuffers = image.m_logBuffers;
        m_sourceIdentity = image.m_sourceIdentity;
        m_isClosed = image.isClosed();
        m_exceptionHandler = image.m_exceptionHandler;
        m_correlationId = image.m_correlationId;
        m_subscriptionRegistrationId = image.m_subscriptionRegistrationId;
        m_joinPosition = image.m_joinPosition;
        m_finalPosition = image.m_finalPosition;
        m_sessionId = image.m_sessionId;
        m_termLengthMask = image.m_termLengthMask;
        m_positionBitsToShift = image.m_positionBitsToShift;
        m_isEos = image.m_isEos;

        return *this;
    }

    Image(Image&& image) noexcept :
        m_termBuffers(image.m_termBuffers),
        m_header(image.m_header),
        m_subscriberPosition(image.m_subscriberPosition),
        m_logBuffers(std::move(image.m_logBuffers)),
        m_sourceIdentity(std::move(image.m_sourceIdentity)),
        m_isClosed(image.isClosed()),
        m_exceptionHandler(std::move(image.m_exceptionHandler)),
        m_correlationId(image.m_correlationId),
        m_subscriptionRegistrationId(image.m_subscriptionRegistrationId),
        m_joinPosition(image.m_joinPosition),
        m_finalPosition(image.m_finalPosition),
        m_sessionId(image.m_sessionId),
        m_termLengthMask(image.m_termLengthMask),
        m_positionBitsToShift(image.m_positionBitsToShift),
        m_isEos(image.m_isEos)
    {
    }

    Image& operator=(Image&& image) noexcept
    {
        m_termBuffers = image.m_termBuffers;
        m_header = image.m_header;
        m_subscriberPosition = image.m_subscriberPosition;
        m_logBuffers = std::move(image.m_logBuffers);
        m_sourceIdentity = std::move(image.m_sourceIdentity);
        m_isClosed = image.isClosed();
        m_exceptionHandler = std::move(image.m_exceptionHandler);
        m_correlationId = image.m_correlationId;
        m_subscriptionRegistrationId = image.m_subscriptionRegistrationId;
        m_joinPosition = image.m_joinPosition;
        m_finalPosition = image.m_finalPosition;
        m_sessionId = image.m_sessionId;
        m_termLengthMask = image.m_termLengthMask;
        m_positionBitsToShift = image.m_positionBitsToShift;
        m_isEos = image.m_isEos;

        return *this;
    }

    /**
     * Get the length in bytes for each term partition in the log buffer.
     *
     * @return the length in bytes for each term partition in the log buffer.
     */
    inline std::int32_t termBufferLength() const
    {
        return m_termBuffers[0].capacity();
    }

    /**
     * Number of bits to right shift a position to get a term count for how far the stream has progressed.
     *
     * @return of bits to right shift a position to get a term count for how far the stream has progressed.
     */
    inline std::int32_t positionBitsToShift() const
    {
        return m_positionBitsToShift;
    }

    /**
     * The sessionId for the steam of messages.
     *
     * @return the sessionId for the steam of messages.
     */
    inline std::int32_t sessionId() const
    {
        return m_sessionId;
    }

    /**
     * The correlationId for identification of the image with the media driver.
     *
     * @return the correlationId for identification of the image with the media driver.
     */
    inline std::int64_t correlationId() const
    {
        return m_correlationId;
    }

    /**
     * The registrationId for the Subscription of the Image.
     *
     * @return the registrationId for the Subscription of the Image.
     */
    inline std::int64_t subscriptionRegistrationId() const
    {
        return m_subscriptionRegistrationId;
    }

    /**
     * The position at which this stream was joined.
     *
     * @return the position at which this stream was joined.
     */
    inline std::int64_t joinPosition() const
    {
        return m_joinPosition;
    }

    /**
     * The initial term at which the stream started for this session.
     *
     * @return the initial term id.
     */
    inline std::int32_t initialTermId() const
    {
        return m_header.initialTermId();
    }

    /**
     * The source identity of the sending publisher as an abstract concept appropriate for the media.
     *
     * @return source identity of the sending publisher as an abstract concept appropriate for the media.
     */
    inline std::string sourceIdentity() const
    {
        return m_sourceIdentity;
    }

    /**
     * Has this object been closed and should no longer be used?
     *
     * @return true if it has been closed otherwise false.
     */
    inline bool isClosed() const
    {
        return std::atomic_load_explicit(&m_isClosed, std::memory_order_acquire);
    }

    /**
     * The position this Image has been consumed to by the subscriber.
     *
     * @return the position this Image has been consumed to by the subscriber or CLOSED if closed
     */
    inline std::int64_t position() const
    {
        if (isClosed())
        {
            return m_finalPosition;
        }

        return m_subscriberPosition.get();
    }

    /**
     * Get the counter id used to represent the subscriber position.
     *
     * @return the counter id used to represent the subscriber position.
     */
    inline std::int32_t subscriberPositionId() const
    {
        return m_subscriberPosition.id();
    }

    /**
     * Set the subscriber position for this Image to indicate where it has been consumed to.
     *
     * @param newPosition for the consumption point.
     */
    inline void position(std::int64_t newPosition)
    {
        if (!isClosed())
        {
            validatePosition(newPosition);
            m_subscriberPosition.setOrdered(newPosition);
        }
    }

    /**
     * Is the current consumed position at the end of the stream?
     *
     * @return true if at the end of the stream or false if not.
     */
    inline bool isEndOfStream() const
    {
        if (isClosed())
        {
            return m_isEos;
        }

        return m_subscriberPosition.get() >=
            LogBufferDescriptor::endOfStreamPosition(m_logBuffers->atomicBuffer(
                LogBufferDescriptor::LOG_META_DATA_SECTION_INDEX));
    }

    /**
     * Poll for new messages in a stream. If new messages are found beyond the last consumed position then they
     * will be delivered via the fragment_handler_t up to a limited number of fragments as specified.
     *
     * @param fragmentHandler to which messages are delivered.
     * @param fragmentLimit   for the number of fragments to be consumed during one polling operation.
     * @return the number of fragments that have been consumed.
     *
     * @see fragment_handler_t
     */
    template <typename F>
    inline int poll(F&& fragmentHandler, int fragmentLimit)
    {
        int result = 0;

        if (!isClosed())
        {
            const std::int64_t position = m_subscriberPosition.get();
            const std::int32_t termOffset = (std::int32_t) position & m_termLengthMask;
            const int index = LogBufferDescriptor::indexByPosition(position, m_positionBitsToShift);
            assert(index >= 0 && index < LogBufferDescriptor::PARTITION_COUNT);
            AtomicBuffer &termBuffer = m_termBuffers[index];
            TermReader::ReadOutcome readOutcome{};

            TermReader::read(readOutcome, termBuffer, termOffset, fragmentHandler, fragmentLimit, m_header, m_exceptionHandler);

            const std::int64_t newPosition = position + (readOutcome.offset - termOffset);
            if (newPosition > position)
            {
                m_subscriberPosition.setOrdered(newPosition);
            }

            result = readOutcome.fragmentsRead;
        }

        return result;
    }

    /**
     * Poll for new messages in a stream. If new messages are found beyond the last consumed position then they
     * will be delivered to the controlled_poll_fragment_handler_t up to a limited number of fragments as specified.
     *
     * To assemble messages that span multiple fragments then use ControlledFragmentAssembler.
     *
     * @param fragmentHandler to which message fragments are delivered.
     * @param fragmentLimit   for the number of fragments to be consumed during one polling operation.
     * @return the number of fragments that have been consumed.
     *
     * @see controlled_poll_fragment_handler_t
     */
    template <typename F>
    inline int controlledPoll(F&& fragmentHandler, int fragmentLimit)
    {
        int result = 0;

        if (!isClosed())
        {
            int fragmentsRead = 0;
            std::int64_t initialPosition = m_subscriberPosition.get();
            std::int32_t initialOffset = (std::int32_t) initialPosition & m_termLengthMask;
            const int index = LogBufferDescriptor::indexByPosition(initialPosition, m_positionBitsToShift);
            assert(index >= 0 && index < LogBufferDescriptor::PARTITION_COUNT);
            AtomicBuffer &termBuffer = m_termBuffers[index];
            std::int32_t resultingOffset = initialOffset;
            const util::index_t capacity = termBuffer.capacity();

            m_header.buffer(termBuffer);

            try
            {
                while (fragmentsRead < fragmentLimit && resultingOffset < capacity)
                {
                    const std::int32_t length = FrameDescriptor::frameLengthVolatile(termBuffer, resultingOffset);
                    if (length <= 0)
                    {
                        break;
                    }

                    const std::int32_t frameOffset = resultingOffset;
                    const std::int32_t alignedLength = util::BitUtil::align(length, FrameDescriptor::FRAME_ALIGNMENT);
                    resultingOffset += alignedLength;

                    if (FrameDescriptor::isPaddingFrame(termBuffer, frameOffset))
                    {
                        continue;
                    }

                    m_header.offset(frameOffset);

                    const ControlledPollAction action = fragmentHandler(
                        termBuffer,
                        frameOffset + DataFrameHeader::LENGTH,
                        length - DataFrameHeader::LENGTH,
                        m_header);

                    if (ControlledPollAction::ABORT == action)
                    {
                        resultingOffset -= alignedLength;
                        break;
                    }

                    ++fragmentsRead;

                    if (ControlledPollAction::BREAK == action)
                    {
                        break;
                    }
                    else if (ControlledPollAction::COMMIT == action)
                    {
                        initialPosition += (resultingOffset - initialOffset);
                        initialOffset = resultingOffset;
                        m_subscriberPosition.setOrdered(initialPosition);
                    }
                }
            }
            catch (const std::exception& ex)
            {
                m_exceptionHandler(ex);
            }

            const std::int64_t resultingPosition = initialPosition + (resultingOffset - initialOffset);
            if (resultingPosition > initialPosition)
            {
                m_subscriberPosition.setOrdered(resultingPosition);
            }

            result = fragmentsRead;
        }

        return result;
    }

    /**
     * Poll for new messages in a stream. If new messages are found beyond the last consumed position then they
     * will be delivered to the controlled_poll_fragment_handler_t up to a limited number of fragments as specified or
     * the maximum position specified.
     *
     * To assemble messages that span multiple fragments then use ControlledFragmentAssembler.
     *
     * @param fragmentHandler to which message fragments are delivered.
     * @param maxPosition     to consume messages up to.
     * @param fragmentLimit   for the number of fragments to be consumed during one polling operation.
     * @return the number of fragments that have been consumed.
     * @see controlled_poll_fragment_handler_t
     */
    template <typename F>
    inline int boundedControlledPoll(F&& fragmentHandler, std::int64_t maxPosition, int fragmentLimit)
    {
        int result = 0;

        if (!isClosed())
        {
            int fragmentsRead = 0;
            std::int64_t initialPosition = m_subscriberPosition.get();
            std::int32_t initialOffset = (std::int32_t) initialPosition & m_termLengthMask;
            const int index = LogBufferDescriptor::indexByPosition(initialPosition, m_positionBitsToShift);
            assert(index >= 0 && index < LogBufferDescriptor::PARTITION_COUNT);
            AtomicBuffer &termBuffer = m_termBuffers[index];
            std::int32_t resultingOffset = initialOffset;
            const std::int64_t capacity = termBuffer.capacity();
            const std::int32_t endOffset =
                static_cast<std::int32_t>(std::min(capacity, (maxPosition - initialPosition) + initialOffset));

            m_header.buffer(termBuffer);

            try
            {
                while (fragmentsRead < fragmentLimit && resultingOffset < endOffset)
                {
                    const std::int32_t length = FrameDescriptor::frameLengthVolatile(termBuffer, resultingOffset);
                    if (length <= 0)
                    {
                        break;
                    }

                    const std::int32_t frameOffset = resultingOffset;
                    const std::int32_t alignedLength = util::BitUtil::align(length, FrameDescriptor::FRAME_ALIGNMENT);
                    resultingOffset += alignedLength;

                    if (FrameDescriptor::isPaddingFrame(termBuffer, frameOffset))
                    {
                        continue;
                    }

                    m_header.offset(frameOffset);

                    const ControlledPollAction action = fragmentHandler(
                        termBuffer,
                        frameOffset + DataFrameHeader::LENGTH,
                        length - DataFrameHeader::LENGTH,
                        m_header);

                    if (ControlledPollAction::ABORT == action)
                    {
                        resultingOffset -= alignedLength;
                        break;
                    }

                    ++fragmentsRead;

                    if (ControlledPollAction::BREAK == action)
                    {
                        break;
                    }
                    else if (ControlledPollAction::COMMIT == action)
                    {
                        initialPosition += (resultingOffset - initialOffset);
                        initialOffset = resultingOffset;
                        m_subscriberPosition.setOrdered(initialPosition);
                    }
                }
            }
            catch (const std::exception& ex)
            {
                m_exceptionHandler(ex);
            }

            const std::int64_t resultingPosition = initialPosition + (resultingOffset - initialOffset);
            if (resultingPosition > initialPosition)
            {
                m_subscriberPosition.setOrdered(resultingPosition);
            }

            result = fragmentsRead;
        }

        return result;
    }

    /**
     * Peek for new messages in a stream by scanning forward from an initial position. If new messages are found then
     * they will be delivered to the controlled_poll_fragment_handler_t up to a limited position.
     * <p>
     * To assemble messages that span multiple fragments then use ControlledFragmentAssembler. Scans must also
     * start at the beginning of a message so that the assembler is reset.
     *
     * @param initialPosition from which to peek forward.
     * @param fragmentHandler to which message fragments are delivered.
     * @param limitPosition   up to which can be scanned.
     * @return the resulting position after the scan terminates which is a complete message.
     * @see controlled_poll_fragment_handler_t
     */
    template <typename F>
    inline std::int64_t controlledPeek(std::int64_t initialPosition, F&& fragmentHandler, std::int64_t limitPosition)
    {
        std::int64_t resultingPosition = initialPosition;

        if (!isClosed())
        {
            validatePosition(initialPosition);

            std::int32_t initialOffset = static_cast<std::int32_t>(initialPosition & m_termLengthMask);
            std::int32_t offset = initialOffset;
            std::int64_t position = initialPosition;
            const int index = LogBufferDescriptor::indexByPosition(initialPosition, m_positionBitsToShift);
            assert(index >= 0 && index < LogBufferDescriptor::PARTITION_COUNT);
            AtomicBuffer &termBuffer = m_termBuffers[index];
            const util::index_t capacity = termBuffer.capacity();

            m_header.buffer(termBuffer);

            try
            {
                while (position < limitPosition && offset < capacity)
                {
                    const std::int32_t length = FrameDescriptor::frameLengthVolatile(termBuffer, offset);
                    if (length <= 0)
                    {
                        break;
                    }

                    const std::int32_t frameOffset = offset;
                    const std::int32_t alignedLength = util::BitUtil::align(length, FrameDescriptor::FRAME_ALIGNMENT);
                    offset += alignedLength;

                    if (FrameDescriptor::isPaddingFrame(termBuffer, frameOffset))
                    {
                        position += (offset - initialOffset);
                        initialOffset = offset;
                        resultingPosition = position;
                        continue;
                    }

                    m_header.offset(frameOffset);

                    const ControlledPollAction action = fragmentHandler(
                        termBuffer,
                        frameOffset + DataFrameHeader::LENGTH,
                        length - DataFrameHeader::LENGTH,
                        m_header);

                    if (ControlledPollAction::ABORT == action)
                    {
                        break;
                    }

                    position += (offset - initialOffset);
                    initialOffset = offset;

                    if (m_header.flags() & FrameDescriptor::END_FRAG)
                    {
                        resultingPosition = position;
                    }

                    if (ControlledPollAction::BREAK == action)
                    {
                        break;
                    }
                }
            }
            catch (const std::exception& ex)
            {
                m_exceptionHandler(ex);
            }
        }

        return resultingPosition;
    }

    /**
     * Poll for new messages in a stream. If new messages are found beyond the last consumed position then they
     * will be delivered via the block_handler_t up to a limited number of bytes.
     *
     * A scan will terminate if a padding frame is encountered. If first frame in a scan is padding then a block
     * for the padding is notified. If the padding comes after the first frame in a scan then the scan terminates
     * at the offset the padding frame begins. Padding frames are delivered singularly in a block.
     *
     * Padding frames may be for a greater range than the limit offset but only the header needs to be valid so
     * relevant length of the frame is sizeof DataHeaderDefn.
     *
     * @param blockHandler     to which block is delivered.
     * @param blockLengthLimit up to which a block may be in length.
     * @return the number of bytes that have been consumed.
     *
     * @see block_handler_t
     */
    template <typename F>
    inline int blockPoll(F&& blockHandler, int blockLengthLimit)
    {
        int result = 0;

        if (!isClosed())
        {
            const std::int64_t position = m_subscriberPosition.get();
            const std::int32_t termOffset = (std::int32_t) position & m_termLengthMask;
            const int index = LogBufferDescriptor::indexByPosition(position, m_positionBitsToShift);
            assert(index >= 0 && index < LogBufferDescriptor::PARTITION_COUNT);
            AtomicBuffer &termBuffer = m_termBuffers[index];
            const std::int32_t limitOffset = std::min(termOffset + blockLengthLimit, termBuffer.capacity());
            const std::int32_t resultingOffset = TermBlockScanner::scan(termBuffer, termOffset, limitOffset);
            const std::int32_t length = resultingOffset - termOffset;

            if (resultingOffset > termOffset)
            {
                try
                {
                    const std::int32_t termId = termBuffer.getInt32(termOffset + DataFrameHeader::TERM_ID_FIELD_OFFSET);
                    blockHandler(termBuffer, termOffset, length, m_sessionId, termId);
                }
                catch (const std::exception& ex)
                {
                    m_exceptionHandler(ex);
                }

                m_subscriberPosition.setOrdered(position + length);
            }

            result = length;
        }

        return result;
    }

    std::shared_ptr<LogBuffers> logBuffers()
    {
        return m_logBuffers;
    }

    /// @cond HIDDEN_SYMBOLS
    inline void close()
    {
        if (!isClosed())
        {
            m_finalPosition = m_subscriberPosition.getVolatile();
            m_isEos = m_finalPosition >= LogBufferDescriptor::endOfStreamPosition(
                m_logBuffers->atomicBuffer(LogBufferDescriptor::LOG_META_DATA_SECTION_INDEX));
            std::atomic_store_explicit(&m_isClosed, true, std::memory_order_release);
        }
    }
    /// @endcond

private:
    std::array<AtomicBuffer, LogBufferDescriptor::PARTITION_COUNT> m_termBuffers;
    Header m_header;
    Position<UnsafeBufferPosition> m_subscriberPosition;
    std::shared_ptr<LogBuffers> m_logBuffers;
    std::string m_sourceIdentity;
    std::atomic<bool> m_isClosed;
    exception_handler_t m_exceptionHandler;

    std::int64_t m_correlationId;
    std::int64_t m_subscriptionRegistrationId;
    std::int64_t m_joinPosition;
    std::int64_t m_finalPosition;
    std::int32_t m_sessionId;
    std::int32_t m_termLengthMask;
    std::int32_t m_positionBitsToShift;
    bool m_isEos;

    void validatePosition(std::int64_t newPosition)
    {
        const std::int64_t currentPosition = m_subscriberPosition.get();
        const std::int64_t limitPosition = (currentPosition - (currentPosition & m_termLengthMask)) + m_termLengthMask + 1;

        if (newPosition < currentPosition || newPosition > limitPosition)
        {
            throw util::IllegalArgumentException(
                std::to_string(newPosition) + " newPosition out of range " +
                std::to_string(currentPosition) + " - " + std::to_string(limitPosition),
                SOURCEINFO);
        }

        if (0 != (newPosition & (FrameDescriptor::FRAME_ALIGNMENT - 1)))
        {
            throw util::IllegalArgumentException(
                std::to_string(newPosition) + " newPosition not aligned to FRAME_ALIGNMENT",
                SOURCEINFO);
        }
    }
};

struct ImageList
{
    Image *m_images;
    std::size_t m_length;

    ImageList(Image *images, std::size_t length) :
        m_images(images),
        m_length(length)
    {
    }
};

}

#endif //AERON_IMAGE_H

redpajama_set_name: RedPajamaGithub


text:
using System;
using Newtonsoft.Json;

namespace WebExtras.JQPlot.RendererOptions
{
  /// <summary>
  /// BarRenderer options
  /// </summary>
  [Serializable]
  public class BarRendererOptions : IRendererOptions
  {
    /// <summary>
    /// Name of the associated renderer for which these options are
    /// </summary>
    [JsonIgnore]
    public string AssociatedRendererName { get { return "BarRenderer"; } }

    /// <summary>
    /// Number of pixels between adjacent bars at the same axis value.
    /// </summary>
    public int? barPadding { get; set; }

    /// <summary>
    /// Number of pixels between groups of bars at adjacent axis values.
    /// </summary>
    public int? barMargin { get; set; }

    /// <summary>
    /// 'vertical' = up and down bars, 'horizontal' = side to side bars
    /// </summary>
    public string barDirection { get; set; }

    /// <summary>
    /// Width of the bar in pixels (auto by default).
    /// </summary>
    public int? barWidth { get; set; }

    /// <summary>
    /// offset of the shadow from the slice and offset of each succesive stroke of the shadow from the last.
    /// </summary>
    public int? shadowOffset { get; set; }

    /// <summary>
    /// number of strokes to apply to the shadow, each stroke offset shadowOffset from the last.
    /// </summary>
    public int? shadowDepth { get; set; }

    /// <summary>
    /// transparency of the shadow (0 = transparent, 1 = opaque)
    /// </summary>
    public double? shadowAlpha { get; set; }

    /// <summary>
    /// Whether to plot as a waterfall chart
    /// </summary>
    public bool? waterfall { get; set; }

    /// <summary>
    /// group bars into these many groups
    /// </summary>
    public int? groups { get; set; }

    /// <summary>
    /// true to color each bar of a series separately rather than have every
    /// bar of a given series the same color. If used for non-stacked multiple
    /// series bar plots, user should specify a separate 'seriesColors' array
    /// for each series.  Otherwise, each series will set their bars to the same
    /// color array. This option has no Effect for stacked bar charts and is disabled.
    /// </summary>
    public bool? varyBarColor { get; set; }

    /// <summary>
    /// True to highlight slice when moused over. This must be false to enable
    /// highlightMouseDown to highlight when clicking on a slice.
    /// </summary>
    public bool? highlightMouseOver { get; set; }

    /// <summary>
    /// True to highlight when a mouse button is pressed over a slice.
    /// This will be disabled if highlightMouseOver is true.
    /// </summary>
    public bool? highlightMouseDown { get; set; }

    /// <summary>
    /// an array of colors to use when highlighting a bar.
    /// </summary>
    public string[] highlightColors { get; set; }
  }
}


text:
The five love languages : how to express heartfelt commitment to your mate / by Gary Chapman.
Chapman, Gary, 1957- (Author).
Large Print Material
ISBN: 078627459X (alk. paper)
ISBN: 1594150818 (softcover : alk. paper)
Physical Description: 274 p. (large print) ; 23 cm.
Publisher: Waterville, Me. : Thorndike Press, 2005.
Previously published: Chicago : Northfield Pub., c1995.
"Published in 2005 in arrangement with Moody Publishers."
"The text of this Large Print edition is unabridged."
Subject: Marriage.
Communication in marriage.
Large type books.
▼ Additional Content & Reviews
Syndetic Solutions - Excerpt for ISBN Number 078627459X
The Five Love Languages : The Secret to Love That Lasts
by Chapman, Gary
Review - Library	Journal
In the area of love, it is similar. Your emotional love language and the language of your spouse may be as different as Chinese from English. No matter how hard you try to express love in English, if your spouse understands only Chinese, you will never understand how to love each other. My friend on the plane was speaking the language of "Affirming Words" to his third wife when he said, "I told her how beautiful she was. I told her I loved her. I told her how proud I was to be her husband." He was speaking love, and he was sincere, but she did not understand his language. Perhaps she was looking for love in his behavior and didn't see it. Being sincere is not enough. We must be willing to learn our spouse's primary love language if we are to be effective communicators of love. Excerpted from The Five Love Languages: The Secret to Love That Lasts by Gary Chapman All rights reserved by the original copyright owners. Excerpts are provided for display purposes only and may not be reproduced, reprinted or distributed without the written permission of the publisher.

redpajama_set_name: RedPajamaCommonCrawl


Cal King Comforter Sets On Sale.
Cal king comforter sets on sale inside oversized california down alternative ideas. Cal king comforter sets on sale with shop clay alder home wells piece set free prepare. Cal king comforter sets on sale throughout jasmine blue piece california set bed in a bag plans. Cal king comforter sets on sale inside olivia piece navy set m the home depot plans. Cal king comforter sets on sale for shop plymouth california piece set free shipping decor.
Cal king comforter set on sale.
14 piece cal king comforter sets on sale.
Cal king comforter sets on sale regarding score big last minute savings hadden piece california inspirations.


This is a beautiful notebook mockup, showing two small "Field Notes" style notebooks, with a matte cover, set against a high-end backdrop. They're next to a stylish little pen.
You can drop a different design onto each notebook, which is useful for showing two design concepts side-by-side. And while we're not quite sure what that piece of stone (or wood?) in the background is, maybe that's just what gives it an edge!


Fully Optimize Your Farming Operation.
If you have any questions for the Paragon team, please contact us using the form below or call us toll free at 1.888.452.8751.
Please complete the form below and one of our brokers will be in touch soon.


text:
Q: What is the correct way to accessing React App from Nginx proxy I wrote a React application, I want to make it reachable as application deployed on a Web Nginx server, the application have a link at Reat App. To do this I configured an reverse proxy inside Nginx. My problem is the when I call the Node/React app by the link I only see a white page, all works perfectly in the Browser if I call the Node/React app directly.
See below:

package.json (server)

{
  "name": "server",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "engines": {
    "node": "9.8.0",
    "npm": "6.0.0"
  },
  "scripts": {
    "start": "node index.js",
    "server": "nodemon index.js",
    "client": "npm run start --prefix client",
    "dev": "concurrently \"npm run start\" \"npm run client\""
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.16.3",
    "mongoose": "^5.1.4",
    "nodemon": "^1.17.5"
  }
}

index.js (server)

const express = require("express");
const app = express();
const keys = require('./config/Keys');
const mongoose = require("mongoose");
require('./models/User');
require('./models/Profile');
mongoose.connect(keys.mongoURI);
const User =  mongoose.model('users');

 app.use(express.static('client/build'));
  const path = require('path');
  app.get('*', (req, res) => {
    res.sendFile(path.resolve(__dirname,'client', 'build', 'index.html'));
  });

package.json (client)

{
  "name": "client",
  "version": "0.1.0",
  "private": true,
  "homepage": ".",
  "proxy": {
    "/api/*": {
      "target": "http://localhost:5000"
    }
  },
  "dependencies": {
    "react": "^16.4.0",
    "react-dom": "^16.4.0",
    "react-redux": "^5.0.7",
    "react-router-dom": "^4.3.1",
    "react-scripts": "1.1.4",
    "redux": "^4.0.0"
  },
  "scripts": {
    "start": "set HTTPS=true&&react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test --env=jsdom",
    "eject": "react-scripts eject"
  }
}

index.js (client)

import materializeCSS from 'materialize-css/dist/css/materialize.min.css';
import React from 'react';
import ReactDOM from 'react-dom';
import { Provider } from 'react-redux';
import { createStore, applyMiddleware } from 'redux';
import reduxThunk from 'redux-thunk';
import App from './components/App';
const store = createStore(() => [], {}, applyMiddleware(reduxThunk));

   ReactDOM.render(
   <Provider store={store}><App/></Provider>,
    document.querySelector('#root'));

Nginix reverse proxy

`location /react {
            proxy_pass http://10.30.1.185:5000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
        }`

In the Browswer console I get the following warning:
Loading failed for the <script> with source "https://snapmed.ca/static/js/main.cfe29440.js".

Any thoughts why I am getting just a white page?

A: You should not be using npm start for an nginx deploy of a React app. Use npm run build to convert your React application into static files, then simply point nginx to that directory. Once built, you no longer have to use npm start.
npm start is for deploying a local development server. The development server monitors for file changes as you are developing so that it can reload the page in response to changes. This is not relevant to an nginx deploy of your application.
npm run build concatenates, bundles, and otherwise optimizes your files for deploy on a real server, not a development server. Once bundled, there is no need for the development server to be running -- the static files alone have all the correct references to each other and no longer need to reload live as files change.
It appears you are currently pointing your nginx server to a development server (port 5000). You should not be doing this. Your nginx server should point simply to the directly where the built React app resides (typically a build directory is added to the same directory from which you run npm run build). You can point nginx to this directory using the root keyword instead of using the proxy keywords.

redpajama_set_name: RedPajamaStackExchange


Placer gold has been found at Hatchett Creek and Weogufka Creek and the Gold Ridge Mine produced lode gold.
Coosa county was one of 14 counties organized from lands ceded by the Creek Indians in the 1832 Treaty of Cusseta. A site on Hatchet Creek was chosen as the county seat and given the name Lexington. In 1835, the name for the county seat was changed to Rockford.
Rockford Gun Club, centrally located in Alabama, is a 1,000 yard rifle range, including natural terrain long range rifle setups as well as traditional "square range" style rifle and handgun shooting. This type of distance and natural setup is very rare in Alabama. RGC will also include pistol bays to accommodate practical pistol, and 3 gun style shooting. RGC is conveniently located a short distance off of US Highway 231 in Coosa County. We're just 69 miles from Birmingham, 55 miles from Auburn, and 35 miles from Montgomery.
Lake Martin is located in Tallapoosa, Elmore and Coosa counties in Alabama. It is a 44,000-acre lake with over 750 miles of wooded shoreline. Lake Martin is a reservoir, formed by the construction of Martin Dam on the Tallapoosa River.


I would like to calculate the profit margin and gross profit percentage for BHP in 2017.
Which one is it? The revenue is 38,285, and I am supposed to take out the "cost of sold products". But there isn't any. Does that mean that the Gross profit is indeed $38,285?
I am puzzled because Fortescue, a competitor, DOES show operating expenses.
The two income statements follow!
Both companies referenced above report under IFRS (or at least the Australian equivilent), however, they seperate costs differently -- BHP under nature of expense method and FMG under function of expense method.
You can see the same mismatch in cost reporting between Vale and Rio Tinto.
As such, you won't (easily) be able to determine cost of sale -- or by extension, gross profit by an entity reporting under nature of expense.
This shouldn't really deter you analysis -- a cost breakdown should still have been presented for each cash-generating unit (CGU). That should allow you an indication of where CAPital EXpenditure (CAPEX) and income is occurring. (The all-in gross profit of BHP isn't actually that helpful without considering the underlying production mix for that year).
Not the answer you're looking for? Browse other questions tagged ratio income-statement or ask your own question.
Few questions related to Balance sheet and Income Statement?


Why are OSLS test scores so high?
Our Savior's Lutheran School's average test scores across all subjects have been at the 89%ile or better for the past four years. When looking at just reading and math, we do even better - 90+%ile. This is an amazing accomplishment for our students! If you read my last blog you know that it can't just be attributed to high socio-economic and educational levels of our parents. In that blog I shared a recent study of international test scores which showed that even in among US students whose parents have high socio-economic and education levels, the US doesn't compare well with international scores.
So what does make adifference? The difference, of course, is in the school and the teachers. The Organization for Economic Co-operation and Development (OECD) put out some findings about what raises the level of student performance. Here's some of what they found and what they proposed.
• Create demanding and supportive learning environments at school.
• Provide remedial support as early as possible.
• Encourage the involvement of parents and local communities.
• Inspire students to make the most of available education opportunities.
All of this and more is part of the daily education at Our Savior's. With our small classes and talented teachers, students have more time on task, or more actual instruction/learning time. Our curriculum is demanding, but comes with the necessary supports to ensure students are successful. When there is a need for remediation, teachers catch it sooner and provide support to students and parents. Our parent involvement is very high and all you have to do is visit the classrooms to see that students are iengaged and making the most of the learning opportunities! Additionally we provide supplemental and enrichment programs both during and after school. Lastly, our students learn in a Christian environment which teaches them to love God and to love each other.
1. We will provide excellent education in a Lutheran Christian environment.
We will consistently challenge our students to be successful academically, loving and accepting of their neighbor and grounded in God's love.
2. We will instill in our students the traits necessary to form healthy relationships based on character, integrity and mutual respect.
We will consistently challenge our staff, students and families to honor and respect all people to speak kindly of them and explain their actions in the kindest of ways.
3. We are students, parents, educators, and church members who celebrate and honor the diversity of gifts, abilities and backgrounds each contributes to the school community.
4. We will facilitate opportunities for our students and their families to provide Christian service to our school community and the world beyond.
We at OSLS are dedicated to providing the best instruction in a small nurturing environment. The implementation of these values makes a difference in our students' lives, not just in test scores, but in giving them the best chance for overall success in school and in life - ask any parent of a recent alumni who is now in middle school or high school!


Discover provencal art de vivre while organising your event in South Luberon at the l'Hôtel Le Mas Du Colombier*** !
Since spring 2018, we are pleased to offer a business room of 42 square meters with a private terrace, ideal set up to organise your professional event, seminar, incentive or training.
Differents formulas are available: day or half day meeting, semi-residential seminar or residential, with diverses catering solutions.
human size, ideal for small groups, allowing private function and privatization of our hotel.
An ideal location, with easy access, offering a unique and exceptional setting in the heart of South Luberon.
Our diverse expertise and strong experience in event organisation, offering tailored made solutions to answer your needs and requirements.


The record of the Midwest League franchise in Kenosha, Wisconsin.
Kenosha's team was Bob Lee's special project. When he was young, Lee played minor league ball. When he grew up, he brought the Midwest League to his town.
In Kenosha's 9 summers, the team played some excellent ball and often had noteworthy players. But the best seasons were early. Perhaps the decline of these Twins foreshadowed the collapse of the big league Twins.
Simmons Field was made obsolete by the 1990 Professional Baseball Agreement, so the move to Fort Wayne was likely as inevitable as these things get. But Chuck Knoblauch played for Kenosha; so did Denny Neagle, and Lenny Webster, and Brad Radke. This is a significant baseball legacy.
Kenosha joined the Midwest League in 1984 as the direct successor to the Wisconsin Rapids team. Kenosha's franchise moved to Fort Wayne after the 1992 season, where it remains.
This summary originated as the April 9, 2000, Midwest League Tidbit on the Midwest League Mailing List.


The DataGridView class allows customization of cells, rows, columns, and borders through the use of its properties . If a DataGridView has lot of rows then we can implement paging functionalities to the DataGridView control. While we implement paging we should know the boundaries of the pages to enable the paging in the DatagridView.
The following vb.net program provides a way to programmatically implement paging in a Windows Datagrid View control. Here the DataGridView rows fixed as five rows and other two buttons are there for implementing paging functionalities.


I just finished a maintenance run and while logging my activity I was reminded of the many requests that archived caches be removed from a hider's list of owned caches. I don't want the caches removed, but I think it would be easy programming to make two sections "Active Caches" and "Archived Caches." I think this would also satisfy all or at least most of the people who wanted the archived caches removed.
Great idea! I hope this one gets adopted.
I can understand this, but wouldn't that then mess up cache history?
Would that "easy programming" allow for a separate list for your public profile (that others may view in order) and private?
The way it is now, caches are in order by hidden date. That's your caching history.
Create a pocket query of caches that "I own", this will not include your archived.
You can save that query, if you want fast access, bookmark the preview page.
Note that this will NOT include active that are disabled, and if you remove enabled selection, cache owner will see ALL of their owned caches - active and archived.
Other users do NOT see archived there.
if you want to remove archived caches from your account, just transfer them via adoption to an second user name. Do this, before archiving them.
Add it to your ignore list. It won't show up in your list of owned caches anymore. I just tried this and it does work.
The Search method described won't do what I want because there are likely to be one or more disabled caches in the mix, but the PQ method will work and I think that's what I'll do -- at least try it next time. Thanks.
My wife and I maintain a bookmark list of our active owned caches. This makes tasks like this simpler.


MOZAMBIQUE-SOUTH AFRICA WITH SHORT S23 FLYING BOAT.
the aircraft is refueled.We shall then proceed across the Mediterranean to land on Lake Bracciano, just North of Rome and finally proceed to Brindisi where we shall spend the night.
Note With adverse headwinds on the first leg, aircraft routed via St.Nazaire (LFRZ) on the Atlantic seaboard.
Your Captain speaking: Good Morning,today we will be flying at 1,500ft if the weather is good, else 7,500ft. Our route takes us across the Ionian Sea, down the coast of Greece to Kefallinia, through the Gulf of Corinth, then east to land at Athens. From Athens we shall cross the Mediterranean Sea at 3,500ft via Crete to land at Alexandria for a night stop.
Note Adverse headwinds between Athens and Alexandria, aircraft may refuel at Mirabelle,Crete.
follow the course of the Nile, passing the Pyramids to Port, followed by the Barrage at Assiut,to land at Luxor, famous for its temples. After Luxor we overfly Thebes with its Tombs of the Kings.also the site of the Tutankhamen excavations and on to Wadi Halfa where we enter Sudan, a refuel stop at Kareima and finally, overnight at Khartoum.
YourCaptain Speaking: Today we shall be flying at 4,500ft as far as Juba. Shortly, the desert will end and the bush will begin. Approaching Malakal, there are vast swamps in which herds of elephants may be seen.The 12,000 sq mile 'Sudd' swamps on our right end at Juba. Now as the ground begins to rise, we climb to 6,500f and we may be lucky and see some of the vast herds of game. We shall overfly Entebbe to alight at Port Bell on Lake Victoria. In the event of bad weather, we may divert to Kisumu (HKKI).


St Clare's Community gathered for its traditional Christmas Dinner on Friday December 8 . The Good Shepherd Sisters and Father Nino were special guests and we were joined by the Graduate Class of 2017 and other friends.
The Cafe students have been very busy over the last few weeks preparing delicious food for our Christmas season.
Our students were once again spoiled by our lovely Fairy Godmothers. They not only provided some wonderful opportunities for shopping (including clothes, toiletries, shoes and accessories), but also shared a wonderful lunch and gave each girl a Christmas gift.
The world of outer space and our understanding of it was the major focus of the exhibition at Scitech when the students paid it a visit on Wednesday (29 November).
St. Clare's School Community was very proud to have the opportunity to donate three food hampers filled with Christmas cheer and goodies to the St. Vincent de Paul Society Christmas appeal.
Year 10 students have recently embarked on two excursions to broaden their understandings in the area of Civics and Citizenship.
The school year culminated in a display of some wonderful learning that has occurred at St Clare's this year. Parents and carers were invited to come and look at the work of our students and to rejoice in their achievements this year.
St Clare's students and staff made the trek to Ern Halliday Camp in Sorrento for their yearly camp.
The secret ingredient for this week's Lemonade Stall was on show from the beginning, as outlined in the name "Dino-sours Lemonade Stall".
Congratulations to our Graduates of 2017. The community of St Clare's was very proud to celebrate the graduation of our Year 12 class of 2017.
We're back to our lemonade Stalls this week, with Shani providing us with an explosive experience!
Congratulations to Mrs Sue Bursey on receiving the 2017 John Laing Award at a ceremony held at the University Club of Western Australia.
St Clare's were the proud winners of a beautiful Aboriginal painting that had its origins in Sorry Day in May.
Our accomplished Cafe students explored French Cuisine making a variety of both savoury and sweet croissants.
Workplace Learning was introduced to St Clare's this year and it has been nothing short of a great success for many of our students.
Thursday September 14th was "R U Ok? Day". Throughout the week the girls have made use of the blender bike, blending together lots of delicious and healthy smoothies during recess and lunch.
Today we were lucky enough to have guest speaker Jonny Shannon out to talk to us about friendships, bullying and cyber safety.
The talented Year 11 FST students put on a delicious High Tea for the staff and students of St Clares on Thursday 7th September.
On Tuesdays we have group sessions and this Term we are re-designing the courtyards we have.
Students and staff were treated to another wonderful Pizza parlour this week, with the arrival of Chont's Crispy Crust.
On Tuesday 22nd August we held a Course Information morning for the Year 10 students to inform them about their course options for Year 11. The morning was followed up on Tuesday 29th August with an afternoon tea for parents to come in and support their children to make their final course selections for 2018.
On 24th August, the Year 8, 9 and 10 Textile class went on an excursion to see the Angelico Exhibition in the city of Perth.
This week we are celebrating Book Week! The theme this year is "Escape to Everywhere" and on Tuesday, all staff and students dressed up as characters from a range of books.
Our very popular pizza parlours were on show again this week as we were introduced to Pizza Fiesta - highlighted by a distinctly Mexican theme.
St Clare's is very proud to announce that the winner in the category 2 Dimensional Art (Years 7-10) for the Angelico Exhibition is our Rebekah Smith from Year 10.
The whole St Clare's community gathered together at the Chapel of St Michael the Archangel at the CEO in Leederville to celebrate our feast day.
As NAIDOC week fell during the school holidays, St Clare's school belatedly acknowledged our Aboriginal heritage by inviting guest speaker Marissa Verma from Bindibindi Dreaming to share some of her culture and history.
This term the Yr 8/9 class are exploring Matter in Science.
The latest Lemonade stall was entitled "The Ugly Lemon" and combined both the sweet, the sour and the unusual with lemons, limes and the secret ingredient of Lemon Grass - straight from Donia's garden!
Congratulations to all the students who received awards at the student meeting this week.
The first of our Pizza Parlours was rolled out this week, with Operation Pizza leading us off.
For the end of Term 2 activities the students at St Clare's voted for a visit to Lazer Blaze followed by a rock drop in our local park.
Congratulations to all our awards winners from Term 2 2017.
At St Clare's School today we hosted The Biggest Morning tea which is a fundraiser for the Cancer Council.
The 24th of June also is the day when we celebrate Good Shepherd Day. This is a day where we celebrate everything the Sisters have done for young girls around Australia and New Zealand.
Over the past two Wednesdays, 14th & 21st June, five St Clare's students have begun their second Workplace Learning placements at their respective workplaces.
Our run of sensational lemonade stalls continued this week as we combined the flavour of both watermelon and the secret ingredient - continental cucumbers!
The Certificate IV Preparation for Nursing Education is a valuable Certificate for students who are considering Nursing as a career. In 2016 two St Clare's students undertook to study this Certificate on-line with Central Regional TAFE.
On Friday June 9 St Clare's netball team participated in the High Schools' Cup at Fremantle Netball Courts. We played five games and each player pushed themselves to the limit.
Once again our Fairy Godmothers spoilt our students with a brilliant array of clothes, shoes, accessories, cosmetics and toiletries.
Our next Lemonade Stall, held this week, contained a secret Love Potion as part of its allure.
St Clare's students and staff, together with many other schools and organisations, attended Sorry Day 2017 in Wellington Square in Perth.
Today we took 9 students from Years 10 -12 to the Careers Expo at the Convention Centre.
St Clare's students were recently treated to clinic designed to expose them to skills of AFL football.
The Lemonade Stall held today boasted a simple yet effective recipe that tantalised all our taste buds.
Students and staff have been busy preparing a stall for Sorry Day to be held on May 26th at Wellington Square in East Perth.
Keys for Life is a pre-driving program in which students go through simulated driving experiences to gain experience before obtaining their Learners' Permit.
Year 8, 9 and 10 students have been enthusiastically designing and creating Sculptural hats as part of the Mad Hatters project in Textiles.
It was a proud day for our Year 12 students today as they received their Leavers' Jackets.
Congratulations to Sr Mary on 70 years as a Good Shepherd Sister.
Congratulations to Sr Mary Gilhooley who celebrated 70 years as a Good Shepherd Sister with a Mass at the Catholic Education Office Chapel, followed by a scrumptious afternoon tea in the grounds of the Good Shepherd Convent.
We had a very blue Lemonade Stall this week, as the secret ingredient contained in the yummy lemonade was blueberries.
What a lovely way to finish up Term 1!
There were some very happy students at the end of first term, as the winners of the Easter "unraffle" were announced.
Congratulations to our Award winners for First Term 2017.
Our lovely Fairy Godmothers spread their sparkle over our school again as they provided our students with a wonderful Indian lunch.
There was a tingle in the taste for the Juici Fruiti Lemonade Stand. The lovely pink colour was provided by the raspberries and the secret ingredient of peaches added a richness and depth to the drink of the day.
This Tuesday the netball group were lucky enough to have Amanda from Netball WA come and train us.
St. Clare's celebrated Harmony Day with our traditional freshly baked, multi-coloured M&M cookies at Recess.
St Clare's community welcomed all the parents, carers and guardians of our lovely students to a brief meeting followed by a wonderful afternoon tea, provided by our students and staff.
The luscious orange colour may have given away the secret ingredient for our second Lemonade Stand for 2017.
What an exciting experience it was for St Clare's to have Chef Ash Ryan, who is a highly accomplished chef, demonstrate and teach precision cutting of vegetables and fruit to our students.
Second week of Workplace Learning saw two new students begin their placements.
St Clare's school students and staff were lucky enough to taste the tantalising treats of our first Lemonade Stall for 2017.
Today many of our WPL students started their placements.
This semester 12 of our Year 11, Year 12 and Year 13 students with be participating in Workplace Learning Placements organised through Central and South East INSTEP.
Congratulations to all the students who will form part of the St Clare's Leadership Team for 2017.
This week at St. Clare's we received some new additions to the community!


text:
Changing trends in the incidence of bleb-related infection in trabeculectomy
Poornima Rai1,
Aachal Kotecha1,2,3,
Konstantinos Kaltsos1,
Jonathan B Ruddle1,
Ian E Murdoch1,4,
Catey Bunce5,
Keith Barton1,2,4
1Glaucoma Service, Moorfields Eye Hospital NHS Foundation Trust, London, UK
2NIHR Biomedical Research Centre for Ophthalmology, Moorfields Eye Hospital NHS Foundation Trust, London, UK
3UCL Institute of Ophthalmology, London, UK
4Department of Epidemiology and International Eye Health, UCL Institute of Ophthalmology, London, UK
5Research Department, Moorfields Eye Hospital NHS Foundation Trust, London, UK
Correspondence to Keith Barton, Consultant Ophthalmologist, Glaucoma Service Director, Moorfields Eye Hospital, 162 City Road, London EC1V 2PD, UK; keith{at}keithbarton.co.uk
Aim To investigate the incidence of late onset bleb-related infection (BRI) following Mitomycin C (MMC) augmented trabeculectomy procedures at a single institution.
Methods This was a retrospective case series analysis of late onset BRI, defined as either blebitis or endophthalmitis occurring at least 1 month following a glaucoma filtration procedure. Data collected from hospital charts included the position of the conjunctival flap base. Two cohorts were examined: the first a sample of 194 intraoperative MMC augmented trabeculectomies undertaken over a 4-year period from 1993 to 1997, and the second a sample of 764 MMC trabeculectomies performed in a 4-year period between the years 1999 and 2005.
Results A total of 11 cases of BRI (cumulative incidence 5.7%) were identified in the cohort from 1993 to 1997. BRI cases had trabeculectomies performed with a limbus-based conjunctival flap and presented at a median IQR 14.8 (9.4–42.9) months after surgery. In the 1999–2005 cohort, nine cases of BRI were identified (cumulative incidence 1.2%). All these BRI cases had a fornix-based conjunctival flap and presented at a median IQR 19.2 (6.1–44.1) months after trabeculectomy surgery.
Conclusion This study found that the incidence of BRI was higher in MMC augmented trabeculectomy shortly after the introduction of MMC, but subsequently reduced to a lower level. While many changes in surgical technique had occurred in the intervening period, the most significant change was from limbus-based to fornix-based conjunctival flap. However, the retrospective nature of the study prevents the authors from concluding that there is a causative relationship between changes in surgical technique and BRI.
treatment medical
child health (paediatrics)
treatment surgery
http://dx.doi.org/10.1136/bjophthalmol-2011-300926
Funding Dr Kotecha and Dr Barton received a proportion of their funding from the Department of Health's National Institute for Health Research (NIHR) Biomedical Research Centre for Ophthalmology at Moorfields Eye Hospital NHS Foundation Trust and the UCL Institute of Ophthalmology.
© 2012, Published by the BMJ Publishing Group Limited. For permission to use (where not already granted under a licence) please go to http://group.bmj.com/group/rights-licensing/permissions.


The law office of Sims & Company is a general practice law firm with a diverse law practice in order to serve the needs of our community.
With experience in most areas of the law, our office's primary areas of focus are real estate, wills and estates, corporate & commercial and litigation. Clients should not hesitate to contact our office for assistance as all client matters are addressed on a case by case basis regardless of the area of law.


text:
Hours of Operation - Wayne Community College | Goldsboro, NC
Monday – Thursday: 7:45 a.m. – 5:30 p.m.
Friday: 8:00 a.m. – 1:00 p.m. (Closed during Summer Semester)
Monday – Thursday: 7:45 a.m. – 5:30pm
Friday: 7:45 a.m – 1pm (Closed during Summer Semester)
Located in the Erwin Library on the 3rd floor of the Wayne Learning Center building, room 322A.
Academic Testing Center
Mondays: 8:00am-11am; 1pm-7pm
Tuesdays: 8:00am-11am; 1pm-7pm
Wednesdays: 8:00am-11am; 1pm-7pm
Thursdays: 8:00am-11am; 1pm-7pm
Fridays: CLOSED
Located on the 2nd floor of the Wayne Learning Center building, room 216A.
Academic Testing Center / Non-Wayne Proctored Exams
Tuesday:2:00 p.m. – 7:00 p.m.
Wednesday: 3:30 p.m. – 7:00 p.m.
Accounting/Business Lab
Located on the 1st floor of the Spruce building, room 133.
Bison Bistro
Metz Kitchen
Monday – Thursday: 7:30 a.m. to 2:30 p.m.
Friday: 7:30 a.m. to 1:00 p.m.
Breakfast is served from 7:30 a.m. to 10:45 a.m.
"We Proudly Serve" Starbucks Coffee Kiosk
Friday: 7:30 a.m. to 10:30 a.m.
Located on the 1st floor of the Wayne Learning Center building.
View the menu.
M-TH 8:00 a.m. – 4:00 p.m
F 8:00 a.m. – 1:00 p.m
Exceptions for December 2022
College Transfer Advising Center
Located on the 1st floor of the Wayne Learning Center building, room 144A.
Dental Assisting Clinic
February – May
9:00 a.m. to 12:00 p.m. – Monday and Wednesday
May – End of July
9:00 a.m. to 12:00 p.m. – Tuesday – Thursday
Located on the 1st floor of the Holly building, room 101A.
August – December
9:00 a.m.to 12:00 p.m.
1:00 p.m. to 4:00 p.m. – Tuesday and Thursday
January – May
9:00 a.m. to 12:00 p.m. / 1:00 p.m.– 4:00 p.m. – Monday – Wednesday
9:00 a.m. to 12:00 p.m. – Thursday
May – June
9:00 a.m. to 12:00 p.m. / 1:00 p.m. – 4:00 p.m. – Tuesday and Thursday
9:00 a.m. to 12:00 p.m. – Wednesday
Tuesday – Thursday: 8:00 a.m. – 5:00 p.m
NOTE: Schedule is subject to change without notice due to staff availability and/or BLET training sessions. Also, staff and faculty can use the Fitness Center at any time, not just during open hours.
Located on the 2nd floor of the Azalea building, room 208.
Located on the 3rd floor of the Wayne Learning Center building.
Open Computer Lab
Located in the Erwin Library on the 3rd floor of the Wayne Learning Center building.
Supplemental Math Instruction
Currently, sessions scheduled in this room are by appointment only. To request an appointment, please complete this form. Please email any questions or concerns to wcc-asc@waynecc.edu.Please email wcc-asc@waynecc.edu for more information.
Located on the 2nd floor of the Wayne Learning Center building, room 250.
WorkKeys/Career Readiness Lab
Monday: 9:00 a.m. — 12:00 p.m. and 1:00 p.m. — 4:00 p.m.
Tuesday: 1:00 p.m. — 4:00 p.m. and 6:00 p.m. —9:00 p.m.
Thursday: 9:00 a.m. — 12:00 p.m. and 6:00 p.m. — 9:00 p.m.
Located on the 1st floor of the Walnut building, room 136.
Other Information related to About WCC
Growing Futures: A Brief History of the Institution
Vision Statement, Mission Statement, Core Values and Goals
WCC Facts


text:
Home > News & Advice > Culture & History > Cheerleader's Inspiring Fight With Cancer
Cheerleader's Inspiring Fight With Cancer
by Legacy Staff October 10, 2014
Breanna Lyn Bercegeay-Bertucci, 13, died this month after nearly 14 months fighting acute myeloid leukemia, a rare form of blood cancer. The Louisiana girl's struggle with the disease, chronicled on the Facebook group "Cheering for Breanna" inspired thousands to follow the ups and downs of her treatment and illness, as well as the daily business of being a young girl.
Her indomitable spirit and positive attitude raised funds for cancer research, her own treatment, and recognition of the danger that childhood cancers pose. But Breanna died Oct. 2, just two days after National Childhood Cancer Awareness Month ended, and now "Cheering for Breanna" chronicles her family's struggle to move on without her.
To see what others are saying about Breanna, leave your own message in her Guest Book, and share her life story with your own friends and family.
Best TributesCancerCourageous ChildrenDied in 2014Gone Too SoonInspirationLeukemiaLouisianaOctober 2Stories to Share
Legacy Staff
Legacy produces award-winning original content ranging from national news obituaries to features and FAQs on a wide variety of life-and-death topics.
Watch Legacy's Heartfelt Tribute to the Celebs Who...
Tiffini Hale (1975–2021), "All New Mickey Mouse Club"...
Watch Legacy's Heartfelt Tribute to the Celebs Who Died in 2021
Kangol Kid (1966–2021), pioneering rapper with UTFO


text:
Le grand-rabbin de France est la plus haute personnalité religieuse de la communauté juive française.
À ce titre, le grand-rabbin a une autorité morale sur l'ensemble des rabbins français, de même que celui de Paris dans la région parisienne, et ensemble ils représentent le culte juif vis-à-vis des autorités.

Fonctions
Le grand-rabbin de France est investi par le Consistoire central israélite de France des plus grands pouvoirs en matière religieuse et peut officier et prêcher dans toutes les synagogues membres du Consistoire.

Histoire
Lors de l'institution en 1808 du Consistoire central israélite de France, il est prévu trois grands-rabbins de France, le premier, le deuxième et le troisième grand-rabbin, lesquels sont des fonctionnaires nommés par un décret pris en Conseil d'État, sur proposition du Consistoire qui procède à leur élection. Napoléon  nomme David Sintzheim, alors président du Grand Sanhédrin, comme premier grand-rabbin du Consistoire central, avec Abraham Vita de Cologna et Emmanuel Deutz, respectivement deuxième et troisième grand-rabbin.
À partir de 1980, le grand-rabbin de France n'est plus élu que pour 7 ans.

Liste des grands-rabbins de France

Notes

Lien externe
 Le grand rabbinat sur le site du Consistoire central

rabbin
Grands Rabbins
Rabbin
France
Histoire des Juifs en France

redpajama_set_name: RedPajamaWikipedia


text:
Tara Vassefi (JD '16)
Tara is a lawyer and strategist who has spent her career learning from human rights defenders, journalists, archivists, and technologists about methods and approaches to optimizing the use of digital evidence for legal accountability and advocacy measures. She credits her exciting and fulfilling career to the War Crimes Research Office, where she began exploring this nexus of law, technology, and social impact through the Office's client work in the aftermath of the 2011 Arab Uprisings when no court had substantively weighed the evidentiary value of a YouTube video or Facebook post. After law school, she worked with WITNESS, a human rights documentation organization, focusing on Video as Evidence in the Middle East and North Africa. Following this foundational understanding of localized approaches to optimizing digital evidence, she expanded her work to include other innovative solutions and how they might be mindfully leveraged for human rights accountability, from blockchain to open source investigations to Computer Vision. While at UC Berkeley Law Schools Human Rights Center - Investigations Lab, she became particularly interested in authentication solutions and was later brought on as the Legal Scholar and Washington Director of Strategic Initiatives for Truepic, a tech startup specializing in digital image authentication. She left that position after learning key lessons about why technology has veered so far from its original promise of positive impact. She now continues her learning, casework, and strategizing alongside a wide range of partners from human rights advocates to tech companies to small businesses.


text:
package org.cleartk.ml.encoder.features;

import java.util.Collections;
import java.util.List;

import org.cleartk.ml.Feature;

/**
 *

 * Copyright (c) 2007-2008, Regents of the University of Colorado

 * All rights reserved.
 */

public class NumberEncoder implements FeatureEncoder<NameNumber> {

  private static final long serialVersionUID = -2672054364576304344L;

  public List<NameNumber> encode(Feature feature) {
    String name = feature.getName();
    Number number = (Number) feature.getValue();

    return Collections.singletonList(new NameNumber(name, number));
  }

  public boolean encodes(Feature feature) {
    return feature.getValue() instanceof Number;
  }

}


It turned out that the parts of control stick (Parts No. K41) may interfere with the seat depending on the way of constructing and may cause difficulties to be set.
Therefore, we have improved the parts as of 27th September.
We are sorry indeed for the trouble very much and apologize for the inconveniences.
Please contact our customer support when you feel the difficulties.
We offer the improved parts free of charge upon your request.


text:
<!DOCTYPE html>

    <meta charset="utf-8">
    <title>Stencil - Unit Test</title>
    <link rel="stylesheet" href="qunit-1.20.0.css">

                <stencil id="autoSimple">

{{contents}} - {{lpIdx}} - {{ctIdx}}

                </stencil>

            <stencil id="autoNested">

                    <stencil id="autoNestedChild">

{{contents}} - {{lpIdx}} - {{ctIdx}}

                    </stencil>

            </stencil>

            <stencil id="specificTag">
                {{contents}}
            </stencil>

            <stencil id="specificWithDest">
                {{contents}}
                <stencil id="specificWithDestChildContainer">

                            <stencil id="specificWithDestChild">

{{contents}} - {{lpIdx}} - {{ctIdx}}

                            </stencil>

                </stencil>
            </stencil>

Test content

            <stencil id="specificInner" data-stencil-childs="specificInnerChild1 specificInnerChild2">
                {{contents}}

                    {{ctIdx}}. {{contents}}

                    {{ctIdx}}. {{contents}}

            </stencil>

            Test content Head
            <stencil id="definedOutput" data-stencil-childs="selectOptions">
                {{contents}}
                <select id="selectOptions" data-stencil-selector="select.selectThis">
                    <option>{{value}}</option>
                </select>
            </stencil>
            Test content Tail

            <stencil id="toBeCloned">
                {{contents}}
                <stencil id="toBeClonedChildContainer">

                            <stencil id="toBeClonedChild">

{{contents}} - {{lpIdx}} - {{ctIdx}}

                            </stencil>

                </stencil>
            </stencil>

            <stencil id="simpleRender">
                {{contents}}
            </stencil>

            <stencil id="deepRender">
                {{first.second[contents]}}
            </stencil>

            <stencil id="nestedRender">
                {{nested{{appended{{lpIdx}}}}}}
            </stencil>

            <stencil id="noDataRender">
                {{first.second.contents}}
            </stencil>

            <stencil id="blankRender" style="display:none">
                {{contents}}
            </stencil>

Test content

Test content

Test content

Test content

            <stencil id="complexRender">
                {{contents}}
                <stencil id="complexRenderChildContainer">
                      lpIdx: {{lpIdx}}

                            <stencil id="complexRenderChild">

{{contents}} - lpIdx: {{lpIdx}} - ctIdx: {{ctIdx}}

                            </stencil>

                </stencil>
            </stencil>

Test content

Test content

            <stencil id="specificChildRender" data-stencil-childs="specificChildRenderChild1 specificChildRenderChild2" data-stencil-destination="#specificChildRenderOutput">
                {{contents}}

                    {{contents}}

                    {{contents}}

            </stencil>

            Test content Head
            <stencil id="definedOutputRender" data-stencil-childs="renderSelectOptions">
                {{contents}}
                <select id="renderSelectOptions" data-stencil-selector="select.selectThis">
                    <option value="{{value}}">{{value}}</option>
                </select>
            </stencil>
            Test content Tail

            <stencil id="attributeChildStencilRender" data-stencil-destination="#attributeChildStencilTest">

{{content}} - {{lpIdx}}

                <stencil id="innerStencil" data-stencil-childs="ddl{{lpIdx}}">
                    <select id="ddl{{lpIdx}}">
                        <option>{{item}} - {{lpIdx}}</option>
                    </select>
                </stencil>
            </stencil>

            <stencil id="deepNestedChildStencilRender" data-stencil-childs="tableRow" data-stencil-destination="#deepNestedChildStencilTest">

                                {{cellData}}

            </stencil>

            <stencil id="htmlEscapeStencilRender" data-stencil-destination="#htmlEscapeStencilTest">

Forced Unescaped

{{content/noEsc}}

Forced Escaped

{{content/esc}}

Flag on undefined variable

{{undef/esc}}

Default HTML escaping

{{content}}

            </stencil>

            <stencil id="imgsrcStencilRender" data-stencil-destination="#imgsrcStencilTest">

            </stencil>

            <stencil id="recursiveListRender">

                    Title: {{title}}
                    <stencil id="list">

                            <stencil id="listItem">

{{content}}

                                <stencil data-stencil-recurse="list"></stencil>
                            </stencil>

                    </stencil>

            </stencil>


text:
Simmons leads way in race for rookie gong
By DPA
With 10 days left in the NBA regular season, play-off seeding in both conferences is still very much up for grabs. The Rookie of the Year race, however, is over.
Australian Ben Simmons of the Philadelphia 76ers and Donovan Mitchell of the Utah Jazz have been jockeying for top rookie honours all season. Simmons received most of the attention early on before Mitchell surged in the middle of the campaign.
Both 21-year-olds have assumed leadership on their teams, both are guiding teams to unexpected play-off berths and both appear in nightly highlights packages.
But over the past several weeks, Simmons has elevated his game to a level not seen from a rookie since perhaps Magic Johnson, nearly 40 years ago.
"It's getting a lot easier reading the plays and how guys will play with me and how they cut, where they want to get their shots from," Simmons said after collecting 20 points, 15 assists and eight rebounds in Sunday's win at Charlotte.
The 76ers (46-30) have won 21 of their past 26 games, including 10 in a row during which Simmons is averaging a triple-double - 13.2 points, 11.8 assists and 10.1 rebounds - while shooting 57 per cent from the field.
In the past nine games, the Sixers have eclipsed 30 assists, the fourth-longest streak in NBA history. And they have been doing it short-handed.
All-Star centre Joel Embiid of Cameroon has missed the past two games with a fractured orbital bone. On Sunday, scoring forward Dario Saric of Croatia sat out with a shoulder injury.
Sixers coach Brett Brown sees Simmons assuming more leadership for a young team that hasn't experienced much recent success.
"I think his growth is certainly expedited when he looks over and our All-Star isn't there," Brown said.
"His presence, his disposition and lately even more his voice I think reeks of leadership."
Simmons has 11 triple-doubles, third behind only LeBron James (17) and Russell Westbrook (24). Among rookies, he is third in scoring (15.8) and leads in rebounding (8.0), assists (8.2), steals (1.7) and double-doubles (35).
Mitchell leads all rookies with 20.3 points for the Jazz (44-33), who are close to clinching a play-off berth.
However, he has zero double-doubles and simply does not have the same all-round skills as Simmons.
Brown said he has enjoyed watching Simmons grow into a leader.
"He isn't a man of many words and it's fine. Everybody leads in different ways," he said.
"But when he's got something to say, he says it and people hear that.
"And then he's able to lead through example a lot, which certainly helps the package."
©DPA2018
More NBA news
Simmons triple-double, 76ers nine straight
LeBron James may leave Cleveland Cavaliers over Donald Trump


text:
VPCC Season Tickets Available for 43rd Season
14 Jan VPCC Season Tickets Available for 43rd Season
Posted at 17:58h in News, World Series of Bicycling	by	Janet Atkinson
TREXLERTOWN, Pa. – On Monday morning, the Valley Preferred Cycling Center opened up its 2018 season ticket program, which grants fans access to the World Series of Bicycling and other VPCC events.
VPCC's season tickets are used for the World Series of Bicycling, the premier professional racing series in T-Town. Both season ticket packages give fans access to all WSB events, as well as admission into other events.
Fans can now renew 2017 finish line seats or purchase new finish line or general admission seats. Previous year season ticket holders received an e-mail last week with instructions on how to renew for 2018.
Season ticket pricing and packages remain the same from last year. The Finish Line Season Ticket includes a reserved seat to all 2018 World Series of Bicycling events, early admission into both 2018 VeloFests and other perks. That package is $80 and can be purchased here.
The General Admission Season Ticket includes admission into all 2018 World Series of Bicycling events and admission into both 2018 VeloFests. That package is $50 and can be purchased here.
There also is a Junior Season Ticket package, which is for either finish line or general admission. That season ticket is $20 and includes admission into both 2018 VeloFests. To purchase a junior season ticket, e-mail tickets@thevelodrome.com.
All season ticket packages include admission into the ticketed sessions of the 2018 USA Cycling Junior and Masters National Championships in July.
The only way to reserve a seat on the front straight grandstand is to become a VeloClub Finish Line Season Ticket holder. At all World Series of Bicycling events, the finish line grandstand will be "festival seating," like the back straight grandstand, where seats are first come, first serve.
A seat that belongs to a season ticket holder will be marked as reserved on the grandstand. On event nights, single ticket holders must concede a reserved seat to that seat's season ticket holder. Seats which are not reserved are open to anyone on event night.
Season tickets are on sale until May 14. The 2018 World Series of Bicycling schedule and the dates for the 2018 VeloFests are to be announced in the coming weeks.


text:
Q: Using Quotes with Commands in Scala Shell Scripting Trying to utilize the following command in scala bash file (sys.process._ has been imported):
val writeToLine5 = "sed -i '5a some text' to.file".!

the following error emerges:
> "sed: -e expression #1, char 1: unknown command: `'';

The command itself works perfect in command line.
Have tried also:
"""sed -i "5a adding some text to" file.text""".!;
"sed -i \'5a adding some text to\' file.text".!;

Is there any scala shell scripting specialist here? Thank you!
PS: have asked on askubuntu.com. They have suggested to ask here.

A: The interpretation of the ' character is done by the shell, not by sed itself, so it's usually easiest to ask the shell to do it for you.
import sys.process._

val writeToLine5 = Seq("sh", "-c", "sed -i '5a some text' to.file").!

But you can do the interpretation yourself.
val writeToLine5 = Seq("sed", "-i", "5a some text", "to.file").!

You could also use a Regex pattern to interpret the internal quotations, but it's error prone and I really don't recommend it.
val cmd = "sed -i '5a some text' to.file"
val res = cmd.split(""" +(?=([^'"]*['"][^'"]*['"])*[^'"]*$)""") //split on non-quoted spaces
             .map(_.replaceAll("['\"]",""))  //remove all the internal quote marks
             .toSeq.!


Ryken Studio's myTube Beta got an update today. It has been one of the best and popular 3rd party YouTube apps in the store. myTube Beta a.k.a. myTube 2.0 is currently in development and its developer is writing the app for Windows 10.
– Updated TV Mode design. This will likely be the final style for it (though the layout could still change).
The update is available for both PC and Mobile devices. If you already have the app, just head to the Window Store to grab the update or click the link below.


Education is a booming market for startups right now. In fact, EdSurge estimates that there was $1.36 billion raised in education funding in 2014, and $1.85 billion in 2015. Clearly, there's opportunity—but education technology is also becoming a crowded market.
From a teacher's perspective, a crowded market is bad for startups because there are so many different products, and it's hard for me, a user, to keep track of them all! Their names all sound exactly alike (or like Pokemon). One only needs to reference EdSurge's Technology Index to see what I mean. In 2014-2015, I used 22 different tools in my classroom with my students. (Let's be honest—you can't expect individual educators to use much more.) Yet, I didn't even begin to scratch the surface of what is available out there.
So, how do you get your product noticed? How do you get to be one of those 22? There are certain things that I know work when companies try to get my attention. Thus, here are my three insider tips—from yours truly, a classroom teacher—on how you can market better to me, and make it more likely that I will notice your product.
I know that the goal of your education startup is to ship your product as soon as possible. You want to get your minimum viable product (MVP) to market, right? Get your first mover advantage?
If you are shipping in 6 months, spend those 6 months building your audience.
That is fine and all, but what happens when it goes to market and no one is interested? In those cases, you have to scramble to gain traction.
Why not do gain traction before you ship? For instance, if you are building your tool to solve student engagement, start up a blog. Once you have your blog, start pushing out helpful content. This is going to begin the process of relationship building with educators.
If you are shipping in 6 months, spend those 6 months building your audience. If you are a solopreneur, find a blog writer at UpWork, or recruit a teacher writer via Twitter. With this, you will build a better product and have an audience ready when you ship. I know that I personally am more likely to use a product from a brand that I already trust—one that is already helping me.
Here is a secret about conferences: if your product's name sounds like a lovechild between a song in Mary Poppins and an augmented reality device, I am probably not going to approach your table. What do you expect? Do you imagine that I'll be curious about your company if you've got a really odd name that I can't pronounce? Is that really how you expect interactions to start?
Reverse the approach of most big names. Everyone knows Google, and no one knows you. But everyone has needs to be met.
At conferences, I am already focused on seeing the one or two companies that currently play a large role in my teaching. Thus, the problem. Conference vendor tables are usually approached by two groups: current users, or those brought there by recommendation. In my experience, few educators are casually interested in products they've never heard of.
So, if you are a brand new startup, you have a very low likelihood of being noticed. How can you get around this?
Reverse the approach of most big names. Everyone knows Google, and no one knows you. But everyone has needs to be met. Instead of posting your company name in huge letters, make your value proposition clear. Post the solution you offer. It really doesn't matter what your name is—I care about what problem you can solve.
It seems that there is this barrier at conferences whereby companies feel they can't attend sessions. It reminds me of a middle school dance where everyone stands on the sidelines. Manning your booth is fine. You already paid for it, right? But the problem is if that is the only thing you do. I am less likely to pay attention to your booth as I rush to my next session.
So, how can you approach educators at conferences? Attend sessions! Don't take the booth as your sole opportunity to sell your wares. Instead, honestly try to find out what educators are concerned with. Get into the rooms where sessions are happening and talk with the people next to you. So much in education happens because of word-of-mouth.
Discussions that happen during sessions are better than any consumer survey. They are a true glimpse into the realities and concerns of everyday educators.
Discussions that happen during sessions are better than any consumer survey. They are a true glimpse into the realities and concerns of everyday educators. In addition, you can introduce yourself and your company, exchange cards, and then move onto the next session. I am much more likely to check out a website after a nice conversation in a session than I am if you casually hand me a pen from your booth as I walk by.
I want you and your product to succeed. I believe that the future of education is tied to successful edtech startups. I can understand how difficult it can be to try and build a product and audience. I would much rather do business with a company I know and trust rather than with the new generic startup . You don't have to wait to be Google to start the process of building that relationship. Start building trust now, and the money and users will soon follow.
MJ Linane (@LinaneJr) is a high school teacher at Old Rochester Regional School in Mattapoisett, Massachusetts.


text:
Q: Why should I overload a procedure? Why not add a procedurename? I've been overloading procedures for some time now, but recently asked myself what the actual advantage is in comparison to just adding a procedure with a slightly different name.
So basically, why should I use
Public Void DoSomething(Int FirstParam, String SecondParam)
Public Void DoSomething(String FirstParam, String SecondParam)

in stead of
Public Void DoSomething(Int FirstParam, String SecondParam)
Public Void DoSomething_V2(String FirstParam, String SecondParam)

If anything, a different procedure name actually might make it less confusing to see which procedure is called.

A: That is because you don't have to keep inventing the names. To make the function more easy for others to recognise that it takes two strings, you will have to name the same function like DoSomething_TwoStrings.
If there is another function that takes one string and one int, you will have to name it like DoSomething_String_Int.
What if the order of the elements is to be changed and created into another function? If you choose to name your procedures as V2 and V1 etc., this will create another layer for users to remember. What does V2 take as input, and what about V1. This all creates hundreds of more names than a user really has to remember if you don't use overloading.
Your program will also be clear due to having less vocabulary and smaller function names. Once you know that IDE will clearly give you intellisense as to all the overloads and you can choose what you want, it is a piece of cake to use overload and is lot less cluttery.

A: Will you remember, when you're writing code a few months from now, that DoSomething_V2 was the one that took two String parameters? V2 is a spectacularly bad name.
Now if you're asking why not name them sensibly, then you get from new File(...) to File.getInstanceFromParentFileAndChildString(File parent, String child), File.getInstanceFromPathString(String path), File.getInstanceFromParentAndChildStrings(String parent, String child) and File.getInstanceFromURI(URI uri).
This is the way Objective C went, and one of the biggest complaints from newcomers to the language is its amazing verbosity.


This creative page allows you to add captions to photographs you have uploaded or found on an online site such as Flickr. A collection of your own photos uploaded to Flickr can be used easily.
Locate and upload digital image files or an URL for specific images. Navigate the tools of Captioner by following the simple directions. Monitor the "appropriateness" of images available on Flickr/the web. You might want to specify a tag or collection to work from for some classes. Upload your own set of digital images to Flickr ahead of time. Share also by downloading image to your desktop.
Create a captioned sequence to explain a major concept, such as mitosis or narrative patterns. You could also have students create campaign ads, posters of important people, etc. Have an object explain a concept from its point of view (solar panel tells about itself), have a famous person explain his invention or accomplishment, show what a non-verbal creature or object, such as a cell, is thinking.


Memories: As with numerous other big names in the industry at the end of the 1970s and the dawn of 1980, pinball maker Stern's angle of entry into the burgeoning video game business was a remix of Taito's Space Invaders. Yes, even the company who brought us Berzerk and Frenzy – as well as numerous licensed imports from Konami, among others – rode Taito's coattails into the video game business.
Astro Invader is a decent reworking of the basics of Space Invaders, reformatting the game significantly enough that one might not think it's a knockoff until the telltale unchanged Space Invaders sound effects kick in. It's essentially Space Invaders reshaped into a literal shooting gallery, with new targets emerging through chutes and waiting patiently to be destroyed until then. Stern gets credit for bashing together a custom mothership graphic, sitting at the top of the screen, emblazoned with the company's name throughout.
Stern would make a much larger dent in the industry with original fare, starting with Berzerk, though it also found a lucrative sideline in bringing imports such as Scramble and Super Cobra from Japan to the U.S.; by not insisting on basing its entire catalogue on either imports or in-house originals, Stern was able to thrive in the unfamiliar new industry that threatened to dislodge pinball from its throne.
But perhaps Stern has had the last laugh after all. Astro Invader smacks of a reluctant step into a video game industry that the pinball makers might otherwise have avoided. As of 2014, Stern is the only American pinball maker still in business (its web page boasts that it is the only remaining manufacturer of new pinball machines in the world), having outlasted most of its pinball-table-making rivals and much of its 1980 video game industry competition as well.


Additionally or alternatively, where can I find on-line reviews of these works?
David Bartholomew's view is that God uses chance.
The central message of God of Chance is ... that chance has to be seen as within the Providence of God. It is not something which requires the abolition of theism nor is it an illusion. We increasingly use chance as a tool in scientific work and it would surely be surprising if God had not got there before us.
Do miracles happen? Is the Bible true? What about the paranormal? Does God exist? The underpinning of belief have crumbled in a world where science sets the standard of what is true; people continue to ask these questions but there are no agreed upon answers. At the rational level, uncertainty is inevitable. Probability theory provides the tools for measuring and combining uncertainties and, thus, the key to progress. Assessing the state of the argument from a probabilistic perspective is long overdue. In Uncertain Beliefs, David J. Bartholomew examines and refutes some of the more extravagant claims, evaluates the weight of some of the quantitative evidence, and provides an answer to the fundamental question: is it rational to be a Christian?
Scientific accounts of existence give chance a central role. At the smallest level, quantum theory involves uncertainty and evolution is driven by chance and necessity. These ideas do not fit easily with theology in which chance has been seen as the enemy of purpose. One option is to argue, as proponents of Intelligent Design do, that chance is not real and can be replaced by the work of a Designer. Others adhere to a deterministic theology in which God is in total control. Neither of these views, it is argued, does justice to the complexity of nature or the greatness of God. The thesis of this book is that chance is neither unreal nor non-existent but an integral part of God's creation. This view is expounded, illustrated and defended by drawing on the resources of probability theory and numerous examples from the natural and social worlds.
Not the answer you're looking for? Browse other questions tagged science philosophy resource-request or ask your own question.
What defence can be made for Christian anthropocentrism?
Where can I find the original scanned BCP printed in 1662?
How can I find and read Alpha News?
Where can I download the Antwerp and Paris Polyglot Bibles in PDF form?