text:
// Copyright (c) Corporation for National Research Initiatives
package org.python.core;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;
import java.util.concurrent.locks.ReentrantLock;

import org.python.compiler.Module;
import org.python.core.util.FileUtil;
import org.python.core.util.PlatformUtil;

/**
 * Utility functions for "import" support.
 *
 * Note that this class tries to match the names of the corresponding functions from CPython's
 * Python/import.c. In these cases we use CPython's function naming style (underscores and all
 * lowercase) instead of Java's typical camelCase style so that it's easier to compare with
 * import.c.
 */
public class imp {

    private static final String IMPORT_LOG = "import";

    private static final String UNKNOWN_SOURCEFILE = "<unknown>";

    private static final int APIVersion = 37;

    public static final int NO_MTIME = -1;

    // This should change to Python 3.x; note that 2.7 allows relative
    // imports unless `from __future__ import absolute_import`
    public static final int DEFAULT_LEVEL = -1;

    public static class CodeData {

        private final byte[] bytes;
        private final long mtime;
        private final String filename;

        public CodeData(byte[] bytes, long mtime, String filename) {
            this.bytes = bytes;
            this.mtime = mtime;
            this.filename = filename;
        }

        public byte[] getBytes() {
            return bytes;
        }

        public long getMTime() {
            return mtime;
        }

        public String getFilename() {
            return filename;
        }
    }

    public static enum CodeImport {
        source, compiled_only;
    }

    /** A non-empty fromlist for __import__'ing sub-modules. */
    private static final PyObject nonEmptyFromlist = new PyTuple(Py.newString("__doc__"));

    public static ClassLoader getSyspathJavaLoader() {
        return Py.getSystemState().getSyspathJavaLoader();
    }

    /**
     * Selects the parent class loader for Jython, to be used for dynamically loaded classes and
     * resources. Chooses between the current and context classloader based on the following
     * criteria:
     *
     *

     *
If both are the same classloader, return that classloader.
     *
If either is null, then the non-null one is selected.
     *
If both are not null, and a parent/child relationship can be determined, then the child
     * is selected.
     *
If both are not null and not on a parent/child relationship, then the current class
     * loader is returned (since it is likely for the context class loader to not see the
     * Jython classes)
     *

     *
     * @return the parent class loader for Jython or null if both the current and context
     *         classloaders are null.
     */
    public static ClassLoader getParentClassLoader() {
        ClassLoader current = imp.class.getClassLoader();
        ClassLoader context = Thread.currentThread().getContextClassLoader();
        if (context == current) {
            return current;
        }
        if (context == null) {
            return current;
        }
        if (current == null) {
            return context;
        }
        if (isParentClassLoader(context, current)) {
            return current;
        }
        if (isParentClassLoader(current, context)) {
            return context;
        }
        return current;
    }

    private static boolean isParentClassLoader(ClassLoader suspectedParent, ClassLoader child) {
        try {
            ClassLoader parent = child.getParent();
            if (suspectedParent == parent) {
                return true;
            }
            if (parent == null || parent == child) {
                // We reached the boot class loader
                return false;
            }
            return isParentClassLoader(suspectedParent, parent);

        } catch (SecurityException e) {
            return false;
        }
    }

    private imp() {}

    /**
     * If the given name is found in sys.modules, the entry from there is returned. Otherwise a new
     * PyModule is created for the name and added to sys.modules
     */
    public static PyModule addModule(String name) {
        name = name.intern();
        PyObject modules = Py.getSystemState().modules;
        PyModule module = (PyModule)modules.__finditem__(name);
        if (module != null) {
            return module;
        }
        module = new PyModule(name, null);
        PyModule __builtin__ = (PyModule)modules.__finditem__("__builtin__");
        PyObject __dict__ = module.__getattr__("__dict__");
        __dict__.__setitem__("__builtins__", __builtin__.__getattr__("__dict__"));
        __dict__.__setitem__("__package__", Py.None);
        modules.__setitem__(name, module);
        return module;
    }

    /**
     * Remove name form sys.modules if it's there.
     *
     * @param name the module name
     */
    private static void removeModule(String name) {
        name = name.intern();
        PyObject modules = Py.getSystemState().modules;
        if (modules.__finditem__(name) != null) {
            try {
                modules.__delitem__(name);
            } catch (PyException pye) {
                // another thread may have deleted it
                if (!pye.match(Py.KeyError)) {
                    throw pye;
                }
            }
        }
    }

    private static byte[] readBytes(InputStream fp) {
        try {
            return FileUtil.readBytes(fp);
        } catch (IOException ioe) {
            throw Py.IOError(ioe);
        } finally {
            try {
                fp.close();
            } catch (IOException e) {
                throw Py.IOError(e);
            }
        }
    }

    private static InputStream makeStream(File file) {
        try {
            return new FileInputStream(file);
        } catch (IOException ioe) {
            throw Py.IOError(ioe);
        }
    }

    static PyObject createFromPyClass(String name, InputStream fp, boolean testing,
            String sourceName, String compiledName) {
        return createFromPyClass(name, fp, testing, sourceName, compiledName, NO_MTIME);

    }

    static PyObject createFromPyClass(String name, InputStream fp, boolean testing,
            String sourceName, String compiledName, long mtime) {
        return createFromPyClass(name, fp, testing, sourceName, compiledName, mtime,
                CodeImport.source);
    }

    static PyObject createFromPyClass(String name, InputStream fp, boolean testing,
            String sourceName, String compiledName, long mtime, CodeImport source) {
        CodeData data = null;
        try {
            data = readCodeData(compiledName, fp, testing, mtime);
        } catch (IOException ioe) {
            if (!testing) {
                throw Py.ImportError(ioe.getMessage() + "[name=" + name + ", source=" + sourceName
                        + ", compiled=" + compiledName + "]");
            }
        }
        if (testing && data == null) {
            return null;
        }
        PyCode code;
        try {
            code = BytecodeLoader.makeCode(name + "$py", data.getBytes(), //
                    source == CodeImport.compiled_only ? data.getFilename() : sourceName);
        } catch (Throwable t) {
            if (testing) {
                return null;
            } else {
                throw Py.JavaError(t);
            }
        }

        Py.writeComment(IMPORT_LOG,
                String.format("import %s # precompiled from %s", name, compiledName));
        return createFromCode(name, code, compiledName);
    }

    public static byte[] readCode(String name, InputStream fp, boolean testing) throws IOException {
        return readCode(name, fp, testing, NO_MTIME);
    }

    public static byte[] readCode(String name, InputStream fp, boolean testing, long mtime)
            throws IOException {
        CodeData data = readCodeData(name, fp, testing, mtime);
        if (data == null) {
            return null;
        } else {
            return data.getBytes();
        }
    }

    public static CodeData readCodeData(String name, InputStream fp, boolean testing)
            throws IOException {
        return readCodeData(name, fp, testing, NO_MTIME);
    }

    public static CodeData readCodeData(String name, InputStream fp, boolean testing, long mtime)
            throws IOException {
        byte[] data = readBytes(fp);
        int api;
        AnnotationReader ar = new AnnotationReader(data);
        api = ar.getVersion();
        if (api != APIVersion) {
            if (testing) {
                return null;
            } else {
                String fmt = "compiled unit contains version %d code (%d required): %.200s";
                throw Py.ImportError(String.format(fmt, api, APIVersion, name));
            }
        }
        if (testing && mtime != NO_MTIME) {
            long time = ar.getMTime();
            if (mtime != time) {
                return null;
            }
        }
        return new CodeData(data, mtime, ar.getFilename());
    }

    public static byte[] compileSource(String name, File file) {
        return compileSource(name, file, null);
    }

    public static byte[] compileSource(String name, File file, String sourceFilename) {
        return compileSource(name, file, sourceFilename, null);
    }

    public static byte[] compileSource(String name, File file, String sourceFilename,
            String compiledFilename) {
        if (sourceFilename == null) {
            sourceFilename = file.toString();
        }
        long mtime = file.lastModified();
        return compileSource(name, makeStream(file), sourceFilename, mtime);
    }

    public static String makeCompiledFilename(String filename) {
        return filename.substring(0, filename.length() - 3) + "$py.class";
    }

    /**
     * Stores the bytes in compiledSource in compiledFilename.
     *
     * If compiledFilename is null, it's set to the results of makeCompiledFilename(sourcefileName).
     *
     * If sourceFilename is null or set to UNKNOWN_SOURCEFILE, then null is returned.
     *
     * @return the compiledFilename eventually used; or null if a compiledFilename couldn't be
     *         determined or if an error was thrown while writing to the cache file.
     */
    public static String cacheCompiledSource(String sourceFilename, String compiledFilename,
            byte[] compiledSource) {
        if (compiledFilename == null) {
            if (sourceFilename == null || sourceFilename.equals(UNKNOWN_SOURCEFILE)) {
                return null;
            }
            compiledFilename = makeCompiledFilename(sourceFilename);
        }
        FileOutputStream fop = null;
        try {
            SecurityManager man = System.getSecurityManager();
            if (man != null) {
                man.checkWrite(compiledFilename);
            }
            fop = new FileOutputStream(compiledFilename);
            fop.write(compiledSource);
            fop.close();
            return compiledFilename;
        } catch (IOException exc) {
            // If we can't write the cache file, just log and continue
            Py.writeDebug(IMPORT_LOG, "Unable to write to source cache file '" + compiledFilename
                    + "' due to " + exc);
            return null;
        } catch (SecurityException exc) {
            // If we can't write the cache file, just log and continue
            Py.writeDebug(IMPORT_LOG, "Unable to write to source cache file '" + compiledFilename
                    + "' due to " + exc);
            return null;
        } finally {
            if (fop != null) {
                try {
                    fop.close();
                } catch (IOException e) {
                    Py.writeDebug(IMPORT_LOG, "Unable to close source cache file '"
                            + compiledFilename + "' due to " + e);
                }
            }
        }
    }

    public static byte[] compileSource(String name, InputStream fp, String filename) {
        return compileSource(name, fp, filename, NO_MTIME);
    }

    public static byte[] compileSource(String name, InputStream fp, String filename, long mtime) {
        ByteArrayOutputStream ofp = new ByteArrayOutputStream();
        try {
            if (filename == null) {
                filename = UNKNOWN_SOURCEFILE;
            }
            org.python.antlr.base.mod node;
            try {
                node = ParserFacade.parse(fp, CompileMode.exec, filename, new CompilerFlags());
            } finally {
                fp.close();
            }
            Module.compile(node, ofp, name + "$py", filename, true, false, null, mtime);
            return ofp.toByteArray();
        } catch (Throwable t) {
            throw ParserFacade.fixParseError(null, t, filename);
        }
    }

