text:
package org.onosproject.openstacknetworking.impl;

import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
import org.apache.felix.scr.annotations.Deactivate;
import org.apache.felix.scr.annotations.Reference;
import org.apache.felix.scr.annotations.ReferenceCardinality;
import org.onlab.packet.Ethernet;
import org.onlab.packet.IPv4;
import org.onlab.packet.IpAddress;
import org.onlab.packet.IpPrefix;
import org.onlab.packet.TCP;
import org.onlab.packet.TpPort;
import org.onlab.packet.UDP;
import org.onlab.packet.VlanId;
import org.onlab.util.KryoNamespace;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreService;
import org.onosproject.net.DeviceId;
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.flow.DefaultTrafficSelector;
import org.onosproject.net.flow.DefaultTrafficTreatment;
import org.onosproject.net.flow.TrafficSelector;
import org.onosproject.net.flow.TrafficTreatment;
import org.onosproject.net.packet.DefaultOutboundPacket;
import org.onosproject.net.packet.InboundPacket;
import org.onosproject.net.packet.PacketContext;
import org.onosproject.net.packet.PacketProcessor;
import org.onosproject.net.packet.PacketService;
import org.onosproject.openstacknetworking.api.InstancePort;
import org.onosproject.openstacknetworking.api.InstancePortService;
import org.onosproject.openstacknetworking.api.OpenstackFlowRuleService;
import org.onosproject.openstacknetworking.api.OpenstackNetworkService;
import org.onosproject.openstacknetworking.api.OpenstackRouterService;
import org.onosproject.openstacknode.api.OpenstackNode;
import org.onosproject.openstacknode.api.OpenstackNodeService;
import org.onosproject.store.serializers.KryoNamespaces;
import org.onosproject.store.service.ConsistentMap;
import org.onosproject.store.service.DistributedSet;
import org.onosproject.store.service.Serializer;
import org.onosproject.store.service.StorageService;
import org.openstack4j.model.network.ExternalGateway;
import org.openstack4j.model.network.IP;
import org.openstack4j.model.network.Network;
import org.openstack4j.model.network.NetworkType;
import org.openstack4j.model.network.Port;
import org.openstack4j.model.network.Router;
import org.openstack4j.model.network.RouterInterface;
import org.openstack4j.model.network.Subnet;
import org.slf4j.Logger;

import java.nio.ByteBuffer;
import java.util.Objects;
import java.util.Set;
import java.util.concurrent.ExecutorService;
import java.util.stream.Collectors;

import static java.util.concurrent.Executors.newSingleThreadExecutor;
import static org.onlab.util.Tools.groupedThreads;
import static org.onosproject.openstacknetworking.api.Constants.*;
import static org.onosproject.openstacknode.api.OpenstackNode.NodeType.GATEWAY;
import static org.slf4j.LoggerFactory.getLogger;

/**
 * Handle packets needs SNAT.
 */
@Component(immediate = true)
public class OpenstackRoutingSnatHandler {

    private final Logger log = getLogger(getClass());

    private static final String ERR_PACKETIN = "Failed to handle packet in: ";
    private static final String ERR_UNSUPPORTED_NET_TYPE = "Unsupported network type";
    private static final long TIME_OUT_SNAT_PORT_MS = 120 * 1000;
    private static final int TP_PORT_MINIMUM_NUM = 65000;
    private static final int TP_PORT_MAXIMUM_NUM = 65535;

    private static final KryoNamespace.Builder NUMBER_SERIALIZER = KryoNamespace.newBuilder()
            .register(KryoNamespaces.API);

    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
    protected CoreService coreService;

    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
    protected PacketService packetService;

    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
    protected StorageService storageService;

    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
    protected DeviceService deviceService;

    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
    protected InstancePortService instancePortService;

    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
    protected OpenstackNodeService osNodeService;

    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
    protected OpenstackNetworkService osNetworkService;

    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
    protected OpenstackRouterService osRouterService;

    @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
    protected OpenstackFlowRuleService osFlowRuleService;

    private final ExecutorService eventExecutor = newSingleThreadExecutor(
            groupedThreads(this.getClass().getSimpleName(), "event-handler", log));
    private final PacketProcessor packetProcessor = new InternalPacketProcessor();

    private ConsistentMap<Integer, Long> allocatedPortNumMap;
    private DistributedSet<Integer> unUsedPortNumSet;
    private ApplicationId appId;

    @Activate
    protected void activate() {
        appId = coreService.registerApplication(OPENSTACK_NETWORKING_APP_ID);

        allocatedPortNumMap = storageService.<Integer, Long>consistentMapBuilder()
                .withSerializer(Serializer.using(NUMBER_SERIALIZER.build()))
                .withName("openstackrouting-allocatedportnummap")
                .withApplicationId(appId)
                .build();

        unUsedPortNumSet = storageService.<Integer>setBuilder()
                .withName("openstackrouting-unusedportnumset")
                .withSerializer(Serializer.using(KryoNamespaces.API))
                .build()
                .asDistributedSet();

        initializeUnusedPortNumSet();

        packetService.addProcessor(packetProcessor, PacketProcessor.director(1));
        log.info("Started");
    }

    private void initializeUnusedPortNumSet() {
        for (int i = TP_PORT_MINIMUM_NUM; i < TP_PORT_MAXIMUM_NUM; i++) {
            if (!allocatedPortNumMap.containsKey(i)) {
                unUsedPortNumSet.add(i);
            }
        }

        clearPortNumMap();
    }

    @Deactivate
    protected void deactivate() {
        packetService.removeProcessor(packetProcessor);
        eventExecutor.shutdown();
        log.info("Stopped");
    }

    private void processSnatPacket(PacketContext context, Ethernet eth) {
        IPv4 iPacket = (IPv4) eth.getPayload();
        InboundPacket packetIn = context.inPacket();

        int patPort = getPortNum();

        InstancePort srcInstPort = instancePortService.instancePort(eth.getSourceMAC());
        if (srcInstPort == null) {
            log.error(ERR_PACKETIN + "source host(MAC:{}) does not exist",
                    eth.getSourceMAC());
            return;
        }

        IpAddress srcIp = IpAddress.valueOf(iPacket.getSourceAddress());
        Subnet srcSubnet = getSourceSubnet(srcInstPort, srcIp);
        IpAddress externalGatewayIp = getExternalIp(srcSubnet);
        if (externalGatewayIp == null) {
            return;
        }

        populateSnatFlowRules(context.inPacket(),
                srcInstPort,
                TpPort.tpPort(patPort),
                externalGatewayIp);

        packetOut((Ethernet) eth.clone(),
                packetIn.receivedFrom().deviceId(),
                patPort,
                externalGatewayIp);
    }

    private Subnet getSourceSubnet(InstancePort instance, IpAddress srcIp) {
        Port osPort = osNetworkService.port(instance.portId());
        IP fixedIp = osPort.getFixedIps().stream()
                .filter(ip -> IpAddress.valueOf(ip.getIpAddress()).equals(srcIp))
                .findAny().orElse(null);
        if (fixedIp == null) {
            return null;
        }
        return osNetworkService.subnet(fixedIp.getSubnetId());
    }

    private IpAddress getExternalIp(Subnet srcSubnet) {
        RouterInterface osRouterIface = osRouterService.routerInterfaces().stream()
                .filter(i -> Objects.equals(i.getSubnetId(), srcSubnet.getId()))
                .findAny().orElse(null);
        if (osRouterIface == null) {
            // this subnet is not connected to the router
            log.trace(ERR_PACKETIN + "source subnet(ID:{}, CIDR:{}) has no router",
                    srcSubnet.getId(), srcSubnet.getCidr());
            return null;
        }

        Router osRouter = osRouterService.router(osRouterIface.getId());
        if (osRouter.getExternalGatewayInfo() == null) {
            // this router does not have external connectivity
            log.trace(ERR_PACKETIN + "router({}) has no external gateway",
                    osRouter.getName());
            return null;
        }

        ExternalGateway exGatewayInfo = osRouter.getExternalGatewayInfo();
        if (!exGatewayInfo.isEnableSnat()) {
            // SNAT is disabled in this router
            log.trace(ERR_PACKETIN + "router({}) SNAT is disabled", osRouter.getName());
            return null;
        }

        // TODO fix openstack4j for ExternalGateway provides external fixed IP list
        Port exGatewayPort = osNetworkService.ports(exGatewayInfo.getNetworkId())
                .stream()
                .filter(port -> Objects.equals(port.getDeviceId(), osRouter.getId()))
                .findAny().orElse(null);
        if (exGatewayPort == null) {
            log.trace(ERR_PACKETIN + "no external gateway port for router({})",
                    osRouter.getName());
            return null;
        }

        return IpAddress.valueOf(exGatewayPort.getFixedIps().stream()
                .findFirst().get().getIpAddress());
    }

    private void populateSnatFlowRules(InboundPacket packetIn, InstancePort srcInstPort,
                                       TpPort patPort, IpAddress externalIp) {
        Network osNet = osNetworkService.network(srcInstPort.networkId());
        if (osNet == null) {
            final String error = String.format(ERR_PACKETIN + "network %s not found",
                    srcInstPort.networkId());
            throw new IllegalStateException(error);
        }

        setDownstreamRules(srcInstPort,
                osNet.getProviderSegID(),
                osNet.getNetworkType(),
                externalIp,
                patPort,
                packetIn);

        setUpstreamRules(osNet.getProviderSegID(),
                osNet.getNetworkType(),
                externalIp,
                patPort,
                packetIn);
    }

