text:
package org.trianacode.shiwaall.iwir.importer.utils;

import org.shiwa.desktop.data.transfer.FGIWorkflowReader;
import org.shiwa.fgi.iwir.*;
import org.trianacode.TrianaInstance;
import org.trianacode.enactment.AddonUtils;
import org.trianacode.shiwaall.iwir.execute.Executable;
import org.trianacode.shiwaall.iwir.factory.TaskHolderFactory;
import org.trianacode.shiwaall.test.InOut;
import org.trianacode.taskgraph.*;
import org.trianacode.taskgraph.Task;
import org.trianacode.taskgraph.proxy.ProxyInstantiationException;
import org.trianacode.taskgraph.tool.Tool;

import javax.xml.bind.JAXBException;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;

// TODO: Auto-generated Javadoc
/**
 * Created by IntelliJ IDEA.
 * User: Ian Harvey
 * Date: 24/10/2011
 * Time: 14:49
 * To change this template use File | Settings | File Templates.
 */
public class ImportIwir {

    /** The abstract hash map. */
    private HashMap<AbstractTask, Task> abstractHashMap = new HashMap<AbstractTask, Task>();

    /** The data links. */
    private HashSet<DataLink> dataLinks = new HashSet<DataLink>();

    /** The std. */
    boolean std = false;

    /** The fgi workflow reader. */
    private FGIWorkflowReader fgiWorkflowReader = null;

    /** The Constant IWIR_NODE. */
    public static final String IWIR_NODE = "iwirNode";

    /**
     * Std out.
     *
     * @param string the string
     */
    private void stdOut(String string){
        if(std){
            System.out.println(string);
        }
    }

    /**
     * The main method.
     *
     * @param args the arguments
     * @throws IOException Signals that an I/O exception has occurred.
     * @throws CableException the cable exception
     * @throws JAXBException the jAXB exception
     * @throws ProxyInstantiationException the proxy instantiation exception
     * @throws TaskException the task exception
     */
    public static void main(String[] args) throws IOException, CableException, JAXBException, ProxyInstantiationException, TaskException {
        ImportIwir importIwir = new ImportIwir();

        IWIR iwir = new IWIR(new File("/Users/ian/Downloads/fgibundle/workflow.xml.iwir"));

        TrianaInstance engine = new TrianaInstance(args);
        engine.init();
        TaskGraph taskGraph = importIwir.taskFromIwir(iwir, null);
        System.exit(0);
    }

    /**
     * sets the fgiWorkflowReader for this bundle.
     *
     * @param fgiBundleFile the fgi bundle file
     * @throws JAXBException the jAXB exception
     * @throws IOException Signals that an I/O exception has occurred.
     */
    private void initFGIWorkflowReader(File fgiBundleFile) throws JAXBException, IOException {
        if(fgiBundleFile != null){
            System.out.println("fgiBundleFile = "
                    + fgiBundleFile.exists() + " "
                    + fgiBundleFile.getAbsolutePath());
            fgiWorkflowReader = new FGIWorkflowReader(fgiBundleFile);
        } else {
            System.out.println("No fgi bundle returned, " +
                    "best effort triana-only tools will be used");
        }
    }

    /**
     * Task from iwir.
     *
     * @param iwir the iwir
     * @param fgiBundle the fgi bundle
     * @return the task graph
     * @throws TaskException the task exception
     * @throws ProxyInstantiationException the proxy instantiation exception
     * @throws CableException the cable exception
     * @throws JAXBException the jAXB exception
     * @throws IOException Signals that an I/O exception has occurred.
     */
    public TaskGraph taskFromIwir(IWIR iwir, File fgiBundle) throws TaskException, ProxyInstantiationException, CableException, JAXBException, IOException {

        initFGIWorkflowReader(fgiBundle);

        //create a new taskgraph for the workflow
        AbstractTask mainTask = iwir.getTask();
        TaskGraph taskGraph = TaskGraphManager.createTaskGraph();

        //recurse the iwir structure, add to taskgraph
        recordAbstractTasksAndDataLinks(mainTask, taskGraph);
        stdOut(taskGraph.toString());

        //The following block of code looks for root IWIR ports which
        //map to more than one task. Triana likes one 2 one mappings, IWIR allows one 2 many.

        // Make a copy of all the data links to iterate through
        ArrayList<DataLink> copyOfDataLinks = new ArrayList<DataLink>();
        copyOfDataLinks.addAll(dataLinks);

        //for matching ports to new "splitting" tasks
        HashMap<AbstractPort, Task> alternativeNodes = new HashMap<AbstractPort, Task>();

        // map of the root input port to the multiple datalink it has connected to it
        HashMap<AbstractPort, ArrayList<DataLink>> collisions = new HashMap<AbstractPort, ArrayList<DataLink>>();

        //iterate through datalinks
        for (DataLink dataLink : dataLinks) {

            //check to see if ports task is the root taskgraph.
            if(abstractHashMap.get(dataLink.getFromPort().getMyTask()) == taskGraph
                    && !collisions.containsKey(dataLink.getFromPort())
                    ){

                AbstractPort sendingPort = dataLink.getFromPort();
                ArrayList<DataLink> collidingLinks = new ArrayList<DataLink>();

                //iterate through the copy of the links
                for(DataLink anotherDataLink : copyOfDataLinks) {

                    //if the link is not itself && they have the same "from" port, its a collision
                    if(
                            dataLink != anotherDataLink &&
                                    dataLink.getFrom().equals(anotherDataLink.getFrom())){

                        System.out.println("####### port collision, " + dataLink.getFrom()
                                + " : " + dataLink.getTo()
                                + " : " + anotherDataLink.getTo()
                        );

                        //build up a list of colliding datalinks from this port
                        collidingLinks.add(anotherDataLink);
                    }
                }

                //if there is more than one datalink on this port,
                // add the original link too, and store the port
                if(collidingLinks.size() > 0){
                    System.out.println("port " + sendingPort.getName() + " collides with " + collidingLinks.size());
                    collidingLinks.add(dataLink);
                    collisions.put(sendingPort, collidingLinks);
                }
            }
        }

        //go through the colliding ports
        for(AbstractPort abstractPort : collisions.keySet()){

            Task scopedTaskgraph = abstractHashMap.get(abstractPort.getMyTask());
            if( scopedTaskgraph instanceof TaskGraph){
                System.out.println("Will create now splitting task in " + taskGraph.getToolName());

                //create the splitting tool which passes one input to multiple receiveing nodes
                Tool tool = AddonUtils.makeTool(InOut.class, abstractPort.getUniqueId(), scopedTaskgraph.getProperties());

                Task task = taskGraph.createTask(tool);

//                taskGraph.connect(task.addDataOutputNode(), abstractHashMap.get(abstractPort.getMyTask()).addDataInputNode());

                //add connection from splitting node to each new port.
                for(DataLink anotherDataLink : collisions.get(abstractPort)){

                    Task receivingTask = abstractHashMap.get(anotherDataLink.getToPort().getMyTask());
                    Node receivingNode = receivingTask.addDataInputNode();
                    Node sendingNode = task.addDataOutputNode();

                    taskGraph.connect(sendingNode, receivingNode);

                    //Record the links for data matching up later
                    if(receivingTask.isParameterName(Executable.EXECUTABLE)){
                        Executable executable = (Executable) receivingTask.getParameter(Executable.EXECUTABLE);
//                        executable.addPort(receivingNode.getTopLevelNode().getName(), anotherDataLink.getToPort().getName());
                        executable.addExecutableNodeMapping(receivingNode, anotherDataLink.getToPort());
                        receivingTask.setParameter(Executable.EXECUTABLE, executable);
                    }

                    if(task.isParameterName(Executable.EXECUTABLE)){
                        Executable executable = (Executable) task.getParameter(Executable.EXECUTABLE);
//                        executable.addPort(sendingNode.getTopLevelNode().getName(), anotherDataLink.getFromPort().getName());
                        executable.addExecutableNodeMapping(sendingNode, anotherDataLink.getFromPort());
                        receivingTask.setParameter(Executable.EXECUTABLE, executable);
                    }

                }

                //for future reference, this port now maps to one specific task
                alternativeNodes.put(abstractPort, task);
            }

        }

        //continue with standard cable creation.

        HashSet<AbstractPort> toIgnore = new HashSet<AbstractPort>();

        for (DataLink dataLink : dataLinks) {
            if(!toIgnore.contains(dataLink.getFromPort())){

                stdOut("\nLink from " + dataLink.getFromPort() +
                        " (" + dataLink.getFromPort().getType().toString() + ") " +
                        " to " + dataLink.getToPort() +
                        " (" + dataLink.getToPort().getType().toString() + ")"
                );

                AbstractPort outgoingPort = dataLink.getFromPort();
                AbstractPort incomingPort = dataLink.getToPort();

                stdOut(outgoingPort.getPredecessors().toString());
                stdOut(outgoingPort.getAllSuccessors().toString());

                stdOut(incomingPort.getPredecessors().toString());
                stdOut(incomingPort.getAllSuccessors().toString());

                AbstractTask sendingAbstract = outgoingPort.getMyTask();
                AbstractTask receivingAbstract = incomingPort.getMyTask();

                Task sendingTask = abstractHashMap.get(sendingAbstract);
                Task receivingTask = abstractHashMap.get(receivingAbstract);

                if(alternativeNodes.keySet().contains(outgoingPort)){
                    receivingTask = alternativeNodes.get(outgoingPort);
                    toIgnore.add(outgoingPort);
                }

//            stdOut("Will connect " + sendingTask + " to " + receivingTask);

                if (sendingTask == receivingTask.getParent()) {
                    Node receivingNode = receivingTask.addDataInputNode();
                    Node graphNode = ((TaskGraph) sendingTask).addDataInputNode(receivingNode);
                    inputChain(outgoingPort, graphNode);

                    TaskGraph parentGraph = ((TaskGraph)sendingTask);
                    parentGraph.setParameter(outgoingPort.getName(), graphNode.getAbsoluteNodeIndex());
                    System.out.println("fromPort " + outgoingPort.getName()
                            + " graphPort " + graphNode.getName()
                            + " index " + graphNode.getAbsoluteNodeIndex()
                    );

                    if(receivingTask.isParameterName(Executable.EXECUTABLE)){
                        Executable executable = (Executable) receivingTask.getParameter(Executable.EXECUTABLE);
//                        executable.addPort(receivingNode.getTopLevelNode().getName(), incomingPort.getName());
                        executable.addExecutableNodeMapping(receivingNode, incomingPort);
                        receivingTask.setParameter(Executable.EXECUTABLE, executable);
                    }
                }

                if (receivingTask == sendingTask.getParent()) {
                    Node sendingNode = sendingTask.addDataOutputNode();
                    Node graphNode = ((TaskGraph) receivingTask).addDataOutputNode(sendingNode);
                    outputChain(incomingPort, graphNode);

                    if(sendingTask.isParameterName(Executable.EXECUTABLE)){
                        Executable executable = (Executable) sendingTask.getParameter(Executable.EXECUTABLE);
//                        executable.addPort(sendingNode.getTopLevelNode().getName(), outgoingPort.getName());
                        executable.addExecutableNodeMapping(sendingNode, outgoingPort);
                        sendingTask.setParameter(Executable.EXECUTABLE, executable);
                    }
                }

                //check both are atomic tasks
                if (sendingAbstract instanceof org.shiwa.fgi.iwir.Task
                        && receivingAbstract instanceof org.shiwa.fgi.iwir.Task) {

                    if (sendingTask.getParent() == receivingTask.getParent()) {
                        TaskGraph scopeTaskgraph = sendingTask.getParent();
                        stdOut("Connecting "
                                + sendingTask.getQualifiedToolName() + " to "
                                + receivingTask.getQualifiedToolName() + " in "
                                + scopeTaskgraph.getQualifiedToolName()
                        );
                        Node sendingNode = sendingTask.addDataOutputNode();
                        Node receivingNode = receivingTask.addDataInputNode();
                        scopeTaskgraph.connect(sendingNode, receivingNode);

                        if(sendingTask.isParameterName(Executable.EXECUTABLE)){
                            Executable executable = (Executable) sendingTask.getParameter(Executable.EXECUTABLE);
//                            executable.addPort(sendingNode.getTopLevelNode().getName(), outgoingPort.getName());
                            executable.addExecutableNodeMapping(sendingNode, outgoingPort);
                            sendingTask.setParameter(Executable.EXECUTABLE, executable);
                        }
                        if(receivingTask.isParameterName(Executable.EXECUTABLE)){
                            Executable executable = (Executable) receivingTask.getParameter(Executable.EXECUTABLE);
//                            executable.addPort(receivingNode.getTopLevelNode().getName(), incomingPort.getName());
                            executable.addExecutableNodeMapping(receivingNode, incomingPort);
                            receivingTask.setParameter(Executable.EXECUTABLE, executable);
                        }
                    }
                }
            }
        }
        return taskGraph;
    }