    public static PyObject createFromSource(String name, InputStream fp, String filename) {
        return createFromSource(name, fp, filename, null, NO_MTIME);
    }

    public static PyObject createFromSource(String name, InputStream fp, String filename,
            String outFilename) {
        return createFromSource(name, fp, filename, outFilename, NO_MTIME);
    }

    public static PyObject createFromSource(String name, InputStream fp, String filename,
            String outFilename, long mtime) {
        byte[] bytes = compileSource(name, fp, filename, mtime);
        if (!Py.getSystemState().dont_write_bytecode) {
            outFilename = cacheCompiledSource(filename, outFilename, bytes);
        }

        Py.writeComment(IMPORT_LOG, "'" + name + "' as " + filename);

        PyCode code = BytecodeLoader.makeCode(name + "$py", bytes, filename);
        return createFromCode(name, code, filename);
    }

    /**
     * Returns a module with the given name whose contents are the results of running c. __file__ is
     * set to whatever is in c.
     */
    public static PyObject createFromCode(String name, PyCode c) {
        return createFromCode(name, c, null);
    }

    /**
     * Returns a module with the given name whose contents are the results of running c. Sets
     * __file__ on the module to be moduleLocation unless moduleLocation is null. If c comes from a
     * local .py file or compiled $py.class class moduleLocation should be the result of running new
     * File(moduleLocation).getAbsolutePath(). If c comes from a remote file or is a jar
     * moduleLocation should be the full uri for c.
     */
    public static PyObject createFromCode(String name, PyCode c, String moduleLocation) {
        PyUnicode.checkEncoding(name);
        PyModule module = addModule(name);

        PyTableCode code = null;
        if (c instanceof PyTableCode) {
            code = (PyTableCode)c;
        }

        if (moduleLocation != null) {
            module.__setattr__("__file__", new PyString(moduleLocation));
        } else if (module.__findattr__("__file__") == null) {
            // Should probably never happen (but maybe with an odd custom builtins, or
            // Java Integration)
            Py.writeDebug(IMPORT_LOG, String.format("Warning: %s __file__ is unknown", name));
        }

        ReentrantLock importLock = Py.getSystemState().getImportLock();
        importLock.lock();
        try {
            PyFrame f = new PyFrame(code, module.__dict__, module.__dict__, null);
            code.call(Py.getThreadState(), f);
            return module;
        } catch (RuntimeException t) {
            removeModule(name);
            throw t;
        } finally {
            importLock.unlock();
        }
    }

    static PyObject createFromClass(String name, Class<?> c) {
        // Two choices. c implements PyRunnable or c is Java package
        if (PyRunnable.class.isAssignableFrom(c)) {
            try {
                return createFromCode(name, ((PyRunnable)c.newInstance()).getMain());
            } catch (InstantiationException e) {
                throw Py.JavaError(e);
            } catch (IllegalAccessException e) {
                throw Py.JavaError(e);
            }
        }
        return PyType.fromClass(c, false); // xxx?
    }

    public static PyObject getImporter(PyObject p) {
        PySystemState sys = Py.getSystemState();
        return getPathImporter(sys.path_importer_cache, sys.path_hooks, p);
    }

    static PyObject getPathImporter(PyObject cache, PyList hooks, PyObject p) {

        // attempt to get an importer for the path
        // use null as default value since Py.None is
        // a valid value in the cache for the default
        // importer
        PyObject importer = cache.__finditem__(p);
        if (importer != null) {
            return importer;
        }

        // nothing in the cache, so check all hooks
        PyObject iter = hooks.__iter__();
        for (PyObject hook; (hook = iter.__iternext__()) != null;) {
            try {
                importer = hook.__call__(p);
                break;
            } catch (PyException e) {
                if (!e.match(Py.ImportError)) {
                    throw e;
                }
            }
        }

        if (importer == null) {
            try {
                importer = new PyNullImporter(p);
            } catch (PyException e) {
                if (!e.match(Py.ImportError)) {
                    throw e;
                }
            }
        }

        if (importer != null) {
            cache.__setitem__(p, importer);
        } else {
            importer = Py.None;
        }

        return importer;
    }

    static PyObject find_module(String name, String moduleName, PyList path) {
        PyObject loader = Py.None;
        PySystemState sys = Py.getSystemState();
        PyObject metaPath = sys.meta_path;

        for (PyObject importer : metaPath.asIterable()) {
            PyObject findModule = importer.__getattr__("find_module");
            loader = findModule.__call__(new PyObject[] { //
                    new PyString(moduleName), path == null ? Py.None : path});
            if (loader != Py.None) {
                return loadFromLoader(loader, moduleName);
            }
        }

        PyObject ret = loadBuiltin(moduleName);
        if (ret != null) {
            return ret;
        }

        path = path == null ? sys.path : path;
        for (int i = 0; i < path.__len__(); i++) {
            PyObject p = path.__getitem__(i);
            PyObject importer = getPathImporter(sys.path_importer_cache, sys.path_hooks, p);
            if (importer != Py.None) {
                PyObject findModule = importer.__getattr__("find_module");
                loader = findModule.__call__(new PyObject[] {new PyString(moduleName)});
                if (loader != Py.None) {
                    return loadFromLoader(loader, moduleName);
                }
            }
            if (!(p instanceof PyUnicode)) {
                p = p.__str__();
            }
            ret = loadFromSource(sys, name, moduleName, p.toString());
            if (ret != null) {
                return ret;
            }
        }

        return ret;
    }

    private static PyObject loadBuiltin(String name) {
        if (name == "sys") {
            Py.writeComment(IMPORT_LOG, "'" + name + "' as sys in builtin modules");
            return Py.java2py(Py.getSystemState());
        }
        if (name == "__builtin__") {
            Py.writeComment(IMPORT_LOG, "'" + name + "' as __builtin__ in builtin modules");
            return new PyModule("__builtin__", Py.getSystemState().builtins);
        }
        String mod = PySystemState.getBuiltin(name);
        if (mod != null) {
            Class c = Py.findClassEx(mod, "builtin modules");
            if (c != null) {
                Py.writeComment(IMPORT_LOG, "'" + name + "' as " + mod + " in builtin modules");
                try {
                    if (PyObject.class.isAssignableFrom(c)) { // xxx ok?
                        return PyType.fromClass(c);
                    }
                    return createFromClass(name, c);
                } catch (NoClassDefFoundError e) {
                    throw Py.ImportError("Cannot import " + name + ", missing class " + c.getName());
                }
            }
        }
        return null;
    }

    static PyObject loadFromLoader(PyObject importer, String name) {
        PyUnicode.checkEncoding(name);
        PyObject load_module = importer.__getattr__("load_module");
        ReentrantLock importLock = Py.getSystemState().getImportLock();
        importLock.lock();
        try {
            return load_module.__call__(new PyObject[] {new PyString(name)});
        } finally {
            importLock.unlock();
        }
    }

    public static PyObject loadFromCompiled(String name, InputStream stream, String sourceName,
            String compiledName) {
        return createFromPyClass(name, stream, false, sourceName, compiledName);
    }

    static PyObject loadFromSource(PySystemState sys, String name, String modName, String entry) {
        String dirName = sys.getPath(entry);
        String sourceName = "__init__.py";
        String compiledName = "__init__$py.class";
        // display names are for identification purposes (e.g. __file__): when entry is
        // null it forces java.io.File to be a relative path (e.g. foo/bar.py instead of
        // /tmp/foo/bar.py)
        String displayDirName = entry.equals("") ? null : entry.toString();
        String displaySourceName = new File(new File(displayDirName, name), sourceName).getPath();
        String displayCompiledName =
                new File(new File(displayDirName, name), compiledName).getPath();

        // First check for packages
        File dir = new File(dirName, name);
        File sourceFile = new File(dir, sourceName);
        File compiledFile = new File(dir, compiledName);

        boolean pkg = false;
        try {
            if (dir.isDirectory()) {
                if (caseok(dir, name) && (sourceFile.isFile() || compiledFile.isFile())) {
                    pkg = true;
                } else {
                    Py.warning(Py.ImportWarning, String.format(
                            "Not importing directory '%s': missing __init__.py", dirName));
                }
            }
        } catch (SecurityException e) {
            // ok
        }

        if (!pkg) {
            Py.writeDebug(IMPORT_LOG, "trying source " + dir.getPath());
            sourceName = name + ".py";
            compiledName = name + "$py.class";
            displaySourceName = new File(displayDirName, sourceName).getPath();
            displayCompiledName = new File(displayDirName, compiledName).getPath();
            sourceFile = new File(dirName, sourceName);
            compiledFile = new File(dirName, compiledName);
        } else {
            PyModule m = addModule(modName);
            PyObject filename = new PyString(new File(displayDirName, name).getPath());
            m.__dict__.__setitem__("__path__", new PyList(new PyObject[] {filename}));
        }

        try {
            if (sourceFile.isFile() && caseok(sourceFile, sourceName)) {
                long pyTime = sourceFile.lastModified();
                if (compiledFile.isFile() && caseok(compiledFile, compiledName)) {
                    Py.writeDebug(IMPORT_LOG, "trying precompiled " + compiledFile.getPath());
                    long classTime = compiledFile.lastModified();
                    if (classTime >= pyTime) {
                        PyObject ret = createFromPyClass(modName, makeStream(compiledFile), //
                                true, // OK to fail here as we have the source
                                displaySourceName, displayCompiledName, pyTime);
                        if (ret != null) {
                            return ret;
                        }
                    }
                    return createFromSource(modName, makeStream(sourceFile), displaySourceName,
                            compiledFile.getPath(), pyTime);
                }
                return createFromSource(modName, makeStream(sourceFile), displaySourceName,
                        compiledFile.getPath(), pyTime);
            }

            // If no source, try loading precompiled
            Py.writeDebug(IMPORT_LOG, "trying precompiled with no source " + compiledFile.getPath());
            if (compiledFile.isFile() && caseok(compiledFile, compiledName)) {
                return createFromPyClass(modName, makeStream(compiledFile), //
                        false, // throw ImportError here if this fails
                        displaySourceName, displayCompiledName, NO_MTIME, CodeImport.compiled_only);
            }
        } catch (SecurityException e) {
            // ok
        }
        return null;
    }