    private void setDownstreamRules(InstancePort srcInstPort, String segmentId,
                                    NetworkType networkType,
                                    IpAddress externalIp, TpPort patPort,
                                    InboundPacket packetIn) {
        IPv4 iPacket = (IPv4) packetIn.parsed().getPayload();
        IpAddress internalIp = IpAddress.valueOf(iPacket.getSourceAddress());

        TrafficSelector.Builder sBuilder = DefaultTrafficSelector.builder()
                .matchEthType(Ethernet.TYPE_IPV4)
                .matchIPProtocol(iPacket.getProtocol())
                .matchIPDst(IpPrefix.valueOf(externalIp.getIp4Address(), 32))
                .matchIPSrc(IpPrefix.valueOf(iPacket.getDestinationAddress(), 32));

        TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder()
                .setEthDst(packetIn.parsed().getSourceMAC())
                .setIpDst(internalIp);

        switch (networkType) {
            case VXLAN:
                tBuilder.setTunnelId(Long.parseLong(segmentId));
                break;
            case VLAN:
                tBuilder.pushVlan()
                        .setVlanId(VlanId.vlanId(segmentId))
                        .setEthSrc(DEFAULT_GATEWAY_MAC);
                break;
            default:
                final String error = String.format(
                        ERR_UNSUPPORTED_NET_TYPE + "%s",
                        networkType.toString());
                throw new IllegalStateException(error);
        }

        switch (iPacket.getProtocol()) {
            case IPv4.PROTOCOL_TCP:
                TCP tcpPacket = (TCP) iPacket.getPayload();
                sBuilder.matchTcpSrc(TpPort.tpPort(tcpPacket.getDestinationPort()))
                        .matchTcpDst(patPort);
                tBuilder.setTcpDst(TpPort.tpPort(tcpPacket.getSourcePort()));
                break;
            case IPv4.PROTOCOL_UDP:
                UDP udpPacket = (UDP) iPacket.getPayload();
                sBuilder.matchUdpSrc(TpPort.tpPort(udpPacket.getDestinationPort()))
                        .matchUdpDst(patPort);
                tBuilder.setUdpDst(TpPort.tpPort(udpPacket.getSourcePort()));
                break;
            default:
                break;
        }

        OpenstackNode srcNode = osNodeService.node(srcInstPort.deviceId());
        osNodeService.completeNodes(GATEWAY).forEach(gNode -> {
            TrafficTreatment.Builder tmpBuilder =
                    DefaultTrafficTreatment.builder(tBuilder.build());
            switch (networkType) {
                case VXLAN:
                    tmpBuilder.extension(RulePopulatorUtil.buildExtension(
                            deviceService,
                            gNode.intgBridge(),
                            srcNode.dataIp().getIp4Address()), gNode.intgBridge())
                            .setOutput(gNode.tunnelPortNum());
                    break;
                case VLAN:
                    tmpBuilder.setOutput(gNode.vlanPortNum());
                    break;
                default:
                    final String error = String.format(ERR_UNSUPPORTED_NET_TYPE + "%s",
                            networkType.toString());
                    throw new IllegalStateException(error);
            }

            osFlowRuleService.setRule(
                    appId,
                    gNode.intgBridge(),
                    sBuilder.build(),
                    tmpBuilder.build(),
                    PRIORITY_SNAT_RULE,
                    GW_COMMON_TABLE,
                    true);
        });
    }

    private void setUpstreamRules(String segmentId, NetworkType networkType,
                                  IpAddress externalIp, TpPort patPort,
                                  InboundPacket packetIn) {
        IPv4 iPacket = (IPv4) packetIn.parsed().getPayload();

        TrafficSelector.Builder sBuilder =  DefaultTrafficSelector.builder()
                .matchEthType(Ethernet.TYPE_IPV4)
                .matchIPProtocol(iPacket.getProtocol())
                .matchIPSrc(IpPrefix.valueOf(iPacket.getSourceAddress(), 32))
                .matchIPDst(IpPrefix.valueOf(iPacket.getDestinationAddress(), 32));

        TrafficTreatment.Builder tBuilder = DefaultTrafficTreatment.builder();

        switch (networkType) {
            case VXLAN:
                sBuilder.matchTunnelId(Long.parseLong(segmentId));
                break;
            case VLAN:
                sBuilder.matchVlanId(VlanId.vlanId(segmentId));
                tBuilder.popVlan();
                break;
            default:
                final String error = String.format(ERR_UNSUPPORTED_NET_TYPE + "%s",
                        networkType.toString());
                throw new IllegalStateException(error);
        }

        switch (iPacket.getProtocol()) {
            case IPv4.PROTOCOL_TCP:
                TCP tcpPacket = (TCP) iPacket.getPayload();
                sBuilder.matchTcpSrc(TpPort.tpPort(tcpPacket.getSourcePort()))
                        .matchTcpDst(TpPort.tpPort(tcpPacket.getDestinationPort()));
                tBuilder.setTcpSrc(patPort)
                        .setEthDst(DEFAULT_EXTERNAL_ROUTER_MAC);
                break;
            case IPv4.PROTOCOL_UDP:
                UDP udpPacket = (UDP) iPacket.getPayload();
                sBuilder.matchUdpSrc(TpPort.tpPort(udpPacket.getSourcePort()))
                        .matchUdpDst(TpPort.tpPort(udpPacket.getDestinationPort()));
                tBuilder.setUdpSrc(patPort)
                        .setEthDst(DEFAULT_EXTERNAL_ROUTER_MAC);
                break;
            default:
                log.debug("Unsupported IPv4 protocol {}");
                break;
        }

        tBuilder.setIpSrc(externalIp);
        osNodeService.completeNodes(GATEWAY).forEach(gNode -> {
            TrafficTreatment.Builder tmpBuilder =
                    DefaultTrafficTreatment.builder(tBuilder.build());
            tmpBuilder.setOutput(gNode.patchPortNum());

            osFlowRuleService.setRule(
                    appId,
                    gNode.intgBridge(),
                    sBuilder.build(),
                    tmpBuilder.build(),
                    PRIORITY_SNAT_RULE,
                    GW_COMMON_TABLE,
                    true);
        });
    }

    private void packetOut(Ethernet ethPacketIn, DeviceId srcDevice, int patPort,
                           IpAddress externalIp) {
        IPv4 iPacket = (IPv4) ethPacketIn.getPayload();
        switch (iPacket.getProtocol()) {
            case IPv4.PROTOCOL_TCP:
                TCP tcpPacket = (TCP) iPacket.getPayload();
                tcpPacket.setSourcePort(patPort);
                tcpPacket.resetChecksum();
                tcpPacket.setParent(iPacket);
                iPacket.setPayload(tcpPacket);
                break;
            case IPv4.PROTOCOL_UDP:
                UDP udpPacket = (UDP) iPacket.getPayload();
                udpPacket.setSourcePort(patPort);
                udpPacket.resetChecksum();
                udpPacket.setParent(iPacket);
                iPacket.setPayload(udpPacket);
                break;
            default:
                log.trace("Temporally, this method can process UDP and TCP protocol.");
                return;
        }

        iPacket.setSourceAddress(externalIp.toString());
        iPacket.resetChecksum();
        iPacket.setParent(ethPacketIn);
        ethPacketIn.setDestinationMACAddress(DEFAULT_EXTERNAL_ROUTER_MAC);
        ethPacketIn.setPayload(iPacket);
        ethPacketIn.resetChecksum();

        OpenstackNode srcNode = osNodeService.node(srcDevice);
        if (srcNode == null) {
            final String error = String.format("Cannot find openstack node for %s",
                    srcDevice);
            throw new IllegalStateException(error);
        }

        TrafficTreatment treatment = DefaultTrafficTreatment.builder()
                .setOutput(srcNode.patchPortNum()).build();
        packetService.emit(new DefaultOutboundPacket(
                srcDevice,
                treatment,
                ByteBuffer.wrap(ethPacketIn.serialize())));
    }

    private int getPortNum() {
        if (unUsedPortNumSet.isEmpty()) {
            clearPortNumMap();
        }
        int portNum = findUnusedPortNum();
        if (portNum != 0) {
            unUsedPortNumSet.remove(portNum);
            allocatedPortNumMap.put(portNum, System.currentTimeMillis());
        }
        return portNum;
    }

    private int findUnusedPortNum() {
        return unUsedPortNumSet.stream().findAny().orElse(0);
    }

    private void clearPortNumMap() {
        allocatedPortNumMap.entrySet().forEach(e -> {
            if (System.currentTimeMillis() - e.getValue().value() > TIME_OUT_SNAT_PORT_MS) {
                allocatedPortNumMap.remove(e.getKey());
                unUsedPortNumSet.add(e.getKey());
            }
        });
    }

    private class InternalPacketProcessor implements PacketProcessor {

        @Override
        public void process(PacketContext context) {
            Set<DeviceId> gateways = osNodeService.completeNodes(OpenstackNode.NodeType.GATEWAY)
                    .stream().map(OpenstackNode::intgBridge)
                    .collect(Collectors.toSet());
            if (context.isHandled()) {
                return;
            } else if (!gateways.contains(context.inPacket().receivedFrom().deviceId())) {
                // return if the packet is not from gateway nodes
                return;
            }

            InboundPacket pkt = context.inPacket();
            Ethernet eth = pkt.parsed();
            if (eth == null || eth.getEtherType() == Ethernet.TYPE_ARP) {
                return;
            }

            IPv4 iPacket = (IPv4) eth.getPayload();
            switch (iPacket.getProtocol()) {
                case IPv4.PROTOCOL_ICMP:
                    break;
                case IPv4.PROTOCOL_UDP:
                    UDP udpPacket = (UDP) iPacket.getPayload();
                    if (udpPacket.getDestinationPort() == UDP.DHCP_SERVER_PORT &&
                            udpPacket.getSourcePort() == UDP.DHCP_CLIENT_PORT) {
                        // don't process DHCP
                        break;
                    }
                default:
                    eventExecutor.execute(() -> processSnatPacket(context, eth));
                    break;
            }
        }
    }
}


