text:
import * as mocha from "mocha";
import * as mochaCommon from "mocha/lib/interfaces/common";
import * as mochaSuite from "mocha/lib/suite";
import chalk from "chalk";

import { MochaTest } from "./MochaTest";

import * as model from "./model";
import { LiveDoc } from "./livedoc";
import { LiveDocContext } from "./LiveDocContext";
import { ScenarioOutlineContext } from "./model/ScenarioOutlineContext";
import { LiveDocGrammarParser } from "./parser/Parser";
import { LiveDocSuite } from "./model/LiveDocSuite";
import { RuleViolations } from "./model/RuleViolations";
import { LiveDocRuleViolation } from "./model/LiveDocRuleViolation";
import { LiveDocRuleOption } from "./LiveDocRuleOption";
import { ExecutionResults } from "./model/ExecutionResults";
import { StepContext } from "./model/StepContext";
import { LiveDocOptions } from "./LiveDocOptions";

const liveDocGrammarParser = new LiveDocGrammarParser();
(global as any).livedoc = new LiveDoc();

function resetGlobalVariables(context) {
    // initialize context variables
    context.featureContext = undefined;
    context.scenarioContext = undefined;
    context.stepContext = undefined;
    context.backgroundContext = undefined;
    context.scenarioOutlineContext = undefined;
}

// Polyfils
if (!String.prototype.startsWith) {
    String.prototype.startsWith = function (searchString, position) {
        position = position || 0;
        return this.substr(position, searchString.length) === searchString;
    };
}

if (!String.prototype.endsWith) {
    String.prototype.endsWith = function (searchString, position) {
        var subjectString = this.toString();
        if (typeof position !== 'number' || !isFinite(position) || Math.floor(position) !== position || position > subjectString.length) {
            position = subjectString.length;
        }
        position -= searchString.length;
        var lastIndex = subjectString.lastIndexOf(searchString, position);
        return lastIndex !== -1 && lastIndex === position;
    };
}

/**
 * Used to initialize the livedoc context for a new Feature
 *
 * @param {Mocha.ISuite} suite
 * @param {Feature} feature
 * @param {string} type
 * @returns {LiveDocContext}
 */
function addLiveDocContext(suite: Mocha.ISuite, feature: model.Feature, type: string): LiveDocContext {
    const livedoc = new LiveDocContext();
    livedoc.type = type;
    livedoc.parent = (suite.parent as any).livedoc;
    livedoc.feature = feature;
    (suite as any).livedoc = livedoc;

    // Record the Feature with the root level Execution Results
    if (type === "Feature") {
        // add the feature to the Execution results or create one if not done so
        const parent = (suite.parent as any);
        if (parent.title === "") {
            // the suites parent is the root suite
            if (!parent.livedocResults) {
                parent.livedocResults = new ExecutionResults();
            }

            // Add feature to the results
            parent.livedocResults.addFeature(feature);
        } else {
            throw new model.ParserException("Feature not a child of the root suite.", feature.title, feature.filename)
        }
    }
    return livedoc;
}

/**
 * Used to initialize the livedoc bdd context for a new Describe
 *
 * @param {mocha.ISuite} suite
 * @param {model.MochaSuite} mochaSuite
 * @param {string} type
 * @returns {BddContext}
 */
function addBddContext(suite: mocha.ISuite, mochaSuite: model.MochaSuite): model.MochaSuite {
    (suite as any).livedoc = mochaSuite;

    // add the describe to the Execution results or create one if not done so
    const parent = (suite.parent as any);
    if (parent.root) {
        // Add feature to the results
        parent.livedocResults.addSuite(mochaSuite);
    } else {
        // this is a child describe so add to the parents children instead
        parent.livedoc.children.push(mochaSuite);
    }

    return mochaSuite;
}

/** @internal */

export function liveDocMocha(suite) {
    var suites = [suite];

    // For the root suite, we also need to add tracking objects
    // its necessary to do here as the root suite doesn't get processed by suite.on
    if (suite.root) {
        const rootSuite = new model.MochaSuite(null, "root", "describe");
        (suite as any).livedoc = rootSuite;
        // the suites parent is the root suite
        suite.livedocResults = new ExecutionResults();
        // add the root suite to the results
        (suite.livedocResults as ExecutionResults).addSuite(rootSuite);
    }

    suite.on('pre-require', function (context, file, mocha) {

        const deepMerge = function (target: Object, source: Object): Object {
            Object.keys(source).forEach(key => {
                const targetValue = target[key];
                if (targetValue) {
                    if (typeof targetValue === "object") {
                        target[key] = deepMerge(targetValue, source[key]);
                    } else {
                        target[key] = source[key];
                    }
                } else {
                    target[key] = source[key];
                }
            });
            return target;
        }

        // Apply options
        // Add the options to the mocha instance and then only process again if they've not been set
        if (!mocha.livedocInitialized) {
            mocha.livedocInitialized = true;
            let livedocOptions: LiveDocOptions;

            // Report options/filters/rules can be set using the following options
            // 1. setting in code
            // 2. setting via mocha options
            // 3. setting via command line

            if (mocha.options.livedoc && mocha.options.livedoc.isolatedMode) {
                livedocOptions = deepMerge(new LiveDocOptions, mocha.options.livedoc) as LiveDocOptions;
            } else {
                // Migrate options set in code
                livedocOptions = deepMerge(new LiveDocOptions(), (global as any).livedoc.options) as LiveDocOptions;
                // Migrate options passed via mocha.options
                if (mocha.options.livedoc) {
                    // deep merge options passed via mocha.options
                    livedocOptions = deepMerge(livedocOptions, mocha.options.livedoc) as LiveDocOptions;
                }

                // Command line filters are additive and do not replace any existing filters
                livedocOptions.filters.include.push(...getCommandLineOptions("--ld-include"));
                livedocOptions.filters.exclude.push(...getCommandLineOptions("--ld-exclude"));
                const postReporters = getCommandLineOptions("--ld-reporters");
                if (postReporters && postReporters.length > 0) {
                    postReporters.forEach(reporter => {
                        livedocOptions.postReporters.push(require(reporter));
                    });
                }
                livedocOptions.filters.showFilterConflicts = getCommandLineOption("--showFilterConflicts") || livedocOptions.filters.showFilterConflicts

            }

            if (livedocOptions.filters.include.length > 0 || livedocOptions.filters.exclude.length > 0) {
                mocha.options.hasOnly = true
            }

            // update the option values with the new options
            mocha.options.livedoc = livedocOptions;
            // Assign the global to the mocha instance, but need to make a copy so as not to
            // affect the existing global version
            mocha.livedoc = Object.assign(new LiveDoc(), (global as any).livedoc);
            mocha.livedoc.options = livedocOptions;
        }

        const commonInterfaces = require('mocha/lib/interfaces/common')(suites, context, mocha);
        context.run = mocha.options.delay && mochaCommon.runWithSuite(suite);

        var describeAliasBuilder = createDescribeAlias(file, suites, context, mocha, mochaCommon);
        var stepAliasBuilder = createStepAlias(file, suites, mocha, mochaCommon);

        context.after = commonInterfaces.after;
        context.afterEach = commonInterfaces.afterEach;
        context.before = commonInterfaces.before;
        context.beforeEach = commonInterfaces.beforeEach;

        context.afterBackground = function (fn: any) {
            // Assign the background to the parent ie Feature so it can be accessed by
            // the Features scenarios.
            suites[0].parent.livedoc.afterBackground = fn;
        };

        context.feature = describeAliasBuilder('Feature');
        context.scenario = describeAliasBuilder('Scenario');
        context.describe = describeAliasBuilder('describe');
        context.context = describeAliasBuilder('context');
        context.background = describeAliasBuilder('Background');
        context.scenarioOutline = describeAliasBuilder('Scenario Outline');

        context.given = stepAliasBuilder('Given');
        context.when = stepAliasBuilder('When');
        context.then = stepAliasBuilder('Then');
        context.and = stepAliasBuilder('and');
        context.but = stepAliasBuilder('but');
        context.it = stepAliasBuilder('it');

        // livedoc globals
        let sc: StepContext;
        context.featureContext;
        context.scenarioContext = sc;
        context.stepContext;
        context.backgroundContext;
        context.scenarioOutlineContext;
    });
}