    public static boolean caseok(File file, String filename) {
        if (Options.caseok || !PlatformUtil.isCaseInsensitive()) {
            return true;
        }
        try {
            File canFile = new File(file.getCanonicalPath());
            boolean match = filename.regionMatches(0, canFile.getName(), 0, filename.length());
            if (!match) {
                // possibly a symlink. Get parent and look for exact match in listdir()
                // This is what CPython does in the case of Mac OS X and Cygwin.
                // XXX: This will be a performance hit, maybe jdk7 nio2 can give us a better
                // method?
                File parent = file.getParentFile();
                String[] children = parent.list();
                for (String c : children) {
                    if (c.equals(filename)) {
                        return true;
                    }
                }
            }
            return match;
        } catch (IOException exc) {
            return false;
        }
    }

    /**
     * Load the module by name. Upon loading the module it will be added to sys.modules.
     *
     * @param name the name of the module to load
     * @return the loaded module
     */
    public static PyObject load(String name) {
        PyUnicode.checkEncoding(name);
        ReentrantLock importLock = Py.getSystemState().getImportLock();
        importLock.lock();
        try {
            return import_first(name, new StringBuilder());
        } finally {
            importLock.unlock();
        }
    }

    /**
     * Find the parent package name for a module.
     *
     * If __name__ does not exist in the module or if level is 0, then the parent is
     * null. If __name__ does exist and is not a package name, the containing package
     * is located. If no such package exists and level is -1, the parent is
     * null. If level is -1, the parent is the current name. Otherwise,
     * level-1 doted parts are stripped from the current name. For example, the
     * __name__ "a.b.c" and level 2 would return "a.b", if
     * c is a package and would return "a", if c is not a
     * package.
     *
     * @param dict the __dict__ of a loaded module
     * @param level used for relative and absolute imports. -1 means try both, 0 means absolute
     *            only, positive ints represent the level to look upward for a relative path (1
     *            means current package, 2 means one level up). See PEP 328 at
     *            http://www.python.org/dev/peps/pep-0328/
     *
     * @return the parent name for a module
     */
    private static String get_parent(PyObject dict, int level) {
        String modname;
        int orig_level = level;

        if ((dict == null && level == -1) || level == 0) {
            // try an absolute import
            return null;
        }

        PyObject tmp = dict.__finditem__("__package__");
        if (tmp != null && tmp != Py.None) {
            if (!Py.isInstance(tmp, PyString.TYPE)) {
                throw Py.ValueError("__package__ set to non-string");
            }
            modname = ((PyString)tmp).getString();
        } else {
            // __package__ not set, so figure it out and set it.

            tmp = dict.__finditem__("__name__");
            if (tmp == null) {
                return null;
            }
            modname = tmp.toString();

            // locate the current package
            tmp = dict.__finditem__("__path__");
            if (tmp instanceof PyList) {
                // __path__ is set, so modname is already the package name.
                dict.__setitem__("__package__", new PyString(modname));
            } else {
                // __name__ is not a package name, try one level upwards.
                int dot = modname.lastIndexOf('.');
                if (dot == -1) {
                    if (level <= -1) {
                        // there is no package, perform an absolute search
                        dict.__setitem__("__package__", Py.None);
                        return null;
                    }
                    throw Py.ValueError("Attempted relative import in non-package");
                }
                // modname should be the package name.
                modname = modname.substring(0, dot);
                dict.__setitem__("__package__", new PyString(modname));
            }
        }

        // walk upwards if required (level >= 2)
        while (level-- > 1) {
            int dot = modname.lastIndexOf('.');
            if (dot == -1) {
                throw Py.ValueError("Attempted relative import beyond toplevel package");
            }
            modname = modname.substring(0, dot);
        }

        if (Py.getSystemState().modules.__finditem__(modname) == null) {
            if (orig_level < 1) {
                if (modname.length() > 0) {
                    Py.warning(Py.RuntimeWarning, String.format("Parent module '%.200s' not found "
                            + "while handling absolute import", modname));
                }
            } else {
                throw Py.SystemError(String.format("Parent module '%.200s' not loaded, "
                        + "cannot perform relative import", modname));
            }
        }
        return modname.intern();
    }

    /**
     *
     * @param mod a previously loaded module
     * @param parentNameBuffer
     * @param name the name of the module to load
     * @return null or None
     */
    private static PyObject import_next(PyObject mod, StringBuilder parentNameBuffer, String name,
            String outerFullName, PyObject fromlist) {
        if (parentNameBuffer.length() > 0 && name != null && name.length() > 0) {
            parentNameBuffer.append('.');
        }
        parentNameBuffer.append(name);

        String fullName = parentNameBuffer.toString().intern();

        PyObject modules = Py.getSystemState().modules;
        PyObject ret = modules.__finditem__(fullName);
        if (ret != null) {
            return ret;
        }
        if (mod == null) {
            ret = find_module(fullName, name, null);
        } else {
            ret = mod.impAttr(name.intern());
        }
        if (ret == null || ret == Py.None) {
            if (JavaImportHelper.tryAddPackage(outerFullName, fromlist)) {
                ret = modules.__finditem__(fullName);
            }
            return ret;
        }
        if (modules.__finditem__(fullName) == null) {
            modules.__setitem__(fullName, ret);
        } else {
            ret = modules.__finditem__(fullName);
        }
        return ret;
    }

    // never returns null or None
    private static PyObject import_first(String name, StringBuilder parentNameBuffer) {
        PyObject ret = import_next(null, parentNameBuffer, name, null, null);
        if (ret == null || ret == Py.None) {
            throw Py.ImportError("No module named " + name);
        }
        return ret;
    }

    private static PyObject import_first(String name, StringBuilder parentNameBuffer,
            String fullName, PyObject fromlist) {
        PyObject ret = import_next(null, parentNameBuffer, name, fullName, fromlist);
        if (ret == null || ret == Py.None) {
            if (JavaImportHelper.tryAddPackage(fullName, fromlist)) {
                ret = import_next(null, parentNameBuffer, name, fullName, fromlist);
            }
        }
        if (ret == null || ret == Py.None) {
            throw Py.ImportError("No module named " + name);
        }
        return ret;
    }

    // Hierarchy-recursively search for dotted name in mod;
    // never returns null or None
    // ??pending: check if result is really a module/jpkg/jclass?
    private static PyObject import_logic(PyObject mod, StringBuilder parentNameBuffer,
            String dottedName, String fullName, PyObject fromlist) {
        int dot = 0;
        int last_dot = 0;

        do {
            String name;
            dot = dottedName.indexOf('.', last_dot);
            if (dot == -1) {
                name = dottedName.substring(last_dot);
            } else {
                name = dottedName.substring(last_dot, dot);
            }
            PyJavaPackage jpkg = null;
            if (mod instanceof PyJavaPackage) {
                jpkg = (PyJavaPackage)mod;
            }

            mod = import_next(mod, parentNameBuffer, name, fullName, fromlist);
            if (jpkg != null && (mod == null || mod == Py.None)) {
                // try again -- under certain circumstances a PyJavaPackage may
                // have been added as a side effect of the last import_next
                // attempt. see Lib/test_classpathimport.py#test_bug1126
                mod = import_next(jpkg, parentNameBuffer, name, fullName, fromlist);
            }
            if (mod == null || mod == Py.None) {
                throw Py.ImportError("No module named " + name);
            }
            last_dot = dot + 1;
        } while (dot != -1);

        return mod;
    }

    /**
     * @param name
     * @param top
     * @param modDict
     * @return a module
     */
    private static PyObject import_module_level(String name, boolean top, PyObject modDict,
            PyObject fromlist, int level) {
        if (name.length() == 0) {
            if (level == 0 || modDict == null) {
                throw Py.ValueError("Empty module name");
            } else {
                PyObject moduleName = modDict.__findattr__("__name__");
                if (moduleName != null && moduleName.toString().equals("__name__")) {
                    throw Py.ValueError("Attempted relative import in non-package");
                }
            }
        }
        if (name.indexOf(File.separatorChar) != -1) {
            throw Py.ImportError("Import by filename is not supported.");
        }
        PyObject modules = Py.getSystemState().modules;
        PyObject pkgMod = null;
        String pkgName = null;
        if (modDict != null && modDict.isMappingType()) {
            pkgName = get_parent(modDict, level);
            pkgMod = modules.__finditem__(pkgName);
            if (pkgMod != null && !(pkgMod instanceof PyModule)) {
                pkgMod = null;
            }
        }
        int dot = name.indexOf('.');
        String firstName;
        if (dot == -1) {
            firstName = name;
        } else {
            firstName = name.substring(0, dot);
        }
        StringBuilder parentNameBuffer = new StringBuilder(pkgMod != null ? pkgName : "");
        PyObject topMod = import_next(pkgMod, parentNameBuffer, firstName, name, fromlist);
        if (topMod == Py.None || topMod == null) {
            // Add None to sys.modules for submodule or subpackage names that aren't found, but
            // leave top-level entries out. This allows them to be tried again if another
            // import attempt is made after they've been added to sys.path.
            if (topMod == null && pkgMod != null) {
                modules.__setitem__(parentNameBuffer.toString().intern(), Py.None);
            }
            parentNameBuffer = new StringBuilder("");
            // could throw ImportError
            if (level > 0) {
                topMod = import_first(pkgName + "." + firstName, parentNameBuffer, name, fromlist);
            } else {
                topMod = import_first(firstName, parentNameBuffer, name, fromlist);
            }
        }
        PyObject mod = topMod;
        if (dot != -1) {
            // could throw ImportError
            mod = import_logic(topMod, parentNameBuffer, name.substring(dot + 1), name, fromlist);
        }
        if (top) {
            return topMod;
        }

        if (fromlist != null && fromlist != Py.None) {
            ensureFromList(mod, fromlist, name);
        }
        return mod;
    }

    private static void ensureFromList(PyObject mod, PyObject fromlist, String name) {
        ensureFromList(mod, fromlist, name, false);
    }

    private static void ensureFromList(PyObject mod, PyObject fromlist, String name,
            boolean recursive) {
        if (mod.__findattr__("__path__") == null) {
            return;
        }

        // This can happen with imports like "from . import foo"
        if (name.length() == 0) {
            name = mod.__findattr__("__name__").toString();
        }

        StringBuilder modNameBuffer = new StringBuilder(name);
        for (PyObject item : fromlist.asIterable()) {
            if (!Py.isInstance(item, PyBaseString.TYPE)) {
                throw Py.TypeError("Item in ``from list'' not a string");
            }
            if (item.toString().equals("*")) {
                if (recursive) {
                    // Avoid endless recursion
                    continue;
                }
                PyObject all;
                if ((all = mod.__findattr__("__all__")) != null) {
                    ensureFromList(mod, all, name, true);
                }
            }

            if (mod.__findattr__((PyString)item) == null) {
                String fullName = modNameBuffer.toString() + "." + item.toString();
                import_next(mod, modNameBuffer, item.toString(), fullName, null);
            }
        }
    }