text:
L-13 member makes bid for Pennsylvania statehouse
It's because of my background with the Boilermakers that I'm working hard for hard-working Pennsylvanians.
Bill Monahan, candidate for HD-109, Pennsylvania
Bill Monahan, L-13, the Democratic candidate for Pennsylvania state representative in HD-109, receives the AFL-CIO endorsement.
SIT DOWN WITH Bill Monahan, a Local 13 (Philadelphia) member and Democratic candidate for Pennsylvania state representative in HD-109, and it won't take long before he starts talking about how he wants to "help the people." It's evident he's a family man with a compassionate heart, a proud fourth-generation Boilermaker and determined to be a voice for working people in his Columbia County district.
Monahan is no stranger to elected office in the state. Five years ago, the mayor of Orangeville, where Monahan lived at the time, stepped down. With only six months left in the mayor's term, the town secretary rang the 20-year Boilermaker to ask if he'd fill in, then run for mayor when elections came around again. He said yes, won the election and spent about two years in office before he and his family moved out of town so his grandparents could move into his one-story house. The move made him ineligible to be mayor.
Ed Harkins, who until recently headed up L-13's state government affairs committee, encouraged Monahan to run for the statehouse.
"When he first became mayor, I saw that as a way for him to get his foot in the door with state legislators," Harkins says. "And it worked out. He would walk into some of those meetings in Harrisburg, he'd mention he was the mayor of Orangeville, and it would open doors for him."
His stint as mayor is a big reason Monahan is running for state office. The last few years, since he became involved in state politics, he's wondered how Boilermakers could become more effective at representing the union to those wielding political power.
I come from the working class. I'm trying to work hard to be the person the people need right now.
"After talking with state reps and senators, I found that they don't know what a Boilermaker is or what one does," he says. "What better way for a Boilermaker to have a voice than to run for public office? And not just Boilermakers—we need union labor to stand up for working men and women."
That's exactly what Monahan aims to do. He wants to be a problem solver for not only those working union building trades, but also the non-union. His platform includes supporting essential workers such as teachers and nurses and acting as a vital liaison for working-class communities. He also has an eye out to stimulate the local economy by supporting vocational education and improving work opportunities for those who make their living in the building trades.
Monahan describes himself as a "boots on the ground" kind of guy. He believes he won't know the problems people face without talking to them first—something he learned from being a supervisor on job sites.
"If you don't ask the questions, you truly don't know what to focus on," he says. That's why, before COVID-19 stopped his door-knocking campaign, he went house to house, often wearing a Carhartt jacket and his scarred work boots, listening to concerns from the people he's asking to vote for him in November.
"I come from the working class," Monahan says with pride. "I'm trying to work hard to be the person the people need right now. It's not about self-interest. When they see me, I want them to say, 'This guy is for us.' It's because of my background with the Boilermakers that I'm working hard for hard-working Pennsylvanians."
For more information and updates on Bill Monahan's bid for Pennsylvania's statehouse, visit his political page on Facebook.
Direct campaign donations to:
Friends of Bill Monahan
Orangeville, PA, 17859
Boilermaker Reporter Issue
V59N3
L-549's Amsbaugh named Tradeswomen Hero
Greedy owners pushed unions into the 1922 shopman's strike
Locals award service pins
Local 105 hosts annual Archery Shoot
Local women's committees benefit all members

redpajama_set_name: RedPajamaCommonCrawl


text:
West Virginia Small Business Development Center names Mark Burdette as program coordinator for West Virginia BusinessLink
WV Press Release Sharing
CHARLESTON, W.Va. — The West Virginia Small Business Development Center (WV SBDC), a division of the West Virginia Department of Economic Development, is excited to announce Mark D. Burdette as the new program coordinator for West Virginia BusinessLink.
Mark Burdette
In this position, Burdette will oversee and promote West Virginia BusinessLink, a one-stop, online platform for entrepreneurs and business owners, including existing businesses, start-ups and aspiring entrepreneurs, for resources in the state.
Before joining the West Virginia Department of Economic Development with WV SBDC, Burdette worked in the private sector as co-founder of Citynet, along with starting and growing many other small businesses in West Virginia in the areas of technology, manufacturing, and marketing.
Burdette brings many years of experience working in the entrepreneurial development arena, most notably as General Manager of the Advantage Valley Entrepreneurial League System®, which helped lay the foundation for the thriving and growing West Virginia Entrepreneurship Ecosystem that exists today.
A native of West Virginia, Burdette has devoted his career to not only starting and growing companies in West Virginia but has helped advance entrepreneurship and innovation as an important economic development strategy throughout the state. Burdette said, "In this new role at the WV SBDC, I have an opportunity to be part of a great team dedicated to furthering the ongoing commitment that West Virginia has demonstrated by supporting the continuing development of our entrepreneurs and small businesses.
WV BusinessLink is a tremendous tool that will make it easier for entrepreneurs and small businesses to access the resources they need, when they need them, across the entire state of West Virginia."
"We are thrilled to have Mark join the WV SBDC Team," said Steve D. Johnson, State Director of the West Virginia Small Business Development Center. "He brings a wealth of knowledge and first-hand experience in starting, operating, and growing a business.
His passion for entrepreneurship and innovation will be a wonderful asset as we expand and enhance the WV BusinessLink platform to assist WV small businesses."
"It is great to have an entrepreneur like Mark heading up WV BusinessLink", said Mike Graney, Executive Director of the West Virginia Department of Economic Development. "With his entrepreneurial drive and determination, I am confident that he will help us grow and expand WV BusinessLink to serve even more of the entrepreneurs and small businesses that play such a vital role in West Virginia's economy.
WV BusinessLink is a service of the West Virginia Small Business Development Center, a division of the West Virginia Department of Economic Development. The WV SBDC is funded in part through a cooperative agreement with the U.S. Small Business Administration (SBA).
For more information visit www.wvbusinesslink.com.


text:
'First petri dish': Sundance film festival may have been Covid-19 incubator
Entertainment May 7, 2020
A new report suggests that Januarys Sundance film festival, the annual gathering of cinephiles in Park City, Utah, may have been a key early hub for coronavirus in the US. The article, in the Hollywood Reporter, cites numerous attendees who experienced Covid-19-like symptoms either during or immediately after the festival. None were believed to have been tested for the disease.
Sundance this year attracted about 120,000 people to the small mountain resort, to watch films and party in confined spaces. The snowy conditions that make Park City perfect for skiing mean that socialising indoors is common, as are some flu-like symptoms as a result of the low temperature and high altitude.
Yet this years Sundance plague appears to have been more virulent for regular attendees than earlier iterations, with many complaining of considerable difficulties breathing, multiple trips to hospital and at least a fortnight bedbound.
The Hollywood Reporter cites but declines to name one major actor who apparently became gravely ill after the festival, as did members of his entourage. They quote the Black List founder Franklin Leonard saying he became sick on 28 January, when he flew home to LA. Shortly after, he says, I was barely functional as sick as Ive ever been for two weeks. Leonard reports that at least two others he knew of cut their festival trip short due to illness.
A spokesperson for the Sundance festival said: Were sorry to hear that any of our festival attendees were unwell either during or after our January edition. We are not aware of any confirmed festival-connected cases of Covid-19.
The Hollywood Reporter quotes a microbiologist, Dan Hart, who flags the fact the festival began on the same day as the lockdown in Wuhan. Logic dictates that [sick attendees] most probably did have it. With Sundance, youve got the perfect formula for this virus to really go to town and contaminate everybody.
The articles thesis has been defended by festival-goers on social media who have been sharing their own stories of post-Sundance illness.
A few days after attending Sundance Film Festival this year, I woke up one morning thinking I was having a heart attack. Massive pain in my chest. Hard to breathe. Went to the emergency room. Not heart related, something with my lungs. Maybe coronavirus? https://t.co/eDwV89x0dL
— Scott Myers (@GoIntoTheStory) May 7, 2020
AwarenessCoronaCoronavirusentertainmentVirus
Coronavirus: Byron owners launch bid to flip burger chain
The owners of burger restaurant chain Byron will launch an auction next week as the coronavirus pandemic threatens hundreds of thousands of jobs in the casual dining sector.Sky News has learnt that Byron, which employs 1,200 people at 51 outlets across Britain, has asked KPMG to begin contacting potential buyers on Monday. The timing of…
Kelly Preston: John Travolta's wife dies from breast cancer aged 57
Confirmed coronavirus cases around the world passed 5 million early Thursday as infections continue to accelerate in the Americas. Drugmaker AstraZeneca said it received more than $1 billion from the U.S. Biomedical Advanced Research and Development Authority to develop a vaccine in partnership with the University of Oxford. The company said it will begin first deliveries of…
Coronavirus: Calls to investigate global response
Image copyright AFP Image caption Dr Tedros and the WHO have faced criticism for their handling of the pandemic Global health leaders are set to call for a review into the international response to the Covid-19 pandemic.Envoys from 194 of the World Health Organization's member states will meet virtually on Monday and Tuesday for the…
'The Good Fight' Renewed For Season 5 By CBS All Access; Sets Shortened Season 4 Finale Date
CBS All Access has ordered a fifth season of The Good Fight. With the renewal, the series will be able to continue the story of season 4, cut short because of the coronavirus pandemic. Due to the ongoing halt in the production since early March, season 4, intended to be a 10-episode season, will conclude…
Knicks legend Patrick Ewing out of the hospital after testing positive for coronavirus
NBA Hall of Famer and former Georgetown Hoyas player Patrick Ewing is introduced as the Georgetown Hoyas' new head basketball coach at John Thompson Jr. Athletic Center on April 5, 2017 in Washington, DC.Mitchell Layton | Getty ImagesBasketball legend Patrick Ewing has been released from the hospital and is resting at home after having tested positive for…
Millions of drivers to receive £25 from car insurance firm amid coronavirus lockdown
When you subscribe we will use the information you provide to send you these newsletters. Sometimes they'll include recommendations for other related newsletters or services we offer. OurPrivacy Noticeexplains more about how we use your data, and your rights. You can unsubscribe at any time.Invalid EmailMillions of drivers will be refunded £25 from their car…
£85m 'lifeline' for thousands of Leicester firms devastated by coronavirus
Coronavirus vaccine: The race to create a cure for COVID-19
What were you doing on 10 January 2020? It was a Friday, so chances are you were arranging to meet up with friends. The days of completely unrestricted normality seem a distant memory. But it's the date that the race to create a coronavirus vaccine began. That day, the Chinese government released the genetic sequence…
Twitter chief to donate quarter of his fortune to coronavirus fight
Twitter CEO Jack Dorsey's pledge of 28% of his wealth dwarfs the 0.1% promised by Jeff Bezos. Photograph: Anushree Fadnavis/Reuters Jack Dorsey, Twitter's chief executive, has pledged to donate $1bn (£800m) to fund coronavirus research to help "disarm this pandemic". Dorsey, who co-founded Twitter in 2006 and went on to found payments company Square, tweeted…
Jon Taffer Says Your Fave Restaurant Will Be Very Different Post-Pandemic
Jon Taffer Dining Out Will Look Way Different … Future All About Trust 4/15/2020 11:22 AM PT Exclusive TMZ.com Jon Taffer has a good idea what your favorite restaurant is going to look like when the pandemic smoke clears, and says the new key to culinary success won't be taste. The "Bar Rescue" star joined…
TikTok Claps Back Against Senators' National Security Concerns
Image: TikTokTikTok aimed to "set the record straight" Thursday in a company blog post detailing its practices after Congress raised national security concerns about the viral video app among other China-owned properties earlier this week. In it, TikTok maintained that its focus is entertainment, not politics, and no foreign government has a hand in its…
North Carolina speedway sees thousands in the stands, few with masks despite coronavirus risk
Get all the latest news on coronavirus and more delivered daily to your inbox. Sign up here.Thousands of racing fans packed the stands Saturday night at Ace Speedway in Alamance County, North Carolina.Sheriff Terry Johnson revealed that he would not interfere with the event and called Governor Roy Cooper's executive order "unconstitutional."FOX8 saw large crowds…
Ex-Yankees slugger Alex Rodriguez among 100 ESPN talent asked to take voluntary coronavirus pay cut
ESPN is asking former Yankees slugger Alex Rodriguez to take a voluntary pay cut.APThe coronavirus has brought the sports world to a sudden stop. And with no games to broadcast and no highlights to analyze, the bottom line is becoming a problem at ESPN.CORONAVIRUS RESOURCES: Live map tracker | Businesses that are open | HomepageAccording…
NASCAR is back after a 10-week coronavirus hiatus
After a 10-week hiatus, NASCAR returns to the racetrack Sunday at South Carolina's Darlington Raceway.Why it matters: Other sports leagues will be watching closely and hoping that the weekend goes smoothly, as that would give them confidence — and a road map to follow — as they, too, attempt to return in the coming months.The…
Colbert roasts Trump's increasingly disturbing comments on the Ukraine whistleblower
By Caitlin Welsh2019-09-27 06:21:13 UTC The Trump-Ukraine-call-pressure-whistleblower scandal-saga — which is still sprawling out in so many bonkers directions that nobody's given it a catchy -gate nickname yet — continues to grow, and with it, the president's genuinely impressive list of ways to look incredibly not-innocent. On Thursday night's Late Show, Stephen Colbert ran through…
© Copyright 2020 CORONA AWARENESS - All Rights Reserved