function getCommandLineOptions(key: string): string[] {
    const args = process.argv;
    for (let i = 0; i < args.length; i++) {
        if (args[i] === key) {
            return args[i + 1].split(" ");
        }
    }
    return [];
}

// Used to determine if a command option is present
function getCommandLineOption(key: string): boolean {
    const args = process.argv;
    for (let i = 0; i < args.length; i++) {
        if (args[i] === key) {
            return true
        }
    }
    return null;
}

/** @internal */
function createStepAlias(file, suites, mocha, common) {
    return function testTypeCreator(type) {
        function testType(title: string, stepDefinitionFunction?: Function, passedParam?: object | Function) {
            var suite, test;
            let testName: string;

            // Refactor so that only place adds the test see describe
            // skipped tests are not working because the test is not being added
            let stepDefinition: model.StepDefinition;
            suite = suites[0];

            const livedocContext = suite.livedoc as LiveDocContext;
            const suiteType = livedocContext && livedocContext.type;
            let stepDefinitionContextWrapper = stepDefinitionFunction;

            if (isLiveDocType(type)) {
                if (suite._beforeAll.length > 0) {
                    livedocContext.scenario.addViolation(RuleViolations.enforceUsingGivenOverBefore, `Using before does not help with readability, consider using a given instead.`, title);
                }

                stepDefinition = liveDocGrammarParser.createStep(type, title, passedParam);
                if (suiteType === "Background") {
                    livedocContext.feature.background.addStep(stepDefinition);
                } else if (suiteType === "Scenario" || suiteType === "Scenario Outline") {
                    livedocContext.scenario.addStep(stepDefinition);
                    // For Scenario Outlines add the steps to the outline as well as the examples
                    if (suiteType === "Scenario Outline" && (livedocContext.scenario as model.ScenarioExample).sequence === 1) {
                        (livedocContext.scenario as model.ScenarioExample).scenarioOutline.steps.push(stepDefinition);
                    }
                } else {
                    const filename = mocha.filename;
                    throw new model.ParserException(`Invalid Gherkin, ${type} can only appear within a Background, Scenario or Scenario Outline`, title, filename);
                }

                testName = stepDefinition.displayTitle;
                livedocContext.step = stepDefinition;
                displayWarningsInlineIfPossible(livedocContext, stepDefinition, mocha.options.livedoc, mocha);
                if (stepDefinitionFunction) {
                    stepDefinitionContextWrapper = async function (...args) {
                        displayWarningsInlineIfPossible(livedocContext, stepDefinition, mocha.options.livedoc, mocha);
                        (global as any).featureContext = livedocContext.feature.getFeatureContext();
                        switch (livedocContext.type) {
                            case "Background":
                                (global as any).backgroundContext = livedocContext.feature.getBackgroundContext();
                                break;
                            case "Scenario":
                                (global as any).scenarioContext = livedocContext.scenario.getScenarioContext();
                                break;
                            case "Scenario Outline":
                                (global as any).scenarioOutlineContext = livedocContext.scenario.getScenarioContext() as ScenarioOutlineContext;
                                break;
                        }

                        // if the step has passed params then evaluate them now just prior to execution
                        liveDocGrammarParser.applyPassedParams(stepDefinition);

                        // If the type is a background then bundle up the steps but don't execute them
                        // they will be executed prior to each scenario.
                        if (livedocContext.type == "Background") {
                            // Record the details necessary to execute the steps later on
                            const stepDetail = { func: stepDefinitionFunction, stepDefinition: stepDefinition };
                            // Have to put on the parent suite as scenarios and backgrounds are at the same level
                            suite.parent.livedoc.backgroundSteps.push(stepDetail);
                        } else {
                            if (livedocContext.scenarioId != 1 &&
                                suite.parent.livedoc.backgroundSteps && !livedocContext.backgroundStepsComplete) {
                                // Mark the background as complete for this scenario. This must be done first incase a step throws an exception
                                livedocContext.backgroundStepsComplete = true;
                                // set the background context
                                (global as any).backgroundContext = livedocContext.feature.getBackgroundContext();
                                for (let i = 0; i < suite.parent.livedoc.backgroundSteps.length; i++) {
                                    const stepDetails = suite.parent.livedoc.backgroundSteps[i];
                                    // reset the stepContext for this step
                                    (global as any).stepContext = stepDetails.stepDefinition.getStepContext();
                                    const result = stepDetails.func();
                                    if (result && result["then"]) {
                                        await result;
                                    }
                                }
                            }
                        }
                        // Must reset stepContext as execution of the background may have changed it
                        (global as any).stepContext = stepDefinition.getStepContext();

                        return stepDefinitionFunction(args);
                    }
                }
            } else {
                // Check if the type is a bdd type
                if (isLiveDocType(livedocContext.type)) {
                    throw new model.ParserException(`This ${livedocContext.type} is using bdd syntax, did you mean to use given instead?`, title, file);
                }

                // Some other Bdd language
                const bddContext = (livedocContext as any) as model.MochaSuite;
                const bddTest = new model.LiveDocTest(bddContext, title);
                testName = bddTest.title;
                livedocContext.step = bddTest;
                bddContext.tests.push(bddTest);
                if (stepDefinitionFunction) {
                    stepDefinitionContextWrapper = async function (...args) {
                        displayWarningsInlineIfPossible(livedocContext, null, mocha.options.livedoc, mocha);
                        return stepDefinitionFunction(args);
                    }
                }
            }

            if (suite.isPending()) {
                // Skip processing test function if the suite is marked to skip
                stepDefinitionContextWrapper = null;
            }
            test = new MochaTest(testName, stepDefinitionContextWrapper, stepDefinitionFunction);
            test.file = file;
            test.step = livedocContext.step;
            suite.addTest(test);

            return test;
        }

        (testType as any).skip = function skip(title) {
            testType(title);
        };

        (testType as any).only = function only(title, fn) {
            return common.test.only(mocha, testType(title, fn));
        };

        return testType;
    };

}