    /**
     * Import a module by name.
     *
     * @param name the name of the package to import
     * @param top if true, return the top module in the name, otherwise the last
     * @return an imported module (Java or Python)
     */
    public static PyObject importName(String name, boolean top) {
        PyUnicode.checkEncoding(name);
        ReentrantLock importLock = Py.getSystemState().getImportLock();
        importLock.lock();
        try {
            return import_module_level(name, top, null, null, DEFAULT_LEVEL);
        } finally {
            importLock.unlock();
        }
    }

    /**
     * Import a module by name. This is the default call for __builtin__.__import__.
     *
     * @param name the name of the package to import
     * @param top if true, return the top module in the name, otherwise the last
     * @param modDict the __dict__ of an already imported module
     * @return an imported module (Java or Python)
     */
    public static PyObject importName(String name, boolean top, PyObject modDict,
            PyObject fromlist, int level) {
        PyUnicode.checkEncoding(name);
        ReentrantLock importLock = Py.getSystemState().getImportLock();
        importLock.lock();
        try {
            return import_module_level(name, top, modDict, fromlist, level);
        } finally {
            importLock.unlock();
        }
    }

    /**
     * Called from jython generated code when a statement like "import spam" is executed.
     */
    @Deprecated
    public static PyObject importOne(String mod, PyFrame frame) {
        return importOne(mod, frame, imp.DEFAULT_LEVEL);
    }

    /**
     * Called from jython generated code when a statement like "import spam" is executed.
     */
    public static PyObject importOne(String mod, PyFrame frame, int level) {
        PyObject module =
                __builtin__.__import__(mod, frame.f_globals, frame.getLocals(), Py.None, level);
        return module;
    }

    /**
     * Called from jython generated code when a statement like "import spam as foo" is executed.
     */
    @Deprecated
    public static PyObject importOneAs(String mod, PyFrame frame) {
        return importOneAs(mod, frame, imp.DEFAULT_LEVEL);
    }

    /**
     * Called from jython generated code when a statement like "import spam as foo" is executed.
     */
    public static PyObject importOneAs(String mod, PyFrame frame, int level) {
        PyObject module =
                __builtin__.__import__(mod, frame.f_globals, frame.getLocals(), Py.None, level);
        int dot = mod.indexOf('.');
        while (dot != -1) {
            int dot2 = mod.indexOf('.', dot + 1);
            String name;
            if (dot2 == -1) {
                name = mod.substring(dot + 1);
            } else {
                name = mod.substring(dot + 1, dot2);
            }
            module = module.__getattr__(name);
            dot = dot2;
        }
        return module;
    }

    /**
     * replaced by importFrom with level param. Kept for backwards compatibility.
     *
     * @deprecated use importFrom with level param.
     */
    @Deprecated
    public static PyObject[] importFrom(String mod, String[] names, PyFrame frame) {
        return importFromAs(mod, names, null, frame, DEFAULT_LEVEL);
    }

    /**
     * Called from jython generated code when a statement like "from spam.eggs import foo, bar" is
     * executed.
     */
    public static PyObject[] importFrom(String mod, String[] names, PyFrame frame, int level) {
        return importFromAs(mod, names, null, frame, level);
    }

    /**
     * replaced by importFromAs with level param. Kept for backwards compatibility.
     *
     * @deprecated use importFromAs with level param.
     */
    @Deprecated
    public static PyObject[] importFromAs(String mod, String[] names, PyFrame frame) {
        return importFromAs(mod, names, null, frame, DEFAULT_LEVEL);
    }

    /**
     * Called from jython generated code when a statement like "from spam.eggs import foo as spam"
     * is executed.
     */
    public static PyObject[] importFromAs(String mod, String[] names, String[] asnames,
            PyFrame frame, int level) {
        PyObject[] pyNames = new PyObject[names.length];
        for (int i = 0; i < names.length; i++) {
            pyNames[i] = Py.newString(names[i]);
        }

        PyObject module =
                __builtin__.__import__(mod, frame.f_globals, frame.getLocals(),
                        new PyTuple(pyNames), level);
        PyObject[] submods = new PyObject[names.length];
        for (int i = 0; i < names.length; i++) {
            PyObject submod = module.__findattr__(names[i]);
            // XXX: Temporary fix for http://bugs.jython.org/issue1900
            if (submod == null) {
                submod = module.impAttr(names[i]);
            }
            // end temporary fix.

            if (submod == null) {
                throw Py.ImportError("cannot import name " + names[i]);
            }
            submods[i] = submod;
        }
        return submods;
    }

    private final static PyTuple all = new PyTuple(Py.newString('*'));

    /**
     * Called from jython generated code when a statement like "from spam.eggs import *" is
     * executed.
     */
    public static void importAll(String mod, PyFrame frame, int level) {
        PyObject module =
                __builtin__.__import__(mod, frame.f_globals, frame.getLocals(), all, level);
        importAll(module, frame);
    }

    @Deprecated
    public static void importAll(String mod, PyFrame frame) {
        importAll(mod, frame, DEFAULT_LEVEL);
    }

    public static void importAll(PyObject module, PyFrame frame) {
        PyObject names;
        boolean filter = true;
        if (module instanceof PyJavaPackage) {
            names = ((PyJavaPackage)module).fillDir();
        } else {
            PyObject __all__ = module.__findattr__("__all__");
            if (__all__ != null) {
                names = __all__;
                filter = false;
            } else {
                names = module.__dir__();
            }
        }

        loadNames(names, module, frame.getLocals(), filter);
    }

    /**
     * From a module, load the attributes found in names into locals.
     *
     * @param filter if true, if the name starts with an underscore '_' do not add it to locals
     * @param locals the namespace into which names will be loaded
     * @param names the names to load from the module
     * @param module the fully imported module
     */
    private static void loadNames(PyObject names, PyObject module, PyObject locals, boolean filter) {
        for (PyObject name : names.asIterable()) {
            String sname = ((PyString)name).internedString();
            if (filter && sname.startsWith("_")) {
                continue;
            } else {
                try {
                    PyObject value = module.__findattr__(sname);
                    if (value == null) {
                        PyObject nameObj = module.__findattr__("__name__");
                        if (nameObj != null) {
                            String submodName = nameObj.__str__().toString() + '.' + sname;
                            value =
                                    __builtin__
                                            .__import__(submodName, null, null, nonEmptyFromlist);
                        }
                    }
                    locals.__setitem__(sname, value);
                } catch (Exception exc) {
                    continue;
                }
            }
        }
    }

    static PyObject reload(PyModule m) {
        PySystemState sys = Py.getSystemState();
        PyObject modules = sys.modules;
        Map<String, PyModule> modules_reloading = sys.modules_reloading;
        ReentrantLock importLock = Py.getSystemState().getImportLock();
        importLock.lock();
        try {
            return _reload(m, modules, modules_reloading);
        } finally {
            modules_reloading.clear();
            importLock.unlock();
        }
    }

    private static PyObject _reload(PyModule m, PyObject modules,
            Map<String, PyModule> modules_reloading) {
        String name = m.__getattr__("__name__").toString().intern();
        PyModule nm = (PyModule)modules.__finditem__(name);
        if (nm == null || !nm.__getattr__("__name__").toString().equals(name)) {
            throw Py.ImportError("reload(): module " + name + " not in sys.modules");
        }
        PyModule existing_module = modules_reloading.get(name);
        if (existing_module != null) {
            // Due to a recursive reload, this module is already being reloaded.
            return existing_module;
        }
        // Since we are already in a re-entrant lock,
        // this test & set is guaranteed to be atomic
        modules_reloading.put(name, nm);

        PyList path = Py.getSystemState().path;
        String modName = name;
        int dot = name.lastIndexOf('.');
        if (dot != -1) {
            String iname = name.substring(0, dot).intern();
            PyObject pkg = modules.__finditem__(iname);
            if (pkg == null) {
                throw Py.ImportError("reload(): parent not in sys.modules");
            }
            path = (PyList)pkg.__getattr__("__path__");
            name = name.substring(dot + 1, name.length()).intern();
        }

        nm.__setattr__("__name__", new PyString(modName)); // FIXME necessary?!
        try {
            PyObject ret = find_module(name, modName, path);
            modules.__setitem__(modName, ret);
            return ret;
        } catch (RuntimeException t) {
            // Need to restore module, due to the semantics of addModule, which removed it
            // Fortunately we are in a module import lock
            modules.__setitem__(modName, nm);
            throw t;
        }
    }

    public static int getAPIVersion() {
        return APIVersion;
    }
}

redpajama_set_name: RedPajamaGithub


One of the real tests of a tabletop game isn't always about gauging the number of players enjoying it at once or the length of time they're engrossed in it. I learned this recently when I got my hands on Black Table Games' new card battler Wreck-A-Mecha, failing to find friends who were home to join me. I had a night free, and had already played the game a few times with others over the prior week, but no one was available to that evening.
So, I did the only logical thing I could think of: I played against myself. And unsurprisingly I had a blast. As a testament to its design, Wreck-A-Mecha plays well no matter how many people are at the opposite sides of the table.
Sci-Fi tabletop gaming isn't a new concept, so it takes a decent premise to make one stick. Designed for two, WAM pits players against each other in an effort to build giant mechs and battle until only one bot survives. It feels like a mix of Voltron and Pacific Rim. The robots are built and the game progresses as players take turns selecting parts, attacking and defending, chipping away at the defense or setting up a solid wall themselves. The game asks us to rack up 10 points by defeating limbs or going right for the opponent's robot core. With a few ways to win, the matches can take as little as 10 minutes or as long at 30 with determined competitors. A further modifier is to go all in on the game's paper-rock-scissors aspect, with more or less damage depending on where a part falls on the triangle.
The strategic aspect of the game sets it apart. With a limited deck, throwing cards at our mech to bolster it isn't as important as understanding which parts will attack and which will defend during a turn. The parts each have defensive and offensive stats, so balancing between which ones ones will do what is key. It's not uncommon to fall behind in point totals, thinking that we need to set every almost part to defend on our next turn. In reality, this is perhaps the best time to be aggressive as the enemy bot might be prepping for their own battle instead of defending. But those are the crucial moments when Wreck-A-Mecha shifts from robot building to tactical maneuvering.
The variety of components is strong, with different balanced levels of offense and defence and special skills to modify their effects. The only hindrance is that the randomness of a draw can result in a couple of turns that leave us at a disadvantage. It never lasts for more than a round or two, but that could be enough to force us into tense moments. The art on the cards themselves is nicely executed, with groups of similar components all visually matching and bursting with color and Tron-like light. I can imagine the sound effects of the metal clanging on itself. It's limited in amount of cards at the moment, but potentially great for expansions in the future.
Wreck-A-Mecha is a novel concept, with accessible gameplay that is easy to learn and quick to get accustomed to. The game is designed to follow its specific rules or let us break them and make our own. It flows extremely well, and can become a deep game very quickly if the players are even slightly experienced.
Playing alone let me experience one thing, at least: I managed to build not one but two incredible mechs, resulting in a face-off that would have put any anime to shame.
Wreck-A-Mecha is available on Kickstarter right now through to July 2.
This review is based on a box set of the game sent to SideQuesting by the publisher. One of the game's creators, Jesse Gregory, has written pieces for SideQuesting in the past.