RobertaXXX69 . NikkiLeoLove. RedHotHolly. SergioTitan3271.
JayssaChaudeSergioTitan3271JULIANANOCHETY9SienaKisss .MeiliMosyTheRUFFRIFFSAmberXtravaganzMikeyStone .SienaKisssADELEHotGirlDaniielleMarcoJoshua .TheRUFFRIFFSNicekittybush1GinaDeviSultryRoxana .SweetDollTsxxxUrSuperGirlLovelyAngel2U10inASIANjenni .LovelyAngel2UIzzypriaCamiSubSlunastyBOOBSgirl .CurlySelenatheperfectboyMONIKA74princessxjenny .QuinCuteGinaDeviJessycute77LexxiGrey .NikiSwankNasNikSergioTitan3271JAY85540 .tamiraJULIANANOCHETY9DaniiellePINKLIPS40 .MONIKA74SexyJassiprincessxjennyAriesMistress .
Sexynyumister025111LovelyAngel2Ucrazymysterylove .KeilaDeepLumanickertjeJayssaChaude .JULIANANOCHETY9AdreyForUMeiliMosyFreethinking .princessxjennyAriesMistressJAY85540LITTLEKATSLAVE .DarylPark1deejaygirlIzzypriaDeborahDesir3 .AmazingDICKKKNasNikWantedBrunette4UMeiliMosy .ADELEHotGirlKittykaylaNikitaLoverLuma .ROMEHOevarodriguesIzzypriatheperfectboy .DaniielleFox4you18LumaLexxiGrey .SienaKisssStevenDAVIDKoreanabeautyXXXTiffanyRae .NikitaLoverAmberXtravaganztamiraxCrazyChiksx .


text:
<!doctype html>

<meta charset="utf-8">

<title>The syscall system in POK and interrupt handler in POK - Youren Shen</title>

<meta property="og:locale" content="en_US">
<meta property="og:site_name" content="Youren Shen">
<meta property="og:title" content="The syscall system in POK and interrupt handler in POK">

  <link rel="canonical" href="http://yourenis.me/the-syscall-system-in-pok/">
  <meta property="og:url" content="http://yourenis.me/the-syscall-system-in-pok/">

  <meta property="og:description" content="####Focus on interrupt_frameThe definition of interrupt_frame is:">

  <meta name="twitter:site" content="@shenyouren">
  <meta name="twitter:title" content="The syscall system in POK and interrupt handler in POK">
  <meta name="twitter:description" content="####Focus on interrupt_frameThe definition of interrupt_frame is:">
  <meta name="twitter:url" content="http://yourenis.me/the-syscall-system-in-pok/">

    <meta name="twitter:card" content="summary">

  <meta property="og:type" content="article">
  <meta property="article:published_time" content="2014-03-30T00:00:00+08:00">

<link href="http://yourenis.me/feed.xml" type="application/atom+xml" rel="alternate" title="Youren Shen Feed">

<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1.0">

<link rel="stylesheet" href="http://yourenis.me/assets/css/main.css">

<meta http-equiv="cleartype" content="on">

        <button>

</button>

Youren Shen

Blog

Resume

Gallery

Youren Shen

Normal student from China, Main field on Computer System. We are born to suffering, still struggle in the world.

    <button class="btn btn--inverse">Follow</button>

 Beijing China

 Email

 Facebook

 Instagram

 Github

 Weibo

    <meta itemprop="headline" content="The syscall system in POK and interrupt handler in POK">
    <meta itemprop="description" content="####Focus on interrupt_frameThe definition of interrupt_frame is:">
    <meta itemprop="datePublished" content="March 30, 2014">

The syscall system in POK and interrupt handler in POK

	  4 minute read

####Focus on interrupt_frame
The definition of interrupt_frame is:

typedef struct
{
  uint32_t es;
  uint32_t ds;
  uint32_t edi;
  uint32_t esi;
  uint32_t ebp;
  uint32_t __esp;
  uint32_t ebx;
  uint32_t edx;
  uint32_t ecx;
  uint32_t eax;

  /* These are pushed by interrupt */
  uint32_t error;	/* Error code or padding */
  uint32_t eip;
  uint32_t cs;
  uint32_t eflags;

  /* Only pushed with privilege switch */
  /* (Check cs content to have original CPL) */
  uint32_t esp;
  uint32_t ss;
} interrupt_frame;

But when we define a object and fill it?

The answer is that we do not define a real object and fill it when interrupt happens.
The interrupt_frame is designed to save the processor current.We push all the register to stack, and the ESP register is used to point the top of the stack,and when we push a operand into stack, the esp will decrease since the stack in x86 grows down.
So, when we call the syscall_gate_handler, we just need to use the esp as the address of interrupt_frame, then we can refer the variables we pushed before.

####More details of syscall_gate
As we can see, the int 42 will invoke syscall_gate, then the syscall_gate will invoke the syscall_gate_handler:

void syscall_gate_handler(interrupt_frame* frame)
{
   pok_syscall_info_t   syscall_info;
   pok_ret_t            syscall_ret;
   pok_syscall_args_t*  syscall_args;
   pok_syscall_id_t     syscall_id;

   /*
    * Give informations about syscalls: which partition, thread
    * initiates the syscall, the base addr of the partition and so on.
    */
   syscall_info.partition = PARTITION_ID (frame->cs);
   syscall_info.base_addr = pok_partitions[syscall_info.partition].base_addr;
   syscall_info.thread    = POK_SCHED_CURRENT_THREAD;

   syscall_args = (pok_syscall_args_t*) (frame->ebx + syscall_info.base_addr);

   /*
    * Get the syscall id in the eax register
    */
   syscall_id = (pok_syscall_id_t) frame->eax;

   /*
    * Check that pointer is inside the adress space
    */
   if (POK_CHECK_PTR_IN_PARTITION(syscall_info.partition, syscall_args) == 0)
   {
         syscall_ret = POK_ERRNO_EINVAL;
   }
   else
   {
      /*
       * Perform the syscall baby !
       */
      syscall_ret = pok_core_syscall (syscall_id, syscall_args, &syscall_info);
   }

   /*
    * And finally, put the return value in eax register
    */
   asm ("movl %0, %%eax  \n"
	:
	: "m" (syscall_ret));
}

The syscall_gate_handler get informations from the interrupt_frame and then invoke the pok_core_syscall.
In the pok_core_syscall, the POK will invoke corresponding handler of the syscall id, and the syscall id is coming from the interrupt_frame and assigned before invoke syscall.

####The changes in POK kernel.
I'd like to divide the CPU paravirtualization into two parts. One is to replace the privilege instructions, the other to implement the interrupt handler to guest.For the first part, Philipp has design and implement the framework. For the other part, the Philipp has suffer some problem and, now I have to read this part of code and know the reason why the mechanism is faulty.

The first part belongs to RTEMS, and if we want to implement more function, we have to replace more instructions using syscall or hypercall, but not just only some dummy functions.

As we discuss before, the interrupt system consisting of two parts, one's vector number is less than 32, which is reserved by INTES, and initialized with series exception_list, the other's vector number is great than 32, which can be use liberalized.

Now let's turn bake to the topic, What's the change in POK kernel?

pok_ret_t pok_bsp_init (void)
{
   pok_cons_init ();
   pok_pm_init ();
   pok_pic_init ();
   *pok_meta_handler_init();*
   *pok_partition_irq_init();*

   return (POK_ERRNO_OK);
}

The pok_meta_handler_init and the pok_partition_irq_init is added by us. "'pok_meta_handler_init'sets up the software-IDT and fills all fields with start values (magic unused vector number, no handler present, but waiting).'pok_partition_irq_init' sets up partition_irq_enabled table with the value for disabled (0), so initially no partition gets interrupts until it asks for them.", Said by Philipp.