function displayWarningsInlineIfPossible(livedocContext: LiveDocContext, stepDefinition: model.StepDefinition, livedocOptions: LiveDocOptions, mocha: any) {
    // if the parent has a rule violation report it here to make it more visible to the dev they made a mistake
    if (livedocContext && livedocContext.scenario) {
        livedocContext.scenario.ruleViolations.forEach(violation => {
            displayRuleViolation(livedocContext.feature, violation, livedocOptions, mocha);
        });
    }
    if (livedocContext && livedocContext.feature) {
        livedocContext.feature.ruleViolations.forEach(violation => {
            displayRuleViolation(livedocContext.feature, violation, livedocOptions, mocha);
        });
    }

    if (stepDefinition) {
        stepDefinition.ruleViolations.forEach(violation => {
            displayRuleViolation(livedocContext.feature, violation, livedocOptions, mocha);
        });
    }
}

const displayedViolations = {};
function displayRuleViolation(feature: model.Feature, e: LiveDocRuleViolation, livedocOptions: LiveDocOptions, mocha: any) {
    let option: LiveDocRuleOption;
    if (displayedViolations[e.errorId]) {
        // Already displayed this error, so no need to do it again
        return;
    }

    const outputMessage = `${e.message} [title: ${e.title}, file: ${feature && feature.filename || ""}]`;
    option = livedocOptions.rules[RuleViolations[e.rule]];
    if (option === LiveDocRuleOption.warning) {
        // Only output the warning if using the default Spec reporter, livedoc reporters will handle it differently
        if (mocha._reporter.name === "Spec") {
            displayedViolations[e.errorId] = "X";
            console.error(chalk.bgYellow.red(`WARNING[${e.errorId}]: ${outputMessage}`));
        }
    } else if (option === LiveDocRuleOption.enabled) {
        throw e;
    }
}

function isLiveDocType(type: string): boolean {
    switch (type) {
        case "Feature":
        case "Scenario":
        case "Scenario Outline":
        case "Background":
        case "Given":
        case "When":
        case "Then":
        case "and":
        case "but":
            return true;
        default:
            return false;
    }
}

/** @internal */
function createDescribeAlias(file, suites, context, mocha, common) {
    return function wrapperCreator(type) {
        function wrapper(title: string, fn: Function, opts: { pending?: boolean, isOnly?: boolean } = {}) {
            let suite: mocha.ISuite;

            const filenameToRecord = file.replace(/[\\]/g, "/");
            switch (type) {
                case "Feature":
                case "Scenario":
                case "Scenario Outline":
                case "Background":
                    let livedocContext: LiveDocContext;
                    let feature: model.Feature;
                    let suiteDefinition: LiveDocSuite;

                    switch (type) {
                        case "Feature":
                            resetGlobalVariables(context);
                            feature = liveDocGrammarParser.createFeature(title, filenameToRecord);
                            suiteDefinition = feature;
                            break;
                        default:
                            // get the current feature from context
                            // Validate that we have a feature
                            if (!suites[0].livedoc || !suites[0].livedoc.feature) {
                                // No feature!!
                                throw new model.ParserException(`${type} must be within a feature.`, title, filenameToRecord);
                            }
                            feature = suites[0].livedoc.feature;
                            break;
                    }

                    switch (type) {
                        case "Scenario":
                            suiteDefinition = liveDocGrammarParser.addScenario(feature, title);
                            break;
                        case "Scenario Outline":
                            suiteDefinition = liveDocGrammarParser.addScenarioOutline(feature, title);
                            break;
                        case "Background":
                            suiteDefinition = liveDocGrammarParser.addBackground(feature, title);
                            break;
                    }

                    suite = mochaSuite.create(suites[0], suiteDefinition.displayTitle);
                    (suite as any).pending = opts.pending || mocha.livedoc.shouldMarkAsPending(suiteDefinition.tags);
                    if (mocha.livedoc.shouldInclude(suiteDefinition.tags) || opts.isOnly) {
                        const suiteParent = suite.parent as any;
                        suiteParent._onlySuites = suiteParent._onlySuites.concat(suite);

                        // Ensure that any associated background is also marked as only
                        if (feature.background) {
                            const scenarioBackground = suiteParent.suites.filter(s => s.title.startsWith('Background:'));
                            if (scenarioBackground) {
                                suiteParent._onlySuites = suiteParent._onlySuites.concat(scenarioBackground);
                            }
                        }
                    }
                    // initialize the livedoc context
                    livedocContext = addLiveDocContext(suite, feature, type);

                    switch (type) {
                        case "Feature":
                            (global as any).featureContext = feature.getFeatureContext();
                            // Backgrounds need to be executed for each scenario except the first one
                            // this value tags the scenario number
                            livedocContext.scenarioCount = 0;
                            break;
                        case "Background":
                            livedocContext.parent.backgroundSteps = [];
                            break;
                        case "Scenario":
                            if (livedocContext.parent.afterBackground) {
                                // Add the afterBackground function to each scenario's afterAll function
                                (suite as any).afterAll(() => {
                                    const hookStep = liveDocGrammarParser.createStep("hook", "afterBackground", null);
                                    livedocContext.scenario.addStep(hookStep);
                                    livedocContext.step = hookStep;
                                    return livedocContext.parent.afterBackground();
                                });
                            }
                            livedocContext.parent.scenarioCount += 1;
                            livedocContext.scenarioId = livedocContext.parent.scenarioCount;
                        // Fall through on purpose
                        case "Scenario Outline":
                            livedocContext.scenario = suiteDefinition as model.Scenario;
                            break;
                    }

                    // Specific logic for Scenario Outlines
                    if (type === "Scenario Outline") {
                        // Setup the basic context for the scenarioOutline

                        const scenarioOutline = suiteDefinition as model.ScenarioOutline;
                        for (let i = 0; i < scenarioOutline.examples.length; i++) {
                            const currentScenario = scenarioOutline.examples[i];
                            context = currentScenario.getScenarioContext();
                            var scenarioExampleSuite = mochaSuite.create(suites[0], currentScenario.displayTitle);

                            livedocContext = addLiveDocContext(scenarioExampleSuite, feature, type);
                            livedocContext.scenario = currentScenario;
                            livedocContext.parent.scenarioCount += 1;
                            livedocContext.scenarioId = scenarioExampleSuite.parent.livedoc.scenarioCount;
                            suites.unshift(scenarioExampleSuite);

                            if (livedocContext.parent.afterBackground) {
                                scenarioExampleSuite.afterAll(() => {
                                    return livedocContext.parent.afterBackground();
                                });
                            };

                            if (opts.pending || suites[0].isPending() || mocha.livedoc.shouldMarkAsPending(suiteDefinition.tags)) {
                                (scenarioExampleSuite as any).pending = true;
                            }
                            if (opts.isOnly || mocha.livedoc.shouldInclude(suiteDefinition.tags)) {
                                (scenarioExampleSuite.parent as any)._onlySuites = (scenarioExampleSuite.parent as any)._onlySuites.concat(scenarioExampleSuite);
                                mocha.options.hasOnly = true;
                            }

                            const result = fn.call(scenarioExampleSuite);
                            if (result && result["then"]) {
                                throwAsyncNotSupported(type, title, filenameToRecord);
                            }
                            suites.shift();
                        }
                        return scenarioExampleSuite;
                    }
                    break;
                default:
                    resetGlobalVariables(context);
                    suite = processBddDescribe(suites, type, title, filenameToRecord);
            }

            if (opts.pending || suites[0].isPending()) {
                (suite as any).pending = opts.pending;
            }
            if (opts.isOnly) {
                (suite.parent as any)._onlySuites = (suite.parent as any)._onlySuites.concat(suite);
                mocha.options.hasOnly = true;
            }

            suites.unshift(suite);
            const result = fn.call(suite);
            if (result && result["then"]) {
                throwAsyncNotSupported(type, title, filenameToRecord);
            }

            suites.shift();
            return suite;
        }

        (wrapper as any).skip = function skip(title, fn) {
            wrapper(title, fn, { pending: true });
        };

        (wrapper as any).only = function only(title, fn) {
            wrapper(title, fn, { isOnly: true });
        };

        return wrapper;
    };

    function throwAsyncNotSupported(type: string, title, filename: string) {
        throw new model.ParserException(`The async keyword is not supported for ${type}`, title, filename);
    }

    function processBddDescribe(suites: mocha.ISuite, type: string, title: string, file: string): mocha.ISuite {
        // This is a legacy describe/context test which doesn't support
        // the features of livedoc
        let suiteParent: model.MochaSuite = null;
        if (suites[0].livedoc && !suites[0].root) {
            suiteParent = suites[0].livedoc;
            // Verify that this not part of a livedoc feature
            if (isLiveDocType(suites[0].livedoc.type)) {
                // seems this is using mixed languages which is not supported
                throw new model.ParserException(`This ${suites[0].livedoc.type} is using bdd syntax, did you mean to use scenario instead?`, title, file);
            }
        }

        const suite = mochaSuite.create(suites[0], title);
        const childSuite = new model.MochaSuite(suiteParent, title, type);
        childSuite.filename = file;
        addBddContext(suite, childSuite);

        return suite;
    }
}