text:
2019: Nigerians react to Buhari's non-submission of academic credentials to INEC
October 26, 2018 October 26, 2018 The finder 0 Comments
Nigerians and opposition leaders have been reacting to the news that the presidential candidate of the All Progressives Congress (APC), Muhammadu Buhari, did not submit his academic credentials to the Independent National Electoral Commission (INEC).
Mr Buhari's secondary school certificate controversy made the headlines in 2015. Mr Buhari has again not made it available in 2019, insisting his credentials are still with the military. Instead of submitting the credentials, Mr Buhari swore to an affidavit, wherein he told INEC they were with the military.
Many Nigerians, however, raised concerns about why President Buhari, as the Commander in Chief of the Armed Forces, cannot ask the military to present the certificates or make copies for him.
Reacting to this, the spokesperson of the Peoples Democratic Party (PDP), Kola Ologbondiyan, via his Twitter handle "@officialKolaO said, "Integrity demands that you write to military authorities asking them to forward your credentials to INEC. Even @MBuhari followers are not prepared to accept NEPA Bill for WAEC in 2019. So, Mr President, Wey your certificate?"
The former media aide to past President Goodluck Jonathan, Reno Omokri, said it is evidently clear that Mr Buhari does not have the certificate.
"@MBuhari again tells @INECNigeria his certificate are with the army. Who controls the army as Commander-in-Chief? Is it not Buhari? We've seen the evidence of certificateless leadership. We won't accept that excuse. Retweet to insist Buhari produces his certificate #RenosDarts"
A former minister of aviation, Femi Fani-Kayode, in his reaction said: "Once again Buhari has refused to submit his WAEC certificate to INEC. Once again he says that it is with the military authorities. Even though he has been Commander in Chief for the last few years he has been unable to retrieve them. May God save Nigeria from this man."
For Oluyemi Fasipe, who tweeted with the handle, @YemieFASH, "Buhari did not tender any academic record to become President, INEC conspired with APC to install a WAEC-LESS President. The whole world must see this, don't stop retweeting. Cc: @BBCAfrica @CNN @AJStream @USEmbassyAbuja @UKinNigeria"
See the reactions of other Nigerians below.
"@AyeeshaMusa1
How did we get here Nigeria? How did we get this point where @MBuhari was elected @NGRPresident without a WAEC result, in a country (whose) total population's literacy level is at 59.6% (male: 69.2%, female: 49.7% as at January 20, 2018)? How did we get here Nigeria(?)"
"@AbangMercy
So Buhari hasn't been to any other school since he left the military? Why are we still looking for this? See, this is beyond me frankly & INEC allows this? If we haven't found his certificate what should be done? Why does he keep telling the world his docs are with the military?
"No one will offer me a job if I keep telling them my certificate is with my first employer – it is not only silly but shows I have none and I haven't made any efforts to get new documents or developed academically- this man is President and he still can't find his certificate?
"We are allowing bad behaviour exhibited by the President and he's allowed to take a walk while we keep hold others to a much higher expectations – Kemi Adeosun was thrown out over NYSC and your President has been presiding over Nigeria without any certificate but NEPA bill?"
"@adeyanjudeji
Our president does not have ordinary WAEC certificate in 2018. Even as President & C-in-C, he says he can't retrieve his so-called certificate from the military. Does he think we are all fools? Things can't just continue like this."
"@AsiwajuOladimej
Last two year(s), around October, I was asked to submit my ORIGINAL certificate not even notification of result by my commission if not, my salary would be stopped. I went back to UNAD, paid 30k to get it. The President should go and get his WAEC certificate. Fuck excuse."
← Alleged N29 billion fraud: Court grants Nyako permission to travel abroad for medical treatment
Nigerians Not Prepared To Accept NEPA Bill As WAEC Certificate In 2019, PDP Taunts Buhari →

redpajama_set_name: RedPajamaCommonCrawl


text:
Anorak News | Princess Diana Musical creator says Diana killed by remote control device (now sing-along)
Princess Diana Musical creator says Diana killed by remote control device (now sing-along)
by Anorak | 3rd, October 2013
FOLLOWING the Star's wowsome news that Princess Diana tipped William to marry Kate Middleton despite dying four years before the couple met, the paper says "DI MURDER AUTHOR" has received threats to "shut up" or die.
ROYAL author Brian Watson received chilling death threats after claiming Princess Diana's fatal crash was caused by assassins, he revealed last night.
Nigel Pauley adds:
The biographer says he was about to make his theory public when he got a phone call telling him: "Drop the idea if you value your family's life."
He was about to make public his theory Diana was murdered – the theory that's occupied hearts and minds at the Daily Star and its sister organ the Express for years – and that attracted a death threat?
Mr Watson had planned to release a documentary film after his research convinced him that killers used a remote control device to take over the steering of Diana's Mercedes and deliberately crashed it into a Paris tunnel pillar.
But after sending film studios the script for his movie Who Killed The Queen Of Hearts? the writer received the deadly threat, he claims.
Go on:
He revealed: "I said to my co-writer: 'Have I got too close to the truth?'"
It seems not. Because the Star says "Mr Watson believes assassins were following the Mercedes in a white Fiat Uno, which was seen by several witnesses but has never been found". He says Diana's car could have been take over by remote control:
Mr Watson, a former advertising exec from Surrey, even researched how such a system could be installed. He said prior to the crash, the computer system was stolen from the Merc, which was off the road for two weeks.
"So I phoned up my local Mercedes dealership and asked how long it would take to put a new one in. They said about half an hour or so. Then I asked if you could perhaps control the car with the right computer. He said: 'Yes, you could.' When I told him why I was asking him he went cold."
So. Why now? Why tell us his theory now? Are the death threat makers no longer a threat?
Mr Watson broke his silence yesterday as he tried to win backers for his next venture, a show called Diana: The Musical. He said the project, co-written with Aussie musician David Smart, would not be controversial, but a celebration of her life. He said: "We want to appeal to every Diana fan. It's time for a proper tribute."
It's what she would have wanted.
What of the musical? Clive Martin writes:
…highlights include: "A Cuddle and a Smile" (a sentimental number set in a hospice in which the children and Diana dance together), "A Sergeant Major's Job" (a Gilbert and Sullivan-style bit of comic relief sung by a bolshy Sergeant Major, enthusiastically voiced by Brian on the demo CD he gave me), "A Right Royal Wedding" (a rousing number in which the people of London chant "There's going to be a wedding?", "There's going to be a wedding!", "A right royal wedding!" at each other like something out of a cockney Les Mis) and "Sea of Flowers" (the ambitious opening number which uses a clever bit of audience participation, with the front aisles being issued with bouquets).
Tabard is sardonic in the Stage:
Yet the writers have decided to begin their merry tale with her death. This is followed by a snapshot of Kensington, where flowers have been laid in her memory, then later the "infamous scene" of a "lonely Diana" seated in front of the Taj Mahal, before moving onto a "dramatic, stylised portrayal" of the Martin Bashir interview, in which she spoke about her husband, Prince Charles, having an affair during their marriage.
If all that isn't uplifting enough for you, the show-makers also plan to include a voice-over of a "lone, young girl" singing the name "Diana" with an echoing effect around the auditorium at different points in the production.
The show is yet to be snapped up by a producer.
The show opens with her death and news readers:
NEWS READER: "We're interrupting programmes to bring you the news that Diana Princess of Wales is gravely ill in intensive care in a Paris Hospital…" The News Reader is interrupted…
We interrupt that interruption to see if want to listen to some bits? Sure you do:
Disney does Diana.
Posted: 3rd, October 2013 | In: Royal Family Comment | TrackBack | Permalink


text:
Il Cantone di Toul-Nord era una divisione amministrativa dell'Arrondissement di Toul.

È stato soppresso a seguito della riforma complessiva dei cantoni del 2014, che è entrata in vigore con le elezioni dipartimentali del 2015.

Comprendeva parte della città di Toul e i comuni di:
 Aingeray
 Boucq
 Bouvron
 Bruley
 Dommartin-lès-Toul
 Écrouves
 Fontenoy-sur-Moselle
 Foug
 Gondreville
 Lagney
 Laneuveville-derrière-Foug
 Lay-Saint-Remy
 Lucey
 Ménil-la-Tour
 Pagney-derrière-Barine
 Sanzey
 Sexey-les-Bois
 Trondes

Note

Collegamenti esterni
Statistiche (parziali) sul sito dell'INSEE

Toul-Nord

redpajama_set_name: RedPajamaWikipedia