To using the liberalized interrupted number, we have to extend the pok_arch_event_register:

 pok_ret_t pok_arch_event_register  (uint8_t vector,
                                     void (*handler)(void))
 {
-   pok_idt_set_gate (vector,
+  if( vector > 31 && vector < 48 ) /* first 32 lines reserved by intel */
+  {
+    pok_idt_set_gate (vector,
+                     GDT_CORE_CODE_SEGMENT << 3,
+        (uint32_t) pok_irq_prologue[vector - 32], /* to fit the prologue array */
+                     IDTE_TRAP,
+                     3);
+
+    return (POK_ERRNO_OK);
+  }
+  else
+  {
+    pok_idt_set_gate (vector,
                      GDT_CORE_CODE_SEGMENT << 3,
-                     (uint32_t)handler,
+        (uint32_t) handler,
                      IDTE_TRAP,
                      3);

-   return (POK_ERRNO_OK);
+    return (POK_ERRNO_OK);
+  }
 }

For example, when the timer initialized, we just invoke the pok_bsp_irq_register_hw->pok_arch_event_register.The pok_bsp_irq_register_hw will judge if the irq handler is from kernel or partitions.Finally, the pok_arch_event_register will set corresponding pok_irq_prologue and vector with clock.
When the clock interrupt occurs, the corresponding pok_irq_prologue will invoke, and invoke the _ISR_Handler, then invoke the _C_isr_handler and iret.(which failed)

####Conclusion
As I said before, I'd like to divide the paravirtualization into two parts, one is using the hypercall to implement virtualization layer in RTEMS, the other is handling interruptions in POK. Now we use the meta_handler to register an ISR in POK, but we failed to return to user space. I'm just wondering that whether we can devide the interruptions to two parts, one is the kernel interruption, the other is guest interruption. we can deal with the kernel interruptions in Kernel space, and dispatch the guest interruptions to partitions.

Another confusion is when the interruption occurs, why we should notify the partitions as soon as possible?

 Updated: <time datetime="2014-03-30T00:00:00+08:00">March 30, 2014</time>

   Twitter

   Facebook

   Google+

   LinkedIn

      Previous

      Next

Leave a Comment

        Dynamic Library Debug Record

	  3 minute read

Recently, I have encountered a bug due to an upgrade of the OpenSSL library on Ubuntu 16.04.
The bug is quite tricky because it's related to how Linux load ...

        RTnetlink Tutorial in Chinese

	  1 minute read

rtnetlink是基于netlink机制的一个内核和协议栈相关操作的机制。其允许用户程序对内核的路由表进行读写。是Linux 2.2之后的一个新的功能。这个功能非常重要,在很多基础的工具中的使用也非常广泛。但是很少资料直接对rtnetlink的具体使用进行讲解,中文的资料只有一些对Manual的翻译和补充,Li...

        My Workstation——论如何正确地加持生产力~

	  less than 1 minute read

从开学到现在,经过一个月的慢慢累积,将工作环境好好提升了一番。

        The current workflow of interrupt handling

	  4 minute read

##The workflow of current interrupt handling

###The structure
As usual, let's start with key structure:

struct vcpu
{
......
    /*
    * This bit will b...

 Twitter

 Facebook

 GitHub

 Feed

© 2018 The site of Youren Shen. Powered by Jekyll & Minimal Mistakes.

  Please enable JavaScript to view the comments powered by Disqus.

redpajama_set_name: RedPajamaGithub


text:
Po klęsce Francji w czerwcu 1940 około 100 okrętów Francuskiej Marynarki Wojennej schroniło się w Wielkiej Brytanii. Dowództwo francuskie podporządkowało się rządowi marszałka Philippe'a Pétaina i wydało rozkaz przejścia tych jednostek do portów w Afryce Północnej, jednakże Brytyjczycy w nocy z 2 na 3 lipca 1940 siłą przejęli okręty w ramach operacji "Catapult". Załogi, które nie podporządkowały się Wolnym Francuzom, zostały internowane, a następnie repatriowane do Francji Vichy.

Z braku ludzi chętnych do walki (zaledwie 20 oficerów i około 500 podoficerów i 15 tysięcy marynarzy), część jednostek została przekazana innym państwom alianckim, w tym pięć z nich Polskiej Marynarce Wojennej. Początkowo miało to być sześć jednostek ale pancernik "Paris" zaproponowany naszej marynarce nie został przyjęty z powodu braku rezerw kadrowych Polskiej Marynarki Wojennej, nieopłacalności remontu starej, zużytej jednostki i jej niewielkiej wartości bojowej.

Okręty francuskie pod polską banderą pływały z polskimi załogami pod oznaczeniem OF (Okręt Francuski) zamiast ORP (Okręt Rzeczypospolitej Polskiej). Po pewnym czasie były zwracane Brytyjczykom i Wolnym Francuzom. Okręty te to:
 niszczyciel:
 "Ouragan" (18 lipca 1940 – 30 kwietnia 1941)
 ścigacze okrętów podwodnych (19 lipca 1940 – 5 albo 6 lutego 1941):
 "Ch 11"
 "Ch 15"
 patrolowce:
 "Médoc" (18 lipca 1940; od 22 października 1940 pozostała na nim część polskiej załogi razem z dowódcą i pływał dalej pod trzema banderami – 26 listopada 1940 zatonął; zginęło trzech Polaków, w tym dowódca patrolowca, komandor porucznik dyplomowany Roman Stankiewicz)
 "Pomerol" (18 lipca 1940 – 8 stycznia 1941).

Bibliografia

redpajama_set_name: RedPajamaWikipedia


You searched for which does not fit your . We've redirected you to 107-510, which has the proper fitment.
Item as shown, price much more reasonable compared to other sites, would definitely continue patronizing J & P!


text:
News » Headlines
Triton appoints new managing director
Published: 20 May, 2015
Triton is celebrating its 40th anniversary this year and following 17 years of consistent growth under the leadership of its present managing director, Lorna Fellowes, has announced the appointment of business development director, David Tutton, to the position of managing director from July 2015.
Since joining the business as marketing director in 1992, Ms Fellowes, has played a central role in Triton's success story. Promoted to the position of managing director in 1999, she became one of only a handful of women to occupy leading positions within the bathroom industry at the time.
As Ms Fellowes hands over the leadership of Triton to her successor, her next step will be to embark upon a new role as an advisor to the Norcros Group, which will see her play an integral role in the long-term strategic development of the organisation.
Mr Tutton plans to provide continuity while building on the achievements of the past 40 years to ensure Triton continues to grow its marketshare across the UK and internationally - exporting to South Africa, America and Asia, as well as the UK and Eire.
Since joining Triton in 2014, Mr Tutton has spent the past 15 months as business development director focusing on securing the widest possible distribution for Triton's comprehensive product range.
On becoming managing director, Mr Tutton said: "Stability is so important for any organisation, which is why I am especially proud that Triton has the solid foundations of the past four decades as a market leading shower manufacturer to build on. As we begin to celebrate our 40th anniversary this year, my focus for the immediate future and longer term will be to build on Lorna's strong leadership and everything that has been accomplished as a result of the very clear direction she has given.
"My pledge is to protect our core competencies including product innovation and development, as well as customer service, for which Triton is well known. I will continue to concentrate on maintaining and forging close relationships with our customers throughout the supply chain, from builders' merchants and wholesalers right through to the installers, specifiers and retailers who are so vital for the continued recommendation of our brand."
Mr Tutton continued: "The great news is we have all the right systems and processes already in place to deliver on our core values of ease of installation, reliability, quality, efficiency and affordable style. This provides a solid starting point for the next phase of Triton's history and also means we can put all our energy into concentrating on the future and moving forward with ambitious plans."
On beginning her new role, Ms Fellowes said: "Over the past 23 years at Triton I have seen the business grow and develop beyond expectations within the Norcros Group. Today, our brand is synonymous with the best of British manufacturing and I am proud to say that one in every three showers installed in UK bathrooms is now a Triton product.
"My career has been about delivering excellence at every level and I have invested a great deal of time and energy into achieving that with the help of everyone across the business. The result of our efforts is a company with strong values, market leading products and services and 40 years of consistent growth from humble beginnings when the business began in 1975 with just six employees manufacturing one shower model from a garage unit in Atherstone.
"Under David's capable leadership the company will continue to grow and expand while staying true to our core values. I wish him all the very best of luck and it will be a pleasure to continue working with him in my new role at Group level, during what looks set to be an exciting time for everyone at Triton."
Keyline appoints new managing director and national account manager
Trade Fabrication Systems appoints New Managing Director
New Managing Director at SIG UK Exteriors
IKO appoints new Group Managing Director
New Commercial Director joins W.Howard Team


Using the BMT solution, customers will "Know More" on how to maximise mineral resource recovery, hence they will "Get More" revenue from their ore deposits. In fact, the BMM System has become the standard for ore control in some of the world's largest mining companies. Most companies achieve a positive return on investment in 2 – 3 blasts.


The basic motivation for this work is based on the desire to construct a modular testing framework and to conduct preliminary validation on that framework. The modular testing frame is required because it gives the users and developers the ability to evaluate and potentially improve the current strategies for CFD modeling of two-phase boiling flows in an efficient manner. As many know, the modeling of these types of problems comes with several challenges inherent in the method. These challenges are namely the tight non-linear coupling of the closure models, the uncertainty, sensitivity & accuracy of the various mechanistic models, and the lack of experimental data for quantities of interest at the desired operating conditions (e.g. pressurize water reactor operating conditions).
The main objectives for this work were aimed at setting up the testing platform to have the ability to address the various numerical and modeling issues, as well as, validating some of the base functionality of the solver through academic test cases, existing experiments and comparisons with commerical CFD software (e.g. in this case we used Star-CCM+). The setup of the main objectives are to not only address and test the performance and stability of a particular method with our platform, but also, due to the use of open-source code, have the added benefit of being able to include sensitivity analysis and uncertainty quantification techniques on different boiling closure models, interfacial closure models, turbulence models, etc. The relevance of these first steps in the development, in terms of usage for accident scenarios for PWR's that requires modeling the critical heat flux mechanism of departure from nucleate boiling, of our testing platform is that it gives users the ability to test all the closure and algorithm methods for stability and accuracy, test various implementations for boiling closure models, assess the accuracy of our method against an industry standard, and do all of this before testing the extremely harsh conditions involved in simulating DNB. The testing platform and method also have the ability to potentially in the future, because of the current formulation and its flexibility, simulate transient accident scenarios or challenge problems for the nuclear industry.
Chad attended Roger Williams University in Bristol, RI and graduated valedictorian with a B.S. in engineering with a focus in Mechanical Engineering and a minor in Mathematics in 2008. He then went to work for Rist-Frost & Shumway P.C. in Laconia, NH after graduation and until he returned to school in 2009. He started graduate school by attending North Carolina State University in Raleigh, NC where he worked under Dr. Joseph Micheal Doster until he graduated from the Nuclear Engineering program with a Masters degree in 2014. He then moved to the Mechanical & Aerospace Engineering program at North Carolina State University under Dr. Hong Luo for his studies towards his doctorate. His research interests include thermal hydraulics, computation fluid dynamics and applied mathematics.


New Goddess Skirt now modified with a 5" waistband for an improved fit when worn as a tube dress! Elegant line wash tie dye pairs well with everything to easily create casual and elevated looks. Perfect for luxury leisure and travel. ❤ Made in the USA.


Back in 2014 we started Car UI to test cars on their digital displays and controls. As physical buttons are disappearing and being replaced by digital screens, we wanted to take our expertise and use it to investigate the digitalization of transportation. In 2016 and 2017 Car UI was asked to test some of the most popular cars by AutoWeek, the biggest source for car information in the Netherlands. Here we look back on some of the winners, losers and highlights.
When AutoWeek first discovered Car UI back in 2016 they asked us to help them out by putting eight of the most popular cars through our test.
Generally the test was the same as for Car UI: First we ran through a few standard scenarios. Like setting up the navigation, entering a route that goes through a set location, driving with the navigation, opening a radio station, and programming this as your favorite. We added a few extra scenarios too. Like connecting your mobile to the car via Bluetooth, playing music from Spotify, and automatic parking (for cars that supported this feature). We simplified our methodology to focus less on the numbers and details, and more on the experience from the cars themselves.
With candidates like the Mini, Ford and Renault, we did not see this one coming. Yet somehow the Kia Sportage made it out on top with four out of five stars. The bar wasn't actually that high in the Kia: there's a pretty standard system with all the functions you can expect in a modern car. You can access all the main functions with actual buttons beneath the screen, and in the different sections you will find only the essential functions you actually need. That's the power of this system. Everything is simple and there are no over the top animations or clever tricks.
The dubious honor of last place went to the Peugeot 308 GTi with two out of five stars. During testing we discovered a lot of things that could have been done better. The Peugeot has gotten rid of the entire dashboard with not a switch in sight. It looks beautiful, but as a result you have to control the AC via a vague screen in the center console. When it comes to accessibility, most cars, like the Peugeot, are clearly lacking. This is really important in our test because it negatively affects safety.
Even though there are a lot of positive developments, the car industry has a long way to go when it comes to user interfaces. Sometimes it looks like a race to see who can add the most bells and whistles. Desirability is only one aspect of the user experience. Others facets like accessibility and functionality are key. Some of the issues might have to do with small budgets, but automakers like Kia show you can do well by providing a complete, functional, and very simple system for users.
Last year AutoWeek asked us to come back, to take seven luxury cars for a spin and put them through the Car UI test. We know what you're thinking. It's a tough job, but someone's gotta do it.
We've done Car UI reviews on brands for the last few years and we've honestly been less than enthusiastic about the usability and safety of a lot of the interfaces. This time we got a glimpse into the future of new technologies thanks to these luxury car models. Some of them are definitely on the right track: Audi is making bold choices in interaction, Tesla provides maps that everyone already knows from Google, Jaguar is designing an interface that looks like a mobile OS, and BMW adapts its interactions and interface to the context in which they are being used. But even in this group of cars, there are plenty of strange, clumsy and sometimes dangerous choices being made.
BMW was the first to bring I-Drive to the market. This is when you can control the navigation and multimedia interfaces with a controller knob. They got a lot of flack at first about this, but over the years they've perfected it and it works well, despite its limitations in certain situations.
BMW has tried to include a few different ways of interaction in the latest 5 Series: Via touch screen, writing on the controller knob, gestures, and voice input via natural language. A lot of other brands do this too, but they tend to make things too complicated. BMW scores high on our test because the 5 Series makes all these features work seamlessly in context. This makes it user-friendly and very intuitive.
But the BMW isn't perfect either. The voice input only works in English, and the gestures feature is still in its infancy and can only be used at certain moments. The navigation is also not as context-aware as with something like Waze. The system doesn't provide a suitable alternative when there's no parking at your final destination.
We had high expectations for the Mercedes, because they are known for being pioneers when it comes to technological innovation and luxury quality. The E-Class is full of technological features and you're welcomed by two giant screens upon entering. A few kilometers down the road however we started to notice a few issues. The interface on the two screens is inconsistent with different designs, messy because of overlapping panels, and clumsy to use. Besides that, trying to enter a destination is a real chore, and we're also not very happy with the display maps. The route is shown on a large central map with a hair thin line that contrasts little to the map itself. While the Mercedes is a beauty to drive and a real luxury car, the details and user-friendliness need to be improved if it wants to score higher.
Even though we've been investigating digital screens and the user interaction of modern cars for the last few years, this remains a hot topic. The car industry hasn't figured it all out yet when it comes to experience, usability and safety, but we have to admit that there are some huge steps being made in the right direction.
An important topic for the car sector is safety. Especially with regards to the use of devices while driving. With the knowledge Hike One has gained from Car UI we plan to contribute to this topic and help improve user safety. We also look beyond the automobile world and investigate other human machine interaction.
If you want to know more about our work or Car UI, then get in touch.


Nominal dimensions may not be achievable during manufacturing processes, due to technological or financial limitations. Therefore, tolerance allocation is of significant importance for successful assembly. The information required to allocate tolerances for complex parts and assemblies is, however, generally not available at the initial design-stage. The research on tolerance synthesis has, therefore, been conducted to develop methods, algorithms and processes, with primary focus on manufacturing, assembly, cost and quality issues. In the reported research, a framework was proposed to compile available information for developing an integrated tolerance synthesis model and a step-by-step tolerance allocation process. Architecture of the model and the process would provide a foundation for the development of a tolerance synthesis software. The research has also been extended to explore the applications of FE simulation, as a virtual tool, to the prediction of the influence of geometric tolerances on the part distortions for complex part-forms and assembly design.


text:
Home/ News/WhatsApp adds support for sharing any types of files on Android and iOS
WhatsApp adds support for sharing any types of files on Android and iOS
WhatsApp has rolled out a new update in which it has added support for sharing any type of file through the app. Prior to this, it was reported that WhatsApp was testing a new functionality which would allow the users to send any type of file to their contacts or groups. The testing now seems to be over and the functionality has been rolled out for all the users of WhatsApp on Android and iOS platforms.
Although the users could send various types of files previously as well but, they were still limited to specific types like PDFs, Word documents, spreadsheets and slides. Now the users will be able to send any type of file including APK files and Zip folders without any limitations.
However, initially the file transfers will be limited to a maximum file size of 128 MB on iOS, 100 MB on Android and 64 MB on WhatsApp Web. While there is no clue about the reason but it is assumed that there is something to do with preventing the live servers to crash under the load of millions of people sharing heavy files.
Meanwhile, the WhatsApp users on Android also get the new Album feature, something which is not new and is already present on the iOS version of the App. The feature basically bundles up all the images by a sender and displays them in the form of an album similar to that of Facebook. If a sender posts 5 or more than five images at a time, four images will be displayed in a group and the fourth image out of them will contain an overlay with the number of remaining images. Once you tap on the Album, it will show all the images present inside it.
How to make WhatsApp faster?
How to install Whatsapp on Tablets with no Sim Card
How to use latest WhatsApp Features? A step by step guide
WhatsApp UPI Payments service spotted in the Android beta version of the app, roll out expected soon
WhatsApp to introduce 'Restricted Groups' to provide Admins a stricter control over the members & content
How to install Whatsapp on PC? Easy Tutorial


Moms Are Ordering Starbucks' "Pink Drink" to Boost Their Breast Milk Supply—Does It Work?
"So this happened and it NEVER happens," Laura Galvin wrote in the Milky Mamas breastfeeding support group on Facebook. The mother of two in Lillington, North Carolina, posted a photo of the T-shirt she was wearing, which was soaked with breast milk that had leaked through. She's recently been pumping so much milk that she's worried she'll soon run out of freezer space—this week alone, she stored away 48 four-ounce bags.
"I'm trying to find a place to donate it," she tells me.
The reason Galvin believes she's making a surplus of breast milk? She's been drinking the "Pink Drink" at Starbucks.
A mixture of coconut milk and Starbucks' Strawberry Acai Refreshers, the Pink Drink started out as a secret item, but is now on the coffee giant's year-round menu. Convinced that it's helping their supply, some breastfeeding moms are turning to social media groups to sing praises for the iced beverage, which tastes like a strawberry Starburst in liquid form. One mom claims she pumped twice the amount she usually does at work. Another woman said she produced 10 times her normal amount. Stephanie Lester, who lives in Hilliard, Ohio, told me that on her second day of drinking the Pink Drink, her three-month-old daughter "got choked up" as she was feeding her.
"My milk was literally spraying for almost a minute and that has never happened before," she says.
It's important to note that these stories are purely anecdotal—the Academy of Breastfeeding Medicine cautions against relying on galactagogues, or supplements, as a primary solution to increasing breast milk supply. These include, but are not limited to, fenugreek, goat's rue, milk thistle, oats, dandelion, millet, seaweed, anise, basil, blessed thistle, fennel seeds, marshmallow, lactation cookies, brewer's yeast, flax, Mother's Milk Tea, Ovaltine, blue (yes, specifically blue) Gatorade, and prescription medications. Some women tried the Pink Drink and got nothing except for an empty wallet and maybe some brain freeze.


text:
package io.astefanutti.metrics.cdi.se;

import com.codahale.metrics.Gauge;
import com.codahale.metrics.Meter;
import com.codahale.metrics.RatioGauge;
import com.codahale.metrics.Timer;
import com.codahale.metrics.annotation.Metric;
import com.codahale.metrics.annotation.Timed;

import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;

@ApplicationScoped
public class MetricProducerMethodBean {

    @Inject
    private Meter hits;

    @Timed(name = "calls")
    public void cachedMethod(boolean hit) {
        if (hit)
            hits.mark();
    }

    @Produces
    @Metric(name = "cache-hits")
    private Gauge<Double> cacheHitRatioGauge(final @Metric(name = "hits") Meter hits,
                                             final @Metric(name = "calls") Timer calls) {
        return new RatioGauge() {
            @Override
            protected Ratio getRatio() {
                return Ratio.of(hits.getCount(), calls.getCount());
            }
        };
    }
}


Shikaya manages and operates the Whole School Foundation Education Programme supported by Standard Bank.
The programme works with 15 primary schools in the Western and Eastern Cape specifically focussing on developing a strong grounding in Literacy and Numeracy the Foundation Phase (Grade R-3) and supporting the school management in effective leadership.
Grade R teachers are given skills training and in-class support. All the classrooms have been given teaching and learning resources.
Grade 1-3 teachers in all the schools have an expert Numeracy Coach working with them in class on a weekly basis.
Grade 2 learners who are reading below their age average are given one-on-one reading support with a trained volunteer.
The school leadership at all the schools have been supported in leadership and collaboration development.


text:
Bioscience-Medicine
Military & Veterans' Issues
Technology & Entrepreneurship
TPR Noticias
KPAC Blog
Classics a la Carte
Performance Saturday
Book Public
Fire Triangle
No Hill For A Climber
Petrie Dish
The Shakeout
Texas Matters
Twenty-Four Seven
Worth Repeating
The Enduring Gap
KSTX 89.1 FM - San Antonio
KPAC 88.3 FM - San Antonio
KTXI 90.1 FM - Hill Country
KTPR 89.9 FM - Big Country
KVHL 91.7 FM - Highland Lakes
KTPD 89.3 FM - Del Rio
KCTI 1450 AM - Gonzales
TPR Community
TPR Music
TPR Events
Tell Your Story On Worth Repeating
TPR Cinema Tuesdays
Vital Conversations
Literary Moments
TPR News Staff
Texas Public Radio for Mobile Devices
TPR Newsletters
Support TPR
Business and Professional Membership
Nonprofit & Business Directory
Underwriting: Nonprofits
Underwriting: For-profits
TPR Sponsorship Opportunities
Volunteer With Texas Public Radio
TPR Merchandise
Stocks, Securities, Other
My TPR Account
© 2020 Texas Public Radio
Real. Reliable. Texas Public Radio.
On Air Now Playing KSTX: San Antonio
On Air Now Playing KPAC: San Antonio
On Air Now Playing KTXI: Hill Country
On Air Now Playing KTPR: Big Country
On Air Now Playing KVHL: Highland Lakes
On Air Now Playing KTPD: Del Rio
On Air Now Playing KCTI: Gonzales
They Were Rescued During Hurricane Florence. But Now, 'Everything Is Gone'
By Amanda Morris
Published October 2, 2018 at 12:24 PM CDT
A portrait of the Coleman family in 2018.
Everything seemed okay when Elizabeth Coleman went to bed on Sunday, September 16. After evacuating three days prior to escape Hurricane Florence, her family of four and parents-in-law had just returned to their one-level, two-bedroom ranch home on Crusoe Island Road in Whiteville, N.C. It was, thankfully, undamaged.
The family had gone home after evacuating because they believed that the storm had passed and they had heard that the floodwater was receding. They thought it would be safe to return.
By 5 a.m., something was wrong.
Elizabeth woke up to find floodwaters that had risen to the second step of the porch. Two more, and it would reach the house.
When daybreak came, the water was up to the third step.
Racing the rising flood, Elizabeth and her husband Richard Coleman started grabbing whatever they could to bring with them. Richard was worried about his two young children, who both have special needs, so he snatched up their clothes and medication. Most everything else, they had to leave behind.
Whiteville received at least 25 inches of rain during Florence.
By the time the Coleman family packed up and got rescued, the water reached the porch. The Coast Guard evacuated the Colemans by boat, carrying them through the cold waters that had turned their home into an island. Later, the Coast Guard went back to bring the family's six dogs and four cats to safety.
Have you ever smelled moldy bread? Take that and multiply it by 100.
Though they said they're grateful to be alive, the road ahead will be financially tough as they recover from the damage of Hurricane Florence. For thousands in the Carolinas like the Colemans, Hurricane Florence took out what little security they had.
Last week, Elizabeth and Richard stepped foot back in their house for the first time. Richard had to kick open the front door, swollen from water, to get inside. What they saw, and smelled, was worse than they imagined.
"Have you ever smelled moldy bread?" Richard asked over the phone after his first day back. "Take that and multiply it by 100."
The stench accompanies a new splotchy brown, black and white wallpaper of mold that stretches up and across the ceiling. Mold has also grown on their furniture, which lies tossed about in the house along with all of their belongings.
The place looks like it has been ransacked, they said. A box of Pampers diapers sat underneath a toppled refrigerator. Drawers spilled their contents onto the floor. Children's toys — dolls, racing cars, building blocks, stuffed animals — cover the floor next to splintered, deteriorating furniture. A dresser has been dumped into 2-year-old Alannah's pink, plastic Disney princess carriage bed frame from Walmart.
Above the floodwater mark circling each room like a ring in the bathtub, only a few items look untouched: painted wooden crosses bearing both of the Coleman children's names and the word "faith," a U.S.A. sign shaped like a heart, and a painted inscription on the door of each Coleman family member's name and birth information.
/ Elizabeth Coleman
After floodwaters from Hurricane Florence entered the Colemans' home, the home looked like it had been ransacked.
In bright blue paint it reads that the Coleman's oldest child, Stanley, was born on January 22, 2015, roughly 5 weeks premature, weighing 5 pounds, 4.8 ounces. He spent the first week of his life in the NICU. His younger sister Alannah's name sits to the right of his, in light purple. She was born two years ago, on September 2, 2016, just before Hurricane Matthew hit the same area.
She weighed 1 pound, 1 ounce.
Born 13 weeks premature, Alannah spent the first 100 days of her life in the NICU, and couldn't leave the hospital when Matthew hit. Instead, her parents had to leave her behind when the hurricane hit. Talking about the experience still makes Elizabeth cry.
This time, no one was left behind. But, the Colemans' lives haven't gotten easier.
Left with nothing
Now, as a 40-year-old man, everything I worked for my whole life is gone.
Before Florence, the Colemans lived paycheck-to-paycheck. The family is $36,000 in debt to the hospital for two, uninsured, emergency surgeries Elizabeth had to treat appendicitis and kidney stones. She explained that she wasn't covered on her husband's health insurance because it would have cost additional money each month that they didn't have. What little extra they had went toward their kids. They had $0 in savings.
As he assessed the family's situation, Richard's voice was seeped in anguish. Normally a reserved man who doesn't show his emotions, he admits he is in despair. Now they have nothing: no house, no furniture, no cars, and no money besides a few $20s in their pockets.
"I've been working since I was 14 years old. Now, as a 40-year-old man, everything I worked for my whole life is gone," he said. "Everything is gone."
The Coleman family home, damaged beyond repair by floodwaters from Hurricane Florence.
His first job was as a bag boy at the grocery store. Now he works as a correctional officer at the Tabor Correctional Institution, and makes roughly $2,000 a month after taxes. He said he makes just enough not to qualify for government assistance. Richard said he plans to resign and look for a new, better job. He has already started applying.
As for the house, he said it is flood insured, but that it only covers up to $100,000 worth of damage.
"The $100,000 isn't going to cover it," he said. "Not by a long shot."
Richard guesses the total losses are probably closer to $230,000, and their house will likely be torn down.
"The house is not really structurally sound," he said.
Their house is just one of many in the community with water damage, particularly on Crusoe Island Road, where Richard estimates that only a handful of houses escaped flooding from the nearby Waccamaw River. For the Colemans, it is the second time their property has flooded in the last 23 months. They don't plan to rebuild. Instead, they hope that they can sell the land back to the county.
It's like you get ahead three or four steps, then you go back 20.
"I'm gonna find a higher hill to live on," Richard said. "I've heard of other families that say they're leaving too. They can't go through this again."
The struggle to return to normal life
Figuring out the next step is a challenge. Currently, the Colemans are staying at Elizabeth's grandmother's house in Supply, N.C. Both Richard's 2014 silver Toyota Corolla and Elizabeth's 2013 Dodge Journey were totaled by flood waters, leaving Richard without a means to go to work and Elizabeth without a way to bring her children to medical appointments.
"We still got a lot to do, and now we need to figure out the house, the cars, and her surgery," Elizabeth said. "It's like you get ahead three or four steps, then you go back 20."
The days run together for Elizabeth. Feeling overwhelmed, she sometimes struggles to remember what day of the week it is. But, a naturally bubbly, positive person, Elizabeth reminds herself that they've beaten worse odds. When Alannah was born, doctors told her mother that she only had a 1 percent chance of surviving.
"We're going to get through this, we've already been through so much," she said. "It's like being back in the NICU, you just got to take it one day at a time."
The worst part is the wondering.
Wondering where they'll go next. Wondering how they'll be able to afford it. Wondering how long it will be before life goes back to normal. All they can do is wait, and keep fighting.
"It feels like getting hit in the face repeatedly. It's like a boxing match. You get knocked in the face. You go down," Richard said. "You have to get back up."
Though she soldiers on, Elizabeth doesn't feel like she's being strong. Sometimes, she cries all day.
"Some days, I cry," she said. "Some days, I'm a zombie."
Her family and religion are her driving forces to keep going.
"If it wasn't for my faith, and my kids, I would give up," she said.
Small miracles
Still, she is grateful. There have been small miracles in the devastation. Every person, and pet, in her family got out safe. A box of her daughter's formula that her husband carefully tucked in the corner of a high closet shelf before evacuation was left untouched. Red Cross and the Salvation Army have been offering them clothes and food. A friend set up a GoFundMe fundraiser for the family.
"You're just so thankful to know that there are people who do care, and want to help," she said, choking out the words. Barely audible between her sobs, she whispered, "It's just a lot."
As a self-described homebody, there's nothing that Richard wants to do more than to go home. He is homesick.
"I miss being home on the couch right now, playing with my kids," he said.
In a living room that isn't theirs, the children still play. Breath still shuddering from crying, Elizabeth let out an unexpected laugh. She said she was watching her son play with one of the dogs, each chasing the other around. Her son shrieked with laughter. She called out to him, "Y'all having fun there?"
Another shriek. More giggles.
Their lives are in pieces, but the Coleman family still preserves bits of home.
Amanda Morris is an intern on NPR's National Desk.
Amanda Morris
See stories by Amanda Morris
Secretario del Condado de Travis dice que la mitad de las solicitudes de voto por correo han sido rechazadas debido a la nueva ley electoral
TPR Brand Toolkit


Book 4 - Junker's Moon Scrap, Salvage and Servicing Company has the dubious honour of being visited by a cult ship, The Garden. The vessel is registered as having charitable status and is therefore beyond FBIS jurisdiction. Its owner, Pastor Gripthorne, holds captive more than one hundred female followers, and is set on a direct course to cause trouble with a capital 'T'.
I am a life-long fan of science fiction, and so when I had an idea for my first story, I wasn't surprised that it was in that genre. The first book took me ten years to complete, but I've got a little quicker since. I am pleased to say that I now have over thirty books published in my name.
What next? So far I haven't run short of ideas for new stories, so there are several projects in various stages of completion, and I hope to be publishing the next story before too long, so please subscribe to my alerts.
My profile picture is a portrait of the author as a young man, painted by my daughter Charlotte Salisbury who has also contributed to several of my book covers.
In the 1970s I studied Chemistry at university and then spent over thirty years in classrooms across England teaching almost anything but Chemistry, including Photography, Communications Skills, General Science, Computing, and Information and Communications Technology.
In the 1990s I spent ten years writing abstracts of chemical patents. This was a most exacting process but very rewarding to be reading about the very latest inventions in the field, and the abstracts were distributed world-wide to research scientists by subscription. Articles of mine have been published in magazines and I have written assignments used for assessing Communications Skills for a major international Examination Board.
After retiring early this century I began writing in earnest.


Bell-ringing practice takes place every Monday evening from 7.30pm until 9.00pm.
There are occasional exceptions to this general rule, but they are rare.
Unless special mitigations are in place, some sound will inevitably be heard from within the Church.


Global Learning XPRIZE at UNESCO, during Mobile Learning Week 2016 - miApps!
Jason: Hi everyone, Jason Bavington here with Midnight Illusions and we are at UNESCO in Paris, France for Mobile Learning Week. If you want to learn more about UNESCO Mobile Learning Week, check out "the link below" for our previous blog post about that. Today, I really wanted to talk to you about Global Learning XPRIZE. We're here with Matt Keller, who is the Director of Global Learning XPRIZE and wanted to share a little more about what the program is and where it's going, where the hopes are, and how we're going to affect tons of kids. So, Matt, do you want to tell us a little bit more?
Matt: I will, thanks. Global Learning XPRIZE is a $15 [USD] million prize that is designed to incentivize people to think differently about how children learn. In reading, writing, and numeracy, the expectation is that children can teach themselves and each other those competencies within 18 months. So, the team that develops tablet software that can get children who are non-literate on their own in reading, writing, and math to literacy in 18 months wins the $15 million Global Learning XPRIZE.
There are 140 teams from 45 countries around the world, and the result is that it's a $15 million prize and the beauty of competition is that teams collectively will spend a lot more than $15 million trying to win the $15 million. So, you're going to have all of this energy, all of these resources put into solving one of the world's greatest challenges. So the return on investment is gigantic. It is the inverse of the foundation model.
So, the competition is fun, the teams are great. It's an eclectic mix of teams from around the world. You've got coders from Silicon Valley; you've got kids from Nairobi; you've got some of the world's great neuroscientists; you've got artists in Amsterdam. It's a pretty cool thing. So, that's it.
Jason: That's fascinating. And it's amazing how you've been able to crowdsource a problem like that and just put it out to the community and the community's going to respond with something fantastic that's going to be used in ways that we can't even imagine how it's going to be deployed and how many scientists are going to be discovered, and engineers, and philosophers, and just kids out there who don't have the ability right now to convey or explore what's inside them.
Jason: We're going to give them a tool and then they're going to do brilliant things with it in 5 or 10 years that we'll just be in awe of.
Matt: Who's the undiscovered Einstein? Who are the kids who are going to grow up and change your world or change our world? I think doing that, at that age, is the most important thing in the world. And I think this is going to help.
Jason: For sure. Just the fact that we can leapfrog brick and mortar school systems and just get past that infrastructure that isn't there and is so difficult to bring. And bring them a digital solution that they can have in their pocket.
Matt: And it's a failed infrastructure too. You know, mobile phones are everywhere, but landlines for Southern Africans are nowhere. So that technology leapfrogged, right? And now, obviously, everybody uses mobile phones. I think learning is going to – the same process will happen. That dynamic, interactive, AI-based learning is going to leapfrog the failed infrastructure of so many places around the world in terms of schools, in our own country as well. I think that kids that have access to something that mentors them in a way that is personal and real is going to happen. It's The Diamond Age, which is a great book by Neal Stephenson. It's what I hope for to come out of this process.
Jason: It'll be there 24 hours a day. If the kid wants to learn math at 3 am, they can. If they want to draw at 6 am, they can.
Matt: And hopefully, it'll speak to you. You'll wake up in the morning and it'll say, good morning Jason, let's talk about ravens today. That raven on the windowsill, where does that raven come from? And I think that is the future of learning.
Jason: For sure. So, it'll be great to see where Global Learning XPRIZE goes. Full disclosure, Midnight Illusions is a competing team in Global Learning XPRIZE so we're going to put our best foot forward and see what sort of brilliance we can come up with. We have the elves working in the back, 24 hours a day, of course. And we'll see where it goes. But regardless, come the conclusion of the prize, something brilliant is going to be released to the world, and we'll see what happens after that. So, thanks a lot, Matt.
Jason: Great. Talk with you soon and we'll keep you posted on XPRIZE. We'll put some links below, and you can follow us through the course of the competition. Take care.
Again, it's Jason Bavington from Midnight Illusions at the UNESCO Mobile Learning Conference in Paris, France.


text:
$20 million buys a sightseeing trip in orbit...
Tourists Visit the International Space Station
First Tourist Second Tourist Third Tourist
Lori Garver
[click to enlarge] After the collapse of the old Soviet Union, the Russian space agency was strapped for hard cash to pay its bills. To raise funds, it decided to send individual persons with only limited training to space in return for millions of dollars. The hotel in space where tourists would stay for a few days would be the International Space Station (ISS) 250 miles above Earth.
As the main contributor to the 16-nation consortium building the ISS, the United States objected at first to tourist flights to the multi-billion dollar outpost. The U.S. argued that persons flying without much training and lacking multilingual language skills would endanger the flight and the space station. Russia, which controls the Soyuz transport capsule flights, countered that tourists would train for months with real cosmonauts and would be prepared for spaceflight.
Eventually, the United States gave up its argument and tourist flights began in 2001. NASA does require the tourists to sign a legal document pledging that they and their heirs will not sue the space agency if anything goes wrong. The tourists also must agree to pay for anything they break.
After shuttle Columbia was destroyed while returning from orbit on February 1, 2003, the Russian government postponed plans to send more tourists into space while NASA investigated the disaster.
Russian Soyuz transports and Progress freighters have ferried crews and cargo to the space station since the Columbia disaster.
In 2003, Russian officials said they would send two space tourists to the International Space Station in 2004-2005. The Russian space agency Rosaviakosmos hired Space Adventures Ltd. of Arlington, Virginia, to locate persons willing and able to pay $20 million each for ten-day flights.
In 2004, the Russians announced that New Jersey businessman Gregory Olsen would become the third space tourist in April 2005. However, Russian physicians later postponed Olsen's trip to the ISS due to health concerns. Olsen eventually was approved in July 2005 and launched aboard a Soyuz transport craft in October 2005 to become the third private person to pay for a ride to the International Space Station.
The Russians have said they are holding seats for Space Adventures customers on four Soyuz flights to the ISS through 2007. Meanwhile, in July 2005 the U.S. space shuttle fleet resumed flights when Discovery flew to the station. However, further shuttle flights have been delayed by problems that cropped up during the 2005 flight.
Soyuz Rocket
Soyuz launch [AP]


text:
Goodwill hunting
Laurie Oakes, in The Sunday TimesNews Corp Australia
WA NewsNewsOpinion
AUSTRALIA has not been on Barack Obama's radar in the first days of his administration.
The new US President, who carries the hopes of the world on his shoulders, has more important matters to deal with.
Trying to get a Middle-East peace process off the ground, for starters. And putting together a massive recovery and reinvestment plan to try to revive the American – and the global – economy. In the context of the huge problems Obama inherited from George Bush, Australia is largely irrelevant. Getting together with Kevin Rudd is well down his list of priorities. That is the truth.
And yet there is some intriguing speculation coming out of Washington that a presidential visit to Australia reasonably early in Obama's term may be a possibility, anyway.
At the moment, the likelihood is that the Australian Prime Minister's first chance to meet Obama will be at the summit of leaders of the G20 nations in London in early April.
That meeting will discuss ways to co-ordinate international action to stimulate growth and employment and get the world economy back on track. It will also consider reform proposals to reduce the chances of a similar financial meltdown in the future. Australian officials assume that, as well as being in the same meeting room with the President and the other leaders, Rudd will get some private time with Obama on the conference sidelines.
The Rudd Government is putting a lot of faith in the ability of the new leader to use the goodwill he now enjoys across the world to make things happen.
Treasurer Wayne Swan, for example, commenting in New York on Obama's inauguration address, said: "You hear his words, but it is the strength that you feel. He has the capacity to get people moving."
The only other top-level contact scheduled so far between the Australian Government and the new administration in Washington is AUSMIN, the annual meeting dealing with security issues and the Australian-US alliance.
That will give Australian ministers a chance for in-depth talks with new US Secretary of State Hillary Clinton, probably in June or July. She is likely to be preoccupied with the world's troublespots until then.
But chatter that the new US Commander-in-Chief himself might visit Australia in the next few months is not being dismissed outright in Canberra.
Some officials, as well as members of the diplomatic community, think there is just a chance that it could happen.
As Obama made clear in the inauguration speech, one of his key aims is to improve America's image in the Muslim world. His plan is to set the ball rolling with a major speech in an Islamic capital during his first 100 days in office.
The question is, which Islamic capital will be chosen?
The Egyptian capital, Cairo, is an obvious possibility.
But Egypt no longer enjoys the standing among Muslims that it once did.
Riyadh has been suggested because Saudi Arabia is home to the holy cities of Mecca and Medina. But, as the main newspaper in Obama's home town of Chicago reported recently, "Saudi Arabia is ruled by an autocratic monarch and has a fundamentalist approach to Islam that might make it a problematic choice for many Americans".
Ankara will no doubt be considered, but Turkey is a NATO member and wants to join the European Union. Its closeness to the West might make it less than ideal for Obama's purposes.
And then there is Jakarta.
Not only is Jakarta the capital of the most populous Muslim nation, it was also where Barack Obama spent part of his childhood, between the ages of six and 10, so he has a sentimental interest in the place.
Some analysts argue that Jakarta is unsuitable because it is far from the religious centre of Islam. Others think that works in its favour.
But if Obama does choose Jakarta as the location for a speech to try to change Muslim perceptions of the US, it would bring him to our neighbourhood.
Then the argument that he might as well visit Australia on the way to or from Indonesia would be almost irresistible – and the excitement that would generate is not hard to imagine.
Turnbull takes Obama tack
A CONSEQUENCE of Barack Obama's success is that Australian politicians want to emulate the 44th US President.
They have twigged that his message of hope and optimism is the kind of thing people want to hear, especially when times are tough, and suddenly they're all at it.
True, in typically cautious style, Rudd qualified the message at an Australia Day lunch in Melbourne on Thursday, promising only "realistic hope, realistic optimism".
But Opposition Leader Malcolm Turnbull is going the whole hog.
A speech he will deliver to a Young Liberals' convention today is all about hope in a crucial area – climate change.
Not only does the speech cleverly attempt to neutralise Coalition divisions over an emissions-trading system with an argument that can be supported by climate-change alarmists, sceptics and deniers alike; in presenting a positive, "feel-good" way forward, it is deliberately designed to reflect the Obama "Yes we can!" approach.
Turnbull will tell the Young Libs: "Australia should lead the world in clean coal. We should lead the world in geothermal power.
"Australia should show the world how we can capture millions of tonnes of CO2 through imaginative biocarbon policies and at the same time improve the health and productivity of our own landscape."
The Liberal leader will sell his new climate-change strategy as "founded on optimism and confidence, ingenuity and enterprise".
Laurie Oakes is political editor of the Nine Network. His column appears every Sunday in The Sunday Times.