Copyright © 2008 W3C® (MIT, ERCIM, Keio), All Rights Reserved. W3C liability, trademark and document use rules apply.
This document describes a multimodal system which implements the W3C Multimodal Architecture and gives an example of a simple multimodal application authored using various W3C markup languages, including SCXML, CCXML, VoiceXML 2.1 and HTML.
This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at http://www.w3.org/TR/.
This is the 2 July 2008 W3C Working Group Note of "Authoring Applications for the Multimodal Architecture". The Multimodal Interaction Working Group published an updated Working Draft of the "Multimodal Architecture and Interfaces" (MMI Architecture) [MMI-ARCH] on 14 April 2008. However, the Working Draft currently does not take a position on several aspects of multimodal applications. These include the startup phase, how components find each other, and message transport, all of which must be addressed in actual applications. In order to provide a concrete illustration of a multimodal application based on the Multimodal Architecture using current W3C technologies, the Working Group has prepared this Note. The goal of this Note is to make it easier to author concrete multimodal Web applications. This document represents the views of the group at the time of publication. The group is planning to enhance the MMI Architecture specification based on this Working Group Note if the feedback is positive.
This document is one of a series produced by the Multimodal Interaction Working Group of the W3C Multimodal Interaction Activity.
For more information about the Multimodal Interaction Activity, please see the Multimodal Interaction Activity statement.
Comments for this specification are welcomed and should have a subject starting with the prefix '[AUTH]'. Please send them to<EMAIL_ADDRESS>the public email list for issues related to Multimodal. This list is archived and acceptance of this archiving policy is requested automatically upon first post. To subscribe to this list send an email to<EMAIL_ADDRESS>with the word subscribe in the subject line.
Publication as a Working Group Note does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.
This document was produced by a group operating under the 5 February 2004 W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.
1 Introduction
2 Overview
3 Implementation of the
components
3.1 The Runtime
Framework
3.2 GUI Modality
Component
3.3 Voice Modality
Component
4 Initiating multimodal sessions
5 Authoring example
5.1 T-Shirt.scxml
5.2 captureColorSize.html
5.3 dispatcher.ccxml
5.4 captureColor.vxml
The W3C Multimodal Interaction (MMI) Working Group develops an architecture [MMI-ARCH] for the Multimodal Interaction framework [MMIF]. The Multimodal Architecture describes a general and flexible framework for interoperability of the various components of the multimodal framework (e.g. modality components and the interaction manager) in an abstract way. Among others it defines interfaces and messages between the constituents of the framework, but it is up to the implementation to decide how these messages are transferred in case of a distributed implementation.
The intention of this document is to provide a proposal of how to implement a multimodal runtime environment as well as an application based on the W3C Multimodal Architecture using existing W3C technologies. This proposal uses CCXML and VoiceXML to implement a voice modality component. Note that this is just one possibility for implementing it.
Note: The W3C Voice Browser Working Group is currently developing VoiceXML 3.0 which is the next major release of VoiceXML and will enable voice browsers to fit into the W3C Multimodal Architecture as a modality component. As VoiceXML 3.0 implementations are not yet available, this document relies on the existing VoiceXML 2.1 specification [VoiceXML].
The Multimodal Interaction Working Group itself wants to learn from this authoring example where improvements are possible and necessary. We also intend to present how we think that multimodal applications will be authored in the future.
The W3C Multimodal Architecture consists of the following main constituents (see also: MMI Runtime Architecture Diagram):
In this document we discuss a distributed implementation of the multimodal framework using the following components and technologies:
The following figure shows all these components mapped to the MMI Runtime Architecture Diagram:
The dashed boxes correspond to (logical) components within the MMI architecture whereas solid lines correspond to actual software or hardware components used to implement the system.
The voice input/output device shown in the figure above may be a regular (mobile) phone or a Voice-over-IP (soft) phone. In any case a phone connection to a standard voice browser is used.
This section discusses one possible implementation of the Multimodal Architecture.
The Runtime Framework provides the environment which hosts the SCXML interpreter. It has to provide an interface to receive events from external components (modality components) and must be able to inject these events into an existing SCXML session or to start SCXML interpreter sessions. The Runtime Framework also needs to provide the possibility to send events to external components (i.e. some implementation of the SCXML <send> tag). In the future this feature might be a covered by the "external communications module" of the SCXML specification ([SCXML]).
An implementation of an SCXML interpreter written in Java is available open source from the Apache Software Foundation [Apache Commons SCXML]. One possibility for implementing a simple runtime framework could be to combine the Apache commons SCXML library [Apache Commons SCXML] with a J2EE servlet engine (e.g. [Apache Tomcat]). The servlet engine would be used to implement the HTTP I/O processor.
Even though HTTP might not be the most efficient solution as a transport protocol, it still has some advantages. It is a widely used protocol and available in nearly every programming language. In a distributed scenario, where the Interaction Manger (i.e. Runtime Framework) and the modality components are spread across the network, proxy and firewall problems are easy to solve. Also, our intended modality components (HTML browsers for graphical modality and VoiceXML browsers for voice modality) inherently support HTTP. Therefore we use HTTP for this proof-of-concept implementation proposal. Other, more scalable solutions might make use of other protocols.
The Runtime Framework provides the I/O processor which receives HTTP requests from modality components (containing XML based life-cycle event representation). Based on the event semantics the Runtime Framework logic has either to start a new SCXML interpreter instance (when receiving a mmi:newContextRequest message) or to inject an event into a running SCXML interpreter instance.
In this scenario in terms of transport the Runtime Framework acts as an HTTP server which receives HTTP requests and modality components are HTTP clients sending HTTP requests to the Runtime Framework. Therefore sending events from modality components to the Interaction Manager is relatively easy to implement using existing technologies.
The multimodal runtime architecture also requires to send events from the Interaction Manger to the modality components asynchronously. To be able to leverage standard components like HTML and VoiceXML browsers as modality components (or modality component containers) events should still be transferred using HTTP (as HTML and VoiceXML browsers supporting the HTTP protocol natively). But the browsers act as HTTP clients only. Therefore the Interaction Manager has still the role of the HTTP server. According to the HTTP model the client has to initiate requests. To enable the Interaction Manager to send events to the modality component, the modality component therefore has to send HTTP requests to the Interaction Manager to ask for events. This technique is usually known as polling. Simple implementations have obvious drawbacks (e.g. increased network traffic, additional delay) but it is possible to optimize it to some extend (e.g. by blocking the HTTP request server side and using timeouts). This technique certainly has limitations for large scale implementations, but it is relatively easy to implement based on existing technologies and therefore a good choice for a proof-of-concept.
Another promising approach could be [COMET] which uses long living HTTP connections to stream data to the client. Again the client has to open the HTTP connection. The server will stream an HTTP response to the client and leaves the HTTP connection open until the next event has to be sent to the client. Meanwhile there are a lot of applications out there using this server-push technology. Unfortunately this technology is not well standardized yet and therefore requires browser dependent implementations. But it is a potential solution for the required server-push channel.
The GUI modality component may be implemented using HTML and JavaScript.
According to the rules defined for the Multimodal Architecture, the application logic resides within the Interaction Manager. Therefore the modality component has to send events (e.g. user initiated events like click or change) to the Interaction Manager. The Interaction Manager decides on possible reactions to this events and sends events to the modality component to instruct it to execute some action (e.g. displaying something).
The modality component API may be implemented using [XMLHttpRequest] (also know as AJAX). Event handlers for user initiated events like change for text input elements and click events for button elements may easily convert these into XML representations (MMI life-cycle event representation, e.g. containing values of input fields) and sent them to the Interaction Manager using XMLHttpRequests.
The following code snippet demonstrates the principle of how to send events to a server side Interaction Manager (assuming a servlet at someURL) using ECMAScript and XMLHttpRequests:
/* The sendMmiLifecycleEvent() function sends the MMI lifecycle event, potentially containing data values like color. The implementation of this function is vendor specific. The function is called to send a life cycle event to the Runtime Framework using AJAX. The parameter "payload" contains a life cycle event object. */ function sendMmiLifecycleEvent(source, context, payload) { var xmlHttpRequest = new XMLHttpRequest(); // relative url, assuming that AJAX requests go to a url // relative to the documents url var url ="./someURL"; var XMLpayload = payload.toXML(source, context); xmlHttpRequest.open("POST", url, true); xmlHttpRequest.onreadystatechange = readystatehandler; xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlHttpRequest.send(XMLpayload); function readystatehandler() { if (xmlHttpRequest.status == 200 || xmlHttpRequest.status==304) { // be quiet in case of success // alert("success"); } else { // alert error alert("send failure"); } } } // JavaScript Event (pseudo) object function LifeCycleEvent(mmiEvType, eventType, fieldName, fieldValue) { this.mmiEventType = mmiEvType; // e.g. extension this.eventType = eventType; // user initiated event, e.g. change this.fieldName = fieldName; // e.g. HTML id of the field this.fieldValue = fieldValue; // e.g. value of the field } // method of LifeCycleEvent object to generate XML string from its properties LifeCycleEvent.prototype.toXML = function(source, context) { var mmiLifeCycleEvent; mmiLifeCycleEvent = '<mmi version="1.0" xmlns:mmi="http://www.w3.org/2008/04/mmi-arch">'; mmiLifeCycleEvent += ' <mmi:" + this.mmiEventType + "\""; mmiLifeCycleEvent += ' mmi:source="' + source + '" mmi:context="' + context + '">'; mmiLifeCycleEvent += ' <mmi:data>'; mmiLifeCycleEvent += ' <eventType>' + this.eventType + '</eventType>'; mmiLifeCycleEvent += ' <fieldName>' + this.fieldName + '</fieldName>'; mmiLifeCycleEvent += ' <fieldValue>' + this.fieldValue + '</fieldValue>'; mmiLifeCycleEvent += ' </mmi:data>'; mmiLifeCycleEvent += ' </mmi:' + this.mmiEventType + '>'; mmiLifeCycleEvent += '</mmi>"; return mmiLifeCycleEvent; }
As described above, receiving events from the Interaction Manager requires to send an HTTP request to the server (i.e. Runtime Framework). The response contains an XML coded event which represents an MMI life-cycle event. An event, indicating the change of the value of color, would be represented as a MMI life-cycle event "mmi:extension" (see [MMI-ARCH]) and could look like this:
<?xml version="1.0" encoding="UTF-8"?> <mmi version="1.0" xmlns:mmi="http://www.w3.org/2008/04/mmi-arch"> <mmi:startRequest mmi:source="" mmi:target="" mmi:context=""> <mmi:contentURL href="someContentURI" max-age="" fetchtimeout="1s"> <mmi:data> </mmi:data> </mmi:extension> </mmi>
It should be mentioned, that the content of the <mmi:data> element is application specific.
This approach requires to send an asynchronous XMLHttpRequest to the Runtime Framework (expecting the request to be blocked at the server) and to interpret the response accordingly: either taking any local action based on the event semantics and/or re-sending another request to the Runtime Framework.
/* This function handles all incoming MMI lifecycle events. They may be fetched from the server side interaction manager using AJAX. The returned XML document is the MMI lifecycle event. */ function handleIncomingMmiEvents(xml) { // check if incoming message is MMI lifecycle event // perform a very simple check: if(xml.match("<mmi:")) { // parse incoming xml string to DOM parser=new DOMParser(); doc=parser.parseFromString(xml,"text/xml"); var element = doc.documentElement; if(element.childNodes[0].nodeName=="mmi:newContextResponse") { _CONTEXT = element.childNodes[0].getAttribute("mmi:context"); } else if(element.childNodes[0].nodeName=="mmi:extension") { if(element.childNodes[0].childNodes[0].nodeName=="mmi:data") { // Application specific extension // In this example we receive the name of a function and the params. // This has to be evaluated locally using eval(). var functionname = element.childNodes[0].childNodes[0].childNodes[0].childNodes[0].nodeValue; var elementname = element.childNodes[0].childNodes[0].childNodes[1].childNodes[0].nodeValue; var elementvalue = element.childNodes[0].childNodes[0].childNodes[2].childNodes[0].nodeValue; eval(functionname + "(elementname ,elementvalue)"); } } else if(element.childNodes[0].nodeName=="mmi:clearContextRequest") { // create new mmiLifeCycleEvent Object that signals the removal of the Context event = new LifeCycleEvent("clearContextResponse", "", "", ""); // send clearContextResponse lifecycle event sendMmiLifecycleEvent(_SOURCE, _CONTEXT, event); } else { // unknown lifecycle event alert("MMI lifecycle event not handled."); } // send HTTP request to server to receive lifecycle event. readMmiLifecycleEvent(); } else // check if contains "<mmi:" { // --> it is not a valid lifecycle event! alert("Error: wrong message!"); } }
The Voice Modality Component may be implemented using CCXML and VoiceXML 2.1.
VoiceXML 2.1 does not provide an external eventing functionality. As CCXML 1.0 defines an external event interface (Basic HTTP Event I/O Processor), which allows to inject external events into a running CCXML session or to start new CCXML sessions, CCXML will therefore be used as a event bridge between VoiceXML and the Interaction Manager. CCXML will receive events from the Interaction Manager and - depending on the event semantics - start a VoiceXML dialog.
VoiceXML will be used to implement the actual voice user interface (play prompt and control ASR). User input collected by VoiceXML will be returned to CCXML. CCXML has the ability to send HTTP requests to external components. This feature will be used to send events back to the multimodal runtime framework to inject events into the SCXML based Interaction Manager.
Due to the fact that VoiceXML must return to CCXML (and hence exit) to return results (e.g. recognition results) the VoiceXML user interface has to be implemented as small independent scripts. Each script corresponds to a single action, like play a prompt or start grammar and listen to user input.
Now, as we have described the basics of all constituents, we need to define the setup of a multimodal session.
A multimodal session may be initiated using a GUI modality component. The user starts a web browser and loads a HTML document from a given URL. Upon load, the HTML document registers corresponding event handlers (e.g. for change events) and is able to send messages to the Interaction Manager using AJAX (i.e. XMLHttpRequests).
The HTML document may contain a special text input field which is used to collect the users phone number or SIP URL. Once the user has entered this information it is sent (e.g. by pressing a corresponding button) to the Interaction Manager. The Interaction Manager generates a message towards the CCXML event processor to create a new CCXML session and to initiate a phone call to the given telephone number (or SIP URL).
As soon as the telephone connection has been established successfully the multimodal session is initiated. Now the Interaction Manager is capable of controlling the two modalities by sending life-cycle events.
This section ties together the previously described components to implement a sample application. The multimodal T-Shirt example contains a combined graphical and voice user interface and allows to fill in a form containing two fields (color and size) either by voice or by pen/keyboard.
The following figure shows the corresponding state machine logic for this example together with the MMI life-cycle events.
The state machine could be represented in SCXML source code (T-Shirt.scxml) as follows:
<?xml version="1.0" encoding="UTF-8"?> <scxml version="1.0" profile="ecmascript" initial="getColor" > <!-- we assume there is a script library which constructs MMI lifecycle events etc. --> <script src="mmi.js"/> <!-- datamodel definition --> <datamodel> <data id="color" expr=""/> <data id="size" expr=""/> <data id="received" expr="0"/> </datamodel> <!-- state getColor --> <state id="getColor"> <onentry> <script> mmiEvent = new mmiStartRequest(); mmiEvent.setURL('captureColorSize.html'); </script> <!-- issue startRequest to GUI --> <send event="mmi:startRequest" target="GUI" targetType="x-ajax" namelist="mmiEvent"/> <script> mmiEvent = new mmiStartRequest(); mmiEvent.setURL('getColor.vxml'); </script> <!-- issue startRequest to VUI --> <send event="mmi:startRequest" target="VUI" targetType="basichttp" namelist="mmiEvent"/> </onentry> <!-- handle voice input --> <transition event="mmi:done" cond="_event.data..@source.toString() == 'VUI' && _event.data..@status.toString() == 'success'" target="echoColor"/> <!-- save color to data model --> <assign location="_data.color" expr="_event.data..color.toString()"/> <!-- send event to GUI to display information --> <script> mmiEvent = new mmiExtension(); // construct content of data element of extension event as XML string dataFieldValue = "<eventType>_check</eventType>"; dataFieldValue += "<fieldName>color</fieldName>"; dataFieldValue += "<fieldValue>" + color + "</fieldValue>"; mmiEvent.setDataField(dataFieldValue); </script> <send event="mmi:extension" target="GUI" targetType="x-ajax" namelist="mmiEvent"/> </transition> <!-- handle GUI input --> <transition event="mmi:extension" cond="_event.data..@source.toString() == 'GUI' && _event.data..@status.toString() == 'success'" target="echoColor"/> <!-- save color to data model --> <assign location="_data.color" expr="_event.data..color.toString()"/> </transition> <!-- error handling --> <transition event="mmi:startResponse" cond="_event.data..@status.toString() == 'error'" target="failure"/> <transition event="mmi:done" cond="_event.data..@status.toString() == 'error'" target="failure"/> </state> <!-- state echoColor --> <state id="echoColor"> <onentry> <!-- play back color to user --> <script> mmiEvent = new mmiStartRequest(); mmiEvent.setURL('echoColor.vxml'); // construct content of data element of extension event as XML string dataFieldValue = "<color>" + color + "</color>"; mmiEvent.setDataField(dataFieldValue); </script> <send event="mmi:startRequest" target="VUI" targetType="basichttp" namelist="mmiEvent"/> </onentry> <!-- play prompt done --> <transition event="mmi:done" cond="_event.data..@source.toString() == 'VUI' && _event.data..@status.toString() == 'success'" target="getSize"/> <!-- error handling --> <transition event="mmi:startResponse" cond="_event.data..@status.toString() == 'error'" target="failure"/> <transition event="mmi:done" cond="_event.data..@status.toString() == 'error'" target="failure"/> </state> <!-- state getSize --> <state id="getSize"> <onentry> <script> mmiEvent = new mmiStartRequest(); mmiEvent.setURL('getSize.vxml'); </script> <!-- issue startRequest to VUI --> <send event="mmi:startRequest" target="VUI" targetType="basichttp" namelist="mmiEvent"/> </onentry> <!-- handle voice input --> <transition event="mmi:done" cond="_event.data..@source.toString() == 'VUI' && _event.data..@status.toString() == 'success'" target="echoSize"/> <!-- save color to data model --> <assign location="_data.size" expr="_event.data..size.toString()"/> <!-- send event to GUI to display information --> <script> mmiEvent = new mmiExtension(); // construct content of data element of extension event as XML string dataFieldValue = "<eventType>_check</eventType>"; dataFieldValue += "<fieldName>size</fieldName>"; dataFieldValue += "<fieldValue>" + size + "</fieldValue>"; mmiEvent.setDataField(dataFieldValue); </script> <send event="mmi:extension" target="GUI" targetType="x-ajax" namelist="mmiEvent"/> </transition> <!-- handle GUI input --> <transition event="mmi:extension" cond="_event.data..@source.toString() == 'GUI' && _event.data..@status.toString() == 'success'" target="echoSize"/> <!-- save size to data model --> <assign location="_data.size" expr="_event.data..size.toString()"/> </transition> <!-- error handling --> <transition event="mmi:startResponse" cond="_event.data..@status.toString() == 'error'" target="failure"/> <transition event="mmi:done" cond="_event.data..@status.toString() == 'error'" target="failure"/> </state> <!-- state echoSize --> <state id="echoSize"> <onentry> <!-- play back color to user --> <script> mmiEvent = new mmiStartRequest(); mmiEvent.setURL('echoSize.vxml'); // construct content of data element of extension event as XML string dataFieldValue = "<size>" + size + "</size>"; mmiEvent.setDataField(dataFieldValue); </script> <send event="mmi:startRequest" target="VUI" targetType="basichttp" namelist="mmiEvent"/> </onentry> <!-- play prompt done --> <transition event="mmi:done" cond="_event.data..@source.toString() == 'VUI' && _event.data..@status.toString() == 'success'" target="endOfInteraction"/> <!-- error handling --> <transition event="mmi:startResponse" cond="_event.data..@status.toString() == 'error'" target="failure"/> <transition event="mmi:done" cond="_event.data..@status.toString() == 'error'" target="failure"/> </state> <!-- state endOfInteraction--> <state id="endOfInteraction"> <onentry> <!-- number of received clearContextResponse messages, we are waiting for two --> <assign location="received" expr="0"/> <!-- issue clearContextRequest messages --> <script> mmiEvent = new mmiClearContextRequest(); </script> <!-- issue clearContextRequest to GUI --> <send event="mmi:clearContextRequest" target="GUI" targetType="x-ajax" namelist="mmiEvent"/> <script> mmiEvent = new mmiClearContextRequest(); </script> <!-- issue clearContextRequest to VUI --> <send event="mmi:clearContextRequest" target="VUI" targetType="basichttp" namelist="mmiEvent"/> </onentry> <transition event="mmi:clearContextResponse" cond="received = 0"> <!-- increase counter --> <assign location="received" expr="1"/> </transition> <transition event="mmi:clearContextResponse" cond="received > 0" target="end"/> </state> <!-- state failure --> <state id ="failure"> <!-- simply stop interaction --> <transition target="endOfInteraction"/> </state> <!-- final state --> <state id="end" final="true"/> </scxml>
In this example we assume that the Runtime Framework supports the x-ajax and basichttp targettypes for the <send> tag. The GUI modality component uses AJAX to communicate to the Runtime Framework. Therefore we use x-ajax as the targettype, whereas the Voice modality component is implemented using CCXML/VoiceXML. As the external event interface of CCXML is used to inject events into the CCXML session we have to make use of the basichttp targettype.
The following code fragment provides the basics of the HTML source code for the GUI modality component (i.e. captureColorSize.html):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta name="application" content="captureColorSize" /> <meta name="description" content="solicits value for size and color" /> <title>CaptureColorSize</title> <script src="sendEvent.js" language="javascript"/> <script src="evaluateResponseXML.js" language="javascript"/> <!-- Event handlers that create and send external events --> <script language="JavaScript" type="text/javascript"> var _SOURCE="GUI"; var _CONTEXT=""; function onloadHandler() { // create new mmiLifeCycleEvent Object that requests a new Context event = new LifeCycleEvent("newContextRequest", "", "", ""); // send newContextRequest lifecycle event sendMmiLifecycleEvent(_SOURCE, _CONTEXT, event); // send HTTP request to server to receive lifecycle event. readMmiLifecycleEvent(); } /* HTML event handler. The functions makes use of the browser event object which holds the id and the value (in this case the color value) of the HTML object. */ function eventHandler(event) { target = new Object(); if(event.target) { target = event.target; } // Internet Explorer has no attribute target else if(event.srcElement) { target = event.srcElement; } event = new LifeCycleEvent("extension", event.type, target.id, target.value); sendMmiLifecycleEvent(_SOURCE, _CONTEXT, event); } /* initiate AJAX request to the interaction manager to read the next MMI lifecycle event. The returned event is handled asynchronously within handleIncomingMmiEvents(). Finally the next MMI lifecycle event is fetched. */ function readMmiLifecycleEvent() { // Start asynchronous XMLHttpRequest to receive MMI lifecycle event. // We assume that the the IM always returns a lifecycle event, i.e. // we do not handle special timeout events. Once the request returns, // handleIncomingMmiEvents() will be called to evaluate the xml encoded event. var xmlHttpRequest = new XMLHttpRequest(); // relative url, assuming that AJAX requests go to a url // relative to the documents url var url ="./getMMILifeCycleEvent"; xmlHttpRequest.open("GET", url, true); xmlHttpRequest.onreadystatechange = readyhandler; xmlHttpRequest.send(null); function readyhandler() { if (xmlHttpRequest.readyState == 4) { if (xmlHttpRequest.status == 200) { //handle lifecycle event handleIncomingMmiEvents(xmlHttpRequest.responseText); } else { // alert error alert("readMmiLifecycleEvent failure"); } } } } // function to check elements with the given html id, e.g. radio buttons function _check(elementname, elementvalue) { document.getElementById(elementvalue).checked=true; } </script> </head> <body id="bodyId" onload="onloadHandler();"> <form action="" name="Color" id="Color">T-shirt color: <table width="200"> <tr> <td> <label> <input type="radio" id="red" name="radioGroup1" value="Red" onclick="eventHandler(event);" /> Red</label> </td> </tr> <tr> <td> <label> <input type="radio" id="green" name="radioGroup1" value="Green" onclick="eventHandler(event);" /> Green</label> </td> </tr> <tr> <td> <label> <input type="radio" id="blue" name="radioGroup1" value="Blue" onclick="eventHandler(event);" /> Blue</label> </td> </tr> </table> </form> <form action="" name="Size" id="Size">T-shirt size: <table width="200"> <tr> <td><label> <input type="radio" id="small" name="radioGroup2" value="Small" onclick="eventHandler(event);" /> Small</label></td> </tr> <tr> <td><label> <input type="radio" id="medium" name="radioGroup2" value="Medium" onclick="eventHandler(event);" /> Medium</label></td> </tr> <tr> <td><label> <input type="radio" id="large" name="radioGroup2" value="Large" onclick="eventHandler(event);" /> Large</label></td> </tr> </table> </form> </body> </html>
sendEvent.js:
/* The sendMmiLifecycleEvent() function sends the MMI lifecycle event, potentially containing data values like color. The implementation of this function is vendor specific. The function is called to send a life cycle event to the Runtime Framework using AJAX. The parameter "payload" contains a life cycle event object. */ function sendMmiLifecycleEvent(source, context, payload) { var xmlHttpRequest = new XMLHttpRequest(); // relative url, assuming that AJAX requests go to a url // relative to the documents url var url ="./someURL"; var XMLpayload = payload.toXML(source, context); xmlHttpRequest.open("POST", url, true); xmlHttpRequest.onreadystatechange = readystatehandler; xmlHttpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); xmlHttpRequest.send(XMLpayload); function readystatehandler() { if (xmlHttpRequest.status == 200 || xmlHttpRequest.status==304) { // be quiet in case of success // alert("success"); } else { // alert error alert("send failure"); } } } // JavaScript Event (pseudo) object function LifeCycleEvent(mmiEvType, eventType, fieldName, fieldValue) { this.mmiEventType = mmiEvType; // e.g. extension this.eventType = eventType; // user initiated event, e.g. change this.fieldName = fieldName; // e.g. HTML id of the field this.fieldValue = fieldValue; // e.g. value of the field } // method of LifeCycleEvent object to generate XML string from its properties LifeCycleEvent.prototype.toXML = function(source, context) { var mmiLifeCycleEvent; mmiLifeCycleEvent = '<mmi version="1.0" xmlns:mmi="http://www.w3.org/2008/04/mmi-arch">'; mmiLifeCycleEvent += ' <mmi:' + this.mmiEventType + '"'; mmiLifeCycleEvent += ' mmi:source="' + source + '" mmi:context="' + context + '">'; mmiLifeCycleEvent += ' <mmi:data>"; mmiLifeCycleEvent += ' <eventType>' + this.eventType + '</eventType>'; mmiLifeCycleEvent += ' <fieldName>' + this.fieldName + '</fieldName>'; mmiLifeCycleEvent += ' <fieldValue>' + this.fieldValue + '</fieldValue>'; mmiLifeCycleEvent += ' </mmi:data>'; mmiLifeCycleEvent += ' </mmi:' + this.mmiEventType + '>'; mmiLifeCycleEvent += '</mmi>'; return mmiLifeCycleEvent; }
evaluateResponseXML.js:
/* This function handles all incoming MMI lifecycle events. They may be fetched from the server side interaction manager using AJAX. The returned XML document is the MMI lifecycle event. */ function handleIncomingMmiEvents(xml) { // check if incoming message is MMI lifecycle event // perform a very simple check: if(xml.match("<mmi:")) { // parse incoming xml string to DOM parser=new DOMParser(); doc=parser.parseFromString(xml,"text/xml"); var element = doc.documentElement; if(element.childNodes[0].nodeName=="mmi:newContextResponse") { _CONTEXT = element.childNodes[0].getAttribute("mmi:context"); } else if(element.childNodes[0].nodeName=="mmi:extension") { if(element.childNodes[0].childNodes[0].nodeName=="mmi:data") { // Application specific extension // In this example we receive the name of a function and the params. // This has to be evaluated locally using eval(). var functionname = element.childNodes[0].childNodes[0].childNodes[0].childNodes[0].nodeValue; var elementname = element.childNodes[0].childNodes[0].childNodes[1].childNodes[0].nodeValue; var elementvalue = element.childNodes[0].childNodes[0].childNodes[2].childNodes[0].nodeValue; eval(functionname + "(elementname ,elementvalue)"); } } else if(element.childNodes[0].nodeName=="mmi:clearContextRequest") { // create new mmiLifeCycleEvent Object that signals the removal of the Context event = new LifeCycleEvent("clearContextResponse", "", "", ""); // send clearContextResponse lifecycle event sendMmiLifecycleEvent(_SOURCE, _CONTEXT, event); } else { // unknown lifecycle event alert("MMI lifecycle event not handled."); } // send HTTP request to server to receive lifecycle event. readMmiLifecycleEvent(); } else // check if contains "<mmi:" { // --> it is not a valid lifecycle event! alert("Error: wrong message!"); } }
The ECMAScript function _check(elementname, elementvalue) within captureColorSize.html is provided to check a radio button. To achieve this, the Interaction Manager sends a mmi:extension life-cycle event where the (application specific) eventType element within the <mmi:data> element is set to _check. The fieldValue element contains the HTML id of the corresponding object. The _check(...) function therefore simply uses the DOM API to activate the radio button. The following example shows the MMI life-cycle event to activate the green color radio button.
<?xml version="1.0" encoding="UTF-8"?> <mmi version="1.0" xmlns:mmi="http://www.w3.org/2008/04/mmi-arch"> <mmi:extension mmi:source="captureColorSize.html" mmi:context=""> <mmi:data> <eventType>_check</eventType> <fieldName>color</fieldName> <fieldValue>green</fieldValue> </mmi:data> </mmi:extension> </mmi>
This event is created within the SCXML script. See the getColor state of the SCXML sample code (5.1 T-Shirt.scxml).
CCXML is used as a dispatcher of events between SCXML and VoiceXML. The script ccxml_events.js contains a collection of support functions to create MMI life-cycle events or to start VoiceXML dialogs.
Note that this script is written to be application independent.
<?xml version="1.0" encoding="UTF-8" ?> <ccxml version="1.0" xmlns="http://www.w3.org/2002/09/ccxml"> <!-- we assume there is a library of functions to send data to the Interaction Manager --> <script src="ccxml_events.js" /> <!-- CCXML session ID --> <var name="connectionId" expr="''" /> <!-- SCXML session ID --> <var name="interactionId" expr="''" /> <!-- request ID of lifecycle event --> <var name="requestID" expr="'123456'" /> <!-- target type --> <var name="SCXML" expr="'basichttp'" /> <!-- VXML dialog ID for termination --> <var name="vxml_dialogid" expr="0" /> <!-- whether a VXML dialog is running or not --> <var name="vxml_running" expr="false" /> <!-- whether a VXML dialog is in terminating or not --> <var name="vxml_terminating" expr="false" /> <var name="prompt" expr="''" /> <var name="audio" expr="''" /> <var name="grammarUri" expr="''" /> <var name="fields" expr="''" /> <!-- Note: All events which are tagged with "(INTERNAL)" are standard events! --> <eventprocessor> <!-- ===================================================== --> <!-- SCXML events --> <!-- ===================================================== --> <!-- CCXML (INTERNAL): when CCXML is started, it throws this internal event --> <transition event="ccxml.loaded"> <script> _ccxml.setSCXML_URI(session.values.scxml_serverip, session.values.scxml_serverport, session.values.scxml_serverpage); </script> <assign name="connectionId" expr="event$.connectionid" /> <assign name="interactionId" expr="session.values.interactionid" /> <!-- call SIP phone --> <var name="sipip" expr="session.values.sip_phoneprefix + '@' + session.values.sip_phoneip + ':' + session.values.sip_phoneport" /> <createcall dest="sipip" connectionid="connectionId" /> </transition> <!-- CCXML: terminate --> <transition event="ccxml.terminate"> <send target="_ccxml.clearContextResponse(interactionId, requestID)" targettype="SCXML" name="'ccxml.external'" /> <send target="session.id" targettype="'ccxml'" name="'this.exit'" /> </transition> <transition event="this.exit"> <log expr="'CCXML.exit'" /> <exit /> </transition> <!-- SIP: disconnect SIP phone --> <transition event="sip.disconnect"> <disconnect connectionid="connectionId" /> </transition> <!-- VXML: start --> <transition event="vxml.start"> <assign name="prompt" expr="event$.prompt" /> <assign name="audio" expr="event$.audio" /> <assign name="grammarUri" expr="event$.grammarUri" /> <assign name="fields" expr="event$.fields" /> <!-- If a VXML dialog is running, terminate. otherwise start --> <if cond="vxml_running == false"> <assign name="vxml_running" expr="true" /> <var name="sessionid" expr="event$.sessionid" /> <dialogstart src="_vxml.start(grammarUri, prompt, audio, fields)" dialogid="vxml_dialogid" connectionid="connectionId" namelist="sessionid" /> <else /> <assign name="vxml_terminating" expr="true" /> <dialogterminate dialogid="vxml_dialogid" immediate="true" /> </if> </transition> <!-- VXML: terminate --> <transition event="vxml.terminate"> <var name="immediate" expr="event$.immediate" /> <dialogterminate dialogid="vxml_dialogid" immediate="immediate" /> </transition> <!-- ===================================================== --> <!-- SIP events --> <!-- ===================================================== --> <!-- SIP (INTERNAL): connection to phone completed --> <transition event="connection.connected"> <send target="_ccxml.createResponse(interactionId, requestID, session.id)" targettype="SCXML" name="'ccxml.external'" /> </transition> <!-- SIP (INTERNAL): disconnected --> <transition event="connection.disconnected"> <send target="_ccxml.clearContextRequest(interactionId)" targettype="SCXML" name="'ccxml.external'" /> <send target="session.id" targettype="'ccxml'" name="'this.exit'" /> </transition> <!-- SIP (INTERNAL): reject call from SIP phone --> <transition event="connection.alerting"> <reject /> </transition> <!-- ===================================================== --> <!-- VXML events --> <!-- ===================================================== --> <!-- VXML (INTERNAL): when VXML is started, it throws this internal event --> <transition event="dialog.started"> <send target="_vxml.startResponse(interactionId, requestID, vxml_dialogid)" targettype="SCXML" name="'ccxml.external'" /> </transition> <!-- VXML (INTERNAL): an exit in VXML throws this internal event if it was not just a prompt, get EMMA from VXML and send response to SCXML --> <transition event="dialog.exit"> <assign name="vxml_running" expr="false" /> <!-- if a VXML dialog was terminated as a cause of dialogstart until a dialog was running, start new dialog now (for that case we have the global _vxml.start()-parameters) --> <if cond="vxml_terminating == false"> <send target="_vxml.doneNotification(interactionId, event$.values.emma, vxml_dialogid)" targettype="SCXML" name="'ccxml.external'" /> <else /> <send target="_vxml.doneNotification(interactionId, '', vxml_dialogid)" targettype="SCXML" name="'ccxml.external'" /> <assign name="vxml_running" expr="true" /> <var name="sessionid" expr="event$.sessionid" /> <dialogstart src="_vxml.start(grammarUri, prompt, audio, fields)" dialogid="vxml_dialogid" connectionid="connectionId" namelist="sessionid" /> <assign name="vxml_terminating" expr="false" /> </if> </transition> <!-- ===================================================== --> <!-- error events --> <!-- ===================================================== --> <!-- all errors (INTERNAL) --> <transition event="error.*"> <log expr="'CCXML error'" /> <!-- <send target="_vxml.sendEvent(interactionId, _vxml.ERROR)" targettype="SCXML" name="'ccxml.external'" /> --> </transition> </eventprocessor> </ccxml>
As mentioned in 3.3 Voice Modality Component VoiceXML must return to CCXML (and hence exit the VoiceXML dialog) to return results (e.g. recognition results). Therefore the VoiceXML user interfaces has to be implemented as small independent scripts. Each script corresponds to a single action, like play a prompt or start grammar and listen to user input.
The following code sample shows how the captureColor.vxml document could look like. The script vxml_emma.js, which is referenced in the VoiceXML document, contains a collection of auxiliary ECMAScript functions to create an [EMMA] representation of the user input. See Appendix C of [EMMA] for more information of how to map a recognition result into an EMMA representation.
Note that the other VoiceXML documents are very similar and therefore not shown here.
<?xml version="1.0" encoding="UTF-8"?> <vxml xmlns:vxml="http://www.w3.org/2001/vxml" version="2.1"> <!-- We assume that there is a script library to convert the recognition result into an EMMA string (see http://www.w3.org/TR/emma) --> <script src="vxml_emma.js" /> <form> <field name="color"> <prompt>Which color?</prompt> <option>red</option> <option>blue</option> <option>green</option> <filled> <!-- generate EMMA string from recognition result --> <var name="emma" expr="createEmma(application.lastresult$)"/> <!-- exit back to CCXML and return the recognized result --> <exit namelist="emma"/> </filled> </field> <catch event="help nomatch noinput"> Your options are <enumerate/> </catch> </form> </vxml>
The editor wishes to thank Jim Larson (Intervoice) from the Voice Browser Working Group for his contributions to the writing of this document and for many helpful comments.


When you hear music on the Internet it is usually streamed from a compressed audio file. What if your web browser could perform live music instead of streaming it? Using the draft W3C WebAudio API audio can be dynamically synthesised right here in your web browser. This project will replay "tracker style" music via your browser.
Supported browsers:
Chrome (desktop / Android) - Safari 6+ (iOS / OSX)
Awaiting support:
Internet Explorer - Firefox (forthcoming)
Click to play:
© 2013 Douglas Gore.


Whenever we see or read about animals, we usually see them as a complement to a beautiful story that nature has given us. We almost forget that animals have their own identity and they have their own social & emotional trait.
Keeping this thing in mind, Rajnik Patel, a skilled artist has been showing adorable situations animals are in and we are loving it.


{{date | amTimeAgo}}
{{rallies}} Rallied
{{objTitle}}
{{d.description}}
{{repAddress}}
US Representative for {{rep.state_name}}
US Senator for {{rep.state_name}}
US Senator for {{rep.state}}


Thanks for signing up to Quiz!
To get started, click the link below to confirm your account.
Click there to confirm


| Path: | README |
| Last Update: | Thu Jun 14 19:11:00 -0700 2007 |
Globalite is meant to be a breed of the best internationalization/localization plugins available for Rails.
Globalite should provide you with a 3-in-1 solution:
On top of that: yml files are used for most of the localization, which makes Globalite a light and fast solution. The Locale is set on the user‘s session making Globalite a perfect solution for multilingual support. The developer can pass dynamic values to be used in the localization.
Gibberish is a nice plugin but it doesn‘t handle locales, you can‘t have your application in British English and American English. I also don‘t really like the syntax :p I based the UI localization of Globalite on Chris’ work on Gibberish.
Globalize is a great plugin but man, it‘s bloated… I would like to have something a bit lighter and easier to use. (less options, less setup time, less database usage). I decided to trim down Globalize to offer less options and fulfill the needs of most developers.
Also, Globalite doesn‘t have the concept of a base language. Mainly because I think that‘s a bad idea. If you use English as your base language and you need to fix a string in English(you did a typo), you will break all the other translations. That‘s why Globalite uses localization keys only.
script/plugin install http://globalite.googlecode.com/svn/trunk/
rename the vendor/plugins/trunk => vendor/plugins/globalite or from your vendor/plugins folder:
svn checkout http://globalite.googlecode.com/svn/trunk/ globalite
Create a lang folder at the root of your project. Add your localization files in the lang/ui folder if you want to localize your interface.
Declare the current locale or language >
Globalite.current_language :fr
Localize a key >
:localization_key.l
or
:localization_key.localize
Easy, isn‘t?
Advanced users can also do more:
You can also pass an optional localization string only used if the localization is missing
:missing_localization_key.l("text used if the key is not localized yet")
You can also pass values to the localization, and the translator can do whatever he wants with them:
:welcome_user.l_with_args({:user => @user.name}) would render "Welcome Matt!"
Note that variables can be used in any order the translator wants
Localize a time object by using a predefined format (defined in the date_helper_time_formats variable that you can find in globalite/lang/rails/[lang].yml)
Globalite.current_language = :fr Time.now.l(:long)
Localize a date object by using a predefined format (defined in the date_helper_date_formats variable that you can find in globalite/lang/rails/[lang].yml)
Date.today.l
In your views, create a select box with a list of all countries(listed in the locale language):
country_options_for_select
In your views, create a select box with a list of all the months(listed in the locale language) with the current month selected:
select_month(Time.now)
In your views, create a set of html select-tags (one for year, month, day, hour, and minute):
select_datetime
In your views, create a set of html select-tags (one for year, month, and day):
select_date
Get a number returned in currency, for instance if the locale was set to ‘fr’ the returned value would be 123,00 € but if the locale was set to ‘en-US’ it would return $123.00
number_to_currency(123)
Get a distance of time in words localized.
distance_of_time_in_words(Time.mktime(2005, 6, 4, 15), Time.now)
Active record errors are automatically rendered in the locale language
Globalize was already taken ;) Most seriously, I was looking for a i18n/l10n solution for a project I was working on, after few hours testing Globalize, Josh joshknowles.com, Matt heidmotron.com/ and I railsontherun.com saw it wouldn‘t work for us. Since we only had the choice between very simple solutions and a complicated solution, I decided to make a "lite" version of Globalize ;)
Internationalization refers to the process of modifying an application’s design so that it can support locale differences like text orientation, currency, date and time format, sorting, and so forth. This can be done by externalizing text strings into files or a database, and by developing currency and date formatting utilities.
Localization means adapting an application to a specific language or locale; for example, by translating text into multiple languages. A locale is identified by the user’s language and country, and specifies how, for example, numbers, currencies, and dates are displayed on the screen. The code for the US English locale is en-US. Locales are specified by RFC 3066 and consist of two parts. The first is an ISO 639 language code and uses lowercase letters. The second is usually an ISO 3166 country code in uppercase letters. [from Ruby on Rails Commerce (Hellsten, Laine)]
Some code was very influenced from different projects such as:
Matt Aimonetti railsontherun.com mattaimonetti AT gmail DOT com
your name here if you submit a patch :)


NRPN 81,0 on the Editor input channel reads back the {_timestamp}, link {_parameter parameters}, and flags from the current {_program} in the Main {_instrument} as a {MIDI_Program_Set_Metadata} NRPN 17,0. The Bank MSB and Data MSB values are ignored, but the latter must still be sent to trigger the operation.


Wait a minute. Wait a minute, Doc. Uhhh... Are you telling me that you built a time machine... out of a DeLorean?! Whoa. This is heavy. Share Code : xFSns20.


• Developed customized software solutions that helped customers achieve their testing goals with Browserstack and improving their CI/CD infrastructure, test frameworks and testing coverage. • Developed and maintained several internal use web applications using Django, Node.js, and Agile Technologies. • Provided leadership as a Subject Matter Expert for Browserstack Enterprise, responsible for smooth flow of all the new and old feature updates. • Acted as the pre-sale and post-sale technical product expert to support team-wide sales quota attainment.
Developed a web application for TIAA’s internal employees use that was mainly targeted to automate the complex financial calculations and predict best mutual funds for customers based on their holdings.
Conducting workshops/seminars for the juniors on the latest new technologies. Also conducting programming events and competetions along with organizing techfests in the college.
Worked on Cheque Book Data Recognition and OCR technology using PyTesseract and Amazon Recognition API. Also got hands on experience on working with Google Vision API.
Developed a Employee management system for the company on Visual Studio.


This step allows you to create a random forest model, based on your data. Random forest is an ensemble model, well suited for non-linear data. It's fast to train and often a good starting point.
RandomForestDevelopment(type, df, grainCol, predictedCol, impute, debug, cores, trees, tune, modelName)
| type | The type of model (either 'regression' or 'classification') |
|---|---|
| df | Dataframe whose columns are used for calc. |
| grainCol | Optional. The dataframe's column that has IDs pertaining to the grain. No ID columns are truly needed for this step. |
| predictedCol | Column that you want to predict. If you're doing classification then this should be Y/N. |
| impute | Set all-column imputation to T or F. If T, this uses mean replacement for numeric columns and most frequent for factorized columns. F leads to removal of rows containing NULLs. Values are saved for deployment. |
| debug | Provides the user extended output to the console, in order to monitor the calculations throughout. Use T or F. |
| cores | Number of cores you'd like to use. Defaults to 2. |
| trees | Number of trees in the forest. Defaults to 201. |
| tune | If TRUE, automatically tune model for better performance. Creates grid using mtry param and 5-fold cross validation. Note this takes longer. |
| modelName | Optional string. Can specify the model name. If used, you must load the same one in the deploy step. |
An object of class R6ClassGenerator
of length 24.
The above describes params for initializing a new randomForestDevelopment class with
$new()
. Individual methods are documented below.
Initializes a new random forest development class using the
parameters saved in p
, documented above. This method loads, cleans, and prepares data for
model training.
Usage: $new(p)
Trains model, displays feature importance and performance.
Usage:$new()
Returns the predictions from test data.
Usage: $getPredictions()
Returns the ROC curve object for plotROCs
. Classification models only.
Usage: $getROC()
Returns the PR curve object for plotPRCurve
. Classification models only.
Usage: $getROC()
Returns the area under the ROC curve from testing for classification models.
Usage: $getAUROC()
Returns the RMSE from test data for regression models.
Usage: $getRMSE()
Returns the RMSE from test data for regression models.
Usage: $getMAE()
Returns the variable importance list.
Usage: $getVariableImportanceList(numTopVariables = NULL)
Params:
- numTopVariables:
The maximum number of variables to include. If no
value is specified, all variables are used.
Plots the variable importance list.
Usage: $plotVariableImportance(numTopVariables = NULL)
Params:
- numTopVariables:
The maximum number of variables to include.


Login As Guest:
login as
host
:
Name:
Age:
Gender:
Male
Female
E-mail:
Login
Login As Host:
login as
guest
:
Name:
Login
This time my homework achieved the AJAX Tech, Try it!
Return to Homepage


public final class LangtonsAnt
extends com.badlogic.gdx.ApplicationAdapter
implements com.badlogic.gdx.utils.Disposable
| Modifier and Type | Field and Description |
|---|---|
private java.util.List<Ant> |
ants
Moving ants of the word.
|
static com.badlogic.gdx.graphics.Color[] |
COLOURS
Potential
Ant colours. |
private int[][] |
field
World grid.
|
private com.badlogic.gdx.graphics.FPSLogger |
fpsLogger
Prints simulation frame per seconds (fps) to the console.
|
static int |
HEIGHT
The height of the screen in pixels.
|
private int |
numBlocks |
private com.badlogic.gdx.graphics.glutils.ShapeRenderer |
renderer
Used to render the world.
|
private Vec2i |
size
The size of each cell in the world grid.
|
static java.lang.String |
TAG
Tag for logging;
|
private java.util.List<Ant> |
toBeRemoved
LinkedList of ants that need to be removed from the world as they have reached its limits. |
static int |
WIDTH
The width of the screen in pixels.
|
| Constructor and Description |
|---|
LangtonsAnt() |
| Modifier and Type | Method and Description |
|---|---|
private void |
addAnt()
Add a new ant to the world at a random location with a random colour.
|
void |
create()
Called on start up.
|
void |
dispose()
Called on shutdown.
|
java.util.List<Ant> |
getToBeRemoved() |
private void |
init()
Initialise the world.
|
void |
render()
Tick.
|
public static final java.lang.String TAG
public static final int WIDTH
public static final int HEIGHT
public static final com.badlogic.gdx.graphics.Color[] COLOURS
Ant
colours.private com.badlogic.gdx.graphics.glutils.ShapeRenderer renderer
private int[][] field
private Vec2i size
private int numBlocks
private java.util.List<Ant> ants
private java.util.List<Ant> toBeRemoved
LinkedList
of ants that need to be removed from the world as they have reached its limits.private com.badlogic.gdx.graphics.FPSLogger fpsLogger
public void create()
create
in interface com.badlogic.gdx.ApplicationListener
create
in class com.badlogic.gdx.ApplicationAdapter
private void init()
private void addAnt()
public void render()
render
in interface com.badlogic.gdx.ApplicationListener
render
in class com.badlogic.gdx.ApplicationAdapter
public void dispose()
dispose
in interface com.badlogic.gdx.ApplicationListener
dispose
in interface com.badlogic.gdx.utils.Disposable
dispose
in class com.badlogic.gdx.ApplicationAdapter
public java.util.List<Ant> getToBeRemoved()


Using this platform teachers can create and upload question papers which students can take test online at any time .Scores of the students can be calculated fastly and this reduces lot of work.


Welcome to Mustafa hamdan site
Highly motivated Architect with strong analytical, interpersonal
and organizational skills looking for a
opportunity where I can contribute and
thrive in the areas of programming and design and
community service.
Professional Experience:
- Study Architectural Engineers
- Volunteer AT Jordan River Foundation 2008_2011.
- Training at Jordan Engineers Association 6 Months in Architectural Studio.
- Volunteer AT Jordan Engineers Association: Youth Architects Committee 2018.
- Petra
- Wadi Rum
- Jerash
- Wadi Al-Hedan
- Aqaba
- Dead Sea
- Ajloun
- Downtown
- citadle
- ma`an


WITNESS LIST Urban Affairs Committee April 19, 2005-8:00A HB 2391 For: Hightower, Mark (City of Richardson) Townsend, Bob (City of Richardson City Council) HB 3182 For: Spicer, Brett (Self and Texas Fraternal Order of Police State Lodge) Against: Barber, Dave (Southeast Texas Law Enforcement Administrators) Cunigan, Calvin (Dallas Police Dept., Chief David Kunkle) Jones, James (Houston Police Department) Zacharias, Larry (Chief of Police, TX Police Chiefs Association) HB 3526 For: Bhandora, Fred (Ardenwood Group) Calderon, Bill (Sharpstown PID) Lary, Trey (Hawes, Hill, Calderon LLP) Laster, Michael (Sharpstown Civic Assn Board of Directors) Li, Kenneth (Century 21 Southwest, Asian American Real Estate Association) Schauer, Tim (Memorial Hermann Southwest Hosptial) HB 3528 For: Drake, Jack (Greater Greenspoint Management District)


One of the biggest problems in implementing this kind of library is
that the number and datatype of substates are unknown a priori, and
hence, the library has to be powerful enough to dynamically allocate a
number of substates that are 1D arrays. As known, the problem comes
from the fact that CUDA disallows usage of 2D matrices and thus array
of pointers cannot be allocated on the GPU. The solution consists in
allocating and initializing a CPU (and a corresponding copy in GPU)
d_subPointer
buffer of GPU arrays. After this operation,
d_subPointer
is copied back to GPU memory, resulting in a C-like
dynamic 2D matrix on GPU (see listing [code:CuCCAl2DMatrix]) .
\\GPU matrix
CUDA_CHECK_RETURN(cudaMalloc((void**)&d_CA_TOCOPY->d_substates,sizeof(void*)*substates_size));
\\CPU matrix
d_subPointer = (void**)malloc(sizeof(void*)*substates_size);
for(int i=0;i<substates_size;i++){
d_subPointer[i]=allocateGPUBuffer(d_subPointer[i],(TYPE)substateTypes[i]);
//legal operation d_subPointer is allocated on GPU
copyBufferToGPU(d_subPointer[i],substates[i],(TYPE)substateTypes[i]);
}
//copy CPUmatrix of GPU pointer pointers to GPU matrix
CUDA_CHECK_RETURN(cudaMemcpy(d_CA_TOCOPY->d_substates,d_subPointer,sizeof(void*)*substates_size,cudaMemcpyHostToDevice));


This is a custom angular grid service that I am working on which can handle sorting, paging, and selection.
I am working toward making this less binding-heavy, so it will hopefully moving in the direction of a directive soon.
| ID | Name | Number | |
|---|---|---|---|
| {{ item.id }} | {{ item.name }} | {{ item.number }} |
{{ grid | json }}


Given a set of PVs there are a number of ways of packaging their values for group operations. Basic choices are between
This document lists the various options, providing a name for each, and discusses the use cases and pros and cons of each structure.
Lets assume we have PVs D, {Di} with double values and E, {Ei} with enum_t values, all with timestamps and alarms, whose structures are respectively
structure double value alarm_t alarm time_t timeStamp
and
structure enum_t value alarm_t alarm time_t timeStamp
(In what follows the extension to more than two PVs, to other scalars and to PVs with additional fields, such as control limits, should be obvious.)
The following structures are possible:
The first possibility is to encode the value fields of the PVs only in a structure the names of whose fields are the names of the PVs.
E.g. for a double PV D and an enum PV E the structure would be:
structure double D enum_t E
I've called storing PV values in a structure in this way in general, whether it encodes just the value fields or not, "composite", and in this case I refer to it as "composite (values only)".
Advantages:
Disadvantages:
Another possibility is to encode the all the fields of the PVs in a structure the names of whose fields are the names of the PVs. E.g. for such a composite of a double PV D and an enum PV E the structure would be:
structure structure D double value alarm_t alarm time_t timeStamp structure E enum_t value alarm_t alarm time_t timeStamp
I've called such a structure "composite (full structure)".
Advantages:
Disadvantages:
The PVs can be encoded one level down in a structure subfield (value), allowing the collection of PVs to have their own timestamp, alarm, description etc. without confusion. I've called this arrangement "group". So to collect the values of D and E together in a group the structure would be:
structure structure value double D enum_t E alarm_t alarm :opt time_t timeStamp :opt
Advantages:
Disadvantages:
The group arrangement could also be used with the full structure, as per composite
structure structure value structure D double value alarm_t alarm time_t timeStamp structure E enum_t value alarm_t alarm time_t timeStamp string descriptor :opt alarm_t alarm :opt time_t timeStamp :opt
Advantages:
Disadvantages:
The above 4 structures can be place inside a union, e.g. if the group of PVs is likely to change.
An alternative to arranging things as structures is to use arrays. For example we can use NTMultiChannel
structure anyunion_t[] value string[] channelName string descriptor :opt alarm_t alarm :opt time_t timeStamp :opt int[] severity :opt int[] status :opt string[] message :opt long[] secondsPastEpoch :opt int[] nanoseconds :opt int[] userTag :opt
Here anyunion_t[] can be a regular union array union[] for some appropriate choice of regular union or a variant union array("any[]").
The simplest case would be just to store the values, along with the channel names. So for D and E encoded together in a typical value, assuming using a variant union, might look like this
epics:nt/NTMultiChannel:1.0 any[] value any double 2.71 any enum_t int index 0 string[] choices [Off,On] string[] channelName [D,E]
The type can also encode time stamps, alarms for the group as well as for the individual PVs:
epics:nt/NTMultiChannel:1.0 any[] value any double 2.71 any enum_t int index 0 string[] choices [Off,On] string[] channelName [D,E] string descriptor alarm_t alarm int severity 0 int status 0 string message time_t timeStamp long secondsPastEpoch<PHONE_NUMBER> int nanoseconds 60995462 int userTag 0 int[] severity [1,2] int[] status [3,3] string[] message [HIGH_ALARM,STATE_ALARM] long[] secondsPastEpoch [1437393283,1437393283] int[] nanoseconds [60766804,60768106] int[] userTag [0,0]
Advantages:
Disadvantages:
It would also be possible to store the structures in NTMultiChannel. (It's not how the type was intended to be used, but for completeness ...). The structure would be
structure anyunion_t[] value string[] channelName string descriptor :opt alarm_t alarm :opt time_t timeStamp :optand a typical value might be
epics:nt/NTMultiChannel:1.0 any[] value any epics:nt/NTScalar:1.0 double value 2.71 alarm_t alarm int severity 1 int status 3 string message HIGH_ALARM time_t timeStamp long secondsPastEpoch<PHONE_NUMBER> int nanoseconds 60766804 int userTag 0 any epics:nt/NTEnum:1.0 enum_t value int index 0 string[] choices [Off,On] alarm_t alarm int severity 2 int status 3 string message STATE_ALARM time_t timeStamp long secondsPastEpoch<PHONE_NUMBER> int nanoseconds 60768106 int userTag 0 string[] channelName [D,E] string descriptor alarm_t alarm int severity 0 int status 0 string message time_t timeStamp long secondsPastEpoch<PHONE_NUMBER> int nanoseconds 61030887 int userTag 0
Advantages:
Disadvantages:
To package together multiple scalar values we could use an NTScalarMultiChannel:
structure anyunion_t[] value string[] channelName string descriptor :opt alarm_t alarm :opt time_t timeStamp :opt int[] severity :opt int[] status :opt string[] message :opt long[] secondsPastEpoch :opt int[] nanoseconds :opt int[] userTag :opt
The simplest case would be just to store the values, along with the channel names. For double PVs D1 and for D2 a typical value might be
epics:nt/NTScalarMultiChannel:1.0 double[] value [2.71,3.14] string[] channelName [D1,D2]
The type can also encode time stamps, alarms for the group as well as for the individual PVs:
epics:nt/NTScalarMultiChannel:1.0 double[] value [2.71,3.14] string[] channelName [D1,D2] string descriptor alarm_t alarm int severity 0 int status 0 string message time_t timeStamp long secondsPastEpoch<PHONE_NUMBER> int nanoseconds 61103269 int userTag 0 int[] severity [1,2] int[] status [3,3] string[] message [HIGH_ALARM,HIHI_ALARM] long[] secondsPastEpoch [1437393283,1437393283] int[] nanoseconds [60766804,60754272] int[] userTag [0,0]
Advantages:
Disadvantages:
A final possibility is that fields of a collection of PVs can be grouped into an arbitrary structure.
Examples might include motor records or similar complex control PVs or hierarchical structures of PVs. (I understand some people like the idea of building a hierarchical structure server-side and others will hate the suggestion. This list is intended to be comprehensive.)
There are number of ways of packaging multiple PVs into a single structure. We wouldn't necessarily want to support all of these but there may be value in supporting more than one, such as a scalar array for getting a collection of PV values or a group or composite for complex control or efficient monitoring.
This suggests careful separation of the presentation of a collection of a group of PVs in a structure from the management of that group of PVs.
Here is the output from getting examples of PVs employing the above structures:
[~]$ pvget -r "field()" D E CompositeValue CompositeStructure GroupValue GroupFull MultiValue MultiAll MultiStruct ScalarMultiValue ScalarMultiAll D epics:nt/NTScalar:1.0 double value 2.71 alarm_t alarm MINOR RECORD HIGH_ALARM time_t timeStamp 2015-07-20T13:00:23.124 0 E epics:nt/NTEnum:1.0 enum_t value Off alarm_t alarm MAJOR RECORD STATE_ALARM time_t timeStamp 2015-07-20T13:00:23.124 0 CompositeValue Composite_ValueStructure double D 2.71 enum_t E Off CompositeStructure Composite_FullStructure epics:nt/NTScalar:1.0 D double value 2.71 alarm_t alarm MINOR RECORD HIGH_ALARM time_t timeStamp 2015-07-20T13:00:23.124 0 epics:nt/NTEnum:1.0 E enum_t value Off alarm_t alarm MAJOR RECORD STATE_ALARM time_t timeStamp 2015-07-20T13:00:23.124 0 GroupValue Group_ValueStructure structure value double D 2.71 enum_t E Off time_t timeStamp 2015-07-20T13:00:23.124 0 GroupFull Group_ValueStructure Group_FullStructure value epics:nt/NTScalar:1.0 D double value 2.71 alarm_t alarm MINOR RECORD HIGH_ALARM time_t timeStamp 2015-07-20T13:00:23.124 0 epics:nt/NTEnum:1.0 E enum_t value Off alarm_t alarm MAJOR RECORD STATE_ALARM time_t timeStamp 2015-07-20T13:00:23.124 0 time_t timeStamp 2015-07-20T13:00:23.124 0 MultiValue epics:nt/NTMultiChannel:1.0 any[] value any double 2.71 any enum_t Off string[] channelName [D,E] string descriptor alarm_t alarm NO_ALARM NO_STATUS <no message> time_t timeStamp 2015-07-20T13:00:23.124 0 MultiAll epics:nt/NTMultiChannel:1.0 any[] value any double 2.71 any enum_t Off string[] channelName [D,E] string descriptor alarm_t alarm NO_ALARM NO_STATUS <no message> time_t timeStamp 2015-07-20T13:00:23.124 0 int[] severity [1,2] int[] status [3,3] string[] message [HIGH_ALARM,STATE_ALARM] long[] secondsPastEpoch [1437393623,1437393623] int[] nanoseconds [123912002,123913343] int[] userTag [0,0] MultiStruct epics:nt/NTMultiChannel:1.0 any[] value any epics:nt/NTScalar:1.0 double value 2.71 alarm_t alarm MINOR RECORD HIGH_ALARM time_t timeStamp 2015-07-20T13:00:23.124 0 any epics:nt/NTEnum:1.0 enum_t value Off alarm_t alarm MAJOR RECORD STATE_ALARM time_t timeStamp 2015-07-20T13:00:23.124 0 string[] channelName [D,E] string descriptor alarm_t alarm NO_ALARM NO_STATUS <no message> time_t timeStamp 2015-07-20T13:00:23.124 0 ScalarMultiValue epics:nt/NTScalarMultiChannel:1.0 double[] value [2.71,3.14] string[] channelName [D1,D2] string descriptor alarm_t alarm NO_ALARM NO_STATUS <no message> time_t timeStamp 2015-07-20T13:00:23.124 0 ScalarMultiAll epics:nt/NTScalarMultiChannel:1.0 double[] value [2.71,3.14] string[] channelName [D1,D2] string descriptor alarm_t alarm NO_ALARM NO_STATUS <no message> time_t timeStamp 2015-07-20T13:00:23.124 0 int[] severity [1,2] int[] status [3,3] string[] message [HIGH_ALARM,HIHI_ALARM] long[] secondsPastEpoch [1437393623,1437393623] int[] nanoseconds [123912002,123895073] int[] userTag [0,0]


iPhone 11 Helps Teach Chicago Students About Photography and Storytelling
by Charlotte HenryApple partnered with 100cameras, a Chicago-based non-profit, over the fall on a program that taught students photography and sold prints of their work. The program was designed to teach both technical skills and explore how visual storytelling can help the children express their emotions.
Learning New Photography Skills With the iPhone 11
25 students from DRW College Prep participated in the flagship program. They were each given an iPhone 11 and took images around Chicago. Subsequently, prints of the images were made available for sale. 100 percent of the profit from picture prints sold went back to local community partner organizations.
One student, called J, said that he learned “that you don’t necessarily have to have the skills or be precise with every shot. A story tells itself. You just got to capture that story, and then convey that story to others.” Apple published some of the work produced by the students. It is very impressive and certainly shows-off the iPhone 11’s capabilities.
Commenting on the program, 100cameras’ CEO Angela Popplewell said:
As the residents of a neighborhood in Chicago that is often overlooked, being given the new iPhone that had been released just a few weeks prior felt like a momentous opportunity. To see how excited they were to utilize the camera tools specific to this model uplifted their creativity even more,” Popplewell says. “It was incredible seeing how they chose to utilize the wide-angle and Portrait modes to really capture their point of view and specific expressions.
Kaiann Drance, Apple’s vice president of iPhone Worldwide Product Marketing said it had been “amazing to collaborate with 100cameras and the talented and creative students at DRW.


*** User 2017-05-05 21:49:27.680 ***
21:49:27.680 [info] Disabling blocking sync...
*** User 2017-05-05 21:49:27.685 ***
21:49:27.685 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-1@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 21:49:29.167 ***
21:49:29.167 [info] Enabling membership...
*** User 2017-05-05 21:49:29.168 ***
21:49:29.168 [info] Disabling blocking sync...
*** User 2017-05-05 21:49:29.173 ***
21:49:29.173 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-2@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 21:49:30.665 ***
21:49:30.665 [info] Enabling membership...
*** User 2017-05-05 21:49:30.666 ***
21:49:30.666 [info] Disabling blocking sync...
*** User 2017-05-05 21:49:30.671 ***
21:49:30.671 [info] Configured peer_service_manager partisan_default_peer_service_manager on node 'node-3@MacBook-Pro-de-Anne-France'
*** User 2017-05-05 21:49:30.937 ***
Joining node: 'node-3@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 51045
*** User 2017-05-05 21:49:30.938 ***
Joining issued: 'node-3@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 51045
*** User 2017-05-05 21:49:30.938 ***
Joining node: 'node-2@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 51028
*** User 2017-05-05 21:49:30.939 ***
Joining issued: 'node-2@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 51028
*** User 2017-05-05 21:49:30.939 ***
Joining node: 'node-1@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 51016
*** User 2017-05-05 21:49:30.940 ***
Joining issued: 'node-1@MacBook-Pro-de-Anne-France' to 'runner@MacBook-Pro-de-Anne-France' at port 51016
*** User 2017-05-05 21:49:31.000 ***
Waiting for join to complete with manager: partisan_default_peer_service_manager
*** User 2017-05-05 21:49:31.001 ***
Finished.
*** CT 2017-05-05 21:49:31.002 *** COVER INFO
Adding nodes to cover test: ['runner@MacBook-Pro-de-Anne-France']
*** CT 2017-05-05 21:49:31.010 *** COVER INFO
Successfully added nodes to cover test: []
*** User 2017-05-05 21:49:31.011 ***
Case finished: sql_join_uncontracted_latency_test
*** User 2017-05-05 21:49:38.053 ***
21:49:38.053 [info] Application lasp exited with reason: stopped
*** User 2017-05-05 21:49:38.053 ***
21:49:38.053 [info] Application partisan exited with reason: stopped
=== Ended at 2017-05-05 21:49:38
=== successfully completed test case
=== Returned value: ok
Test run history
| Top level test index


Past and Present Projects in no particular order
Lab-Pixel Art
Arcade Game
Resturant-Reviews
Memory Game
FaceCard
Simple Calculator
Feedreader Test
More analytics visuals by me are as follows:
Telecommunication Dashboard
HouseHold Dashboard (non-selection view)
HouseHold Dashboard
and lot more (confidential), Ask me for Demos on SPSS, PowerBI, Tableau or Qliksense...
CHECK
Github
Search for churn analysis prediction on my Github ask for more demos too See my first portfolio
here


More details on the Tweets - Natural Language Processing, and code to recreate the results can found at NB-viewer or on our Github.
On the this page the results from our analysis of the 1.6 million tweets extracted, after cleaning and preprocessing, from the politicians will be presented.
In this part TF-TR word-clouds based on the tweets across the three communities will be created. Recall on the page Follow Graph three communities. Where communties could be described as
The TF-TR model is the one made by Professor Sune Lehmann for the course Social graphs and Interactions in lecture week 7 but in this part it will be expanded to handle three documents (communities) rather than two. The modified TF-TR method will be utilized on all tweets posted by the three communities to create word-clouds that characterizes the three communities. The modified TF-TR is used instead of the TF-IDF as there only will be three very long documents, and therefore many words are expected to be dropped due to their IDF being 0. For a longer discussion of TF-TR we refer our Explainer Notebook and Assignment 2. For the three communities, the TR for a term \(t\) with term frequency \(TF_t^{(c)}\), where community \(c \in \{se, rr, dr\}\) is defined as: $$w_t^{(se)} = \frac{TF_t^{(se)}}{TF_t^{(rr)}+TF_t^{(dr)}+k}, \quad w_t^{(rr)} = \frac{TF_t^{(rr)}}{TF_t^{(se)}+TF_t^{(dr)}+k}, \quad w_t^{(dr)} = \frac{TF_t^{(dr)}}{TF_t^{(rr)}+TF_t^{(se)}+k}$$ where \(k\) is a constant which ensures the avoidance of division by zero. It has in this case been set to 1000. This is due to the regualization needed due to the document lengths as there are - on average - more than half a million tweets per document. With this, a TF-TR list for each community can be created where the ranking of term \(t\) in community \(c\) is given by \(TF_t^{(c)} \times w_t^{(c)}\). These lists will then be used for creating the so-called TF-TR word-clouds. Below the resulting word-clouds using the method described above, can be seen for the three communities. The word-clouds are colored based on their party color - i.e. the Republican cloud is red and the Democrat cloud is blue while green is used for the community of the senators.
The senators like to mention elected senators and their titles "sen", "senator". Moreover "nominee", and also "nomination", is quite significant - that is probably due to the fact that in Donald Trump's presidency, where we have data, two new supreme courts judges have been nominated (a third judge was nominated in the fall of 2020 but we only have tweet till May 2020) And the Senate has to approve those that the president nominees. The main word seen for the Republican representatives is "taxcutandjobsact". The reason it is in one word is probably due to it being a twitter hashtag. It was a plan to lower the corporate tax in the US to secure more jobs. Following that theme the word "taxreform" is also seen. Again, many names and states (congressional districts) are seen as well as "foxbusiness", which is a classic Republican news media. They also use "betteroffnow" which is probably due to the fact that there has been a Republican president so they feel that people are better off now. Moving onto the Democrat representatives "forthepeople" jump to the eye which could have been a Democrat campaign. Moreover "goptaxscam" is also seen which is probably how the Democrats feel about the Republican tax reform. "LGBTQ" is also seen as quite significant for the Democrats. "Immigrant" and "black" is also seen - the Democrats probably have a larger focus on these groups. Once again many names are also seen.
Now TD-IDF is carried out a on state level to see if we can localize some keywords that congress members speak about on a state level. The idea is to consider all tweets from politicians that represents a state as one document and tokenize the words. For a more in depth explanation of the TF-IDF we refer to our Explainer Notebook and Assignment 2. In the barplot a quick overview over the number of tokens in each document corresponding to a state can be seen.
From this it can be seen that the document lengths varies a lot. The are only less than 10.000 tokens from American Samoa while there are more than 5.000.000 from California. If any analysis that makes comparison between states had to be carried out this would be important to keep in mind when choosing the frequency measure. This is though not the case for this project so instead we will leave it as an interesting fact. Below the resulting word-clouds for every state after performing TD-IDF on every documemt can be seen.
In general, across all 55 states, their own state name, demonym, and some congressional districts are mentioned often. Some of the districts mentioned are some of those that are more fought for in elections so they are mentioned more. Moreover, many names of politicians from those stats are seen. Some other interesting words to spot in the list:
In this part of the text-analysis, a dispersion plot will be created to see how different words are used across the time period of almost three and a half years. Using some selected keywords it is possible to see when different words trend based on what the politicians tweet.
Some short key takeaways of the selected words:
Let's move onto a sentiment analysis of the tweets. The analysis will be centered around the three communities found previously. To carry out this analysis the sentiment scores used in class found here are also used for this analysis.
| Community | Sentiment Score |
|---|---|
| (SE) Roughly all Senators | 5.4526 |
| (RR) Roughly all Repulican Representative | 5.4961 |
| (DR) Roughly all Democratic Representatives | 5.4497 |
The scores are seen to be fairly close to each other with values around close to 5.5. Here, it should be noted that a neutral score is 5, so that means that all three communities are slightly positive. It would be interesting to know how the communities feel about different topics. Below a table summarizing how the, previously mentioned, three communities feel about the topics from the dispersion plot can be seen.
| Word | SE | RR | DR |
|---|---|---|---|
| covid | 5.448427 | 5.457984 | 5.445684 |
| obamacare | 5.352579 | 5.388522 | 5.298308 |
| trumpcare | 5.298128 | 5.422571 | 5.310299 |
| biden | 5.380261 | 5.264630 | 5.416168 |
| climate | 5.416446 | 5.416446 | 5.416446 |
| amazon | 5.492679 | 5.583696 | 5.494438 |
| taxcutandjobsact | 5.564140 | 5.533015 | 5.569412 |
| impeachment | 5.329586 | 5.306957 | 5.351386 |
| china | 5.385126 | 5.408563 | 5.386268 |
| wall | 5.337919 | 5.373220 | 5.329724 |
| mexico | 5.505136 | 5.523487 | 5.456053 |
| nominee | 5.375035 | 5.483819 | 5.382862 |
In general, it is seen that sentiment scores for the community are slightly positive, and taking the average sentiment per community into account they seem even more neutral with values being fairly close to the average. Some of the interesting takeaways are highlighted below:
On Twitter a person can tag another using the add-symbol "@". The next analysis will focus on how positive the politicians are when tagging each other. This will be done by looking at the sentiment in tweets where one politician tag another. In the table below it can be seen how the three commuties mention each other.
| DR | RR | SE | |
|---|---|---|---|
| DR | 5.52306 | 5.48723 | 5.49105 |
| RR | 5.51957 | 5.53238 | 5.50991 |
| SE | 5.68092 | 5.72002 | 5.51831 |
Interestingly the politicians are more positive here than their general average sentiment. The Democrats and Republicans are fairly consistent with a slight preference towards their own party. Looking at the senators it is quite interesting to see that they are negative towards themselves compared to the representatives. It is suspected that this can be due to the fact that the senator community includes senators from both parties. Therefore we will split this community into two - one with Republicans and one with the Democrats and the Independents and Libertarians. The result is displayed in the table below
| Democrat Senators | Democrat Representative | Republican Representative | Republican Senators | |
|---|---|---|---|---|
| Democrat Senators | 5.52306 | 5.50838 | 5.48723 | 5.44685 |
| Democrat Representative | 5.71652 | 5.51745 | 5.91191 | 5.52731 |
| Republican Representative | 5.51957 | 5.49621 | 5.53238 | 5.51917 |
| Republican Senators | 5.52259 | 5.51997 | 5.54933 | 5.51087 |
It is now seen that it is, in general, the Democratic senators that are very positive - and surprisingly it is especially towards the Republican Representatives. The Republican senators are more comparable to the Republican representatives. It can also be seen that the representatives are slightly more positive towards the senators from their own party.
In this part, various measures of natural language processing have been used to analyze the tweets taking a start in the communities found in the Who-follow-who graph. First TF-TR was carried out on the full set of tweets across the three communities to find important words in the communities. The results were illustrated as word clouds. Some of the words that were seen did make sense but in general, it was dominated by names. Some meaningful takeaways could be found even though names again were dominant. Afterwards, TF-IDF was carried out on a state level - leading to 55 documents - where word clouds again were used to illustrate the results. We also created a lexical dispersion plot to see how the usage of some words varied in time where many of the results made sense thinking back on the last four years of American politics if one follows that.
The last analysis was focused on the sentiment of the tweets - again based on the communities. Here we investigated how the communities felt towards different words where small differences could be seen. Lastly, it was also investigated how positive the politicians wrote when tagging each other. Interestingly Democratic senators were found of Republican representatives but besides that, the results were as expected - but the differences were fairly minor.


Sakura Asahi Kenko Marathon
Sakura JPN
Race Winners
(35 runnings)
25
Mar
2007
26 Mar
2006
27
Mar
2005
07
Mar
2004
02
Mar
2003
03
Mar
2002
04
Mar
2001
05
Mar
2000
07
Mar
1999
01
Mar
1998
02
Mar
1997
1996
05
Mar
1995
06
Mar
1994
07
Mar
1993
01
Mar
1992
Note: 1982 was the inaugural year. The 2000 race was held in conjunction
with the Japanese Student Marathon Championship; the first finishers in the
Sakura Asahi Kenko competition were Toru Iwabuchi (2:34:00) and Sachiko Kawabe
(3:12:21).
26 Mar
2017
2:23:42
Naoki Inoue-3
2:57:25
Yuki Mizuseda (JPN)
27
Mar 2016
2:20:10
Naoki Inoue-2
2:54:01
Ayami Nagano (JPN)
24
Mar 2015
2:25:42
Naoki Inoue (JPN)
2:58:21
Miki Kato (JPN)
30 Mar
2014
2:27:44
Yasuo Ito-2
2:58:36
Mayumi Uchiyama (JPN)
24
Mar 2013
2:27:00
Yasuo Ito (JPN)
2:58:30
Emi Matsutani (JPN)
25
Mar 2012
2:26:28
Masakazu Takahashi-4
2:57:42
Yuho Kimura (JPN)
2011
---
not held due
to East Japan earthquake
---
not held
28
Mar 2010
2:27:37
Masakazu Takahashi-3
3:06:46
Yukiko Shirahama (JPN)
29
Mar
2009
2:26:03
Masakazu Takahashi-2
2:56:53
Masako Kusakaya (JPN)
30 Mar
2008
2:27:29
Masakazu Takahashi (JPN)
2:58:57
Yumi Otani (JPN)
2:34:36
Naoki Hirasawa-2
3:12:45
Natsuko Kaku (JPN)
2:33:12
Naoki Hirasawa (JPN)
2:54:14
Norimi Sakurai (JPN)
2:33:11
Masahiro Konishi (JPN)
3:00:06
Kazuha Matsui (JPN)
2:34:57
Yusuke Takeuchi (JPN)
3:14:18
Natsuko Koyama (JPN)
2:29:31
Kazuo Yamanaka + Hiroyuki Watanabe (JPN)
3:07:26
Yukie Udagawa (JPN)
2:35:10
Toru Iwabuchi-2
3:12:58
Sadako Fujiwara (JPN)
2:41:45
Kiyotaka Nagasawa (JPN)
3:11:32
Mitsuko Nakayama (JPN)
2:23:48
Takayuki Masatsuna (JPN)
2:45:14
Akiko Koide (JPN)
2:27:25
Atsushi Naito (JPN)
3:06:55
Emiko Kuramochi (JPN)
2:32:43
Tadaaki Sumitani (JPN)
3:10:02
Masako Koyama (JPN)
2:28:09
Toru Iwabuchi (JPN)
2:52:22
Emi Yokoyama (JPN)
---
n/a
---
n/a
2:29:15
Koichi Kurita (JPN)
2:59:16
Aiko Suzuki-5
2:26:46
Masanobu Nishimura (JPN)
2:59:03
Aiko Suzuki-4
2:28:42
Daisuke Uehara (JPN)
2:58:23
Aiko Suzuki-3
2:29:37
Takekatsu Hutatsugami (JPN)
3:02:23
Naoko Okamoto-2
03
Mar
1991
2:30:15
Tatsuo Kurihara (JPN)
3:07:24
Naoko Okamoto (JPN)
04
Mar
1990
2:28:28
Tatsuo Furusako (JPN)
3:04:30
Saeko Matsue (JPN)
05
Mar
1989
2:28:44
Yoshiki Yoshida (JPN)
2:57:38
Aiko Suzuki-2
06
Mar
1988
2:26:50
Michio Eto (JPN)
3:01:52
Aiko Suzuki (JPN)
08
Mar
1987
2:24:58
Yuji Kawasaki (JPN)
3:05:06
Miho Kishida (JPN)
09
Mar
1986
2:28:39
Kenichiro Kajimoto (JPN)
2:59:23
Keiko Imura-2
10
Mar
1985
2:23:25
Tatsuhiro Masubuchi (JPN)
3:03:58
Eiko Abe (JPN)
04
Mar
1984
2:23:31
Yuji Kawasaki (JPN)
3:12:38
Keiko Imura (JPN)
06
Mar
1983
2:26:29
Yoshihiro Okazawa (JPN)
3:11:03
Toshiko Shigematsu (JPN)
14
Mar
1982
2:33:09
Haruhiko Akiba (JPN)
3:25:16
Takako Shinei (JPN)
Most Wins (1982/date)
Men
4
Masakazu Takahashi (JPN)
2008-10,2012
Women
5
Aiko Suzuki (JPN)
1988-89,1993-95
Prize Money
(ADR qualified runners)
Prize money cannot be awarded in Japanese road races due to legal restrictions.
Race Time Bias
(sec/km)
Insufficient data to calculate the race time bias.
Competitive Level
(1990-date)
Insufficient data to calculate the competitive level.
Quality Performances
Men
none under 2:20
Women
<2:46 1
<2:48 1
<2:50 1
Last Updated on 04 Apr 2017
Contributors: Shigenobu Ota (50), Klaas Loonstra (5), Brett Larner (5)


--- layout: post title: Battlelog API Update (Again) date: 2011-10-24 19:43:33.000000000 -05:00 categories: - Projects tags: - battlelog - battlelogapi - bf3 - bugfix - php - programming - projects - update status: publish type: post published: true meta: _edit_last: '1' author: login: Blake email<EMAIL_ADDRESS>display_name: Blake first_name: Blake last_name: Harley ---
I made a few quick changes that should help those of you who are running versions of PHP less than 5.3. Specifically, the ternary operator (without the middle parameter) and DateTime::setTimestamp()
were causing problems.
Since I don't have any servers running anything older than PHP 5.3.0, I'll need you guys to point out any further problem areas. Maybe I'll see if I can find an old server I can throw PHP 5.2 on for testing.
In the meantime, feel free to head over to the project page and grab the latest copy.


|
||||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
See:
Description
| Interface Summary | |
|---|---|
| AttachCallback | This interface is used to notify instances of attach events. |
| AttachLifecycleListener | This interface is implemented by listeners to be notified of attach events. |
| ClearCallback | This interface is used to notify instances of clear events. |
| ClearLifecycleListener | This interface is implemented by listeners to be notified of clear events. |
| CreateLifecycleListener | This interface is implemented by listeners to be notified of create events. |
| DeleteCallback | This interface is used to notify instances of delete events. |
| DeleteLifecycleListener | This interface is implemented by listeners to be notified of delete events. |
| DetachCallback | This interface is used to notify instances of detach events. |
| DetachLifecycleListener | This interface is implemented by listeners to be notified of detach events. |
| DirtyLifecycleListener | This interface is implemented by listeners to be notified of dirty events. |
| InstanceLifecycleListener | All lifecycle listeners extend from this base interface. |
| LoadCallback | This interface is used to notify instances of load events. |
| LoadLifecycleListener | This interface is implemented by listeners to be notified of load events. |
| StoreCallback | This interface is used to notify instances of store events. |
| StoreLifecycleListener | This interface is implemented by listeners to be notified of store events. |
| Class Summary | |
|---|---|
| InstanceLifecycleEvent | This is the event class used in life cycle event notifications. |
This package contains the JDO specification listener interfaces and classes.
There are two kinds of interfaces defined to allow an application to manage life cycle changes to persistent objects.
The first kind is defined
on the persistent domain class itself. This allows methods in the domain class
to be called during life cycle events. The domain class implements one or more
of the interfaces
AttachCallback
,
ClearCallback
,
DeleteCallback
,
DetachCallback
,
LoadCallback
, or
StoreCallback
.
The methods in the interfaces
are called during life cycle events.
The second kind is defined on an external class using the listener pattern.
Instances of classes that implement one or more of the listener interfaces
AttachLifecycleListener
,
ClearLifecycleListener
,
CreateLifecycleListener
,
DeleteLifecycleListener
,
DetachLifecycleListener
,
DirtyLifecycleListener
,
LoadLifecycleListener
, or
StoreLifecycleListener
are registered
with the PersistenceManager or PersistenceManagerFactory
and receive callbacks during life cycle events
of the persistent instances of interest.
|
||||||||||
| PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |


:: com :: sun :: star :: drawing ::
|
| service ShadowProperties |
- Description
- This is a set of properties to describe the style for rendering a shadow.
|
| Properties' Details |
Shadow
boolean Shadow;
- Description
- enables/disables the shadow of a Shape.
The other shadow properties are only applied if this is
set to true.
|
|
ShadowColor
::com::sun::star::util::Color ShadowColor;
- Description
- This is the color of the shadow of this Shape.
|
|
ShadowTransparence
short ShadowTransparence;
- Description
- This defines the degree of transparence of the shadow in percent.
|
|
ShadowXDistance
long ShadowXDistance;
- Description
- This is the horizontal distance of the left edge of the
Shape to the shadow.
|
|
ShadowYDistance
long ShadowYDistance;
- Description
- This is the vertical distance of the top edge of the
Shape to the shadow.
|
|
Top of Page
Copyright © 2013, The Apache Software Foundation, Licensed under the Apache License, Version 2.0. Apache, the Apache feather logo, Apache OpenOffice and OpenOffice.org are trademarks of The Apache Software Foundation. Other names may be trademarks of their respective owners.


Sports
Paradise Honors High School Football 7/2017 - Present
Member since 2017, learned patience in tough situations, learned about brotherhood and family, learned how to
be a good leader and friend, learned how to function as a whole.
Paradise Honors High School Soccer 11/2016-2/2017
Member since 2016, ilearned that the best thing you can do as a part of a team is do your job, nothing more
nothing less. Unless help is asked for you intervention may in fact be a hindrance, and accountability is very
important if you cantadmityoumadea mistake its harderto improve on it.
Clubs
Key Club 8/2016-5/2018
Member since 2016, learned patience in tough situations, learned about brotherhood and family, learned how to
be a good leader and friend, learned how to function as a whole.
Debate Club 8/2017- 5/2018
I was a helper in this club at their weekly meeting so I was taught how to argue my case and to take in and
find flaws in other arguements.


These teams are currently set up in the MapSwipe app.
| Team ID | Name | Token | Members |
|---|
Click the button for one of the teams above to display team members. (Note: this shows all contributions and thus might also contain contributions to non-private projects.
| User ID | User Name | Project Contributions | Group Contributions | Task Contributions |
|---|


Chirath is a Developer and Open Source Enthusiast. He is interested in Web development, Machine learning and technology in general.
He was an active member of the FOSS club at Amrita Vishwa Vidyapeetham, Amritapuri and has made contributions to open source projects like Debian Distro Tracker.

- Battery status, Network speeds, and Data usage.
- Change WiFi SSID name and password.
- View and Block connected WiFi devices.
- Enable the WPS push button.
- Restart JioFi device.
- Show notifications for low, full battery.
- Beautiful Dark material design theme.
A system to handle user authentication and product management for VillaSpa, a startup based in Sweden. Simple and intuitive design to makes the website fast and easy to use.
Developed a system to handle authentication(login, registration, password reset and password change) and product management(list, update and view product information). Developed a REST API with a JWT token-based authentication system to handle product information and registration. The UI was developed using Bootstrap 4 and jQuery.
A system that handles student details, progress, events, achievements, attendance, status updates, teams and workshop registrations.
Used Gmail and Telegram API to automated status update and attendance reports. REST API with a JWT token-based authentication system. APIs for attendance that uses a client program to automate marking attendance. Registrations for various events, workshops and student applications. Light, simple and easy to use UI using Bootstrap 4 and JavaScript.
A self driving car model that uses machine learning and image recognition to navigate a track.
Trained an artificial neural network that predicts driving directions from the camera feed. Build the RC car with motor controllers, servos, ultrasonic sensors, camera and a Raspberry Pi. Server-client services that control movement and sensor data across the network. Haar cascade models to detect sign boards and traffic lights.
Raspberry Pi 3, Pi camera, Ultrasonic sensors, Motor controller(L298N), Servo and DC motors, 18650B cells, Step down 5V DC, Li-ion charging circuit
A Capture The Flag(CTF) platform to spread awareness among school and university students about various cyber attacks.
Developed the CTF challenge page, registration, and scoreboard system using Python and Flask. Designed the challenges page using AngularJS to display and accept solutions to problems. Worked with a team of 7 to design an RPG style game that helps keep the interest of students.
Designed a template for displaying team packages overview for Debian Distro Tracker.
A web UI for listing challenges and an online editor for working with code snippets.
A simple static website for a laundry startup in Vallikavu.
The increased number of cyber attacks and sophistication of the attacks makes it necessary for us to be well informed of safeguarding the security of the technologies that we use. This two day workshop on Cyber Security exposed students to various dimensions on Cyber security issues and safety. This workshop was conduced in collaboration with the BIKOS project.
Took two day workshop on Web development, Python and Linux for the students at Amrita Vishwa Vidyapeetham, Amritapuri. In collaboration with FOSS@Amrita.
Took a 10 day workshop on web development using Python Django framework. The students were introduced to HTML, CSS and JavaScript. Python and then Django. They were also able to deploy their sites using pythonanywhere.com.