export default (mocha as any).interfaces['livedoc-mocha'];

redpajama_set_name: RedPajamaGithub


Imagine a car is moving along a straight roadway. To observe the car's motion, we need a coordinate system. The path which the car is moving is called the x-axis. The point at which the car begins motion is the origin, or O. We choose the point furthest along the x-axis in the positive direction on the car to represent the point at which the car lays on the x-axis. We can call this a particle.
An informative way to observe the car's motion is the change in the particle's coordinate x over a time interval, t. Suppose that 1 second after the particle is at O, the particle is 15 meters away from O. The displacement of the particle is a vector that points from O to the ending location, P2 (as in point 2). This vector lays on the x-axis. The x-component of the displacement is the change in the value of x (15 meters - 0 meters) = 15 meters, that took place during the time interval of 1 second. We define the car's average velocity during this time interval as a "vector quantity" whose x component is the change in x divided by the time interval. In this case our average velocity is 15 meters / 1 second = 15 m/s.
To find instantaneous velocity of the car at P1 (point 1), we move P2 closer and closer to P1 and compute the average velocity over shorter and shorter distances and time intervals. Both values become small but the ratio does not necessarily. In other terms, the limit of the change in distance over the change in time as time approaches zero is called the derivative of x with respect to t.
Since t is always positive, the sign of the instantaneous velocity depends on the x component.
Again consider a car moving along the x-axis and the furthest point on the car in the positive x direction as a "particle." Suppose that at time t1 (first measurement of time) the particle is at point P1 and has x-component of instantaneous velocity V1x. At a later time t2, the car is at P2 and has x-component of velocity V2x. The x-component of velocity change by the amount V2x - V1x. During the time interval t2 - t1.
Average acceleration of the particle as it moving from P1 to P2 is a vector quantity whose x-component Aav-x (or average X-acceleration in a straight line) equals the change in the x-component of velocity, divided by the time interval.
Similar to instantaneous velocity, instantaneous acceleration is the limit of the average acceleration as the time interval approaches zero. OR, instantaneous acceleration equals the derivative of velocity with time.


Snapshot: Were it not for Trea Turner's walk-off HR Sunday, the NY Mets would be going into the first full week of the season undefeated. Still, as it stands, a great start to the season. Right after getting a new contract deGrom, the reigning NL CY Young Award winner, picks up right where he left off pitching in his 30th consecutive start giving up less than 3 runs. Robinson Cano's second stint in NY begins with a bang single-handedly beating the Nats on opening day. The Mets' rookie first baseman Pete Alonso looking like the real deal opening his first season batting .500. However, the last 2 games saw the bullpen get taxed and the Mets scoring runs to bail out their pitching. While the offense is a great sight, the backend of their rotation and bullpen must be consistent in order for the Mets to compete.
What to Watch: Mets linked to top pitching free agent Dallas Kuechel. New offensive identity, no longer looking for 3-R homeruns.