Harold Ivan Smith to be interviewed by "Open to Hope Radio" Hosts, Dr. Gloria Horsley and Dr. Heidi Horsley on May 19th, 2011, sponsored by the Open to Hope Foundation www.opentohope.com. To listen to this show, go to www.opentohope.com archived shows.
New York, New York and San Francisco, California ( prbd ) May 17, 2011 - Harold Ivan Smith is a grief specialist and educator at both Saint Luke's Hospital, Kansas City, Missouri, and the Carondolet Medical Institute in Eau Claire, Wisconsin. Harold Ivan facilitates Grief Gatherings, which are storytelling groups for grievers. His primary research is on the grief of U.S. Presidents and First Ladies and he is a recognized Fellow in Thanatology by the Association for Death Education and Counseling.
Dr. Heidi Horsley, PsyD, LMSW, MS, is a bereaved sibling and a licensed psychologist and social worker. Dr. Heidi is the Co-Founder and Executive Director of the Open to Hope Foundation and an adjunct professor at Columbia University. She has a private practice in Manhattan, NY specializing in grief and loss. She is also author of "Teen Grief Relief" and "Real Men Do Cry". She holds graduate degrees from the University of San Francisco, Columbia University, and Loyola University.
Dr. Gloria C. Horsley, PHD, MFT, CNS, is a bereaved parent, and has worked in the field of family therapy for over twenty years. Dr. Gloria is Founder and President of the Open to Hope Foundation. She serves The Compassionate Friends as a Board Member. She is co-author of "Teen Grief Relief" and "Real Men Do Cry." She holds graduate degrees from the University of Rochester, Syracuse, Greenwich and Holos Universities.


This is Part 2 of a three-part series on the cost of SugarCRM. View Part 1 here.
In this segment, we address the Implementation Cost of Sugar.
Please note the costs presented below are general guidelines, and your costs might differ. Without having a sense of the actual scope or purpose of the project, it's incredibly difficult to accurately predict the cost.
You can choose to implement Sugar on your own without a partner or consultant – if you do this, naturally, you would not incur any obvious implementation costs other than your own staff's lost time or how much of your staff's cost you choose to allocate to the project. However, one of the top reasons for CRM implementation failures is not engaging an outside expert to help.
Discovery We meet with your team to document your requirements in detail to make sure we're all on the same page about how the system will work and what we're trying to accomplish.
System Design We create a document that shows you how we're going to configure Sugar to meet your requirements documented in the Discovery Phase.
Hosting If your Sugar instance is being hosted in the Sugar On Demand Environment, this is not required and there is no additional cost. If for security, performance, or customization requirements you need to have a different hosting solution, there may be additional costs here.
Installation Installation is only required if you are not hosted in the Sugar On Demand Environment.
System Build We build the system based on the System Design. This includes designing screens, determining what options are on menus, creating new modules if needed, creating custom fields if needed, etc.
Customizations Many times our clients require some special functionality that doesn't exist out of the box in Sugar. One of the best qualities of Sugar is its ability to be customized in almost any way. An example might be some special lead routing functionality that your organization requires. Or, maybe you want some special approval functionality for quotes based on the dollar amount and sales region. That customization work would be performed here.
Integrations If you are integrating Sugar with other systems, this will impact the cost. Common software to integrate includes ERP Software, e-Commerce and Shopping Carts, email marketing tools, marketing automation tools phone systems, and credit card processors.
Report Creation Sugar comes with dozens of pre-built reports. However, if you want additional custom reports, this can impact the cost.
Dashboard Creation Each Sugar user can have their own set of dashboards. Dashboards can who things like Hot Accounts, Opportunities Won, Lists of Accounts to Call, etc. If you have a variety of dashboards in mind for your users, this can impact cost.
Workflow Creation Sugar's Workflow functionality is one of its most powerful features. Workflows would be things like automatic email alerts when certain conditions apply, automatic updating of fields when certain conditions apply, etc. For example, maybe you want your sales manager to get an automatic email every time an opportunity is closed. The more workflows you have in mind, the more it may impact the cost of the project.
Data Migration Are you going to be migrating data from an old system or Excel? Or, are you going to have your team manually enter starting information. If you choose to migrate data, which data are you migrating? The more data you migrate, the greater the cost. In addition, one way to minimize costs is for your team to prepare the data in Excel, so all we have to do is import it into Sugar. If we have to grab the data from your old system and manage it before the import, costs can grow. Data Migration is one of the bigger areas of cost.
Admin Training We train your system administrators in how to use Sugar and how to use all the Sugar tools.
User Training We can train your users. One way to save on costs is to have us train your Admins, and then have your Admins train your users.
Go Live Support On the day you go live, sometimes it's appropriate to have us onsite with you or on call to make sure everything goes smoothly. This period can be anywhere from a day to a week or two. It just depends on the scope of the project and your comfort level with system administrators and their ability to quickly address issues.
TBD NA Project Management includes keeping a project on schedule, working with you and our development teams to make sure the right work is delivered at the right time to the right people. It typically costs around 10%-15% of the total project cost.
Discovery $800 – $1,600 $0 – $800 This can include the delivery of a detailed requirements document to use.
Hosting NA NA Hosting can cost from $500-$2000/month, depending on number of users and/or special requirements.
Installation $800 – $1,600 NA Only required if you are not hosting in the Sugar On Demand Environment.
Customizations Depends NA Need details to estimate.
Integrations Depends NA Need details to estimate.
Report Creation $400 – $800 NA This is for 2-4 basic custom reports.
Dashboard Creation $400 – $800 NA This is for 2-4 basic dashboards.
Workflow Creation $400 – $800 NA This is for 2-4 basic workflows.
Data Migration $3,200 – $6,400 $1,600 – $3,200 Depends on source of data.
Admin Training $1,600 – $2,400 $1,600 – $2,400 Depends on # of admin users.
User Training $3,200 – $6,400 NA Depends on # of users to be trained. NA if your admins do the training.
Go Live Support $800-$1,600 NA NA if your admins do the go live support.
Naturally, a 10 user implementation might be at the lower end of the range, and a 30 user implementation could be at the higher end of the range. And, more complexity and customization and integrations would negate a bunch of the assumptions above. However, the estimated costs presented do provide some general guidelines as to what things might cost assuming minimal customization and scope. Please contact us for a more precise estimate if this is something of interest.


The inspiring digital photography below, is segment of Ford Escape Lease written piece which is sorted within Ford, ford escape lease returns, ford escape lease orlando, ford escape titanium lease offers and published at September 22nd, 2018 17:28:53 PM by buymasterpiece.
Here is essential tip on ford escape lease montreal. We have the tops method for ford escape lease montreal. Check it out for yourself! You can get Ford Escape Lease Ford Escape Lease And Finance Offers In Quincy Ma Quirk Ford guide and view the latest Ford Escape Lease in here.


text:
Indicator Releasing British Horror 'Night of the Demon' Blu-Ray Limited to 6000 Copies
Powerhouse Films is set to release British horror classic Night of the Demon on a limited edition UK Blu-Ray via their Indicator label on October 22, 2018. There's only 6000 copies available, so you better be quick to snag one. Head on down to check out the cool artwork and packaging, including a direct pre-order link for the film RIGHT HERE!
Based on M R James' classic tale of terror, 'Casting the Runes', and adapted for the screen by regular Hitchcock collaborator Charles Bennett, Jacques Tourneur's (Cat People, I Walked with a Zombie, Out of the Past) Night of the Demon is considered to be one of the seminal horror films of Twentieth-Century cinema. Released on Blu-ray for the very first time in the UK, the film is presented here in four different versions, and is accompanied by an incredible array of new and archival special features. Also includes a Limited Edition exclusive double-sided poster and 80-page book.
"American professor John Holden (Dana Andrews) arrives in London for a conference on parapsychology only to discover that the colleague he was supposed to meet was killed in a freak accident the day before. It turns out that the deceased had been investigating a cult lead by Dr. Julian Karswell (Niall MacGinnis). Though a skeptic, Holden is suspicious of the devil-worshiping Karswell. Following a trail of mysterious manuscripts, Holden enters a world that makes him question his faith in science."
LIMITED EDITION CONTENTS:
The BFI's 2013 2K restoration of the 96-minute version
High-definition remaster of the 82-minute cut
Original mono audio
Four presentations of the film: Night of the Demon – the original full-length pre-release version (96 mins), and the original UK theatrical cut (82 minutes); Curse of the Demon – the original US theatrical cut (82 mins), and the US re-issue version (96 mins)
Audio commentary with film historian Tony Earnshaw, author of Beating the Devil: The Making of 'Night of the Demon'
Speak of the Devil: The Making of 'Night of the Demon' (2007): documentary featuring interviews with actor Peggy Cummins, production designer Ken Adam and historians Tony Earnshaw and Jonathan Rigby
Dana Andrews on 'Night of the Demon': a rare audio interview with the actor conducted by Scott MacQueen
The Devil's in the Detail (2018): Christopher Frayling on Night of the Demon and acclaimed production designer Ken Adam
Horrors Unseen (2018): a discussion of the celebrated director of Night of the Demon by Chris Fujiwara, author of Jacques Tourneur: The Cinema of Nightfall
Sinister Signs (2018): an analysis by Kim Newman, author of Nightmare Movies
Under the Spell (2018): the celebrated British horror writer Ramsey Campbell discusses the unique combination of M R James and Jacques Tourneur
The Devil in Music (2018): a new appreciation of Clifton Parker's score by David Huckvale, author of Movie Magick: The Occult in Film
The Devil Gets His Due (2018): film historian and preservationist Scott MacQueen on the release history of Night of the Demon
The Truth of Alchemy (2018) a discussion of M R James and 'Casting the Runes' by Roger Clarke, author of A Natural History of Ghosts: 500 Years of Hunting for Proof
Cloven In Two (2018): a new video piece exploring the different versions of the film
Escape: 'Casting the Runes' (1947): a radio play adaptation of James' original story
Super 8 version: original cut-down home cinema presentation
Isolated music & effects track on the US theatrical cut
Original US Curse of the Demon theatrical trailer
Image gallery: on-set and promotional photography, including rare production design sketches from the Deutsche Kinemathek's Ken Adam Archive
New and improved English subtitles for the deaf and hard-of-hearing
Limited Edition exclusive 80-page book
Limited Edition exclusive double-sided poster
UK premiere on Blu-ray
Limited Edition of 6,000 copies
All extras subject to change
You can pre-order a copy of Night of the Demon on Blu-Ray from Amazon.co.uk.
Related Topics:IndicatorNight of the DemonPowerhouse Films
Sam Raimi's Original Cult Classic 'The Evil Dead' Coming to 4K Ultra HD Blu-Ray
Arrow Video Releasing Magic Edition of H.G. Lewis Flick 'The Wizard of Gore' on (UK) Blu-Ray
Indicator to Release Limited Edition 'The Legacy' Blu-Ray in the UK This July
John Carpenter's 'Ghosts of Mars' Gets an Indicator Limited (UK) Blu-Ray
John Carpenter's 'Vampires' Gets an Indicator Limited Edition (UK) Blu-Ray
John Carpenter's 'Christine' Gets an Indicator Limited Edition (UK) Blu-Ray