    /**
     * Input chain.
     *
     * @param outgoingPort the outgoing port
     * @param inputNode the input node
     */
    private void inputChain(AbstractPort outgoingPort, Node inputNode) {
        try {
            for (DataLink dataLink : dataLinks) {
                if (dataLink.getToPort() == outgoingPort) {
                    //TODO
                    Task scopedTask = abstractHashMap.get(dataLink.getFromPort().getMyTask());
                    if (!(scopedTask instanceof TaskGraph)) {
                        Node outputNode = scopedTask.addDataOutputNode();
                        scopedTask.getParent().connect(outputNode, inputNode);
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * Output chain.
     *
     * @param iwirReceivingPort the iwir receiving port
     * @param graphOutputNode the graph output node
     * @throws NodeException the node exception
     * @throws CableException the cable exception
     */
    private void outputChain(AbstractPort iwirReceivingPort, Node graphOutputNode) throws NodeException, CableException {
        for (DataLink dataLink : dataLinks) {
            if (dataLink.getFromPort() == iwirReceivingPort) {
                //TODO
                Task scopedTask = abstractHashMap.get(dataLink.getToPort().getMyTask());
                if (!(scopedTask instanceof TaskGraph)) {
                    Node inputNode = scopedTask.addDataInputNode();
                    scopedTask.getParent().connect(graphOutputNode, inputNode);
                }
            }
        }
    }

    /**
     * Creates the from iwir task.
     *
     * @param iwirTask the iwir task
     * @param tg the tg
     * @return the task
     * @throws TaskException the task exception
     * @throws JAXBException the jAXB exception
     * @throws IOException Signals that an I/O exception has occurred.
     * @throws ProxyInstantiationException the proxy instantiation exception
     */
    private Task createFromIWIRTask(AbstractTask iwirTask, TaskGraph tg) throws TaskException, JAXBException, IOException, ProxyInstantiationException {

        //if the iwirTask is a standard IWIR Atomic Task, try to find and/or make a tool for it.
        //this requires the taskType string, the name and the taskgraph properties

        System.out.println("Making " + iwirTask.getUniqueId());

        Task trianaTask = TaskTypeRepo.getTaskFromType(
                (org.shiwa.fgi.iwir.Task) iwirTask, fgiWorkflowReader, tg, true);
//        Tool newTask = TaskTypeRepo.getToolFromType(
//                (org.shiwa.fgi.iwir.Task) iwirTask, tg.getProperties());

        System.out.println();

        //add the iwir property strings to the triana task
        for (Property property : iwirTask.getProperties()) {
            trianaTask.setParameter(property.getName(), property.getValue());
            trianaTask.setParameterType(property.getName(), Tool.USER_ACCESSIBLE);
        }

        return trianaTask;
    }

    /**
     * Adds the nodes.
     *
     * @param mainTask the main task
     * @param task the task
     * @param tg the tg
     * @throws NodeException the node exception
     */
    private void addNodes(AbstractTask mainTask, Task task, TaskGraph tg) throws NodeException {
        Executable executable = null;
        if(task.isParameterName(Executable.EXECUTABLE)){
            executable = (Executable) task.getParameter(Executable.EXECUTABLE);
        }
        for (AbstractPort port : mainTask.getAllInputPorts()) {
            System.out.println("Input port " + port.getName() + " " + port.getClass().getCanonicalName());
            Node newNode = null;
            if (port instanceof InputPort) {
                newNode = tg.addDataInputNode(task.addDataInputNode());
            }
            if (port instanceof LoopPort || port instanceof LoopElement) {
//                newNode = task.addParameterInputNode("loop");
                newNode = tg.addDataInputNode(task.addDataInputNode());
                stdOut("Loop port found " + port.getName());
            }
            if(newNode != null && executable != null){
//                executable.addPort(newNode.getTopLevelNode().getName(), port.getName());
                executable.addExecutableNodeMapping(newNode.getTopLevelNode(), port);
            }

        }
        for (AbstractPort port : mainTask.getAllOutputPorts()) {
            Node newNode = null;
            if (port instanceof OutputPort) {
                newNode = tg.addDataOutputNode(task.addDataOutputNode());
            }
            if (port instanceof LoopPort) {
                newNode = task.addParameterOutputNode("loop");
            }
            if(newNode != null && executable != null){
//                executable.addPort(newNode.getTopLevelNode().getName(), port.getName());
                executable.addExecutableNodeMapping(newNode.getTopLevelNode(), port);
            }
        }
        if(executable != null){
            task.setParameter(Executable.EXECUTABLE, executable);
        }
    }

    /**
     * Record abstract tasks and data links.
     *
     * @param mainTask the main task
     * @param tg the tg
     * @return the task graph
     * @throws ProxyInstantiationException the proxy instantiation exception
     * @throws TaskException the task exception
     * @throws IOException Signals that an I/O exception has occurred.
     * @throws JAXBException the jAXB exception
     */
    private TaskGraph recordAbstractTasksAndDataLinks(AbstractTask mainTask, TaskGraph tg) throws ProxyInstantiationException, TaskException, IOException, JAXBException {
//        TaskGraph taskGraph = TaskGraphManager.createTaskGraph();
//        taskGraph.setToolName(mainTask.getName());
        tg.setToolName(mainTask.getName());

        //If there is only one task in the workflow, the mainTask with be a Task (ie not Compound)

        if(mainTask instanceof org.shiwa.fgi.iwir.Task) {
            abstractHashMap.put(mainTask, tg);

            //create a new Triana Task from the IWIR info, and add to taskgraph
            Task task = createFromIWIRTask(mainTask, tg);

            addNodes(mainTask, task, tg);

        } else {

            dataLinks.addAll(((AbstractCompoundTask) mainTask).getDataLinks());
            abstractHashMap.put(mainTask, tg);

            if (!(mainTask instanceof org.shiwa.fgi.iwir.Task) && !(mainTask instanceof BlockScope)) {
                Task controlTask = TaskHolderFactory.getTaskHolderFactory().addTaskHolder(mainTask, tg);

//                Task controlTask = tg.createTask(ToolUtils.initTool(taskHolder, tg.getProperties()));
//            taskGraph.createTask(ToolUtils.initTool(taskHolder, taskGraph.getProperties()));
                abstractHashMap.put(mainTask, controlTask);

                addNodes(mainTask, controlTask, tg);
            }

            for (AbstractTask iwirTask : mainTask.getChildren()) {
                if (iwirTask instanceof org.shiwa.fgi.iwir.Task) {
//                    String taskType = ((org.shiwa.fgi.iwir.Task) iwirTask).getTasktype();
//
//                    //if the iwirTask is a standard IWIR Atomic Task, try to find and/or make a tool for it.
//                    //this requires the taskType string, the name and the taskgraph properties
//
//                    Tool newTask = TaskTypeToTool.getToolFromType(
//                            (org.shiwa.fgi.iwir.Task) iwirTask, fgiWorkflowReader, tg.getProperties());
//
//                    Task trianaTask = tg.createTask(newTask);
//                    trianaTask.setToolName(iwirTask.getName());
//                    trianaTask.setParameter(Executable.TASKTYPE, taskType);
//
//                    //add the iwir property strings to the triana task
//                    for (Property property : iwirTask.getProperties()) {
//                        trianaTask.setParameter(property.getName(), property.getValue());
//                        trianaTask.setParameterType(property.getName(), Tool.USER_ACCESSIBLE);
//                    }
                    Task trianaTask = createFromIWIRTask(iwirTask, tg);
                    abstractHashMap.put(iwirTask, trianaTask);
                } else {
                    if (iwirTask instanceof AbstractCompoundTask) {

                        TaskGraph innerTaskGraph = TaskGraphManager.createTaskGraph();
                        TaskGraph concreteTaskGraph = (TaskGraph) tg.createTask(innerTaskGraph);
                        recordAbstractTasksAndDataLinks(iwirTask, concreteTaskGraph);

//                    TaskGraph innerTaskGraph = recordAbstractTasksAndDataLinks(iwirTask);
//                    TaskGraph concreteTaskGraph = (TaskGraph) taskGraph.createTask(innerTaskGraph);
                    }
                }
            }
        }
        return tg;
    }

    //top level connections

//            if (sendingTask == taskGraph && receivingAbstract instanceof org.shiwa.fgi.iwir.Task) {
//                if (receivingTask.getParent() == sendingTask) {
//                    stdOut("Connecting " + receivingTask + " to the parent graph");
//                    taskGraph.addDataInputNode(receivingTask.addDataInputNode());
//                }
//            }
//
//            if (receivingTask == taskGraph && sendingAbstract instanceof org.shiwa.fgi.iwir.Task) {
//                if (sendingTask.getParent() == taskGraph) {
//                    stdOut("Connecting " + sendingTask + " to the parent graph");
//                    taskGraph.addDataOutputNode(sendingTask.addDataOutputNode());
//                }
//            }
//            Node outputNode;
//            Node inputNode;
//            TaskGraph scopeTaskGraph = sendingTask.getParent();

    //TODO Input chain
//            if(!(receivingTask instanceof TaskGraph)){
//                for (AbstractPort abstractPort : incomingPort.getPredecessors()){
//                    stdOut("**predecessors " +
//                            abstractHashMap.get(abstractPort.getMyTask()).getToolName());
//                    if(abstractPort.getPredecessors().size() != 0){
//                        List<AbstractPort> ports = abstractPort.getPredecessors();
//                        for(AbstractPort port : ports){
//                            stdOut(abstractHashMap.get(port.getMyTask()));
//                        }
//                    }
//
//
//                    Node scopeNode = receivingTask.addDataInputNode();
//                    stdOut("Tasks input node " + scopeNode.getName());
//                    Task topLevelTask;
//                    List<AbstractPort> abstractPorts = incomingPort.getPredecessors();
//                    while(abstractPorts.size() > 0){
//                        for(AbstractPort port : abstractPorts){
//                            topLevelTask = abstractHashMap.get(port.getMyTask());
//                            stdOut("pre " + topLevelTask.getToolName());
//
//                            if(topLevelTask instanceof TaskGraph){
//                                TaskGraph scopeGraph = (TaskGraph)topLevelTask;
//                                stdOut("node " + scopeNode.getName());
//                                stdOut("in graph " + scopeGraph.getToolName());
//                                Node newNode = scopeGraph.addDataInputNode(scopeNode);
//                                stdOut("new node " + newNode.getName());
//                                scopeNode = newNode;
//                            }
//                        }
//                        stdOut(abstractPorts.get(0).getPredecessors().size());
//                        abstractPorts = abstractPorts.get(0).getPredecessors();
//                    }
//
//                }
//
//            }

//            //TODO Output chain
//            if(!(sendingTask instanceof TaskGraph)){
//                for( AbstractPort abstractPort : outgoingPort.getAllSuccessors()){
//                    stdOut("**successor " +
//                            abstractHashMap.get(abstractPort.getMyTask()).getToolName());
//                }
//
//            }

//            stdOut("\nWill connect tasks " + sendingTask.getToolName()
//                    + " to " + receivingTask.getToolName());
//            if(sendingTask.getParent() == receivingTask.getParent() && scopeTaskGraph != null){
//                outputNode = sendingTask.addDataOutputNode();
//                inputNode = receivingTask.addDataInputNode();
//                stdOut("In scope taskGraph : " + scopeTaskGraph);
//                scopeTaskGraph.connect(outputNode, inputNode);
//            } else {
//
//                stdOut("Out of scope");
//            }
//
//        }
////        addTaskGraphNodesFromIWIR(mainTask);
//        return taskGraph;
//    }
}

redpajama_set_name: RedPajamaGithub


by Chris Colin and Rob Baedeker ; illustrated by Tony Millionaire.
Giovanni Della Casa ; edited and translated by M.F. Rusnak.
Chicago ; London : The University of Chicago Press, 2013.
Sevilla : Instituto de la Cultura y las Artes de Sevilla, Ayuntamiento de Sevilla, 2013.
London : John Murray, 2013.
شرحه وتممه محمد بن حسين الغول. / sharaḥahu wa-tammamahu Muḥammad ibn Ḥusayn al-Ghūl.
القاهرة : دار المحدثين، 2013. / al-Qāhirah : Dār al-Muḥaddithīn, 2013.
الطبعة ١. / al-Ṭabʻah 1.
New York : Twelve, 2012.


text:
/* This is just an example. You shouldn't do this. */
menuitem#helloworld-hello {
  color: red !important;
}


Clipper Premier, Standard and Expert serve the needs of small and midsized companies across a broad range of manufacturing industries and production environments. With more than 2000 customers and 30,000 users throughout Europe, Clipper is one of the most widely adopted ERP solutions among French PMEs. The Clipper suite delivers comprehensive ERP functionality, while remaining easy to implement and use.
Helios ERP is designed from the ground up to meet the primary requirements of the aerospace industry, as well as other quality-driven industrial companies. More than a standard production management tool, Helios ERP ensures full control over costs and resources, while providing complete tracability across all supply chain processes. The solution also includes powerful quality management, planning, purchasing, EDI and reporting tools.


Gated condominium complex located on the south side of Stickney Point Rd. west of the Tamiami Trail. Many units come with a deeded dock typically 27 or 36 ft. The Boatyard is just across the bridge from Siesta Key putting it within walking distance of shopping, restaurants, a marina, and Crescent Beach. Some units enjoy a view of the Bay. Community pool. Convenient to shopping at the Gulf Gate Mall.
See current listings in The Boatyard - Sarasota, Florida. Looking to sell your home? Call the The Boatyard expert. Convenient to the Florida Turnpike. The essential The Boatyard real estate resource. Just a quick to great shopping!


text:
Sondage
=======

Sondage est un logiciel de gestion d'édition et de soumission de sondages de satisfaction.

Demandée par l'I.U.T de Blagnac, cette application a pour but de mettre en pratique les principes de Programmation Orientée Objet et d'architecture MVC avec le langage JAVA.

Avec cette application vous pouvez:
  - Créér un questionnaire
  - Remplir un questionnaire avec des questions
  - Soumettre ces questions à des personnes et en tirer les conclusions nécéssaires

Retrouvez la procédure d'installation via l'adresse http://guillaume-sainthillier.github.io/sondage


text:
Tag Archive for X-Men: The Last Stand
As Mentioned in Episode 110 – Lights, Camera, Apocalypse!
May 22, 2016 As Mentioned, As Mentioned 7 comments
Art by David Wynne. Prints and cards available at the shop, or contact David to purchase the original.
We saw X-Men in the middle of a road trip the summer after our senior year of high school. Terrible vacation; fun movie.
X2: X-Men United is a very loose adaptation of one of our favorite X-Men stories: the Marvel Graphic Novel God Loves, Man Kills.
The less said about X-Men: The Last Stand, the better.
Jay can't look at this X-Men: First Class poster without thinking of the Buckaroo Banzai end credits. It's a blessing and a curse.
X-Men: Days of Future Past is one of the more ambitious retcons ever to grace the big screen.
X-Men: Apocalypse opens in the U.S. on May 27; and everywhere else at some point in the surrounding weeks.
Apocalypse's on-panel debut… (X-Factor #5)
…and the first time we saw his signature costume. (X-Factor #6)
"Let's adopt him and, I dunno, feed him scarab blood? Look, man, I'm making this up as I go along." (Rise of Apocalypse #1)
Apocalypse: Somehow actually more progressive than Doctor Who. (The Adventures of Cyclops and Phoenix #1)
The mechanics of Apocalypse's body–and relative immortality–vary wildly from series to series. (The Adventures of Cyclops and Phoenix #2)
In the Age of Apocalypse, Apocalypse takes over Earth ahead of schedule and makes everything super glam. (X-Men: Alpha)
Deadpool may not be an X-Man, but his movie did feature the best version of the X-Men costumes to show up so far on screen.
NEXT WEEK: Excalibur joins Inferno!
LINKS & FURTHER READING
ON THE PODCAST:
Episode 6 – Days of Future Whatever was our first delve into the X-Men cinematic universe.
You can learn more about Apocalypse in Episode 64 – Ski Lodge of Apocalypse; and Episode 88 – Just Before Dawn.
You can hear Paul O'Brien–not Kieran Shiach, as we stated in the episode–explain Kang the Conqueror in Episode 85 – Secret Convergence on Infinite Podcasts: Complex Continuity.
AT THE MOVIES:
Jay's 2014 review of X-Men: Days of Future Past
Jay's (spoiler-free) review of X-Men: Apocalypse
If video's more your style, we also briefly discussed X-Men: Apocalypse (again, spoiler-free) over here.
EVERYWHERE ELSE:
Cast Party is an ongoing series where the ever-splendid Elle Collins casts (and recasts) comic-book movies:
X-Men Part 1: Silver-Age Reboot
X-Men Part 2: Dark Phoenix Saga
X-Men Part 3: Inferno
You, too, can own your very own super stylin' Elle Was Right t-shirt!
110 – Lights, Camera, Apocalypse!
May 22, 2016 podcasts 41 comments
https://media.blubrry.com/xplainthexmen/p/xplainthexmen.com/wp-content/uploads/2016/05/x110.mp3
Subscribe: Apple Podcasts | Google Podcasts | Spotify | Stitcher | RSS
In which the X-Men cinematic universe is a really mixed bag; Kang the Conqueror ruins everything; everyone wants a Sphinx hovercraft; Elle was right; and we bring you up to speed on all things En Sabah Nur–just in time for X-Men: Apocalypse!
X-PLAINED:
How Chamber got his torso back (and then lost it again)(twice)
Several ways to count X-Men movies
X2: X-Men United
X-Men: The Last Stand
Adaptation anxiety
Distillation vs. dilution
Apocalypse (En Sabah Nur)
Rise of Apocalypse #1-4
Akkaba
Dubious survival tips
Fantastic Four #19
Doctor Strange #53
Various horsemen of Apocalypse
Age of Apocalypse (Earth-295)
Cinematic X-costumes
Cast Party
CORRECTION: In this episode, Jay states that Kieran Shiach explained Kang in the Secret Convergence on Infinite Podcasts. It was, in fact, the amazing Paul O'Brien. Mea culpa.
You can find a visual companion to this episode on our blog!
Find us on iTunes, Google Play, or Stitcher!
Jay and Miles X-Plain the X-Men is 100% ad-free and listener supported. If you want to help support the podcast–and unlock more cool stuff–you can do that right here!
Buy prints of this week's illustration at our shop, or contact David Wynne for the original!
Rachel's Guide to Ruby Quartz, Part 1 – Red Shades, Silver Screen
December 2, 2014 Blog Posts 9 comments
They'll block your optic blasts AND give you +4 to Inscrutable Coolness!
A question we get pretty frequently is "Where did Rachel get those red sunglasses?" The answer–almost universally–is "Which ones?"
I own a lot of red sunglasses–in fact, for a long time, all the sunglasses I owned were red. It's part homage, part aesthetic preference (red sunglasses are cool, okay?), and part security blanket: Cyclops is a character I identify pretty closely with for a lot of reasons, and the sunglasses have become a pretty central touchstone for that metaphor. (Plus, everyone needs at least one ridiculous visual affectation, right?)
Suffice to say: I've gotten really good at hunting down red sunglasses. And this week, I'm going to teach you my secrets.
No, seriously. I own a lot of red sunglasses.
Fair warning: This is gonna get involved. In fact, it's gonna get involved enough that I decided pretty early on to break it into three parts. Part one will cover the movie versions of Cyclops's shades. Part two will be a general hunting guide–where and how to search for what you're after, brands, options, and some personal favorites. And in part three, I'll point you to real-world matches for specific pairs from the comics. (If you've got any requests on that front, drop 'em in the comments here, and I'll see what I can do!)
I'm starting with the movies because they're the most precise of the bunch in terms of brands and details (to a point, anyway, but we'll get into that shortly). With one exception, they're also the highest-ticket items by a wide margin. Most of the sunglasses you'll see in the later installments of this guide will hover around or under $20; but these can pretty easily run you upwards of $500, depending on the level of precision and customization you're after.
Click through for the red lenses of the silver screen! (Includes a very minor spoilers for X-Men: Days of Future Past.)
6 – Days of Future Whatever
May 18, 2014 podcasts 9 comments
In which we more or less prepare you for the upcoming feature film; Rachel Summers is a black hole of continuity; Kitty Pryde breaks the Danger Room; Earth 200500 is clearly the best earth; even the X-Men have no idea what's going on; First Class Emma Frost is so boring that we forget she exists; wolverines are definitely not wolves; and you can have Rachel's Community references when you pry them from her cold, dead hands.
Gravestone engraving standards of 2013
The Mostly-New, Mostly-Different Brotherhood of Evil Mutants
Another unfortunate hat
Causality in the Marvel Multiverse
Earths 811, 1191, 295, 311, and 200500
Hall monitors with laser rifles
How to fix a broken timeline
The X-Men cinematic universe, and points of divergence from the comics
The one thing X-Men: The Last Stand does right
The Xavier Index of Cinematic Continuity
The difference between Canis lupus and Gulo gulo
A Days of Future Past cinematic cram course
Fix-it fic
Blink, Bishop, and dark-future mash-ups
The enduring appeal of Earth-811
The significantly less enduring appeal of Earth-242
The Nazi Excalibur of Earth-597
You can find a visual companion to the episode – and links to recommended reading – on our blog.
Find us on iTunes or Stitcher!
Next week: Greg Rucka, Cyclops, and Starjammers!

redpajama_set_name: RedPajamaCommonCrawl


The Five Questions is another new department, capsule profiles of those dynamic minds that make the stationery industry so interesting. My first is Jason Arbuckle, creative director of J. Falkner Cards, who I met in 2011 when he first showed his clean yet colorful line at National Stationery Show. I recall lingering longer in his booth than I should have when I still had so much ground to cover — but it was hard to leave after learning that not only does he live in one of my all-time favorite cities — Palm Beach — the colors and mood of which inspire much of his line, but that Jason's background is also in publishing, having worked as design director with several London and New York book publishers and fashion magazines. Part of what makes his line so interesting to me, I think, is that very combination— thumbing through his designs evokes the same feeling as thumbing through a favorite design magazine; the overall mood is classic yet bright and graphic, witty and always very cool. You can see that in the new designs (along with some classics) that he has shared here.
Jason is yet another 10 Designers to Watch veteran, this time in 2012, and it was no surprise to me this year when I started picking his brain when we redesigned Stationery Trends in spring, and then again (though much more so) when I launched this blog. Not only did Jason design The Paper Chronicle's logo, he has patiently and promptly replied to every one of my million questions. His feedback is unfailingly patient and honest (if very diplomatic). Lately Jason has been spending time in London, and I'm curious to see how that city informs his upcoming collections.
JA: I started with just three Valentine cards in a sweet little shop in Palm Beach. When I went back to collect what remained, I discovered they'd sold them all! And so my adventure in card creating began … now, three years and over 350 stores later, these first three cards are still among our bestsellers.
JA: For card-spiration I'm always checking style.com for the latest runway collections, and stopping by my newsagent to feed my magazine addiction. In fashion, I see a return to prettiness — florals and feminine colors (like pink for winter!) continue strong, as does the princess polish that Kate Middleton brought to the world. Meanwhile, in magazines, type is getting cleaner and less complicated. A new classicism is emerging in both worlds of fashion and magazine.
3. SS: What letter or card comes to mind immediately as the best you've received?
JA: I have to confess I'm a proud uncle, so anything my 7-year old nephew Costello puts to paper becomes my new favorite. I think we can learn a lot from the way fresh young eyes look at things.
4. SS: Can you name your three paper lines you find most worth chronicling?
— Fugu Fugu Press. I'm always cheered by the charm and whimsy of their illustrations, and what's not to love about a paper company who chooses a heart as their recurring design motif?
— kate spade new york. I love the optimistic energy of their new line, while the crisp, simple use of type gladdens the graphic designer in me.
— StudioSarah. A London discovery, her restrained palette of aqua, pink and grey and fine use of gold foil makes for a very elegant paper line. Her new range of notebooks are especially appealing.
5. SS: Is there anything you do to keep letter-writing, card-sending and invitation-using alive?
JA: I definitely try to practice what I preach. I keep a list of birthdays, and find any excuse for a thank you card. But I often think the cards most appreciated are the ones least expected — a simple "hello" to a friend who has been on my mind.
It is always so inspiring to hear opinions from successful designers – some great tips from Jason too!


Taylor Swift and Joe Alwyn seen attending the Vogue BAFTA party at Annabel's club in Mayfair on February 10, 2019 in London, England.
If you watched the 61st Annual Grammy Awards on Sunday, you may have been wondering where in the world Taylor Swift was.
But with her most recent album, Reputation, receiving only one nomination from the Recording Academy, the frequent Grammy award collector opted to attend the official BAFTAs after-party with her boyfriend, Joe Alwyn, rather than make an appearance at Los Angeles' STAPLES Center.
Alwyn stars alongside Olivia Colman, Rachel Weisz and Emma Stone in The Favourite, which took home seven awards at Sunday's BAFTAs ceremony, including Outstanding British Film. Swift did not attend the ceremony itself, but showed up in a powder blue Stella McCartney dress and matching coat to support Alwyn at the post-awards dinner.
Swift is currently in London filming the forthcoming movie adaptation of the musical Cats.


Whether performed traditionally or laparoscopically, the post-operative pain of a spay is minimal compared to the post-operative pain of some other surgeries.
Should the Spay Be Performed Traditionally or Laparoscopically?
A new option for removing a dog's ovaries can cut down on post-operative pain to some degree but costs more.
After careful consideration of the pros and cons of spaying, you've decided to have the procedure performed on your dog. Yes, some evidence has been coming to light that spaying could potentially increase the risk for certain cancers, including lymphoma, mast cell tumors, and bone cancer. But a lot of that evidence, while suggestive, remains preliminary at this point.


text:
HOME PAGE > 01 FEATURED > Kentucky Falls to Ole Miss – SEC Tournament is next week in Greenville, S.C.
Kentucky Falls to Ole Miss – SEC Tournament is next week in Greenville, S.C.
Ole Miss Hoops
Tonia Witt
Content by UK ATHLETICS / Photo by TONIA RICE WITT – SPORTS VIEW AMERICA …
All Sports Photo Gallery at SVAPHOTOS …
POSTGAME NEWS CONFERENCE RECORDINGS
Kentucky Guard Chasity Patterson
Kentucky Head Coach Kyra Elzy
LEXINGTON, Ky. – Rhyne Howard scored 21 points and grabbed a career-high 16 rebounds but the 19th-ranked Kentucky women's basketball team lost to Ole Miss 73-69 on Sunday at Memorial Coliseum.
Senior Chasity Patterson, playing her final home game, scored 18 points for the Cats, who are now 16-7 overall and 9-6 in the SEC.
Kentucky struggled shooting the ball the entire game. Kentucky made 22 of 66 (33.3 percent) for the game, including just five of 17 (29.4 percent) from three-point range.
Ole Miss got on the board first on a Donnetta Johnson jumper but Kentucky answered on a basket by Howard. That was the first of four ties early in the game before Kentucky scored five in a row to lead 12-9. After the Rebels got within one, the Cats scored 10 in a row, two free throws each by Patterson and KeKe McKinney, a layup by Edwards and consecutive baskets by Howard, to lead 22-11 with 2:04 left in the period.
The Rebels would snap the UK run on a Shakira Austin basket with 1:13 left in the period. Those would be the final points of the period, which ended with Kentucky leading 22-13.
Ole Miss would score the first two baskets of the second period to cut the UK lead to 22-17. But Treasure Hunt buried a corner three, then Robyn Benton scored on a put back to give the Cats a 27-17 advantage.
Kentucky would grab a 29-20 lead on an Edwards layup with 6:25 left in the half. From there, neither team would score for more than two minutes until Howard connected on a jumper to make it 31-20 UK with 4:13 left in the half. Those would be the Cats' last points of the period.
Ole Miss would score on a Tiya Douglass jumper, and a three-point play by Austin to cut the UK lead to 31-25, which would be the halftime score. Austin led all scorers with 11 points in the first half, while Howard had 10.
Early in the second half, Ole Miss continued to chip away at the UK lead. The Rebels scored the first four points of the third period to make it 31-29 and to force a UK timeout. But that did not stop the onslaught. Out of the break, Ole Miss got a pair of three-pointers from Snudda Collins, first to take the lead, then to extend it to 37-31.
Kentucky finally got on the board with Edwards his a three with 6:05 left in the third period, cutting the Ole Miss lead to 37-34. The teams would trade baskets, a Madison Scott layup for Ole Miss and a McKinney jumper for UK, before Ole Miss scored four in a row to lead 43-36 with 3:32 left in the third.
The Cats would respond near the end of the third period with a 6-0 run, keyed by a basket and free throw from Howard with 1:55 left in the period which made it 43-42 Ole Miss, which would be the score through periods.
In the fourth period, the teams each made a pair of free throws, keeping the Ole Miss lead at one. Collins then hit a three to give the Rebels a 48-44 lead, but Hunt answered on UK's next possession with a three of her own, cutting the lead back to one, 48-47, with 7:36 to play.
The Rebels would take a 51-47 lead before Kentucky mounted a run. The Cats got a free throw from McKinney, two free throws from Howard and a Patterson jumper in the lane to take a 52-51 lead. Ole Miss answered right back when Austin scored in the lane, giving the Rebels the lead back, 53-52.
Patterson would score on a driving layup on UK's next possession as the Cats took the lead back, 54-53. But Ole Miss would get a pair of Scott free throws to re-take the lead, 55-54, with 4:18 to play. The Rebels would extend the lead to 57-54 on an Austin layup with 3:33 left in the game.
Kentucky would continue to chip away at the lead, getting within a point twice. But Ole Miss got a layup from Austin and a three from Collins to lead 64-58 with 1:07 left and the Cats simply ran out of time.
Kentucky returns to action later this week in the SEC Tournament. More information about the date, time and opponent will be determined at the conclusion of play on Sunday.
For more information on the Kentucky women's basketball team, visit UKathletics.com or follow @KentuckyWBB on Twitter, Instagram and Facebook.
WOMEN'S BASKETBALL POSTGAME QUOTES
NO. 19 KENTUCKY VS. OLE MISS / SUNDAY, FEBRUARY 28, 2021
MEMORIAL COLISEUM – LEXINGTON, KY.
On how to prepare the team for the tournament….
"You know, we just talked. It was a disappointing loss. Obviously not the outcome that we wanted, and how we wanted to show today. However, it happened, we can't take it back, all we can do is learn and move forward, and just talk to them about regrouping. We have to regroup and be ready to head into the SEC Tournament."
On Ole Miss putting four people on Rhyne Howard to frustrate her…
"Well, I think it was just frustrating for everyone overall. I thought we had some really good looks, they just didn't go in, which forced us to play in panic offensively. Some shots that we have been making did not go. I just think we have to do a better job of finishing through contact. So, yes, there were some fouls, but being able to hammer down and finish some of those. So, we'll go back to work on that."
On something Ole Miss does to give Kentucky trouble…
"I think they play extremely hard. They're never out of the game. They're physical, they're athletic. I thought we started the game with the intensity that we needed and kind of tapered off. I thought our offense effected our defense. But overall, today was not our day. Disappointing, but we will go back to work."
On Treasure Hunt…
"I'm really proud of Treasure (Hunt). I thought she came in and gave us some really solid minutes in Georgia, and also today, but last week she had one of her best practices. The lightbulb went off. She continues to get better and better. She was efficient offensively. I thought she held her own defensively. Um, and that's what we'll need form Treasure going down the stretch."
On having an experienced team going into the tournament…
"It'll be able to help us. There is something to be said about having vets on your team, knowing what to expect at the SEC Tournament, knowing what's at stake, so we'll fine tune some things in practice and we'll be ready for the SEC Tournament."
On the season going by so quickly…
"Yeah, the season has flown by. I want to give our medical team, Courtney Jones and our administration a shoutout for giving us the opportunity to play, keeping us up to date on the COVID protocols, keeping everyone safe. So, that was big for us to be able to play our games. It has been an extreme blessing to the be the University of Kentucky head coach. It has come with ups and downs. I have learned a lot about myself and the team. We still have a lot of basketball left to play."
On the fan base having high hopes…
"Well, they should have high hopes. This team has performed extremely well this season. You know, we are very talented. One thing about this team, we have been resilient all year. It is a journey, you will have your ups and downs. The thing is, every time we have been knocked down this year, we have answered the call and stepped up. This time will be no different."
#15 Chasity Patterson, G, Sr.
On your career at Kentucky…
"Thank you. Being a Kentucky Wildcat has been such an honor. I have enjoyed my three years here. Like you said, this wasn't the outcome we wanted, but I still enjoyed my time here and the season isn't over. We still have work to do, so I'm looking forward to that."
On getting off to a good start vs. Ole Miss…
"I feel like we had pretty good intensity. We came out with pretty good intensity. Credit to Ole Miss, they were hitting shots. So, we can't take credit for that, we give them credit for that. But, I feel like, overall, we just have to buckle down and work on what we need to work on. Ole Miss hit great shots. We played great D (defense), but, you know, we just couldn't get the job done. There are no excuses for that."
On how the team will bounce back…
"I am very confident that we will bounce back from this. We just have to go in, go to practice, work on the things that we need to work on. I feel like we can get back in the gym and work on stuff we need to work on. I can't say right now exactly what we need to do, but we're just going to play Kentucky basketball. We're going to lock in on defense. And, we're definitely going to be ready at the SEC Tournament."
On how Ole Miss gives Kentucky trouble…
"It came down to us. We couldn't hit a shot, and that happens. We're going to have bad shooting nights. So, I feel like just getting back in the gym, getting shots, and just working on our defense. You know, just coming together, because you know, we've been through adversity all season, so I feel like we're going to bounce back from this, and it's just another bump in the road for us."
"Definitely super proud of Treasure (Hunt). She came in and stepped up big time for us. Got a couple of offensive rebounds, got to the line. She has so much potential here at Kentucky, and it's just the beginning for her and her career. So, I'm excited to see how we move forward with her."
On memories off the court…
"We are always laughing. We always find a way to have fun. So, that was just the thing for me. I love to have fun. Just great people overall. Everyone on the staff and my teammates. Just great people. So, I enjoyed it."
WOMEN'S BASKETBALL POSTGAME NOTES
MEMORIAL COLISEUM – LEXINGTON, KY. / No. 19 Kentucky 69, Ole Miss 73 – FINAL
Team Records and Series Notes
Kentucky is 16-7 on the season and 9-6 in the SEC, while Ole Miss is 10-10, 4-10 in the league.
This was the 44th all-time meeting between Kentucky and Ole Miss in women's basketball.
The Rebels lead the all-time series 25-19.
The all-time meeting in games played in Lexington is tied 10-10.
Ole Miss has won two straight inside Memorial Coliseum.
Ole Miss has won three of the last four outings.
Kyra Elzy is in her first season as head coach at Kentucky.
Elzy is now 16-7 as head coach of Kentucky.
UK is now 861-555 all-time in its 47th year of varsity women's basketball.
UK is 471-161 all-time in Memorial Coliseum.
Kentucky went 11-2 at home this season, including 9-2 inside Memorial and 2-0 at Rupp Arena.
Kentucky is ranked No. 19 in the latest AP Top 25 and No. 17 in the USA Today/Coaches Top 25.
UK honored two senior managers – Mariah Osborne and Rachael Blackburn – along with guards Chasity Patterson and Kameron Roach pregame.
KeKe McKinney and Tatyana Wyatt each have decided to return for an addition season in 2021-22.
Kentucky is 34-12 all-time on Senior Day and have won 14 of the last 18 Senior Day games.
The Wildcats will return to action in next week's SEC Tournament.
Seeding and game information will become final later today.
Team Notes
Kentucky used the starting combination of senior guards Chasity Patterson and Kameron Roach, senior forwards Tatyana Wyatt and KeKe McKinney and junior guard Rhyne Howard.
This was the first time this season that UK has used this starting combination.
Rhyne Howard scored first for Kentucky in the game – the sixth time this season she has been the first Wildcat to score.
Jazmine Massengill was the first sub for Kentucky.
It was the fifth time Massengill has been the first sub for the Wildcats.
Ole Miss won the tip, marking the 17th time this season that UK has lost the opening tip.
Kentucky led 22-13 heading into the second quarter thanks to ending the quarter on a 10-2 run. UK's run was 10-0 before a jumper by Ole Miss with just over a minute to go.
UK went 7-of-14 from the field in the first 10 minutes adding a 7-of-8 mark from free throw.
Ole Miss was 5-of-16 from the field in the first quarter and 0-of-3 from long range.
Kentucky held a 9-8 mark in rebounds in the first quarter and a 10-6 mark in paint points.
UK is 7-3 this season when it scored 20 or more in the first quarter. The losses are at DePaul, at TAMU and vs. Ole Miss.
The Wildcats took a 31-25 lead into the break at halftime, but had a 31-20 lead midway through the quarter before Ole Miss ended the half on a 5-0 run.
UK went the final 4:13 of the second quarter without scoring. The Wildcats missed their last six field goal attempts and hit just 1 of their last 10 attempts from the field.
Ole Miss outscored Kentucky 12-9 in the second quarter.
UK's nine second-quarter points is its fewest this season.
The run continued into the third quarter for Ole Miss, scoring back-to-back open layups to start the second half and forcing a UK timeout :45 into the half.
After UK took a 11-point lead with 4:17 to go in the first half, the Rebels answered with a 17-0 run to take a 37-31 lead.
Since that point, UK went 1-of-18 from the field and missed 13 straight shots.
The run was broken by Dre'una Edwards hitting a 3 with 6:04 to go in the third quarter.
All told, UK went 8:08 of the game without scoring.
Kentucky ended the third quarter on a 6-0 run to cut the Ole Miss lead to 43-42 heading into the final 10 minutes.
The Rebels outscored UK 18-11 in the third quarter.
Ole Miss outscored UK 30-27 in the fourth quarter to earn the win.
College Basketball – Florida Tech Panthers Come Up Short Against Bucs at Home
Horse Racing Exclusive – Two of Tapit's Homebred Sons Win Kentucky Derby Prep Races on His 20th Birthday


text:
eToro Tips
eToro | News
eToro plans to go public with $5 Billion IPO
ByEditor	 2nd January 2021
The Israeli company, which has developed a platform to manage investments, is targeting an IPO in the second quarter of 2021 after doubling its revenue to $500 million and gaining five million new customers in 2020. eToro, a social trading and multi-asset brokerage company, is on its way to an initial public offering on Nasdaq…
Bank of Japan may intervene to arrest yen rise, says Hiroshi Watanabe.
ByEditor	 30th December 2020
TOKYO (Reuters) – Japan may intervene in the foreign exchange market to prevent the yen from rising above 100 to the dollar, but just once given the difficulty of keeping currency rates pegged at a set level, former top currency diplomat Hiroshi Watanabe said on Thursday. Many analysts expect the yen, which hovered around 103.50…
EUR/USD hits one-week lows under 1.10
ByEditor	 5th February 2020 5th February 2020
US dollar gains momentum and extends gains following US data. EUR/USD at a critical support level, could post the lowest close in months. EUR/USD at a critical support level, could post the lowest close in months. The EUR/USD pair printed a fresh daily low at 1.0995 and it is hovering around 1.1000, down a hundred…
Oil slide as Coronavirus fears intensify. Yen & treasuries up
ByEditor	 27th January 2020 27th January 2020
Chinese Premier Li Keqiang on Monday visited Wuhan, the epicenter of an outbreak of a new coronavirus that has killed 80 and infected more than 2,700 people, as Beijing sought to signal how seriously it aims to respond to the developing crisis. Japan's Nikkei average .N225 suffered a steep 1.8% loss, on track for the…
U.K. Economy Won't Stay Close to EU After Brexit
U.K. Chancellor of the Exchequer Sajid Javid signaled Britain is planning to shift its economy further away from the European Union's after Brexit, firing an early salvo in what's set to be a fractious year to hammer out their future relationship. UK after Brexit "There will not be alignment, we will not be a ruletaker,…
Instagram Forex Trader scammed hundreds in the UK
An Instagram trader who claimed he was making £110,000 a month has been accused of duping more than 1,000 investors into losing nearly £4,000,000 in a Bahamas fund. Instagram forex trader Gurvin Singh, 20, is believed to have convinced at least 1,250 people to invest in a foreign exchange trading scheme with his seal of…
The Bank of England will be cutting interest rates soon
ByEditor	 9th January 2020 9th January 2020
The former Bank of England governor Lord Mervyn King once said the real meaning of Christmas for the economy and interest rates would not be revealed until Easter. With the 12 days of Christmas only just over, his successor Mark Carney seems to have spotted an early downbeat message emerging from the high street. In…
Safe haven currencies pull back on geopolitical tensions ease
The well know safe haven currencies, the Japanese yen and the Swiss franc pulled back from recent highs on Tuesday as investors became less anxious about the chances of an all-out conflict between the United States and Iran. The yen fell from a three-month high versus the dollar, although sentiment remains fragile due to continued…
Wall Street market ripe for a tactical correction
Escalated geopolitical tensions swooped in and spoiled the market's party in the new year, and Wall Street analysts warned the sell-off might be just beginning. After a historic run in 2019 and a strong first day of 2020, the S&P 500 fell after a U.S. airstrike in Iraq killed Iranian general Qassem Soleimani on Friday,…
Suleimani Killing Sparks Fear of War and Economic Turmoil
Oil markets expect escalation in wake of U.S. strike on Iranian general. Crude oil prices soared after Iran vowed "harsh retaliation" for a Friday morning U.S. airstrike that killed the Iranian general Qassem Suleimani, one of the most powerful officials in Iran and the architect of Tehran's terrorist campaigns around the region. The escalation in…
© 2021 eToro Tips - WordPress Theme by Kadence WP


Once the requisite number of teams are registered at a particular age/gender, even if before October 22, all others will be wait listed and will only be admitted on an as needed basis. This will allow us to prevent scheduling problems associated with 5, 7 or 9 team brackets, as we will cut off registrations at 4, 6, or 8 teams to ensure a balanced bracket.
Rosters & player cards will be required at this tournament for check-in and at every game. Only Coaches who are listed on the roster will be allowed on the sidelines. Managers who are listed are not allowed on the sidelines, unless there is an emergency.
Medical releases & birth certificates will be required at check-in. Check-in times will be during the week of the tournament. There will not be Saturday morning check-in for any more Arkansas State Soccer Association tournaments . Please gather these papers in a binder in alphabetical order. This will make check-in so much quicker for you and your fellow teams.


As an asset manager with a focus on process improvement, MECRUS is able to achieve better bottom-line outcomes in any energy generation process.
The key to the Mecrus advantage lies in making efficiency gains in the operation of a facility. These gains are achieved through constantly challenging the 'norm' and looking at operations with 'fresh eyes'. By introducing more efficient processes and cross-skilling the workforce, substantial cost savings and improved profitability are realised.
As asset managers with a focus on process improvement, Mecrus is able to bring its continuous improvement strategies into any energy generation process and achieve better bottom-line outcomes. In support of this philosophy, Mecrus offers performance based contracts to its clients in order to share and manage their risk.
The Mecrus team has many years of combined experience in all forms of energy used to drive industry. This includes oil, gas, electricity generation, steam and coal. Members of the team have extensive hands on operational and maintenance experience in running boilers, briquette factories and power stations. In any new situation, the Mecrus team undertakes its projects with a commitment to identify and find innovative and more efficient ways to provide these energy services.
By changing the production process at the Morwell briquette factory, Mecrus has been able to reduce production costs by 38%.
The number of employees has been reduced from 90 to 30 by multi-skilling the production team. These changes have improved efficiency and profitability and have ensured a sustainable future for the operation and for its people.
Mecrus operates the steam plants at a number of manufacturing sites owned by Murray Goulburn, one of Australia's largest dairy exporters. For Murray Goulburn there is a huge sunk cost in running steam plants that are not part of their core business. By contracting out the operation and maintenance of the steam plants Murray Goulburn can take comfort in knowing that they can plan production around 100% steam supply reliability. All they have to do is to turn on a tap and it's there.
Every contract with a client business comes with the support of the wider Mecrus team. Within this team are people with leading edge experience in energy generation. Any Mecrus project manager at any project site is able to tap into the knowledge and expertise of these people to solve problems. Client companies that engage Mecrus to operate, maintain or manage their facilities are assured of the extra resources of the wider Mecrus team when faced with new challenges.
First production after reinstatement of Morwell briquette factory.
experience in all forms of energy used to drive industry.
By introducing more efficient processes and cross-skilling the workforce, substantial cost savings and improved profitability are realised.


Netflix has slowly become a lot of peoples only method of viewing the moving pictures, whether it be movies or television. This naturally leads to people wanting more and more content to come to this platform. You can tweet at Netflix, or you can badger their facebook page; there is another option that is much more official and basically an open secret at this point.
The form is pretty user friendly. You can suggest up to three titles at a time. The site makes it pretty clear that you shouldn't request the same thing multiple times. I'm sure that doesn't stop people from asking for Reno 911 a hundred times a day, and honestly should it?
Netflix is always updating its library of movies and tv. Almost notoriously, as members are often quoted as being upset when content seemingly disappears off the service. This feeling of powerlessness can lead to frustration, and its not clear how much this option being available can help alleviate that.
I watched the entire M*A*S*H series on Netflix only to discover the jumbo-size series finale wasn't available to stream. I went on their website to send an email about how ridiculous this was and it directed me to the online chat. The woman on there was very nice and said she would forward my request "directly to their content team".
There are more factors at work than just requesting something; obviously there has to be enough people that want it, AND it has to be cost effective for whatever licensing is required. It may be a long shot overall, but it could be worth it- whether it be the obvious choice in Reno 911 or something more obscure, try it out!


text:
Q: How to get the device's scale factor? I've been using UIGraphicsBeginImageContextWithOptions() and I noticed that the last field in that method is a scalefactor. And the apple docs says, if I want to set it to 0.0, then it will use the default scale factor of the device's main screen. Is there a way to get that default scale factor via property or method?

A: Swift 3+ version:
UIScreen.main.scale

A: Swift 5+
let scale = UIScreen.main.scale
print("scale is:\(scale)")

A: Swift5+ / macOS Big Sur:
let backingScaleFactor = NSScreen.main?.backingScaleFactor

A: The device's scale factor is a property of UIScreen. You can obtain it by:
[UIScreen mainScreen].scale;

Documentation here.

A: Hope it will help you
 CGSize textcontent =CGSizeMake(width, height);
UIGraphicsBeginImageContext(textcontent);
if ([UIScreen instancesRespondToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0f)
{
    UIGraphicsBeginImageContextWithOptions(textcontent, YES, 1.0f);
}
else
{
    UIGraphicsBeginImageContext(textcontent);
}
 [view.layer renderInContext:UIGraphicsGetCurrentContext()];
 viewImage = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();
 return viewImage;

redpajama_set_name: RedPajamaStackExchange


text:
Q: Space of simple closed curves in $S^2$ I am curious about the topology of the space of simple closed curves in $S^2$.
The entire free loop space $LS^2$ admits an explicit description using the Morse theory of the energy functional for the round metric. The energy functional is Morse-Bott, with a sequence of critical manifolds corresponding to iterates of great circles. Topologically, this implies that $LS^2$ is homotopy equivalent to the complex constructed by starting with $S^2$ (the space of constant loops) and successively attaching copies of the unit disk tangent bundle of $S^2$ in some manner.
Given this context, my question can be phrased as follows. Let $\mathcal{S}S^2 \subset LS^2$ be the space of simple closed curves, i.e. injective continuous maps $S^1 \to S^2$.  Does $\mathcal{S}S^2$ admit a similar nice description?
If the gradient flowline of the energy functional starting at any simple closed curve ended at a non-multiply-covered great circle, then it seems to me that this would give a retraction of $\mathcal{S}S^2$ onto the unit disk tangent bundle to $S^2$. However, I don't actually know if this is true or not.

A: Yes; I find this easier than the whole Morse theory package needed for $LS^2$.
Thm. The projection map $\text{Emb}(S^1, S^2) \to (TS^2 \setminus 0)$, given by $\gamma \mapsto \gamma'(0)$, is a weak homotopy equivalence.
A section sends a nonzero tangent vector $v$ above a point $p$ to the geodesic through $p$ with $\gamma'(0) = v$; it should be the case that $\text{Emb}(S^1, S^2)$ deformation retracts to the space of great circles (which is homeomorphic to $SO(3)$); I don't know a reference to the claim that the corresponding inclusion is a cofibration so that I can conclude. (Maybe there is an explicit deformation retraction from mean curvature flow.)
Pf. First observe that $\text{Diff}^+(S^2)$ acts transitively on $\text{Emb}(S^1, S^2)$ by the fact that the latter space is path-connected (roughly, the Schoenflies theorem)  and the isotopy extension theorem. This (plus some general theorems about Frechet group actions) show that there is a fiber sequence $$\text{Diff}^+(S^2 \text{ rel } S^1) \to \text{Diff}^+(S^2) \to \text{Emb}(S^1, S^2).$$ The first space is the space of oriented diffeomorphisms which fix the equator pointwise. The same derivative map above defines a map of fiber sequences to $\{*\} \to TS^2 \setminus 0 \to TS^2 \setminus 0$ (sending a diffeomorphism $\varphi$ to $d\varphi_p(e_1)$, where $p$ is a point on the equator and $S^1$ the tangent vector corresponding to the equator.
The claim is that this the first space is contractible and the map $\text{Diff}^+(S^2) \to TS^2 \setminus 0$ is a weak equivalence.
Both of these claims follow from Smale's theorem $\text{Diff}(D^2 \text{ rel } \text{Nbhd}(\partial D^2)) \simeq \{*\}$ with a little massaging, where here my notation means "the space of diffeomorphisms of the disc which fix a neighborhood of the boundary".
First you show that $\text{Diff}(S^2 \text{ rel } S^1)$ deformation retracts onto the space of diffeomorphisms which are linear on an open nbhd of $S^1$ in a fixed trivialization of a tubular neighborhood of $S^1$, then use the fact that the space of oriented linear isomorphisms $NS^1 \to NS^1$ is contractible; this buys you that $\text{Diff}^+(S^2 \text{ rel } S^1)$ is equivalent to the space of diffeomorphisms which are constant on a neighborhood of the equator; now Smale's result applies.
For $\text{Diff}^+(S^2)$ itself, the argument is similar. The fiber of the map described above is the set of diffeomorphisms fixing a point and a tangent vector at that point; because the map is orientation-preserving, this leaves a contractible space of possible derivatives, and you can show this fiber deformation retracts onto the space of diffeomorphisms fixing a chosen point and with $d\varphi_x = \text{Id}$; then linearize, as above, so that this fiber is equivalent to the space of diffeomorphisms of $S^2$ which fix an open neighborhood of $p$ pointwise, which again is contractible by Smale.


text:
Careers in Journalism
Qualifications in Journalism
Journalism Skills Academy
Employers & Trainers
Journalism & Diversity Fund
NCTj
Find an accredited course
Student/Tutor/Admin Login
Community News Project
Journalism careers guide
Magazine Journalism
Print Journalism
Qualifications: an overview
Certificate in Foundation Journalism
Diploma in Journalism
National Qualification in Journalism (NQJ)
Practical International Journalism
About the Journalism Skills Academy
Free bitesize resources
Qualifications by distance learning
Exam refresher sessions
Become an accredited course
Become an apprenticeship training provider
Registering trainees
Shorthand exam booking form
Shorthand exam centres and documentation
Taking on Apprentices
Diploma awards
Journalism Skills Conference
NQJ awards
Journalism Diversity Fund
Elective options
Study for the Diploma in Journalism is based on a core and options model.
The following specialist elective units are available to study: public affairs; shorthand (double unit); media law court reporting; sports journalism; videojournalism for digital platforms; business of magazines; editing skills for journalists; broadcast journalism (double unit); Introduction to PR for journalists; PR and communications for journalists (double unit); Radio journalism; TV journalism; practical magazine journalism (double unit) and business and finance journalism.
The elective options are designed to allow learners' choice and to build the diploma qualification that will help you further your career in journalism. You will complete at least three elective optional units (gaining a minimum 35 credits) as well as the mandatory units (gaining 47 credits) to complete the Diploma in Journalism.
This double module covers the additional skills required to operate effectively as a broadcast journalist in television and radio. Trainees will learn how to research, write and produce high-quality reports for radio and television. It will also instil a degree of familiarity with the technology, techniques, language and regulation of broadcast journalism and teach some practical skills. It should reflect the best current practice in broadcast newsrooms in the UK.
The aim of the broadcast journalism assessment is to ensure trainee broadcast journalists:
can research and write clear, accurate, compliant and engaging stories for radio and television
understand the techniques of interviewing for broadcast and can conduct a simple broadcast interview themselves
can demonstrate familiarity with the basic techniques and technology of broadcast newsgathering, including the sourcing of material
have an awareness of the basic set-up of radio and television news studios and can operate simple radio and television equipment
can show a good working knowledge of the key principles of broadcast regulation as laid out in the Ofcom Broadcasting Code
are familiar with the language and terminology of a broadcast newsroom In writing, good grammar, spelling and punctuation are expected
Work will be legally sound and comply with broadcast regulation. The programme of study covers: writing for broadcast; voice training; interviewing; newsgathering and digital media; broadcast production techniques including editing and graphics; broadcast regulation; the language and terminology of broadcasting; and how news is consumed.
Candidates are required to submit one piece of coursework, take two practical, timed tests and sit a one-hour broadcast regulation exam.
The business and finance option takes the principles of general news reporting covered in the reporting syllabus and applies them to the full range of business and finance reporting. It ensures candidates can produce the different types of story for all platforms required from each part of the business and finance news discipline.
Business and finance reporters need excellent contacts to break exclusive stories, be able to write attention-grabbing features, analytical features and interview major business and finance figures. Live, breaking news is an important element of reporting in this sector with a need to file copy in a series of "takes" for various platforms as the story unfolds. At press conferences, it is important to be able to challenge any business and finance changes to explore how this will affect, staff, unions and the public.
This module equips candidates with sufficient understanding of both domestic and international politics and economics to be able to report on a wide range of issues relating to business and finance, and to do so with the ability to humanise complex subjects, making them accessible to a general audience. Business and finance journalism focuses on all the macro areas of the discipline, such as the history, background and current state of the global banking and financial crisis. But it also introduces candidates to the coverage of the subject at a very micro level. A thorough knowledge of business and finance organisations is also tested.
Candidates will sit a two-part business and finance journalism examination: part one is a live business/finance report based on a scenario emerging and part two is a written exam.
Business of magazines
This option is designed to give trainees a thorough understanding of the magazine industry and how magazines work.
The programme of study includes: the roles of B2B, general consumer and specialist consumer magazines; the importance of identifying and writing for an audience; company accounts; the roles of editorial, marketing, advertising and other departments; revenue streams; editorial strategy; and means of distribution.
Assessment is by examination in which candidates answer questions covering the full syllabus.
Please note: The business of magazines elective module will be withdrawn from the NCTJ Diploma in Journalism from September 2021 for new registrations, following an industry-wide review of the elective modules for this qualification. The unit end date for the module is 30 September 2023. Please see published transition arrangements below.
Business of magazines transition arrangements
This option builds on the introduction to the subject in the essential journalism module. It is about learning the knowledge and skills to operate as an audience-focused data journalist.
It will provide knowledge of how to find data, analyse that data in the most efficient way to find great stories, how to visualise the information found and go on to develop the data into content which will appeal to readers and viewers.
Core skills and knowledge of researching, interviewing and telling stories, which will engage with the audience, are vital.
Assessment: candidates will sit a 1-hour and 15 minutes online exam designed to test a candidate's knowledge and skills in handling a large data set. They will be expected to identify major potential stories and lines of inquiry from the data, outline how that story would be developed by way of gathering further information and provide visuals which would support the story.
They will also submit a piece of data journalism coursework. Published on appropriate platform(s), using any appropriate program(s), the submission will include the completed piece(s) of content with appropriate visuals produced by the candidate.
Introduction to PR for journalists
This single module will enable trainee journalists to understand some of the methods employed by PR staff with whom they will come into contact. It will also help to prepare them to work at a junior level in public relations and use professional techniques and tools to produce a basic PR campaign; and create accurate and effective news releases suitable for publication in a variety of media outlets.
This module is assessed by a two-hour online exam: candidates are required to produce a basic campaign strategy, including key messages and detailed tactics and produce a 300-word news release targeted at the local media.
Journalism for a digital audience
This option builds on the introduction to the subject in the essential journalism module. It is about learning the knowledge and skills to operate as an audience-focused digital journalist in a multimedia newsroom.
It will provide knowledge of how to make the most of a website CMS, how to make improvements to sites to enhance the user experience, how to build and execute strategies-based audience data, interacting with the audience, making the most of illustrations/video, how to develop brands, the behaviours needed by someone in these roles and how they can continue to develop skills once in the workplace.
Assessment: candidates will sit a 1-hour and 15 minutes online exam designed to test a candidate's knowledge, understanding and practical application of the skills and knowledge learnt in this module. Questions will be set from all areas of the programme of study.
They will also submit a piece of digital journalism coursework. Published on appropriate platform(s), it will contain evidence of how analytics were used, SEO, digital writing skills, use of illustrative material and social media.
Media law: court reporting
The specialist court reporting option builds on an introduction to court reporting in the essential media law syllabus. It covers court reporting restrictions, regulatory and ethical considerations. It is an important option for those who wish to focus on hard news for any platform as courts remain an excellent source for stories.
Assessment is by one examination which assesses knowledge and application of media law related to court reporting.
Photography for journalists
The photography specialist option is designed to equip a trainee journalist with the photography skills required to produce images of publishable quality that meet industry standards.
Candidates will be able to:
demonstrate skills, knowledge and understanding of the theory and practice of stills photography
gain practical skills in image capture on still digital formats and the transmission of stills
be competent in producing stills for publication • demonstrate the ability to write clear and accurate captions and news stories
understand photographic practice and media law and ethics relating to the publication of images from both professional photographers, citizen journalists and other external sources in newspapers, magazines and on related websites
Assessment is by a portfolio of images including a 150-200 word news story and evidence of any ethical and legal considerations when taking or publishing the images.
Candidates opting to take this unit are also encouraged to take videojournalism for online. Video skills are vital to be able to create distinctive videojournalism which is accurate, clear and communicative and compliments the skills gained in stills photography in this unit.
Practical magazine journalism
This double elective option provides candidates with the opportunity to learn and practise storytelling skills on multiple platforms in the magazine industry. It will be studied alongside the core journalism skills of the diploma. Key to the proficiency of a magazine journalist is the ability to generate fresh, original ideas that are relevant to the targeted audience and in a variety of sectors including consumer, B2B, specialist, customer and in-house supplements. It is designed to complement the business of magazines elective option.
Assessment: candidates will produce a real-world feature through a combination of coursework and a timed assessment called the 'magazine day' which will be conducted under newsroom conditions and will be published online.
PR and communications for journalists
The PR and communications elective option is available to candidates alongside the mandatory subjects of the entry-level NCTJ Diploma in Journalism.
This programme of study will enable trainee journalists to understand the objectives, strategies and tactics employed by PR staff with whom they will come into contact. It can also prepare them to work at a junior level in public relations.
Candidates are assessed by a two-part exam over two and a half hours.
Editing skills for journalists
This specialist editing option builds on the introduction to editing in the essential journalism syllabus. Editing skills are an important skill as journalists publish stories without the luxury of copy being checked. The culture of getting it right first time needs to be instilled into trainees.
The programme of study includes: desktop publishing, editing different types of stories; headline writing; typography; pictures and captions; proof reading; and design.
Candidates sit an on-screen editing exam for a templated page in print and online and must produce online headlines, edit a selection of stories and nibs, write a sell-on and demonstrate the ability to crop and edit a picture story.
All professional journalists should have a broad understanding of how government works at a local and national level, how they link together, where news stories come from and how to develop such stories.
Public affairs learning should be integrated with practical journalism and trainees must have an awareness of current news issues related to public affairs.
There are three different programmes of study and examinations for England and Wales, Scotland, and Northern Ireland. Candidates are required to sit an exam which assesses their knowledge of public affairs and its practical application to the job of a journalist.
Radio journalism
This single module will equip candidates with the essential skills to work as journalists in radio newsrooms. It will be studied alongside the core journalism skills of the diploma.
Candidates will learn how to research, write and produce high-quality reports for radio.
This module is assessed by two exams and coursework:
Radio News exam: practical exam testing candidates' ability to produce and record a two-minute news bulletin from material provided for a given market audience
Broadcast regulation exam: one-hour exam to test practical knowledge and application of the relevant sections of the Ofcom Broadcasting Code. Candidates are examined on the Ofcom Code rather than the wider legal framework which is assessed in essential media law and regulation
Coursework radio news package
Shorthand is an extremely valuable skill for the competent journalist. The NCTJ's gold standard is to achieve at least 100 words per minute (wpm) and to be able to identify a newsworthy quote. The exam format for higher speeds has been developed to test listening skills as well as accuracy and speed.
The syllabus enables learners to acquire the skills required for reporting accurately using Teeline, an industry-recognised system of shorthand. The exams test the ability to take down the spoken word verbatim at a range of speeds – 60, 70, 80, 90, 100, 110 and 120 wpm – and to produce an accurate transcript within an error tolerance of three per cent. In addition, trainees must identify and accurately transcribe a key quote at speeds of 90 to 120wpm.
The sports journalism option takes the principles of general news reporting covered in reporting and applies them to the full range of sports reporting skills.
The programme of study includes: an introduction to sports reporting; the sports news cycle; press conferences and interviewing; sports news, sports public affairs and sports politics; sports features; and editing sports stories.
The exam is divided into two parts. For part one, candidates will watch a football match and produce a match report filing 250 words within five minutes of the final whistle. Candidates will then have a further 30 minutes to produce a 200-word 'reaction piece' using quotes and tweets from managers and/or players/fans, supplied to them at the final whistle. For part two, candidates write a 200-word round-up, answer a sports interview question and write a story for the web from a press release.
TV journalism
This single module will equip candidates with the essential skills to work as journalists in TV newsrooms. It will be studied alongside the core journalism skills of the diploma.
Candidates will learn how to research, write and produce high-quality reports for TV.
This module is assessed by two exams plus coursework:
TV News exam: Candidates are required to script and edit two 'news in brief' (Ulay/OOV) items from given material
Coursework TV news package
Videojournalism for digital platforms
The videojournalism option is designed to enable trainees to produce short, focused video news reports for use online on news websites and social media and to understand how to use the platforms effectively. Creativity is encouraged, but work should be to industry standards.
The four study units cover: equipment and techniques; videojournalism and news gathering; interviewing; and regulation and compliance.
Candidates sit a two hour video-editing examination which assesses their basic editing and reporting skills and ability to drive traffic to a news website using video with subtitles through social media. They are also required to submit a coursework assignment at the exam, which assesses their ability to create a video package for a website and a social media video demonstrating how they would use it to drive traffic to a news website.
Essential journalism
E-portfolio for journalists
Essential journalism ethics and regulation
Essential Media Law and Regulation
Media Law Court Reporting
Choosing an accredited course
Elective options offered at accredited courses
Diploma by distance learning
Core skills for all journalists
Shorthand for journalists
Public affairs for journalists
Broadcast Regulation
National exams
Nationals application form
Nationals exam report core options
Nationals exam report specialist options
Enter your email to receive the NCTJ eJournalism newsletter. Distributed once a month, it will keep you up to date with the latest news and developments in journalism training.
National Council for the Training of Journalists
The New Granary
CB11 3PL
Design and Art Direction by TAG Brand
Website by Granite 5
This website uses cookies to make sure we can give you the best experience while browsing. If you are happy with this please accept cookies to continue. For information see our Privacy Policy


text:
Speech Rights and Artificial Intelligence
Ronald K. L. Collins, University of Washington
David M. Skover, Seattle University
Ronald K. L. Collins, David M. Skover, Ryan Calo, Jane Bambauer, James Grimmelmann, Bruce E. H. Johnson, Helen Norton
In every era of communications technology - whether print, radio, television, or Internet - some form of government censorship follows to regulate the medium and its messages. Today we are seeing the phenomenon of 'machine speech' enhanced by the development of sophisticated artificial intelligence. Ronald K. L. Collins and David M. Skover argue that the First Amendment must provide defenses and justifications for covering and protecting robotic expression. It is irrelevant that a robot is not human and cannot have intentions; what matters is that a human experiences robotic speech as meaningful. This is the constitutional recognition of 'intentionless free speech' at the interface of the robot and receiver. Robotica is the first book to develop the legal arguments for these purposes. Aimed at law and communication scholars, lawyers, and free speech activists, this work explores important new problems and solutions at the interface of law and technology.
Offers a new theory of First Amendment speech rights that covers robotic expression
Describes the evolution of communications technologies and government efforts to censor them
Proposes a First Amendment theory of utility to justify protection for robotic expression
'Collins and Skover have long been among the finest minds focused on free expression in America. In this remarkable book, they now turn insightfully to an incredibly complex and timely issue associated with 'robotic expression': how should the First Amendment handle contests involving regulation of 'robot speech' as artificial intelligence grows rapidly in prominence? This book conveys their deep knowledge - and the knowledge of other noted scholars - of the history, law, and technology that inform the way we should think about this emerging field of constitutional inquiry.' John Palfrey, Head of School at Phillips Academy, Massachusetts; former Executive Director of the Berkman Center for Internet and Society, Harvard University, Massachusetts; and author of Born Digital
'Collins and Skover have produced a wonderfully readable, thorough, and insightful exploration of the intersection of technology and free speech theory, from the beginning of time well into the future. If any current scholarly work of free speech theory survives into the next century, it will undoubtedly be this book.' Martin Redish, Louis and Harriet Ancel Professor of Law and Public Policy, Northwestern University Law School, Illinois, and author of The Adversary First Amendment: Free Expression and the Foundations of American Democracy
The thesis
Ronald Collins and David Skover
Prologue: technology and communication
1. The progress and perils of communication
2. Robots and their receivers
3. The new norm of utility
Epilogue: from Areopagitica to Robotica
The commentaries
Robotica in context: an introduction to the commentaries Ryan Calo
The age of sensorship Jane Bambauer
Speech in, speech out James Grimmelmann
An old libel lawyer confronts Robotica's brave new world Bruce E. H. Johnson
What's old is new again (and vice-versa) Helen Norton
Reply Ronald Collins and David Skover
Robotica refined.
Ronald K. L. Collins is the Harold S. Shefelman Distinguished Scholar at the University of Washington School of Law.
David M. Skover is the Fredric C. Tausend Professor of Constitutional Law at Seattle University School of Law.
Speech and Silence in American Law
The Positive Second Amendment
Rights, Regulation, and the Future of Heller
The Nature of Constitutional Rights
The Invention and Logic of Strict Judicial Scrutiny
On Dissent
Its Meaning in America
The Fundamental Holmes
A Free Speech Chronicle and Reader – Selections from the Opinions, Books, Articles, Speeches, Letters and Other Writings by and about Oliver Wendell Holmes, Jr.


text:
04/26/2012 04:26 pm ET Updated Apr 26, 2012
Los Angeles Riots Quotes: 10 LA Riot References In Pop Culture
By Lucy Blodgett
The death of Latasha Harlins and the beating of Rodney King not only prompted the cataclysmic Los Angeles Riots, but they also influenced artists to speak out about the political agitations and race relations of this city.
N.W.A.'s prophetic 1988 single, "Fuck Tha Police" became the anthem of the 1992 Los Angeles Riots. In what they referred to as "reality rap," the albums of N.W.A. provided an extremely public platform from which to speak. They were not alone.
Playwrights, authors, actors, musicians and filmmakers distraught over the state of the city's unrest prompted a boom in creative output.
Below you will find a variety of iconic pop culture references about the LA Riots -- mature language is used. Suggest your ideas in the comments below:
Lucy Blodgett
Former Producer at HuffPost Live / Former Assistant Editor at HuffPost LA
Ice T Los Angeles Latasha Harlins Los Angeles Riots: 20 Years Later Sublime