text:
Expectations High For Oil in Bong -Nigerian Exploratory Firm Cautions about Commercial Find -Bong Citizens Upbeat about Crude Oil Discovery
Liberia has not been lucky, as least yet, in its desperate hope for crude oil within its land and marine borders. Even after a swarm of experts had searched nearly two dozens of self-declared wells of oil off its coast, the country's hope still remains farfetched despite assurances that the country is situated on the same geographic belt with other West African oil-producing countries. There comes yet another hope-innovating news, this time from landlocked Bong County where a Nigerian oil company (DEECO Oil and Gas Ltd) has reported smelling a semblance of the precious resource. But as The Analyst's Bong County correspondent D. Patrick Tokpah reports, the company is urging citizens to manage their expectations and pray for commercial fine which certainly could be the magic wand to the county and the country's economic woes.
Bong County citizens in their thousands have greeted the news of the discovery of Crude Oil in the County as a great news and said if the crude oil discovered is of huge commercial quantity, it will be a reason while the life of the citizens of the county as well as the country will transformed in term of development.
The Bong County citizens are cautioning their local leaders and their legislative caucus to work with the DEECO Oil and Gas Ltd in the process that will lead to determining whether the Crude Oil discovered is of commercial quantity for the betterment of the County.
Following an assessment by DEECO Oil and Gas Ltd based in Nigeria, the citizens of Bong County were informed last Thursday, July 4, 2019 that Crude oil has been discovered in the County along the Jor River in Gbarnga city.
The Chairman of DEECO Oil and Gas Ltd, Dr. Sunday Ayokunle Popoola who broke the news to a cross section of citizens at the Administrative Building in Gbarnga, on Thursday, July 4, 2019 said "after conducting a test it is now confirmed by DEECO that oil is being found underground of the Jor River".
According to our correspondent, Sand miners along the Jor River have been reporting the emergence of fuel from underground when they are going about their mining activities. This drew the concern of stakeholders in the County including District #3 Representative Josiah Marvin Cole who recently invited a Nigerian oil company to investigate whether it was actually crude oil.
"The Jor River is located in the area where the Ellen Johnson Sirleaf Market is being constructed near the old LEC local office in the Gbarnga", a citizen of Bong County residing in Monrovia told our reporter.
Also speaking at the Town Hall, the Bong County Development Superintendent Anthony Boakai Sheriff described the discovery as a new day for the people of Bong and Liberians in general and is calling on the Christian and Muslim Communalities, as well as the Traditional people of Bong County to pray for the crude oil to be in huge commercial quantity.
"We want our people to pray because if the crude oil is in commercial quantity, we as citizens of this county will benefit hugely because more investors will come in invest here and that will bring development," Sheriff said.
In an interview with Bong County Inspector Victor Wesseh, after the Town Hall pronouncement by DEECO, he said the presence of the Chairman of DEECO & Gas Ltd in the County shows that there is Crude oil in the Jor River.
The Bong County Inspector who said he and the DEECO Team have been touring along the Jor River in other to determine whether the Crude oil can also be found in other parts of the river in Gbarnga, furthered the fact that DEECO Chairman, Nigerian oil tycoon Dr. Sunday Ayokunle Popoola has announced to the people of Bong County that it will cost his company about forty million United States Dollars just to do the exploration, we as citizens of the County are of the hope that exploration will discover huge commercial quantity of the Crude Oil.
Dr. Popoola further added during his pronouncement at the Gbarnga Town Hall that with the discovery of the crude oil his Company will now focus on exploration to see whether the oil is in huge commercial quantity.
DEECO Oil and Gas Ltd is a leading indigenous petroleum company in Africa and one of the largest independent oil and gas producer/petroleum product marketer in the world within 10 years of operation.
The DEECO Chairman Popoola said they will only carryout mining activities, if their exploration proof that the oil is in huge quantity that can be marketed.
"We are committed to excellence and delivering with international best global practices, and we intend to exceed expectations," Dr. Popoola added.
The Nigerian oil tycoon said it will cost his company about forty million United States Dollars just to do the exploration.
He said even though it is a big risk investing such money in exploration, but it will also bring huge benefits if the oil is in commercial quantity.
Chairman Popoola wants the people of Bong County to pray to God, stating "when the oil is in commercial quantity it will be a new day for Bong County and Liberia".
He further said "if the oil is in commercial quantity in ten years Liberia will be like Europe and Gbarnga will be like Dubai in the United Arab Emirates".
Dr. Popoola informed the citizens of Bong that Liberia is the first Country in Africa to get its independent, but it is the least Country in Africa in turn of development, noting only Africans can build Africa.
The Crude oil and Gas expertise boastfully said his Company has one of the best petroleum engineers in the world, because his engineers have worked in the West and Africa.
Solicitor General's opinion on NOCAL's Audit

redpajama_set_name: RedPajamaCommonCrawl


text:
#ArtByAWoman: LIFEWTR's Latest Packaging Highlights Work of Female Artists
by Theresa Christine Johnson on 08/03/2017 | 5 Minute Read
Did you know that work by women artists makes up only 3–5% of major permanent collections in the U.S. and Europe? Wanting to offer a platform for female artists, LIFEWTR bottles now feature the unique artistic talents of women from around the world. Todd Kaplan, Vice President, Water Portfolio – PepsiCo North America Beverages and the PepsiCo Design Team told us more about this series of bottle designs, brands that do social good, the challenges this endeavour posed and more.
What sparked the idea for this line of water bottles?
Todd Kaplan: For each of our LIFEWTR Series, the goal was to showcase and advance sources of creativity. For Series 2, we wanted to champion women in the arts based on the fact that more than half of visual artists today are women, but work by female artists makes up only 3-5% of major permanent collections in the U.S. and Europe. By providing a creative platform for these female artists we hope to showcase their unique talent to bring even more art and inspiration into the world.
How did you translate the bold and abstract work of each artist onto the bottle?
PepsiCo Design Team: We work closely with the each individual artist to take their unique artwork files, and translate them into and impactful bottle that highlights the balance between the artwork and the water itself. This is done by thoughtfully leveraging and editing out areas in the artwork where transparency brings added value or depth to the artwork. When the water bottle is filled, the liquid brings an unexpected layer of beauty and abstraction, especially when looking "through" the bottle—where the LIFEWTR logo is cleverly reverse printed to read from both front and back vantage points.
Consumers truly appreciate brands that also do social good and bring awareness to current issues. How did you execute this project so that it felt aligned with the brand?
Todd Kaplan: For LIFEWTR as a brand, our overarching purpose highlights emerging artists and give them a platform to be discovered. It has been so rewarding working with six very talented artists to-date who all have a very unique style, perspective and message to share with the world. We're fortunate that we can continue to use our bottles as a platform to support and champion artists throughout the globe to not only help further their careers but also to inspire consumers in their daily lives through access to beautiful artwork in their hands with LIFEWTR.
Tell us a little more about the LIFEWTR Mentorship Program and the Frieze Brooklyn Museum Fund and why they're so important to the brand.
Todd Kaplan: When we launched, we wanted to do more than just provide a platform for artistic expression through bottle designs, which is why we chose to contribute to the Frieze Brooklyn Museum Fund and we're in the process of creating a LIFEWTR Mentorship Program for all series artists which we will share more detail on this summer. These programs will allow us to elevate our support for emerging artists by providing educational resources for our artists to grow their creative skills, while also helping to elevate and inspire creativity in others.
What challenges did you encounter with designing this packaging?
PepsiCo Design Team:
Maximum colors based on printing stations at press.
Balance of opacity and transparency to best represent the artwork and artist style, while maintaining strong premium water feel.
Placement of work on curved surface
Cohesive look as a series line-up, while uniquely showcasing each individual artist.
Trudy Benson
How do you select the artists that you feature, as well the themes that you choose for each set?
Todd Kaplan: Our artists are selected through a careful vetting process. While the process for selection is confidential, we do ensure that all artists are emerging as the label is designed to serve as a platform for their work. Our artists and themes are chosen from the worlds of graphic design, fashion, fine arts, photography and more with contemporary styles that often appeal to a millennial demographic.
What considerations were made with the packaging to not only highlight the work of talented female artists but to also bring awareness to the message and mission of this project?
PepsiCo Design Team: Our statement of purpose is printed directly on every bottle of LIFEWTR. With roughly 20 million Series 2 bottle labels expected to hit store shelves, with artists names printed on each one, these female artists will have an exceptional platform to be discovered and provide inspiration to all.
This series is also supported with a robust digital marketing and PR campaign that further drives exposure for the message #ArtByAWoman.
Adrienne Gaither, Lynnie Z
Because every artist's work is different, how do you keep the different LIFEWTR bottles looking consistent under the brand?
PepsiCo Design Team: The new brand mark and visual identity system was designed to allow for new and unique forms of artwork to be consistently translated and applied to a premium surface, hero-ing each artist, while leveraging advanced printing technology and design techniques to bring added texture and 3-dimensionality to their work.
The clean and simple square LIFEWTR brand mark was thoughtfully placed, while maintaining design principles that keep the brand mark central for shelf impact.
How can other brands branch out beyond just their product and send a message for what they believe in and support with their packaging?
Todd Kaplan: While I cannot speak for other brands, I believe that the positive feedback thus far for LIFEWTR has come from our passion to spread a message that we believe in so strongly. By rotating our bottle designs multiple times a year, we are able to spotlight a diverse range of emerging artists to bring new perspectives of creativity out into the open. For LIFEWTR, creativity is at our core, and by giving emerging artists the opportunity to transform a traditional bottle label into a unique masterpiece, we are helping to spread more art and inspiration into the world.
Theresa Christine Johnson
Theresa entered the world of design through The Dieline. With a background in writing and journalism, she has a passion for discovery and cultivating human connections. Her work for The Dieline is a constant journey to deeply understand all facets of the design process and to investigate what makes designers tick. Theresa's writing has taken her snorkeling in between the tectonic plates in Iceland, horseback riding through a rural Brazilian town, and riding an octopus art car at Burning Man with Susan Sarandon as part of a funeral procession for Timothy Leary (long story). When not writing, she is planning her next trip or taking too many pictures of her cat.
More posts from Theresa Christine Johnson
Search for posts featuring the color value of #ffff25
Designer Iman Ale Mozaffar Gives us a Closer Look at Packaging Design in Iran
Wine & Champagne Packaging 08/03/2017
These Wines Will Thrill Your Inner Cat Lady