Taino is a 2 bedroom 2 bathroom house in the settlement of Simms, Long Island. It was built by some of the original settlers of Long Island and is still owned by members of the Simms family to this day.
There is a comfortable living area and a bright and breezy kitchen / dining area over looking the ocean. A small screened in porch is great for enjoying the evenings outside and the back deck is an ideal place to lounge in the sun. A short walk to the beach and the clear aqua blue waters of the Caribbean sea.


KIEV, Ukraine - KIEV, Ukraine (AP) — Ukraine has paid too high a price for the democratic reforms ushered in by the 2004 Orange Revolution, according to the pro-Russian front-runner in the country's presidential race, who pledges to bring back the "rule of law" if elected next month.
Viktor Yanukovych, whose Kremlin-backed election victory in 2004 was overturned by the Supreme Court amid allegations of fraud, says the pro-Western revolution that brought his rivals to power has led to political chaos, corruption and a dismal economy.
"So what did this Orange Revolution give us?," Yanukovych asked in an interview Monday with The Associated Press. "Freedom of speech? That's very good. But what price did the Ukrainian people pay for this? For the development of this democratic principle in our country, the price was too great."
Democracy is "above all the rule of law," which the Orange Revolution has failed to bring, he said.
Since taking power in 2005 on a wave of hope and excitement, the revolution's leaders have disappointed many Ukrainians, fostering nostalgia among some for the stable, if autocratic, rule of an earlier era.
The Orange Revolution took Ukraine out of Russia's orbit, as the pro-Western leadership sought membership in the European Union and NATO. It also deepened animosity between the pro-Russian east and the west of the country, where Ukrainian nationalism is strong.
Yanukovych said his first priority as president would be to revive the use of the Russian language in schools and in the workplace, a move that would reverse the "forced Ukrainization" of the millions of Russian-speaking Ukrainians who support him.
"This is the main question that we have to solve right now, the one that is very seriously worrying the people," he said.
This change would comply with the one wish Russian President Dmitry Medvedev made last week for the Ukrainian elections.
"The only thing I really want is for the future president ... to be intent on warm, heartfelt, even brotherly relations between our countries, and for the Russian language not to be insulted," Medvedev said in a televised interview.
With elections less than three weeks away, Yanukovych, 59, is leading in the polls. The former electrician told the AP that he would put his weight behind Moscow on issues ranging from trade to security.
He repeated his pledge not to seek membership in NATO, Russia's Cold War foe. But he said he would give his full support to Medvedev's proposal for a joint European security regime, which has gotten an icy reception in most of Europe.
He also promised, if elected, to do everything in his power to speed Russia's entry into the World Trade Organization.
Viktor Yushchenko, the current president and the leader of the Orange Revolution, is going into the vote with approval ratings in the single digits. He has been at loggerheads with his former ally, Prime Minister Yulia Tymoshenko, for most of his time in office, causing political gridlock that has deepened the country's economic collapse and alienated voters.
Yanukovych, a barrel-chested hunting enthusiast, also denied that his 2004 presidential victory had been fixed. Instead the Supreme Court broke the law when it overturned his election and ordered another round of voting, he said.
"The third round of those elections was illegal," he said. "Why? Because five years have passed, and in those five years, the falsification of my election has basically not been proven. This means that those elections were legal. They were not rigged."
His campaign has focused on shaming Tymoshenko, his only real competition, for her leadership of the Orange Revolution, which he blames for turning Ukraine's government into one of the most corrupt in the world and its economy into one of the worst-performing.
"Democracy is above all rule of law, it is compliance with the law and constitution by everyone, and in these five years we have seen how the laws have been systematically broken, how the principles of the law have been replaced by political expediency," Yanukovych said.
In most of the country, the issues of language and national identity have been more divisive than bread-and-butter issues like unemployment. The word "Ukraine" derives from the Russian for "at the outskirts," an identity the leaders of the Orange Revolution have sought to uproot by promoting a unique Ukrainian identity. The use of Russian, seen by its opponents as a symbol of Soviet subjugation, has been phased out.
On a recent campaign trip to the Russian-speaking Crimean peninsula, where he enjoys broad support, Yanukovich poked fun at the Ukrainian language and the politicians who insist on speaking it.
As he mocked Tymoshenko's upbeat appraisals of the economy, he sarcastically switched into Ukrainian from Russian, drawing laughs from the crowd of about 2,000 supporters.
Switching back into Russian, he said, "I'm tired of hearing five years of this gibberish, and seeing this variety show performed by the Orange troupe."
Valentina Goncharova, a 59-year-old retiree who said she receives a pension of around $100 per month, said she supports Yanukovich not because of his promises of higher pensions and wages, but because of his pro-Russian views.
"The Crimea has always belonged to Russia," she said. "It has always been closer to Russia. I think that is why people support him here."


A former general manager of the Australian Loan Company has been recruited by a financial planning dealer group looking to diversify into the mortgage space.
Lesley Wood, former general manager at the Centrepoint Alliance-owned ALC, has been recruited by her former boss Robbie Bennetts to take up the role of head of finance at Beacon Financial Group, a financial planning licensee formed by the merger of the Titanium and Financial Link groups in 2012.
Mr Bennetts told Mortgage Business that Ms Wood will help the newly-formed dealer group "attract brokers" as it moves into the mortgage lending space.
The company has also hired former ALC senior business development manager Debbie Wilson to support Ms Wood within Beacon's mortgage arm, said Mr Bennetts, who was formerly CEO of ALC parent company Professional Investment Services and is now a stakeholder in the Beacon venture and external consultant to the group.
Owned Financial Professionals – told Mortgage Business sister title ifa in November 2013 that he was serious about the move into the mortgage sector.
Mr Daly struck a deal with mortgage aggregator Connective in 2013 but has also developed its own mortgage products.


The idea of this project is to develop an online chess application.
Chess is an interesting an challenging game played between two people. While playing the game, the players are need to make moves. The development of an online application can make it possible for the players to make moves even if they are not physically present together.
The two players should be able to register for the game play. When one player makes a move, an email should be sent to the other notifying him about the move and asking to play his. This way, the players can play the game whenever they have time and access to the internet.
The classes must implement all chess rules and moves, like "castlings", "en passant" captures, stalemates in case the opponent has no longer a legal move and his king is not under attack.


Chicken quarter, sheep liver, bone broth cube.
Duck necks, venison steaks, lamb spleen.
Buddy and I have nominated you for the Liebster Award, the Super Sweet Blogger Award, and the Sunshine Award!
That's a whole lotta meat!
PS: you've received an award!


Welcome to the last stop for all your quilting needs!
Turning your quilt tops into beautifully quilted masterpieces isn't just our job, it's our passion! Completing your projects using our TWO state-of-the-art Gammill Statler Stitcher Longarm Quilting Machines ensures your quilts are completed with unmatched quality and care. With over 30,000 edge to edge or custom designs to choose from, projects as small as a couch throw all the way up to a king size quilt will be given that extra flare to highlight your pattern placement and fabric selection. We understand all the hard work you put into your projects and will quilt them with the same loving care you used when piecing the tops together.
Since 2012, owner, Carol Duque has been actively building relationships and creating artwork in the quilting community of South Texas. Calico Junction grew from a hobby to a thriving business all thanks to the love and support of our friends and customers. When you love what you do, its hard for the passion not to shine through in your work. Contact Carol at Calico Junction to turn your projects into a reality.
We book projects and visits by appointment only.


text: Templates for use throughout the project.


text:
Jenson Button says McLaren moving in the right direction
LAT PHOTOGRAPHIC
Jenson Button will start the Formula One Malaysian Grand Prix seventh on the grid.
An upbeat Jenson Button said on Friday following qualifying that McLaren has already made progress after getting comfortably into the top 10 for the Formula One Malaysian Grand Prix.
Button, who was as high as sixth in the first qualifying session, finished the damp third and final session in eighth, then gained a spot from Kimi Räikkönen's penalty.
"Forgetting the wet conditions, I think we've improved from Australia," Button said. "I said yesterday that we're competitive in these conditions, but today that wasn't the case. I couldn't find the balance in the wet.
"But anyway if you look through qualifying, in Q1 and Q2 on dry tires, we were more competitive. Still nowhere near the top, but we were more competitive, and we should be very happy with what we've achieved so far this weekend. It's only five days after a pretty tough race for us, so we're making progress. And that's very positive."
Button, who finished ninth in Australia, has been saying he wanted a wet race, but he admitted he's changed his mind.
"After this, no I'm not. I couldn't find a balance out there, and I struggled with lack of grip in high speed at the rear, lots of rear movement. Most of the time our car has been very good in the wet, but today it isn't. I'd take that any day of the week for a better car in the dry.
"We've improved the car in the dry, which is good. It's getting there. We've got a bit of work to do, and we lucked in with the rain in Q2 at the end, but tomorrow we're looking forward to the race. I wasn't really looking forward to the race in Melbourne."