understanding the skills and traits of successful entrepreneurs helps sharpen your own focus, guiding which areas you'll need to focus on to improve your own chances of success.
For example, basic coding skills have become incredibly important for entrepreneurs, who need to understand the technology even if they're not actually doing the coding work themselves. Thankfully, the barriers to building those skills are low, and you can easily take coding courses for free online.
It might be more difficult to develop the characteristics of an entrepreneur most likely to succeed, like persistence and the ability to accept failure, but it can be done. Often, these personality traits are learned over time and only through experience, which is why you may see founders succeeding only after they've failed many times!
Other skills to focus on in order to increase your startup's chance of success include developing your ability to make data-driven decisions, marketing savvy and accounting or bookkeeping. These are universal skills that will serve you well in any venture you attempt, whether you're actually having to do much of the legwork yourself in your early days, or simply needing to understand how the different parts of your business work in order to hire the best talent and make the most informed decisions.
This recent infographic from open university Udacity serves as a visual list of character traits and skills most critical to entrepreneurial success. Its creators interviewed experts including Eventbrite's Julia Hartz, Mark Cuban, and Airbnb co-founder and CEO Brian Chesky, and shared their best advice for entrepreneurs as part of the infographic.


Taking a look at the genre of anime shorts and finding the ones that are strangely good.
As much as the anime genre is full of great characters, beautiful animation, and profound storylines, it's still pretty much a given that some of it is strange – extremely so. Delving into the anime shorts just accentuates that fact. Anime shorts are rarely over 10 minutes and they are typically either childrens programming, comedies, or experimental animations and storytelling.
These are some of standout series that really make you tilt your head, but still find yourself wanting to watch, anyway.
A cat unpeels its skin and pokes his head out. That may sound disgusting and grotesque, but when I mention skin, I'm actually talking about the skin of a banana and the cat's head pokes out of it. Bananya (a combination of the word banana and Japan's equivalent to our meow — nyan) is a species of cat that hides inside of bananas and only come out when humans aren't around.
The premise of the anime is to follow this kitty, named after the species, and his friends in their everyday life, the first episode telling us of his dream to become a chocolate-covered banana. There are only four episodes out so far.
This one's about a girl going to school at an art institute becoming the agent of a new and upcoming boy band. Okay, doesn't sound too weird. It actually sounds like it'll be the start of a harem anime, but that is not the case. The boy band is a group of marble idols: St. Giorgio, Mars, Hermes, and Medici.
This one is probably the most popular and well-known short anime of the bunch, personifying all of the different countries as young men and keeping with all of their stereotyped personality traits.
The animation looks like a children's book come to life, especially when the short episodes mimic silent films and Tortov Roddle's thoughts pop up on screen in between actions. He travels the world with his fashionable flapping scarf and top hat atop his long-legged pig. This follows their strange and mystical adventures across the landscape.
This one is actually just a cute slice-of-life about a newly married couple getting to know each other more, but the husband is an otaku and blogger that hates working and the wife is a dedicated office worker that's just trying to understand what her husband is saying. This is rife with pop culture references, and considering the episodes are only a couple of minutes long, that means they drop into the episode every 10 seconds.
Each episode is only about 5 minutes and they each star a new boy. This anime is unique because it is in first person and the boy of each episode talks to the viewer, saying what happened during his day, his hobbies, and what the viewer means to him. The first episode shows a young man clutching his pillow and saying how much he missed you, another says that you're his only friend. It's like personal attention ASMR, but with anime characters.
The blood types are personified as cute little mask-wearing sprites and they each hold true to the stereotypes of their blood type's personality traits. This one is surprisingly educational and pretty hilarious.
An 11 year old brother and a 17 year old sister star in this short anime, but it's not the a typical story about siblings. The 11 year old looks like he's 17 and the sister looks like she's 11. These few minute episodes dedicate their time to the misunderstandings that happen because of the inconsistencies of their heights.
Otherwise known as The Master of Killing Time this is a humorous anime that stars two high school students during class. Toshinari Seki comes up with elaborate and astounding ways to kill time on the top of his desk in the corner of the classroom and no one ever seems to notice except for Rumi Yukoi, the girl that sits next to him. She's fascinated with his inventions and scenarios, but they always seem to get her in trouble instead of Seki.
The name is very true to what the anime is. With the World Food-Culture Conservation Organization backing them, this team travels the world to snuff out any and all restaurants that are serving non-traditional sushi. This is a satirical/commentary piece that actually stems off of an incident about 10 years ago when the Japanese Minster of Agriculture at the time ate sushi at a restaurant in America that served its Japanese cuisine with Korean BBQ. He thought that it was an insult to Japanese culture and suggested having secret inspectors go undercover to different restaurants and review their authenticity. The name for the anime is what the media backlash dubbed his idea.


text:
Ænon é uma palavra grega originária do termo hebráico "ay-yin", cujo significado é "nascente" ou "fonte natural" e era um local próximo a Salim onde João Batista realizava batismos (). Sua localização mais provável era próxima à uma nascente do Rio Wadi Far'ah, em um vale aberto que se estende do Monte Ebal até o Rio Jordão.

É mencionado apenas uma vez na Bíblia e fazendo referência ao batismo. O nome é normalmente associado a organizações batistas e igrejas.

O mapa de Madaba mostra a localização de Ænon e Bethabara (outro local onde João Batista batizava), do outro lado do Jordão.
 Αίνών ένθα νύν ό Σαπσαφάς: "Ænon, onde hoje é Sapsaphas"
 Βέθαβαρά το τού άγίου Ιωάννου τού βαπτίσματος: "Bethabara, o local do batismo de São João"

O Evangelho de São João () se refere a Enon perto de Salim um lugar onde João Batista realizava batismos no Rio Jordão, "porque ali havia muita água".

Ver também
Batismo de Jesus

Sítios arqueológicos da Jordânia
Batismo
Geografia da religião

redpajama_set_name: RedPajamaWikipedia


text:
Citizens raise concerns, fears over sober-living facility
More than 20 Shinagle Drive residents gathered at City Hall Tuesday to voice their concerns and fears about Hope's Landing sober living facility to city commissioners. Among their concerns, the facility has been operating without a required special use permit. (Brandon L. Summers / The Dickinson Press)
By Brandon Summers
Residents along Shinagle Drive brought many concerns and fears over a new sober living facility to Dickinson City Commissioners at their regular meeting Tuesday.
More than 20 residents appeared in person, and signed letters were brought from those who could not attend.
Hope's Landing opened in May at 959 Shinagle Dr. without informing them of its presence or gathering public input first, the residents claimed.
The 10-bed facility is owned by Kayleen Wardner, wife of District-37 Senator Rich Wardner, and is sponsored by Western Edge Ministries, owned by the Wardners.
Resident Shawn Smith brought to commissioners' attention that the facility needs a special use permit to operate in the residential zone.
City Administrator Joe Gaa confirmed the facility does not have one.
"The rehab facility is located in an R1 zone," Smith said. "It is our opinion that this facility is classified, if licensed, as a group care facility, which would require the owner to apply to the city zoning board to request a special use permit, based on the municipal code."
The facility is required to have the permit prior to the start of operations, Smith noted.
Resident Paul Bartholomew expressed worries that the facility has not been inspected by the city to determine if it meets city codes, such as having a fire suppression system.
He also worried that living next to such a facility would impact his homeowner's insurance.
"I was told it could be affected if there's repeated incidents," he said. "It's not just that facility. It affects the entire dynamic of the neighborhood."
Bartholomew said one neighbor's daughter smelled marijuana smoke coming from the facility, and it was reported to the facility's executive director.
"There was drug use on the premises and that person was evicted, is what we were told," he said. "So there's already been drug use at a sober living facility."
Tires have been slashed along the street, resident Kodi Koenig said.
"When detectives came to speak with us about it, we asked if they had anyone in mind as to who they thought had done this, and they indicated they thought it was someone from the sober living house," she said. "We're not happy as a neighborhood to have them there, especially to have them just sort of sneak in."
Resident Jess Morton also expressed fears of living near such a facility.
"I have teenage girls on that street, and I'm terrified for them," she said.
Mayor Scott Decker assured the residents that their concerns have been heard and are being addressed by city staff.
"We are working on this," he said. "This has been an issue we've been actively working on."
Gaa said the city does believe Hope's Landing does need a special use permit.
"We have advised them of that," he said. "We do have a concern if they agree with us or not."
The earliest Hope's Landing could appear before the city planning and zoning commission is in October.
A city staff meeting will be held Thursday to determine what can be done if Hope's Landing elects not to go through the permit process, Gaa said.
"We're looking at it from a legal standpoint," he said. "At the least, there will be a discussion at the planning and zoning commission meeting."
City Legal Counsel Haylee Cripe suggested legal action may be required to close the facility.
"We're clearly in a situation where they're not following the code," she said. "My plan is to put together a legal research memorandum explaining the code sections involved, and procedure and enforcement options."
Decker encouraged the residents to bring any incidents to the city's attention.
"We're only aware of heavy traffic and comings-and-goings at strange hours," he said. "We need to be aware if there's what you perceive as out-of-the-ordinary."
He added, "This is out of the ordinary anyway."
Smith said he understands the needs that the facility is trying to help meet.
"However, neighborhood safety and the well-being of our neighborhood has become an abundant concern," he said. "If a sober living facility opened in your neighborhood, how would you respond as a resident?"
Related Topics: GOVERNMENT AND POLITICSDICKINSON CITY COMMISSION


blank DSTT DSi cart for playing NDS ROMs on DS Lite and DSi XL from micro SDHC Flash card.
When DSi came to the market, a lot of people raved about its "Wii-esque" touch. Unfortunately, just as many people ranted about how it made the previous DS and DS lite-compatible flash cards totally unusable. To remedy this issue, the DSSTi came to life, and Nintendo gamers all over the world rejoiced. And with good reason, too, since the DSSTi card stayed true to its predecessor's characteristics – particularly its being user-friendly and its speed when launching a game.
DSSTi supports plug and play, as well as drag and drop of files from PC to memory card. It is also Micro SDHC compatible. It automatically detects and generates the save type, and it saves directly to the card instead of the onboard chip, so you can be sure your game saves are alright. Just like other so-called 'advanced' flash cards, it supports action replay and it has a cheat code engine. User interface is also skinnable and easy to use. It supports both touch screen and button operation and has the soft reset feature as well. It likewise supports download play and WiFi.
As mentioned, DSSTi is fairly user-friendly. It is easy to install and the interface allows for fast access to saved games. It can work against advanced users though, as they might want to have fast access to files other than what they regularly use. There are virtually no problems when it comes to compatibility which makes this flash card one home brew download heavyweight. Some people complain, though, that it does not come bundled with an SDHC reader although it is SDHC compatible. However, for the most part, it has delivered the promises of its makers.
The DSSTi's best selling point would be its relative ease of use characteristic. Installation is no-fuss as well. It also has an attractive graphic user interface that is easily skinnable. It has an excellent hardware design and the card looks like it was really made for the DSi, which it is. Homebrew compatibility is also good, thanks to the excellent homebrew operating system.
The problem with DSSTi is that while it has decent compatibility ratings, it isn't completely homebrew compatible. This is an issue since these days flash cards are expected to be 100% compatible. The graphic user interface also allows no file sorting. Things could perhaps be better if gamers can hear a promise of sorts from the DSST team that they would work on the flaws, but at the moment, it seems like they'd just have to bear with the device for a while.
Having put DSSTi through the famous ringer, we can safely say that it is a good flash card in its price range and that it does the job just fine. If you want more than your usual dose of Nintendo gaming, though, you might want a more advanced flash card. But if you are a newbie who doesn't want much fuss and wants good old fun, then this DSi flash card is perfect for you.
DSTT is better known for its SDHC compatibility but it is now faced with the challenge of fighting its clones that are already available in the market. The packages of these imitated DSTTs really look almost similar to those of the original DSTT except that some clone manufacturers named these clones as CN-DSTT or DSTT-ADV. There are even clones that bravely use the DSTT brand name even if they are not affiliated in any way to the DSTT developers. In an action to counter these clones in stores right now, DSTT web sites now contain articles on how to recognize clones and fakes of DSTTs.
DSTT and DSTTi are compatible with homebrew games and ROM software but their pleasure is derived more from the fact that they have a massive cheat support feature on many games that are played on them.
Foreseen developments for 2010 are reported to include DSTTi working with DSi XL in March of the said year.


text:
Q: remove an index number from array I have this code and the task is to write a function that remove the same index number in the function parameter
func deleteElementInArray(arr: [Int], index: Int) -> [Int] {

    var inde = index
    var array = arra[inde]
    var result = array.remove(at: inde) // I got error here Value of type 'Int' has
                                           //no member 'remove'
    return result

}
sample output
arr [-3 , 4 , 0]
index 0
output [4 , 0]

A: You are calling the remove function on the Int value at the given index, not on the array:
func deleteElementInArray(arr: [Int], index: Int) -> [Int] {
    // make a mutable copy of the array
    var array = arr
    // remove the item at given index
    array.remove(at: index)
    // return the array
    return array
}

A:     var array = arra[inde]
    var result = array.remove(at: inde) // I got error here Value of type 'Int' has

The compiler has described the problem. Int is a standard data type. array is assigned to Int - which has no member called remove. You are probably trying to define
var array:[Int] = [2, 3, 5, 7, 11, 13, 17]

array.remove(at: 3)

You are trying to do - array=arra
Note the difference between an array of Int, and an Int.

A: As others have stated, you wrote your code to try to remove an item from an Integer that you extracted from your array.
You can use the same name for a local var that you use for the input parameter. That works because the new variable is defined at a different scope. Adding an error check so you don't crash if you call it with a bad array index, your function could be rewritten like this:
func deleteElementInArray(array: [Int], index: Int) -> [Int] {
    var array = array
    if array.indices.contains(index) {
        array.remove(at: index)
    }
    return array
}

Note that the Array function remove(at:) already does what you want (excluding the error checking). Ok, `remove(at:) modifies the array in place, where your function creates a mutable copy and modifies that.)

redpajama_set_name: RedPajamaStackExchange


The Skinny: Perhaps Kiyoshi Kurosawa's best film to date, Pulse is completely without flash or cheap thrills, and instead relies on impressive directoral chops and a relentlessly brooding atmosphere.
Taking place in modern Tokyo, Kiyoshi Kurosawa's Pulse (Kairo) starts very small. A young woman from a plant nursery goes to pick up a computer disk from a colleague who hasn't been heard from for a number of days. She finds him home alone, and the two talk briefly before the man goes into another room and performs a sudden and almost disinterested suicide. From this point the film deals with the mysterious goings on, from random suicides and disappearances, computers that ask, "Would you like to meet a ghost?" to a number of red-tape sealed "Forbidden Rooms," in a persistent bad dream for the characters. There is a very clear story here, though the story ultimately seems less important than the emotions Kurosawa slowly coaxes out of the viewer.
Starring a cast of largely unknown actors who excellently underplay their parts, Pulse is a natural extension of Kurosawa's 1997's Cure (Kyua), about a series of unmotivated (and seemingly unstoppable) murders, and 1999's Charisma (Karisuma). Kurosawa's world in these films is one of coldness and isolation, but never unnaturally so. It's so natural that when a computer assisted sequence appears near the end of Pulse, it's almost jarring. If Cure was the story of doom on a personal scale, and Charisma a step above that, then Pulse is the coda, the story of a quiet apocalypse.
The cool oppressiveness of Pulse doesn't really jar the viewer with a few well crafted scenes, but with an effective soundtrack (minus a horrible end credit pop song), a persistently dark color palette, and a single-minded seriousness that never blinks. By the time it's hooked the viewer, scenes that might normally seem innocent or staged take on an edge of menacing coldness. Even something as simple as shots of the characters riding a bus, each the only passenger with the muted backdrop of highway supports passing out-of-focus through the bus windows, adds to the feeling that the world isn't a comforting place. One of the scariest moments in the film involves a stark gray room and the sudden appearance of an unarmed and not very intimidating woman who, by simply walking, manages to evoke far more raw chills than Jason Voorhees in his hockey mask with a bloody machete.
Much of Pulse is spent with the implication that something horrible is going on, and even worse, that there's absolutely nothing the characters can do to stop it from happening, even after they figure out what's what. The camera itself is like an uncaring spectator, at times unmoving or slowly turning to follow the action. This is not a movie done in two-cuts-a-second, and probably wouldn't be a fun movie to show at a party with drinking involved. I'm pretty sure there's not a single joke in the entire movie and while there are quite a few deaths, many of them occur offscreen or with a bloodless dispassion.


Agricontura offers 2 holiday houses with all comforts at the beach of Capo d' Orlando. They are waiting for you with their shadowy terrace in front of the sea, with the Aeolian islands as backdrop.
The houses are completely furnished and equipped with all comforts, directly at the beach, both boasting shadowed terraces in front of the Tyrrhenian sea, with the Aeolian islands as a backdrop.
Furthermore Agricontura offers holidays on their organic farm, situated in the heart of an unspoiled valley on the northern coast, near the sea and the Natural Park of Monti Nebrodi. There are 35 acres of citrus groves and olive trees, cultivated using only biologic methods. Solar energy provides the power for pumping water for irrigation.
The 4 fully equipped and air conditioned apartments, housed in old farmhouses, are spacious and boast terracotta tile floors, wooden ceilings, and terrace.