Comprehensive Nuclear-Test-Ban Treaty: The U.S. should ratify it now.
A recent report removes all of the legitimate scientific objections to ratifying the agreement.
A picture taken in 1971 shows a nuclear explosion in Mururoa atoll.
In response, White House spokesman Jay Carney warned North Korea against "engaging in any more hostile or provocative actions." As we watch to see what North Korea does next, this is an opportune time for the United States to reassess its own policies on nuclear tests—not only because of the political landscape, but also because of changes in science.
One of the simplest first steps toward escaping the nuclear menace that has haunted us for more than 65 years would be to encourage a worldwide ban on the testing of nuclear weapons. It is hard to see a downside to such a move, as it would also help constrain the ability of current non-nuclear states to develop nuclear weapons. Nevertheless, the U.S. Congress, in its infinite wisdom, has managed to block implementation of an international Comprehensive Nuclear-Test-Ban Treaty for the past 15 years.
Each State Party undertakes not to carry out any nuclear weapon test explosion or any other nuclear explosion, and to prohibit and prevent any such nuclear explosion at any place under its jurisdiction or control.
Each State Party undertakes, furthermore, to refrain from causing, encouraging, or in any way participating in the carrying out of any nuclear weapon test explosion or any other nuclear explosion.
But despite the fact that Bill Clinton was the first of 72 leaders to sign the proposed CTBT on Sept. 24, 1996, at the United Nations, and even though the United States has itself not carried out a nuclear weapons test since Sept. 23, 1992, Congress has consistently refused to ratify the agreement. The primary objections are that the treaty could damage the safety and viability of our existing arsenal; make it difficult to detect tests or explosions carried out by other countries; and threaten the United States supremacy in nuclear technology if other countries engage in covert testing to develop new technologies.
Provided that sufficient resources and a national commitment to stockpile stewardship are in place, the committee judges that the United States has the technical capabilities to maintain a safe, secure, and reliable stockpile of nuclear weapons into the foreseeable future without nuclear-explosion testing. … As long as the United States sustains its technical competency, and actively engages its nuclear scientists and other expert analysts in monitoring, assessing, and projecting possible adversarial activities, it will retain effective protection against technical surprises. This conclusion holds whether or not the United States accepts the formal constraints of the CTBT.
While the conclusions of the NAS report do not come as a great surprise to many technical experts who have long advocated for the CTBT, this is the first time a high-level, nonpartisan technical group has made such a comprehensive, conclusive analysis.
Of course, it would be naive to assume that Congress has failed to ratify the CTBT only because of legitimate technical concerns. In all such issues of national security, politics plays a dominant role—and Republican politicians in particular are loath to appear either soft on defense or willing to take orders from other countries. Nevertheless, now that the apparent technical obligations against ratifying the CTBT have been all but removed, we can begin to re-energize the political campaign for U.S. ratification.
He is right: The United States needs to lead here. If we do not forgo the right to test our own vast arsenal, it is hypocritical to vilify North Korea for testing nuclear weapons or Iran for possibly trying to manufacture them. Of course, ratifying the CTBT would not guarantee that North Korea or Iran would respond appropriately. They probably won't—at least not right away. But, other than Pakistan, India, China, Israel, and North Korea, the United States is the only nuclear weapons state that has not ratified the treaty.* Ratification by the United States, though not exactly snatching the current moral high ground, would at least help establish some additional credibility in working with the rest of the international community to stem activities by future rogue states. By continuing to hold out, the United States isn't making itself, or the rest of the world, any safer.


text:
Chicago Morning Star
US Center for Disease Control and Prevention investigates E. Coli outbreak in 8 States
2 months ago By Adyson Sipes
The US Center for Disease Control and Prevention announced on Wednesday that they were investigating an E. Coli outbreak in eight states of the US. The outbreak infected at least 17 people, according to the CDC.
The CDC said that seven people were hospitalized due to the outbreak of the disease. The cases have been reported in Arizona, California, Colorado, Wisconsin, Maryland, Washington, Montana, and Idaho. According to recent investigations, no deaths have been reported. Hemolytic uremic syndrome, a type of kidney failure, has been developed in two of the hospitalized patients.
E. coli O157: H7, a particular type of bacteria, is associated with this disease. The bacteria is highly toxic as it produces toxins within the several days of swallowing the bugs. The symptoms include bloody diarrhea, vomiting, and cramps in the stomach. In many cases, the problem gets resolved within a week but sometimes it becomes worse and lasts long.
The investigators in Maryland are waiting for the results of whether the unopened Ready Pac Bistro Bowl Chicken Caesar Salad contained E. coli or not. The patients reported in Maryland ate this particular salad. In other states, things are different, according to the investigators. The CDC has recommended the public not to eat and sell this salad if it has the 'best by' date of October 31. The agency is still investigating the root cause of the outbreak.
The CDC is investigating some other products to know whether they have any link with the current outbreak of E. coli in eight States of the US. 17 patients have been reported to be infected due to the outbreak. The health officials are trying to reach the root cause of the spread of the bacteria. Seven people have been hospitalized so far and two of them are suffering from the hemolytic uremic syndrome. The CDC has recommended the public to take extra care of their health.
Adyson Sipes
Staff writer for the Chicago Morning Star
Centers for Medicare and Medicaid Services award $16 million to Lurie Children's Hospital
Ann & Hobert H. Lurie Children's Hospital of Chicago has received an award of $16
Chicago patents consider gun violence, cyberbullying, and poverty as top 3 social concerns for youth
Ann & Robert H. Lurie Children's Hospital of Chicago and the Chicago Department of Public
Legislation for improved breast cancer coverage will soon be in effect
State Representative Mike Halpin, D-Rock Island, passed a law related to breast cancer coverage. The
Choking deaths fall substantially in past 50 years in US children
A report is published in the Journal of American Medicine Association (JAMA). The report revealed
Centers for Disease Control will investigate health hazards in Sauget, Duckworth says
Tammy Duckworth, a US Senator, has received requested by a federal health agency to conduct
$1 billion fraud scheme charges for Health Technology former personnel
Outcome Health (Outcome)'s four former executives and two former employees are charged in a $1
Washington State University suggests Cannabis can relieve headache
The researchers from Washington State University suggested that Cannabis could relieve headaches. They published a
PCORI awards $7 million to Lurie Children's Hospital of Chicago for research work
The Patient-Centered Outcomes Research Institute awarded $7 million to the Ann & Hobert H. Lurie
Centerstone hosts Spotlight Series events
Centerstone has hosted two Spotlight Series events in October featuring Ryan Hampton. Centerstone is a
Tags: CDC, E. Coli, health, US Center for Disease Control and Prevention
Previous Three mass shootings in California in four days kill 10 people
Next CBP arrests teenager involved in drugs smuggling across US-Mexico border
Illinois News Chicago Crime Chicago Police sports Donald Trump court Lori Lightfoot report China incident Chicago Police Hockey Chicago Steel Chicago Cubs shooting
First Fridays is back in downtown Aurora on Feb. 7 with theme of love
10 hours ago By Shawn Genzone
Chicagoans come on street in huge number for Women's March 2020
12 hours ago By Gabriella Remillard
Matt Deschamps joins Chicago Steel
1 day ago By Ivan Cease
Tax Flight: Reality versus Myth
1 day ago By Adyson Sipes
Don't Let Fans Drive Drunk as Super Bowl season begins
1 day ago By Jackson Sorbo
Contact us: editor@chicagomorningstar.com
© Сhicago Morning Star | 2020


Very important for beautiful hands is the usage of suitable soaps. Liquid soaps of REFAN care for the skin of the hands by effectively cleaning it without drying it.
As a result, you can enjoy soft and delicate hands.
Our liquid soaps have long lasting scents that create a feeling of freshness. Available in easy to use package with a pump.


As I coach clients to success, I tell them, "If you want to be successful, you must first believe in yourself, be obsessed with your goals, and most of all, you must have faith!" F.A.I.T.H. is more than just a word. As you read this, you will begin to feel it in your gut that the path to success requires F.A.I.T.H.
This is a requirement for anyone that is being mentored. Having a vision is crucial in all aspects of life. Many times when a new applicant applies for mentorship, many times there is no clear vision of where they see their life. Many people just know that they want to "be rich," but nothing strong enough to be called crazy.
I encourage you to think outside the box. Have faith in your crazy vision. Become obsessed with your vision.
As a business coach, setting up expectations and having our members is to fail fast, learn faster. The only way to get to the next level of your journey is by having the courage to accepting challenges and failures. Then have faith that you will get back up again and continue to move forward toward your vision.
I challenge you to write down every time a business transaction didn't go through and why. Have faith that you will learn from those experiences for more successful transactions in the future.
As a business coach, it is paramount that I encourage entrepreneurs to have faith in networking. We introduce our coaching members to highly successful individuals through our private events. Success networking with the founder of UGGS, co-creator of Rich Dad, Poor Dad, to name a few; have changed their lives on many levels.
How much faith do you have that your business will grow if you committed to knowing even just those few names above? Faith in the results of networking is guaranteed to take you to your vision.
Take action on your vision.
As head coach of Stegela Success Mastery, it's important to set the example of an action taker on my own goals and vision as well. Our coaching members have faith in the action steps that have been advised to take to reach their vision.
You may have faith in your business, but remember, a vision is only as good as the action put behind it to make it a reality.
If someone has already achieved levels of success that you want to achieve, wouldn't you want to learn how they did it? Wouldn't you want to learn from their mistakes, before you make those same mistakes? It has been proven time and time again that the longer you don't have a mentor, the more you will realize you need a coach.
My friends, you must have faith mentorship. Have faith that through mentorship, you will get results quicker and with much fewer mistakes and wasted time.
In closing, have faith in the process, the people, and the action steps. Most of all though, have faith in being coached. Have enough faith to admit that we all need coaching in business, just as much as a professional athlete needs coaching in their sport.
Jeff Rollon is a serial entrepreneur, author, business coach, and philanthropist. He enjoys helping others while living with a positive attitude and a strong entrepreneurial spirit. His passion is helping budding entrepreneurs get started and profitable within their first year in business.


GORHAM, Maine – Senior Olivia Mull (Portland, Maine/Cheverus) and freshman Alexandria Allain (Carmel, Maine/Hermon) each scored a goal as the University of Southern Maine Huskies earned their eighth win by shutout this season defeating the Saint Joseph's College Monks 2-0 in a non-conference women's soccer game Wednesday night at Hannaford Field.
With the win, Southern Maine ties the program record for wins in a season with 12, improving to 12-4-1. The Huskies' 2000 team finished with 12 wins in a 12-8-0 season. The loss snaps a six-game win streak for the Monks who are now 13-3 overall.
Controlling the play in the opening minutes of the game, Mull put the Huskies up early scoring her third goal of the season in the sixth minute. Mull hit a one-time volley to the far post off of a service from junior Ciera Berthiaume (Windham, Maine) for the 1-0 lead, which the Huskies carried through the half.
Saint Joseph's pressed in the second half and had several quality attempts in the first 20 minutes of the second frame. Freshman Emma Auclair (Kittery, Maine/Traip Academy) and senior Haley DaGraca (Saco, Maine/Thornton Academy) each had near goals cleared off the line in the 64th and 65th minute. The Huskies' back line played another strong game led by outstanding play from senior Sarah Michaud (Candia, N.H./Manchester Central), juniors Emily Baker (Brunswick, Maine) and Emily Bragg (Gorham, Maine) and sophomore Elise Porter (Ballston Spa, N.Y./Burnt Hills-Ballston Lake).
With the Monks searching for the equalizer, Allain and senior Emma Dennison (South Portland, Maine) gave the Huskies an insurance goal in the 71st minute with solid passing down the near side of the field. After connecting on a pair of passes along the sideline, Dennison fed Allain a through ball into the left side of the box, and Allain finished to the far post for her seventh goal of the season.
Southern Maine is on the road for its final regular season contest of 2018 and travels to Castleton University on Saturday (4:30 p.m.). Saint Joseph's begins the GNAC tournament on Saturday (12:00 pm) hosting Simmons.